【已评审】新增CSR中CPLD模拟I2C拓展芯片对象

背景

准备开发一款类似Riser卡的交换板。该交换板支持超过8路PCIe*4通道,每路PCIe对应一路SMBus。当前CSR中并没有这么多I2C通道配置的器件。硬件目前使用多路I2C连接到CPLD上,通过CPLD来实现I2C选择的操作。

关联ISSUE

暂无

整体方案

在CSR中新增I2C拓展对象,该对象支持任意多路I2C拓展(需设置一个上限)。该对象可以通过CPLD来实现,在切换前后可以使用Accessor进行读写控制,用于通道切换或其他操作。目前想法是通过控制两个寄存器来进行通道切换,一个控制是否开启切换功能,另外一个控制切换通道。考虑到数据量问题,可以用多路I2C连接到CPLD,每路I2C选择多路SMBus

应用场景:用于CPLD模拟I2C拓展器件,支持超过8路的拓展情景

graph LR
    %% 输入部分
    I2C1[I2C线路1] --> CPLD{CPLD芯片}
    I2C3[I2C线路....] --> CPLD{CPLD芯片}
    I2Cn[I2C线路n] --> CPLD{CPLD芯片}
    %% 输出分组
    CPLD -->|n*SMBus| Group[SMBus]

  

评审点

  1. 是否新增一个CSR对象类用于I2C拓展(超过8路)
  2. 新增的I2C拓展最大支持多少路数,最少支持多少路数
  3. 是否可以用CPLD来实现,或者说来模拟
  4. 新增对象是否可以同时多路入,多路出操作

详细描述

示例:

参考Pca9545、I2cMux类针对CPLD等器件的I2C拓展设计。

{
    "ManagementTopology":{
        "i2c_1":{
            "Chip":[
                "CpldExpI2c_0"
            ]
        },
        "CpldExpI2c_0":{
            "Buses":[
                "CpldI2cMux_0",
                "CpldI2cMux_1",
                "CpldI2cMux_2",
                "CpldI2cMux_3",
                "CpldI2cMux_4",
                "CpldI2cMux_5",
                "CpldI2cMux_6",
                "CpldI2cMux_7",
                "CpldI2cMux_8",
                "CpldI2cMux_9",
                "CpldI2cMux_10"
            ]
        },
        "CpldI2cMux_0":{
            "Connectors": [
                "Connector_PCIe_0"
            ]
        }
    },
    "Objects":{
        "CpldExpI2c_0":{
            "Chip":"#/Smc_BrdSMC",                  // 用于确定该I2C是从哪个CPLD或者器件发起
            "ChanneNum":10,                         // I2C需要拓展数量。
            "PrepareAction":0,                      // 切换操作前置操作对象。用于在切换通道前操作
            "Action":"#/Accessor_Switch.Value",     // 切换操作动作对象,用于通道切换
            "FinishAction":0                        // 切换操作后置操作对象。用于在切换通道后操作
        },
        "CpldI2cMux_0":{
            "PrepareValue":0,   // 通道切换前置操作赋值,不需要时不用配置
            "Value":0,	        // 通道切换时,切换操作对象赋值
            "FinishValue":0,    // 通道切换后置操作赋值,不需要时不用配置
            "ChannelId":0	// 通道ID,建议和Value值保持一致
        },
	// 下面两个是另外一种Action操作
        "CpldExpI2c_1":{
            "Chip":"#/Smc_BrdSMC",                  // 用于确定该I2C是从哪个CPLD或者器件发起
            "ChanneNum":10,                         // I2C需要拓展数量。
            "Actions":[                             // 切换操作动作对象,用于通道切换。按照顺序操作
                "#/Accessor_PrepareSwitch.Value",
                "#/Accessor_Switch.Value",
                "#/Accessor_FinishSwitch.Value"
            ]
        },
        "CpldI2cMux_1":{
            "Values":[          // 通道切换时,切换操作对象赋值
                0,
                1,
                2
            ],
            "ChannelId":0	    // 通道ID,建议和Values中切换操作值保持一致
        }
    }
}

CpldExpI2c_0:类似Pca9545,该对象用于描述从CPLD等器件拓展I2C功能。这里想到两种操作方式,通过Action配置丢Accessor或其他对象来切换对应i2c拓展通道。

CpldExpI2c_1:CpldExpI2c_0的另外一种想法,将切换前操作与切换后操作合并到数组中。这要求CpldI2cMux_1中Values中数据数量和Actions对象保持一致。否则按照0填充

CpldI2cMux_0:I2C通路,参考I2cMux对象,用于配置具体选择的I2C通路

评审结论

RM SIG评审后认为该接口不需要开发。

遗留问题

PCA9545不确定支持20路

RMSIG:1.CPLD模拟9545+9548实现远超20路SMBus。2.立项时与华为PAE沟通。3.SMBus是否涉及Master切换。