|
83 | 83 | #define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0)
|
84 | 84 | #define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0)
|
85 | 85 | #define MLXPLAT_CPLD_FAN_MASK GENMASK(3, 0)
|
| 86 | +#define MLXPLAT_CPLD_FAN_NG_MASK GENMASK(5, 0) |
86 | 87 |
|
87 | 88 | /* Start channel numbers */
|
88 | 89 | #define MLXPLAT_CPLD_CH1 2
|
@@ -170,6 +171,15 @@ static struct i2c_board_info mlxplat_mlxcpld_psu[] = {
|
170 | 171 | },
|
171 | 172 | };
|
172 | 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 | + |
173 | 183 | static struct i2c_board_info mlxplat_mlxcpld_pwr[] = {
|
174 | 184 | {
|
175 | 185 | I2C_BOARD_INFO("dps460", 0x59),
|
@@ -476,6 +486,103 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = {
|
476 | 486 | .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
|
477 | 487 | };
|
478 | 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, |
| 584 | +}; |
| 585 | + |
479 | 586 | static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
|
480 | 587 | {
|
481 | 588 | switch (reg) {
|
@@ -633,6 +740,20 @@ static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi)
|
633 | 740 | return 1;
|
634 | 741 | };
|
635 | 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 | + |
636 | 757 | static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
|
637 | 758 | {
|
638 | 759 | .callback = mlxplat_dmi_msn274x_matched,
|
@@ -683,6 +804,27 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
|
683 | 804 | DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"),
|
684 | 805 | },
|
685 | 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 | + }, |
686 | 828 | { }
|
687 | 829 | };
|
688 | 830 |
|
|
0 commit comments