3.系统互连
系统互连(System interconnect)是英飞凌AURIX™微控制器中用于连接各种主代理(master agents)和从代理(slave agents)的关键架构,它允许这些代理之间相互通信。系统互连被设计来满足主代理和从代理之间不同数据流的带宽和延迟要求。
系统互连由以下几个部分组成:不同的互连段(interconnect segments)和互连协议(interconnect protocols)。在不同的互连段之间实现了桥接(bridges),使得系统中的任何一个主代理都能够访问任何一个从代理,除非由于安全或其他原因被明确禁用。这种设计结果是一个统一的系统地址映射,系统中的每个部分都可以被每个主代理访问。这些桥接及其能力在SRI章节中有更详细的描述。
- 系统资源互连(SRI)协议(see SRI)
- 系统资源互连(SRI)是一个64位的互连结构,用于将TriCore™ CPUs、系统DMA以及其他高带宽请求者连接到高带宽内存和其他资源,以进行指令获取和数据访问。
- SRI结构通过端到端的EDC和其他安全机制提供安全性
- SRI结构实现了SRI协议,并由多个交叉开关组成,标记为SRIx(x = 0-4)
- 灵活外设互连(FPI)协议(详见FPI)
- FPI是一个32位的多主控互连
- FPI实现通过端到端的EDC和其他安全机制提供安全性
- 以下互连段实现了FPI协议
- 系统外设互连(SPB):SPB将TriCore™ CPUs、系统DMA以及其他SPB主控设备连接到中带宽和低带宽的功能模块
鱼仔注释:系统DMA(Direct Memory Access,直接内存访问)是一种允许某些硬件子系统直接访问系统内存的技术,而无需中央处理单元(CPU)的介入。
-
-
- 转换器外设互连(CPB):CPB将TriCore™ CPUs和系统DMA连接到GTM和ADC功能模块
- 网络安全外设互连(CSPB):CSPB将CPUcs连接到专用的CSRM功能模块
- 工具外设互连(TPB):TPB将主控设备连接到追踪(TRACE)功能块及其相关联的功能块
-
- 支持用户扩展的AMBA AXI3和AXI4协议(详见LLI)
- AMBA AXI3和AXI4协议可以用来实现不同宽度和拓扑结构的互连段
- 低延迟互连(LLI)实现了一个混合的AMBA AXI3和AXI4 32位互连,它由一个单一的交叉开关组成,具有有限数量的主代理和从代理
- LLI实现通过端到端的EDC和其他安全机制提供安全性,这些机制作为用户扩展实现在AMBA AXI3和AXI4协议中
- LLI为PPU和其他SRI主控设备到PPU配置和调试寄存器、eGTM、HRPWM(如果设备上存在)和TMADC提供了一条低延迟路径
3.1.主代理功能标识符
系统互连上的每个主代理功能都被分配了一个唯一的主代理功能标识符(ID)。主代理功能标识符在任何系统互连事务的地址阶段被传输,并且可以通过从属功能接口的访问保护机制用来限制主代理功能对其内部资源的读写访问。主代理功能ID与从属代理中的访问保护结合使用,用于多种系统功能,如访问保护、软件封装、硬件虚拟化、软件调试和追踪。
主代理功能ID由以下组成:
- 标签ID,主代理功能标签标识符(TAG ID),6位
- VM,虚拟机信息(VM),3位,可选信息
- VM_VALID,表示是否使用传输的VM的信号(虚拟机有效性指示器)
- PRS,保护寄存器信息(PRS),3位,可选信息
- PRS_VALID,表示传输的PRS是否被使用的信号(PRS有效性指示器)
未使用虚拟机信息作为其主代理功能ID的主代理将虚拟机有效性指示器驱动为0B。同样,未使用保护寄存器信息作为其主代理功能ID的主代理将保护寄存器有效性指示器驱动为0B。
3.1.1.主代理功能标签ID分配
下表列出了微控制器中每个主代理功能的主代理功能标签标识符(TAG ID)。
注:当TAG-ID分配给多个功能时,确保在专用设备中只有一个功能是可用的。例如:分配给SDMA1和RIF0/1、RMEM、RDMA的TAG-ID。
3.2.访问保护
系统互连提供了访问保护机制,使应用软件能够限制每个从设备功能的读写访问,仅限于一组特定的主设备代理功能。
这些访问保护机制可用于为应用软件实例分配系统功能、CPU、易失和非易失存储器、通信功能、DMA资源分区和中断路由服务请求节点等片上资源。这可以用来分区MCU资源。在多个应用程序之间,并提供这些应用程序之间的逻辑自由。同时支持CPU hypervisor功能,对虚拟机ID和PRS粒度进行访问保护控制。
系统互连访问保护机制是TC4xx安全和安全架构的一个重要特性。
3.2.1.功能列表
- PROT机制提供了将一组寄存器的所有权分配给单一主设备代理功能的能力,这个主设备代理功能被称为PROT所有者
- 分配完成后,只有PROT所有者才能锁定或解锁受保护的寄存器,并修改它们
- 访问保护单元(APU)提供了保护和限制对从设备功能的读写访问的能力
- 访问保护单元(APU)可以被配置为允许对每个主设备代理功能对从设备功能的无访问、只读访问、只写访问或读写访问
- 主设备代理功能通过一个主设备代理功能标识符来识别,该标识符包括一个6位的TAG-ID、一个可选的3位虚拟机(VM)ID以及一个可选的3位保护寄存器集(PRS)ID
- 对于系统存储器,APU允许通过指定保护区域的起始地址和结束地址来配置存储器区域中较小区域的保护
3.2.2.功能概述
访问保护通过在从设备接口处根据发起访问的主设备代理功能来控制访问来实现。每个具有互连控制能力的芯片上资源都有一个独特的主设备代理功能标识符,包括TAG ID、VM ID和PRS ID,这些可以用来识别芯片上事务的来源。每个从设备功能根据需要实现寄存器和存储器访问保护,以提供不同应用软件实例尝试访问该从设备功能时的相互干扰自由度。
3.2.3.功能描述
在从设备接口中,访问保护是通过两个相互作用的功能来实现的
- PROT机制允许对寄存器组进行粗粒度的访问保护
- 它通常被用来保护那些没有被APU(访问保护单元)保护的寄存器(例如,APU自身的寄存器)
- 它允许为主机代理函数安全、可靠地分配资源。每个寄存器组可以分配给一个单一的PROT所有者主机代理函数
- 它为寄存器组提供写保护
- 它还允许软件锁定控制和配置寄存器,防止进一步修改,并且在需要时以安全和可靠的方式稍后解锁这些寄存器
- 访问保护单元(APU)为与特定功能相关的寄存器组或易失性和非易失性存储器提供细粒度的访问保护
- 每个寄存器组可以从可配置的一组主设备代理功能中启用访问
- 它提供独立的控制功能,以允许一组主设备代理功能进行只读访问、只写访问、读写访问,或者禁止它们进行访问
- 它也可以用来为存储器的可配置区域提供访问保护,允许在不同主功能组之间安全且可靠地划分存储器
访问保护逻辑(包括PROT和APU)在应用复位时被重置,并且不会受到模块复位或内核复位的影响。
每个连接到系统互连的功能模块通过一个或多个PROT和APU实例实现对其从设备功能的访问保护。每个功能模块中每个寄存器的访问保护细节都提供在该功能模块特定的寄存器概览表中。此表包含列,指定了每个寄存器的读写访问保护机制,包括提供保护的PROT、APU或其他机制的详细信息。
3.2.3.1.保护机制
“PROT”资源保护概念利用PROT状态机、PROT寄存器和访问门来控制对受保护寄存器的访问,从而实现对受保护资源本身的控制。
涉及到PROT概念的软件参与者有:
- PROT所有者:一个可配置的主设备代理功能,被允许配置PROT以及受保护的资源寄存器
- 安全主控:任何被启用用于网络安全(CS)系统互连访问的主设备代理功能,例如CPUcs。与安全相关的交易通过系统互连上驱动的硬件信号来识别
用于实现PROT概念的硬件模块包括:
- 保护机制
- PROT状态机:一个在每个状态中都有一组定义好的转换的状态机。当前状态用于控制访问门
- PROT寄存器:允许配置和查看PROT所有者和PROT状态
- PROT寄存器的访问门:根据PROT所有者控制对PROT寄存器的访问
- 受保护的寄存器:配置或控制受保护功能的一组寄存器,这些寄存器必须受到保护,以防止不安全或非安全的修改
- 受保护的功能:由受保护寄存器配置或控制的模块或逻辑
- 受保护寄存器的访问门:利用当前的PROT状态和PROT所有者的信息来控制对受保护寄存器的访问,以实现保护
PROT概念中的‘保护’方面是通过确保关键操作(如配置)只能由PROT所有者在特定状态(这些状态不是正常操作状态)下执行来实现的。这些关键状态只能通过特定的PROT状态转换来达到,而这些转换又是由特定的主控设备触发的。
需要同时保证安全和安全性的资源是通过让(安全的)PROT所有者进行配置,然后让安全主控在配置生效之前检查配置来处理的
3.2.3.1.1.PROT状态机
PROT状态机有一组保护状态以及这些状态之间可能的转换。每个转换还标注了被允许触发该转换的主代理功能。
状态转换通常由对PROT寄存器中STATE字段的显式软件写入触发,除了以下情况:
- 在应用复位信号被断言时,PROT状态机将转换到初始化状态(Init state)
- PROT状态机在初始化状态(Init state)时,会响应init_done输入信号的断言而转换到运行锁定状态(RunLock state)。
- 对于与网络安全相关的PROT实例,init_done输入信号的断言由CSCU_INIT.DONE位字段控制。有关网络安全相关PROT实例的列表,请参见CSRM章节
- 所有其他PROT实例的init_done输入信号的断言由SMM_STCON.PINIT_DONE位字段控制
相关信息
控制 INIT_DONE
初始化状态
PROT状态机重置到初始化状态(Init state)。在该状态下,可以修改受保护功能的配置。预期的用法是,在复位后,软件在初始化状态下进行受保护功能的初始配置,然后设置PROT所有者,并转换到运行(Run)、运行锁定(RunLock)或安全运行(RunSec)状态之一。
RunLock状态
运行锁定状态(RunLock state)用于那些只需要配置一次,直到下一次应用复位之前不需要重新配置的功能。
在运行锁定状态(RunLock state)下,受保护的寄存器不能被修改,并且没有允许后续修改受保护寄存器的从运行锁定状态的转换。因此,如果初始配置是安全和可靠地完成的,那么受保护资源的安全性和安全性就得到了保证。
注:这两种编码可以被硬件或软件使用,并且在行为上彼此之间无法区分。
运行状态、配置状态
运行状态(Run state)是一个由单一主代理功能拥有的PROT机制的正常操作状态。在运行状态下,受保护的寄存器不能被修改。当PROT所有者希望重新配置受保护的寄存器时,它会将PROT状态转换为配置状态(Config)。在配置状态下,PROT所有者可以修改受保护的寄存器。一旦配置完成,PROT所有者将PROT状态转换回运行状态,重新锁定受保护的寄存器。
运行安全状态、配置安全状态、检查安全状态
运行安全状态(RunSec state)与运行状态(Run state)相似,但它用于需要同时保证安全和安全性重新配置的功能。在运行安全状态下,受保护的寄存器不能被修改。
在使用运行安全状态(RunSec state)时,预期软件已将PROT所有者配置为一个安全的主代理功能(例如,一个步进锁定的CPU)。一个安全的主代理功能是与安全任务或安全应用相关的功能。从运行安全状态(RunSec)的状态转换强制执行安全(尽管可能是恶意的)PROT所有者和安全主控之间的安全和安全交互。请注意,如果PROT所有者是恶意的,那么无法保证安全性。
配置总是由PROT所有者发起,该所有者将PROT状态设置为ConfigSec以启动配置过程。这使得PROT所有者能够修改受保护的寄存器。为了确保系统的安全性,对受保护的配置寄存器的修改不应立刻生效——它们应该仅在安全主控检查过它们是否存在安全问题并确认无误之后才激活。这一过程可以通过以下方式实现:
- 在重新配置期间禁用受保护的功能(访问受保护的功能、受保护功能进行的互连控制等),以确保任何尚未被安全软件检查的配置都不会被受保护的功能使用。
- 对受保护的寄存器进行影子复制,以便在软件重新配置影子寄存器时,受保护的功能可以继续使用之前的配置。在安全检查通过后,影子寄存器会被复制、移动或切换到活动寄存器。
注:受保护寄存器的影子复制只在少数需要安全和安全重新配置的功能中实现,如系统存储器。影子复制的详细信息可以在相应的功能块(FB)章节中找到。
一旦配置完成,PROT所有者随后写入PROT状态寄存器以将其转换为CheckSec状态。在这种状态下,不再可能修改受保护的寄存器。这允许在安全主控上运行的安全软件在新的配置激活之前进行检查。如果安全检查通过,安全主控上运行的安全软件写入PROT状态寄存器以转换回运行安全状态(RunSec)。从CheckSec到RunSec的这种转换还会触发受保护寄存器新配置的激活。如果安全检查失败,安全主控上运行的安全软件将PROT状态写回ConfigSec,向PROT所有者表明安全检查失败,它应该修复配置。然后PROT所有者采取进一步行动来修复配置并重新尝试安全检查,或者如果失败是意外的,则发出警报。
只有在特殊情况下才需要从运行安全状态(RunSec)转换回运行状态(Run),例如,当一个功能从安全域释放回到单一所有权使用模型时。
3.2.3.1.2.PROT访问检查
PROT所有者标识
与PROT所有者匹配传入的互联交易的条件如下:
- 如果PROT.ODEF为0B,则匹配条件为真,无论是哪个主代理功能发起互联交易。这意味着任何主代理功能都可以充当PROT所有者。
- 如果PROT.ODEF是1B
- 互连事务上的主代理功能标签标识符(TAG ID)必须与协议(PROT)寄存器的协议标签标识符(PROT.TAGID)位域中的值完全匹配。
- 如果协议(PROT)寄存器中的“VMEN”位的值为0B,那么互连事务中的虚拟内存(VM)有效性指示符以及虚拟内存标识符(VM ID)将被忽略,并且在匹配条件中不会被使用。
- 如果协议(PROT)寄存器中的“VMEN”位的值为1B,那么互连事务必须设置虚拟内存(VM)有效性指示符,并且互连事务中的虚拟内存标识符(VM ID)必须与协议(PROT)寄存器的“PROT.VM”位域中的值相匹配。
- 如果协议(PROT)寄存器中的“PRSEN”位的值为0B,那么互连事务中的优先级(PRS)有效性指示符以及优先级(PRS)相关内容将被忽略,并且在匹配条件中不会被使用。
- 如果协议(PROT)寄存器中的“PRSEN”位的值为1B,那么互连事务必须设置优先级(PRS)有效性指示符,并且互连事务中的优先级(PRS)必须与协议(PROT)寄存器的“PROT.PRS”位域中的值相匹配。
安全主标识
来自安全主设备的访问通过快速外围接口(FPI)互连线路上的 “cs_valid” 位以及系统资源接口(SRI)互连线路上的 “sri_sm” 位来进行识别
PROT状态转换检查
协议(PROT)状态机中的状态转换只能由协议所有者、安全主设备或者硬件来发起。以下表格描述了有效的协议状态转换、能够触发各转换的主代理功能以及对每种触发类型的响应。当某个主代理功能在协议(PROT)的“SWEN = 1B”情况下对“PROT.STATE”位域进行写入操作,若该主代理功能不被允许发起相应的状态转换,或者所导致的状态转换未列于下表中(包括自状态转换),那么此写入操作将不会被执行,并会以触发警报或产生总线错误告终。
表27 PROT状态转换
PROT状态转换 |
HW触发 |
对PROT所有者写入SWEN=1B的STATE位字段的响应 |
对SWEN=1B的STATE位字段的安全主写入的响应 |
对SWEN=1B的STATE位字段的其他主代理函数写入的响应 |
从任何PROT状态到Init |
应用程序重置断言的状态转换 |
警报或总线错误 |
警报或总线错误 |
警报或总线错误 |
Init到RunLock |
在init_done断言(通过SCU/CSCU寄存器)时的状态转换 |
状态转换 |
警报或总线错误 |