90
90
#define MLXPLAT_CPLD_LPC_REG_FAN_OFFSET 0x88
91
91
#define MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET 0x89
92
92
#define MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET 0x8a
93
+ #define MLXPLAT_CPLD_LPC_REG_EROT_OFFSET 0x91
94
+ #define MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET 0x92
95
+ #define MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET 0x93
96
+ #define MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET 0x94
97
+ #define MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET 0x95
98
+ #define MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET 0x96
93
99
#define MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET 0x9a
94
100
#define MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET 0x9b
95
101
#define MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET 0x9c
109
115
#define MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET 0xaa
110
116
#define MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET 0xab
111
117
#define MLXPLAT_CPLD_LPC_REG_LC_PWR_ON 0xb2
118
+ #define MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET 0xc2
119
+ #define MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT 0xc3
112
120
#define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET 0xc7
113
121
#define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET 0xc8
114
122
#define MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET 0xc9
214
222
#define MLXPLAT_CPLD_LED_HI_NIBBLE_MASK GENMASK(3, 0)
215
223
#define MLXPLAT_CPLD_VOLTREG_UPD_MASK GENMASK(5, 4)
216
224
#define MLXPLAT_CPLD_GWP_MASK GENMASK(0, 0)
225
+ #define MLXPLAT_CPLD_EROT_MASK GENMASK(1, 0)
217
226
#define MLXPLAT_CPLD_I2C_CAP_BIT 0x04
218
227
#define MLXPLAT_CPLD_I2C_CAP_MASK GENMASK(5, MLXPLAT_CPLD_I2C_CAP_BIT)
219
228
243
252
#define MLXPLAT_CPLD_CH2_ETH_MODULAR 3
244
253
#define MLXPLAT_CPLD_CH3_ETH_MODULAR 43
245
254
#define MLXPLAT_CPLD_CH4_ETH_MODULAR 51
255
+ #define MLXPLAT_CPLD_CH2_RACK_SWITCH 18
246
256
247
257
/* Number of LPC attached MUX platform devices */
248
258
#define MLXPLAT_CPLD_LPC_MUX_DEVS 4
280
290
/* Minimum power required for turning on Ethernet modular system (WATT) */
281
291
#define MLXPLAT_CPLD_ETH_MODULAR_PWR_MIN 50
282
292
293
+ /* Default value for PWM control register for rack switch system */
294
+ #define MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT 0xf4
295
+
283
296
/* mlxplat_priv - platform private data
284
297
* @pdev_i2c - i2c controller platform device
285
298
* @pdev_mux - array of mux platform devices
@@ -460,6 +473,36 @@ static struct i2c_mux_reg_platform_data mlxplat_modular_mux_data[] = {
460
473
},
461
474
};
462
475
476
+ /* Platform channels for rack swicth system family */
477
+ static const int mlxplat_rack_switch_channels [] = {
478
+ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 ,
479
+ };
480
+
481
+ /* Platform rack switch mux data */
482
+ static struct i2c_mux_reg_platform_data mlxplat_rack_switch_mux_data [] = {
483
+ {
484
+ .parent = 1 ,
485
+ .base_nr = MLXPLAT_CPLD_CH1 ,
486
+ .write_only = 1 ,
487
+ .reg = (void __iomem * )MLXPLAT_CPLD_LPC_REG1 ,
488
+ .reg_size = 1 ,
489
+ .idle_in_use = 1 ,
490
+ .values = mlxplat_rack_switch_channels ,
491
+ .n_values = ARRAY_SIZE (mlxplat_rack_switch_channels ),
492
+ },
493
+ {
494
+ .parent = 1 ,
495
+ .base_nr = MLXPLAT_CPLD_CH2_RACK_SWITCH ,
496
+ .write_only = 1 ,
497
+ .reg = (void __iomem * )MLXPLAT_CPLD_LPC_REG2 ,
498
+ .reg_size = 1 ,
499
+ .idle_in_use = 1 ,
500
+ .values = mlxplat_msn21xx_channels ,
501
+ .n_values = ARRAY_SIZE (mlxplat_msn21xx_channels ),
502
+ },
503
+
504
+ };
505
+
463
506
/* Platform hotplug devices */
464
507
static struct i2c_board_info mlxplat_mlxcpld_pwr [] = {
465
508
{
@@ -2064,6 +2107,97 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_nvlink_blade_data = {
2064
2107
.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW ,
2065
2108
};
2066
2109
2110
+ /* Platform hotplug for switch systems family data */
2111
+ static struct mlxreg_core_data mlxplat_mlxcpld_erot_ap_items_data [] = {
2112
+ {
2113
+ .label = "erot1_ap" ,
2114
+ .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET ,
2115
+ .mask = BIT (0 ),
2116
+ .hpdev .nr = MLXPLAT_CPLD_NR_NONE ,
2117
+ },
2118
+ {
2119
+ .label = "erot2_ap" ,
2120
+ .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET ,
2121
+ .mask = BIT (1 ),
2122
+ .hpdev .nr = MLXPLAT_CPLD_NR_NONE ,
2123
+ },
2124
+ };
2125
+
2126
+ static struct mlxreg_core_data mlxplat_mlxcpld_erot_error_items_data [] = {
2127
+ {
2128
+ .label = "erot1_error" ,
2129
+ .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET ,
2130
+ .mask = BIT (0 ),
2131
+ .hpdev .nr = MLXPLAT_CPLD_NR_NONE ,
2132
+ },
2133
+ {
2134
+ .label = "erot2_error" ,
2135
+ .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET ,
2136
+ .mask = BIT (1 ),
2137
+ .hpdev .nr = MLXPLAT_CPLD_NR_NONE ,
2138
+ },
2139
+ };
2140
+
2141
+ static struct mlxreg_core_item mlxplat_mlxcpld_rack_switch_items [] = {
2142
+ {
2143
+ .data = mlxplat_mlxcpld_ext_psu_items_data ,
2144
+ .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF ,
2145
+ .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET ,
2146
+ .mask = MLXPLAT_CPLD_PSU_EXT_MASK ,
2147
+ .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET ,
2148
+ .count = ARRAY_SIZE (mlxplat_mlxcpld_ext_psu_items_data ),
2149
+ .inversed = 1 ,
2150
+ .health = false,
2151
+ },
2152
+ {
2153
+ .data = mlxplat_mlxcpld_ext_pwr_items_data ,
2154
+ .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF ,
2155
+ .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET ,
2156
+ .mask = MLXPLAT_CPLD_PWR_EXT_MASK ,
2157
+ .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET ,
2158
+ .count = ARRAY_SIZE (mlxplat_mlxcpld_ext_pwr_items_data ),
2159
+ .inversed = 0 ,
2160
+ .health = false,
2161
+ },
2162
+ {
2163
+ .data = mlxplat_mlxcpld_default_ng_fan_items_data ,
2164
+ .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF ,
2165
+ .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET ,
2166
+ .mask = MLXPLAT_CPLD_FAN_NG_MASK ,
2167
+ .count = ARRAY_SIZE (mlxplat_mlxcpld_default_ng_fan_items_data ),
2168
+ .inversed = 1 ,
2169
+ .health = false,
2170
+ },
2171
+ {
2172
+ .data = mlxplat_mlxcpld_erot_ap_items_data ,
2173
+ .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF ,
2174
+ .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET ,
2175
+ .mask = MLXPLAT_CPLD_EROT_MASK ,
2176
+ .count = ARRAY_SIZE (mlxplat_mlxcpld_erot_ap_items_data ),
2177
+ .inversed = 1 ,
2178
+ .health = false,
2179
+ },
2180
+ {
2181
+ .data = mlxplat_mlxcpld_erot_error_items_data ,
2182
+ .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF ,
2183
+ .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET ,
2184
+ .mask = MLXPLAT_CPLD_EROT_MASK ,
2185
+ .count = ARRAY_SIZE (mlxplat_mlxcpld_erot_error_items_data ),
2186
+ .inversed = 1 ,
2187
+ .health = false,
2188
+ },
2189
+ };
2190
+
2191
+ static
2192
+ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = {
2193
+ .items = mlxplat_mlxcpld_rack_switch_items ,
2194
+ .counter = ARRAY_SIZE (mlxplat_mlxcpld_rack_switch_items ),
2195
+ .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET ,
2196
+ .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX ,
2197
+ .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET ,
2198
+ .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW ,
2199
+ };
2200
+
2067
2201
/* Platform led default data */
2068
2202
static struct mlxreg_core_data mlxplat_mlxcpld_default_led_data [] = {
2069
2203
{
@@ -2947,6 +3081,44 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = {
2947
3081
.mask = GENMASK (7 , 0 ) & ~BIT (2 ),
2948
3082
.mode = 0200 ,
2949
3083
},
3084
+ {
3085
+ .label = "erot1_reset" ,
3086
+ .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET ,
3087
+ .mask = GENMASK (7 , 0 ) & ~BIT (6 ),
3088
+ .mode = 0644 ,
3089
+ },
3090
+ {
3091
+ .label = "erot2_reset" ,
3092
+ .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET ,
3093
+ .mask = GENMASK (7 , 0 ) & ~BIT (7 ),
3094
+ .mode = 0644 ,
3095
+ },
3096
+ {
3097
+ .label = "erot1_recovery" ,
3098
+ .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET ,
3099
+ .mask = GENMASK (7 , 0 ) & ~BIT (6 ),
3100
+ .mode = 0644 ,
3101
+ },
3102
+ {
3103
+ .label = "erot2_recovery" ,
3104
+ .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET ,
3105
+ .mask = GENMASK (7 , 0 ) & ~BIT (7 ),
3106
+ .mode = 0644 ,
3107
+ },
3108
+ {
3109
+ .label = "erot1_wp" ,
3110
+ .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET ,
3111
+ .mask = GENMASK (7 , 0 ) & ~BIT (4 ),
3112
+ .mode = 0644 ,
3113
+ .secured = 1 ,
3114
+ },
3115
+ {
3116
+ .label = "erot2_wp" ,
3117
+ .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET ,
3118
+ .mask = GENMASK (7 , 0 ) & ~BIT (5 ),
3119
+ .mode = 0644 ,
3120
+ .secured = 1 ,
3121
+ },
2950
3122
{
2951
3123
.label = "reset_long_pb" ,
2952
3124
.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET ,
@@ -3142,6 +3314,25 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = {
3142
3314
.mask = GENMASK (7 , 0 ) & ~BIT (4 ),
3143
3315
.mode = 0644 ,
3144
3316
},
3317
+ {
3318
+ .label = "erot1_ap_reset" ,
3319
+ .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET ,
3320
+ .mask = GENMASK (7 , 0 ) & ~BIT (0 ),
3321
+ .mode = 0444 ,
3322
+ },
3323
+ {
3324
+ .label = "erot2_ap_reset" ,
3325
+ .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET ,
3326
+ .mask = GENMASK (7 , 0 ) & ~BIT (1 ),
3327
+ .mode = 0444 ,
3328
+ },
3329
+ {
3330
+ .label = "spi_chnl_select" ,
3331
+ .reg = MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT ,
3332
+ .mask = GENMASK (7 , 0 ),
3333
+ .bit = 1 ,
3334
+ .mode = 0644 ,
3335
+ },
3145
3336
{
3146
3337
.label = "config1" ,
3147
3338
.reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET ,
@@ -4257,6 +4448,10 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
4257
4448
case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET :
4258
4449
case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET :
4259
4450
case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET :
4451
+ case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET :
4452
+ case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET :
4453
+ case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET :
4454
+ case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET :
4260
4455
case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET :
4261
4456
case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET :
4262
4457
case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET :
@@ -4274,6 +4469,7 @@ static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
4274
4469
case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET :
4275
4470
case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET :
4276
4471
case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON :
4472
+ case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT :
4277
4473
case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET :
4278
4474
case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET :
4279
4475
case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET :
@@ -4358,6 +4554,12 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
4358
4554
case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET :
4359
4555
case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET :
4360
4556
case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET :
4557
+ case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET :
4558
+ case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET :
4559
+ case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET :
4560
+ case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET :
4561
+ case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET :
4562
+ case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET :
4361
4563
case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET :
4362
4564
case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET :
4363
4565
case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET :
@@ -4382,6 +4584,8 @@ static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
4382
4584
case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET :
4383
4585
case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET :
4384
4586
case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON :
4587
+ case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET :
4588
+ case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT :
4385
4589
case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET :
4386
4590
case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET :
4387
4591
case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET :
@@ -4492,6 +4696,12 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
4492
4696
case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET :
4493
4697
case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET :
4494
4698
case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET :
4699
+ case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET :
4700
+ case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET :
4701
+ case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET :
4702
+ case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET :
4703
+ case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET :
4704
+ case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET :
4495
4705
case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET :
4496
4706
case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET :
4497
4707
case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET :
@@ -4516,6 +4726,8 @@ static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
4516
4726
case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET :
4517
4727
case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET :
4518
4728
case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON :
4729
+ case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET :
4730
+ case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT :
4519
4731
case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET :
4520
4732
case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET :
4521
4733
case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET :
@@ -4583,6 +4795,13 @@ static const struct reg_default mlxplat_mlxcpld_regmap_ng400[] = {
4583
4795
{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET , 0x00 },
4584
4796
};
4585
4797
4798
+ static const struct reg_default mlxplat_mlxcpld_regmap_rack_switch [] = {
4799
+ { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET , MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT },
4800
+ { MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET , 0x00 },
4801
+ { MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET , 0x00 },
4802
+ { MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET , 0x00 },
4803
+ };
4804
+
4586
4805
static const struct reg_default mlxplat_mlxcpld_regmap_eth_modular [] = {
4587
4806
{ MLXPLAT_CPLD_LPC_REG_GP2_OFFSET , 0x61 },
4588
4807
{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET , 0x00 },
@@ -4676,6 +4895,20 @@ static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng400 = {
4676
4895
.reg_write = mlxplat_mlxcpld_reg_write ,
4677
4896
};
4678
4897
4898
+ static const struct regmap_config mlxplat_mlxcpld_regmap_config_rack_switch = {
4899
+ .reg_bits = 8 ,
4900
+ .val_bits = 8 ,
4901
+ .max_register = 255 ,
4902
+ .cache_type = REGCACHE_FLAT ,
4903
+ .writeable_reg = mlxplat_mlxcpld_writeable_reg ,
4904
+ .readable_reg = mlxplat_mlxcpld_readable_reg ,
4905
+ .volatile_reg = mlxplat_mlxcpld_volatile_reg ,
4906
+ .reg_defaults = mlxplat_mlxcpld_regmap_rack_switch ,
4907
+ .num_reg_defaults = ARRAY_SIZE (mlxplat_mlxcpld_regmap_rack_switch ),
4908
+ .reg_read = mlxplat_mlxcpld_reg_read ,
4909
+ .reg_write = mlxplat_mlxcpld_reg_write ,
4910
+ };
4911
+
4679
4912
static const struct regmap_config mlxplat_mlxcpld_regmap_config_eth_modular = {
4680
4913
.reg_bits = 8 ,
4681
4914
.val_bits = 8 ,
@@ -4957,6 +5190,27 @@ static int __init mlxplat_dmi_nvlink_blade_matched(const struct dmi_system_id *d
4957
5190
return 1 ;
4958
5191
}
4959
5192
5193
+ static int __init mlxplat_dmi_rack_switch_matched (const struct dmi_system_id * dmi )
5194
+ {
5195
+ int i ;
5196
+
5197
+ mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM ;
5198
+ mlxplat_mux_num = ARRAY_SIZE (mlxplat_rack_switch_mux_data );
5199
+ mlxplat_mux_data = mlxplat_rack_switch_mux_data ;
5200
+ mlxplat_hotplug = & mlxplat_mlxcpld_rack_switch_data ;
5201
+ mlxplat_hotplug -> deferred_nr =
5202
+ mlxplat_msn21xx_channels [MLXPLAT_CPLD_GRP_CHNL_NUM - 1 ];
5203
+ mlxplat_led = & mlxplat_default_ng_led_data ;
5204
+ mlxplat_regs_io = & mlxplat_default_ng_regs_io_data ;
5205
+ mlxplat_fan = & mlxplat_default_fan_data ;
5206
+ for (i = 0 ; i < ARRAY_SIZE (mlxplat_mlxcpld_wd_set_type2 ); i ++ )
5207
+ mlxplat_wd_data [i ] = & mlxplat_mlxcpld_wd_set_type2 [i ];
5208
+ mlxplat_i2c = & mlxplat_mlxcpld_i2c_ng_data ;
5209
+ mlxplat_regmap_config = & mlxplat_mlxcpld_regmap_config_rack_switch ;
5210
+
5211
+ return 1 ;
5212
+ }
5213
+
4960
5214
static const struct dmi_system_id mlxplat_dmi_table [] __initconst = {
4961
5215
{
4962
5216
.callback = mlxplat_dmi_default_wc_matched ,
@@ -5014,6 +5268,13 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
5014
5268
DMI_MATCH (DMI_BOARD_NAME , "VMOD0009" ),
5015
5269
},
5016
5270
},
5271
+ {
5272
+ .callback = mlxplat_dmi_rack_switch_matched ,
5273
+ .matches = {
5274
+ DMI_MATCH (DMI_BOARD_NAME , "VMOD0010" ),
5275
+ DMI_EXACT_MATCH (DMI_PRODUCT_SKU , "HI142" ),
5276
+ },
5277
+ },
5017
5278
{
5018
5279
.callback = mlxplat_dmi_ng400_matched ,
5019
5280
.matches = {
0 commit comments