目的
无意在ARM官网上看到了N2的参考设计文档,一眼就被惊艳了。主要有两点:
- 这个文档的视野非常全面,作为一个参考架构设计文档,值得推荐和学习
- 这个文档不仅公开了软件设计,也公开了硬件设计,范围不只覆盖了AP,还覆盖了功耗core,RAS core,非常全面了
服务器硬件形态
N2的硬件架构图就是一个典型的服务器硬件架构,一般板级形态上还有BMC、CPLD等协同。
服务器软件形态
软件形态主要是解释各处理器的职责。
在N2的架构中,SCP处理器用来做启动、复位、时钟和电源管理。
MCP处理器用来做RAS,并和带外的BMC通信。SCP和MCP均是ARM M7 core。
AP处理器运行Arm Trust Firmware、UEFI和Linux Kernel操作系统。
AP和协处理器之间的通信协议
SCP、MCP和AP之间一般通过SCMI协议进行通信。
SCMI通信的基地址一般通过ACPI的PCCT(platform communication table)呈现给AP,PCCT的具体定义可以在ACPI规范的14章找到,示例如下图:
电源管理-SCP
结合ARM 参考软件栈,流程如下图(引用自Power and Performance Management using Arm SCMI Specification):
RAS处理-MCP
ARM定义了一套RAS处理机制SDEI,一旦发生了RAS错误,Firmware会通知Linux Kernel。
但是通常来讲如果有了RAS专用处理核,一般都走ACPI的APEI机制。
带外管理-BMC
服务器一般还带一个BMC芯片做带外的板级管理,BMC主要用来管理风扇,电源,固件升级,远程控制等,具体功能如下图
涉及到的协议,总线和功能一般如下:
AP和BMC一般有LPC、USB、PCIe、SMBUS总线等。PCIe一般用于KVM(键盘、鼠标和显示的重定向);
USB多用于虚拟磁盘,通过它支持光盘、ISO镜像用于安装操作系统。
BMC和AP之间的接口叫作system interface,简称SI,常见的SI有KCS、SMIC、BT和SSIF传输协议,这些协议均已被Linux Kernel主线支持,
以Amper为例,实际上板级结构如下图
内核的驱动在 drivers/char/ipmi
中:ipmi_ssif.ko
: 支持通过SMBUS接口和发送消息ipmi_si.ko
: 对应system interface,一般都使用该驱动,支持platform、acpi、SMBIOS(DMI)和PCIipmi_msghandler.ko
:实现IPMI协议ipmi_devinf.ko
: 对外呈现ipmi设备,比如/dev/ipmi0
,提供设备的IOCTL操作
BMC virtual-meida 安装系统
BMC一般提供一个网络界面,这个界面上用户可以上传一个ISO,远程的服务器可以读取该ISO来安装系统。
这个机制一般通过如下机制实现参考openBMC实现
可信度量启动
如果要支持可信度量启动,一般还会加上TF-M(PSA Firmware)。
如果还要支持运行时安全(runtime security subsystem),一般会在TF-M中加上RSS,在N2的参考设计中,这是一个M55的core。
加上可信度量和运行时安全core之后,整个启动过程如下图:
二进制构成和Flash layout
TF-M分成三部分:TF-M BL11, BL12, BL2。其中BL11是出厂时烧在TF-M芯片的ROM中,其它在flash里面。
Flash的构成可以参考N2 TF-M BL2的代码
或者flash_layout.c
/* Flash layout on RSS with BL2 (multiple image boot):
*
* 0x3100_0000 BL2 - MCUBoot (64 KB)
* 0x3101_0000 BL2 - MCUBoot (64 KB)
* 0x3102_0000 Secure image primary slot (384 KB)
* 0x3108_0000 Non-secure image primary slot (384 KB)
* 0x310E_0000 Secure image secondary slot (384 KB)
* 0x3114_0000 Non-secure image secondary slot (384 KB)
* 0x311A_0000 SCP BL1 primary slot (512 KB)
* 0x3122_0000 SCP BL1 secondary slot (512 KB)
* 0x312A_0000 MCP BL1 primary slot (512 KB)
* 0x3132_0000 MCP BL1 secondary slot (512 KB)
* 0x313A_0000 LCP BL1 primary slot (64 KB)
* 0x313B_0000 LCP BL1 secondary slot (64 KB)
* 0x312A_0000 AP BL1 primary slot (512 KB)
* 0x3132_0000 AP BL1 secondary slot (512 KB)
*/
把不同二进制打包成一个二进制,可以参考fiptool这个工具
fiptool create \
--align 8192 --rss-bl2 bl2_signed.bin \
--align 8192 --rss-ns tfm_ns.bin \
--align 8192 --rss-s tfm_s.bin \
--align 8192 --rss-sic-tables-ns tfm_ns_sic_tables_signed.bin \
--align 8192 --rss-sic-tables-s tfm_s_sic_tables_signed.bin \
--align 8192 --rss-scp-bl1 <signed Host SCP BL1 image> \
--align 8192 --rss-ap-bl1 <signed Host AP BL1 image> \
fip.bin
以SCP二进制为例,在flash上的布局如下:
参考
- Arm Neoverse N2 reference design Technical Overview
- Neoverse Reference Design Platform Software
- The Forbidden Arm Server that is Banned in the US
- AST2500 NC-SI功能调试
- System Control & Management Interface
- Power and Performance Management using Arm SCMI Specification
- 使用SDEI上报RAS故障
- Explaining the Baseboard Management Controller or BMC in Servers
- IPMI Basics
- x86服务器BMC基板管理控制器介绍
- BMC常见接口协议
- IPMI的几个问题
- IPMI2:ipmi逻辑设备
- BMC virtual media
- 服务器BMC与IPMI基础知识
- Ampere Altra 64-Bit Multi-Core Processor Platform Hardware Design Specification
- Arm Corstone-1000
- Arm Neoverse N2 Automotive Reference Stack Documentation