掌桥专利:专业的专利平台
掌桥专利
首页

用于处理片上系统中的地址解码的装置和方法

文献发布时间:2023-06-19 11:21:00


用于处理片上系统中的地址解码的装置和方法

背景技术

本技术涉及用于处理片上系统(SoC)中的地址解码的装置和方法。

在SoC内,通常情况是SoC内的主处理设备诸如一个或多个处理器内核可经由互连器与设备网络诸如输入/输出(I/O)设备或加速器设备耦接。通常,设备网络被布置为使用特定设备通信协议进行通信,并且该设备通信协议可提供枚举机制以使在SoC的处理电路上执行的软件能够发现和配置设备网络内的设备。

此类设备通信协议的一个示例是外围组件快速互连(PCIe)协议。通过提供枚举机制,可以支持关于网络设备的热插拔/热交换功能,其中在改变设备的配置或数量之后,可以重新执行枚举机制以便发现和配置网络内的设备。

SoC的系统地址空间内的区域可被预留用于分配给网络内的各种设备。通常,设备网络以分级方式布置,并且可以为分级结构中上层的多个不同设备中的每个设备预留单独的地址区域。然而,通常需要保守地预留系统地址空间的大部分以分配给此类设备,以适应关于可连接到那些设备的分级结构中更低的设备的数量和内存要求的最坏情况场景。这产生了可抑制较大多根PCIe分级结构的部署的主要可扩展性问题。

发明内容

在一个示例性布置中,提供了片上系统,该片上系统包括:处理电路,该处理电路用于执行数据处理操作;第一多个设备;互连器,该互连器用于将处理电路耦接到第一多个设备,该第一多个设备是在形成设备网络的设备的分级结构内的第一级设备,在设备网络内的设备被布置为使用设备通信协议进行通信的情况下,设备通信协议提供枚举机制以使在处理电路上执行的软件能够发现和配置设备网络内的设备;和地址解码器,该地址解码器用于解码由处理电路发出的请求所指定的地址,以便确定请求的接收方;在系统地址空间内,预留地址池用于分配给第一多个设备,并且地址解码器包括设备地址解码器,该设备地址解码器用于为第一多个设备中的每个设备保持将池内的哪些地址分配给该设备的指示;其中地址解码器响应于检测到由请求指定的地址在地址池内,采用设备地址解码器来确定请求指向第一多个设备中的哪个设备并且使得请求被路由到所述第一多个设备内的所确定的设备;其中设备地址解码器被布置为暴露于软件作为设备网络的设备,以便使得在处理电路上执行的软件能够使用枚举机制来发现和配置设备地址解码器,从而使得第一多个设备之间的地址池的分配能够在软件控制下动态地重新配置。

在另一个示例性布置中,提供了一种处理片上系统中的地址解码的方法,该片上系统具有处理电路,该处理电路用于执行数据处理操作、第一多个设备以及互连器,该互连器将处理电路耦接到第一多个设备,该第一多个设备是形成设备网络的设备的分级结构内的第一级设备,该方法包括:使设备网络内的设备使用设备通信协议进行通信,该设备通信协议提供枚举机制以使在处理电路上执行的软件能够发现和配置设备网络内的设备;采用地址解码器来解码由处理电路发出的请求所指定的地址,以便确定请求的接收方;在系统地址空间内,保留地址池以分配给第一多个设备;在地址解码器内提供设备地址解码器,以针对第一多个设备中的每个设备保持将池内的哪些地址分配给该设备的指示;响应于检测到由请求指定的地址在地址池内,采用设备地址解码器来确定请求指向第一多个设备中的哪个设备,并且将请求路由到所述第一多个设备内的所确定的设备;以及将设备地址解码器暴露于软件作为设备网络的设备,以便使得在处理电路上执行的软件能够使用枚举机制来发现和配置设备地址解码器,从而使得第一多个设备之间的地址池的分配能够在软件控制下动态地重新配置。

在又一个示例性布置中,提供了片上系统,该片上系统包括:处理装置,该处理装置用于执行数据处理操作;第一多个设备;互连装置,该互连装置用于将处理装置耦接到第一多个设备,该第一多个设备是在形成设备网络的设备的分级结构内的第一级设备,在设备网络内的设备被布置为使用设备通信协议进行通信的情况下,设备通信协议提供枚举机制以使在处理装置上执行的软件能够发现和配置设备网络内的设备;和地址解码器装置,该地址解码器装置用于解码由处理装置发出的请求所指定的地址,以便确定请求的接收方;在系统地址空间内,预留地址池用于分配给第一多个设备,并且地址解码器装置包括设备地址解码器装置,该设备地址解码器装置用于为第一多个设备中的每个设备保持将池内的哪些地址分配给该设备的指示;其中地址解码器装置响应于检测到由请求指定的地址在地址池内,采用设备地址解码器装置来确定请求指向第一多个设备中的哪个设备并且使得请求被路由到所述第一多个设备内的所确定的设备;其中设备地址解码器装置被布置为暴露于软件作为设备网络的设备,以便使得在处理装置上执行的软件能够使用枚举机制来发现和配置设备地址解码器装置,从而使得第一多个设备之间的地址池的分配能够在软件控制下动态地重新配置。

附图说明

将参考如附图所示的本技术的示例,仅以举例的方式进一步描述本技术,其中:

图1是示意性地示出在将单独的存储器区域分配给形成设备网络的设备的分级结构内的不同端口时可能出现的可扩展性问题的示意图;

图2示出了根据一个示例性布置的可在SoC具体实施中与SoC级支持结合使用以实现地址池内的区域在多个不同根端口设备之间的动态重新分配的地址解码的扁平化门户桥(FPB)形式;

图3是示出根据一个示例性布置的SoC的框图;

图4示意性地示出了根据一种布置的图3的MMIO解码器;

