1- From 3ae636735e2e2581a01bb855b547bdcaa5c07c78 Mon Sep 17 00:00:00 2001
1+ From 00006a6046fa2604cfea07d4e971ae3e10c900da Mon Sep 17 00:00:00 2001
22From: Vadim Pasternak <
[email protected] >
33Date: Thu, 4 Jan 2024 07:40:04 +0000
4- Subject: [PATCH 1/5 ] platform: mellanox: Downstream: Introduce support of
4+ Subject: [PATCH 3/7 ] platform: mellanox: Downstream: Introduce support of
55 Nvidia next genration L1 tray switch
66
77Add support for new L1 tray switch node providing L1 connectivity for
@@ -17,11 +17,11 @@ of the all required platform driver.
1717Signed-off-by: Oleksandr Shamray <
[email protected] >
1818Reviewed-by: Vadim Pasternak <
[email protected] >
1919---
20- drivers/platform/mellanox/mlx-platform.c | 1125 ++++++++++++++++++++--
21- 1 file changed, 1025 insertions(+), 100 deletions(-)
20+ drivers/platform/mellanox/mlx-platform.c | 1143 ++++++++++++++++++++--
21+ 1 file changed, 1043 insertions(+), 100 deletions(-)
2222
2323diff --git a/drivers/platform/mellanox/mlx-platform.c b/drivers/platform/mellanox/mlx-platform.c
24- index 4be0f29cc..f33aca457 100644
24+ index 4be0f29cc..3787dc8fb 100644
2525--- a/drivers/platform/mellanox/mlx-platform.c
2626+++ b/drivers/platform/mellanox/mlx-platform.c
2727@@ -53,6 +53,7 @@
@@ -246,7 +246,7 @@ index 4be0f29cc..f33aca457 100644
246246 {
247247 .label = "erot1_recovery",
248248 .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
249- @@ -7012,139 +7151,675 @@ static struct mlxreg_core_platform_data mlxplat_smart_switch_regs_io_data = {
249+ @@ -7012,139 +7151,693 @@ static struct mlxreg_core_platform_data mlxplat_smart_switch_regs_io_data = {
250250 .counter = ARRAY_SIZE(mlxplat_mlxcpld_smart_switch_regs_io_data),
251251 };
252252
@@ -626,6 +626,12 @@ index 4be0f29cc..f33aca457 100644
626626+ .mode = 0444,
627627+ },
628628+ {
629+ + .label = "reset_sw_reset",
630+ + .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
631+ + .mask = GENMASK(7, 0) & ~BIT(4),
632+ + .mode = 0444,
633+ + },
634+ + {
629635+ .label = "reset_pwr_button_or_leak_con",
630636+ .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
631637+ .mask = GENMASK(7, 0) & ~BIT(5),
@@ -644,6 +650,18 @@ index 4be0f29cc..f33aca457 100644
644650+ .mode = 0444,
645651+ },
646652+ {
653+ + .label = "reset_cpu_thermal",
654+ + .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
655+ + .mask = GENMASK(7, 0) & ~BIT(0),
656+ + .mode = 0444,
657+ + },
658+ + {
659+ + .label = "reset_aux_pwr_or_reload",
660+ + .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
661+ + .mask = GENMASK(7, 0) & ~BIT(2),
662+ + .mode = 0444,
663+ + },
664+ + {
647665+ .label = "reset_comex_pwr_fail",
648666+ .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
649667+ .mask = GENMASK(7, 0) & ~BIT(3),
@@ -1018,7 +1036,7 @@ index 4be0f29cc..f33aca457 100644
10181036 .capability = MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET,
10191037 },
10201038 };
1021- @@ -7435,6 +8110 ,124 @@ static struct mlxreg_core_platform_data mlxplat_xdr_fan_data = {
1039+ @@ -7435,6 +8128 ,124 @@ static struct mlxreg_core_platform_data mlxplat_xdr_fan_data = {
10221040 .version = 1,
10231041 };
10241042
@@ -1143,15 +1161,15 @@ index 4be0f29cc..f33aca457 100644
11431161 /* Watchdog type1: hardware implementation version1
11441162 * (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140 systems).
11451163 */
1146- @@ -7670,6 +8463 ,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1164+ @@ -7670,6 +8481 ,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11471165 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
11481166 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
11491167 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
11501168+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
11511169 case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET:
11521170 case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET:
11531171 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
1154- @@ -7734,6 +8528 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1172+ @@ -7734,6 +8546 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11551173 case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET:
11561174 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
11571175 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1160,7 +1178,7 @@ index 4be0f29cc..f33aca457 100644
11601178 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
11611179 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
11621180 case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET:
1163- @@ -7755,6 +8551 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1181+ @@ -7755,6 +8569 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11641182 case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET:
11651183 case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET:
11661184 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
@@ -1169,15 +1187,15 @@ index 4be0f29cc..f33aca457 100644
11691187 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
11701188 return true;
11711189 }
1172- @@ -7797,6 +8595 ,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1190+ @@ -7797,6 +8613 ,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11731191 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
11741192 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
11751193 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
11761194+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
11771195 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
11781196 case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
11791197 case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
1180- @@ -7889,6 +8688 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1198+ @@ -7889,6 +8706 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11811199 case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
11821200 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
11831201 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1187,7 +1205,7 @@ index 4be0f29cc..f33aca457 100644
11871205 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
11881206 case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
11891207 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
1190- @@ -7948,6 +8750 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1208+ @@ -7948,6 +8768 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11911209 case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
11921210 case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
11931211 case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
@@ -1197,15 +1215,15 @@ index 4be0f29cc..f33aca457 100644
11971215 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
11981216 return true;
11991217 }
1200- @@ -7990,6 +8795 ,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1218+ @@ -7990,6 +8813 ,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
12011219 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
12021220 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
12031221 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
12041222+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
12051223 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
12061224 case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
12071225 case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
1208- @@ -8080,6 +8886 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1226+ @@ -8080,6 +8904 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
12091227 case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
12101228 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
12111229 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1215,7 +1233,7 @@ index 4be0f29cc..f33aca457 100644
12151233 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
12161234 case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
12171235 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
1218- @@ -8133,6 +8942 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1236+ @@ -8133,6 +8960 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
12191237 case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
12201238 case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
12211239 case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
@@ -1225,7 +1243,7 @@ index 4be0f29cc..f33aca457 100644
12251243 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
12261244 return true;
12271245 }
1228- @@ -8201,6 +9013 ,17 @@ static const struct reg_default mlxplat_mlxcpld_regmap_smart_switch[] = {
1246+ @@ -8201,6 +9031 ,17 @@ static const struct reg_default mlxplat_mlxcpld_regmap_smart_switch[] = {
12291247 MLXPLAT_CPLD_LPC_SM_SW_MASK },
12301248 };
12311249
@@ -1243,7 +1261,7 @@ index 4be0f29cc..f33aca457 100644
12431261 struct mlxplat_mlxcpld_regmap_context {
12441262 void __iomem *base;
12451263 };
1246- @@ -8323,6 +9146 ,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_smart_switch = {
1264+ @@ -8323,6 +9164 ,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_smart_switch = {
12471265 .reg_write = mlxplat_mlxcpld_reg_write,
12481266 };
12491267
@@ -1264,7 +1282,7 @@ index 4be0f29cc..f33aca457 100644
12641282 /* Wait completion routine for indirect access for register map */
12651283 static int mlxplat_fpga_completion_wait(struct mlxplat_mlxcpld_regmap_context *ctx)
12661284 {
1267- @@ -8448,6 +9285 ,8 @@ static struct spi_board_info *mlxplat_spi;
1285+ @@ -8448,6 +9303 ,8 @@ static struct spi_board_info *mlxplat_spi;
12681286 static struct pci_dev *lpc_bridge;
12691287 static struct pci_dev *i2c_bridge;
12701288 static struct pci_dev *jtag_bridge;
@@ -1273,7 +1291,7 @@ index 4be0f29cc..f33aca457 100644
12731291
12741292 /* Platform default reset function */
12751293 static int mlxplat_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused)
1276- @@ -8480,6 +9319 ,26 @@ static void mlxplat_poweroff(void)
1294+ @@ -8480,6 +9337 ,26 @@ static void mlxplat_poweroff(void)
12771295 kernel_halt();
12781296 }
12791297
@@ -1300,7 +1318,7 @@ index 4be0f29cc..f33aca457 100644
13001318 static int __init mlxplat_register_platform_device(void)
13011319 {
13021320 mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, -1,
1303- @@ -9011,6 +9870 ,38 @@ static int __init mlxplat_dmi_ng400_hi171_matched(const struct dmi_system_id *dm
1321+ @@ -9011,6 +9888 ,38 @@ static int __init mlxplat_dmi_ng400_hi171_matched(const struct dmi_system_id *dm
13041322 return mlxplat_register_platform_device();
13051323 }
13061324
@@ -1339,7 +1357,7 @@ index 4be0f29cc..f33aca457 100644
13391357 static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
13401358 {
13411359 .callback = mlxplat_dmi_default_wc_matched,
1342- @@ -9165,6 +10056 ,40 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
1360+ @@ -9165,6 +10074 ,40 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
13431361 DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI172"),
13441362 },
13451363 },
@@ -1380,7 +1398,7 @@ index 4be0f29cc..f33aca457 100644
13801398 {
13811399 .callback = mlxplat_dmi_msn274x_matched,
13821400 .matches = {
1383- @@ -9253,8 +10178 ,8 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1401+ @@ -9253,8 +10196 ,8 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
13841402 int shift, i;
13851403
13861404 /* Scan adapters from expected id to verify it is free. */
@@ -1391,7 +1409,7 @@ index 4be0f29cc..f33aca457 100644
13911409 mlxplat_max_adap_num; i++) {
13921410 search_adap = i2c_get_adapter(i);
13931411 if (search_adap) {
1394- @@ -9263,7 +10188 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1412+ @@ -9263,7 +10206 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
13951413 }
13961414
13971415 /* Return if expected parent adapter is free. */
@@ -1400,7 +1418,7 @@ index 4be0f29cc..f33aca457 100644
14001418 return 0;
14011419 break;
14021420 }
1403- @@ -9285,7 +10210 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1421+ @@ -9285,7 +10228 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
14041422 }
14051423
14061424 /* Shift bus only if mux provided by 'mlxplat_mux_data'. */
0 commit comments