diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-10 16:55:33 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-02-10 16:55:33 -0500 |
commit | cc5cb5af3a3363bc6f0530703895bf9c5fa2f159 (patch) | |
tree | 24bac57b13b2bc6b5b80b4bbf22dd32966469326 /drivers/platform | |
parent | e9d46f74ecf5eb2c604b32bb43e632d2a5bd44a9 (diff) | |
parent | 1bd42d94ccab4eab5dc9dc9d303a687a61cde9bd (diff) |
Merge tag 'platform-drivers-x86-v4.16-3' of git://github.com/dvhart/linux-pdx86
Pull x86 platform driver updates from Darren Hart:
"Mellanox fixes and new system type support.
Mostly data for new system types with a correction and an
uninitialized variable fix"
[ Pulling from github because git.infradead.org currently seems to be
down for some reason, but Darren had a backup location - Linus ]
* tag 'platform-drivers-x86-v4.16-3' of git://github.com/dvhart/linux-pdx86:
platform/x86: mlx-platform: Add support for new 200G IB and Ethernet systems
platform/x86: mlx-platform: Add support for new msn201x system type
platform/x86: mlx-platform: Add support for new msn274x system type
platform/x86: mlx-platform: Fix power cable setting for msn21xx family
platform/x86: mlx-platform: Add define for the negative bus
platform/x86: mlx-platform: Use defines for bus assignment
platform/mellanox: mlxreg-hotplug: Fix uninitialized variable
Diffstat (limited to 'drivers/platform')
-rw-r--r-- | drivers/platform/mellanox/mlxreg-hotplug.c | 2 | ||||
-rw-r--r-- | drivers/platform/x86/mlx-platform.c | 372 |
2 files changed, 363 insertions, 11 deletions
diff --git a/drivers/platform/mellanox/mlxreg-hotplug.c b/drivers/platform/mellanox/mlxreg-hotplug.c index 0dfa1ca0d05b..313cf8ad77bf 100644 --- a/drivers/platform/mellanox/mlxreg-hotplug.c +++ b/drivers/platform/mellanox/mlxreg-hotplug.c | |||
@@ -300,7 +300,7 @@ mlxreg_hotplug_health_work_helper(struct mlxreg_hotplug_priv_data *priv, | |||
300 | { | 300 | { |
301 | struct mlxreg_core_data *data = item->data; | 301 | struct mlxreg_core_data *data = item->data; |
302 | u32 regval; | 302 | u32 regval; |
303 | int i, ret; | 303 | int i, ret = 0; |
304 | 304 | ||
305 | for (i = 0; i < item->count; i++, data++) { | 305 | for (i = 0; i < item->count; i++, data++) { |
306 | /* Mask event. */ | 306 | /* Mask event. */ |
diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c index 27de29961f5e..454e14f02285 100644 --- a/drivers/platform/x86/mlx-platform.c +++ b/drivers/platform/x86/mlx-platform.c | |||
@@ -77,10 +77,13 @@ | |||
77 | #define MLXPLAT_CPLD_AGGR_FAN_MASK_DEF 0x40 | 77 | #define MLXPLAT_CPLD_AGGR_FAN_MASK_DEF 0x40 |
78 | #define MLXPLAT_CPLD_AGGR_MASK_DEF (MLXPLAT_CPLD_AGGR_PSU_MASK_DEF | \ | 78 | #define MLXPLAT_CPLD_AGGR_MASK_DEF (MLXPLAT_CPLD_AGGR_PSU_MASK_DEF | \ |
79 | MLXPLAT_CPLD_AGGR_FAN_MASK_DEF) | 79 | MLXPLAT_CPLD_AGGR_FAN_MASK_DEF) |
80 | #define MLXPLAT_CPLD_AGGR_MASK_NG_DEF 0x04 | ||
81 | #define MLXPLAT_CPLD_LOW_AGGR_MASK_LOW 0xc0 | ||
80 | #define MLXPLAT_CPLD_AGGR_MASK_MSN21XX 0x04 | 82 | #define MLXPLAT_CPLD_AGGR_MASK_MSN21XX 0x04 |
81 | #define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0) | 83 | #define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0) |
82 | #define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0) | 84 | #define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0) |
83 | #define MLXPLAT_CPLD_FAN_MASK GENMASK(3, 0) | 85 | #define MLXPLAT_CPLD_FAN_MASK GENMASK(3, 0) |
86 | #define MLXPLAT_CPLD_FAN_NG_MASK GENMASK(5, 0) | ||
84 | 87 | ||
85 | /* Start channel numbers */ | 88 | /* Start channel numbers */ |
86 | #define MLXPLAT_CPLD_CH1 2 | 89 | #define MLXPLAT_CPLD_CH1 2 |
@@ -89,6 +92,15 @@ | |||
89 | /* Number of LPC attached MUX platform devices */ | 92 | /* Number of LPC attached MUX platform devices */ |
90 | #define MLXPLAT_CPLD_LPC_MUX_DEVS 2 | 93 | #define MLXPLAT_CPLD_LPC_MUX_DEVS 2 |
91 | 94 | ||
95 | /* Hotplug devices adapter numbers */ | ||
96 | #define MLXPLAT_CPLD_NR_NONE -1 | ||
97 | #define MLXPLAT_CPLD_PSU_DEFAULT_NR 10 | ||
98 | #define MLXPLAT_CPLD_PSU_MSNXXXX_NR 4 | ||
99 | #define MLXPLAT_CPLD_FAN1_DEFAULT_NR 11 | ||
100 | #define MLXPLAT_CPLD_FAN2_DEFAULT_NR 12 | ||
101 | #define MLXPLAT_CPLD_FAN3_DEFAULT_NR 13 | ||
102 | #define MLXPLAT_CPLD_FAN4_DEFAULT_NR 14 | ||
103 | |||
92 | /* mlxplat_priv - platform private data | 104 | /* mlxplat_priv - platform private data |
93 | * @pdev_i2c - i2c controller platform device | 105 | * @pdev_i2c - i2c controller platform device |
94 | * @pdev_mux - array of mux platform devices | 106 | * @pdev_mux - array of mux platform devices |
@@ -159,6 +171,15 @@ static struct i2c_board_info mlxplat_mlxcpld_psu[] = { | |||
159 | }, | 171 | }, |
160 | }; | 172 | }; |
161 | 173 | ||
174 | static struct i2c_board_info mlxplat_mlxcpld_ng_psu[] = { | ||
175 | { | ||
176 | I2C_BOARD_INFO("24c32", 0x51), | ||
177 | }, | ||
178 | { | ||
179 | I2C_BOARD_INFO("24c32", 0x50), | ||
180 | }, | ||
181 | }; | ||
182 | |||
162 | static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { | 183 | static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { |
163 | { | 184 | { |
164 | I2C_BOARD_INFO("dps460", 0x59), | 185 | I2C_BOARD_INFO("dps460", 0x59), |
@@ -190,14 +211,14 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_psu_items_data[] = { | |||
190 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | 211 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, |
191 | .mask = BIT(0), | 212 | .mask = BIT(0), |
192 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[0], | 213 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[0], |
193 | .hpdev.nr = 10, | 214 | .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, |
194 | }, | 215 | }, |
195 | { | 216 | { |
196 | .label = "psu2", | 217 | .label = "psu2", |
197 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | 218 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, |
198 | .mask = BIT(1), | 219 | .mask = BIT(1), |
199 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[1], | 220 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[1], |
200 | .hpdev.nr = 10, | 221 | .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, |
201 | }, | 222 | }, |
202 | }; | 223 | }; |
203 | 224 | ||
@@ -207,14 +228,14 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_items_data[] = { | |||
207 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | 228 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |
208 | .mask = BIT(0), | 229 | .mask = BIT(0), |
209 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], | 230 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], |
210 | .hpdev.nr = 10, | 231 | .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, |
211 | }, | 232 | }, |
212 | { | 233 | { |
213 | .label = "pwr2", | 234 | .label = "pwr2", |
214 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | 235 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |
215 | .mask = BIT(1), | 236 | .mask = BIT(1), |
216 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], | 237 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], |
217 | .hpdev.nr = 10, | 238 | .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, |
218 | }, | 239 | }, |
219 | }; | 240 | }; |
220 | 241 | ||
@@ -224,28 +245,28 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_items_data[] = { | |||
224 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | 245 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |
225 | .mask = BIT(0), | 246 | .mask = BIT(0), |
226 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[0], | 247 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[0], |
227 | .hpdev.nr = 11, | 248 | .hpdev.nr = MLXPLAT_CPLD_FAN1_DEFAULT_NR, |
228 | }, | 249 | }, |
229 | { | 250 | { |
230 | .label = "fan2", | 251 | .label = "fan2", |
231 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | 252 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |
232 | .mask = BIT(1), | 253 | .mask = BIT(1), |
233 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[1], | 254 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[1], |
234 | .hpdev.nr = 12, | 255 | .hpdev.nr = MLXPLAT_CPLD_FAN2_DEFAULT_NR, |
235 | }, | 256 | }, |
236 | { | 257 | { |
237 | .label = "fan3", | 258 | .label = "fan3", |
238 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | 259 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |
239 | .mask = BIT(2), | 260 | .mask = BIT(2), |
240 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[2], | 261 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[2], |
241 | .hpdev.nr = 13, | 262 | .hpdev.nr = MLXPLAT_CPLD_FAN3_DEFAULT_NR, |
242 | }, | 263 | }, |
243 | { | 264 | { |
244 | .label = "fan4", | 265 | .label = "fan4", |
245 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | 266 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, |
246 | .mask = BIT(3), | 267 | .mask = BIT(3), |
247 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[3], | 268 | .hpdev.brdinfo = &mlxplat_mlxcpld_fan[3], |
248 | .hpdev.nr = 14, | 269 | .hpdev.nr = MLXPLAT_CPLD_FAN4_DEFAULT_NR, |
249 | }, | 270 | }, |
250 | }; | 271 | }; |
251 | 272 | ||
@@ -287,14 +308,29 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_data = { | |||
287 | .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, | 308 | .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, |
288 | }; | 309 | }; |
289 | 310 | ||
311 | static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_pwr_items_data[] = { | ||
312 | { | ||
313 | .label = "pwr1", | ||
314 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
315 | .mask = BIT(0), | ||
316 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
317 | }, | ||
318 | { | ||
319 | .label = "pwr2", | ||
320 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
321 | .mask = BIT(1), | ||
322 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
323 | }, | ||
324 | }; | ||
325 | |||
290 | /* Platform hotplug MSN21xx system family data */ | 326 | /* Platform hotplug MSN21xx system family data */ |
291 | static struct mlxreg_core_item mlxplat_mlxcpld_msn21xx_items[] = { | 327 | static struct mlxreg_core_item mlxplat_mlxcpld_msn21xx_items[] = { |
292 | { | 328 | { |
293 | .data = mlxplat_mlxcpld_default_pwr_items_data, | 329 | .data = mlxplat_mlxcpld_msn21xx_pwr_items_data, |
294 | .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, | 330 | .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, |
295 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | 331 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, |
296 | .mask = MLXPLAT_CPLD_PWR_MASK, | 332 | .mask = MLXPLAT_CPLD_PWR_MASK, |
297 | .count = ARRAY_SIZE(mlxplat_mlxcpld_pwr), | 333 | .count = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_pwr_items_data), |
298 | .inversed = 0, | 334 | .inversed = 0, |
299 | .health = false, | 335 | .health = false, |
300 | }, | 336 | }, |
@@ -306,6 +342,245 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn21xx_data = { | |||
306 | .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_items), | 342 | .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_items), |
307 | .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, | 343 | .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, |
308 | .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, | 344 | .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, |
345 | .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, | ||
346 | .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||
347 | }; | ||
348 | |||
349 | /* Platform hotplug msn274x system family data */ | ||
350 | static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_psu_items_data[] = { | ||
351 | { | ||
352 | .label = "psu1", | ||
353 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
354 | .mask = BIT(0), | ||
355 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[0], | ||
356 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
357 | }, | ||
358 | { | ||
359 | .label = "psu2", | ||
360 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
361 | .mask = BIT(1), | ||
362 | .hpdev.brdinfo = &mlxplat_mlxcpld_psu[1], | ||
363 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
364 | }, | ||
365 | }; | ||
366 | |||
367 | static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_pwr_items_data[] = { | ||
368 | { | ||
369 | .label = "pwr1", | ||
370 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
371 | .mask = BIT(0), | ||
372 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], | ||
373 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
374 | }, | ||
375 | { | ||
376 | .label = "pwr2", | ||
377 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
378 | .mask = BIT(1), | ||
379 | .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], | ||
380 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
381 | }, | ||
382 | }; | ||
383 | |||
384 | static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_fan_items_data[] = { | ||
385 | { | ||
386 | .label = "fan1", | ||
387 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
388 | .mask = BIT(0), | ||
389 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
390 | }, | ||
391 | { | ||
392 | .label = "fan2", | ||
393 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
394 | .mask = BIT(1), | ||
395 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
396 | }, | ||
397 | { | ||
398 | .label = "fan3", | ||
399 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
400 | .mask = BIT(2), | ||
401 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
402 | }, | ||
403 | { | ||
404 | .label = "fan4", | ||
405 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
406 | .mask = BIT(3), | ||
407 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
408 | }, | ||
409 | }; | ||
410 | |||
411 | static struct mlxreg_core_item mlxplat_mlxcpld_msn274x_items[] = { | ||
412 | { | ||
413 | .data = mlxplat_mlxcpld_msn274x_psu_items_data, | ||
414 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
415 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
416 | .mask = MLXPLAT_CPLD_PSU_MASK, | ||
417 | .count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_psu_items_data), | ||
418 | .inversed = 1, | ||
419 | .health = false, | ||
420 | }, | ||
421 | { | ||
422 | .data = mlxplat_mlxcpld_default_ng_pwr_items_data, | ||
423 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
424 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
425 | .mask = MLXPLAT_CPLD_PWR_MASK, | ||
426 | .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data), | ||
427 | .inversed = 0, | ||
428 | .health = false, | ||
429 | }, | ||
430 | { | ||
431 | .data = mlxplat_mlxcpld_msn274x_fan_items_data, | ||
432 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
433 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
434 | .mask = MLXPLAT_CPLD_FAN_MASK, | ||
435 | .count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_fan_items_data), | ||
436 | .inversed = 1, | ||
437 | .health = false, | ||
438 | }, | ||
439 | }; | ||
440 | |||
441 | static | ||
442 | struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn274x_data = { | ||
443 | .items = mlxplat_mlxcpld_msn274x_items, | ||
444 | .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_items), | ||
445 | .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, | ||
446 | .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
447 | .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, | ||
448 | .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||
449 | }; | ||
450 | |||
451 | /* Platform hotplug MSN201x system family data */ | ||
452 | static struct mlxreg_core_data mlxplat_mlxcpld_msn201x_pwr_items_data[] = { | ||
453 | { | ||
454 | .label = "pwr1", | ||
455 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
456 | .mask = BIT(0), | ||
457 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
458 | }, | ||
459 | { | ||
460 | .label = "pwr2", | ||
461 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
462 | .mask = BIT(1), | ||
463 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
464 | }, | ||
465 | }; | ||
466 | |||
467 | static struct mlxreg_core_item mlxplat_mlxcpld_msn201x_items[] = { | ||
468 | { | ||
469 | .data = mlxplat_mlxcpld_msn201x_pwr_items_data, | ||
470 | .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, | ||
471 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
472 | .mask = MLXPLAT_CPLD_PWR_MASK, | ||
473 | .count = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_pwr_items_data), | ||
474 | .inversed = 0, | ||
475 | .health = false, | ||
476 | }, | ||
477 | }; | ||
478 | |||
479 | static | ||
480 | struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = { | ||
481 | .items = mlxplat_mlxcpld_msn21xx_items, | ||
482 | .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_items), | ||
483 | .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, | ||
484 | .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, | ||
485 | .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, | ||
486 | .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||
487 | }; | ||
488 | |||
489 | /* Platform hotplug next generation system family data */ | ||
490 | static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_psu_items_data[] = { | ||
491 | { | ||
492 | .label = "psu1", | ||
493 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
494 | .mask = BIT(0), | ||
495 | .hpdev.brdinfo = &mlxplat_mlxcpld_ng_psu[0], | ||
496 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
497 | }, | ||
498 | { | ||
499 | .label = "psu2", | ||
500 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
501 | .mask = BIT(1), | ||
502 | .hpdev.brdinfo = &mlxplat_mlxcpld_ng_psu[1], | ||
503 | .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, | ||
504 | }, | ||
505 | }; | ||
506 | |||
507 | static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_fan_items_data[] = { | ||
508 | { | ||
509 | .label = "fan1", | ||
510 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
511 | .mask = BIT(0), | ||
512 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
513 | }, | ||
514 | { | ||
515 | .label = "fan2", | ||
516 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
517 | .mask = BIT(1), | ||
518 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
519 | }, | ||
520 | { | ||
521 | .label = "fan3", | ||
522 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
523 | .mask = BIT(2), | ||
524 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
525 | }, | ||
526 | { | ||
527 | .label = "fan4", | ||
528 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
529 | .mask = BIT(3), | ||
530 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
531 | }, | ||
532 | { | ||
533 | .label = "fan5", | ||
534 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
535 | .mask = BIT(4), | ||
536 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
537 | }, | ||
538 | { | ||
539 | .label = "fan6", | ||
540 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
541 | .mask = BIT(5), | ||
542 | .hpdev.nr = MLXPLAT_CPLD_NR_NONE, | ||
543 | }, | ||
544 | }; | ||
545 | |||
546 | static struct mlxreg_core_item mlxplat_mlxcpld_default_ng_items[] = { | ||
547 | { | ||
548 | .data = mlxplat_mlxcpld_default_ng_psu_items_data, | ||
549 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
550 | .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, | ||
551 | .mask = MLXPLAT_CPLD_PSU_MASK, | ||
552 | .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data), | ||
553 | .inversed = 1, | ||
554 | .health = false, | ||
555 | }, | ||
556 | { | ||
557 | .data = mlxplat_mlxcpld_default_ng_pwr_items_data, | ||
558 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
559 | .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, | ||
560 | .mask = MLXPLAT_CPLD_PWR_MASK, | ||
561 | .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data), | ||
562 | .inversed = 0, | ||
563 | .health = false, | ||
564 | }, | ||
565 | { | ||
566 | .data = mlxplat_mlxcpld_default_ng_fan_items_data, | ||
567 | .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
568 | .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, | ||
569 | .mask = MLXPLAT_CPLD_FAN_NG_MASK, | ||
570 | .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), | ||
571 | .inversed = 1, | ||
572 | .health = false, | ||
573 | }, | ||
574 | }; | ||
575 | |||
576 | static | ||
577 | struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_ng_data = { | ||
578 | .items = mlxplat_mlxcpld_default_ng_items, | ||
579 | .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_items), | ||
580 | .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, | ||
581 | .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, | ||
582 | .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, | ||
583 | .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, | ||
309 | }; | 584 | }; |
310 | 585 | ||
311 | static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) | 586 | static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) |
@@ -437,8 +712,57 @@ static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi) | |||
437 | return 1; | 712 | return 1; |
438 | }; | 713 | }; |
439 | 714 | ||
715 | static int __init mlxplat_dmi_msn274x_matched(const struct dmi_system_id *dmi) | ||
716 | { | ||
717 | int i; | ||
718 | |||
719 | for (i = 0; i < ARRAY_SIZE(mlxplat_mux_data); i++) { | ||
720 | mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; | ||
721 | mlxplat_mux_data[i].n_values = | ||
722 | ARRAY_SIZE(mlxplat_msn21xx_channels); | ||
723 | } | ||
724 | mlxplat_hotplug = &mlxplat_mlxcpld_msn274x_data; | ||
725 | |||
726 | return 1; | ||
727 | }; | ||
728 | |||
729 | static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi) | ||
730 | { | ||
731 | int i; | ||
732 | |||
733 | for (i = 0; i < ARRAY_SIZE(mlxplat_mux_data); i++) { | ||
734 | mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; | ||
735 | mlxplat_mux_data[i].n_values = | ||
736 | ARRAY_SIZE(mlxplat_msn21xx_channels); | ||
737 | } | ||
738 | mlxplat_hotplug = &mlxplat_mlxcpld_msn201x_data; | ||
739 | |||
740 | return 1; | ||
741 | }; | ||
742 | |||
743 | static int __init mlxplat_dmi_qmb7xx_matched(const struct dmi_system_id *dmi) | ||
744 | { | ||
745 | int i; | ||
746 | |||
747 | for (i = 0; i < ARRAY_SIZE(mlxplat_mux_data); i++) { | ||
748 | mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; | ||
749 | mlxplat_mux_data[i].n_values = | ||
750 | ARRAY_SIZE(mlxplat_msn21xx_channels); | ||
751 | } | ||
752 | mlxplat_hotplug = &mlxplat_mlxcpld_default_ng_data; | ||
753 | |||
754 | return 1; | ||
755 | }; | ||
756 | |||
440 | static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { | 757 | static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { |
441 | { | 758 | { |
759 | .callback = mlxplat_dmi_msn274x_matched, | ||
760 | .matches = { | ||
761 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | ||
762 | DMI_MATCH(DMI_PRODUCT_NAME, "MSN274"), | ||
763 | }, | ||
764 | }, | ||
765 | { | ||
442 | .callback = mlxplat_dmi_default_matched, | 766 | .callback = mlxplat_dmi_default_matched, |
443 | .matches = { | 767 | .matches = { |
444 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | 768 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), |
@@ -473,6 +797,34 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { | |||
473 | DMI_MATCH(DMI_PRODUCT_NAME, "MSN21"), | 797 | DMI_MATCH(DMI_PRODUCT_NAME, "MSN21"), |
474 | }, | 798 | }, |
475 | }, | 799 | }, |
800 | { | ||
801 | .callback = mlxplat_dmi_msn201x_matched, | ||
802 | .matches = { | ||
803 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | ||
804 | DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"), | ||
805 | }, | ||
806 | }, | ||
807 | { | ||
808 | .callback = mlxplat_dmi_qmb7xx_matched, | ||
809 | .matches = { | ||
810 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | ||
811 | DMI_MATCH(DMI_PRODUCT_NAME, "QMB7"), | ||
812 | }, | ||
813 | }, | ||
814 | { | ||
815 | .callback = mlxplat_dmi_qmb7xx_matched, | ||
816 | .matches = { | ||
817 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | ||
818 | DMI_MATCH(DMI_PRODUCT_NAME, "SN37"), | ||
819 | }, | ||
820 | }, | ||
821 | { | ||
822 | .callback = mlxplat_dmi_qmb7xx_matched, | ||
823 | .matches = { | ||
824 | DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), | ||
825 | DMI_MATCH(DMI_PRODUCT_NAME, "SN34"), | ||
826 | }, | ||
827 | }, | ||
476 | { } | 828 | { } |
477 | }; | 829 | }; |
478 | 830 | ||