Skip to content
/ linux Public

Commit 4616e54

Browse files
vadimp-nvidiajwrdegoede
authored andcommitted
platform/x86: mlx-platform: Add support for new system SGN2410
Add support for new system type, which is a water-cooling flavor of the VMOD001 system class, equipped with 48xSFP28 and 8xQSFP28 100G Ethernet ports. System is recognized by "DMI_BOARD_NAME" and " DMI_PRODUCT_SKU" matches, when these fields are set respectively to "VMOD001" and "HI138". Signed-off-by: Vadim Pasternak <vadimp@nvidia.com> Reviewed-by: Oleksandr Shamray <oleksandrs@nvidia.com> Link: https://lore.kernel.org/r/20211023094022.4193813-4-vadimp@nvidia.com Signed-off-by: Hans de Goede <hdegoede@redhat.com>
1 parent 4289fd4 commit 4616e54

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

drivers/platform/x86/mlx-platform.c

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,21 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_items_data[] = {
533533
},
534534
};
535535

536+
static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_wc_items_data[] = {
537+
{
538+
.label = "pwr1",
539+
.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
540+
.mask = BIT(0),
541+
.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
542+
},
543+
{
544+
.label = "pwr2",
545+
.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
546+
.mask = BIT(1),
547+
.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
548+
},
549+
};
550+
536551
static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_items_data[] = {
537552
{
538553
.label = "fan1",
@@ -661,6 +676,46 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_data = {
661676
.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
662677
};
663678

679+
static struct mlxreg_core_item mlxplat_mlxcpld_default_wc_items[] = {
680+
{
681+
.data = mlxplat_mlxcpld_comex_psu_items_data,
682+
.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
683+
.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
684+
.mask = MLXPLAT_CPLD_PSU_MASK,
685+
.count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data),
686+
.inversed = 1,
687+
.health = false,
688+
},
689+
{
690+
.data = mlxplat_mlxcpld_default_pwr_wc_items_data,
691+
.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
692+
.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
693+
.mask = MLXPLAT_CPLD_PWR_MASK,
694+
.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data),
695+
.inversed = 0,
696+
.health = false,
697+
},
698+
{
699+
.data = mlxplat_mlxcpld_default_asic_items_data,
700+
.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
701+
.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
702+
.mask = MLXPLAT_CPLD_ASIC_MASK,
703+
.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
704+
.inversed = 0,
705+
.health = true,
706+
},
707+
};
708+
709+
static
710+
struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_wc_data = {
711+
.items = mlxplat_mlxcpld_default_wc_items,
712+
.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_wc_items),
713+
.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
714+
.mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
715+
.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
716+
.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
717+
};
718+
664719
static
665720
struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_comex_data = {
666721
.items = mlxplat_mlxcpld_comex_items,
@@ -2018,6 +2073,35 @@ static struct mlxreg_core_platform_data mlxplat_default_led_data = {
20182073
.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_data),
20192074
};
20202075

2076+
/* Platform led default data for water cooling */
2077+
static struct mlxreg_core_data mlxplat_mlxcpld_default_led_wc_data[] = {
2078+
{
2079+
.label = "status:green",
2080+
.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
2081+
.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
2082+
},
2083+
{
2084+
.label = "status:red",
2085+
.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
2086+
.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
2087+
},
2088+
{
2089+
.label = "psu:green",
2090+
.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
2091+
.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
2092+
},
2093+
{
2094+
.label = "psu:red",
2095+
.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
2096+
.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
2097+
},
2098+
};
2099+
2100+
static struct mlxreg_core_platform_data mlxplat_default_led_wc_data = {
2101+
.data = mlxplat_mlxcpld_default_led_wc_data,
2102+
.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_wc_data),
2103+
};
2104+
20212105
/* Platform led MSN21xx system family data */
20222106
static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_led_data[] = {
20232107
{
@@ -4311,6 +4395,28 @@ static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi)
43114395
return 1;
43124396
}
43134397

4398+
static int __init mlxplat_dmi_default_wc_matched(const struct dmi_system_id *dmi)
4399+
{
4400+
int i;
4401+
4402+
mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
4403+
mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
4404+
mlxplat_mux_data = mlxplat_default_mux_data;
4405+
for (i = 0; i < mlxplat_mux_num; i++) {
4406+
mlxplat_mux_data[i].values = mlxplat_default_channels[i];
4407+
mlxplat_mux_data[i].n_values =
4408+
ARRAY_SIZE(mlxplat_default_channels[i]);
4409+
}
4410+
mlxplat_hotplug = &mlxplat_mlxcpld_default_wc_data;
4411+
mlxplat_hotplug->deferred_nr =
4412+
mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
4413+
mlxplat_led = &mlxplat_default_led_wc_data;
4414+
mlxplat_regs_io = &mlxplat_default_regs_io_data;
4415+
mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
4416+
4417+
return 1;
4418+
}
4419+
43144420
static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi)
43154421
{
43164422
int i;
@@ -4474,6 +4580,13 @@ static int __init mlxplat_dmi_modular_matched(const struct dmi_system_id *dmi)
44744580
}
44754581

44764582
static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
4583+
{
4584+
.callback = mlxplat_dmi_default_wc_matched,
4585+
.matches = {
4586+
DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"),
4587+
DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI138"),
4588+
},
4589+
},
44774590
{
44784591
.callback = mlxplat_dmi_default_matched,
44794592
.matches = {

0 commit comments

Comments
 (0)