图5是示出可根据一种示例性布置用于发现和配置设备网络的设备的软件控制的配置过程的流程图,在该过程期间还发现和配置MMIO解码器;

图6是示出在一个示例性布置中执行的地址解码操作的流程图;

图7示意性地示出了可如何根据本文所述的技术在多个根端口之间分配内存池;

图8示出了根据一个示例性布置的可在MMIO解码器的软件可编程内存映射配置寄存器内采用的指定的供应商特定扩展能力(DVSEC)结构;

图9是示出根据一个示例性布置的响应于热插拔或热交换事件而执行的步骤的流程图;并且

图10是示出根据一个示例性布置的响应于热移除事件而执行的步骤的流程图。

具体实施方式

如前所述,当将形成设备网络的设备的分级结构连接到SoC内的互连器时,通常需要保守地预留系统地址空间的大部分以将内存映射I/O(MMIO)区域分配给那些设备。具体地讲,通常可能不知道何时考虑分级结构中的高层级的设备(诸如根端口)、多少设备将耦接到该设备、或这些设备的内存要求可能是什么,并且因此可为设备诸如根端口分配保守的大地址空间区域。这可产生主要的可扩展性问题。

如前所述,用于此类设备网络的一种常用通信协议是PCIe协议,该PCIe协议提供枚举机制以使在SoC的处理电路上执行的软件能够发现和配置网络内的设备。外围组件互连特殊兴趣组(PCI-SIG)引入了2017年2月PCI-SIG工程变更声明中所述的扁平化门户桥(FPB)地址解码机制(其副本可见于https://pcisig.com/sites/default/files/specification_documents/ECN_FPB_9_Feb_2017.pdf)。FPB机制允许在网络内更有效且密集地分配路由ID,并且定义在非连续范围内分配路由ID和内存空间资源的机制,使得系统软件能够分配这些资源的池,从这些池中系统软件可以将“仓”分配给扁平化门户桥下方的功能。实现FPB能力的桥接件本身被称为FPB,并且可针对特定桥接件启用或禁用FPB机制。

因此,当采用与特定桥接设备(在本文中也称为根端口设备)相关联的FPB方案时,地址空间池内的地址区域部分可被分配给FPB下方的特定设备,并且FPB可根据为该通信指定的地址是否落入分配给桥接件另一侧上的特定设备的地址区域中的一个地址区域内来确定是否通过桥接件在通信上传播。

FPB方案可通过分配地址池来帮助更有效地利用可用的内存地址空间。然而,FPB方案仅针对PCI桥接件定义。此外,为了能够优化通过使用此类FPB方案可用的潜在益处,PCI-SIG已经指示将需要新的硬件和软件,并且具体地,如果存在对FPB地址解码机制的SoC级支持,则将仅可能从方案实现显著益处。

本文所述的技术寻求提供用于为FPB地址解码提供此类SoC级支持的有效且高效的机制。

在一个示例性布置中,片上系统具有处理电路,该处理电路用于执行数据处理操作、第一多个设备以及互连器,该互连器将处理电路耦接到第一多个设备。第一多个设备在形成设备网络的设备分级结构内形成第一级设备。设备网络内的设备使用设备通信协议进行通信,并且该协议提供枚举机制以使在处理电路上执行的软件能够发现和配置设备网络内的设备。用于该过程的软件可采取多种形式,但可例如为操作系统软件和/或可用于采用由设备通信协议提供的枚举机制的引导固件。

SoC还具有地址解码器来解码由处理电路发出的请求所指定的地址,以便确定请求的接收方。在系统地址空间内,预留地址池用于分配给第一多个设备,并且地址解码器具有设备地址解码器,该设备地址解码器用于为第一多个设备中的每个设备保持将池内的哪些地址分配给该设备的指示。因此,在检测到由请求指定的地址在地址池内时,设备地址解码器可用于确定请求指向第一多个设备中的哪个设备,并且使得请求被路由到第一多个设备内的所确定的设备。

本文所述的技术提供了用于将所需信息保持在设备地址解码器内的非常有效的机制。具体地讲,设备地址解码器被布置为暴露于软件作为设备网络的设备。因此,这使得在处理电路上执行的软件能够使用枚举机制来发现和配置设备地址解码器。因此,通过采用为设备通信协议提供的标准枚举机制,设备地址解码器的存在可以由在处理电路上执行的软件来确定,此外,用于在设备网络内配置设备的标准技术然后也可以用于配置设备地址解码器。因此,这提供了一种标准化机制,用于在SoC内的解码级捕获将请求路由到在分级结构内形成第一多个设备的各种设备所必需的所需信息。

由于每次设备网络内的设备的数量或配置发生变化时,例如由于热插拔或热交换活动,都可以重新调用枚举机制,因此上述机制使得由设备地址解码器保持的信息能够在枚举机制的任何重新执行期间被自动更新,并且因此提供了一种用于使得能够在第一多个设备之间分配地址池以在软件控制下动态重新配置的非常高效和有效的机制。在该过程期间,软件可设法调整如何分配地址池,以便适应网络配置的变化,而无需执行侵入式重新平衡过程来重新配置网络中的所有设备。

这种用于管理SoC内的地址解码的机制通过避免需要保守地预留系统地址空间的大部分以用于分配给网络内的各种设备,从而能够更有效地利用系统地址空间,以避免上述侵入式重新平衡问题。例如,考虑到PCI-SIG提出的先前讨论的FPB机制,通过以上述方式形成设备地址解码器,提供了非常有效、高效和标准化的机制,用于促进对FPB地址解码机制的SoC级支持,当为设备的PCIe网络分配地址空间时,使得能够显著节省地址空间,并且使得能够有效地重新分配池内的地址空间。

存在设备地址解码器可被布置为暴露于软件的多种方式,但是在一个示例性布置中,设备地址解码器被暴露为集成端点设备,即其被认为是设备网络内的端点,并且被集成到SoC中。

第一多个设备可采用多种形式,但在一个实施方案中包括多个桥接设备,该桥接设备也可称为根端口设备。

存在可利用上述技术的多种设备通信协议。具体地讲,存在多个设备通信协议,这些设备通信协议提供枚举机制以使得在SoC的处理电路上执行的软件能够发现和配置设备,从而支持热插拔/热交换功能。然而,在一个示例性配置中,设备通信协议是外围部件快速互连(PCIe)协议,并且设备地址解码器被布置为暴露于软件作为根复杂集成端点设备。在PCIe协议内,通过将设备地址解码器提供为根复杂设备,这为在处理电路上执行的软件提供了一种简单的机制,以将设备地址解码器视为可枚举设备。

在一个示例性布置中,设备地址解码器具有相关联的根总线,在处理电路上执行的软件可经由该根总线访问设备地址解码器。因此,设备地址解码器可具有其自身到在处理电路上运行的软件的根总线,该处理电路用于发现和配置网络的设备。这确保了标准PCIe方法可用于发现和配置设备地址解码器。

存在设备地址解码器可被配置为存储确定任何特定请求指向第一多个设备中的哪个设备所需的信息的多种方式。然而,在一个示例性布置中,设备地址解码器设置有包括多个寄存器的扩展能力结构,其中配置信息在处理电路上执行的软件的控制下存储,以使设备地址解码器能够确定请求指向第一多个设备中的哪个设备。这可提供用于捕获关于如何在第一多个设备中分配地址池的所需信息的有效机制。

在一个特定示例中,扩展能力结构是具有标头字段的指定的供应商特定扩展能力(DVSEC)结构,该标头字段用于将相关联的设备识别为设备地址解码器。DVSEC是允许由PCIe功能实现的可选扩展能力,从而允许PCIe部件供应商使用扩展能力机制暴露供应商特定寄存器,这些寄存器可由多个供应商存在于部件中。通过使用标头字段,可为设备地址解码器提供特定形式的DVSEC结构。已经发现的是,DVSEC结构的使用提供了用于捕获关于如何在网络的分级结构中的各种第一设备之间分配地址的池的所需信息的特别有效的机制。

DVSEC结构可采取多种形式,但在一个示例中包括数字字段以识别第一多个设备中的设备数量。此外,在一个示例性布置中,DVSEC结构包括与第一多个设备中的每个设备相关联的内存相关寄存器,该内存相关寄存器在处理电路上执行的软件的控制下被编程为包含地址信息,该地址信息识别池内的哪些地址被分配给第一多个设备中的相关联的设备。因此,在DVSEC结构内,可为第一多个设备中的每个设备保持单独的内存相关寄存器,其中这些寄存器在枚举过程期间可在软件控制下编程。

由地址池限定的地址空间可以多种方式布置,但在一个示例中由多个地址空间颗粒形成,并且编程到DVSEC结构的内存相关寄存器中的地址信息识别哪些地址空间颗粒被分配给第一多个设备中的每个设备。

在此类布置内,对于第一多个设备中的每个设备,DVSEC结构中的内存相关寄存器可存储用于识别哪些地址空间颗粒被分配给设备的多个向量。分配给任何特定设备的地址空间颗粒不需要是连续的,因此关于颗粒的分配方式存在很大的灵活性。此外,可能的是,在任何特定时间点,地址空间颗粒中的一个或多个地址空间颗粒不被分配给任何设备。

在一个示例性布置中,DVSEC结构中的内存相关寄存器还可识别第一多个设备中的每个设备的基础地址,以及地址空间颗粒的大小。因此,虽然在一些具体实施中,第一多个设备中的所有设备可被赋予相同的基础地址,从而识别存储地址池内的公共点,这不是必需的,并且在不同的具体实施中,可将不同的基础地址分配给不同的第一设备,以识别池内用作那些第一多个设备的起始地址的不同点。

此外,虽然可为每个设备分配相同大小的地址空间颗粒,但这也不是必需的,因此可将不同大小的颗粒分配给不同的设备。由于在枚举机制期间发现和配置设备地址解码器的集中方式,在处理电路上执行以执行配置的软件可以确保分配给任何特定第一设备的地址空间颗粒与分配给任何其他设备的地址空间颗粒不重叠。

DVSEC结构中的内存相关寄存器可以多种方式组织。然而,在一个示例性具体实施中,第一多个设备中的每个设备还包括内存相关寄存器,该内存相关寄存器在处理电路上执行的软件的控制下被编程,以包含识别池内哪些地址被分配给该设备的地址信息。在此类实施方式中,软件可被布置成对设备地址解码器的DVSEC结构内的每个设备的内存相关寄存器进行编程,以便保持与第一多个设备中的各个设备的内存相关寄存器内存储的地址信息相同的地址信息。因此,在此类布置中,可将相同的值编程到第一多个设备内的特定设备的内存相关寄存器中,以及设备地址解码器的DVSEC结构内的对应内存相关寄存器中。这使在枚举过程期间配置设备地址解码器所涉及的开销最小化。

第一多个设备可采取多种形式,并且在一个具体实施中可包括多个PCIe根端口设备。虽然在一个具体实施中,第一多个设备中的所有设备可以是PCIe根端口设备,但是在替代具体实施中,第一多个设备中的一个或多个设备可采取另一种形式,因此例如第一多个设备还可包括一个或多个集成端点设备。

地址池可采取多种形式,但在一个具体实施中,地址池是系统地址空间的内存映射I/O(MMIO)区域。

虽然地址池可包括单个池,但在一个具体实施中,地址池包括上部池和下部池。具体地讲,下部池可以在系统地址空间的第一区域内,该第一区域能够使用不足以识别上部池内地址的多个地址位来寻址。通过这种方法,可以提供与使用减小的地址空间的传统系统的兼容性。在一个具体示例中,此类传统系统可能仅能够利用系统地址空间内高达4GB边界的地址,因此下部池可被分配在4GB边界以下的此类系统地址空间内,而上部池可被分配在4GB边界以上。

现在将参考附图描述特定示例。

本文所述的技术可与设备的任何网络相关联地使用,其中所利用的设备通信协议提供枚举机制以使得软件能够发现和配置网络内的设备。出于以下讨论的目的,将考虑PCIe协议。

图1是示意性地示出当试图为PCIe网络内的设备预留足够的系统地址空间以便支持与形成PCIe网络的设备有关的热插拔和/或热交换活动时可能出现的问题的示意图。图1示出了包括多个处理元件(诸如处理器内核15、20)的系统10,这些处理元件经由互连器25耦接到设备网络。设备网络被布置在分级结构中,并且分级结构的上层包括连接到互连器25的多个根端口设备30、35,然后各种其他设备通过那些根端口连接到互连器25。其他设备由框40、45共同示出。

虽然设备网络的一些设备可在芯片上提供,但其他设备可在芯片外提供。例如,可提供片上系统(SoC),其包含处理器内核15、20、互连器25以及由根端口30、35形成的设备网络的至少上层级。然而,设备网络的分级结构的其他层级可在芯片外提供,并且因此设备40、45可在芯片外。

设备网络可采取多种形式,但如先前出于本讨论的目的所讨论的,将假设设备网络是PCIe网络。设备网络内的各种设备被视为内存映射I/O(MMIO)设备,并且被分配给系统地址空间50内的存储器的MMIO区域。当将内存地址空间分配给设备网络中的上层设备诸如根端口30、35时,考虑到那些各种设备的内存要求,希望分配足够的空间以使得地址能够被分配给连接到设备网络内的那些根端口的各种设备。通常情况是,这在地址空间被初始分配时不是已知的,这可例如在系统的引导时间发生。然而,如果分配的空间不足,这可能导致适当的时候枚举失败,例如当附加设备连接到特定根端口时,但是分配给该根端口的空间不足以适应该附加设备的内存要求。在这种情况下,可能需要执行侵入式重新平衡过程,在此期间可能需要在网络中的所有潜在设备之间重新分配内存空间。这可具有非常显著的性能影响。

如图1所示,为了试图缓解对此类枚举失败和重新平衡的潜在需要,然后根据已知技术,内存地址空间的区域可被分配给根端口中的每个根端口,其中所分配的内存量被保守地选择,以便试图适应关于设备分级结构中更低的设备的数量和内存要求的最坏情况场景。因此,对于每个根端口30、35,可分配系统地址空间50内的单独的保守大小的区域55、60。

此外,通常情况是需要在系统地址空间的不同部分中分配不同的地址区域。例如,为了保持与可能仅使用减少数量的位来指定地址(例如,最大地址为4GB的32位寻址)的部件的向后兼容性,则可能还需要为较低系统地址空间中的每个根端口分配单独的区域65、70。由于可用空间的量相对较小,因此向每个根端口分配单独区域的要求可在该较低地址空间内产生特别严重的地址空间压力。

图2示意性地示出了在启用FPB机制并提供SoC级支持的情况下,可如何更优化地利用系统地址空间。具体地讲,从图2与先前讨论的图1的比较将显而易见的是,可保留单个地址池以与所有根端口设备30、35相关联地使用,而不是必须为每个根端口预留单独的系统地址空间。在所示的特定示例中,在4千兆字节(GB)地址边界以上和以下分配有单独的内存池,并且因此存在被分配用于与根端口30、35相关联使用的单个高MMIO内存池80和单个低MMIO内存池85,(以及实际上形成设备网络的最高层级的任何其他设备,即,直接连接到互连器25的部件)。内存地址池80、85中的每一者可被分解成可被分配给各个根端口的分块,在此这些分块也被称为地址空间颗粒。分配给每个根端口的颗粒的大小不需要是相同的,并且分配给特定根端口的各个颗粒不需要是连续的。然而,在内存池内形成的每个颗粒将仅被分配给根端口中的一个根端口,并且因此各个根端口所使用的地址保持彼此分开。

虽然先前讨论的FPB方案引入了保持用于分配给桥接设备的内存池的概念,但是先前提到的由PCI-SIG公布的FPB文件确认将需要开发新的软件和硬件,并且具体地讲,如果要使用FPB方案实现显著益处以控制地址空间如何在不同根端口之间分配,则将需要对FPB地址解码的SoC级支持。

本文所述的技术提供SoC级支持以实现跨第一级设备(诸如根端口)的动态分配和解除分配,从而使得内存分配能够在此类设备之间移动。这显著增强了现有FPB功能,其仅确定地址是否映射到桥接件/根端口下游的点。现有FPB机制并不明确基于当前分配从一个桥接件/根端口到另一个桥接件/根端口的任何路由。然而,通过本文所述的SoC级增强,可以基于当前分配执行到正确根端口的明确路由。

具体地讲,下文所述的技术为使用FPB地址解码机制提供标准化SoC级支持,使得系统软件能够使用熟知的PCIe方法来支持池内地址空间在各种PCIe根端口之间的动态重新分配。具体地讲,如将参考其余附图更详细地讨论,地址解码部件可在SoC级提供,例如在SoC互连器内,其暴露于SoC上运行的软件以枚举PCI设备网络,使得该地址解码部件被视为用于枚举和配置目的的设备网络的设备。因此,可使用标准PCIe枚举机制来发现和配置该地址解码部件,该标准PCIe枚举机制提供了用于使得能够在网络的设备之间分配地址池以在软件控制下动态地重新配置的特别高效的、有效的和标准化的机制。

这在图3的框图中进一步示出。在该示例中,提供了SoC 100,其具有连接到互连器115的多个处理器内核105、110。如图3所示,还提供了PCIe设备网络,其中该设备网络的分级结构内的第一级包括多个部件125、130、135、140,这些部件连接到互连器115,并且被认为是SoC 100的一部分。如图3所示,这些将通常包括多个根端口125、130、135,但也可包括一个或多个附加类型的设备,例如集成端点设备140。

如本领域的技术人员将理解的,多个设备可连接到形成设备网络的分级结构的第一级的根端口,如以举例的方式与根端口125相关联所示。例如,可提供连接到根端口125并且还连接到多个端点设备150、155、160的开关设备145。应当理解,在实践中,设备网络可具有多个不同的层级,并且采用多种不同的形式,并且图3中的开关145和端点150、155、160的使用纯粹是为了说明的目的而提供的。

与互连器115相关联,可提供响应于在互连器处接收的请求的地址解码器120,以确定这些请求的适当接收方。因此,以举例的方式,处理器内核可发出指定地址的请求,并且地址解码器120可用于确定如何将该请求通过互连路由到适当的接收方设备。虽然在图3中,地址解码器120被示意性地示出为互连器115的一部分,但在替代具体实施中,地址解码器可至少部分地在互连器外部,例如可部分地由处理器内核105、110中的一者或多者内的功能提供。

根据先前的讨论,应当理解,PCIe网络内的设备被分配有MMIO地址区域内的地址,并且根据FPB方案,可分配一个或多个内存池以与那些设备相关联地使用,例如图2所示的高内存池80和低内存池85。考虑到由部件125、130、135、140构成的分级结构内的第一级,内存池内的各个地址空间颗粒可被分配给那些设备125、130、135、140中的特定设备。

为了能够通过使用此类内存池而方便地有效利用地址空间,希望提供一种用于有效地使内存池中的地址空间颗粒能够在PCIe网络内的不同第一级设备之间重新分配的系统级机制。例如,考虑到根端口125,需要将足够量的地址空间分配给该根端口以支持PCIe网络内经由该根端口耦接到互连器的每个各个部件的寻址。因此,例如,端点设备150、155、160中的每个端点设备将需要使用被分配用于根端口125的地址空间颗粒来被分配足够的地址空间。此外,诸如热插拔和热交换之类的活动可能导致PCIe网络的配置发生变化,例如改变连接到特定根端口的设备的数量,并可能影响需要由任何各个根端口支持的内存要求。

当使用先前讨论的FPB机制时,非常期望为在PCIe设备网络的设备的分级结构内形成第一级的各个根端口和/或其他部件之间的地址空间颗粒的重新分配提供SoC级支持。提供此类SoC级支持的目的是有效地实现地址空间在那些设备之间的重新分配,使得在任何可能的情况下都可以适应所需的改变,而不必执行侵入式重新平衡机制,否则这可能涉及改变地址空间映射以用于网络内的大量且可能全部的设备。

根据本文所述的技术,地址解码器120包括MMIO解码器(在本文中也称为设备地址解码器),该MMIO解码器暴露于软件作为PCIe网络的设备。具体地讲,可在枚举过程期间在处理器内核105、110中的一者上执行以发现和配置PCIe设备网络的软件(其可包括固件)能够将MMIO解码器视为PCIe网络的设备。因此,即使不是正式作为PCIe设备网络的一部分提供的设备,也可通过在处理器内核上执行的上述软件将其视为这样,并且因此可使用标准PCIe枚举技术来发现和配置。

MMIO解码器170可以多种方式构造,但是在一个具体实施中形成为根复杂集成端点。通过将MMIO解码器170布置为作为集成端点(即SoC100内的PCIe网络的端点)的根复杂设备,这为在处理器上执行的软件提供了一种简单的机制以将MMIO解码器视为可枚举设备。具体地讲,在此类布置中,MMIO解码器可具有其自身到在处理器上运行的软件的根总线,因此MMIO解码器端点将具有其自身ECAM(增强的配置访问机制)区域、其自身ECAM基础和其自身根总线编号。这确保了标准PCIe方法可用于枚举和配置MMIO解码器170。

图4更详细地示出MMIO解码器170。具体地讲,MMIO解码器将包括一些软件可编程内存映射配置寄存器180,该配置寄存器可在标准PCIe枚举过程期间被编程,以便提供用于识别上部内存池80和下部内存池85如何已在形成PCIe网络的分级结构内的第一级的各种设备125、130、135、140中分配。稍后将参考图8更详细地讨论配置寄存器的特定形式,但是一般来讲,配置寄存器180可复制在设备125、130、135、140的各个配置寄存器内保持的一些信息,以便提供关于内存池80、85内的各种地址空间颗粒如何被分配的信息。由于配置寄存器180在枚举过程期间是可访问的和可重新编程的,因此它们可响应于热插拔和热交换事件而被重新编程,以便试图调整内存池资源在各种设备125、130、135、140中的分配方式,以适应PCIe网络内变化的内存要求,而无需执行完全重新平衡过程。

图5是示出可在图3的系统内实现的软件控制的配置过程的流程图,使得MMIO解码器170在PCIe设备网络的软件配置期间被发现和配置。在步骤200处,等待配置触发。这可例如在首次开启系统时的引导时间发生,但在使用期间也可动态地发生附加配置触发。

在发生配置触发时,然后在步骤205处,使用在处理器内核105上执行的软件(其可例如采取操作系统软件和/或引导固件的形式)来采用PCIe枚举机制来试图发现当前存在于PCIe网络中的设备。在该过程期间,还将发现MMIO解码器170,因为如前所述,这暴露于软件作为PCIe网络的设备。在枚举过程期间,将发现根端口下方的所有设备的MMIO要求。这将被软件用于决定到每个根端口的颗粒分配,以及用于对每个根端口中的FPB解码器进行编程。

在步骤210处,上部池80和下部池85中的颗粒分配给PCIe网络的分级结构的第一级中的每个设备,即,分配给图3的特定示例性情况下的设备125、130、135、140,以考虑那些设备和耦接到它们的分级结构中更低的任何设备的内存要求。然后基于如何分配颗粒来对那些设备中的每个设备内的配置寄存器进行编程。具体地讲,对于每个此类设备,该设备的配置寄存器被编程为识别已分配给该设备的上部池80和下部池85内的特定颗粒。那些配置寄存器可采取多种形式,但在一个具体实施中,是被编程以提供用于识别所分配的颗粒的特定信息的FPB内存寄存器。该信息可包括由该特定设备使用的高部池和低部池的基础地址、用于识别已分配的内存池内的各个颗粒的大小的颗粒大小、以及用于识别特定分配的颗粒的信息(例如,通过指定参考基础地址信息和颗粒大小解释的一个或多个向量)。

虽然在步骤210中没有具体提及,但是该相同的过程用于在分级结构中的较低层级处将地址分配给其他设备,这些设备还包括在步骤210期间由软件编程的配置寄存器。因此,以举例的方式考虑根端口125,虽然其FPB内存寄存器将被编程为识别分配给该根端口的特定颗粒,但是与分级结构中的下部设备相关联的配置寄存器还将从分配给根端口125的颗粒中识别分配给那些下部设备的特定地址。

如步骤215所示,MMIO解码器170内的配置寄存器180也在软件配置过程期间被编程,以便识别地址空间如何被分配给在PCIe网络的分级结构内形成第一级的设备125、130、135、140。配置寄存器180可以采取多种形式,但是在下文讨论的一个示例性情况下,将包括指定的供应商特定扩展能力(DVSEC)结构,该DVSEC结构被编程为识别分级结构的第一级中的设备数量(因此对于图3的特定示例,这将识别出存在4个设备)并且对于每个此类设备,要保持FPB内存寄存器内容的副本被编程到每个此类设备中。这为MMIO解码器170提供了非常有效的机制,以保留关于内存池80、85内的各种地址空间颗粒如何被分配在设备125、130、135、140中的信息。

在图5中,假设分级结构内第一级处的每个设备都启用了FPB机制。然而,这不是必需的,并且各个设备可禁用FPB机制,在这种情况下,这些FPB机制被排除在图2所示的池化机制之外,而是被分配其自身在4GB边界以上和以下的地址空间。

从图5将显而易见的是,由于MMIO解码器被暴露为PCIe网络的设备,因此可使用标准PCIe枚举技术来发现和配置该MMIO解码器,使得其配置寄存器保留足够的信息以知道各个池内的MMIO地址空间如何在PCIe网络中的上层级设备中分配。这提供了用于在SoC级捕获该信息的非常有效的机制,以在使用FPB地址解码机制时为地址解码提供SoC级支持。此外,其提供了一种非常有效的机制,用于例如响应于热插拔或热交换事件来动态地调整地址空间颗粒在PCIe网络的分级结构内的第一级处的各种设备之间的分配方式。

具体地讲,当这样的事件发生时,这将触发中断,该中断导致用于管理PCIe网络枚举过程的相关处理器内核重新执行枚举到获得关于热插拔或热交换事件的充足信息所必需的程度。因此,如果新设备被插入,则其可发现该设备,识别其连接到哪个根端口,并且识别该设备的内存要求。然后,其可根据需要寻求在池内重新分布地址颗粒,以便寻求通过相关根端口提供足够的内存空间,以使新设备能够被寻址,而无需执行侵入式重新平衡,否则可能影响其他设备的寻址方式。具体地讲,如果池内存在任何未分配的颗粒,或者如果那些颗粒中存在已分配的未使用的颗粒,则可释放那些颗粒以分配给相关根端口以与新设备相关联使用。也可以调用类似的机制用于热交换功能,并且进一步地,当设备被移除时,可以使用类似的枚举过程来识别因此已经被释放的颗粒,使得那些颗粒可用于重新分配。

由于MMIO解码器作为PCIe网络的设备被暴露出来,因此软件直接在上述枚举过程期间对MMIO解码器内的相关配置寄存器进行重新编程,以便在MMIO解码器170内保持关于上部池和下部池内的地址空间颗粒如何被分配的最新记录。

图6是可由图3的地址解码器120采用的地址解码过程的流程图。在步骤300处,确定是否已从处理器内核105、110中的一者接收到请求,此类请求指定与该请求相关联的系统地址空间内的地址。一旦已经接收到请求,则在步骤305处确定该地址是否指定系统地址空间内的池区域,并且具体地讲,该地址是高MMIO池80内的地址还是低MMIO内存池85内的地址。如果不是,则在步骤310处,地址以标准方式被解码并被路由到接收方,并且具体地在该情况下不需要MMIO解码器170。

然而,如果在步骤305处确定地址确实指定了上部池区域或下部池区域,则过程前进至步骤315,在该步骤中,地址被传递至MMIO解码器170以用于分析。在步骤320处,MMIO解码器访问其配置寄存器180,并且具体地讲访问先前提及的保持DVSEC结构的寄存器,以便试图识别已被分配包括所讨论的地址的颗粒的第一级PCIe设备125、130、135、140。如果地址未映射到任何分配的颗粒,则错误将被标记,但是出于图6中的讨论的目的,假设地址确实映射到分配的颗粒中的一个颗粒。因此,过程随后前进至步骤325,在该步骤中,请求被路由到所识别的第一级PCIe设备,即,具有包括所讨论的地址的所分配颗粒的设备。根据标准PCIe机制,如果第一级设备本身不是预期接收方,则该第一级设备然后将请求路由到最终端点设备上。因此,考虑图3,请求可通过根端口125并且经由开关145路由到端点150、155、160中的适当的一个端点,该适当的端点参考地址来确定。

使用上述技术,如果需要,可以利用非连续交错分配将低MMIO内存池85和高MMIO内存池80精细颗粒分配到不同的根端口。此外,通过提供暴露于软件的SoC级MMIO解码器作为PCIe网络的设备,可以将分配信息保持在SoC级,并且可以在标准设备枚举技术期间容易地采用分配的改变。

图7示出了用于示例性用例的颗粒的交错分配,具体地考虑了低MMIO内存池85。根据FPB方案,定义多个向量寄存器以识别低MMIO内存池和高MMIO内存池如何分配给各个设备。如图7的示例中所示,内存池被分成6个分块(在本文中也被称为地址空间颗粒),并且在该示例中,假设存在3个根端口,即RP0、RP1和RP2。如该示例性示例中所示,分块405被分配给根端口0,非连续分块410也是如此。分块415被分配给根端口1,并且分块420被分配给根端口2。当前,分块425和430未被分配给任何根端口。应当理解,图7示出了简化示例,并且在其他示例中,可提供更多或更少的分块,以及更多或更少的根端口(以及可选的其他设备,诸如也可在内存池内分配一个或多个分块的集成端点140)。

根据FPB方案,可在根端口的配置寄存器内提供多个向量寄存器,以识别低MMIO内存池和高MMIO内存池内已分配给该设备的任何分块。考虑到低MMIO内存池,可为此目的使用低向量控制寄存器,并且因此可通过查看每个根端口的低向量控制寄存器来确定分块到每个根端口的分配。保持在低向量控制寄存器内的一条信息是低向量开始,在本文中也称为基础地址。在图7所示的示例中,假设在每个低向量控制寄存器的向量开始信息中识别的基础地址是相同的,并且指向低MMIO内存池中的初始条目。然而,对于每个根端口,向量开始是相同的不是必要的,并且在一些具体实施中,向量开始可针对不同的根端口以不同方式指定,以便从配置寄存器中指定的其他信息识别可用于解释哪些分块已被分配的起始点。此外,对于每个根端口,分块或颗粒大小不需要相同,并且低向量控制寄存器还可捕获关于颗粒大小的信息。

如前所述,MMIO解码器170的软件可编程内存映射配置寄存器180包含DVSEC结构,该DVSEC结构在图8中以举例的方式示出。下面的DVSEC结构在图的左上侧示出,并且包含DVSEC结构所需的一些字段,DVSEC结构是其基本形式由PCI-SIG限定的结构。根据本文所述的技术,指定的供应商特定标头1505可用于识别DVSEC结构正在定义MMIO解码器。然后,字段507可以用于捕获关于系统中根端口数量的信息,或者更具体地关于分级结构内的第一级设备数量的信息。虽然这些可能主要是根端口,如先前参考图3所讨论的,但是也可以在第一级处提供其他设备,诸如集成端点140,并且因此关于图3的示例,字段507将识别在层级结构内的第一级处存在4个设备。

从图8将显而易见的是,DVSEC结构的一部分指定DVSEC供应商特定寄存器509,并且对于与MMIO解码器相关联的DVSEC,这些寄存器用于捕获扩展框500中所示的信息。具体地讲,如图所示,存在用于每个根端口的一组FPB内存相关寄存器,或者更一般地,用于分级结构内的每个第一级设备的FPB内存相关寄存器。这些内存相关寄存器包括一系列向量寄存器,这些向量寄存器实际上是每个第一级设备的相关配置寄存器中保持的信息的副本。具体地讲,在根端口内,FPB机制限定一系列向量寄存器,这些向量寄存器被编程为识别分配给该根端口设备的内存空间颗粒。这些寄存器包括图8所示的各种低向量控制寄存器和高向量控制寄存器,以及访问控制和访问数据寄存器。在各个根端口设备内,这些各种寄存器捕获关于基础地址、颗粒大小和向量信息的信息,从而使得分配给相关联的根端口设备的各个颗粒能够被识别。早前提到的有关扁平化门户桥(FPB)的PCI-SIG工程变更通知详细阐述了这些寄存器中的每一个寄存器中提供的信息。

如图8所示,在MMIO解码器170中提供的DVSEC结构内,为每个第一级设备提供一组内存相关寄存器510、520,并且有效地复制编程到相关联的第一级设备本身中的信息。由于MMIO解码器被视为PCIe网络的设备,因此应当理解,填充这些寄存器的过程在枚举配置过程期间是简单直接的,因此可以使用标准枚举技术容易地实现MMIO解码器170内DVSEC结构的填充。

总之,从上面的讨论应当理解,MMIO解码器内的DVSEC结构确保SoC级MMIO解码器具有关于PCIe网络内的第一级设备的数量的信息,MMIO存储器高部池和低部池中的哪些地址颗粒被分配给哪个第一级设备,以及每个根端口的FPB内存低区域和FPB内存高区域的起始地址。然后,该信息可用于将MMIO事务路由到PCIe网络内的正确的第一级设备。此外,作为标准配置过程的一部分,先前所讨论的系统软件将利用与实际根端口的FPB内存寄存器中编程的相同的值来对MMIO解码器端点的FPB内存相关寄存器进行编程。

图9是示出可在发生热插拔/热交换事件时采取的步骤的流程图。当在步骤600处检测到此类事件时,则在步骤605处触发对相关处理器内核的中断。具体地讲,用于运行用于配置PCIe设备网络的软件的处理器内核将在步骤605处接收中断。

在步骤610处,将调用枚举技术以便找出新的或交换的设备的细节以及与该设备相关联的内存要求。此外,在步骤615处,将识别与新的或交换的设备耦接的根端口。因此,考虑图3,如果以举例的方式,端点设备150首次插入系统中,则将识别出端点设备150与根端口125相关联。

在步骤620处,软件然后将确定是否已经向该根端口分配了足够的空间。具体地讲,将不仅保持关于哪些地址空间颗粒已被分配到该根端口的信息,而且还保持关于那些颗粒已被利用的程度的信息。如果已经有足够的空间分配给根端口以适应新的或交换的设备的内存要求,则过程前进至步骤625,在该步骤中不需要特定动作(除了对相关配置寄存器进行编程以指示分配给新设备的地址范围之外),然后可在步骤655处执行来自中断的返回。

然而,如果在步骤620处确定不存在已经分配给相关根端口的足够空间,则在步骤630处,可确定在相关内存池内是否存在足够可用的自由颗粒。作为枚举过程的一部分,将从新的/交换的设备检索关于是否需要4GB边界以上或以下的内存空间的信息,并且因此在步骤630处已知相关的内存池。

如果池中有足够的自由颗粒可用,即,有足够数量的颗粒还未被分配到第一级设备中的一个设备(诸如图7的示例中的颗粒425和430),然后,该过程前进至步骤635,在该步骤中,内存相关寄存器在MMIO解码器的DVSEC结构中针对相关根端口以及在相关根端口本身中被重新编程,以便识别分配给该根端口的一个或多个附加颗粒。因此,如果新的或交换的设备的相关根端口是根端口0,则MMIO解码器的DVSEC中的根端口0的内存相关寄存器将被更新,此外,根端口0内的配置寄存器也将被更新。在更新之后,在DVSEC结构中保持的根端口0的信息将再次复制根端口0本身中的更新内容。新设备的配置寄存器也将在该阶段被编程,以识别该设备的分配地址范围。在步骤635之后,然后可在步骤655处调用来自中断的返回。

如果在步骤630处确定池中没有足够的自由颗粒可用,则在步骤640处确定另一个根端口是否具有足够的未使用的分配,即是否已被分配一个或多个未使用的颗粒,以及可使用哪个资源来服务于与另一个根端口相关联的新的或交换的设备。如果是这种情况,则过程前进至步骤645,在该步骤中,MMIO解码器的DVSEC结构中的内存相关寄存器针对两个根端口(即,与新的/交换的设备相关联的根端口和具有足够未使用的分配的根端口)被重新编程。此外,那些受影响的根端口也被重新编程,使得它们的配置寄存器被更新,因此一个或多个颗粒在两个根端口之间有效地移动,以为新的/交换的设备提供足够的资源。再次在该阶段对新的/交换的设备的配置寄存器进行编程。此后,该过程可前进至步骤655。

只有在步骤640处,确定另一个根端口不具有足够的未使用的分配,则该过程前进至步骤650,在该步骤中执行完整的重新平衡机制。这可能例如需要相关池的总体大小增加,并且可能潜在地涉及PCIe设备网络内的大量设备的重新映射。然而,如从图9将显而易见的,在大多数情况下,将不需要执行重新平衡,并且先前描述的机制中的一个机制可用于动态地重新配置内存池内的可用空间,以便适应热插拔或热交换活动。

图10是示出在热移除事件的情况下可以一个示例性配置实现的步骤的流程图。因此,在这种情况下,从PCIe网络中移除现有设备。在步骤700处发生此类事件时,在步骤705处向相关处理器内核触发中断,然后在步骤710处调用先前讨论的枚举技术以便找出所移除的设备的细节,包括该设备的内存要求。在这种情况下,软件已经具有关于被移除设备的内存要求/分配的存储器颗粒的信息,因为该信息已经在关于该设备的先前枚举步骤期间获得。

在步骤715处,然后确定当前操作模式是否需要与该被移除设备相关联的一个或多个颗粒被释放,使得它们然后增加池内未分配颗粒的总数目。如果是,则过程前进至步骤725,在该步骤中,MMIO解码器的DVSEC结构和相关根端口中的内存相关寄存器被重新编程,以便指示一个或多个相关颗粒不再被分配到该根端口。此后,在步骤730处,发生从中断返回。

然而,一旦设备已被移除,颗粒就被释放不是必需的,并且相反,该具体实施可允许颗粒被分配到根端口,即使它们当前未被使用。在这种情况下,过程前进至步骤720,在该步骤中保留关于已分配给当前未使用的相关根端口的地址空间的信息。具体地讲,软件可针对相关根端口跟踪哪些分配的颗粒当前未被使用。此后,过程随后前进至步骤730。

从上述示例中,应当理解,此类示例提供了可用于为FPB地址解码提供SoC级支持的特别有效且标准化的机制。具体地讲,通过提供暴露于相关软件的SoC级MMIO解码器作为PCIe网络的设备,可以使用标准PCIe枚举技术来发现和配置MMIO解码器。MMIO解码器可被暴露作为其自身到软件的根总线上的根复杂集成端点,从而实现解码器的准备枚举和配置。此外,除了强制PCIe能力结构之外,MMIO解码器端点可以设置有DVSEC结构,该DVSEC结构提供了用于捕获关于高MMIO内存池和低MMIO内存池如何在网络的设备的分级结构内形成第一级的各种设备中分配的所有相关信息的非常有效的机制。具体地讲,在那些第一级设备的配置寄存器中保持的信息可以在由MMIO解码器保持的DVSEC结构内直接复制。这提供了用于保留所有所需信息以便于在PCIe网络的设备之间路由请求的特别有效的机制,并且允许在对PCIe网络的配置进行动态调整期间以及在需要时对内存池内的各种颗粒进行有效的重新分配。

在本申请中,词语“被配置为...”用于意指装置的元件具有能够执行所定义的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,装置可具有提供所定义的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。

虽然本文已结合附图详细描述了本发明的示例性实施方案,但应当理解,本发明并不限于那些精确的实施方案。并且在不脱离所附权利要求书所限定的本发明的范围和实质的情况下,本领域的技术人员可对这些实施各种变化、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征的各种组合可与独立权利要求的特征一起进行。

相关技术
  • 用于处理片上系统中的地址解码的装置和方法
  • 用于片上多处理器系统中的空闲状态优化的系统和方法
技术分类

06120112893734