如何枚举PCIE capability vrf lite

PCIe交换机及其工作方法
专利名称PCIe交换机及其工作方法
技术领域本发明涉及通信技术领域,尤其涉及一种PCIe交换机及其工作方法。
背景技术随着PCIe (Peripheral Component Interconnect Express,外设部件互连标准扩展)技术的发展,通过PCIe协议将多个设备进行板间互联从而进行数据转发已是大势所趋,而这项技术需要用到PCIe交换机。目前,PCIe交换机的硬件主要包括处理器、内存、PCIe交换(switch)芯片、时钟、电源等。PCIe交换机的软件主要包括操作系统以及必要的驱动和管理软件。一般的,PCIe交换芯片与多个转发设备相连形成PCIe树,在P2P (点到点)的工作模式下为连接在其上的多个设备进行数据转发。处理器能够与PCIe交换芯片进行数据和控制信号的传输,从而成为整个PCIe交换树的根结点。在PCIe交换机进行数据转发的过程中,当处理器因故障而复位时,会在整个PCIe树广播热复位(hot reset)命令,从而使PCIe交换芯片复位,PCIe交换机的数据转发因此被中断。
本发明实施例提供了一种PCIe交换机及其工作方法,使得PCIe交换机进行数据转发时不受处理器复位的影响。为达到上述目的,本发明采用如下技术方案:根据本发明的第一方面,提供一种PCIe交换机,包括处理器、PCIe交换芯片、时钟和电源,所述PCIe交换芯片,包括上行口和下行口,所述上行口为连接于所述处理器的端口,所述下行口为连接于转发设备的端口 ;所述PCIe交换芯片用于屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发;所述处理器,连接于所述PCIe交换芯片的上行口,用于在所述处理器复位前广播所述热复位命令,在所述处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到所述PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间;所述时钟为单独为所述PCIe交换芯片提供时钟信号的时钟;所述电源为单独为所述PCIe交换芯片供电的电源。在第一方面的第一种可能的实现方式中,所述PCIe交换芯片,具体用于屏蔽所述处理器广播的热复位命令,利用保留的、所述处理器复位前分配给所述下行口的内存地址空间进行数据转发。在第一方面的第二种可能的实现方式中,所述处理器还用于在所述设备枚举后,对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间。结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述处理器具体用于对所述PCIe交换芯片进行驱动初始化,在所述驱动初始化中为所述PCIe交换芯片的下行口分配第一内存地址空间,所述第一内存地址空间包括所述处理器寻址范围之外的地址空间。结合第一方面以及第一方面的第一至的第三种可能的实现方式,在第四种可能的实现方式中,所述PCIe交换芯片具体用于通过设置所述PCIe交换芯片的上行口的热复位响应标志位的方式来屏蔽所述处理器广播的热复位命令。根据本发明的第二方面,提供一种PCIe交换机的工作方法,包括:处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间;所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发。在第二方面的第一种可能的实现方式中,所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发的步骤具体包括:所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用保留的、所述处理器复位前分配给所述下行口的内存地址空间进行数据转发。在第二方面的第二种可能的实现方式中,在所述当枚举到所述PCIe交换芯片时,仅为PCIe交换芯片的上行口分配内存地址空间的步骤之后,所述方法还包括:所述处理器对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间。结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述处理器对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间具体包括:所述处理器对所述PCIe交换芯片进行驱动初始化,在所述驱动初始化中为所述PCIe交换芯片的下行口分配第一内存地址空间,所述第一内存地址空间包括所述处理器寻址范围之外的地址空间。结合第二方面以及第二方面的第一至的第三种可能的实现方式,在第四种可能的实现方式中,所述PCIe交换芯片屏蔽所述处理器广播的热复位命令具体包括:所述PCIe交换芯片通过设置所述PCIe交换芯片的上行口的热复位响应标志位的方式来屏蔽所述处理器广播的热复位命令。本发明实施例提供的PCIe交换机及其工作方法中,PCIe交换芯片能够在处理器复位时屏蔽所述处理器广播的热复位命令,这样PCIe交换芯片即可在处理器复位时不进行复位,相应的,处理器复位后枚举到PCIe交换芯片时,仅对PCIe交换芯片的上行口分配内存地址空间,而没有对其下行口分配内存地址空间,使得该下行口的内存地址空间没有因为处理器的复位而发生改变。这样,PCIe交换芯片既没有被复位,其下行口也得以保留在处理器复位前所占有的内存地址空间,从而使PCIe交换芯片能够继续利用该下行口的内存地址空间进行数据转发,因此,数据转发不会受到处理器复位的影响。
图1为本发明实施例提供的PCIe交换机的一种结构示意图;图2为本发明实施例提供的PCIe交换机中处理器的一种内存地址空间分配示意图;图3为本发明实施例提供的PCIe交换机的一种工作方法的流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面结合附图对本发明实施例的方法进行详细描述。如图1所示,本发明的实施例提供一种PCIe交换机100,包括处理器l、PCIe交换芯片2、时钟3和电源4,PCIe交换芯片2,包括上行口 21和下行口 22,上行口 21为连接于所述处理器I的端口,下行口 22为连接于转发设备5的端口 ;PCIe交换芯片2用于屏蔽处理器I广播的热复位命令,利用PCIe交换芯片2的下行口 22的内存地址空间进行数据转发;处理器I,通过交换芯片2的上行口 21连接于PCIe交换芯片2,用于在处理器I复位前广播所述热复位命令,在处理器I复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到PCIe交换芯片2时,仅为PCIe交换芯片2的上行口 21分配内存地址空间;时钟3为单独为PCIe交换芯片2提供时钟信号的时钟;电源4为单独为PCIe交换芯片2供电的电源。需要注意的是,此处说的“单独”是指为PCIe交换芯片2提供时钟信号的时钟3和供电电源4不会受处理器I复位的影响,即当处理器I复位时,电源4以及时钟3能够继续为PCIe交换芯片2提供时钟信号和供电。本发明实施例提供的PCIe交换机100中,PCIe交换芯片2能够在处理器I复位时屏蔽所述处理器广播的热复位命令,这样PCIe交换芯片2即可在处理器I复位时不进行复位,相应的,处理器I复位后枚举到PCIe交换芯片2时,仅对PCIe交换芯片2的上行口 21分配内存地址空间,而没有对下行口 22分配内存地址空间,使得下行口 22的内存地址空间没有因为处理器I的复位而发生改变。这样,PCIe交换芯片2既没有被复位,其下行口 22也得以保留在处理器I复位前所占有的内存地址空间,从而使PCIe交换芯片2能够继续利用该下行口 22的内存地址空间进行数据转发,因此能够不受处理器I的复位影响地进行数据转发。需要说明的是,在PCIe交换机100进行数据转发的过程中,PCIe交换机100的软件(如驱动程序和管理软件程序)的缺陷或硬件(如内存、处理器等)的故障可能引起处理器I的复位。由于在PCIe交换机100的系统中处理器I就是PCIe树的根结点(rootcomplex),根据PCIe协议,根结点复位之后,会在整个PCIe树中广播热复位命令序列,从而使该PCIe树中的所有节点都复位。与现有技术不同,本实施例中,PCIe交换芯片2可以用于屏蔽处理器I的热复位命令,即PCIe交换芯片2不响应处理器I广播的热复位命令。具体的,这可以通过多种方法实现,例如,在本发明的一个实施例中,PCIe交换芯片2具体可以用于通过设置其上行口21的热复位响应标志位的方式来屏蔽处理器I广播的热复位命令。其中,所述热复位响应标志位可以是上行口 21中的某个寄存器中的一位,该位的“O”或“I”的状态可以分别表示PCIe交换芯片2是否屏蔽处理器I广播的热复位命令。则PCIe交换芯片2可以通过将该位设置为“O”或为“I”来控制PCIe交换芯片2是否屏蔽该热复位命令。处理器I在复位后,需要重新上电,进行设备枚举操作,并为枚举到的设备分配内存(memory)地址空间,以便使PCIe交换机100恢复正常的数据转发。需要说明的是,本发明实施例中所述的内存地址空间只是处理器I分配给每个与其相连的PCIe交换芯片2的各端口的可用地址范围,并非是将物理内存的内存单元分配给所述PCIe交换芯片2。可选的,处理器I进行的设备枚举操作对于不同的处理器体系结构可以采用不同的方式进行。例如,对于嵌入式系统,设备枚举可以通过bootloader(引导装载程序)进行,如使用uboot进行。而对于非嵌入式系统,设备枚举可以为B10S(基本输入输出系统,Basic Input Output System)进行。与现有技术不同,本发明的实施例的设备枚举并不是将所有枚举到的设备都分配内存地址空间。具体而言,当枚举到PCIe交换芯片2时,处理器I就仅仅对该PCIe交换芯片2的上行口 21分配内存地址空间,而不对PCIe交换芯片2的下行口 22分配内存地址空间,即在对上行口 21分配内存地址空间后,处理器I即开始枚举下一个设备。这就使得PCIe交换芯片2各下行口 22占有的内存地址空间仍然与处理器I复位前各下行口 22占有的内存地址空间相同。也就是说,如果在处理器I复位前所述PCIe交换芯片2正在进行数据转发操作,则当处理器I复位时及复位后,PCIe交换芯片2能够继续执行该数据转发操作,从而使PCIe交换机100有效实现了不受处理器I复位影响地进行数据转发操作。例如,在本发明的一个实施例中,所述PCIe交换芯片2,可以具体用于屏蔽处理器I广播的热复位命令,利用保留的、所述处理器I复位前分配给所述下行口 22的内存地址空间进行数据转发。当然,在本发明的其它实施例中,所述PCIe交换芯片2也可能在所述处理器复位前并没有进行数据转发操作、也没有被分配内存地址空间,则在所述处理器I复位后还是需要给所述PCIe交换芯片2分配内存地址空间才能保证处理器I复位后PCIe交换芯片2能够进行正常的数据转发操作的。因此,进一步的,在本发明的另一个实施例中,处理器I还用于在设备枚举后,对PCIe交换芯片2进行驱动初始化,以为所述PCIe交换芯片2的下行口 22分配内存地址空间。需要说明的是,处理器I从复位到重新恢复正常工作,需要依次经历重新上电、设备枚举、对PCIe交换芯片2进行驱动初始化等过程。其中,驱动初始化是在设备枚举的基础上的进一步操作。具体的,在对所述PCIe交换芯片2进行驱动初始化的过程中,处理器I可以首先确定所述PCIe交换芯片2是否已经被分配了内存地址空间,如果确定该PCIe交换芯片2已经被分配了内存地址空间,那么说明该PCIe交换芯片在处理器复位之前就在进行数据转发或者已经被分配了内存地址空间,则在处理器复位时和复位后,PCIe交换芯片2完全可以利用其下行口 22的这些内存地址空间继续进行数据转发操作,因此无需在驱动初始化中重新为PCIe设备进行内存地址空间分配。如果确定该PCIe交换芯片2的下行口 22尚未被分配内存地址空间,则说明该PCIe交换芯片22在处理器I复位之前没有进行数据转发或者没有被分配内存地址空间。此时若要使该PCIe交换芯片2在处理器I复位后能够进行数据转发操作,则需要处理器I将在设备枚举操作中没有进行的内存地址空间分配补上,即需要处理器I在驱动初始化中对PCIe交换芯片2的下行口 22进行内存地址空间分配。这样,即使所述PCIe交换芯片2在所述处理器I复位前并没有进行数据转发操作或没有被分配内存地址空间,也能够通过所述处理器I对所述PCIe交换芯片2的驱动初始化来为所述PCIe交换芯片2的下行口 22进行内存地址空间分配,从而使所述PCIe交换芯片2能够在处理器I的复位后进行正常的数据转发。可选的,处理器I可以为通过读取所述PCIe交换芯片2中的寄存器来确定PCI e交换芯片2的下行口 22是否已经被分配了内存地址空间。例如,在本发明的一个实施例中,PCIe交换芯片2的上行口 21和每个下行口 22都设置有BAR (Base Address Register,基地址寄存器),BAR中存放着对应端口的基地址,处理器I可以通过读取下行口 22的BAR中的值确定PCIe交换芯片2的下行口 22是否已经被分配了内存地址空间,如果该值不为零,就说明已经被分配了内存地址空间,如果该值为零,则说明该下行口 22尚未被分配内存地址空间。当然,在本发明的其他实施例中,也可以通过其他方法,如通过查看内存状态或确定PCIe交换芯片的结构体是否建立等方法来确定所述PCIe交换芯片2的下行口 22是否已经被分配了内存地址空间,本发明的实施例对此不做限制。如果确定该PCIe交换芯片2的下行口 22尚未被分配内存地址空间,则处理器I需要对所述PCIe交换芯片2的下行口 22进行内存地址空间分配。可选的,处理器I可以为所述PCIe交换芯片2的下行口 22分配任何内存地址空间。但优选的,所述处理器I可以为PCIe交换芯片2的下行口 22分配第一内存地址空间,所述第一内存地址空间包括所述处理器寻址范围之外的地址空间。这样,所述处理器I复位后,对与所述处理器I相连的各个设备或节点进行设备枚举和内存地址空间分配时,都不会将所述第一内存地址空间分配给任何设备或节点。因此在所述处理器对PCIe交换芯片进行驱动初始化时分配给所述PCIe交换芯片的第一内存地址空间不会与之前在设备枚举中所分配的地址空间相冲突,从而保证了所述PCIe交换芯片安全有效的执行数据转发操作。举例说明,在本发明的一个实施例中,所述PCIe交换芯片2为8680芯片,处理器I为mips (Million Instructions Per Second,每秒百万指令)的处理器,该处理器I具有40根地址线。则如图2所示,所述第一内存地址空间优选包括地址为1T(24°)以上的地址空间。需要说明的是,前述实施例中,虽然PCIe交换芯片2能够通过屏蔽处理器复位时广播的热复位命令来避免被复位,但若要该PCIe交换芯片2能够在不受处理器I复位影响的条件下进行数据转发还需要硬件上的支持,即当处理器I复位时为PCIe交换芯片2供电的电源4以及为PCIe交换芯片2提供时钟信号的时钟3都必须有效。相应的,本发明的实施例还提供一种PCIe交换机的工作方法,如图3所示,包括以下步骤:S11,处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间;S12,所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发。本发明实施例提供的PCIe交换机的工作方法中,PCIe交换芯片能够在处理器复位时屏蔽所述处理器广播的热复位命令,这样PCIe交换芯片即可在处理器复位时不进行复位,相应的,处理器复位后枚举到PCIe交换芯片时,仅对PCIe交换芯片的上行口分配内存地址空间,而没有对其下行口分配内存地址空间,使得该下行口的内存地址空间没有因为处理器的复位而发生改变。这样,PCIe交换芯片既没有被复位,其下行口也得以保留在处理器复位前所占有的内存地址空间,从而使PCIe交换芯片能够继续利用该下行口的内存地址空间进行数据转发,因此,数据转发不会受到处理器的复位的影响。与现有技术不同,步骤Sll中,处理器进行的设备枚举操作并非将所有枚举到的设备都分配内存地址空间。具体而言,当枚举到PCIe交换芯片时,处理器就仅仅对该PCIe交换芯片的上行口分配内存地址空间,而不对PCIe交换芯片的下行口分配内存地址空间。即在对上行口分配内存地址空间后,处理器即开始枚举下一个设备,这样,下行口的内存地址空间没有因为处理器的复位而发生改变,即PCIe交换芯片各下行口占有的内存地址空间仍然与处理器复位前各下行口占有的内存地址空间相同。也就是说,如果在处理器复位前所述PCIe交换芯片正在进行数据转发操作,则在步骤Sll中,当处理器复位时及复位后,在步骤S12中,PCIe交换芯片能够继续执行该数据转发操作,从而使PCIe交换机有效实现了不受处理器复位影响地进行数据转发操作。例如,在本发明的一个实施例中,步骤S12具体可以为,PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用保留的、所述处理器复位前分配给所述下行口的内存地址空间进行数据转发。其中,可选的,所述PCIe交换芯片可以通过设置所述PCIe交换芯片的上行口的热复位响应标志位的方式来屏蔽所述处理器广播的热复位命令。当然,在本发明的其它实施例中,所述PCIe交换芯片也可能在所述处理器复位前并没有进行数据转发操作、也没有被分配内存地址空间,则在所述处理器复位后还是需要给所述PCIe交换芯片分配内存地址空间才能保证处理器复位后PCIe交换芯片能够进行正常的数据转发操作的。因此,进一步的,在本发明的另一个实施例中,在步骤Sll之后,所述方法还包括:所述处理器对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间。具体的,在对所述PCIe交换芯片进行驱动初始化的过程中,处理器可以首先确定所述PCIe交换芯片是否已经被分配了内存地址空间,如果确定该PCIe交换芯片已经被分配了内存地址空间,那么说明该PCIe交换芯片在处理器复位之前就在进行数据转发或者已经被分配了内存地址空间,则在处理器复位时和复位后,PCIe交换芯片完全可以利用其下行口的这些内存地址空间继续进行数据转发操作,因此无需在驱动初始化中重新为PCIe设备进行内存地址空间分配。相反,如果确定该PCIe交换芯片的下行口尚未被分配内存地址空间,则说明该PCIe交换芯片在处理器复位之前没有进行数据转发或者没有被分配内存地址空间。此时若要使该PCIe交换芯片在处理器复位后能够进行数据转发操作,则需要处理器将在设备枚举操作中没有进行的内存地址空间分配补上,即需要处理器在驱动初始化中对PCIe交换芯片的下行口进行内存地址空间分配。这样,即使所述PCIe交换芯片在所述处理器复位前并没有进行数据转发操作或没有被分配内存地址空间,也能够通过所述处理器对所述PCIe交换芯片的驱动初始化来为所述PCIe交换芯片的下行口进行内存地址空间分配,从而使所述PCIe交换芯片能够在处理器的复位后进行正常的数据转发。如果确定该PCIe交换芯片的下行口尚未被分配内存地址空间,则处理器需要对所述PCIe交换芯片的下行口进行内存地址空间分配。可选的,处理器I可以为所述PCIe交换芯片的下行口分配任何内存地址空间。但优选的,所述处理器可以为PCIe交换芯片的下行口分配第一内存地址空间,所述第一内存地址空间包括所述处理器寻址范围之外的地址空间。这样,所述处理器复位后,对与所述处理器相连的各个设备或节点进行设备枚举和内存地址空间分配时,都不会将所述第一内存地址空间分配给任何设备或节点。因此在所述处理器对PCIe交换芯片进行驱动初始化时分配给所述PCIe交换芯片的第一内存地址空间不会与之前在设备枚举中所分配的地址空间相冲突,从而保证了所述PCIe交换芯片安全有效的执行数据转发操作。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
1.一种外设部件互连标准扩展PCIe交换机,包括处理器、PCIe交换芯片、时钟和电源,其特征在于,
所述PCIe交换芯片,包括上行口和下行口,所述上行口为连接于所述处理器的端口,所述下行口为连接于转发设备的端口 ;所述PCIe交换芯片用于屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发;
所述处理器,连接于所述PCIe交换芯片的上行口,用于在所述处理器复位前广播所述热复位命令,在所述处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到所述PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间;
所述时钟为单独为所述PCIe交换芯片提供时钟信号的时钟;所述电源为单独为所述PCIe交换芯片供电的电源。
2.根据权利要求1所述的交换机,其特征在于,
所述PCIe交换芯片,具体用于屏蔽所述处理器广播的热复位命令,利用保留的、所述处理器复位前分配给所述下行口的内存地址空间进行数据转发。
3.根据权利要求1所述的交换机,其特征在于,所述处理器还用于在所述设备枚举后,对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间。
4.根据权利要求3所述的交换机,其特征在于,所述处理器具体用于对所述PCIe交换芯片进行驱动初始化,在所述驱动初始化中为所述PCIe交换芯片的下行口分配第一内存地址空间,所述第一内存地址空间包括所述处理器寻址范围之外的地址空间。
5.根据权利要求1-4中任一项所述的交换机,其特征在于,所述PCIe交换芯片具体用于通过设置所述PCIe交换芯片的上行口的热复位响应标志位的方式来屏蔽所述处理器广播的热复位命令。
6.一种外设部件互连标准扩展PCIe交换机的工作方法,其特征在于,包括:
处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间;
所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发。
7.根据权利要求6所述的方法,其特征在于,所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发的步骤具体包括:
所述PCIe交换芯片屏蔽所述处理器广播的热复位命令,利用保留的、所述处理器复位前分配给所述下行口的内存地址空间进行数据转发。
8.根据权利要求6所述的方法,其特征在于,在所述当枚举到所述PCIe交换芯片时,仅为PCIe交换芯片的上行口分配内存地址空间的步骤之后,所述方法还包括:所述处理器对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间。
9.根据权利要求8所述的方法,其特征在于,所述处理器对所述PCIe交换芯片进行驱动初始化,以为所述PCIe交换芯片的下行口分配内存地址空间具体包括:所述处理器对所述PCIe交换芯片进行驱动初始化,在所述驱动初始化中为所述PCIe交换芯片的下行口分配第一内存地址空间,所述第 一内存地址空间包括所述处理器寻址范围之外的地址空间。
10.根据权利要求6-9中任一项所述的方法,其特征在于,所述PCIe交换芯片屏蔽所述处理器广播的热复位命令具体包括:所述PCIe交换芯片通过设置所述PCIe交换芯片的上行口的热复位响应标志 位的方式来屏蔽所述处理器广播的热复位命令。
本发明实施例提供了一种PCIe交换机及其工作方法,涉及通信技术领域,为使PCIe交换机进行数据转发时不受处理器复位的影响而发明。所述交换机包括处理器、PCIe交换芯片、时钟和电源,所述PCIe交换芯片,包括上行口和下行口;所述PCIe交换芯片用于屏蔽所述处理器广播的热复位命令,利用所述PCIe交换芯片的下行口的内存地址空间进行数据转发;所述处理器,连接于所述PCIe交换芯片的上行口,用于在所述处理器复位前广播所述热复位命令,在所述处理器复位后进行设备枚举并为枚举到的设备分配内存地址空间,当枚举到所述PCIe交换芯片时,仅为所述PCIe交换芯片的上行口分配内存地址空间。本发明可用于PCIe交换技术中。
文档编号H04L12/04GKSQ
公开日日 申请日期日 优先权日日
发明者杜阁 申请人:华为技术有限公司Access denied | lkml.org used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website (lkml.org) has banned your access based on your browser's signature (39b05e93d1ec6bc8-ua98).keystone dsp做PCIE RC端, 并枚举PCIE设备的问题 - C6000(TM)多核 - 德州仪器在线技术支持社区
keystone dsp做PCIE RC端, 并枚举PCIE设备的问题
发表于9月前
<input type="hidden" id="hGroupID" value="32"
&span style=&font-size:&>Hi 各位管理好,&/span>&/p>
&p>&span style=&font-size:&>我在使用EVM6657开发板,因为需要6657做PCIE主设备,并且外挂pcie桥设备,所以需要进行PCIE设备枚举。 &/span>&/p>
&p>&span style=&font-size:&>使用的测试例程是 6657_STK中的PCIE例程, 见附件 &/span>&/p>
&p>&span style=&font-size:&>例程中配置 bus-0 dev-0 func-0&/span>&/p>
&p>&span style=&font-size:&> 配置PCIE Application 寄存器中的 cfg 寄存器配置PCIE从设备地址 &/span>&/p>
&p>&span style=&font-size:&>Configuration Transaction Setup Register (CFG_SETUP) &/span>&/p>
&p>&span style=&font-size:&>remote_cfg_setup.config_type= 0; //remote device is EP &/span>&/p>
&p>&span style=&font-size:&>remote_cfg_setup.config_bus= 0; &/span>&/p>
&p>&span style=&font-size:&>remote_cfg_setup.config_device= 0; &/span>&/p>
&p>&span style=&font-size:&>remote_cfg_setup.config_function= 0; &/span>&/p>
&p>&span style=&font-size:&>KeyStone_PCIE_remote_CFG_setup(&remote_cfg_setup); &/span>&/p>
&p>&span style=&font-size:&>经过KeyStone_PCIE_Init 之后, 可以在 0x 地址上读出地址为(bus-0 dev-0 func-0 )设备的配置空间, &/span>&/p>
&p>&span style=&font-size:&>这个设备是一个pcie-to-pci bridge设备,其内容如下: &/span>&/p>
&p>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/53/5811.bridge1.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/53/5811.bridge1.png& border=&0& alt=& &>&/a>&/p>
&p>&span style=&font-size:&>对pcie-bridge 的初始化如下:&/span>&/p>
&p>&span style=&font-size:&> 1. 配置 bridge 配置空的 memory_base meory_limited 和 prefetch_memory_base prefetch_memory_limited &/span>&/p>
&p>&span style=&font-size:&>在例程中定义 memory_base 为 0x size为256M &/span>&/p>
&p>&span style=&font-size:&>prefetch_memory_base 为 0x size 为256M &/span>&/p>
&p>&span style=&font-size:&>2, 配置 primary bus num 为0, secondary bus no 为1 , subordinate bus no为1 (硬件连接上 pcie-to-pci 桥设备下只有一个pci设备) &/span>&/p>
&p>&span style=&font-size:&>3, 配置 command寄存器, 使能memory 和 prefetch memory , disable IO &/span>&/p>
&p>&span style=&font-size:&>配置之后的配置空间内容如下: &/span>&/p>
&p>&span style=&font-size:&>&a href=&/cfs-file.ashx/__key/communityserver-discussions-components-files/53/4188.bridge2.png&>&img src=&/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/53/4188.bridge2.png& border=&0& alt=& &>&/a>&/span>&/p>
&p>&span style=&font-size:&>&br>&/span>&/p>
&p>&span style=&font-size:&>配置过PCIE-bridge之后, 设置bus-1 dev-0 fun-0 配置application 中的cfg寄存器, &/span>&/p>
&p>&span style=&font-size:&>之后,重新读取 0x中的配置空间, 按照我的理解, 重新配置pcie设备的地址,从0x中读出的配置&/span>&/p>
&p>&span style=&font-size:&>空间应该是新设备的配置空间, 如果vendor id为0或者全F,表示设备不存在, &/span>&/p>
&p>&span style=&font-size:&>但是我重新配置了 cfg寄存器之后, 读取出来的 0x 的配置空间还是桥设备的配置空间, 没有变化, &/span>&/p>
&p>&span style=&font-size:&>请教下在扫描过程中, 重新配置 cfg 寄存器中pcie设备的地址之后, 是否需要进行其他操作, 才能从 0x位置读取到对应设备的配置空间。&/span>&/p>&div style=&clear:&>&/div>" />
keystone dsp做PCIE RC端, 并枚举PCIE设备的问题
此问题已被解答
All Replies
Hi 各位管理好,
我在使用EVM6657开发板,因为需要6657做PCIE主设备,并且外挂pcie桥设备,所以需要进行PCIE设备枚举。
使用的测试例程是 6657_STK中的PCIE例程, 见附件
例程中配置 bus-0 dev-0 func-0
配置PCIE Application 寄存器中的 cfg 寄存器配置PCIE从设备地址
Configuration Transaction Setup Register (CFG_SETUP)
remote_cfg_setup.config_type= 0; //remote device is EP
remote_cfg_setup.config_bus= 0;
remote_cfg_setup.config_device= 0;
remote_cfg_setup.config_function= 0;
KeyStone_PCIE_remote_CFG_setup(&remote_cfg_setup);
经过KeyStone_PCIE_Init 之后, 可以在 0x 地址上读出地址为(bus-0 dev-0 func-0 )设备的配置空间,
这个设备是一个pcie-to-pci bridge设备,其内容如下:
对pcie-bridge 的初始化如下:
1. 配置 bridge 配置空的 memory_base meory_limited 和 prefetch_memory_base prefetch_memory_limited
在例程中定义 memory_base 为 0x size为256M
prefetch_memory_base 为 0x size 为256M
2, 配置 primary bus num 为0, secondary bus no 为1 , subordinate bus no为1 (硬件连接上 pcie-to-pci 桥设备下只有一个pci设备)
3, 配置 command寄存器, 使能memory 和 prefetch memory , disable IO
配置之后的配置空间内容如下:
配置过PCIE-bridge之后, 设置bus-1 dev-0 fun-0 配置application 中的cfg寄存器,
之后,重新读取 0x中的配置空间, 按照我的理解, 重新配置pcie设备的地址,从0x中读出的配置
空间应该是新设备的配置空间, 如果vendor id为0或者全F,表示设备不存在,
但是我重新配置了 cfg寄存器之后, 读取出来的 0x 的配置空间还是桥设备的配置空间, 没有变化,
请教下在扫描过程中, 重新配置 cfg 寄存器中pcie设备的地址之后, 是否需要进行其他操作, 才能从 0x位置读取到对应设备的配置空间。
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
我使用的 STK6657 例程
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
我在 PCIE 的 wiki&
http://processors./index.php/PCI_Express_(PCIe)_Resource_Wiki_for_Keystone_Devices?keyMatch=6657%20pcie&tisearch=Search-EN
上面找到一些对PCIE RC端枚举设备的介绍, 其中介绍通过配置 application中的cfg寄存器设置从设备地址, 就可以直接从0x地址读出对应的配置空
间, 但是现在我使用设个步骤, 发现读出的配置空间还是 地址为 bus-0, dev-0 func-0 的桥设备的配置空间,
TI doesn&t provide PCIE RC enumeration example/driver source. Normally the RC runs some operating system that performs the enumeration with the following steps.
If C66x device is configured as RC, then CFG_SETUP register is used to specify the target bus/device/function numbers for the target device (switch/EP) and try to read/write the remote device space in MMR (from offset 0x2000 in PCIe MMR space) to generate those configuration requests.
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
探花12640分
如果按照memory 路由访问,bridge上挂接的PCI设备能否正常读取呢?
另外在访问新的PCI设备时,配置CFG_SETUP新的BUS,DEVICE,FUNCTION number后,代码是怎么去访问新设备的CFG空间的?
还有一点,可以通过RC去读取PCIe 桥接上的状态寄存器,以此来判别 PCIe 的down stream端口上的PCI设备是否正常,具体要看PCIe协议
上述内容如果回答了您的问题,请点击标签栏&是&按钮。您的轻轻一点,会帮助我们更好的管理论坛内容,谢谢!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
如果按照memory 路由访问,bridge上挂接的PCI设备能否正常读取呢?
管理, 这里的memory路由访问是指通过访问bridge上bar空间的memory地址来访问下级PCI设备吗, 这个bridge两个bar空间的长度都是0
另外在访问新的PCI设备时,配置CFG_SETUP新的BUS,DEVICE,FUNCTION number后,代码是怎么去访问新设备的CFG空间的?
配置CFG_SETUP寄存器之后, 我就直接访问 0x 地址, 希望从此地址中读到对应设备的配置空间, 但是没有成功, 读到的还是地址0 0 0的桥的配置空间, 是不是我在配置CFG_SETUP寄存器之后, 还需要进行其他操作来重新让新地址的设备配置空间映射到 0x地址来, 这里是我比较疑惑的地方
还有一点,可以通过RC去读取PCIe 桥接上的状态寄存器,以此来判别 PCIe 的down stream端口上的PCI设备是否正常,具体要看PCIe协议
这部分我来找PCIE桥的文档来找下相应状态
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
在X86系统上, 可以通过
0xCF8和0xCFC端口 对应&寄存器CONFIG_ADDRESS与CONFIG_DATA
首先配置&CONFIG_ADDRESS 即 PCI设备的 bus dev fun reg
则可以从&CONFIG_DATA 中读出对应配置空间的内容
在TI芯片上, 这个步骤是不是只要在 CFG_SETUP中配置 PCI设备地址后, 系统就会自动将对应设备的配置空间映射到 0x 地址
还是中间需要其他步骤
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
需要管理的帮助
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
探花12640分
1 是的,是指通过memory 空间来访问下级PCI 设备,BAR空间长度都是0?那数据怎么访问下级PCI设备呢?无论BRIDGE的端口还是PCI 设备都应该是作为EP的,由RC统一编址
2 &能不能一上电枚举完成后,直接通过CFG_SETUP然后访问PCI设备,即第一次先配置PCI,不去配PCI桥
上述内容如果回答了您的问题,请点击标签栏&是&按钮。您的轻轻一点,会帮助我们更好的管理论坛内容,谢谢!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
1 是的,是指通过memory 空间来访问下级PCI 设备,BAR空间长度都是0?那数据怎么访问下级PCI设备呢?无论BRIDGE的端口还是PCI 设备都应该是作为EP的,由RC统一编址
如果PCIE-bridge 本身没有需要操作的内存区域,则bridge的bar长度就是0的, 这个是正常的,
hipcie-bridge 通过 memory_base 和 memory_limited 和 prefetch_memory_base prefetch_memory_limited 来标示 本桥下面所挂的设备的 PCIE地址范围, &
2 &能不能一上电枚举完成后,直接通过CFG_SETUP然后访问PCI设备,即第一次先配置PCI,不去配PCI桥
这个应该是不可以的, &PCIE扫描的过程是如果扫描到桥, 需要配制桥的 primary_bus , secondary_bus, 和 oriented_bus , 然后才可以访问到 bridge 下面的设备, 不能绕过桥直接初始化下面挂载的设备.
我觉得现在一个非常关键的问题就是 c66x dsp 中 CFG_SETUP 寄存器,配制完成之后, 是否需要其他的操作步骤, 才能从 0x 地址读取对应设备的配制空间
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
探花12640分
primary_bus , secondary_bus, 和 oriented_bus 确实需要枚举软件去配置,以便找到下一BUS上挂的设备。
PCI 桥上可能也有LINK 状态寄存器或者类似状态寄存器,能不能先读下这类寄存器,首先看看LINK是否能SETUP,下一步再去看CFG空间能不能访问。
回到您的问题,受限于我们的实验环境,目前我们还只测试过直通的,如果经过桥接,DSP作为RC的场景还没有测试,所以不确定是否需要其他操作。但从协议来看,如果前面LINK正常建立,CFG_SETUP正确,应该是可以的。我们还需要确定一下。
能否把你这部分的配置代码和PCI桥的手册发上来,我们一起看看
上述内容如果回答了您的问题,请点击标签栏&是&按钮。您的轻轻一点,会帮助我们更好的管理论坛内容,谢谢!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
HI , 谢谢 Thomas Yang1
现在可以枚举设备了, 只是要注意, 在PCIE application中配置 CFG_SETUP时候, 要注意设置 type
根据文档中有
Configuration type for outbound configuration accesses.0 = Type 0 access.1 = Type 1 access.
文档中介绍 type 0 为 EP端(有6个bar空间), type 1为rc或者桥(只有2个bar空间)
但是代码中实验的情况与此相反, bus-0 dev-0 func-0 type-0 可以在x地址读到桥设备的配置空间
如果要读取pcie-bridge下面的EP设备, 需要将type设置为1, 如 bus-1 dev-4 fun-0 type-1 则可以在0x读到桥下面EP设备的配置空间
另外还有个奇怪的现象, 如果设置 bus-1 dev-0 fun-0 type-1 准备扫描bus1下面的pci设备, 在读0x地址的时候,程序会跑飞, 然后我只有放弃循环扫描, 而用初始化固定地址的EP设备来代替
以上问题在去年一个帖子中, 有人曾经提问过, 也遇到类似问题, 帖子地址:
/question_answer/dsp_arm/c6000_multicore/f/53/p/.aspx#336383
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
探花12640分
谢谢反馈,
&文档中介绍 type 0 为 EP端(有6个bar空间), type 1为rc或者桥(只有2个bar空间)
但是代码中实验的情况与此相反, bus-0 dev-0 func-0 type-0 可以在x地址读到桥设备的配置空间
如果要读取pcie-bridge下面的EP设备, 需要将type设置为1,&
那之前您的实验中,在配置桥的寄存器的时候,已经将type 定义为0了?
这个我会向designer求证这个问题
&如 bus-1 dev-4 fun-0 type-1 则可以在0x读到桥下面EP设备的配置空间&
您系统的拓扑关系是怎么样的?为什么会有dev-4存在。
按照PCIE协议,以1个RC链接1个switch,switch 1个口 链接1个EP为例:RC BUS 是0,SWITCH upstream BUS是1, switch internal BUS是2,Switch downstream port0 BUS上挂的EP是3,
TI PCIE IP设计时,作为RC,是将上面序号都减去1进行枚举编址的(除了RC BUS),
SWITCH upstream BUS是0, switch internal BUS是1,Switch downstream port0 BUS上挂的EP是2
那么你之前提到的 dev-1 应该是switch internal BUS,而dev-2是downstream port 0 bus上挂的EP
上述内容如果回答了您的问题,请点击标签栏&是&按钮。您的轻轻一点,会帮助我们更好的管理论坛内容,谢谢!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
&如 bus-1 dev-4 fun-0 type-1 则可以在0x读到桥下面EP设备的配置空间&
您系统的拓扑关系是怎么样的?为什么会有dev-4存在。
我的拓扑关系如下 6657 PCIE 接 pcie-bridge , &pcie-bridge 下面的 dev 4接了 pci设备
所以我这里定义 接pcie-bridge的bus为 bus 0, &pcie-bridge 下面的bus为 1 &所以枚举 pci设备的时候使用了 bus-1 dev-4 fun-0的地址
You have posted to a forum that requires a moderator to approve posts before they are publicly available.

我要回帖

更多关于 capacity和capability 的文章

 

随机推荐