Skip to content

Commit 1bd42d9

Browse files
mellanoxbmcdvhart
authored andcommitted
platform/x86: mlx-platform: Add support for new 200G IB and Ethernet systems
It adds support for new Mellanox system types of basic classes qmb7, sn34, sn37, containing systems QMB700 (40x200GbE InfiniBand switch), SN3700 (32x200GbE and 16x400GbE Ethernet switch) and SN3410 (6x400GbE plus 48x50GbE Ethernet switch). These are the Top of the Rack systems, equipped with Mellanox COM-Express carrier board and switch board with Mellanox Quantum device, which supports InfiniBand switching with 40X200G ports and line rate of up to HDR speed or with Mellanox Spectrum-2 device, which supports Ethernet switching with 32X200G ports line rate of up to HDR speed. Signed-off-by: Vadim Pasternak <[email protected]> Signed-off-by: Darren Hart (VMware) <[email protected]>
1 parent a49a414 commit 1bd42d9

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed

drivers/platform/x86/mlx-platform.c

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
#define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0)
8484
#define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0)
8585
#define MLXPLAT_CPLD_FAN_MASK GENMASK(3, 0)
86+
#define MLXPLAT_CPLD_FAN_NG_MASK GENMASK(5, 0)
8687

8788
/* Start channel numbers */
8889
#define MLXPLAT_CPLD_CH1 2
@@ -170,6 +171,15 @@ static struct i2c_board_info mlxplat_mlxcpld_psu[] = {
170171
},
171172
};
172173

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+
173183
static struct i2c_board_info mlxplat_mlxcpld_pwr[] = {
174184
{
175185
I2C_BOARD_INFO("dps460", 0x59),
@@ -476,6 +486,103 @@ struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = {
476486
.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
477487
};
478488

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+
479586
static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
480587
{
481588
switch (reg) {
@@ -633,6 +740,20 @@ static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi)
633740
return 1;
634741
};
635742

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+
636757
static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
637758
{
638759
.callback = mlxplat_dmi_msn274x_matched,
@@ -683,6 +804,27 @@ static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
683804
DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"),
684805
},
685806
},
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+
},
686828
{ }
687829
};
688830

0 commit comments

Comments
 (0)