2021年4月1日,龙芯架构(LoongArch)下的中断模型被正式批准写入ACPI规范,成为继x86、ARM64架构之后,第三种ACPI规范支持的CPU架构。
ACPI为何成为市场通用性规范
ACPI是高级配置及电源管理接口规范的英文缩写,至今已发展到6.4版本。在原有的APM、PNP BIOS、MP等规范的基础之上,ACPI统一形成了适用于各整机厂商、固件厂商、操作系统厂商的协议规范,打破了原有规范协议各自分散,互不通用的局面。通过ACPI表的配置,ACPI规范可实现不同硬件设计需求的灵活配置和以操作系统为主导的电源管理,操作系统因此可以兼容不同硬件的设计,实现电源管理硬件与操作系统的独立创新,极大地促进了通用PC和服务器行业的发展。
图1 ACPI与PC硬件、软件之间的关系框图
龙芯中科为加入ACPI所做的努力
为更好地服务产业链伙伴,延伸龙芯自主架构的适用面积,扩大自主生态建设,龙芯中科决定告别原MIPS架构下的自有标准,与市场主流规范接轨,经过1年多的研发攻关,龙芯中科已在处理器、芯片组、外设配置及运行时阶段全面支持ACPI规范,实现了相关软件的标准化配置,增强了整机硬件与操作系统的兼容性。
在适配ACPI规范的研发过程中,龙芯中科研发人员发现当前的ACPI规范在中断模型的规定上,不适用于龙芯LoongArch架构平台。为了解决多核枚举和中断控制器枚举的问题,龙芯团队创建了独立于x86、ARM64的第三套中断模型,通过修改ACPI公共框架,自主定义中断控制器结构,完成了在Linux内核、UEFI固件、ACPICA的验证。
在中断模型中龙芯中科自主定义了7种中断控制器结构:CORE PIC(处理器核中断控制器)结构、LIO PIC(传统IO中断控制器)结构、EIO PIC(扩展IO中断控制器)结构、HT PIC(HT中断控制器)结构、BIO PIC(桥片中断控制器)结构、MSI PIC(MSI中断控制器)结构、LPC PIC(LPC中断控制器)结构,7种中断结构可完整描述龙芯通用处理器中断系统的拓扑关系,并兼容了龙芯下一代中断模型。龙芯中断模型为龙芯通用PC、服务器领域的整机设计过程中提供了统一的中断配置方法,在遵循ACPI规范的龙芯平台通过定义的各级中断控制器结构可实现中断控制器的级联,从而实现同一操作系统对不同硬件平台中断系统的兼容性。
图2 龙芯中断控制器结构类型表
为了将验证后的龙芯中断模型在LoongArch架构处理器上实现产品化,并推向Linux内核社区,龙芯中科向国际ACPI工作组提交了申请,将LoongArch架构的中断模型写入规范,为龙芯中断模型在Linux内核中的规范化奠定基础,为Linux内核上游社区支持规范化的龙芯中断系统提供依据。后期,该中断模型将随LoongArch一并提交社区,吸收汇集广大开发者的智慧。
图3 龙芯中科提交ACPI规范修改申请的说明
为推动ACPI规范申请尽快落实,龙芯团队负责人从春节开始,每周定期参加ACPI工作组线上评审会议,与工作组评审人员讨论龙芯中断模型的级联原理及每种中断控制器结构的中定义的元素。经过近2个月的反复沟通,以及对评审意见的及时改进,龙芯团队在4月1日当天正式收到批复确认通知“Approved as new content without changes”,ACPI规范将从6.5版本开始支持龙芯中断模型。
图4 评审沟通过程
从自有标准到行业标准,此次入选,是龙芯平台中断模型发展的一小步,但更是龙芯自主生态与市场接轨的一大步。未来,龙芯中科还将继续参与ACPI、UEFI等相关行业标准的制定,发挥市场主导作用,承担企业责任,与龙芯生态伙伴一起,共筑开放的龙芯生态体系。