diff --git a/fboss/platform/platform_manager/PciExplorer.cpp b/fboss/platform/platform_manager/PciExplorer.cpp index 49ddd24798ddd..60286e79e5dfc 100644 --- a/fboss/platform/platform_manager/PciExplorer.cpp +++ b/fboss/platform/platform_manager/PciExplorer.cpp @@ -246,6 +246,9 @@ std::vector PciExplorer::createI2cAdapter( uint32_t instanceId) { auto auxData = getAuxData(*i2cAdapterConfig.fpgaIpBlockConfig(), instanceId); auxData.i2c_data.num_channels = *i2cAdapterConfig.numberOfAdapters(); + if (i2cAdapterConfig.busFreqHz().has_value()) { + auxData.i2c_data.bus_freq_hz = *i2cAdapterConfig.busFreqHz(); + } create(pciDevice, *i2cAdapterConfig.fpgaIpBlockConfig(), auxData); return getI2cAdapterBusNums(pciDevice, i2cAdapterConfig, instanceId); } diff --git a/fboss/platform/platform_manager/Utils.cpp b/fboss/platform/platform_manager/Utils.cpp index a76b3076bacff..431669ec930fb 100644 --- a/fboss/platform/platform_manager/Utils.cpp +++ b/fboss/platform/platform_manager/Utils.cpp @@ -287,6 +287,10 @@ std::vector Utils::createI2cAdapterConfigs( i2cAdapterConfig.numberOfAdapters() = *i2cAdapterBlockConfig.numBusesPerAdapter(); + if (i2cAdapterBlockConfig.busFreqHz().has_value()) { + i2cAdapterConfig.busFreqHz() = *i2cAdapterBlockConfig.busFreqHz(); + } + i2cAdapterConfigs.push_back(i2cAdapterConfig); } } diff --git a/fboss/platform/platform_manager/platform_manager_config.thrift b/fboss/platform/platform_manager/platform_manager_config.thrift index 0d23d58469fad..fc20795a7d99a 100644 --- a/fboss/platform/platform_manager/platform_manager_config.thrift +++ b/fboss/platform/platform_manager/platform_manager_config.thrift @@ -320,9 +320,12 @@ struct FpgaIpBlockConfig { // `fpgaIpBlockConfig`: See FgpaIpBlockConfig above // // `numberOfAdapters`: Number of I2C Adapters created by this block. +// +// `busFreqHz`: I2C bus clock frequency in Hz. Applies to all buses in this block. struct I2cAdapterConfig { 1: FpgaIpBlockConfig fpgaIpBlockConfig; 2: i32 numberOfAdapters; + 3: optional i32 busFreqHz; } // Defines generic I2C Adapter block in FPGAs. @@ -366,6 +369,8 @@ struct I2cAdapterConfig { // adapterIndex=2, startAdapterIndex=1: // iobufOffsetCalc: "0x2000 + 1*0x100" // iobufOffsetCalc: "0x2100" +// +// `busFreqHz`: I2C bus clock frequency in Hz. Applies to all buses in this block. struct I2cAdapterBlockConfig { 1: string pmUnitScopedNamePrefix; 2: string deviceName; @@ -374,6 +379,7 @@ struct I2cAdapterBlockConfig { 5: i32 numAdapters; 6: i32 numBusesPerAdapter = 1; 7: string iobufOffsetCalc; + 8: optional i32 busFreqHz; } // Defines a Spi Device in FPGAs.