summaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-02-10 16:55:33 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-02-10 16:55:33 -0500
commitcc5cb5af3a3363bc6f0530703895bf9c5fa2f159 (patch)
tree24bac57b13b2bc6b5b80b4bbf22dd32966469326 /drivers/platform
parente9d46f74ecf5eb2c604b32bb43e632d2a5bd44a9 (diff)
parent1bd42d94ccab4eab5dc9dc9d303a687a61cde9bd (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.c2
-rw-r--r--drivers/platform/x86/mlx-platform.c372
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
174static 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
162static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { 183static 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
311static 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 */
291static struct mlxreg_core_item mlxplat_mlxcpld_msn21xx_items[] = { 327static 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 */
350static 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
367static 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
384static 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
411static 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
441static
442struct 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 */
452static 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
467static 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
479static
480struct 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 */
490static 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
507static 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
546static 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
576static
577struct 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
311static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) 586static 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
715static 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
729static 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
743static 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
440static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { 757static 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