1- From 8c0b8789348c70b3530df050a49a3dbbd4afa085 Mon Sep 17 00:00:00 2001
1+ From 3ae636735e2e2581a01bb855b547bdcaa5c07c78 Mon Sep 17 00:00:00 2001
22From: Vadim Pasternak <
[email protected] >
33Date: Thu, 4 Jan 2024 07:40:04 +0000
4- Subject: [PATCH 5 /5] platform: mellanox: Downstream: Introduce support of
4+ Subject: [PATCH 1 /5] 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 | 1119 +++++++++++++++++++++++++++- --
21- 1 file changed, 1019 insertions(+), 100 deletions(-)
20+ drivers/platform/mellanox/mlx-platform.c | 1125 ++++++++++++++++++++--
21+ 1 file changed, 1025 insertions(+), 100 deletions(-)
2222
2323diff --git a/drivers/platform/mellanox/mlx-platform.c b/drivers/platform/mellanox/mlx-platform.c
24- index 4be0f29..8690660 100644
24+ index 4be0f29cc..f33aca457 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 4be0f29..8690660 100644
246246 {
247247 .label = "erot1_recovery",
248248 .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
249- @@ -7012,139 +7151,669 @@ static struct mlxreg_core_platform_data mlxplat_smart_switch_regs_io_data = {
249+ @@ -7012,139 +7151,675 @@ 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
@@ -662,6 +662,12 @@ index 4be0f29..8690660 100644
662662+ .mode = 0444,
663663+ },
664664+ {
665+ + .label = "reset_from_erot",
666+ + .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
667+ + .mask = GENMASK(7, 0) & ~BIT(6),
668+ + .mode = 0444,
669+ + },
670+ + {
665671+ .label = "reset_erot",
666672+ .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
667673+ .mask = GENMASK(7, 0) & ~BIT(0),
@@ -1012,7 +1018,7 @@ index 4be0f29..8690660 100644
10121018 .capability = MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET,
10131019 },
10141020 };
1015- @@ -7435,6 +8104 ,124 @@ static struct mlxreg_core_platform_data mlxplat_xdr_fan_data = {
1021+ @@ -7435,6 +8110 ,124 @@ static struct mlxreg_core_platform_data mlxplat_xdr_fan_data = {
10161022 .version = 1,
10171023 };
10181024
@@ -1137,15 +1143,15 @@ index 4be0f29..8690660 100644
11371143 /* Watchdog type1: hardware implementation version1
11381144 * (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140 systems).
11391145 */
1140- @@ -7670,6 +8457 ,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1146+ @@ -7670,6 +8463 ,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11411147 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
11421148 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
11431149 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
11441150+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
11451151 case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET:
11461152 case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET:
11471153 case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
1148- @@ -7734,6 +8522 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1154+ @@ -7734,6 +8528 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11491155 case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET:
11501156 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
11511157 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1154,7 +1160,7 @@ index 4be0f29..8690660 100644
11541160 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
11551161 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
11561162 case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET:
1157- @@ -7755,6 +8545 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
1163+ @@ -7755,6 +8551 ,8 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
11581164 case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET:
11591165 case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET:
11601166 case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
@@ -1163,15 +1169,15 @@ index 4be0f29..8690660 100644
11631169 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
11641170 return true;
11651171 }
1166- @@ -7797,6 +8589 ,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1172+ @@ -7797,6 +8595 ,7 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11671173 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
11681174 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
11691175 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
11701176+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
11711177 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
11721178 case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
11731179 case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
1174- @@ -7889,6 +8682 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1180+ @@ -7889,6 +8688 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11751181 case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
11761182 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
11771183 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1181,7 +1187,7 @@ index 4be0f29..8690660 100644
11811187 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
11821188 case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
11831189 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
1184- @@ -7948,6 +8744 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
1190+ @@ -7948,6 +8750 ,9 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
11851191 case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
11861192 case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
11871193 case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
@@ -1191,15 +1197,15 @@ index 4be0f29..8690660 100644
11911197 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
11921198 return true;
11931199 }
1194- @@ -7990,6 +8789 ,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1200+ @@ -7990,6 +8795 ,7 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
11951201 case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
11961202 case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
11971203 case MLXPLAT_CPLD_LPC_REG_LED8_OFFSET:
11981204+ case MLXPLAT_CPLD_LPC_REG_LED9_OFFSET:
11991205 case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
12001206 case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
12011207 case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
1202- @@ -8080,6 +8880 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1208+ @@ -8080,6 +8886 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
12031209 case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
12041210 case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
12051211 case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
@@ -1209,7 +1215,7 @@ index 4be0f29..8690660 100644
12091215 case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
12101216 case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
12111217 case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
1212- @@ -8133,6 +8936 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
1218+ @@ -8133,6 +8942 ,9 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
12131219 case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
12141220 case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
12151221 case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
@@ -1219,7 +1225,7 @@ index 4be0f29..8690660 100644
12191225 case MLXPLAT_CPLD_LPC_REG_EXT_MIN_OFFSET ... MLXPLAT_CPLD_LPC_REG_EXT_MAX_OFFSET:
12201226 return true;
12211227 }
1222- @@ -8201,6 +9007 ,17 @@ static const struct reg_default mlxplat_mlxcpld_regmap_smart_switch[] = {
1228+ @@ -8201,6 +9013 ,17 @@ static const struct reg_default mlxplat_mlxcpld_regmap_smart_switch[] = {
12231229 MLXPLAT_CPLD_LPC_SM_SW_MASK },
12241230 };
12251231
@@ -1237,7 +1243,7 @@ index 4be0f29..8690660 100644
12371243 struct mlxplat_mlxcpld_regmap_context {
12381244 void __iomem *base;
12391245 };
1240- @@ -8323,6 +9140 ,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_smart_switch = {
1246+ @@ -8323,6 +9146 ,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_smart_switch = {
12411247 .reg_write = mlxplat_mlxcpld_reg_write,
12421248 };
12431249
@@ -1258,7 +1264,7 @@ index 4be0f29..8690660 100644
12581264 /* Wait completion routine for indirect access for register map */
12591265 static int mlxplat_fpga_completion_wait(struct mlxplat_mlxcpld_regmap_context *ctx)
12601266 {
1261- @@ -8448,6 +9279 ,8 @@ static struct spi_board_info *mlxplat_spi;
1267+ @@ -8448,6 +9285 ,8 @@ static struct spi_board_info *mlxplat_spi;
12621268 static struct pci_dev *lpc_bridge;
12631269 static struct pci_dev *i2c_bridge;
12641270 static struct pci_dev *jtag_bridge;
@@ -1267,7 +1273,7 @@ index 4be0f29..8690660 100644
12671273
12681274 /* Platform default reset function */
12691275 static int mlxplat_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused)
1270- @@ -8480,6 +9313 ,26 @@ static void mlxplat_poweroff(void)
1276+ @@ -8480,6 +9319 ,26 @@ static void mlxplat_poweroff(void)
12711277 kernel_halt();
12721278 }
12731279
@@ -1294,7 +1300,7 @@ index 4be0f29..8690660 100644
12941300 static int __init mlxplat_register_platform_device(void)
12951301 {
12961302 mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, -1,
1297- @@ -9011,6 +9864 ,38 @@ static int __init mlxplat_dmi_ng400_hi171_matched(const struct dmi_system_id *dm
1303+ @@ -9011,6 +9870 ,38 @@ static int __init mlxplat_dmi_ng400_hi171_matched(const struct dmi_system_id *dm
12981304 return mlxplat_register_platform_device();
12991305 }
13001306
@@ -1333,10 +1339,11 @@ index 4be0f29..8690660 100644
13331339 static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
13341340 {
13351341 .callback = mlxplat_dmi_default_wc_matched,
1336- @@ -9166,6 +10051,40 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
1342+ @@ -9165,6 +10056,40 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
1343+ DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI172"),
13371344 },
13381345 },
1339- {
1346+ + {
13401347+ .callback = mlxplat_dmi_l1_scale_out_switch_matched,
13411348+ .matches = {
13421349+ DMI_MATCH(DMI_BOARD_NAME, "VMOD0021"),
@@ -1370,11 +1377,10 @@ index 4be0f29..8690660 100644
13701377+ DMI_MATCH(DMI_BOARD_NAME, "VMOD0021"),
13711378+ },
13721379+ },
1373- + {
1380+ {
13741381 .callback = mlxplat_dmi_msn274x_matched,
13751382 .matches = {
1376- DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
1377- @@ -9253,8 +10172,8 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1383+ @@ -9253,8 +10178,8 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
13781384 int shift, i;
13791385
13801386 /* Scan adapters from expected id to verify it is free. */
@@ -1385,7 +1391,7 @@ index 4be0f29..8690660 100644
13851391 mlxplat_max_adap_num; i++) {
13861392 search_adap = i2c_get_adapter(i);
13871393 if (search_adap) {
1388- @@ -9263,7 +10182 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1394+ @@ -9263,7 +10188 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
13891395 }
13901396
13911397 /* Return if expected parent adapter is free. */
@@ -1394,7 +1400,7 @@ index 4be0f29..8690660 100644
13941400 return 0;
13951401 break;
13961402 }
1397- @@ -9285,7 +10204 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
1403+ @@ -9285,7 +10210 ,7 @@ static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
13981404 }
13991405
14001406 /* Shift bus only if mux provided by 'mlxplat_mux_data'. */
@@ -1404,5 +1410,5 @@ index 4be0f29..8690660 100644
14041410
14051411 return 0;
14061412- -
1407- 2.8.4
1413+ 2.20.1
14081414
0 commit comments