环境:米尔3093开发板
目标:开发PCIe x4的raid卡,使用 mctp over smbus 协议
请教一个问题:
我现在手上有一块料尔Hi3093开发板,已经刷上OpenUBMC固件,可以正常运行2509版本OpenUBMC。
但是开发板上只有一个 x1 的pcie槽,我想适配一张 x4 的HBA raid卡,可以在板上外接一个pcie扩展槽来实现吗?如果可以接上,可以在这个pcie槽上走 mctp over smbus协议不?
环境:米尔3093开发板
目标:开发PCIe x4的raid卡,使用 mctp over smbus 协议
请教一个问题:
我现在手上有一块料尔Hi3093开发板,已经刷上OpenUBMC固件,可以正常运行2509版本OpenUBMC。
但是开发板上只有一个 x1 的pcie槽,我想适配一张 x4 的HBA raid卡,可以在板上外接一个pcie扩展槽来实现吗?如果可以接上,可以在这个pcie槽上走 mctp over smbus协议不?
要看带内os是否可以识别到该pcie卡,并且分配其使用的eid。分配了bmc才可以去带外通信
第一:一楼说法应该是不准确的。
第二:你如果要把BMC作为ep设备,这个东西硬件要改线。有个时钟信号除非加扩展版,或者改线才行,还有一些其他信号,但是顶多影响传输稳定性,核心就是时钟信号线。要么让米尔电子给你改,要么让他们再打板个ep设备。bmc sdk设备树都是默认配置,时钟信号那些东西和sdk无任何关联,本质更多的pcie是由硬件布线决定,rx tx这种交换延长线很多,但是核心问题不是这块,而是其他硬件信号。
注:从参考电路看,当前 CLK_PCIE1_*_100M 是板端输出到连接器侧的 100 MHz 参考时钟实现,符合板端作为 RC/主板给下游设备供 REFCLK 的思路;若要把 Hi3093 做成 EP 插到宿主,按常规 Common Refclk 架构需要改为由宿主向 EP 提供 REFCLK,因此通常需要改线或增加时钟 MUX/Buffer(否则只能寄希望于 SRIS/SRNS,通用 PC 平台成功率不高)。
第三:作为ep后走mctp over pcie或者smbus 其实是pcie 上有smbus信号,如果是是mctp over pcie,那就是需要cpu 本身支持,也即是cpu RTL CORE 需要支持pcie下发的tlp包含vdm,这是第一点,第二点是支持了还需要bios开启这个功能,第三除了CPU rc端要支持,并且两端 EP(Hi3093 和目标设备)都支持对应的 MCTP over PCIe 绑定行为。
注:VDM 属于 PCIe Message TLP 类型,是否可用首先取决于 Root Port/RC(CPU 或 PCH 内的 PCIe 控制器 IP)是否实现并对软件暴露相关收发/路由能力;其次取决于 BIOS/平台是否启用允许该类消息通过;最后还依赖 OS/驱动是否实现 MCTP over PCIe transport。
第四:如果是mctp over smbus,那应该直接走smbus,而不是关注pcie上的smbus,你说扩展再插HBA raid卡,这是典型的错误思维,pcie上的smbus不是在pcie config寄存器上面,而是固定地址寄存器,就是smbus信号,你转接一个,最多是转接卡转接了pcie的信号线而已。mctp over smbus本质也不是必须走在pcie上金手指上,我们常说的pcie金手指不仅仅上面只有pcie 信号,还有一些其他信号,GPU上就有smbus,或者其他固定地址寄存器,还有有些桥片上pcie 还附带了其他相关固定地址寄存器。你可以理解是总线提供了地址,而不是寄存器提供了地址,寄存器本身是不存在地址的。有些cpu的总线地址转换其实内部rtl包含了MMIO控制器。
第五:真正你要想完全学习开发openUBMC,这块板子必须要做成ep设备。
第三点:我看到开发板上的pcie控制器,都是支持ep模式的,是否就可以理解为第三点有可能走得通?
关于第四点,有两点不成熟的想法,是否可以修改社区版本的sr拓扑,来使得pcie口也能走smbus与HBA raid 走 i2c交互
另一点就是: 如果以上方法不可行,是否可以pcie口只供电,通过从HBA raid卡上飞两条 i2c 线出来,接到开发板上的 gpio口上,这样通过这两飞线来交互,当然前提是需要HBA卡也支持。
请指教,谢谢。
我再详细解释下把:
1.pcie硬件链路核心数据传输是通过差分信号,你说走pcie和raid卡通信,那是raid卡内部要重新设计了,走pcie再通过bar空间转发给固件,这种设计模式尤其是依赖驱动,而且ep和ep之间直接通信,那是需要dma引擎以及点对点绕过host 内存需要pcie switch,不然会出现一致性问题,比如博通的plx 8749,88096。如果说就单纯作为RC来说倒是可以这样做,但是业界不存在BMC作为RC。 所以EP和EP通信,也是疑难点非常多,也是没必要做的事情,其次EP和EP通信确实存在,那是GPU direct storage,比如英伟达的GDS,通过pcie switch 绕过主机内存直接和存储通信,或者fpga和存储进行点对点通信,但是对于intel CPU来说,目前这种做法顶多是把CPU压力降低了,延迟并没有降低太多。
2.业界BMC都是EP模式,包括社区软件层面默认配置版本,芯片本身功能不用过分关注,只是寄存器配置。
3.社区版本不管怎么变都只是软件层面配置,你现在是硬件层面都没有链路可走,如何讨论软件层面。
4.不要纠结PCIE,单纯PCIE不可能和smbus连接通信。这是规范和标准问题,PCIe 连接器上可能带 SMBus/I2C 的 sideband 引脚,那是独立于 PCIe 协议的两根线(时钟/数据),走的是 I2C/SMBus 电气与寻址规则;
5.硬件怎么做是硬件要考虑的,链路能对的上,那就是可以通信。