xref: /linux/drivers/platform/mellanox/mlx-platform.c (revision 1260ed77798502de9c98020040d2995008de10cc)
18c03f64dSVadim Pasternak // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
28c03f64dSVadim Pasternak /*
38c03f64dSVadim Pasternak  * Mellanox platform driver
48c03f64dSVadim Pasternak  *
58c03f64dSVadim Pasternak  * Copyright (C) 2016-2018 Mellanox Technologies
68c03f64dSVadim Pasternak  * Copyright (C) 2016-2018 Vadim Pasternak <vadimp@mellanox.com>
78c03f64dSVadim Pasternak  */
88c03f64dSVadim Pasternak 
98c03f64dSVadim Pasternak #include <linux/device.h>
108c03f64dSVadim Pasternak #include <linux/dmi.h>
118c03f64dSVadim Pasternak #include <linux/i2c.h>
128c03f64dSVadim Pasternak #include <linux/i2c-mux.h>
138c03f64dSVadim Pasternak #include <linux/io.h>
148c03f64dSVadim Pasternak #include <linux/module.h>
158c03f64dSVadim Pasternak #include <linux/pci.h>
168c03f64dSVadim Pasternak #include <linux/platform_device.h>
178c03f64dSVadim Pasternak #include <linux/platform_data/i2c-mux-reg.h>
188c03f64dSVadim Pasternak #include <linux/platform_data/mlxreg.h>
198c03f64dSVadim Pasternak #include <linux/reboot.h>
208c03f64dSVadim Pasternak #include <linux/regmap.h>
218c03f64dSVadim Pasternak 
228c03f64dSVadim Pasternak #define MLX_PLAT_DEVICE_NAME		"mlxplat"
238c03f64dSVadim Pasternak 
248c03f64dSVadim Pasternak /* LPC bus IO offsets */
258c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_I2C_BASE_ADRR		0x2000
268c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BASE_ADRR		0x2500
278c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET	0x00
288c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET	0x01
298c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET	0x02
308c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET	0x03
318c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET	0x04
328c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET	0x05
338c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET	0x06
348c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET	0x07
358c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET	0x08
368c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET	0x09
378c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET	0x0a
388c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET	0x0b
398c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET	0x17
408c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET	0x19
418c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET	0x1c
428c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET	0x1d
438c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET	0x1e
448c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET	0x1f
458c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED1_OFFSET	0x20
468c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED2_OFFSET	0x21
478c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED3_OFFSET	0x22
488c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED4_OFFSET	0x23
498c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED5_OFFSET	0x24
508c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED6_OFFSET	0x25
518c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED7_OFFSET	0x26
528c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION	0x2a
538c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET	0x2b
548c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET	0x2d
558c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP0_OFFSET		0x2e
568c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET	0x2f
578c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP1_OFFSET		0x30
588c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WP1_OFFSET		0x31
598c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP2_OFFSET		0x32
608c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WP2_OFFSET		0x33
618c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE	0x34
628c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET	0x35
638c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET	0x36
648c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET	0x37
658c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET	0x3a
668c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET	0x3b
678c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET	0x3c
688c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET	0x40
698c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET	0x41
708c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET	0x42
718c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET	0x43
728c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET	0x44
738c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET 0x45
748c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_OFFSET		0x47
758c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET	0x48
768c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET	0x49
778c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_OFFSET		0x4a
788c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET	0x4b
798c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET	0x4c
808c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET 0x50
818c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET	0x51
828c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET	0x52
838c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET 0x53
848c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET	0x54
858c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET	0x55
868c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET	0x56
878c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET	0x57
888c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_OFFSET		0x58
898c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET	0x59
908c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET	0x5a
918c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_OFFSET		0x64
928c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET	0x65
938c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET	0x66
948c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET	0x70
958c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET	0x71
968c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET	0x72
978c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_OFFSET		0x88
988c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET	0x89
998c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET	0x8a
1008c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET	0x8e
1018c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET	0x8f
1028c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET	0x90
1038c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_OFFSET	0x91
1048c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET	0x92
1058c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET	0x93
1068c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET	0x94
1078c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET	0x95
1088c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET	0x96
1098c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET	0x97
1108c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET	0x98
1118c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET	0x99
1128c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET	0x9a
1138c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET	0x9b
1148c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET	0x9c
1158c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET	0x9d
1168c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET	0x9e
1178c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET	0x9f
1188c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET	0xa0
1198c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET 0xa1
1208c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET	0xa2
1218c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET	0xa3
1228c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET 0xa4
1238c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET	0xa5
1248c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET	0xa6
1258c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET	0xa7
1268c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET	0xa8
1278c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET	0xa9
1288c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET	0xaa
1298c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET	0xab
1308c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PWR_ON		0xb2
1318c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET	0xb6
1328c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET	0xb7
1338c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET	0xb8
1348c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET	0xb9
1358c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET	0xc2
1368c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT	0xc3
1378c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET	0xc4
1388c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET	0xc7
1398c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET	0xc8
1408c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET	0xc9
1418c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET	0xcb
1428c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET	0xcd
1438c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET	0xce
1448c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET	0xcf
1458c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET	0xd1
1468c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET	0xd2
1478c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET	0xd3
148*e75394bbSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD6_MVER_OFFSET	0xd9
1498c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET	0xdb
1508c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET	0xda
1518c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET	0xdc
1528c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET	0xdd
1538c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET	0xde
1548c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET	0xdf
1558c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET	0xe0
1568c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET	0xe1
1578c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET	0xe2
1588c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET	0xe3
1598c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET	0xe4
1608c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET	0xe5
1618c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET	0xe6
1628c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET	0xe7
1638c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET	0xe8
1648c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET	0xe9
1658c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET	0xea
1668c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET	0xeb
1678c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET	0xec
1688c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET	0xed
1698c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET	0xee
1708c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET	0xef
1718c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET	0xf0
1728c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET	0xf1
1738c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET	0xf2
1748c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET	0xf3
1758c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET	0xf4
1768c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET	0xf5
1778c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET	0xf6
1788c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET	0xf7
1798c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET	0xf8
1808c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET 0xf9
1818c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET	0xfa
1828c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET	0xfb
1838c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET	0xfc
1848c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET	0xfd
1858c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_IO_RANGE		0x100
1868c03f64dSVadim Pasternak 
1878c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_PIO_OFFSET		0x10000UL
1888c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG1	((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \
1898c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET) | \
1908c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_PIO_OFFSET)
1918c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG2	((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \
1928c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET) | \
1938c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_PIO_OFFSET)
1948c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG3	((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \
1958c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET) | \
1968c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_PIO_OFFSET)
1978c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG4	((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \
1988c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET) | \
1998c03f64dSVadim Pasternak 				  MLXPLAT_CPLD_LPC_PIO_OFFSET)
2008c03f64dSVadim Pasternak 
2018c03f64dSVadim Pasternak /* Masks for aggregation, psu, pwr and fan event in CPLD related registers. */
2028c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF	0x04
2038c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_PSU_MASK_DEF	0x08
2048c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_PWR_MASK_DEF	0x08
2058c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_FAN_MASK_DEF	0x40
2068c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_DEF	(MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF | \
2078c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_PSU_MASK_DEF | \
2088c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_FAN_MASK_DEF)
2098c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_ASIC_MASK_NG	0x01
2108c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_NG_DEF	0x04
2118c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_COMEX	BIT(0)
2128c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC	BIT(3)
2138c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_MODULAR	(MLXPLAT_CPLD_AGGR_MASK_NG_DEF | \
2148c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_COMEX | \
2158c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC)
2168c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_PRSNT	BIT(0)
2178c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_RDY	BIT(1)
2188c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_PG	BIT(2)
2198c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SCRD	BIT(3)
2208c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SYNC	BIT(4)
2218c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_ACT	BIT(5)
2228c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SDWN	BIT(6)
2238c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_LOW	(MLXPLAT_CPLD_AGGR_MASK_LC_PRSNT | \
2248c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_RDY | \
2258c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_PG | \
2268c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_SCRD | \
2278c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_SYNC | \
2288c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_ACT | \
2298c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_LC_SDWN)
2308c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_LOW	0xc1
2318c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2	BIT(2)
2328c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT	GENMASK(5, 4)
2338c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_I2C	BIT(6)
2348c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_MASK		GENMASK(1, 0)
2358c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_MASK		GENMASK(1, 0)
2368c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_EXT_MASK	GENMASK(3, 0)
2378c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_EXT_MASK	GENMASK(3, 0)
2388c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN_MASK		GENMASK(3, 0)
2398c03f64dSVadim Pasternak #define MLXPLAT_CPLD_ASIC_MASK		GENMASK(1, 0)
2408c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN_NG_MASK	GENMASK(6, 0)
2418c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LED_LO_NIBBLE_MASK	GENMASK(7, 4)
2428c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LED_HI_NIBBLE_MASK	GENMASK(3, 0)
2438c03f64dSVadim Pasternak #define MLXPLAT_CPLD_VOLTREG_UPD_MASK	GENMASK(5, 4)
2448c03f64dSVadim Pasternak #define MLXPLAT_CPLD_GWP_MASK		GENMASK(0, 0)
2458c03f64dSVadim Pasternak #define MLXPLAT_CPLD_EROT_MASK		GENMASK(1, 0)
2468c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FU_CAP_MASK	GENMASK(1, 0)
2478c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_BUTTON_MASK	BIT(0)
2488c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LATCH_RST_MASK	BIT(6)
2498c03f64dSVadim Pasternak #define MLXPLAT_CPLD_THERMAL1_PDB_MASK	BIT(3)
2508c03f64dSVadim Pasternak #define MLXPLAT_CPLD_THERMAL2_PDB_MASK	BIT(4)
2518c03f64dSVadim Pasternak #define MLXPLAT_CPLD_INTRUSION_MASK	BIT(6)
2528c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWM_PG_MASK	BIT(7)
2538c03f64dSVadim Pasternak #define MLXPLAT_CPLD_L1_CHA_HEALTH_MASK (MLXPLAT_CPLD_THERMAL1_PDB_MASK | \
2548c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_THERMAL2_PDB_MASK | \
2558c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_INTRUSION_MASK |\
2568c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_PWM_PG_MASK)
2578c03f64dSVadim Pasternak #define MLXPLAT_CPLD_I2C_CAP_BIT	0x04
2588c03f64dSVadim Pasternak #define MLXPLAT_CPLD_I2C_CAP_MASK	GENMASK(5, MLXPLAT_CPLD_I2C_CAP_BIT)
2598c03f64dSVadim Pasternak #define MLXPLAT_CPLD_SYS_RESET_MASK	BIT(0)
2608c03f64dSVadim Pasternak 
2618c03f64dSVadim Pasternak /* Masks for aggregation for comex carriers */
2628c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_CARRIER	BIT(1)
2638c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_CARR_DEF	(MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF | \
2648c03f64dSVadim Pasternak 					 MLXPLAT_CPLD_AGGR_MASK_CARRIER)
2658c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGRCX_MASK	0xc1
2668c03f64dSVadim Pasternak 
2678c03f64dSVadim Pasternak /* Masks for aggregation for modular systems */
2688c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_LC_MASK	GENMASK(7, 0)
2698c03f64dSVadim Pasternak 
2708c03f64dSVadim Pasternak #define MLXPLAT_CPLD_HALT_MASK		BIT(3)
2718c03f64dSVadim Pasternak #define MLXPLAT_CPLD_RESET_MASK		GENMASK(7, 1)
2728c03f64dSVadim Pasternak 
2738c03f64dSVadim Pasternak /* Default I2C parent bus number */
2748c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR	1
2758c03f64dSVadim Pasternak 
2768c03f64dSVadim Pasternak /* Maximum number of possible physical buses equipped on system */
2778c03f64dSVadim Pasternak #define MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM	16
2788c03f64dSVadim Pasternak #define MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM	24
2798c03f64dSVadim Pasternak 
2808c03f64dSVadim Pasternak /* Number of channels in group */
2818c03f64dSVadim Pasternak #define MLXPLAT_CPLD_GRP_CHNL_NUM		8
2828c03f64dSVadim Pasternak 
2838c03f64dSVadim Pasternak /* Start channel numbers */
2848c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH1			2
2858c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2			10
2868c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH3			18
2878c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_ETH_MODULAR		3
2888c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH3_ETH_MODULAR		43
2898c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH4_ETH_MODULAR		51
2908c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_RACK_SWITCH		18
2918c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_NG800			34
2928c03f64dSVadim Pasternak 
2938c03f64dSVadim Pasternak /* Number of LPC attached MUX platform devices */
2948c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_MUX_DEVS		4
2958c03f64dSVadim Pasternak 
2968c03f64dSVadim Pasternak /* Hotplug devices adapter numbers */
2978c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_NONE			-1
2988c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_DEFAULT_NR		10
2998c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_MSNXXXX_NR		4
3008c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN1_DEFAULT_NR		11
3018c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN2_DEFAULT_NR		12
3028c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN3_DEFAULT_NR		13
3038c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN4_DEFAULT_NR		14
3048c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_ASIC			3
3058c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_LC_BASE			34
3068c03f64dSVadim Pasternak 
3078c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_LC_SET(nr)	(MLXPLAT_CPLD_NR_LC_BASE + (nr))
3088c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LC_ADDR		0x32
3098c03f64dSVadim Pasternak 
3108c03f64dSVadim Pasternak /* Masks and default values for watchdogs */
3118c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD1_CLEAR_MASK	GENMASK(7, 1)
3128c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD2_CLEAR_MASK	(GENMASK(7, 0) & ~BIT(1))
3138c03f64dSVadim Pasternak 
3148c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_TYPE1_TO_MASK	GENMASK(7, 4)
3158c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_TYPE2_TO_MASK	0
3168c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_RESET_ACT_MASK	GENMASK(7, 1)
3178c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_FAN_ACT_MASK	(GENMASK(7, 0) & ~BIT(4))
3188c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_COUNT_ACT_MASK	(GENMASK(7, 0) & ~BIT(7))
3198c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_CPBLTY_MASK	(GENMASK(7, 0) & ~BIT(6))
3208c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_DFLT_TIMEOUT	30
3218c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD3_DFLT_TIMEOUT	600
3228c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_MAX_DEVS	2
3238c03f64dSVadim Pasternak 
3248c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SYSIRQ		17
3258c03f64dSVadim Pasternak 
3268c03f64dSVadim Pasternak /* Minimum power required for turning on Ethernet modular system (WATT) */
3278c03f64dSVadim Pasternak #define MLXPLAT_CPLD_ETH_MODULAR_PWR_MIN	50
3288c03f64dSVadim Pasternak 
3298c03f64dSVadim Pasternak /* Default value for PWM control register for rack switch system */
3308c03f64dSVadim Pasternak #define MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT 0xf4
3318c03f64dSVadim Pasternak 
3328c03f64dSVadim Pasternak #define MLXPLAT_I2C_MAIN_BUS_NOTIFIED		0x01
3338c03f64dSVadim Pasternak #define MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED	0x02
3348c03f64dSVadim Pasternak 
3358c03f64dSVadim Pasternak /* Lattice FPGA PCI configuration */
3368c03f64dSVadim Pasternak #define PCI_VENDOR_ID_LATTICE			0x1204
3378c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_I2C_BRIDGE	0x9c2f
3388c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_JTAG_BRIDGE	0x9c30
3398c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_LPC_BRIDGE	0x9c32
3408c03f64dSVadim Pasternak 
3418c03f64dSVadim Pasternak /* mlxplat_priv - platform private data
3428c03f64dSVadim Pasternak  * @pdev_i2c - i2c controller platform device
3438c03f64dSVadim Pasternak  * @pdev_mux - array of mux platform devices
3448c03f64dSVadim Pasternak  * @pdev_hotplug - hotplug platform devices
3458c03f64dSVadim Pasternak  * @pdev_led - led platform devices
3468c03f64dSVadim Pasternak  * @pdev_io_regs - register access platform devices
3478c03f64dSVadim Pasternak  * @pdev_fan - FAN platform devices
3488c03f64dSVadim Pasternak  * @pdev_wd - array of watchdog platform devices
3498c03f64dSVadim Pasternak  * @regmap: device register map
3508c03f64dSVadim Pasternak  * @hotplug_resources: system hotplug resources
3518c03f64dSVadim Pasternak  * @hotplug_resources_size: size of system hotplug resources
3528c03f64dSVadim Pasternak  * @hi2c_main_init_status: init status of I2C main bus
3538c03f64dSVadim Pasternak  * @irq_fpga: FPGA IRQ number
3548c03f64dSVadim Pasternak  */
3558c03f64dSVadim Pasternak struct mlxplat_priv {
3568c03f64dSVadim Pasternak 	struct platform_device *pdev_i2c;
3578c03f64dSVadim Pasternak 	struct platform_device *pdev_mux[MLXPLAT_CPLD_LPC_MUX_DEVS];
3588c03f64dSVadim Pasternak 	struct platform_device *pdev_hotplug;
3598c03f64dSVadim Pasternak 	struct platform_device *pdev_led;
3608c03f64dSVadim Pasternak 	struct platform_device *pdev_io_regs;
3618c03f64dSVadim Pasternak 	struct platform_device *pdev_fan;
3628c03f64dSVadim Pasternak 	struct platform_device *pdev_wd[MLXPLAT_CPLD_WD_MAX_DEVS];
3638c03f64dSVadim Pasternak 	void *regmap;
3648c03f64dSVadim Pasternak 	struct resource *hotplug_resources;
3658c03f64dSVadim Pasternak 	unsigned int hotplug_resources_size;
3668c03f64dSVadim Pasternak 	u8 i2c_main_init_status;
3678c03f64dSVadim Pasternak 	int irq_fpga;
3688c03f64dSVadim Pasternak };
3698c03f64dSVadim Pasternak 
3708c03f64dSVadim Pasternak static struct platform_device *mlxplat_dev;
3718c03f64dSVadim Pasternak static int mlxplat_i2c_main_completion_notify(void *handle, int id);
3728c03f64dSVadim Pasternak static void __iomem *i2c_bridge_addr, *jtag_bridge_addr;
3738c03f64dSVadim Pasternak 
3748c03f64dSVadim Pasternak /* Regions for LPC I2C controller and LPC base register space */
3758c03f64dSVadim Pasternak static const struct resource mlxplat_lpc_resources[] = {
3768c03f64dSVadim Pasternak 	[0] = DEFINE_RES_NAMED(MLXPLAT_CPLD_LPC_I2C_BASE_ADRR,
3778c03f64dSVadim Pasternak 			       MLXPLAT_CPLD_LPC_IO_RANGE,
3788c03f64dSVadim Pasternak 			       "mlxplat_cpld_lpc_i2c_ctrl", IORESOURCE_IO),
3798c03f64dSVadim Pasternak 	[1] = DEFINE_RES_NAMED(MLXPLAT_CPLD_LPC_REG_BASE_ADRR,
3808c03f64dSVadim Pasternak 			       MLXPLAT_CPLD_LPC_IO_RANGE,
3818c03f64dSVadim Pasternak 			       "mlxplat_cpld_lpc_regs",
3828c03f64dSVadim Pasternak 			       IORESOURCE_IO),
3838c03f64dSVadim Pasternak };
3848c03f64dSVadim Pasternak 
3858c03f64dSVadim Pasternak /* Platform systems default i2c data */
3868c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_default_data = {
3878c03f64dSVadim Pasternak 	.completion_notify = mlxplat_i2c_main_completion_notify,
3888c03f64dSVadim Pasternak };
3898c03f64dSVadim Pasternak 
3908c03f64dSVadim Pasternak /* Platform i2c next generation systems data */
3918c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_i2c_ng_items_data[] = {
3928c03f64dSVadim Pasternak 	{
3938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
3948c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_I2C_CAP_MASK,
3958c03f64dSVadim Pasternak 		.bit = MLXPLAT_CPLD_I2C_CAP_BIT,
3968c03f64dSVadim Pasternak 	},
3978c03f64dSVadim Pasternak };
3988c03f64dSVadim Pasternak 
3998c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_i2c_ng_items[] = {
4008c03f64dSVadim Pasternak 	{
4018c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_i2c_ng_items_data,
4028c03f64dSVadim Pasternak 	},
4038c03f64dSVadim Pasternak };
4048c03f64dSVadim Pasternak 
4058c03f64dSVadim Pasternak /* Platform next generation systems i2c data */
4068c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_ng_data = {
4078c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_i2c_ng_items,
4088c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
4098c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_COMEX,
4108c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET,
4118c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_I2C,
4128c03f64dSVadim Pasternak 	.completion_notify = mlxplat_i2c_main_completion_notify,
4138c03f64dSVadim Pasternak };
4148c03f64dSVadim Pasternak 
4158c03f64dSVadim Pasternak /* Platform default channels */
4168c03f64dSVadim Pasternak static const int mlxplat_default_channels[][MLXPLAT_CPLD_GRP_CHNL_NUM] = {
4178c03f64dSVadim Pasternak 	{
4188c03f64dSVadim Pasternak 		MLXPLAT_CPLD_CH1, MLXPLAT_CPLD_CH1 + 1, MLXPLAT_CPLD_CH1 + 2,
4198c03f64dSVadim Pasternak 		MLXPLAT_CPLD_CH1 + 3, MLXPLAT_CPLD_CH1 + 4, MLXPLAT_CPLD_CH1 +
4208c03f64dSVadim Pasternak 		5, MLXPLAT_CPLD_CH1 + 6, MLXPLAT_CPLD_CH1 + 7
4218c03f64dSVadim Pasternak 	},
4228c03f64dSVadim Pasternak 	{
4238c03f64dSVadim Pasternak 		MLXPLAT_CPLD_CH2, MLXPLAT_CPLD_CH2 + 1, MLXPLAT_CPLD_CH2 + 2,
4248c03f64dSVadim Pasternak 		MLXPLAT_CPLD_CH2 + 3, MLXPLAT_CPLD_CH2 + 4, MLXPLAT_CPLD_CH2 +
4258c03f64dSVadim Pasternak 		5, MLXPLAT_CPLD_CH2 + 6, MLXPLAT_CPLD_CH2 + 7
4268c03f64dSVadim Pasternak 	},
4278c03f64dSVadim Pasternak };
4288c03f64dSVadim Pasternak 
4298c03f64dSVadim Pasternak /* Platform channels for MSN21xx system family */
4308c03f64dSVadim Pasternak static const int mlxplat_msn21xx_channels[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
4318c03f64dSVadim Pasternak 
4328c03f64dSVadim Pasternak /* Platform mux data */
4338c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_default_mux_data[] = {
4348c03f64dSVadim Pasternak 	{
4358c03f64dSVadim Pasternak 		.parent = 1,
4368c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH1,
4378c03f64dSVadim Pasternak 		.write_only = 1,
4388c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1,
4398c03f64dSVadim Pasternak 		.reg_size = 1,
4408c03f64dSVadim Pasternak 		.idle_in_use = 1,
4418c03f64dSVadim Pasternak 	},
4428c03f64dSVadim Pasternak 	{
4438c03f64dSVadim Pasternak 		.parent = 1,
4448c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH2,
4458c03f64dSVadim Pasternak 		.write_only = 1,
4468c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2,
4478c03f64dSVadim Pasternak 		.reg_size = 1,
4488c03f64dSVadim Pasternak 		.idle_in_use = 1,
4498c03f64dSVadim Pasternak 	},
4508c03f64dSVadim Pasternak 
4518c03f64dSVadim Pasternak };
4528c03f64dSVadim Pasternak 
4538c03f64dSVadim Pasternak /* Platform mux configuration variables */
4548c03f64dSVadim Pasternak static int mlxplat_max_adap_num;
4558c03f64dSVadim Pasternak static int mlxplat_mux_num;
4568c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data *mlxplat_mux_data;
4578c03f64dSVadim Pasternak static struct notifier_block *mlxplat_reboot_nb;
4588c03f64dSVadim Pasternak 
4598c03f64dSVadim Pasternak /* Platform extended mux data */
4608c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_extended_mux_data[] = {
4618c03f64dSVadim Pasternak 	{
4628c03f64dSVadim Pasternak 		.parent = 1,
4638c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH1,
4648c03f64dSVadim Pasternak 		.write_only = 1,
4658c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1,
4668c03f64dSVadim Pasternak 		.reg_size = 1,
4678c03f64dSVadim Pasternak 		.idle_in_use = 1,
4688c03f64dSVadim Pasternak 	},
4698c03f64dSVadim Pasternak 	{
4708c03f64dSVadim Pasternak 		.parent = 1,
4718c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH2,
4728c03f64dSVadim Pasternak 		.write_only = 1,
4738c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG3,
4748c03f64dSVadim Pasternak 		.reg_size = 1,
4758c03f64dSVadim Pasternak 		.idle_in_use = 1,
4768c03f64dSVadim Pasternak 	},
4778c03f64dSVadim Pasternak 	{
4788c03f64dSVadim Pasternak 		.parent = 1,
4798c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH3,
4808c03f64dSVadim Pasternak 		.write_only = 1,
4818c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2,
4828c03f64dSVadim Pasternak 		.reg_size = 1,
4838c03f64dSVadim Pasternak 		.idle_in_use = 1,
4848c03f64dSVadim Pasternak 	},
4858c03f64dSVadim Pasternak 
4868c03f64dSVadim Pasternak };
4878c03f64dSVadim Pasternak 
4888c03f64dSVadim Pasternak /* Platform channels for modular system family */
4898c03f64dSVadim Pasternak static const int mlxplat_modular_upper_channel[] = { 1 };
4908c03f64dSVadim Pasternak static const int mlxplat_modular_channels[] = {
4918c03f64dSVadim Pasternak 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
4928c03f64dSVadim Pasternak 	21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
4938c03f64dSVadim Pasternak 	38, 39, 40
4948c03f64dSVadim Pasternak };
4958c03f64dSVadim Pasternak 
4968c03f64dSVadim Pasternak /* Platform modular mux data */
4978c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_modular_mux_data[] = {
4988c03f64dSVadim Pasternak 	{
4998c03f64dSVadim Pasternak 		.parent = 1,
5008c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH1,
5018c03f64dSVadim Pasternak 		.write_only = 1,
5028c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG4,
5038c03f64dSVadim Pasternak 		.reg_size = 1,
5048c03f64dSVadim Pasternak 		.idle_in_use = 1,
5058c03f64dSVadim Pasternak 		.values = mlxplat_modular_upper_channel,
5068c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_modular_upper_channel),
5078c03f64dSVadim Pasternak 	},
5088c03f64dSVadim Pasternak 	{
5098c03f64dSVadim Pasternak 		.parent = 1,
5108c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH2_ETH_MODULAR,
5118c03f64dSVadim Pasternak 		.write_only = 1,
5128c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1,
5138c03f64dSVadim Pasternak 		.reg_size = 1,
5148c03f64dSVadim Pasternak 		.idle_in_use = 1,
5158c03f64dSVadim Pasternak 		.values = mlxplat_modular_channels,
5168c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_modular_channels),
5178c03f64dSVadim Pasternak 	},
5188c03f64dSVadim Pasternak 	{
5198c03f64dSVadim Pasternak 		.parent = MLXPLAT_CPLD_CH1,
5208c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH3_ETH_MODULAR,
5218c03f64dSVadim Pasternak 		.write_only = 1,
5228c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG3,
5238c03f64dSVadim Pasternak 		.reg_size = 1,
5248c03f64dSVadim Pasternak 		.idle_in_use = 1,
5258c03f64dSVadim Pasternak 		.values = mlxplat_msn21xx_channels,
5268c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels),
5278c03f64dSVadim Pasternak 	},
5288c03f64dSVadim Pasternak 	{
5298c03f64dSVadim Pasternak 		.parent = 1,
5308c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH4_ETH_MODULAR,
5318c03f64dSVadim Pasternak 		.write_only = 1,
5328c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2,
5338c03f64dSVadim Pasternak 		.reg_size = 1,
5348c03f64dSVadim Pasternak 		.idle_in_use = 1,
5358c03f64dSVadim Pasternak 		.values = mlxplat_msn21xx_channels,
5368c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels),
5378c03f64dSVadim Pasternak 	},
5388c03f64dSVadim Pasternak };
5398c03f64dSVadim Pasternak 
5408c03f64dSVadim Pasternak /* Platform channels for rack switch system family */
5418c03f64dSVadim Pasternak static const int mlxplat_rack_switch_channels[] = {
5428c03f64dSVadim Pasternak 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
5438c03f64dSVadim Pasternak };
5448c03f64dSVadim Pasternak 
5458c03f64dSVadim Pasternak /* Platform rack switch mux data */
5468c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_rack_switch_mux_data[] = {
5478c03f64dSVadim Pasternak 	{
5488c03f64dSVadim Pasternak 		.parent = 1,
5498c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH1,
5508c03f64dSVadim Pasternak 		.write_only = 1,
5518c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1,
5528c03f64dSVadim Pasternak 		.reg_size = 1,
5538c03f64dSVadim Pasternak 		.idle_in_use = 1,
5548c03f64dSVadim Pasternak 		.values = mlxplat_rack_switch_channels,
5558c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_rack_switch_channels),
5568c03f64dSVadim Pasternak 	},
5578c03f64dSVadim Pasternak 	{
5588c03f64dSVadim Pasternak 		.parent = 1,
5598c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH2_RACK_SWITCH,
5608c03f64dSVadim Pasternak 		.write_only = 1,
5618c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2,
5628c03f64dSVadim Pasternak 		.reg_size = 1,
5638c03f64dSVadim Pasternak 		.idle_in_use = 1,
5648c03f64dSVadim Pasternak 		.values = mlxplat_msn21xx_channels,
5658c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels),
5668c03f64dSVadim Pasternak 	},
5678c03f64dSVadim Pasternak 
5688c03f64dSVadim Pasternak };
5698c03f64dSVadim Pasternak 
5708c03f64dSVadim Pasternak /* Platform channels for ng800 system family */
5718c03f64dSVadim Pasternak static const int mlxplat_ng800_channels[] = {
5728c03f64dSVadim Pasternak 	1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
5738c03f64dSVadim Pasternak 	18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
5748c03f64dSVadim Pasternak };
5758c03f64dSVadim Pasternak 
5768c03f64dSVadim Pasternak /* Platform ng800 mux data */
5778c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_ng800_mux_data[] = {
5788c03f64dSVadim Pasternak 	{
5798c03f64dSVadim Pasternak 		.parent = 1,
5808c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH1,
5818c03f64dSVadim Pasternak 		.write_only = 1,
5828c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1,
5838c03f64dSVadim Pasternak 		.reg_size = 1,
5848c03f64dSVadim Pasternak 		.idle_in_use = 1,
5858c03f64dSVadim Pasternak 		.values = mlxplat_ng800_channels,
5868c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_ng800_channels),
5878c03f64dSVadim Pasternak 	},
5888c03f64dSVadim Pasternak 	{
5898c03f64dSVadim Pasternak 		.parent = 1,
5908c03f64dSVadim Pasternak 		.base_nr = MLXPLAT_CPLD_CH2_NG800,
5918c03f64dSVadim Pasternak 		.write_only = 1,
5928c03f64dSVadim Pasternak 		.reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2,
5938c03f64dSVadim Pasternak 		.reg_size = 1,
5948c03f64dSVadim Pasternak 		.idle_in_use = 1,
5958c03f64dSVadim Pasternak 		.values = mlxplat_msn21xx_channels,
5968c03f64dSVadim Pasternak 		.n_values = ARRAY_SIZE(mlxplat_msn21xx_channels),
5978c03f64dSVadim Pasternak 	},
5988c03f64dSVadim Pasternak 
5998c03f64dSVadim Pasternak };
6008c03f64dSVadim Pasternak 
6018c03f64dSVadim Pasternak /* Platform hotplug devices */
6028c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_pwr[] = {
6038c03f64dSVadim Pasternak 	{
6048c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x59),
6058c03f64dSVadim Pasternak 	},
6068c03f64dSVadim Pasternak 	{
6078c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x58),
6088c03f64dSVadim Pasternak 	},
6098c03f64dSVadim Pasternak };
6108c03f64dSVadim Pasternak 
6118c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_ext_pwr[] = {
6128c03f64dSVadim Pasternak 	{
6138c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x5b),
6148c03f64dSVadim Pasternak 	},
6158c03f64dSVadim Pasternak 	{
6168c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x5a),
6178c03f64dSVadim Pasternak 	},
6188c03f64dSVadim Pasternak };
6198c03f64dSVadim Pasternak 
6208c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_pwr_ng800[] = {
6218c03f64dSVadim Pasternak 	{
6228c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x59),
6238c03f64dSVadim Pasternak 	},
6248c03f64dSVadim Pasternak 	{
6258c03f64dSVadim Pasternak 		I2C_BOARD_INFO("dps460", 0x5a),
6268c03f64dSVadim Pasternak 	},
6278c03f64dSVadim Pasternak };
6288c03f64dSVadim Pasternak 
6298c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_fan[] = {
6308c03f64dSVadim Pasternak 	{
6318c03f64dSVadim Pasternak 		I2C_BOARD_INFO("24c32", 0x50),
6328c03f64dSVadim Pasternak 	},
6338c03f64dSVadim Pasternak 	{
6348c03f64dSVadim Pasternak 		I2C_BOARD_INFO("24c32", 0x50),
6358c03f64dSVadim Pasternak 	},
6368c03f64dSVadim Pasternak 	{
6378c03f64dSVadim Pasternak 		I2C_BOARD_INFO("24c32", 0x50),
6388c03f64dSVadim Pasternak 	},
6398c03f64dSVadim Pasternak 	{
6408c03f64dSVadim Pasternak 		I2C_BOARD_INFO("24c32", 0x50),
6418c03f64dSVadim Pasternak 	},
6428c03f64dSVadim Pasternak };
6438c03f64dSVadim Pasternak 
6448c03f64dSVadim Pasternak /* Platform hotplug comex carrier system family data */
6458c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_comex_psu_items_data[] = {
6468c03f64dSVadim Pasternak 	{
6478c03f64dSVadim Pasternak 		.label = "psu1",
6488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
6498c03f64dSVadim Pasternak 		.mask = BIT(0),
6508c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
6518c03f64dSVadim Pasternak 	},
6528c03f64dSVadim Pasternak 	{
6538c03f64dSVadim Pasternak 		.label = "psu2",
6548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
6558c03f64dSVadim Pasternak 		.mask = BIT(1),
6568c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
6578c03f64dSVadim Pasternak 	},
6588c03f64dSVadim Pasternak };
6598c03f64dSVadim Pasternak 
6608c03f64dSVadim Pasternak /* Platform hotplug default data */
6618c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_psu_items_data[] = {
6628c03f64dSVadim Pasternak 	{
6638c03f64dSVadim Pasternak 		.label = "psu1",
6648c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
6658c03f64dSVadim Pasternak 		.mask = BIT(0),
6668c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
6678c03f64dSVadim Pasternak 	},
6688c03f64dSVadim Pasternak 	{
6698c03f64dSVadim Pasternak 		.label = "psu2",
6708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
6718c03f64dSVadim Pasternak 		.mask = BIT(1),
6728c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
6738c03f64dSVadim Pasternak 	},
6748c03f64dSVadim Pasternak };
6758c03f64dSVadim Pasternak 
6768c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_items_data[] = {
6778c03f64dSVadim Pasternak 	{
6788c03f64dSVadim Pasternak 		.label = "pwr1",
6798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
6808c03f64dSVadim Pasternak 		.mask = BIT(0),
6818c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0],
6828c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR,
6838c03f64dSVadim Pasternak 	},
6848c03f64dSVadim Pasternak 	{
6858c03f64dSVadim Pasternak 		.label = "pwr2",
6868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
6878c03f64dSVadim Pasternak 		.mask = BIT(1),
6888c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1],
6898c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR,
6908c03f64dSVadim Pasternak 	},
6918c03f64dSVadim Pasternak };
6928c03f64dSVadim Pasternak 
6938c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_wc_items_data[] = {
6948c03f64dSVadim Pasternak 	{
6958c03f64dSVadim Pasternak 		.label = "pwr1",
6968c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
6978c03f64dSVadim Pasternak 		.mask = BIT(0),
6988c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
6998c03f64dSVadim Pasternak 	},
7008c03f64dSVadim Pasternak 	{
7018c03f64dSVadim Pasternak 		.label = "pwr2",
7028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
7038c03f64dSVadim Pasternak 		.mask = BIT(1),
7048c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
7058c03f64dSVadim Pasternak 	},
7068c03f64dSVadim Pasternak };
7078c03f64dSVadim Pasternak 
7088c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_ng800_items_data[] = {
7098c03f64dSVadim Pasternak 	{
7108c03f64dSVadim Pasternak 		.label = "pwr1",
7118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
7128c03f64dSVadim Pasternak 		.mask = BIT(0),
7138c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[0],
7148c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
7158c03f64dSVadim Pasternak 	},
7168c03f64dSVadim Pasternak 	{
7178c03f64dSVadim Pasternak 		.label = "pwr2",
7188c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
7198c03f64dSVadim Pasternak 		.mask = BIT(1),
7208c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[1],
7218c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
7228c03f64dSVadim Pasternak 	},
7238c03f64dSVadim Pasternak };
7248c03f64dSVadim Pasternak 
7258c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_items_data[] = {
7268c03f64dSVadim Pasternak 	{
7278c03f64dSVadim Pasternak 		.label = "fan1",
7288c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
7298c03f64dSVadim Pasternak 		.mask = BIT(0),
7308c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_fan[0],
7318c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_FAN1_DEFAULT_NR,
7328c03f64dSVadim Pasternak 	},
7338c03f64dSVadim Pasternak 	{
7348c03f64dSVadim Pasternak 		.label = "fan2",
7358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
7368c03f64dSVadim Pasternak 		.mask = BIT(1),
7378c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_fan[1],
7388c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_FAN2_DEFAULT_NR,
7398c03f64dSVadim Pasternak 	},
7408c03f64dSVadim Pasternak 	{
7418c03f64dSVadim Pasternak 		.label = "fan3",
7428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
7438c03f64dSVadim Pasternak 		.mask = BIT(2),
7448c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_fan[2],
7458c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_FAN3_DEFAULT_NR,
7468c03f64dSVadim Pasternak 	},
7478c03f64dSVadim Pasternak 	{
7488c03f64dSVadim Pasternak 		.label = "fan4",
7498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
7508c03f64dSVadim Pasternak 		.mask = BIT(3),
7518c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_fan[3],
7528c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_FAN4_DEFAULT_NR,
7538c03f64dSVadim Pasternak 	},
7548c03f64dSVadim Pasternak };
7558c03f64dSVadim Pasternak 
7568c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_asic_items_data[] = {
7578c03f64dSVadim Pasternak 	{
7588c03f64dSVadim Pasternak 		.label = "asic1",
7598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
7608c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
7618c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
7628c03f64dSVadim Pasternak 	},
7638c03f64dSVadim Pasternak };
7648c03f64dSVadim Pasternak 
7658c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_asic2_items_data[] = {
7668c03f64dSVadim Pasternak 	{
7678c03f64dSVadim Pasternak 		.label = "asic2",
7688c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET,
7698c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
7708c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
7718c03f64dSVadim Pasternak 	},
7728c03f64dSVadim Pasternak };
7738c03f64dSVadim Pasternak 
7748c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_items[] = {
7758c03f64dSVadim Pasternak 	{
7768c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_psu_items_data,
7778c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_PSU_MASK_DEF,
7788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
7798c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_MASK,
7808c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data),
7818c03f64dSVadim Pasternak 		.inversed = 1,
7828c03f64dSVadim Pasternak 		.health = false,
7838c03f64dSVadim Pasternak 	},
7848c03f64dSVadim Pasternak 	{
7858c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_pwr_items_data,
7868c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF,
7878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
7888c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
7898c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data),
7908c03f64dSVadim Pasternak 		.inversed = 0,
7918c03f64dSVadim Pasternak 		.health = false,
7928c03f64dSVadim Pasternak 	},
7938c03f64dSVadim Pasternak 	{
7948c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_fan_items_data,
7958c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_FAN_MASK_DEF,
7968c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
7978c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_MASK,
7988c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_items_data),
7998c03f64dSVadim Pasternak 		.inversed = 1,
8008c03f64dSVadim Pasternak 		.health = false,
8018c03f64dSVadim Pasternak 	},
8028c03f64dSVadim Pasternak 	{
8038c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
8048c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
8058c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
8068c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
8078c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
8088c03f64dSVadim Pasternak 		.inversed = 0,
8098c03f64dSVadim Pasternak 		.health = true,
8108c03f64dSVadim Pasternak 	},
8118c03f64dSVadim Pasternak };
8128c03f64dSVadim Pasternak 
8138c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_comex_items[] = {
8148c03f64dSVadim Pasternak 	{
8158c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_comex_psu_items_data,
8168c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
8178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
8188c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_MASK,
8198c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data),
8208c03f64dSVadim Pasternak 		.inversed = 1,
8218c03f64dSVadim Pasternak 		.health = false,
8228c03f64dSVadim Pasternak 	},
8238c03f64dSVadim Pasternak 	{
8248c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_pwr_items_data,
8258c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
8268c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
8278c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
8288c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data),
8298c03f64dSVadim Pasternak 		.inversed = 0,
8308c03f64dSVadim Pasternak 		.health = false,
8318c03f64dSVadim Pasternak 	},
8328c03f64dSVadim Pasternak 	{
8338c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_fan_items_data,
8348c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
8358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
8368c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_MASK,
8378c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_items_data),
8388c03f64dSVadim Pasternak 		.inversed = 1,
8398c03f64dSVadim Pasternak 		.health = false,
8408c03f64dSVadim Pasternak 	},
8418c03f64dSVadim Pasternak 	{
8428c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
8438c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
8448c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
8458c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
8468c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
8478c03f64dSVadim Pasternak 		.inversed = 0,
8488c03f64dSVadim Pasternak 		.health = true,
8498c03f64dSVadim Pasternak 	},
8508c03f64dSVadim Pasternak };
8518c03f64dSVadim Pasternak 
8528c03f64dSVadim Pasternak static
8538c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_data = {
8548c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_default_items,
8558c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_items),
8568c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
8578c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
8588c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
8598c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
8608c03f64dSVadim Pasternak };
8618c03f64dSVadim Pasternak 
8628c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_wc_items[] = {
8638c03f64dSVadim Pasternak 	{
8648c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_comex_psu_items_data,
8658c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
8668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
8678c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_MASK,
8688c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data),
8698c03f64dSVadim Pasternak 		.inversed = 1,
8708c03f64dSVadim Pasternak 		.health = false,
8718c03f64dSVadim Pasternak 	},
8728c03f64dSVadim Pasternak 	{
8738c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_pwr_wc_items_data,
8748c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER,
8758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
8768c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
8778c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data),
8788c03f64dSVadim Pasternak 		.inversed = 0,
8798c03f64dSVadim Pasternak 		.health = false,
8808c03f64dSVadim Pasternak 	},
8818c03f64dSVadim Pasternak 	{
8828c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
8838c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
8848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
8858c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
8868c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
8878c03f64dSVadim Pasternak 		.inversed = 0,
8888c03f64dSVadim Pasternak 		.health = true,
8898c03f64dSVadim Pasternak 	},
8908c03f64dSVadim Pasternak };
8918c03f64dSVadim Pasternak 
8928c03f64dSVadim Pasternak static
8938c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_wc_data = {
8948c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_default_wc_items,
8958c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_wc_items),
8968c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
8978c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
8988c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
8998c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
9008c03f64dSVadim Pasternak };
9018c03f64dSVadim Pasternak 
9028c03f64dSVadim Pasternak static
9038c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_comex_data = {
9048c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_comex_items,
9058c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_comex_items),
9068c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
9078c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_CARR_DEF,
9088c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET,
9098c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGRCX_MASK,
9108c03f64dSVadim Pasternak };
9118c03f64dSVadim Pasternak 
9128c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_pwr_items_data[] = {
9138c03f64dSVadim Pasternak 	{
9148c03f64dSVadim Pasternak 		.label = "pwr1",
9158c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
9168c03f64dSVadim Pasternak 		.mask = BIT(0),
9178c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
9188c03f64dSVadim Pasternak 	},
9198c03f64dSVadim Pasternak 	{
9208c03f64dSVadim Pasternak 		.label = "pwr2",
9218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
9228c03f64dSVadim Pasternak 		.mask = BIT(1),
9238c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
9248c03f64dSVadim Pasternak 	},
9258c03f64dSVadim Pasternak };
9268c03f64dSVadim Pasternak 
9278c03f64dSVadim Pasternak /* Platform hotplug MSN21xx system family data */
9288c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn21xx_items[] = {
9298c03f64dSVadim Pasternak 	{
9308c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn21xx_pwr_items_data,
9318c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF,
9328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
9338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
9348c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_pwr_items_data),
9358c03f64dSVadim Pasternak 		.inversed = 0,
9368c03f64dSVadim Pasternak 		.health = false,
9378c03f64dSVadim Pasternak 	},
9388c03f64dSVadim Pasternak 	{
9398c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
9408c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
9418c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
9428c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
9438c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
9448c03f64dSVadim Pasternak 		.inversed = 0,
9458c03f64dSVadim Pasternak 		.health = true,
9468c03f64dSVadim Pasternak 	},
9478c03f64dSVadim Pasternak };
9488c03f64dSVadim Pasternak 
9498c03f64dSVadim Pasternak static
9508c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn21xx_data = {
9518c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_msn21xx_items,
9528c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_items),
9538c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
9548c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
9558c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
9568c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
9578c03f64dSVadim Pasternak };
9588c03f64dSVadim Pasternak 
9598c03f64dSVadim Pasternak /* Platform hotplug msn274x system family data */
9608c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_psu_items_data[] = {
9618c03f64dSVadim Pasternak 	{
9628c03f64dSVadim Pasternak 		.label = "psu1",
9638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
9648c03f64dSVadim Pasternak 		.mask = BIT(0),
9658c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
9668c03f64dSVadim Pasternak 	},
9678c03f64dSVadim Pasternak 	{
9688c03f64dSVadim Pasternak 		.label = "psu2",
9698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
9708c03f64dSVadim Pasternak 		.mask = BIT(1),
9718c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
9728c03f64dSVadim Pasternak 	},
9738c03f64dSVadim Pasternak };
9748c03f64dSVadim Pasternak 
9758c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_pwr_items_data[] = {
9768c03f64dSVadim Pasternak 	{
9778c03f64dSVadim Pasternak 		.label = "pwr1",
9788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
9798c03f64dSVadim Pasternak 		.mask = BIT(0),
9808c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0],
9818c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
9828c03f64dSVadim Pasternak 	},
9838c03f64dSVadim Pasternak 	{
9848c03f64dSVadim Pasternak 		.label = "pwr2",
9858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
9868c03f64dSVadim Pasternak 		.mask = BIT(1),
9878c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1],
9888c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
9898c03f64dSVadim Pasternak 	},
9908c03f64dSVadim Pasternak };
9918c03f64dSVadim Pasternak 
9928c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_fan_items_data[] = {
9938c03f64dSVadim Pasternak 	{
9948c03f64dSVadim Pasternak 		.label = "fan1",
9958c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
9968c03f64dSVadim Pasternak 		.mask = BIT(0),
9978c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
9988c03f64dSVadim Pasternak 	},
9998c03f64dSVadim Pasternak 	{
10008c03f64dSVadim Pasternak 		.label = "fan2",
10018c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
10028c03f64dSVadim Pasternak 		.mask = BIT(1),
10038c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
10048c03f64dSVadim Pasternak 	},
10058c03f64dSVadim Pasternak 	{
10068c03f64dSVadim Pasternak 		.label = "fan3",
10078c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
10088c03f64dSVadim Pasternak 		.mask = BIT(2),
10098c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
10108c03f64dSVadim Pasternak 	},
10118c03f64dSVadim Pasternak 	{
10128c03f64dSVadim Pasternak 		.label = "fan4",
10138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
10148c03f64dSVadim Pasternak 		.mask = BIT(3),
10158c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
10168c03f64dSVadim Pasternak 	},
10178c03f64dSVadim Pasternak };
10188c03f64dSVadim Pasternak 
10198c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn274x_items[] = {
10208c03f64dSVadim Pasternak 	{
10218c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn274x_psu_items_data,
10228c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
10238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
10248c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_MASK,
10258c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_psu_items_data),
10268c03f64dSVadim Pasternak 		.inversed = 1,
10278c03f64dSVadim Pasternak 		.health = false,
10288c03f64dSVadim Pasternak 	},
10298c03f64dSVadim Pasternak 	{
10308c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_pwr_items_data,
10318c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
10328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
10338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
10348c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data),
10358c03f64dSVadim Pasternak 		.inversed = 0,
10368c03f64dSVadim Pasternak 		.health = false,
10378c03f64dSVadim Pasternak 	},
10388c03f64dSVadim Pasternak 	{
10398c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn274x_fan_items_data,
10408c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
10418c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
10428c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_MASK,
10438c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_fan_items_data),
10448c03f64dSVadim Pasternak 		.inversed = 1,
10458c03f64dSVadim Pasternak 		.health = false,
10468c03f64dSVadim Pasternak 	},
10478c03f64dSVadim Pasternak 	{
10488c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
10498c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
10508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
10518c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
10528c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
10538c03f64dSVadim Pasternak 		.inversed = 0,
10548c03f64dSVadim Pasternak 		.health = true,
10558c03f64dSVadim Pasternak 	},
10568c03f64dSVadim Pasternak };
10578c03f64dSVadim Pasternak 
10588c03f64dSVadim Pasternak static
10598c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn274x_data = {
10608c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_msn274x_items,
10618c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_items),
10628c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
10638c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
10648c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
10658c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
10668c03f64dSVadim Pasternak };
10678c03f64dSVadim Pasternak 
10688c03f64dSVadim Pasternak /* Platform hotplug MSN201x system family data */
10698c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn201x_pwr_items_data[] = {
10708c03f64dSVadim Pasternak 	{
10718c03f64dSVadim Pasternak 		.label = "pwr1",
10728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
10738c03f64dSVadim Pasternak 		.mask = BIT(0),
10748c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
10758c03f64dSVadim Pasternak 	},
10768c03f64dSVadim Pasternak 	{
10778c03f64dSVadim Pasternak 		.label = "pwr2",
10788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
10798c03f64dSVadim Pasternak 		.mask = BIT(1),
10808c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
10818c03f64dSVadim Pasternak 	},
10828c03f64dSVadim Pasternak };
10838c03f64dSVadim Pasternak 
10848c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn201x_items[] = {
10858c03f64dSVadim Pasternak 	{
10868c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn201x_pwr_items_data,
10878c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF,
10888c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
10898c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
10908c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_pwr_items_data),
10918c03f64dSVadim Pasternak 		.inversed = 0,
10928c03f64dSVadim Pasternak 		.health = false,
10938c03f64dSVadim Pasternak 	},
10948c03f64dSVadim Pasternak 	{
10958c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
10968c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF,
10978c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
10988c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
10998c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
11008c03f64dSVadim Pasternak 		.inversed = 0,
11018c03f64dSVadim Pasternak 		.health = true,
11028c03f64dSVadim Pasternak 	},
11038c03f64dSVadim Pasternak };
11048c03f64dSVadim Pasternak 
11058c03f64dSVadim Pasternak static
11068c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = {
11078c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_msn201x_items,
11088c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_items),
11098c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
11108c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_DEF,
11118c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
11128c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
11138c03f64dSVadim Pasternak };
11148c03f64dSVadim Pasternak 
11158c03f64dSVadim Pasternak /* Platform hotplug next generation system family data */
11168c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_psu_items_data[] = {
11178c03f64dSVadim Pasternak 	{
11188c03f64dSVadim Pasternak 		.label = "psu1",
11198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
11208c03f64dSVadim Pasternak 		.mask = BIT(0),
11218c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11228c03f64dSVadim Pasternak 	},
11238c03f64dSVadim Pasternak 	{
11248c03f64dSVadim Pasternak 		.label = "psu2",
11258c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
11268c03f64dSVadim Pasternak 		.mask = BIT(1),
11278c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11288c03f64dSVadim Pasternak 	},
11298c03f64dSVadim Pasternak };
11308c03f64dSVadim Pasternak 
11318c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_fan_items_data[] = {
11328c03f64dSVadim Pasternak 	{
11338c03f64dSVadim Pasternak 		.label = "fan1",
11348c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11358c03f64dSVadim Pasternak 		.mask = BIT(0),
11368c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11378c03f64dSVadim Pasternak 		.bit = BIT(0),
11388c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11398c03f64dSVadim Pasternak 	},
11408c03f64dSVadim Pasternak 	{
11418c03f64dSVadim Pasternak 		.label = "fan2",
11428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11438c03f64dSVadim Pasternak 		.mask = BIT(1),
11448c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11458c03f64dSVadim Pasternak 		.bit = BIT(1),
11468c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11478c03f64dSVadim Pasternak 	},
11488c03f64dSVadim Pasternak 	{
11498c03f64dSVadim Pasternak 		.label = "fan3",
11508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11518c03f64dSVadim Pasternak 		.mask = BIT(2),
11528c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11538c03f64dSVadim Pasternak 		.bit = BIT(2),
11548c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11558c03f64dSVadim Pasternak 	},
11568c03f64dSVadim Pasternak 	{
11578c03f64dSVadim Pasternak 		.label = "fan4",
11588c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11598c03f64dSVadim Pasternak 		.mask = BIT(3),
11608c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11618c03f64dSVadim Pasternak 		.bit = BIT(3),
11628c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11638c03f64dSVadim Pasternak 	},
11648c03f64dSVadim Pasternak 	{
11658c03f64dSVadim Pasternak 		.label = "fan5",
11668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11678c03f64dSVadim Pasternak 		.mask = BIT(4),
11688c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11698c03f64dSVadim Pasternak 		.bit = BIT(4),
11708c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11718c03f64dSVadim Pasternak 	},
11728c03f64dSVadim Pasternak 	{
11738c03f64dSVadim Pasternak 		.label = "fan6",
11748c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11758c03f64dSVadim Pasternak 		.mask = BIT(5),
11768c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11778c03f64dSVadim Pasternak 		.bit = BIT(5),
11788c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11798c03f64dSVadim Pasternak 	},
11808c03f64dSVadim Pasternak 	{
11818c03f64dSVadim Pasternak 		.label = "fan7",
11828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
11838c03f64dSVadim Pasternak 		.mask = BIT(6),
11848c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
11858c03f64dSVadim Pasternak 		.bit = BIT(6),
11868c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
11878c03f64dSVadim Pasternak 	},
11888c03f64dSVadim Pasternak };
11898c03f64dSVadim Pasternak 
11908c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_ng_items[] = {
11918c03f64dSVadim Pasternak 	{
11928c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_psu_items_data,
11938c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
11948c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
11958c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_MASK,
11968c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data),
11978c03f64dSVadim Pasternak 		.inversed = 1,
11988c03f64dSVadim Pasternak 		.health = false,
11998c03f64dSVadim Pasternak 	},
12008c03f64dSVadim Pasternak 	{
12018c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_pwr_items_data,
12028c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
12038c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
12048c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_MASK,
12058c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data),
12068c03f64dSVadim Pasternak 		.inversed = 0,
12078c03f64dSVadim Pasternak 		.health = false,
12088c03f64dSVadim Pasternak 	},
12098c03f64dSVadim Pasternak 	{
12108c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
12118c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
12128c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
12138c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
12148c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
12158c03f64dSVadim Pasternak 		.inversed = 1,
12168c03f64dSVadim Pasternak 		.health = false,
12178c03f64dSVadim Pasternak 	},
12188c03f64dSVadim Pasternak 	{
12198c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
12208c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
12218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
12228c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
12238c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
12248c03f64dSVadim Pasternak 		.inversed = 0,
12258c03f64dSVadim Pasternak 		.health = true,
12268c03f64dSVadim Pasternak 	},
12278c03f64dSVadim Pasternak };
12288c03f64dSVadim Pasternak 
12298c03f64dSVadim Pasternak static
12308c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_ng_data = {
12318c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_default_ng_items,
12328c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_items),
12338c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
12348c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX,
12358c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
12368c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
12378c03f64dSVadim Pasternak };
12388c03f64dSVadim Pasternak 
12398c03f64dSVadim Pasternak /* Platform hotplug extended system family data */
12408c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_ext_psu_items_data[] = {
12418c03f64dSVadim Pasternak 	{
12428c03f64dSVadim Pasternak 		.label = "psu1",
12438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
12448c03f64dSVadim Pasternak 		.mask = BIT(0),
12458c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
12468c03f64dSVadim Pasternak 	},
12478c03f64dSVadim Pasternak 	{
12488c03f64dSVadim Pasternak 		.label = "psu2",
12498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
12508c03f64dSVadim Pasternak 		.mask = BIT(1),
12518c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
12528c03f64dSVadim Pasternak 	},
12538c03f64dSVadim Pasternak 	{
12548c03f64dSVadim Pasternak 		.label = "psu3",
12558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
12568c03f64dSVadim Pasternak 		.mask = BIT(2),
12578c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
12588c03f64dSVadim Pasternak 	},
12598c03f64dSVadim Pasternak 	{
12608c03f64dSVadim Pasternak 		.label = "psu4",
12618c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
12628c03f64dSVadim Pasternak 		.mask = BIT(3),
12638c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
12648c03f64dSVadim Pasternak 	},
12658c03f64dSVadim Pasternak };
12668c03f64dSVadim Pasternak 
12678c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_ext_pwr_items_data[] = {
12688c03f64dSVadim Pasternak 	{
12698c03f64dSVadim Pasternak 		.label = "pwr1",
12708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
12718c03f64dSVadim Pasternak 		.mask = BIT(0),
12728c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0],
12738c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
12748c03f64dSVadim Pasternak 	},
12758c03f64dSVadim Pasternak 	{
12768c03f64dSVadim Pasternak 		.label = "pwr2",
12778c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
12788c03f64dSVadim Pasternak 		.mask = BIT(1),
12798c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1],
12808c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
12818c03f64dSVadim Pasternak 	},
12828c03f64dSVadim Pasternak 	{
12838c03f64dSVadim Pasternak 		.label = "pwr3",
12848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
12858c03f64dSVadim Pasternak 		.mask = BIT(2),
12868c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[0],
12878c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
12888c03f64dSVadim Pasternak 	},
12898c03f64dSVadim Pasternak 	{
12908c03f64dSVadim Pasternak 		.label = "pwr4",
12918c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
12928c03f64dSVadim Pasternak 		.mask = BIT(3),
12938c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[1],
12948c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
12958c03f64dSVadim Pasternak 	},
12968c03f64dSVadim Pasternak };
12978c03f64dSVadim Pasternak 
12988c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_ext_items[] = {
12998c03f64dSVadim Pasternak 	{
13008c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_ext_psu_items_data,
13018c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
13038c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_EXT_MASK,
13048c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
13058c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data),
13068c03f64dSVadim Pasternak 		.inversed = 1,
13078c03f64dSVadim Pasternak 		.health = false,
13088c03f64dSVadim Pasternak 	},
13098c03f64dSVadim Pasternak 	{
13108c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_ext_pwr_items_data,
13118c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13128c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
13138c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_EXT_MASK,
13148c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
13158c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data),
13168c03f64dSVadim Pasternak 		.inversed = 0,
13178c03f64dSVadim Pasternak 		.health = false,
13188c03f64dSVadim Pasternak 	},
13198c03f64dSVadim Pasternak 	{
13208c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
13218c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13228c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
13238c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
13248c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
13258c03f64dSVadim Pasternak 		.inversed = 1,
13268c03f64dSVadim Pasternak 		.health = false,
13278c03f64dSVadim Pasternak 	},
13288c03f64dSVadim Pasternak 	{
13298c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
13308c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13318c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
13328c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
13338c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
13348c03f64dSVadim Pasternak 		.inversed = 0,
13358c03f64dSVadim Pasternak 		.health = true,
13368c03f64dSVadim Pasternak 	},
13378c03f64dSVadim Pasternak 	{
13388c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic2_items_data,
13398c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13408c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET,
13418c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
13428c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic2_items_data),
13438c03f64dSVadim Pasternak 		.inversed = 0,
13448c03f64dSVadim Pasternak 		.health = true,
13458c03f64dSVadim Pasternak 	}
13468c03f64dSVadim Pasternak };
13478c03f64dSVadim Pasternak 
13488c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_ng800_items[] = {
13498c03f64dSVadim Pasternak 	{
13508c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_psu_items_data,
13518c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13528c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
13538c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_EXT_MASK,
13548c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
13558c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data),
13568c03f64dSVadim Pasternak 		.inversed = 1,
13578c03f64dSVadim Pasternak 		.health = false,
13588c03f64dSVadim Pasternak 	},
13598c03f64dSVadim Pasternak 	{
13608c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_pwr_ng800_items_data,
13618c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13628c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
13638c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_EXT_MASK,
13648c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
13658c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_ng800_items_data),
13668c03f64dSVadim Pasternak 		.inversed = 0,
13678c03f64dSVadim Pasternak 		.health = false,
13688c03f64dSVadim Pasternak 	},
13698c03f64dSVadim Pasternak 	{
13708c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
13718c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
13738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
13748c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
13758c03f64dSVadim Pasternak 		.inversed = 1,
13768c03f64dSVadim Pasternak 		.health = false,
13778c03f64dSVadim Pasternak 	},
13788c03f64dSVadim Pasternak 	{
13798c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_asic_items_data,
13808c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
13818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
13828c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
13838c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data),
13848c03f64dSVadim Pasternak 		.inversed = 0,
13858c03f64dSVadim Pasternak 		.health = true,
13868c03f64dSVadim Pasternak 	},
13878c03f64dSVadim Pasternak };
13888c03f64dSVadim Pasternak 
13898c03f64dSVadim Pasternak static
13908c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ext_data = {
13918c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_ext_items,
13928c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_ext_items),
13938c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
13948c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX,
13958c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
13968c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2,
13978c03f64dSVadim Pasternak };
13988c03f64dSVadim Pasternak 
13998c03f64dSVadim Pasternak static
14008c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ng800_data = {
14018c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_ng800_items,
14028c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_ng800_items),
14038c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
14048c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX,
14058c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
14068c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2,
14078c03f64dSVadim Pasternak };
14088c03f64dSVadim Pasternak 
14098c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_pwr_items_data[] = {
14108c03f64dSVadim Pasternak 	{
14118c03f64dSVadim Pasternak 		.label = "pwr1",
14128c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
14138c03f64dSVadim Pasternak 		.mask = BIT(0),
14148c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0],
14158c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
14168c03f64dSVadim Pasternak 	},
14178c03f64dSVadim Pasternak 	{
14188c03f64dSVadim Pasternak 		.label = "pwr2",
14198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
14208c03f64dSVadim Pasternak 		.mask = BIT(1),
14218c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1],
14228c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
14238c03f64dSVadim Pasternak 	},
14248c03f64dSVadim Pasternak 	{
14258c03f64dSVadim Pasternak 		.label = "pwr3",
14268c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
14278c03f64dSVadim Pasternak 		.mask = BIT(2),
14288c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[0],
14298c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
14308c03f64dSVadim Pasternak 	},
14318c03f64dSVadim Pasternak 	{
14328c03f64dSVadim Pasternak 		.label = "pwr4",
14338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
14348c03f64dSVadim Pasternak 		.mask = BIT(3),
14358c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[1],
14368c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
14378c03f64dSVadim Pasternak 	},
14388c03f64dSVadim Pasternak };
14398c03f64dSVadim Pasternak 
14408c03f64dSVadim Pasternak static
14418c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_lc_act = {
14428c03f64dSVadim Pasternak 	.irq = MLXPLAT_CPLD_LPC_SYSIRQ,
14438c03f64dSVadim Pasternak };
14448c03f64dSVadim Pasternak 
14458c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_asic_items_data[] = {
14468c03f64dSVadim Pasternak 	{
14478c03f64dSVadim Pasternak 		.label = "asic1",
14488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
14498c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
14508c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
14518c03f64dSVadim Pasternak 	},
14528c03f64dSVadim Pasternak };
14538c03f64dSVadim Pasternak 
14548c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_lc_i2c_dev[] = {
14558c03f64dSVadim Pasternak 	{
14568c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14578c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14588c03f64dSVadim Pasternak 	},
14598c03f64dSVadim Pasternak 	{
14608c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14618c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14628c03f64dSVadim Pasternak 	},
14638c03f64dSVadim Pasternak 	{
14648c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14658c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14668c03f64dSVadim Pasternak 	},
14678c03f64dSVadim Pasternak 	{
14688c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14698c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14708c03f64dSVadim Pasternak 	},
14718c03f64dSVadim Pasternak 	{
14728c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14738c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14748c03f64dSVadim Pasternak 	},
14758c03f64dSVadim Pasternak 	{
14768c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14778c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14788c03f64dSVadim Pasternak 	},
14798c03f64dSVadim Pasternak 	{
14808c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14818c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14828c03f64dSVadim Pasternak 	},
14838c03f64dSVadim Pasternak 	{
14848c03f64dSVadim Pasternak 		I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR),
14858c03f64dSVadim Pasternak 		.platform_data = &mlxplat_mlxcpld_lc_act,
14868c03f64dSVadim Pasternak 	},
14878c03f64dSVadim Pasternak };
14888c03f64dSVadim Pasternak 
14898c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_modular_lc_notifier[] = {
14908c03f64dSVadim Pasternak 	{
14918c03f64dSVadim Pasternak 		.identity = "lc1",
14928c03f64dSVadim Pasternak 	},
14938c03f64dSVadim Pasternak 	{
14948c03f64dSVadim Pasternak 		.identity = "lc2",
14958c03f64dSVadim Pasternak 	},
14968c03f64dSVadim Pasternak 	{
14978c03f64dSVadim Pasternak 		.identity = "lc3",
14988c03f64dSVadim Pasternak 	},
14998c03f64dSVadim Pasternak 	{
15008c03f64dSVadim Pasternak 		.identity = "lc4",
15018c03f64dSVadim Pasternak 	},
15028c03f64dSVadim Pasternak 	{
15038c03f64dSVadim Pasternak 		.identity = "lc5",
15048c03f64dSVadim Pasternak 	},
15058c03f64dSVadim Pasternak 	{
15068c03f64dSVadim Pasternak 		.identity = "lc6",
15078c03f64dSVadim Pasternak 	},
15088c03f64dSVadim Pasternak 	{
15098c03f64dSVadim Pasternak 		.identity = "lc7",
15108c03f64dSVadim Pasternak 	},
15118c03f64dSVadim Pasternak 	{
15128c03f64dSVadim Pasternak 		.identity = "lc8",
15138c03f64dSVadim Pasternak 	},
15148c03f64dSVadim Pasternak };
15158c03f64dSVadim Pasternak 
15168c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_pr_items_data[] = {
15178c03f64dSVadim Pasternak 	{
15188c03f64dSVadim Pasternak 		.label = "lc1_present",
15198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15208c03f64dSVadim Pasternak 		.mask = BIT(0),
15218c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
15228c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
15238c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15248c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
15258c03f64dSVadim Pasternak 		.slot = 1,
15268c03f64dSVadim Pasternak 	},
15278c03f64dSVadim Pasternak 	{
15288c03f64dSVadim Pasternak 		.label = "lc2_present",
15298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15308c03f64dSVadim Pasternak 		.mask = BIT(1),
15318c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
15328c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
15338c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15348c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
15358c03f64dSVadim Pasternak 		.slot = 2,
15368c03f64dSVadim Pasternak 	},
15378c03f64dSVadim Pasternak 	{
15388c03f64dSVadim Pasternak 		.label = "lc3_present",
15398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15408c03f64dSVadim Pasternak 		.mask = BIT(2),
15418c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
15428c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
15438c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15448c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
15458c03f64dSVadim Pasternak 		.slot = 3,
15468c03f64dSVadim Pasternak 	},
15478c03f64dSVadim Pasternak 	{
15488c03f64dSVadim Pasternak 		.label = "lc4_present",
15498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15508c03f64dSVadim Pasternak 		.mask = BIT(3),
15518c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
15528c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
15538c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15548c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
15558c03f64dSVadim Pasternak 		.slot = 4,
15568c03f64dSVadim Pasternak 	},
15578c03f64dSVadim Pasternak 	{
15588c03f64dSVadim Pasternak 		.label = "lc5_present",
15598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15608c03f64dSVadim Pasternak 		.mask = BIT(4),
15618c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
15628c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
15638c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15648c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
15658c03f64dSVadim Pasternak 		.slot = 5,
15668c03f64dSVadim Pasternak 	},
15678c03f64dSVadim Pasternak 	{
15688c03f64dSVadim Pasternak 		.label = "lc6_present",
15698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15708c03f64dSVadim Pasternak 		.mask = BIT(5),
15718c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
15728c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
15738c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15748c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
15758c03f64dSVadim Pasternak 		.slot = 6,
15768c03f64dSVadim Pasternak 	},
15778c03f64dSVadim Pasternak 	{
15788c03f64dSVadim Pasternak 		.label = "lc7_present",
15798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15808c03f64dSVadim Pasternak 		.mask = BIT(6),
15818c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
15828c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
15838c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15848c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
15858c03f64dSVadim Pasternak 		.slot = 7,
15868c03f64dSVadim Pasternak 	},
15878c03f64dSVadim Pasternak 	{
15888c03f64dSVadim Pasternak 		.label = "lc8_present",
15898c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
15908c03f64dSVadim Pasternak 		.mask = BIT(7),
15918c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
15928c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
15938c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
15948c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
15958c03f64dSVadim Pasternak 		.slot = 8,
15968c03f64dSVadim Pasternak 	},
15978c03f64dSVadim Pasternak };
15988c03f64dSVadim Pasternak 
15998c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_ver_items_data[] = {
16008c03f64dSVadim Pasternak 	{
16018c03f64dSVadim Pasternak 		.label = "lc1_verified",
16028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16038c03f64dSVadim Pasternak 		.mask = BIT(0),
16048c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16058c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16068c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16078c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16088c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
16098c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
16108c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16118c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
16128c03f64dSVadim Pasternak 		.slot = 1,
16138c03f64dSVadim Pasternak 	},
16148c03f64dSVadim Pasternak 	{
16158c03f64dSVadim Pasternak 		.label = "lc2_verified",
16168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16178c03f64dSVadim Pasternak 		.mask = BIT(1),
16188c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16198c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16208c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16218c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16228c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
16238c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
16248c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16258c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
16268c03f64dSVadim Pasternak 		.slot = 2,
16278c03f64dSVadim Pasternak 	},
16288c03f64dSVadim Pasternak 	{
16298c03f64dSVadim Pasternak 		.label = "lc3_verified",
16308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16318c03f64dSVadim Pasternak 		.mask = BIT(2),
16328c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16338c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16348c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16358c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16368c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
16378c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
16388c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16398c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
16408c03f64dSVadim Pasternak 		.slot = 3,
16418c03f64dSVadim Pasternak 	},
16428c03f64dSVadim Pasternak 	{
16438c03f64dSVadim Pasternak 		.label = "lc4_verified",
16448c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16458c03f64dSVadim Pasternak 		.mask = BIT(3),
16468c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16478c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16488c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16498c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16508c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
16518c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
16528c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16538c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
16548c03f64dSVadim Pasternak 		.slot = 4,
16558c03f64dSVadim Pasternak 	},
16568c03f64dSVadim Pasternak 	{
16578c03f64dSVadim Pasternak 		.label = "lc5_verified",
16588c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16598c03f64dSVadim Pasternak 		.mask = BIT(4),
16608c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16618c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16628c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16638c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16648c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
16658c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
16668c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16678c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
16688c03f64dSVadim Pasternak 		.slot = 5,
16698c03f64dSVadim Pasternak 	},
16708c03f64dSVadim Pasternak 	{
16718c03f64dSVadim Pasternak 		.label = "lc6_verified",
16728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16738c03f64dSVadim Pasternak 		.mask = BIT(5),
16748c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16758c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16768c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16778c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16788c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
16798c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
16808c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16818c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
16828c03f64dSVadim Pasternak 		.slot = 6,
16838c03f64dSVadim Pasternak 	},
16848c03f64dSVadim Pasternak 	{
16858c03f64dSVadim Pasternak 		.label = "lc7_verified",
16868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
16878c03f64dSVadim Pasternak 		.mask = BIT(6),
16888c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
16898c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
16908c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
16918c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
16928c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
16938c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
16948c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
16958c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
16968c03f64dSVadim Pasternak 		.slot = 7,
16978c03f64dSVadim Pasternak 	},
16988c03f64dSVadim Pasternak 	{
16998c03f64dSVadim Pasternak 		.label = "lc8_verified",
17008c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
17018c03f64dSVadim Pasternak 		.mask = BIT(7),
17028c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17038c03f64dSVadim Pasternak 		.reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
17048c03f64dSVadim Pasternak 		.reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
17058c03f64dSVadim Pasternak 		.reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
17068c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
17078c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
17088c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION,
17098c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
17108c03f64dSVadim Pasternak 		.slot = 8,
17118c03f64dSVadim Pasternak 	},
17128c03f64dSVadim Pasternak };
17138c03f64dSVadim Pasternak 
17148c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_pg_data[] = {
17158c03f64dSVadim Pasternak 	{
17168c03f64dSVadim Pasternak 		.label = "lc1_powered",
17178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17188c03f64dSVadim Pasternak 		.mask = BIT(0),
17198c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
17208c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
17218c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17228c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
17238c03f64dSVadim Pasternak 		.slot = 1,
17248c03f64dSVadim Pasternak 	},
17258c03f64dSVadim Pasternak 	{
17268c03f64dSVadim Pasternak 		.label = "lc2_powered",
17278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17288c03f64dSVadim Pasternak 		.mask = BIT(1),
17298c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
17308c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
17318c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17328c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
17338c03f64dSVadim Pasternak 		.slot = 2,
17348c03f64dSVadim Pasternak 	},
17358c03f64dSVadim Pasternak 	{
17368c03f64dSVadim Pasternak 		.label = "lc3_powered",
17378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17388c03f64dSVadim Pasternak 		.mask = BIT(2),
17398c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
17408c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
17418c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17428c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
17438c03f64dSVadim Pasternak 		.slot = 3,
17448c03f64dSVadim Pasternak 	},
17458c03f64dSVadim Pasternak 	{
17468c03f64dSVadim Pasternak 		.label = "lc4_powered",
17478c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17488c03f64dSVadim Pasternak 		.mask = BIT(3),
17498c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
17508c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
17518c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17528c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
17538c03f64dSVadim Pasternak 		.slot = 4,
17548c03f64dSVadim Pasternak 	},
17558c03f64dSVadim Pasternak 	{
17568c03f64dSVadim Pasternak 		.label = "lc5_powered",
17578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17588c03f64dSVadim Pasternak 		.mask = BIT(4),
17598c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
17608c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
17618c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17628c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
17638c03f64dSVadim Pasternak 		.slot = 5,
17648c03f64dSVadim Pasternak 	},
17658c03f64dSVadim Pasternak 	{
17668c03f64dSVadim Pasternak 		.label = "lc6_powered",
17678c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17688c03f64dSVadim Pasternak 		.mask = BIT(5),
17698c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
17708c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
17718c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17728c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
17738c03f64dSVadim Pasternak 		.slot = 6,
17748c03f64dSVadim Pasternak 	},
17758c03f64dSVadim Pasternak 	{
17768c03f64dSVadim Pasternak 		.label = "lc7_powered",
17778c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17788c03f64dSVadim Pasternak 		.mask = BIT(6),
17798c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
17808c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
17818c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17828c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
17838c03f64dSVadim Pasternak 		.slot = 7,
17848c03f64dSVadim Pasternak 	},
17858c03f64dSVadim Pasternak 	{
17868c03f64dSVadim Pasternak 		.label = "lc8_powered",
17878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
17888c03f64dSVadim Pasternak 		.mask = BIT(7),
17898c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
17908c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
17918c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
17928c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
17938c03f64dSVadim Pasternak 		.slot = 8,
17948c03f64dSVadim Pasternak 	},
17958c03f64dSVadim Pasternak };
17968c03f64dSVadim Pasternak 
17978c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_ready_data[] = {
17988c03f64dSVadim Pasternak 	{
17998c03f64dSVadim Pasternak 		.label = "lc1_ready",
18008c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18018c03f64dSVadim Pasternak 		.mask = BIT(0),
18028c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
18038c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
18048c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18058c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
18068c03f64dSVadim Pasternak 		.slot = 1,
18078c03f64dSVadim Pasternak 	},
18088c03f64dSVadim Pasternak 	{
18098c03f64dSVadim Pasternak 		.label = "lc2_ready",
18108c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18118c03f64dSVadim Pasternak 		.mask = BIT(1),
18128c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
18138c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
18148c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18158c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
18168c03f64dSVadim Pasternak 		.slot = 2,
18178c03f64dSVadim Pasternak 	},
18188c03f64dSVadim Pasternak 	{
18198c03f64dSVadim Pasternak 		.label = "lc3_ready",
18208c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18218c03f64dSVadim Pasternak 		.mask = BIT(2),
18228c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
18238c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
18248c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18258c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
18268c03f64dSVadim Pasternak 		.slot = 3,
18278c03f64dSVadim Pasternak 	},
18288c03f64dSVadim Pasternak 	{
18298c03f64dSVadim Pasternak 		.label = "lc4_ready",
18308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18318c03f64dSVadim Pasternak 		.mask = BIT(3),
18328c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
18338c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
18348c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18358c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
18368c03f64dSVadim Pasternak 		.slot = 4,
18378c03f64dSVadim Pasternak 	},
18388c03f64dSVadim Pasternak 	{
18398c03f64dSVadim Pasternak 		.label = "lc5_ready",
18408c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18418c03f64dSVadim Pasternak 		.mask = BIT(4),
18428c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
18438c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
18448c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18458c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
18468c03f64dSVadim Pasternak 		.slot = 5,
18478c03f64dSVadim Pasternak 	},
18488c03f64dSVadim Pasternak 	{
18498c03f64dSVadim Pasternak 		.label = "lc6_ready",
18508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18518c03f64dSVadim Pasternak 		.mask = BIT(5),
18528c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
18538c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
18548c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18558c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
18568c03f64dSVadim Pasternak 		.slot = 6,
18578c03f64dSVadim Pasternak 	},
18588c03f64dSVadim Pasternak 	{
18598c03f64dSVadim Pasternak 		.label = "lc7_ready",
18608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18618c03f64dSVadim Pasternak 		.mask = BIT(6),
18628c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
18638c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
18648c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18658c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
18668c03f64dSVadim Pasternak 		.slot = 7,
18678c03f64dSVadim Pasternak 	},
18688c03f64dSVadim Pasternak 	{
18698c03f64dSVadim Pasternak 		.label = "lc8_ready",
18708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
18718c03f64dSVadim Pasternak 		.mask = BIT(7),
18728c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
18738c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
18748c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18758c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
18768c03f64dSVadim Pasternak 		.slot = 8,
18778c03f64dSVadim Pasternak 	},
18788c03f64dSVadim Pasternak };
18798c03f64dSVadim Pasternak 
18808c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_synced_data[] = {
18818c03f64dSVadim Pasternak 	{
18828c03f64dSVadim Pasternak 		.label = "lc1_synced",
18838c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
18848c03f64dSVadim Pasternak 		.mask = BIT(0),
18858c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
18868c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
18878c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18888c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
18898c03f64dSVadim Pasternak 		.slot = 1,
18908c03f64dSVadim Pasternak 	},
18918c03f64dSVadim Pasternak 	{
18928c03f64dSVadim Pasternak 		.label = "lc2_synced",
18938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
18948c03f64dSVadim Pasternak 		.mask = BIT(1),
18958c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
18968c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
18978c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
18988c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
18998c03f64dSVadim Pasternak 		.slot = 2,
19008c03f64dSVadim Pasternak 	},
19018c03f64dSVadim Pasternak 	{
19028c03f64dSVadim Pasternak 		.label = "lc3_synced",
19038c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19048c03f64dSVadim Pasternak 		.mask = BIT(2),
19058c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
19068c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
19078c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19088c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
19098c03f64dSVadim Pasternak 		.slot = 3,
19108c03f64dSVadim Pasternak 	},
19118c03f64dSVadim Pasternak 	{
19128c03f64dSVadim Pasternak 		.label = "lc4_synced",
19138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19148c03f64dSVadim Pasternak 		.mask = BIT(3),
19158c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
19168c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
19178c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19188c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
19198c03f64dSVadim Pasternak 		.slot = 4,
19208c03f64dSVadim Pasternak 	},
19218c03f64dSVadim Pasternak 	{
19228c03f64dSVadim Pasternak 		.label = "lc5_synced",
19238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19248c03f64dSVadim Pasternak 		.mask = BIT(4),
19258c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
19268c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
19278c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19288c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
19298c03f64dSVadim Pasternak 		.slot = 5,
19308c03f64dSVadim Pasternak 	},
19318c03f64dSVadim Pasternak 	{
19328c03f64dSVadim Pasternak 		.label = "lc6_synced",
19338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19348c03f64dSVadim Pasternak 		.mask = BIT(5),
19358c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
19368c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
19378c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19388c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
19398c03f64dSVadim Pasternak 		.slot = 6,
19408c03f64dSVadim Pasternak 	},
19418c03f64dSVadim Pasternak 	{
19428c03f64dSVadim Pasternak 		.label = "lc7_synced",
19438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19448c03f64dSVadim Pasternak 		.mask = BIT(6),
19458c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
19468c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
19478c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19488c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
19498c03f64dSVadim Pasternak 		.slot = 7,
19508c03f64dSVadim Pasternak 	},
19518c03f64dSVadim Pasternak 	{
19528c03f64dSVadim Pasternak 		.label = "lc8_synced",
19538c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
19548c03f64dSVadim Pasternak 		.mask = BIT(7),
19558c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
19568c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
19578c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19588c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
19598c03f64dSVadim Pasternak 		.slot = 8,
19608c03f64dSVadim Pasternak 	},
19618c03f64dSVadim Pasternak };
19628c03f64dSVadim Pasternak 
19638c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_act_data[] = {
19648c03f64dSVadim Pasternak 	{
19658c03f64dSVadim Pasternak 		.label = "lc1_active",
19668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
19678c03f64dSVadim Pasternak 		.mask = BIT(0),
19688c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
19698c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
19708c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19718c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
19728c03f64dSVadim Pasternak 		.slot = 1,
19738c03f64dSVadim Pasternak 	},
19748c03f64dSVadim Pasternak 	{
19758c03f64dSVadim Pasternak 		.label = "lc2_active",
19768c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
19778c03f64dSVadim Pasternak 		.mask = BIT(1),
19788c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
19798c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
19808c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19818c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
19828c03f64dSVadim Pasternak 		.slot = 2,
19838c03f64dSVadim Pasternak 	},
19848c03f64dSVadim Pasternak 	{
19858c03f64dSVadim Pasternak 		.label = "lc3_active",
19868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
19878c03f64dSVadim Pasternak 		.mask = BIT(2),
19888c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
19898c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
19908c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
19918c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
19928c03f64dSVadim Pasternak 		.slot = 3,
19938c03f64dSVadim Pasternak 	},
19948c03f64dSVadim Pasternak 	{
19958c03f64dSVadim Pasternak 		.label = "lc4_active",
19968c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
19978c03f64dSVadim Pasternak 		.mask = BIT(3),
19988c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
19998c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
20008c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20018c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
20028c03f64dSVadim Pasternak 		.slot = 4,
20038c03f64dSVadim Pasternak 	},
20048c03f64dSVadim Pasternak 	{
20058c03f64dSVadim Pasternak 		.label = "lc5_active",
20068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
20078c03f64dSVadim Pasternak 		.mask = BIT(4),
20088c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
20098c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
20108c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20118c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
20128c03f64dSVadim Pasternak 		.slot = 5,
20138c03f64dSVadim Pasternak 	},
20148c03f64dSVadim Pasternak 	{
20158c03f64dSVadim Pasternak 		.label = "lc6_active",
20168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
20178c03f64dSVadim Pasternak 		.mask = BIT(5),
20188c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
20198c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
20208c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20218c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
20228c03f64dSVadim Pasternak 		.slot = 6,
20238c03f64dSVadim Pasternak 	},
20248c03f64dSVadim Pasternak 	{
20258c03f64dSVadim Pasternak 		.label = "lc7_active",
20268c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
20278c03f64dSVadim Pasternak 		.mask = BIT(6),
20288c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
20298c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
20308c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20318c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
20328c03f64dSVadim Pasternak 		.slot = 7,
20338c03f64dSVadim Pasternak 	},
20348c03f64dSVadim Pasternak 	{
20358c03f64dSVadim Pasternak 		.label = "lc8_active",
20368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
20378c03f64dSVadim Pasternak 		.mask = BIT(7),
20388c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
20398c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
20408c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20418c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
20428c03f64dSVadim Pasternak 		.slot = 8,
20438c03f64dSVadim Pasternak 	},
20448c03f64dSVadim Pasternak };
20458c03f64dSVadim Pasternak 
20468c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_sd_data[] = {
20478c03f64dSVadim Pasternak 	{
20488c03f64dSVadim Pasternak 		.label = "lc1_shutdown",
20498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
20508c03f64dSVadim Pasternak 		.mask = BIT(0),
20518c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0],
20528c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0),
20538c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20548c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0],
20558c03f64dSVadim Pasternak 		.slot = 1,
20568c03f64dSVadim Pasternak 	},
20578c03f64dSVadim Pasternak 	{
20588c03f64dSVadim Pasternak 		.label = "lc2_shutdown",
20598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
20608c03f64dSVadim Pasternak 		.mask = BIT(1),
20618c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1],
20628c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1),
20638c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20648c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1],
20658c03f64dSVadim Pasternak 		.slot = 2,
20668c03f64dSVadim Pasternak 	},
20678c03f64dSVadim Pasternak 	{
20688c03f64dSVadim Pasternak 		.label = "lc3_shutdown",
20698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
20708c03f64dSVadim Pasternak 		.mask = BIT(2),
20718c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2],
20728c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2),
20738c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20748c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2],
20758c03f64dSVadim Pasternak 		.slot = 3,
20768c03f64dSVadim Pasternak 	},
20778c03f64dSVadim Pasternak 	{
20788c03f64dSVadim Pasternak 		.label = "lc4_shutdown",
20798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
20808c03f64dSVadim Pasternak 		.mask = BIT(3),
20818c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3],
20828c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3),
20838c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20848c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3],
20858c03f64dSVadim Pasternak 		.slot = 4,
20868c03f64dSVadim Pasternak 	},
20878c03f64dSVadim Pasternak 	{
20888c03f64dSVadim Pasternak 		.label = "lc5_shutdown",
20898c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
20908c03f64dSVadim Pasternak 		.mask = BIT(4),
20918c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4],
20928c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4),
20938c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
20948c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4],
20958c03f64dSVadim Pasternak 		.slot = 5,
20968c03f64dSVadim Pasternak 	},
20978c03f64dSVadim Pasternak 	{
20988c03f64dSVadim Pasternak 		.label = "lc6_shutdown",
20998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
21008c03f64dSVadim Pasternak 		.mask = BIT(5),
21018c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5],
21028c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5),
21038c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
21048c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5],
21058c03f64dSVadim Pasternak 		.slot = 6,
21068c03f64dSVadim Pasternak 	},
21078c03f64dSVadim Pasternak 	{
21088c03f64dSVadim Pasternak 		.label = "lc7_shutdown",
21098c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
21108c03f64dSVadim Pasternak 		.mask = BIT(6),
21118c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6],
21128c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6),
21138c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
21148c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6],
21158c03f64dSVadim Pasternak 		.slot = 7,
21168c03f64dSVadim Pasternak 	},
21178c03f64dSVadim Pasternak 	{
21188c03f64dSVadim Pasternak 		.label = "lc8_shutdown",
21198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
21208c03f64dSVadim Pasternak 		.mask = BIT(7),
21218c03f64dSVadim Pasternak 		.hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7],
21228c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7),
21238c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
21248c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7],
21258c03f64dSVadim Pasternak 		.slot = 8,
21268c03f64dSVadim Pasternak 	},
21278c03f64dSVadim Pasternak };
21288c03f64dSVadim Pasternak 
21298c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_modular_items[] = {
21308c03f64dSVadim Pasternak 	{
21318c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_ext_psu_items_data,
21328c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
21338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
21348c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_EXT_MASK,
21358c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
21368c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data),
21378c03f64dSVadim Pasternak 		.inversed = 1,
21388c03f64dSVadim Pasternak 		.health = false,
21398c03f64dSVadim Pasternak 	},
21408c03f64dSVadim Pasternak 	{
21418c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_pwr_items_data,
21428c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
21438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
21448c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_EXT_MASK,
21458c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
21468c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data),
21478c03f64dSVadim Pasternak 		.inversed = 0,
21488c03f64dSVadim Pasternak 		.health = false,
21498c03f64dSVadim Pasternak 	},
21508c03f64dSVadim Pasternak 	{
21518c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
21528c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
21538c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
21548c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
21558c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
21568c03f64dSVadim Pasternak 		.inversed = 1,
21578c03f64dSVadim Pasternak 		.health = false,
21588c03f64dSVadim Pasternak 	},
21598c03f64dSVadim Pasternak 	{
21608c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_asic_items_data,
21618c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
21628c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
21638c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
21648c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_asic_items_data),
21658c03f64dSVadim Pasternak 		.inversed = 0,
21668c03f64dSVadim Pasternak 		.health = true,
21678c03f64dSVadim Pasternak 	},
21688c03f64dSVadim Pasternak 	{
21698c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_pr_items_data,
21708c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_PRESENT,
21718c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
21728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET,
21738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
21748c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_pr_items_data),
21758c03f64dSVadim Pasternak 		.inversed = 1,
21768c03f64dSVadim Pasternak 		.health = false,
21778c03f64dSVadim Pasternak 	},
21788c03f64dSVadim Pasternak 	{
21798c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_ver_items_data,
21808c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_VERIFIED,
21818c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
21828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET,
21838c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
21848c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_ver_items_data),
21858c03f64dSVadim Pasternak 		.inversed = 0,
21868c03f64dSVadim Pasternak 		.health = false,
21878c03f64dSVadim Pasternak 	},
21888c03f64dSVadim Pasternak 	{
21898c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_pg_data,
21908c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_POWERED,
21918c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
21928c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET,
21938c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
21948c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_pg_data),
21958c03f64dSVadim Pasternak 		.inversed = 0,
21968c03f64dSVadim Pasternak 		.health = false,
21978c03f64dSVadim Pasternak 	},
21988c03f64dSVadim Pasternak 	{
21998c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_ready_data,
22008c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_READY,
22018c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
22028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET,
22038c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
22048c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_ready_data),
22058c03f64dSVadim Pasternak 		.inversed = 0,
22068c03f64dSVadim Pasternak 		.health = false,
22078c03f64dSVadim Pasternak 	},
22088c03f64dSVadim Pasternak 	{
22098c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_synced_data,
22108c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_SYNCED,
22118c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
22128c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET,
22138c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
22148c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_synced_data),
22158c03f64dSVadim Pasternak 		.inversed = 0,
22168c03f64dSVadim Pasternak 		.health = false,
22178c03f64dSVadim Pasternak 	},
22188c03f64dSVadim Pasternak 	{
22198c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_act_data,
22208c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_ACTIVE,
22218c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
22228c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET,
22238c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
22248c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_act_data),
22258c03f64dSVadim Pasternak 		.inversed = 0,
22268c03f64dSVadim Pasternak 		.health = false,
22278c03f64dSVadim Pasternak 	},
22288c03f64dSVadim Pasternak 	{
22298c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_lc_sd_data,
22308c03f64dSVadim Pasternak 		.kind = MLXREG_HOTPLUG_LC_THERMAL,
22318c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC,
22328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET,
22338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LPC_LC_MASK,
22348c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_sd_data),
22358c03f64dSVadim Pasternak 		.inversed = 0,
22368c03f64dSVadim Pasternak 		.health = false,
22378c03f64dSVadim Pasternak 	},
22388c03f64dSVadim Pasternak };
22398c03f64dSVadim Pasternak 
22408c03f64dSVadim Pasternak static
22418c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_modular_data = {
22428c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_modular_items,
22438c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_items),
22448c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
22458c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_MODULAR,
22468c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
22478c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
22488c03f64dSVadim Pasternak };
22498c03f64dSVadim Pasternak 
22508c03f64dSVadim Pasternak /* Platform hotplug for NVLink blade systems family data */
22518c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_global_wp_items_data[] = {
22528c03f64dSVadim Pasternak 	{
22538c03f64dSVadim Pasternak 		.label = "global_wp_grant",
22548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET,
22558c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_GWP_MASK,
22568c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
22578c03f64dSVadim Pasternak 	},
22588c03f64dSVadim Pasternak };
22598c03f64dSVadim Pasternak 
22608c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_chassis_blade_items[] = {
22618c03f64dSVadim Pasternak 	{
22628c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_global_wp_items_data,
22638c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
22648c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET,
22658c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_GWP_MASK,
22668c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_global_wp_items_data),
22678c03f64dSVadim Pasternak 		.inversed = 0,
22688c03f64dSVadim Pasternak 		.health = false,
22698c03f64dSVadim Pasternak 	},
22708c03f64dSVadim Pasternak };
22718c03f64dSVadim Pasternak 
22728c03f64dSVadim Pasternak static
22738c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_chassis_blade_data = {
22748c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_chassis_blade_items,
22758c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_chassis_blade_items),
22768c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
22778c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_COMEX,
22788c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
22798c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
22808c03f64dSVadim Pasternak };
22818c03f64dSVadim Pasternak 
22828c03f64dSVadim Pasternak /* Platform hotplug for switch systems family data */
22838c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_erot_ap_items_data[] = {
22848c03f64dSVadim Pasternak 	{
22858c03f64dSVadim Pasternak 		.label = "erot1_ap",
22868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET,
22878c03f64dSVadim Pasternak 		.mask = BIT(0),
22888c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
22898c03f64dSVadim Pasternak 	},
22908c03f64dSVadim Pasternak 	{
22918c03f64dSVadim Pasternak 		.label = "erot2_ap",
22928c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET,
22938c03f64dSVadim Pasternak 		.mask = BIT(1),
22948c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
22958c03f64dSVadim Pasternak 	},
22968c03f64dSVadim Pasternak };
22978c03f64dSVadim Pasternak 
22988c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_erot_error_items_data[] = {
22998c03f64dSVadim Pasternak 	{
23008c03f64dSVadim Pasternak 		.label = "erot1_error",
23018c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET,
23028c03f64dSVadim Pasternak 		.mask = BIT(0),
23038c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
23048c03f64dSVadim Pasternak 	},
23058c03f64dSVadim Pasternak 	{
23068c03f64dSVadim Pasternak 		.label = "erot2_error",
23078c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET,
23088c03f64dSVadim Pasternak 		.mask = BIT(1),
23098c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
23108c03f64dSVadim Pasternak 	},
23118c03f64dSVadim Pasternak };
23128c03f64dSVadim Pasternak 
23138c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_rack_switch_items[] = {
23148c03f64dSVadim Pasternak 	{
23158c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_ext_psu_items_data,
23168c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
23178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
23188c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PSU_EXT_MASK,
23198c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
23208c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data),
23218c03f64dSVadim Pasternak 		.inversed = 1,
23228c03f64dSVadim Pasternak 		.health = false,
23238c03f64dSVadim Pasternak 	},
23248c03f64dSVadim Pasternak 	{
23258c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_ext_pwr_items_data,
23268c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
23278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET,
23288c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_EXT_MASK,
23298c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
23308c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data),
23318c03f64dSVadim Pasternak 		.inversed = 0,
23328c03f64dSVadim Pasternak 		.health = false,
23338c03f64dSVadim Pasternak 	},
23348c03f64dSVadim Pasternak 	{
23358c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
23368c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
23378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
23388c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
23398c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
23408c03f64dSVadim Pasternak 		.inversed = 1,
23418c03f64dSVadim Pasternak 		.health = false,
23428c03f64dSVadim Pasternak 	},
23438c03f64dSVadim Pasternak 	{
23448c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_erot_ap_items_data,
23458c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
23468c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET,
23478c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_EROT_MASK,
23488c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data),
23498c03f64dSVadim Pasternak 		.inversed = 1,
23508c03f64dSVadim Pasternak 		.health = false,
23518c03f64dSVadim Pasternak 	},
23528c03f64dSVadim Pasternak 	{
23538c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_erot_error_items_data,
23548c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
23558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET,
23568c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_EROT_MASK,
23578c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data),
23588c03f64dSVadim Pasternak 		.inversed = 1,
23598c03f64dSVadim Pasternak 		.health = false,
23608c03f64dSVadim Pasternak 	},
23618c03f64dSVadim Pasternak };
23628c03f64dSVadim Pasternak 
23638c03f64dSVadim Pasternak static
23648c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = {
23658c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_rack_switch_items,
23668c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_rack_switch_items),
23678c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
23688c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX,
23698c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
23708c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW,
23718c03f64dSVadim Pasternak };
23728c03f64dSVadim Pasternak 
23738c03f64dSVadim Pasternak /* Callback performs graceful shutdown after notification about power button event */
23748c03f64dSVadim Pasternak static int
23758c03f64dSVadim Pasternak mlxplat_mlxcpld_l1_switch_pwr_events_handler(void *handle, enum mlxreg_hotplug_kind kind,
23768c03f64dSVadim Pasternak 					     u8 action)
23778c03f64dSVadim Pasternak {
23788c03f64dSVadim Pasternak 	if (action) {
23798c03f64dSVadim Pasternak 		dev_info(&mlxplat_dev->dev, "System shutdown due to short press of power button");
23808c03f64dSVadim Pasternak 		kernel_power_off();
23818c03f64dSVadim Pasternak 	}
23828c03f64dSVadim Pasternak 
23838c03f64dSVadim Pasternak 	return 0;
23848c03f64dSVadim Pasternak }
23858c03f64dSVadim Pasternak 
23868c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_pwr_events_notifier = {
23878c03f64dSVadim Pasternak 	.user_handler = mlxplat_mlxcpld_l1_switch_pwr_events_handler,
23888c03f64dSVadim Pasternak };
23898c03f64dSVadim Pasternak 
23908c03f64dSVadim Pasternak /* Platform hotplug for l1 switch systems family data */
23918c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_pwr_events_items_data[] = {
23928c03f64dSVadim Pasternak 	{
23938c03f64dSVadim Pasternak 		.label = "power_button",
23948c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET,
23958c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_BUTTON_MASK,
23968c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
23978c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
23988c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_l1_switch_pwr_events_notifier,
23998c03f64dSVadim Pasternak 	},
24008c03f64dSVadim Pasternak };
24018c03f64dSVadim Pasternak 
24028c03f64dSVadim Pasternak /* Callback activates latch reset flow after notification about intrusion event */
24038c03f64dSVadim Pasternak static int
24048c03f64dSVadim Pasternak mlxplat_mlxcpld_l1_switch_intrusion_events_handler(void *handle, enum mlxreg_hotplug_kind kind,
24058c03f64dSVadim Pasternak 						   u8 action)
24068c03f64dSVadim Pasternak {
24078c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev);
24088c03f64dSVadim Pasternak 	u32 regval;
24098c03f64dSVadim Pasternak 	int err;
24108c03f64dSVadim Pasternak 
24118c03f64dSVadim Pasternak 	err = regmap_read(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, &regval);
24128c03f64dSVadim Pasternak 	if (err)
24138c03f64dSVadim Pasternak 		goto fail_regmap_read;
24148c03f64dSVadim Pasternak 
24158c03f64dSVadim Pasternak 	if (action) {
24168c03f64dSVadim Pasternak 		dev_info(&mlxplat_dev->dev, "Detected intrusion - system latch is opened");
24178c03f64dSVadim Pasternak 		err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
24188c03f64dSVadim Pasternak 				   regval | MLXPLAT_CPLD_LATCH_RST_MASK);
24198c03f64dSVadim Pasternak 	} else {
24208c03f64dSVadim Pasternak 		dev_info(&mlxplat_dev->dev, "System latch is properly closed");
24218c03f64dSVadim Pasternak 		err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
24228c03f64dSVadim Pasternak 				   regval & ~MLXPLAT_CPLD_LATCH_RST_MASK);
24238c03f64dSVadim Pasternak 	}
24248c03f64dSVadim Pasternak 
24258c03f64dSVadim Pasternak 	if (err)
24268c03f64dSVadim Pasternak 		goto fail_regmap_write;
24278c03f64dSVadim Pasternak 
24288c03f64dSVadim Pasternak 	return 0;
24298c03f64dSVadim Pasternak 
24308c03f64dSVadim Pasternak fail_regmap_read:
24318c03f64dSVadim Pasternak fail_regmap_write:
24328c03f64dSVadim Pasternak 	dev_err(&mlxplat_dev->dev, "Register access failed");
24338c03f64dSVadim Pasternak 	return err;
24348c03f64dSVadim Pasternak }
24358c03f64dSVadim Pasternak 
24368c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_intrusion_events_notifier = {
24378c03f64dSVadim Pasternak 	.user_handler = mlxplat_mlxcpld_l1_switch_intrusion_events_handler,
24388c03f64dSVadim Pasternak };
24398c03f64dSVadim Pasternak 
24408c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_health_events_items_data[] = {
24418c03f64dSVadim Pasternak 	{
24428c03f64dSVadim Pasternak 		.label = "thermal1_pdb",
24438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET,
24448c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_THERMAL1_PDB_MASK,
24458c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
24468c03f64dSVadim Pasternak 	},
24478c03f64dSVadim Pasternak 	{
24488c03f64dSVadim Pasternak 		.label = "thermal2_pdb",
24498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET,
24508c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_THERMAL2_PDB_MASK,
24518c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
24528c03f64dSVadim Pasternak 	},
24538c03f64dSVadim Pasternak 	{
24548c03f64dSVadim Pasternak 		.label = "intrusion",
24558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET,
24568c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_INTRUSION_MASK,
24578c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
24588c03f64dSVadim Pasternak 		.hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION,
24598c03f64dSVadim Pasternak 		.hpdev.notifier = &mlxplat_mlxcpld_l1_switch_intrusion_events_notifier,
24608c03f64dSVadim Pasternak 	},
24618c03f64dSVadim Pasternak 	{
24628c03f64dSVadim Pasternak 		.label = "pwm_pg",
24638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET,
24648c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWM_PG_MASK,
24658c03f64dSVadim Pasternak 		.hpdev.nr = MLXPLAT_CPLD_NR_NONE,
24668c03f64dSVadim Pasternak 	},
24678c03f64dSVadim Pasternak };
24688c03f64dSVadim Pasternak 
24698c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_l1_switch_events_items[] = {
24708c03f64dSVadim Pasternak 	{
24718c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_fan_items_data,
24728c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
24738c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
24748c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FAN_NG_MASK,
24758c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data),
24768c03f64dSVadim Pasternak 		.inversed = 1,
24778c03f64dSVadim Pasternak 		.health = false,
24788c03f64dSVadim Pasternak 	},
24798c03f64dSVadim Pasternak 	{
24808c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_erot_ap_items_data,
24818c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
24828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET,
24838c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_EROT_MASK,
24848c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data),
24858c03f64dSVadim Pasternak 		.inversed = 1,
24868c03f64dSVadim Pasternak 		.health = false,
24878c03f64dSVadim Pasternak 	},
24888c03f64dSVadim Pasternak 	{
24898c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_erot_error_items_data,
24908c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
24918c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET,
24928c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_EROT_MASK,
24938c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data),
24948c03f64dSVadim Pasternak 		.inversed = 1,
24958c03f64dSVadim Pasternak 		.health = false,
24968c03f64dSVadim Pasternak 	},
24978c03f64dSVadim Pasternak 	{
24988c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_l1_switch_pwr_events_items_data,
24998c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
25008c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET,
25018c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_PWR_BUTTON_MASK,
25028c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_pwr_events_items_data),
25038c03f64dSVadim Pasternak 		.inversed = 1,
25048c03f64dSVadim Pasternak 		.health = false,
25058c03f64dSVadim Pasternak 	},
25068c03f64dSVadim Pasternak 	{
25078c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_l1_switch_health_events_items_data,
25088c03f64dSVadim Pasternak 		.aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF,
25098c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET,
25108c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_L1_CHA_HEALTH_MASK,
25118c03f64dSVadim Pasternak 		.count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_health_events_items_data),
25128c03f64dSVadim Pasternak 		.inversed = 1,
25138c03f64dSVadim Pasternak 		.health = false,
25148c03f64dSVadim Pasternak 		.ind = 8,
25158c03f64dSVadim Pasternak 	},
25168c03f64dSVadim Pasternak };
25178c03f64dSVadim Pasternak 
25188c03f64dSVadim Pasternak static
25198c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_l1_switch_data = {
25208c03f64dSVadim Pasternak 	.items = mlxplat_mlxcpld_l1_switch_events_items,
25218c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_events_items),
25228c03f64dSVadim Pasternak 	.cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET,
25238c03f64dSVadim Pasternak 	.mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX,
25248c03f64dSVadim Pasternak 	.cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET,
25258c03f64dSVadim Pasternak 	.mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT,
25268c03f64dSVadim Pasternak };
25278c03f64dSVadim Pasternak 
25288c03f64dSVadim Pasternak /* Platform led default data */
25298c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_data[] = {
25308c03f64dSVadim Pasternak 	{
25318c03f64dSVadim Pasternak 		.label = "status:green",
25328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
25338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
25348c03f64dSVadim Pasternak 	},
25358c03f64dSVadim Pasternak 	{
25368c03f64dSVadim Pasternak 		.label = "status:red",
25378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
25388c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
25398c03f64dSVadim Pasternak 	},
25408c03f64dSVadim Pasternak 	{
25418c03f64dSVadim Pasternak 		.label = "psu:green",
25428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
25438c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25448c03f64dSVadim Pasternak 	},
25458c03f64dSVadim Pasternak 	{
25468c03f64dSVadim Pasternak 		.label = "psu:red",
25478c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
25488c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25498c03f64dSVadim Pasternak 	},
25508c03f64dSVadim Pasternak 	{
25518c03f64dSVadim Pasternak 		.label = "fan1:green",
25528c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
25538c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
25548c03f64dSVadim Pasternak 	},
25558c03f64dSVadim Pasternak 	{
25568c03f64dSVadim Pasternak 		.label = "fan1:red",
25578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
25588c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
25598c03f64dSVadim Pasternak 	},
25608c03f64dSVadim Pasternak 	{
25618c03f64dSVadim Pasternak 		.label = "fan2:green",
25628c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
25638c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25648c03f64dSVadim Pasternak 	},
25658c03f64dSVadim Pasternak 	{
25668c03f64dSVadim Pasternak 		.label = "fan2:red",
25678c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
25688c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25698c03f64dSVadim Pasternak 	},
25708c03f64dSVadim Pasternak 	{
25718c03f64dSVadim Pasternak 		.label = "fan3:green",
25728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
25738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
25748c03f64dSVadim Pasternak 	},
25758c03f64dSVadim Pasternak 	{
25768c03f64dSVadim Pasternak 		.label = "fan3:red",
25778c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
25788c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
25798c03f64dSVadim Pasternak 	},
25808c03f64dSVadim Pasternak 	{
25818c03f64dSVadim Pasternak 		.label = "fan4:green",
25828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
25838c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25848c03f64dSVadim Pasternak 	},
25858c03f64dSVadim Pasternak 	{
25868c03f64dSVadim Pasternak 		.label = "fan4:red",
25878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
25888c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
25898c03f64dSVadim Pasternak 	},
25908c03f64dSVadim Pasternak };
25918c03f64dSVadim Pasternak 
25928c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_data = {
25938c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_led_data,
25948c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_data),
25958c03f64dSVadim Pasternak };
25968c03f64dSVadim Pasternak 
25978c03f64dSVadim Pasternak /* Platform led default data for water cooling */
25988c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_wc_data[] = {
25998c03f64dSVadim Pasternak 	{
26008c03f64dSVadim Pasternak 		.label = "status:green",
26018c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26028c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26038c03f64dSVadim Pasternak 	},
26048c03f64dSVadim Pasternak 	{
26058c03f64dSVadim Pasternak 		.label = "status:red",
26068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26078c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
26088c03f64dSVadim Pasternak 	},
26098c03f64dSVadim Pasternak 	{
26108c03f64dSVadim Pasternak 		.label = "psu:green",
26118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26128c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
26138c03f64dSVadim Pasternak 	},
26148c03f64dSVadim Pasternak 	{
26158c03f64dSVadim Pasternak 		.label = "psu:red",
26168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26178c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
26188c03f64dSVadim Pasternak 	},
26198c03f64dSVadim Pasternak };
26208c03f64dSVadim Pasternak 
26218c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_wc_data = {
26228c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_led_wc_data,
26238c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_wc_data),
26248c03f64dSVadim Pasternak };
26258c03f64dSVadim Pasternak 
26268c03f64dSVadim Pasternak /* Platform led default data for water cooling Ethernet switch blade */
26278c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_eth_wc_blade_data[] = {
26288c03f64dSVadim Pasternak 	{
26298c03f64dSVadim Pasternak 		.label = "status:green",
26308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26318c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26328c03f64dSVadim Pasternak 	},
26338c03f64dSVadim Pasternak 	{
26348c03f64dSVadim Pasternak 		.label = "status:red",
26358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26368c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
26378c03f64dSVadim Pasternak 	},
26388c03f64dSVadim Pasternak };
26398c03f64dSVadim Pasternak 
26408c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_eth_wc_blade_data = {
26418c03f64dSVadim Pasternak 	.data = mlxplat_mlxcpld_default_led_eth_wc_blade_data,
26428c03f64dSVadim Pasternak 	.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_eth_wc_blade_data),
26438c03f64dSVadim Pasternak };
26448c03f64dSVadim Pasternak 
26458c03f64dSVadim Pasternak /* Platform led MSN21xx system family data */
26468c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_led_data[] = {
26478c03f64dSVadim Pasternak 	{
26488c03f64dSVadim Pasternak 		.label = "status:green",
26498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26508c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26518c03f64dSVadim Pasternak 	},
26528c03f64dSVadim Pasternak 	{
26538c03f64dSVadim Pasternak 		.label = "status:red",
26548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
26558c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
26568c03f64dSVadim Pasternak 	},
26578c03f64dSVadim Pasternak 	{
26588c03f64dSVadim Pasternak 		.label = "fan:green",
26598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
26608c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26618c03f64dSVadim Pasternak 	},
26628c03f64dSVadim Pasternak 	{
26638c03f64dSVadim Pasternak 		.label = "fan:red",
26648c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
26658c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26668c03f64dSVadim Pasternak 	},
26678c03f64dSVadim Pasternak 	{
26688c03f64dSVadim Pasternak 		.label = "psu1:green",
26698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
26708c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26718c03f64dSVadim Pasternak 	},
26728c03f64dSVadim Pasternak 	{
26738c03f64dSVadim Pasternak 		.label = "psu1:red",
26748c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
26758c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26768c03f64dSVadim Pasternak 	},
26778c03f64dSVadim Pasternak 	{
26788c03f64dSVadim Pasternak 		.label = "psu2:green",
26798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
26808c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
26818c03f64dSVadim Pasternak 	},
26828c03f64dSVadim Pasternak 	{
26838c03f64dSVadim Pasternak 		.label = "psu2:red",
26848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
26858c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
26868c03f64dSVadim Pasternak 	},
26878c03f64dSVadim Pasternak 	{
26888c03f64dSVadim Pasternak 		.label = "uid:blue",
26898c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
26908c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
26918c03f64dSVadim Pasternak 	},
26928c03f64dSVadim Pasternak };
26938c03f64dSVadim Pasternak 
26948c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_msn21xx_led_data = {
26958c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn21xx_led_data,
26968c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_led_data),
26978c03f64dSVadim Pasternak };
26988c03f64dSVadim Pasternak 
26998c03f64dSVadim Pasternak /* Platform led for default data for 200GbE systems */
27008c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_led_data[] = {
27018c03f64dSVadim Pasternak 	{
27028c03f64dSVadim Pasternak 		.label = "status:green",
27038c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
27048c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27058c03f64dSVadim Pasternak 	},
27068c03f64dSVadim Pasternak 	{
27078c03f64dSVadim Pasternak 		.label = "status:orange",
27088c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
27098c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
27108c03f64dSVadim Pasternak 	},
27118c03f64dSVadim Pasternak 	{
27128c03f64dSVadim Pasternak 		.label = "psu:green",
27138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
27148c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27158c03f64dSVadim Pasternak 	},
27168c03f64dSVadim Pasternak 	{
27178c03f64dSVadim Pasternak 		.label = "psu:orange",
27188c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
27198c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27208c03f64dSVadim Pasternak 	},
27218c03f64dSVadim Pasternak 	{
27228c03f64dSVadim Pasternak 		.label = "fan1:green",
27238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
27248c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27258c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27268c03f64dSVadim Pasternak 		.bit = BIT(0),
27278c03f64dSVadim Pasternak 	},
27288c03f64dSVadim Pasternak 	{
27298c03f64dSVadim Pasternak 		.label = "fan1:orange",
27308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
27318c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27328c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27338c03f64dSVadim Pasternak 		.bit = BIT(0),
27348c03f64dSVadim Pasternak 	},
27358c03f64dSVadim Pasternak 	{
27368c03f64dSVadim Pasternak 		.label = "fan2:green",
27378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
27388c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27398c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27408c03f64dSVadim Pasternak 		.bit = BIT(1),
27418c03f64dSVadim Pasternak 	},
27428c03f64dSVadim Pasternak 	{
27438c03f64dSVadim Pasternak 		.label = "fan2:orange",
27448c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
27458c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27468c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27478c03f64dSVadim Pasternak 		.bit = BIT(1),
27488c03f64dSVadim Pasternak 	},
27498c03f64dSVadim Pasternak 	{
27508c03f64dSVadim Pasternak 		.label = "fan3:green",
27518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
27528c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27538c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27548c03f64dSVadim Pasternak 		.bit = BIT(2),
27558c03f64dSVadim Pasternak 	},
27568c03f64dSVadim Pasternak 	{
27578c03f64dSVadim Pasternak 		.label = "fan3:orange",
27588c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
27598c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27608c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27618c03f64dSVadim Pasternak 		.bit = BIT(2),
27628c03f64dSVadim Pasternak 	},
27638c03f64dSVadim Pasternak 	{
27648c03f64dSVadim Pasternak 		.label = "fan4:green",
27658c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
27668c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27678c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27688c03f64dSVadim Pasternak 		.bit = BIT(3),
27698c03f64dSVadim Pasternak 	},
27708c03f64dSVadim Pasternak 	{
27718c03f64dSVadim Pasternak 		.label = "fan4:orange",
27728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
27738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27748c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27758c03f64dSVadim Pasternak 		.bit = BIT(3),
27768c03f64dSVadim Pasternak 	},
27778c03f64dSVadim Pasternak 	{
27788c03f64dSVadim Pasternak 		.label = "fan5:green",
27798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
27808c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27818c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27828c03f64dSVadim Pasternak 		.bit = BIT(4),
27838c03f64dSVadim Pasternak 	},
27848c03f64dSVadim Pasternak 	{
27858c03f64dSVadim Pasternak 		.label = "fan5:orange",
27868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
27878c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
27888c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27898c03f64dSVadim Pasternak 		.bit = BIT(4),
27908c03f64dSVadim Pasternak 	},
27918c03f64dSVadim Pasternak 	{
27928c03f64dSVadim Pasternak 		.label = "fan6:green",
27938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
27948c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
27958c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
27968c03f64dSVadim Pasternak 		.bit = BIT(5),
27978c03f64dSVadim Pasternak 	},
27988c03f64dSVadim Pasternak 	{
27998c03f64dSVadim Pasternak 		.label = "fan6:orange",
28008c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
28018c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28028c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
28038c03f64dSVadim Pasternak 		.bit = BIT(5),
28048c03f64dSVadim Pasternak 	},
28058c03f64dSVadim Pasternak 	{
28068c03f64dSVadim Pasternak 		.label = "fan7:green",
28078c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
28088c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28098c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
28108c03f64dSVadim Pasternak 		.bit = BIT(6),
28118c03f64dSVadim Pasternak 	},
28128c03f64dSVadim Pasternak 	{
28138c03f64dSVadim Pasternak 		.label = "fan7:orange",
28148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
28158c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28168c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
28178c03f64dSVadim Pasternak 		.bit = BIT(6),
28188c03f64dSVadim Pasternak 	},
28198c03f64dSVadim Pasternak 	{
28208c03f64dSVadim Pasternak 		.label = "uid:blue",
28218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
28228c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28238c03f64dSVadim Pasternak 	},
28248c03f64dSVadim Pasternak };
28258c03f64dSVadim Pasternak 
28268c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_ng_led_data = {
28278c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_led_data,
28288c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_led_data),
28298c03f64dSVadim Pasternak };
28308c03f64dSVadim Pasternak 
28318c03f64dSVadim Pasternak /* Platform led for Comex based 100GbE systems */
28328c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_comex_100G_led_data[] = {
28338c03f64dSVadim Pasternak 	{
28348c03f64dSVadim Pasternak 		.label = "status:green",
28358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
28368c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28378c03f64dSVadim Pasternak 	},
28388c03f64dSVadim Pasternak 	{
28398c03f64dSVadim Pasternak 		.label = "status:red",
28408c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
28418c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
28428c03f64dSVadim Pasternak 	},
28438c03f64dSVadim Pasternak 	{
28448c03f64dSVadim Pasternak 		.label = "psu:green",
28458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
28468c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28478c03f64dSVadim Pasternak 	},
28488c03f64dSVadim Pasternak 	{
28498c03f64dSVadim Pasternak 		.label = "psu:red",
28508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
28518c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28528c03f64dSVadim Pasternak 	},
28538c03f64dSVadim Pasternak 	{
28548c03f64dSVadim Pasternak 		.label = "fan1:green",
28558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
28568c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28578c03f64dSVadim Pasternak 	},
28588c03f64dSVadim Pasternak 	{
28598c03f64dSVadim Pasternak 		.label = "fan1:red",
28608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
28618c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28628c03f64dSVadim Pasternak 	},
28638c03f64dSVadim Pasternak 	{
28648c03f64dSVadim Pasternak 		.label = "fan2:green",
28658c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
28668c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28678c03f64dSVadim Pasternak 	},
28688c03f64dSVadim Pasternak 	{
28698c03f64dSVadim Pasternak 		.label = "fan2:red",
28708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
28718c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28728c03f64dSVadim Pasternak 	},
28738c03f64dSVadim Pasternak 	{
28748c03f64dSVadim Pasternak 		.label = "fan3:green",
28758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
28768c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28778c03f64dSVadim Pasternak 	},
28788c03f64dSVadim Pasternak 	{
28798c03f64dSVadim Pasternak 		.label = "fan3:red",
28808c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
28818c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28828c03f64dSVadim Pasternak 	},
28838c03f64dSVadim Pasternak 	{
28848c03f64dSVadim Pasternak 		.label = "fan4:green",
28858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
28868c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28878c03f64dSVadim Pasternak 	},
28888c03f64dSVadim Pasternak 	{
28898c03f64dSVadim Pasternak 		.label = "fan4:red",
28908c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
28918c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
28928c03f64dSVadim Pasternak 	},
28938c03f64dSVadim Pasternak 	{
28948c03f64dSVadim Pasternak 		.label = "uid:blue",
28958c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
28968c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
28978c03f64dSVadim Pasternak 	},
28988c03f64dSVadim Pasternak };
28998c03f64dSVadim Pasternak 
29008c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_comex_100G_led_data = {
29018c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_comex_100G_led_data,
29028c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_comex_100G_led_data),
29038c03f64dSVadim Pasternak };
29048c03f64dSVadim Pasternak 
29058c03f64dSVadim Pasternak /* Platform led for data for modular systems */
29068c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_led_data[] = {
29078c03f64dSVadim Pasternak 	{
29088c03f64dSVadim Pasternak 		.label = "status:green",
29098c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
29108c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29118c03f64dSVadim Pasternak 	},
29128c03f64dSVadim Pasternak 	{
29138c03f64dSVadim Pasternak 		.label = "status:orange",
29148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
29158c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
29168c03f64dSVadim Pasternak 	},
29178c03f64dSVadim Pasternak 	{
29188c03f64dSVadim Pasternak 		.label = "psu:green",
29198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
29208c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29218c03f64dSVadim Pasternak 	},
29228c03f64dSVadim Pasternak 	{
29238c03f64dSVadim Pasternak 		.label = "psu:orange",
29248c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
29258c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29268c03f64dSVadim Pasternak 	},
29278c03f64dSVadim Pasternak 	{
29288c03f64dSVadim Pasternak 		.label = "fan1:green",
29298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
29308c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29318c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29328c03f64dSVadim Pasternak 		.bit = BIT(0),
29338c03f64dSVadim Pasternak 	},
29348c03f64dSVadim Pasternak 	{
29358c03f64dSVadim Pasternak 		.label = "fan1:orange",
29368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
29378c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29388c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29398c03f64dSVadim Pasternak 		.bit = BIT(0),
29408c03f64dSVadim Pasternak 	},
29418c03f64dSVadim Pasternak 	{
29428c03f64dSVadim Pasternak 		.label = "fan2:green",
29438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
29448c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29458c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29468c03f64dSVadim Pasternak 		.bit = BIT(1),
29478c03f64dSVadim Pasternak 	},
29488c03f64dSVadim Pasternak 	{
29498c03f64dSVadim Pasternak 		.label = "fan2:orange",
29508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
29518c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29528c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29538c03f64dSVadim Pasternak 		.bit = BIT(1),
29548c03f64dSVadim Pasternak 	},
29558c03f64dSVadim Pasternak 	{
29568c03f64dSVadim Pasternak 		.label = "fan3:green",
29578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
29588c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29598c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29608c03f64dSVadim Pasternak 		.bit = BIT(2),
29618c03f64dSVadim Pasternak 	},
29628c03f64dSVadim Pasternak 	{
29638c03f64dSVadim Pasternak 		.label = "fan3:orange",
29648c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
29658c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29668c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29678c03f64dSVadim Pasternak 		.bit = BIT(2),
29688c03f64dSVadim Pasternak 	},
29698c03f64dSVadim Pasternak 	{
29708c03f64dSVadim Pasternak 		.label = "fan4:green",
29718c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
29728c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29738c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29748c03f64dSVadim Pasternak 		.bit = BIT(3),
29758c03f64dSVadim Pasternak 	},
29768c03f64dSVadim Pasternak 	{
29778c03f64dSVadim Pasternak 		.label = "fan4:orange",
29788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
29798c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
29808c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29818c03f64dSVadim Pasternak 		.bit = BIT(3),
29828c03f64dSVadim Pasternak 	},
29838c03f64dSVadim Pasternak 	{
29848c03f64dSVadim Pasternak 		.label = "fan5:green",
29858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
29868c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29878c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29888c03f64dSVadim Pasternak 		.bit = BIT(4),
29898c03f64dSVadim Pasternak 	},
29908c03f64dSVadim Pasternak 	{
29918c03f64dSVadim Pasternak 		.label = "fan5:orange",
29928c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
29938c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
29948c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
29958c03f64dSVadim Pasternak 		.bit = BIT(4),
29968c03f64dSVadim Pasternak 	},
29978c03f64dSVadim Pasternak 	{
29988c03f64dSVadim Pasternak 		.label = "fan6:green",
29998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
30008c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
30018c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30028c03f64dSVadim Pasternak 		.bit = BIT(5),
30038c03f64dSVadim Pasternak 	},
30048c03f64dSVadim Pasternak 	{
30058c03f64dSVadim Pasternak 		.label = "fan6:orange",
30068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
30078c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
30088c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30098c03f64dSVadim Pasternak 		.bit = BIT(5),
30108c03f64dSVadim Pasternak 	},
30118c03f64dSVadim Pasternak 	{
30128c03f64dSVadim Pasternak 		.label = "fan7:green",
30138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
30148c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30158c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30168c03f64dSVadim Pasternak 		.bit = BIT(6),
30178c03f64dSVadim Pasternak 	},
30188c03f64dSVadim Pasternak 	{
30198c03f64dSVadim Pasternak 		.label = "fan7:orange",
30208c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
30218c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30228c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30238c03f64dSVadim Pasternak 		.bit = BIT(6),
30248c03f64dSVadim Pasternak 	},
30258c03f64dSVadim Pasternak 	{
30268c03f64dSVadim Pasternak 		.label = "uid:blue",
30278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
30288c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30298c03f64dSVadim Pasternak 	},
30308c03f64dSVadim Pasternak 	{
30318c03f64dSVadim Pasternak 		.label = "fan_front:green",
30328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
30338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30348c03f64dSVadim Pasternak 	},
30358c03f64dSVadim Pasternak 	{
30368c03f64dSVadim Pasternak 		.label = "fan_front:orange",
30378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET,
30388c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30398c03f64dSVadim Pasternak 	},
30408c03f64dSVadim Pasternak 	{
30418c03f64dSVadim Pasternak 		.label = "mgmt:green",
30428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED7_OFFSET,
30438c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30448c03f64dSVadim Pasternak 	},
30458c03f64dSVadim Pasternak 	{
30468c03f64dSVadim Pasternak 		.label = "mgmt:orange",
30478c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED7_OFFSET,
30488c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30498c03f64dSVadim Pasternak 	},
30508c03f64dSVadim Pasternak };
30518c03f64dSVadim Pasternak 
30528c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_modular_led_data = {
30538c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_led_data,
30548c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_led_data),
30558c03f64dSVadim Pasternak };
30568c03f64dSVadim Pasternak 
30578c03f64dSVadim Pasternak /* Platform led data for chassis system */
30588c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_led_data[] = {
30598c03f64dSVadim Pasternak 	{
30608c03f64dSVadim Pasternak 		.label = "status:green",
30618c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
30628c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30638c03f64dSVadim Pasternak 	},
30648c03f64dSVadim Pasternak 	{
30658c03f64dSVadim Pasternak 		.label = "status:orange",
30668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET,
30678c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK
30688c03f64dSVadim Pasternak 	},
30698c03f64dSVadim Pasternak 	{
30708c03f64dSVadim Pasternak 		.label = "fan1:green",
30718c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
30728c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30738c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30748c03f64dSVadim Pasternak 		.bit = BIT(0),
30758c03f64dSVadim Pasternak 	},
30768c03f64dSVadim Pasternak 	{
30778c03f64dSVadim Pasternak 		.label = "fan1:orange",
30788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
30798c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
30808c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30818c03f64dSVadim Pasternak 		.bit = BIT(0),
30828c03f64dSVadim Pasternak 	},
30838c03f64dSVadim Pasternak 	{
30848c03f64dSVadim Pasternak 		.label = "fan2:green",
30858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
30868c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
30878c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30888c03f64dSVadim Pasternak 		.bit = BIT(1),
30898c03f64dSVadim Pasternak 	},
30908c03f64dSVadim Pasternak 	{
30918c03f64dSVadim Pasternak 		.label = "fan2:orange",
30928c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET,
30938c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
30948c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
30958c03f64dSVadim Pasternak 		.bit = BIT(1),
30968c03f64dSVadim Pasternak 	},
30978c03f64dSVadim Pasternak 	{
30988c03f64dSVadim Pasternak 		.label = "fan3:green",
30998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
31008c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
31018c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31028c03f64dSVadim Pasternak 		.bit = BIT(2),
31038c03f64dSVadim Pasternak 	},
31048c03f64dSVadim Pasternak 	{
31058c03f64dSVadim Pasternak 		.label = "fan3:orange",
31068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
31078c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
31088c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31098c03f64dSVadim Pasternak 		.bit = BIT(2),
31108c03f64dSVadim Pasternak 	},
31118c03f64dSVadim Pasternak 	{
31128c03f64dSVadim Pasternak 		.label = "fan4:green",
31138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
31148c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
31158c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31168c03f64dSVadim Pasternak 		.bit = BIT(3),
31178c03f64dSVadim Pasternak 	},
31188c03f64dSVadim Pasternak 	{
31198c03f64dSVadim Pasternak 		.label = "fan4:orange",
31208c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET,
31218c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
31228c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31238c03f64dSVadim Pasternak 		.bit = BIT(3),
31248c03f64dSVadim Pasternak 	},
31258c03f64dSVadim Pasternak 	{
31268c03f64dSVadim Pasternak 		.label = "fan5:green",
31278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
31288c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
31298c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31308c03f64dSVadim Pasternak 		.bit = BIT(4),
31318c03f64dSVadim Pasternak 	},
31328c03f64dSVadim Pasternak 	{
31338c03f64dSVadim Pasternak 		.label = "fan5:orange",
31348c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
31358c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
31368c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31378c03f64dSVadim Pasternak 		.bit = BIT(4),
31388c03f64dSVadim Pasternak 	},
31398c03f64dSVadim Pasternak 	{
31408c03f64dSVadim Pasternak 		.label = "fan6:green",
31418c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
31428c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
31438c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31448c03f64dSVadim Pasternak 		.bit = BIT(5),
31458c03f64dSVadim Pasternak 	},
31468c03f64dSVadim Pasternak 	{
31478c03f64dSVadim Pasternak 		.label = "fan6:orange",
31488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET,
31498c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK,
31508c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
31518c03f64dSVadim Pasternak 		.bit = BIT(5),
31528c03f64dSVadim Pasternak 	},
31538c03f64dSVadim Pasternak 	{
31548c03f64dSVadim Pasternak 		.label = "uid:blue",
31558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET,
31568c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK,
31578c03f64dSVadim Pasternak 	},
31588c03f64dSVadim Pasternak };
31598c03f64dSVadim Pasternak 
31608c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_l1_switch_led_data = {
31618c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_l1_switch_led_data,
31628c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_led_data),
31638c03f64dSVadim Pasternak };
31648c03f64dSVadim Pasternak 
31658c03f64dSVadim Pasternak /* Platform register access default */
31668c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_regs_io_data[] = {
31678c03f64dSVadim Pasternak 	{
31688c03f64dSVadim Pasternak 		.label = "cpld1_version",
31698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET,
31708c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
31718c03f64dSVadim Pasternak 		.mode = 0444,
31728c03f64dSVadim Pasternak 	},
31738c03f64dSVadim Pasternak 	{
31748c03f64dSVadim Pasternak 		.label = "cpld2_version",
31758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET,
31768c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
31778c03f64dSVadim Pasternak 		.mode = 0444,
31788c03f64dSVadim Pasternak 	},
31798c03f64dSVadim Pasternak 	{
31808c03f64dSVadim Pasternak 		.label = "cpld1_pn",
31818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET,
31828c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
31838c03f64dSVadim Pasternak 		.mode = 0444,
31848c03f64dSVadim Pasternak 		.regnum = 2,
31858c03f64dSVadim Pasternak 	},
31868c03f64dSVadim Pasternak 	{
31878c03f64dSVadim Pasternak 		.label = "cpld2_pn",
31888c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET,
31898c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
31908c03f64dSVadim Pasternak 		.mode = 0444,
31918c03f64dSVadim Pasternak 		.regnum = 2,
31928c03f64dSVadim Pasternak 	},
31938c03f64dSVadim Pasternak 	{
31948c03f64dSVadim Pasternak 		.label = "cpld1_version_min",
31958c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET,
31968c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
31978c03f64dSVadim Pasternak 		.mode = 0444,
31988c03f64dSVadim Pasternak 	},
31998c03f64dSVadim Pasternak 	{
32008c03f64dSVadim Pasternak 		.label = "cpld2_version_min",
32018c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET,
32028c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
32038c03f64dSVadim Pasternak 		.mode = 0444,
32048c03f64dSVadim Pasternak 	},
32058c03f64dSVadim Pasternak 	{
32068c03f64dSVadim Pasternak 		.label = "reset_long_pb",
32078c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32088c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
32098c03f64dSVadim Pasternak 		.mode = 0444,
32108c03f64dSVadim Pasternak 	},
32118c03f64dSVadim Pasternak 	{
32128c03f64dSVadim Pasternak 		.label = "reset_short_pb",
32138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32148c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
32158c03f64dSVadim Pasternak 		.mode = 0444,
32168c03f64dSVadim Pasternak 	},
32178c03f64dSVadim Pasternak 	{
32188c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_ref",
32198c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32208c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
32218c03f64dSVadim Pasternak 		.mode = 0444,
32228c03f64dSVadim Pasternak 	},
32238c03f64dSVadim Pasternak 	{
32248c03f64dSVadim Pasternak 		.label = "reset_main_pwr_fail",
32258c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32268c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
32278c03f64dSVadim Pasternak 		.mode = 0444,
32288c03f64dSVadim Pasternak 	},
32298c03f64dSVadim Pasternak 	{
32308c03f64dSVadim Pasternak 		.label = "reset_sw_reset",
32318c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32328c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
32338c03f64dSVadim Pasternak 		.mode = 0444,
32348c03f64dSVadim Pasternak 	},
32358c03f64dSVadim Pasternak 	{
32368c03f64dSVadim Pasternak 		.label = "reset_fw_reset",
32378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32388c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
32398c03f64dSVadim Pasternak 		.mode = 0444,
32408c03f64dSVadim Pasternak 	},
32418c03f64dSVadim Pasternak 	{
32428c03f64dSVadim Pasternak 		.label = "reset_hotswap_or_wd",
32438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32448c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
32458c03f64dSVadim Pasternak 		.mode = 0444,
32468c03f64dSVadim Pasternak 	},
32478c03f64dSVadim Pasternak 	{
32488c03f64dSVadim Pasternak 		.label = "reset_asic_thermal",
32498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
32508c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
32518c03f64dSVadim Pasternak 		.mode = 0444,
32528c03f64dSVadim Pasternak 	},
32538c03f64dSVadim Pasternak 	{
32548c03f64dSVadim Pasternak 		.label = "psu1_on",
32558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
32568c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
32578c03f64dSVadim Pasternak 		.mode = 0200,
32588c03f64dSVadim Pasternak 	},
32598c03f64dSVadim Pasternak 	{
32608c03f64dSVadim Pasternak 		.label = "psu2_on",
32618c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
32628c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
32638c03f64dSVadim Pasternak 		.mode = 0200,
32648c03f64dSVadim Pasternak 	},
32658c03f64dSVadim Pasternak 	{
32668c03f64dSVadim Pasternak 		.label = "pwr_cycle",
32678c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
32688c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
32698c03f64dSVadim Pasternak 		.mode = 0200,
32708c03f64dSVadim Pasternak 	},
32718c03f64dSVadim Pasternak 	{
32728c03f64dSVadim Pasternak 		.label = "pwr_down",
32738c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
32748c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
32758c03f64dSVadim Pasternak 		.mode = 0200,
32768c03f64dSVadim Pasternak 	},
32778c03f64dSVadim Pasternak 	{
32788c03f64dSVadim Pasternak 		.label = "select_iio",
32798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
32808c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
32818c03f64dSVadim Pasternak 		.mode = 0644,
32828c03f64dSVadim Pasternak 	},
32838c03f64dSVadim Pasternak 	{
32848c03f64dSVadim Pasternak 		.label = "asic_health",
32858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
32868c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
32878c03f64dSVadim Pasternak 		.bit = 1,
32888c03f64dSVadim Pasternak 		.mode = 0444,
32898c03f64dSVadim Pasternak 	},
32908c03f64dSVadim Pasternak };
32918c03f64dSVadim Pasternak 
32928c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_regs_io_data = {
32938c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_regs_io_data,
32948c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_regs_io_data),
32958c03f64dSVadim Pasternak };
32968c03f64dSVadim Pasternak 
32978c03f64dSVadim Pasternak /* Platform register access MSN21xx, MSN201x, MSN274x systems families data */
32988c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_regs_io_data[] = {
32998c03f64dSVadim Pasternak 	{
33008c03f64dSVadim Pasternak 		.label = "cpld1_version",
33018c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET,
33028c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
33038c03f64dSVadim Pasternak 		.mode = 0444,
33048c03f64dSVadim Pasternak 	},
33058c03f64dSVadim Pasternak 	{
33068c03f64dSVadim Pasternak 		.label = "cpld2_version",
33078c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET,
33088c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
33098c03f64dSVadim Pasternak 		.mode = 0444,
33108c03f64dSVadim Pasternak 	},
33118c03f64dSVadim Pasternak 	{
33128c03f64dSVadim Pasternak 		.label = "cpld1_pn",
33138c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET,
33148c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
33158c03f64dSVadim Pasternak 		.mode = 0444,
33168c03f64dSVadim Pasternak 		.regnum = 2,
33178c03f64dSVadim Pasternak 	},
33188c03f64dSVadim Pasternak 	{
33198c03f64dSVadim Pasternak 		.label = "cpld2_pn",
33208c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET,
33218c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
33228c03f64dSVadim Pasternak 		.mode = 0444,
33238c03f64dSVadim Pasternak 		.regnum = 2,
33248c03f64dSVadim Pasternak 	},
33258c03f64dSVadim Pasternak 	{
33268c03f64dSVadim Pasternak 		.label = "cpld1_version_min",
33278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET,
33288c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
33298c03f64dSVadim Pasternak 		.mode = 0444,
33308c03f64dSVadim Pasternak 	},
33318c03f64dSVadim Pasternak 	{
33328c03f64dSVadim Pasternak 		.label = "cpld2_version_min",
33338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET,
33348c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
33358c03f64dSVadim Pasternak 		.mode = 0444,
33368c03f64dSVadim Pasternak 	},
33378c03f64dSVadim Pasternak 	{
33388c03f64dSVadim Pasternak 		.label = "reset_long_pb",
33398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33408c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
33418c03f64dSVadim Pasternak 		.mode = 0444,
33428c03f64dSVadim Pasternak 	},
33438c03f64dSVadim Pasternak 	{
33448c03f64dSVadim Pasternak 		.label = "reset_short_pb",
33458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33468c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
33478c03f64dSVadim Pasternak 		.mode = 0444,
33488c03f64dSVadim Pasternak 	},
33498c03f64dSVadim Pasternak 	{
33508c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_ref",
33518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33528c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
33538c03f64dSVadim Pasternak 		.mode = 0444,
33548c03f64dSVadim Pasternak 	},
33558c03f64dSVadim Pasternak 	{
33568c03f64dSVadim Pasternak 		.label = "reset_sw_reset",
33578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33588c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
33598c03f64dSVadim Pasternak 		.mode = 0444,
33608c03f64dSVadim Pasternak 	},
33618c03f64dSVadim Pasternak 	{
33628c03f64dSVadim Pasternak 		.label = "reset_main_pwr_fail",
33638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33648c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
33658c03f64dSVadim Pasternak 		.mode = 0444,
33668c03f64dSVadim Pasternak 	},
33678c03f64dSVadim Pasternak 	{
33688c03f64dSVadim Pasternak 		.label = "reset_asic_thermal",
33698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33708c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
33718c03f64dSVadim Pasternak 		.mode = 0444,
33728c03f64dSVadim Pasternak 	},
33738c03f64dSVadim Pasternak 	{
33748c03f64dSVadim Pasternak 		.label = "reset_hotswap_or_halt",
33758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
33768c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
33778c03f64dSVadim Pasternak 		.mode = 0444,
33788c03f64dSVadim Pasternak 	},
33798c03f64dSVadim Pasternak 	{
33808c03f64dSVadim Pasternak 		.label = "reset_sff_wd",
33818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
33828c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
33838c03f64dSVadim Pasternak 		.mode = 0444,
33848c03f64dSVadim Pasternak 	},
33858c03f64dSVadim Pasternak 	{
33868c03f64dSVadim Pasternak 		.label = "psu1_on",
33878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
33888c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
33898c03f64dSVadim Pasternak 		.mode = 0200,
33908c03f64dSVadim Pasternak 	},
33918c03f64dSVadim Pasternak 	{
33928c03f64dSVadim Pasternak 		.label = "psu2_on",
33938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
33948c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
33958c03f64dSVadim Pasternak 		.mode = 0200,
33968c03f64dSVadim Pasternak 	},
33978c03f64dSVadim Pasternak 	{
33988c03f64dSVadim Pasternak 		.label = "pwr_cycle",
33998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
34008c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
34018c03f64dSVadim Pasternak 		.mode = 0200,
34028c03f64dSVadim Pasternak 	},
34038c03f64dSVadim Pasternak 	{
34048c03f64dSVadim Pasternak 		.label = "pwr_down",
34058c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
34068c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
34078c03f64dSVadim Pasternak 		.mode = 0200,
34088c03f64dSVadim Pasternak 	},
34098c03f64dSVadim Pasternak 	{
34108c03f64dSVadim Pasternak 		.label = "select_iio",
34118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
34128c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
34138c03f64dSVadim Pasternak 		.mode = 0644,
34148c03f64dSVadim Pasternak 	},
34158c03f64dSVadim Pasternak 	{
34168c03f64dSVadim Pasternak 		.label = "asic_health",
34178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
34188c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
34198c03f64dSVadim Pasternak 		.bit = 1,
34208c03f64dSVadim Pasternak 		.mode = 0444,
34218c03f64dSVadim Pasternak 	},
34228c03f64dSVadim Pasternak };
34238c03f64dSVadim Pasternak 
34248c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_msn21xx_regs_io_data = {
34258c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_msn21xx_regs_io_data,
34268c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_regs_io_data),
34278c03f64dSVadim Pasternak };
34288c03f64dSVadim Pasternak 
34298c03f64dSVadim Pasternak /* Platform register access for next generation systems families data */
34308c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = {
34318c03f64dSVadim Pasternak 	{
34328c03f64dSVadim Pasternak 		.label = "cpld1_version",
34338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET,
34348c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
34358c03f64dSVadim Pasternak 		.mode = 0444,
34368c03f64dSVadim Pasternak 	},
34378c03f64dSVadim Pasternak 	{
34388c03f64dSVadim Pasternak 		.label = "cpld2_version",
34398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET,
34408c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
34418c03f64dSVadim Pasternak 		.mode = 0444,
34428c03f64dSVadim Pasternak 	},
34438c03f64dSVadim Pasternak 	{
34448c03f64dSVadim Pasternak 		.label = "cpld3_version",
34458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET,
34468c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
34478c03f64dSVadim Pasternak 		.mode = 0444,
34488c03f64dSVadim Pasternak 	},
34498c03f64dSVadim Pasternak 	{
34508c03f64dSVadim Pasternak 		.label = "cpld4_version",
34518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET,
34528c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
34538c03f64dSVadim Pasternak 		.mode = 0444,
34548c03f64dSVadim Pasternak 	},
34558c03f64dSVadim Pasternak 	{
34568c03f64dSVadim Pasternak 		.label = "cpld5_version",
34578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET,
34588c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
34598c03f64dSVadim Pasternak 		.mode = 0444,
34608c03f64dSVadim Pasternak 	},
34618c03f64dSVadim Pasternak 	{
34628c03f64dSVadim Pasternak 		.label = "cpld1_pn",
34638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET,
34648c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
34658c03f64dSVadim Pasternak 		.mode = 0444,
34668c03f64dSVadim Pasternak 		.regnum = 2,
34678c03f64dSVadim Pasternak 	},
34688c03f64dSVadim Pasternak 	{
34698c03f64dSVadim Pasternak 		.label = "cpld2_pn",
34708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET,
34718c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
34728c03f64dSVadim Pasternak 		.mode = 0444,
34738c03f64dSVadim Pasternak 		.regnum = 2,
34748c03f64dSVadim Pasternak 	},
34758c03f64dSVadim Pasternak 	{
34768c03f64dSVadim Pasternak 		.label = "cpld3_pn",
34778c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET,
34788c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
34798c03f64dSVadim Pasternak 		.mode = 0444,
34808c03f64dSVadim Pasternak 		.regnum = 2,
34818c03f64dSVadim Pasternak 	},
34828c03f64dSVadim Pasternak 	{
34838c03f64dSVadim Pasternak 		.label = "cpld4_pn",
34848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET,
34858c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
34868c03f64dSVadim Pasternak 		.mode = 0444,
34878c03f64dSVadim Pasternak 		.regnum = 2,
34888c03f64dSVadim Pasternak 	},
34898c03f64dSVadim Pasternak 	{
34908c03f64dSVadim Pasternak 		.label = "cpld5_pn",
34918c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET,
34928c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
34938c03f64dSVadim Pasternak 		.mode = 0444,
34948c03f64dSVadim Pasternak 		.regnum = 2,
34958c03f64dSVadim Pasternak 	},
34968c03f64dSVadim Pasternak 	{
34978c03f64dSVadim Pasternak 		.label = "cpld1_version_min",
34988c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET,
34998c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
35008c03f64dSVadim Pasternak 		.mode = 0444,
35018c03f64dSVadim Pasternak 	},
35028c03f64dSVadim Pasternak 	{
35038c03f64dSVadim Pasternak 		.label = "cpld2_version_min",
35048c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET,
35058c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
35068c03f64dSVadim Pasternak 		.mode = 0444,
35078c03f64dSVadim Pasternak 	},
35088c03f64dSVadim Pasternak 	{
35098c03f64dSVadim Pasternak 		.label = "cpld3_version_min",
35108c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET,
35118c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
35128c03f64dSVadim Pasternak 		.mode = 0444,
35138c03f64dSVadim Pasternak 	},
35148c03f64dSVadim Pasternak 	{
35158c03f64dSVadim Pasternak 		.label = "cpld4_version_min",
35168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET,
35178c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
35188c03f64dSVadim Pasternak 		.mode = 0444,
35198c03f64dSVadim Pasternak 	},
35208c03f64dSVadim Pasternak 	{
35218c03f64dSVadim Pasternak 		.label = "cpld5_version_min",
35228c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET,
35238c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
35248c03f64dSVadim Pasternak 		.mode = 0444,
35258c03f64dSVadim Pasternak 	},
35268c03f64dSVadim Pasternak 	{
35278c03f64dSVadim Pasternak 		.label = "asic_reset",
35288c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET,
35298c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
35308c03f64dSVadim Pasternak 		.mode = 0200,
35318c03f64dSVadim Pasternak 	},
35328c03f64dSVadim Pasternak 	{
35338c03f64dSVadim Pasternak 		.label = "asic2_reset",
35348c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET,
35358c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
35368c03f64dSVadim Pasternak 		.mode = 0200,
35378c03f64dSVadim Pasternak 	},
35388c03f64dSVadim Pasternak 	{
35398c03f64dSVadim Pasternak 		.label = "erot1_reset",
35408c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET,
35418c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
35428c03f64dSVadim Pasternak 		.mode = 0644,
35438c03f64dSVadim Pasternak 	},
35448c03f64dSVadim Pasternak 	{
35458c03f64dSVadim Pasternak 		.label = "erot2_reset",
35468c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET,
35478c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
35488c03f64dSVadim Pasternak 		.mode = 0644,
35498c03f64dSVadim Pasternak 	},
35508c03f64dSVadim Pasternak 	{
35518c03f64dSVadim Pasternak 		.label = "clk_brd_prog_en",
35528c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
35538c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
35548c03f64dSVadim Pasternak 		.mode = 0644,
35558c03f64dSVadim Pasternak 		.secured = 1,
35568c03f64dSVadim Pasternak 	},
35578c03f64dSVadim Pasternak 	{
35588c03f64dSVadim Pasternak 		.label = "erot1_recovery",
35598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
35608c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
35618c03f64dSVadim Pasternak 		.mode = 0644,
35628c03f64dSVadim Pasternak 	},
35638c03f64dSVadim Pasternak 	{
35648c03f64dSVadim Pasternak 		.label = "erot2_recovery",
35658c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
35668c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
35678c03f64dSVadim Pasternak 		.mode = 0644,
35688c03f64dSVadim Pasternak 	},
35698c03f64dSVadim Pasternak 	{
35708c03f64dSVadim Pasternak 		.label = "erot1_wp",
35718c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
35728c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
35738c03f64dSVadim Pasternak 		.mode = 0644,
35748c03f64dSVadim Pasternak 		.secured = 1,
35758c03f64dSVadim Pasternak 	},
35768c03f64dSVadim Pasternak 	{
35778c03f64dSVadim Pasternak 		.label = "erot2_wp",
35788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET,
35798c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
35808c03f64dSVadim Pasternak 		.mode = 0644,
35818c03f64dSVadim Pasternak 		.secured = 1,
35828c03f64dSVadim Pasternak 	},
35838c03f64dSVadim Pasternak 	{
35848c03f64dSVadim Pasternak 		.label = "reset_long_pb",
35858c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
35868c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
35878c03f64dSVadim Pasternak 		.mode = 0444,
35888c03f64dSVadim Pasternak 	},
35898c03f64dSVadim Pasternak 	{
35908c03f64dSVadim Pasternak 		.label = "reset_short_pb",
35918c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
35928c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
35938c03f64dSVadim Pasternak 		.mode = 0444,
35948c03f64dSVadim Pasternak 	},
35958c03f64dSVadim Pasternak 	{
35968c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_ref",
35978c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
35988c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
35998c03f64dSVadim Pasternak 		.mode = 0444,
36008c03f64dSVadim Pasternak 	},
36018c03f64dSVadim Pasternak 	{
36028c03f64dSVadim Pasternak 		.label = "reset_swb_dc_dc_pwr_fail",
36038c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
36048c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
36058c03f64dSVadim Pasternak 		.mode = 0444,
36068c03f64dSVadim Pasternak 	},
36078c03f64dSVadim Pasternak 	{
36088c03f64dSVadim Pasternak 		.label = "reset_from_asic",
36098c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
36108c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
36118c03f64dSVadim Pasternak 		.mode = 0444,
36128c03f64dSVadim Pasternak 	},
36138c03f64dSVadim Pasternak 	{
36148c03f64dSVadim Pasternak 		.label = "reset_swb_wd",
36158c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
36168c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
36178c03f64dSVadim Pasternak 		.mode = 0444,
36188c03f64dSVadim Pasternak 	},
36198c03f64dSVadim Pasternak 	{
36208c03f64dSVadim Pasternak 		.label = "reset_asic_thermal",
36218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
36228c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
36238c03f64dSVadim Pasternak 		.mode = 0444,
36248c03f64dSVadim Pasternak 	},
36258c03f64dSVadim Pasternak 	{
36268c03f64dSVadim Pasternak 		.label = "reset_sw_reset",
36278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
36288c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
36298c03f64dSVadim Pasternak 		.mode = 0444,
36308c03f64dSVadim Pasternak 	},
36318c03f64dSVadim Pasternak 	{
36328c03f64dSVadim Pasternak 		.label = "reset_comex_pwr_fail",
36338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
36348c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
36358c03f64dSVadim Pasternak 		.mode = 0444,
36368c03f64dSVadim Pasternak 	},
36378c03f64dSVadim Pasternak 	{
36388c03f64dSVadim Pasternak 		.label = "reset_platform",
36398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
36408c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
36418c03f64dSVadim Pasternak 		.mode = 0444,
36428c03f64dSVadim Pasternak 	},
36438c03f64dSVadim Pasternak 	{
36448c03f64dSVadim Pasternak 		.label = "reset_soc",
36458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
36468c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
36478c03f64dSVadim Pasternak 		.mode = 0444,
36488c03f64dSVadim Pasternak 	},
36498c03f64dSVadim Pasternak 	{
36508c03f64dSVadim Pasternak 		.label = "reset_comex_wd",
36518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
36528c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
36538c03f64dSVadim Pasternak 		.mode = 0444,
36548c03f64dSVadim Pasternak 	},
36558c03f64dSVadim Pasternak 	{
36568c03f64dSVadim Pasternak 		.label = "reset_pwr_converter_fail",
36578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36588c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
36598c03f64dSVadim Pasternak 		.mode = 0444,
36608c03f64dSVadim Pasternak 	},
36618c03f64dSVadim Pasternak 	{
36628c03f64dSVadim Pasternak 		.label = "reset_system",
36638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36648c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
36658c03f64dSVadim Pasternak 		.mode = 0444,
36668c03f64dSVadim Pasternak 	},
36678c03f64dSVadim Pasternak 	{
36688c03f64dSVadim Pasternak 		.label = "reset_sw_pwr_off",
36698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36708c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
36718c03f64dSVadim Pasternak 		.mode = 0444,
36728c03f64dSVadim Pasternak 	},
36738c03f64dSVadim Pasternak 	{
36748c03f64dSVadim Pasternak 		.label = "reset_comex_thermal",
36758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36768c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
36778c03f64dSVadim Pasternak 		.mode = 0444,
36788c03f64dSVadim Pasternak 	},
36798c03f64dSVadim Pasternak 	{
36808c03f64dSVadim Pasternak 		.label = "reset_reload_bios",
36818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36828c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
36838c03f64dSVadim Pasternak 		.mode = 0444,
36848c03f64dSVadim Pasternak 	},
36858c03f64dSVadim Pasternak 	{
36868c03f64dSVadim Pasternak 		.label = "reset_ac_pwr_fail",
36878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36888c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
36898c03f64dSVadim Pasternak 		.mode = 0444,
36908c03f64dSVadim Pasternak 	},
36918c03f64dSVadim Pasternak 	{
36928c03f64dSVadim Pasternak 		.label = "reset_ac_ok_fail",
36938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
36948c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
36958c03f64dSVadim Pasternak 		.mode = 0444,
36968c03f64dSVadim Pasternak 	},
36978c03f64dSVadim Pasternak 	{
36988c03f64dSVadim Pasternak 		.label = "psu1_on",
36998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37008c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
37018c03f64dSVadim Pasternak 		.mode = 0200,
37028c03f64dSVadim Pasternak 	},
37038c03f64dSVadim Pasternak 	{
37048c03f64dSVadim Pasternak 		.label = "psu2_on",
37058c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37068c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
37078c03f64dSVadim Pasternak 		.mode = 0200,
37088c03f64dSVadim Pasternak 	},
37098c03f64dSVadim Pasternak 	{
37108c03f64dSVadim Pasternak 		.label = "pwr_cycle",
37118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37128c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
37138c03f64dSVadim Pasternak 		.mode = 0200,
37148c03f64dSVadim Pasternak 	},
37158c03f64dSVadim Pasternak 	{
37168c03f64dSVadim Pasternak 		.label = "pwr_down",
37178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37188c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
37198c03f64dSVadim Pasternak 		.mode = 0200,
37208c03f64dSVadim Pasternak 	},
37218c03f64dSVadim Pasternak 	{
37228c03f64dSVadim Pasternak 		.label = "deep_pwr_cycle",
37238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37248c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
37258c03f64dSVadim Pasternak 		.mode = 0200,
37268c03f64dSVadim Pasternak 	},
37278c03f64dSVadim Pasternak 	{
37288c03f64dSVadim Pasternak 		.label = "latch_reset",
37298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
37308c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
37318c03f64dSVadim Pasternak 		.mode = 0200,
37328c03f64dSVadim Pasternak 	},
37338c03f64dSVadim Pasternak 	{
37348c03f64dSVadim Pasternak 		.label = "jtag_cap",
37358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET,
37368c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_FU_CAP_MASK,
37378c03f64dSVadim Pasternak 		.bit = 1,
37388c03f64dSVadim Pasternak 		.mode = 0444,
37398c03f64dSVadim Pasternak 	},
37408c03f64dSVadim Pasternak 	{
37418c03f64dSVadim Pasternak 		.label = "jtag_enable",
37428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
37438c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
37448c03f64dSVadim Pasternak 		.mode = 0644,
37458c03f64dSVadim Pasternak 	},
37468c03f64dSVadim Pasternak 	{
37478c03f64dSVadim Pasternak 		.label = "dbg1",
37488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET,
37498c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
37508c03f64dSVadim Pasternak 		.mode = 0644,
37518c03f64dSVadim Pasternak 	},
37528c03f64dSVadim Pasternak 	{
37538c03f64dSVadim Pasternak 		.label = "dbg2",
37548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET,
37558c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
37568c03f64dSVadim Pasternak 		.mode = 0644,
37578c03f64dSVadim Pasternak 	},
37588c03f64dSVadim Pasternak 	{
37598c03f64dSVadim Pasternak 		.label = "dbg3",
37608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET,
37618c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
37628c03f64dSVadim Pasternak 		.mode = 0644,
37638c03f64dSVadim Pasternak 	},
37648c03f64dSVadim Pasternak 	{
37658c03f64dSVadim Pasternak 		.label = "dbg4",
37668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET,
37678c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
37688c03f64dSVadim Pasternak 		.mode = 0644,
37698c03f64dSVadim Pasternak 	},
37708c03f64dSVadim Pasternak 	{
37718c03f64dSVadim Pasternak 		.label = "asic_health",
37728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
37738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
37748c03f64dSVadim Pasternak 		.bit = 1,
37758c03f64dSVadim Pasternak 		.mode = 0444,
37768c03f64dSVadim Pasternak 	},
37778c03f64dSVadim Pasternak 	{
37788c03f64dSVadim Pasternak 		.label = "asic2_health",
37798c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET,
37808c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
37818c03f64dSVadim Pasternak 		.bit = 1,
37828c03f64dSVadim Pasternak 		.mode = 0444,
37838c03f64dSVadim Pasternak 	},
37848c03f64dSVadim Pasternak 	{
37858c03f64dSVadim Pasternak 		.label = "fan_dir",
37868c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION,
37878c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
37888c03f64dSVadim Pasternak 		.mode = 0444,
37898c03f64dSVadim Pasternak 	},
37908c03f64dSVadim Pasternak 	{
37918c03f64dSVadim Pasternak 		.label = "bios_safe_mode",
37928c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
37938c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
37948c03f64dSVadim Pasternak 		.mode = 0444,
37958c03f64dSVadim Pasternak 	},
37968c03f64dSVadim Pasternak 	{
37978c03f64dSVadim Pasternak 		.label = "bios_active_image",
37988c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
37998c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
38008c03f64dSVadim Pasternak 		.mode = 0444,
38018c03f64dSVadim Pasternak 	},
38028c03f64dSVadim Pasternak 	{
38038c03f64dSVadim Pasternak 		.label = "bios_auth_fail",
38048c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
38058c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
38068c03f64dSVadim Pasternak 		.mode = 0444,
38078c03f64dSVadim Pasternak 	},
38088c03f64dSVadim Pasternak 	{
38098c03f64dSVadim Pasternak 		.label = "bios_upgrade_fail",
38108c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
38118c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
38128c03f64dSVadim Pasternak 		.mode = 0444,
38138c03f64dSVadim Pasternak 	},
38148c03f64dSVadim Pasternak 	{
38158c03f64dSVadim Pasternak 		.label = "voltreg_update_status",
38168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET,
38178c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK,
38188c03f64dSVadim Pasternak 		.bit = 5,
38198c03f64dSVadim Pasternak 		.mode = 0444,
38208c03f64dSVadim Pasternak 	},
38218c03f64dSVadim Pasternak 	{
38228c03f64dSVadim Pasternak 		.label = "pwr_converter_prog_en",
38238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
38248c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
38258c03f64dSVadim Pasternak 		.mode = 0644,
38268c03f64dSVadim Pasternak 		.secured = 1,
38278c03f64dSVadim Pasternak 	},
38288c03f64dSVadim Pasternak 	{
38298c03f64dSVadim Pasternak 		.label = "vpd_wp",
38308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
38318c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
38328c03f64dSVadim Pasternak 		.mode = 0644,
38338c03f64dSVadim Pasternak 	},
38348c03f64dSVadim Pasternak 	{
38358c03f64dSVadim Pasternak 		.label = "pcie_asic_reset_dis",
38368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
38378c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
38388c03f64dSVadim Pasternak 		.mode = 0644,
38398c03f64dSVadim Pasternak 	},
38408c03f64dSVadim Pasternak 	{
38418c03f64dSVadim Pasternak 		.label = "erot1_ap_reset",
38428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38438c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
38448c03f64dSVadim Pasternak 		.mode = 0444,
38458c03f64dSVadim Pasternak 	},
38468c03f64dSVadim Pasternak 	{
38478c03f64dSVadim Pasternak 		.label = "erot2_ap_reset",
38488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38498c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
38508c03f64dSVadim Pasternak 		.mode = 0444,
38518c03f64dSVadim Pasternak 	},
38528c03f64dSVadim Pasternak 	{
38538c03f64dSVadim Pasternak 		.label = "lid_open",
38548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38558c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
38568c03f64dSVadim Pasternak 		.mode = 0444,
38578c03f64dSVadim Pasternak 	},
38588c03f64dSVadim Pasternak 	{
38598c03f64dSVadim Pasternak 		.label = "clk_brd1_boot_fail",
38608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38618c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
38628c03f64dSVadim Pasternak 		.mode = 0444,
38638c03f64dSVadim Pasternak 	},
38648c03f64dSVadim Pasternak 	{
38658c03f64dSVadim Pasternak 		.label = "clk_brd2_boot_fail",
38668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38678c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
38688c03f64dSVadim Pasternak 		.mode = 0444,
38698c03f64dSVadim Pasternak 	},
38708c03f64dSVadim Pasternak 	{
38718c03f64dSVadim Pasternak 		.label = "clk_brd_fail",
38728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38738c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
38748c03f64dSVadim Pasternak 		.mode = 0444,
38758c03f64dSVadim Pasternak 	},
38768c03f64dSVadim Pasternak 	{
38778c03f64dSVadim Pasternak 		.label = "asic_pg_fail",
38788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET,
38798c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
38808c03f64dSVadim Pasternak 		.mode = 0444,
38818c03f64dSVadim Pasternak 	},
38828c03f64dSVadim Pasternak 	{
38838c03f64dSVadim Pasternak 		.label = "spi_chnl_select",
38848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT,
38858c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
38868c03f64dSVadim Pasternak 		.bit = 1,
38878c03f64dSVadim Pasternak 		.mode = 0644,
38888c03f64dSVadim Pasternak 	},
38898c03f64dSVadim Pasternak 	{
38908c03f64dSVadim Pasternak 		.label = "config1",
38918c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET,
38928c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
38938c03f64dSVadim Pasternak 		.mode = 0444,
38948c03f64dSVadim Pasternak 	},
38958c03f64dSVadim Pasternak 	{
38968c03f64dSVadim Pasternak 		.label = "config2",
38978c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET,
38988c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
38998c03f64dSVadim Pasternak 		.mode = 0444,
39008c03f64dSVadim Pasternak 	},
39018c03f64dSVadim Pasternak 	{
39028c03f64dSVadim Pasternak 		.label = "config3",
39038c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET,
39048c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39058c03f64dSVadim Pasternak 		.mode = 0444,
39068c03f64dSVadim Pasternak 	},
39078c03f64dSVadim Pasternak 	{
39088c03f64dSVadim Pasternak 		.label = "ufm_version",
39098c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET,
39108c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39118c03f64dSVadim Pasternak 		.mode = 0444,
39128c03f64dSVadim Pasternak 	},
39138c03f64dSVadim Pasternak };
39148c03f64dSVadim Pasternak 
39158c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_ng_regs_io_data = {
39168c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_ng_regs_io_data,
39178c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_regs_io_data),
39188c03f64dSVadim Pasternak };
39198c03f64dSVadim Pasternak 
39208c03f64dSVadim Pasternak /* Platform register access for modular systems families data */
39218c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_regs_io_data[] = {
39228c03f64dSVadim Pasternak 	{
39238c03f64dSVadim Pasternak 		.label = "cpld1_version",
39248c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET,
39258c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39268c03f64dSVadim Pasternak 		.mode = 0444,
39278c03f64dSVadim Pasternak 	},
39288c03f64dSVadim Pasternak 	{
39298c03f64dSVadim Pasternak 		.label = "cpld2_version",
39308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET,
39318c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39328c03f64dSVadim Pasternak 		.mode = 0444,
39338c03f64dSVadim Pasternak 	},
39348c03f64dSVadim Pasternak 	{
39358c03f64dSVadim Pasternak 		.label = "cpld3_version",
39368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET,
39378c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39388c03f64dSVadim Pasternak 		.mode = 0444,
39398c03f64dSVadim Pasternak 	},
39408c03f64dSVadim Pasternak 	{
39418c03f64dSVadim Pasternak 		.label = "cpld4_version",
39428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET,
39438c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39448c03f64dSVadim Pasternak 		.mode = 0444,
39458c03f64dSVadim Pasternak 	},
39468c03f64dSVadim Pasternak 	{
39478c03f64dSVadim Pasternak 		.label = "cpld1_pn",
39488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET,
39498c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
39508c03f64dSVadim Pasternak 		.mode = 0444,
39518c03f64dSVadim Pasternak 		.regnum = 2,
39528c03f64dSVadim Pasternak 	},
39538c03f64dSVadim Pasternak 	{
39548c03f64dSVadim Pasternak 		.label = "cpld2_pn",
39558c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET,
39568c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
39578c03f64dSVadim Pasternak 		.mode = 0444,
39588c03f64dSVadim Pasternak 		.regnum = 2,
39598c03f64dSVadim Pasternak 	},
39608c03f64dSVadim Pasternak 	{
39618c03f64dSVadim Pasternak 		.label = "cpld3_pn",
39628c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET,
39638c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
39648c03f64dSVadim Pasternak 		.mode = 0444,
39658c03f64dSVadim Pasternak 		.regnum = 2,
39668c03f64dSVadim Pasternak 	},
39678c03f64dSVadim Pasternak 	{
39688c03f64dSVadim Pasternak 		.label = "cpld4_pn",
39698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET,
39708c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
39718c03f64dSVadim Pasternak 		.mode = 0444,
39728c03f64dSVadim Pasternak 		.regnum = 2,
39738c03f64dSVadim Pasternak 	},
39748c03f64dSVadim Pasternak 	{
39758c03f64dSVadim Pasternak 		.label = "cpld1_version_min",
39768c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET,
39778c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39788c03f64dSVadim Pasternak 		.mode = 0444,
39798c03f64dSVadim Pasternak 	},
39808c03f64dSVadim Pasternak 	{
39818c03f64dSVadim Pasternak 		.label = "cpld2_version_min",
39828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET,
39838c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39848c03f64dSVadim Pasternak 		.mode = 0444,
39858c03f64dSVadim Pasternak 	},
39868c03f64dSVadim Pasternak 	{
39878c03f64dSVadim Pasternak 		.label = "cpld3_version_min",
39888c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET,
39898c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39908c03f64dSVadim Pasternak 		.mode = 0444,
39918c03f64dSVadim Pasternak 	},
39928c03f64dSVadim Pasternak 	{
39938c03f64dSVadim Pasternak 		.label = "cpld4_version_min",
39948c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET,
39958c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
39968c03f64dSVadim Pasternak 		.mode = 0444,
39978c03f64dSVadim Pasternak 	},
39988c03f64dSVadim Pasternak 	{
39998c03f64dSVadim Pasternak 		.label = "lc1_enable",
40008c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40018c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
40028c03f64dSVadim Pasternak 		.mode = 0644,
40038c03f64dSVadim Pasternak 	},
40048c03f64dSVadim Pasternak 	{
40058c03f64dSVadim Pasternak 		.label = "lc2_enable",
40068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40078c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
40088c03f64dSVadim Pasternak 		.mode = 0644,
40098c03f64dSVadim Pasternak 	},
40108c03f64dSVadim Pasternak 	{
40118c03f64dSVadim Pasternak 		.label = "lc3_enable",
40128c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40138c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
40148c03f64dSVadim Pasternak 		.mode = 0644,
40158c03f64dSVadim Pasternak 	},
40168c03f64dSVadim Pasternak 	{
40178c03f64dSVadim Pasternak 		.label = "lc4_enable",
40188c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40198c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
40208c03f64dSVadim Pasternak 		.mode = 0644,
40218c03f64dSVadim Pasternak 	},
40228c03f64dSVadim Pasternak 	{
40238c03f64dSVadim Pasternak 		.label = "lc5_enable",
40248c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40258c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
40268c03f64dSVadim Pasternak 		.mode = 0644,
40278c03f64dSVadim Pasternak 	},
40288c03f64dSVadim Pasternak 	{
40298c03f64dSVadim Pasternak 		.label = "lc6_enable",
40308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40318c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
40328c03f64dSVadim Pasternak 		.mode = 0644,
40338c03f64dSVadim Pasternak 	},
40348c03f64dSVadim Pasternak 	{
40358c03f64dSVadim Pasternak 		.label = "lc7_enable",
40368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40378c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
40388c03f64dSVadim Pasternak 		.mode = 0644,
40398c03f64dSVadim Pasternak 	},
40408c03f64dSVadim Pasternak 	{
40418c03f64dSVadim Pasternak 		.label = "lc8_enable",
40428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET,
40438c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
40448c03f64dSVadim Pasternak 		.mode = 0644,
40458c03f64dSVadim Pasternak 	},
40468c03f64dSVadim Pasternak 	{
40478c03f64dSVadim Pasternak 		.label = "reset_long_pb",
40488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
40498c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
40508c03f64dSVadim Pasternak 		.mode = 0444,
40518c03f64dSVadim Pasternak 	},
40528c03f64dSVadim Pasternak 	{
40538c03f64dSVadim Pasternak 		.label = "reset_short_pb",
40548c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
40558c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
40568c03f64dSVadim Pasternak 		.mode = 0444,
40578c03f64dSVadim Pasternak 	},
40588c03f64dSVadim Pasternak 	{
40598c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_fu",
40608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
40618c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
40628c03f64dSVadim Pasternak 		.mode = 0444,
40638c03f64dSVadim Pasternak 	},
40648c03f64dSVadim Pasternak 	{
40658c03f64dSVadim Pasternak 		.label = "reset_mgmt_dc_dc_pwr_fail",
40668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
40678c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
40688c03f64dSVadim Pasternak 		.mode = 0444,
40698c03f64dSVadim Pasternak 	},
40708c03f64dSVadim Pasternak 	{
40718c03f64dSVadim Pasternak 		.label = "reset_sys_comex_bios",
40728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
40738c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
40748c03f64dSVadim Pasternak 		.mode = 0444,
40758c03f64dSVadim Pasternak 	},
40768c03f64dSVadim Pasternak 	{
40778c03f64dSVadim Pasternak 		.label = "reset_sw_reset",
40788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
40798c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
40808c03f64dSVadim Pasternak 		.mode = 0444,
40818c03f64dSVadim Pasternak 	},
40828c03f64dSVadim Pasternak 	{
40838c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_reload",
40848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
40858c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
40868c03f64dSVadim Pasternak 		.mode = 0444,
40878c03f64dSVadim Pasternak 	},
40888c03f64dSVadim Pasternak 	{
40898c03f64dSVadim Pasternak 		.label = "reset_comex_pwr_fail",
40908c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
40918c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
40928c03f64dSVadim Pasternak 		.mode = 0444,
40938c03f64dSVadim Pasternak 	},
40948c03f64dSVadim Pasternak 	{
40958c03f64dSVadim Pasternak 		.label = "reset_platform",
40968c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
40978c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
40988c03f64dSVadim Pasternak 		.mode = 0444,
40998c03f64dSVadim Pasternak 	},
41008c03f64dSVadim Pasternak 	{
41018c03f64dSVadim Pasternak 		.label = "reset_soc",
41028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
41038c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
41048c03f64dSVadim Pasternak 		.mode = 0444,
41058c03f64dSVadim Pasternak 	},
41068c03f64dSVadim Pasternak 	{
41078c03f64dSVadim Pasternak 		.label = "reset_pwr_off_from_carrier",
41088c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
41098c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
41108c03f64dSVadim Pasternak 		.mode = 0444,
41118c03f64dSVadim Pasternak 	},
41128c03f64dSVadim Pasternak 	{
41138c03f64dSVadim Pasternak 		.label = "reset_swb_wd",
41148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
41158c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
41168c03f64dSVadim Pasternak 		.mode = 0444,
41178c03f64dSVadim Pasternak 	},
41188c03f64dSVadim Pasternak 	{
41198c03f64dSVadim Pasternak 		.label = "reset_swb_aux_pwr_or_fu",
41208c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
41218c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
41228c03f64dSVadim Pasternak 		.mode = 0444,
41238c03f64dSVadim Pasternak 	},
41248c03f64dSVadim Pasternak 	{
41258c03f64dSVadim Pasternak 		.label = "reset_swb_dc_dc_pwr_fail",
41268c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
41278c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
41288c03f64dSVadim Pasternak 		.mode = 0444,
41298c03f64dSVadim Pasternak 	},
41308c03f64dSVadim Pasternak 	{
41318c03f64dSVadim Pasternak 		.label = "reset_swb_12v_fail",
41328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
41338c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
41348c03f64dSVadim Pasternak 		.mode = 0444,
41358c03f64dSVadim Pasternak 	},
41368c03f64dSVadim Pasternak 	{
41378c03f64dSVadim Pasternak 		.label = "reset_system",
41388c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
41398c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
41408c03f64dSVadim Pasternak 		.mode = 0444,
41418c03f64dSVadim Pasternak 	},
41428c03f64dSVadim Pasternak 	{
41438c03f64dSVadim Pasternak 		.label = "reset_thermal_spc_or_pciesw",
41448c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
41458c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
41468c03f64dSVadim Pasternak 		.mode = 0444,
41478c03f64dSVadim Pasternak 	},
41488c03f64dSVadim Pasternak 	{
41498c03f64dSVadim Pasternak 		.label = "bios_safe_mode",
41508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
41518c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
41528c03f64dSVadim Pasternak 		.mode = 0444,
41538c03f64dSVadim Pasternak 	},
41548c03f64dSVadim Pasternak 	{
41558c03f64dSVadim Pasternak 		.label = "bios_active_image",
41568c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
41578c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
41588c03f64dSVadim Pasternak 		.mode = 0444,
41598c03f64dSVadim Pasternak 	},
41608c03f64dSVadim Pasternak 	{
41618c03f64dSVadim Pasternak 		.label = "bios_auth_fail",
41628c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
41638c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
41648c03f64dSVadim Pasternak 		.mode = 0444,
41658c03f64dSVadim Pasternak 	},
41668c03f64dSVadim Pasternak 	{
41678c03f64dSVadim Pasternak 		.label = "bios_upgrade_fail",
41688c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
41698c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
41708c03f64dSVadim Pasternak 		.mode = 0444,
41718c03f64dSVadim Pasternak 	},
41728c03f64dSVadim Pasternak 	{
41738c03f64dSVadim Pasternak 		.label = "voltreg_update_status",
41748c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET,
41758c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK,
41768c03f64dSVadim Pasternak 		.bit = 5,
41778c03f64dSVadim Pasternak 		.mode = 0444,
41788c03f64dSVadim Pasternak 	},
41798c03f64dSVadim Pasternak 	{
41808c03f64dSVadim Pasternak 		.label = "vpd_wp",
41818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
41828c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
41838c03f64dSVadim Pasternak 		.mode = 0644,
41848c03f64dSVadim Pasternak 	},
41858c03f64dSVadim Pasternak 	{
41868c03f64dSVadim Pasternak 		.label = "pcie_asic_reset_dis",
41878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
41888c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
41898c03f64dSVadim Pasternak 		.mode = 0644,
41908c03f64dSVadim Pasternak 	},
41918c03f64dSVadim Pasternak 	{
41928c03f64dSVadim Pasternak 		.label = "shutdown_unlock",
41938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
41948c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
41958c03f64dSVadim Pasternak 		.mode = 0644,
41968c03f64dSVadim Pasternak 	},
41978c03f64dSVadim Pasternak 	{
41988c03f64dSVadim Pasternak 		.label = "lc1_rst_mask",
41998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42008c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
42018c03f64dSVadim Pasternak 		.mode = 0200,
42028c03f64dSVadim Pasternak 	},
42038c03f64dSVadim Pasternak 	{
42048c03f64dSVadim Pasternak 		.label = "lc2_rst_mask",
42058c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42068c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
42078c03f64dSVadim Pasternak 		.mode = 0200,
42088c03f64dSVadim Pasternak 	},
42098c03f64dSVadim Pasternak 	{
42108c03f64dSVadim Pasternak 		.label = "lc3_rst_mask",
42118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42128c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
42138c03f64dSVadim Pasternak 		.mode = 0200,
42148c03f64dSVadim Pasternak 	},
42158c03f64dSVadim Pasternak 	{
42168c03f64dSVadim Pasternak 		.label = "lc4_rst_mask",
42178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42188c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
42198c03f64dSVadim Pasternak 		.mode = 0200,
42208c03f64dSVadim Pasternak 	},
42218c03f64dSVadim Pasternak 	{
42228c03f64dSVadim Pasternak 		.label = "lc5_rst_mask",
42238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42248c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
42258c03f64dSVadim Pasternak 		.mode = 0200,
42268c03f64dSVadim Pasternak 	},
42278c03f64dSVadim Pasternak 	{
42288c03f64dSVadim Pasternak 		.label = "lc6_rst_mask",
42298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42308c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
42318c03f64dSVadim Pasternak 		.mode = 0200,
42328c03f64dSVadim Pasternak 	},
42338c03f64dSVadim Pasternak 	{
42348c03f64dSVadim Pasternak 		.label = "lc7_rst_mask",
42358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42368c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
42378c03f64dSVadim Pasternak 		.mode = 0200,
42388c03f64dSVadim Pasternak 	},
42398c03f64dSVadim Pasternak 	{
42408c03f64dSVadim Pasternak 		.label = "lc8_rst_mask",
42418c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET,
42428c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
42438c03f64dSVadim Pasternak 		.mode = 0200,
42448c03f64dSVadim Pasternak 	},
42458c03f64dSVadim Pasternak 	{
42468c03f64dSVadim Pasternak 		.label = "psu1_on",
42478c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42488c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
42498c03f64dSVadim Pasternak 		.mode = 0200,
42508c03f64dSVadim Pasternak 	},
42518c03f64dSVadim Pasternak 	{
42528c03f64dSVadim Pasternak 		.label = "psu2_on",
42538c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42548c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
42558c03f64dSVadim Pasternak 		.mode = 0200,
42568c03f64dSVadim Pasternak 	},
42578c03f64dSVadim Pasternak 	{
42588c03f64dSVadim Pasternak 		.label = "pwr_cycle",
42598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42608c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
42618c03f64dSVadim Pasternak 		.mode = 0200,
42628c03f64dSVadim Pasternak 	},
42638c03f64dSVadim Pasternak 	{
42648c03f64dSVadim Pasternak 		.label = "pwr_down",
42658c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42668c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
42678c03f64dSVadim Pasternak 		.mode = 0200,
42688c03f64dSVadim Pasternak 	},
42698c03f64dSVadim Pasternak 	{
42708c03f64dSVadim Pasternak 		.label = "psu3_on",
42718c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42728c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
42738c03f64dSVadim Pasternak 		.mode = 0200,
42748c03f64dSVadim Pasternak 	},
42758c03f64dSVadim Pasternak 	{
42768c03f64dSVadim Pasternak 		.label = "psu4_on",
42778c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42788c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
42798c03f64dSVadim Pasternak 		.mode = 0200,
42808c03f64dSVadim Pasternak 	},
42818c03f64dSVadim Pasternak 	{
42828c03f64dSVadim Pasternak 		.label = "auto_power_mode",
42838c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42848c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
42858c03f64dSVadim Pasternak 		.mode = 0644,
42868c03f64dSVadim Pasternak 	},
42878c03f64dSVadim Pasternak 	{
42888c03f64dSVadim Pasternak 		.label = "pm_mgmt_en",
42898c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
42908c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
42918c03f64dSVadim Pasternak 		.mode = 0644,
42928c03f64dSVadim Pasternak 	},
42938c03f64dSVadim Pasternak 	{
42948c03f64dSVadim Pasternak 		.label = "jtag_enable",
42958c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE,
42968c03f64dSVadim Pasternak 		.mask = GENMASK(3, 0),
42978c03f64dSVadim Pasternak 		.bit = 1,
42988c03f64dSVadim Pasternak 		.mode = 0644,
42998c03f64dSVadim Pasternak 	},
43008c03f64dSVadim Pasternak 	{
43018c03f64dSVadim Pasternak 		.label = "safe_bios_dis",
43028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET,
43038c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
43048c03f64dSVadim Pasternak 		.mode = 0644,
43058c03f64dSVadim Pasternak 	},
43068c03f64dSVadim Pasternak 	{
43078c03f64dSVadim Pasternak 		.label = "safe_bios_dis_wp",
43088c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET,
43098c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
43108c03f64dSVadim Pasternak 		.mode = 0644,
43118c03f64dSVadim Pasternak 	},
43128c03f64dSVadim Pasternak 	{
43138c03f64dSVadim Pasternak 		.label = "asic_health",
43148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET,
43158c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_ASIC_MASK,
43168c03f64dSVadim Pasternak 		.bit = 1,
43178c03f64dSVadim Pasternak 		.mode = 0444,
43188c03f64dSVadim Pasternak 	},
43198c03f64dSVadim Pasternak 	{
43208c03f64dSVadim Pasternak 		.label = "fan_dir",
43218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION,
43228c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
43238c03f64dSVadim Pasternak 		.mode = 0444,
43248c03f64dSVadim Pasternak 	},
43258c03f64dSVadim Pasternak 	{
43268c03f64dSVadim Pasternak 		.label = "lc1_pwr",
43278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43288c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
43298c03f64dSVadim Pasternak 		.mode = 0644,
43308c03f64dSVadim Pasternak 	},
43318c03f64dSVadim Pasternak 	{
43328c03f64dSVadim Pasternak 		.label = "lc2_pwr",
43338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43348c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
43358c03f64dSVadim Pasternak 		.mode = 0644,
43368c03f64dSVadim Pasternak 	},
43378c03f64dSVadim Pasternak 	{
43388c03f64dSVadim Pasternak 		.label = "lc3_pwr",
43398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43408c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
43418c03f64dSVadim Pasternak 		.mode = 0644,
43428c03f64dSVadim Pasternak 	},
43438c03f64dSVadim Pasternak 	{
43448c03f64dSVadim Pasternak 		.label = "lc4_pwr",
43458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43468c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
43478c03f64dSVadim Pasternak 		.mode = 0644,
43488c03f64dSVadim Pasternak 	},
43498c03f64dSVadim Pasternak 	{
43508c03f64dSVadim Pasternak 		.label = "lc5_pwr",
43518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43528c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
43538c03f64dSVadim Pasternak 		.mode = 0644,
43548c03f64dSVadim Pasternak 	},
43558c03f64dSVadim Pasternak 	{
43568c03f64dSVadim Pasternak 		.label = "lc6_pwr",
43578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43588c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
43598c03f64dSVadim Pasternak 		.mode = 0644,
43608c03f64dSVadim Pasternak 	},
43618c03f64dSVadim Pasternak 	{
43628c03f64dSVadim Pasternak 		.label = "lc7_pwr",
43638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43648c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
43658c03f64dSVadim Pasternak 		.mode = 0644,
43668c03f64dSVadim Pasternak 	},
43678c03f64dSVadim Pasternak 	{
43688c03f64dSVadim Pasternak 		.label = "lc8_pwr",
43698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON,
43708c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
43718c03f64dSVadim Pasternak 		.mode = 0644,
43728c03f64dSVadim Pasternak 	},
43738c03f64dSVadim Pasternak 	{
43748c03f64dSVadim Pasternak 		.label = "config1",
43758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET,
43768c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
43778c03f64dSVadim Pasternak 		.mode = 0444,
43788c03f64dSVadim Pasternak 	},
43798c03f64dSVadim Pasternak 	{
43808c03f64dSVadim Pasternak 		.label = "config2",
43818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET,
43828c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
43838c03f64dSVadim Pasternak 		.mode = 0444,
43848c03f64dSVadim Pasternak 	},
43858c03f64dSVadim Pasternak 	{
43868c03f64dSVadim Pasternak 		.label = "config3",
43878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET,
43888c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
43898c03f64dSVadim Pasternak 		.mode = 0444,
43908c03f64dSVadim Pasternak 	},
43918c03f64dSVadim Pasternak 	{
43928c03f64dSVadim Pasternak 		.label = "ufm_version",
43938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET,
43948c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
43958c03f64dSVadim Pasternak 		.mode = 0444,
43968c03f64dSVadim Pasternak 	},
43978c03f64dSVadim Pasternak };
43988c03f64dSVadim Pasternak 
43998c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_modular_regs_io_data = {
44008c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_modular_regs_io_data,
44018c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_regs_io_data),
44028c03f64dSVadim Pasternak };
44038c03f64dSVadim Pasternak 
44048c03f64dSVadim Pasternak /* Platform register access for chassis blade systems family data */
44058c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_chassis_blade_regs_io_data[] = {
44068c03f64dSVadim Pasternak 	{
44078c03f64dSVadim Pasternak 		.label = "cpld1_version",
44088c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET,
44098c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
44108c03f64dSVadim Pasternak 		.mode = 0444,
44118c03f64dSVadim Pasternak 	},
44128c03f64dSVadim Pasternak 	{
44138c03f64dSVadim Pasternak 		.label = "cpld1_pn",
44148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET,
44158c03f64dSVadim Pasternak 		.bit = GENMASK(15, 0),
44168c03f64dSVadim Pasternak 		.mode = 0444,
44178c03f64dSVadim Pasternak 		.regnum = 2,
44188c03f64dSVadim Pasternak 	},
44198c03f64dSVadim Pasternak 	{
44208c03f64dSVadim Pasternak 		.label = "cpld1_version_min",
44218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET,
44228c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
44238c03f64dSVadim Pasternak 		.mode = 0444,
44248c03f64dSVadim Pasternak 	},
44258c03f64dSVadim Pasternak 	{
44268c03f64dSVadim Pasternak 		.label = "reset_aux_pwr_or_ref",
44278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
44288c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
44298c03f64dSVadim Pasternak 		.mode = 0444,
44308c03f64dSVadim Pasternak 	},
44318c03f64dSVadim Pasternak 	{
44328c03f64dSVadim Pasternak 		.label = "reset_from_comex",
44338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
44348c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
44358c03f64dSVadim Pasternak 		.mode = 0444,
44368c03f64dSVadim Pasternak 	},
44378c03f64dSVadim Pasternak 	{
44388c03f64dSVadim Pasternak 		.label = "reset_comex_pwr_fail",
44398c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
44408c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
44418c03f64dSVadim Pasternak 		.mode = 0444,
44428c03f64dSVadim Pasternak 	},
44438c03f64dSVadim Pasternak 	{
44448c03f64dSVadim Pasternak 		.label = "reset_platform",
44458c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
44468c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
44478c03f64dSVadim Pasternak 		.mode = 0444,
44488c03f64dSVadim Pasternak 	},
44498c03f64dSVadim Pasternak 	{
44508c03f64dSVadim Pasternak 		.label = "reset_soc",
44518c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
44528c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
44538c03f64dSVadim Pasternak 		.mode = 0444,
44548c03f64dSVadim Pasternak 	},
44558c03f64dSVadim Pasternak 	{
44568c03f64dSVadim Pasternak 		.label = "reset_comex_wd",
44578c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET,
44588c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
44598c03f64dSVadim Pasternak 		.mode = 0444,
44608c03f64dSVadim Pasternak 	},
44618c03f64dSVadim Pasternak 	{
44628c03f64dSVadim Pasternak 		.label = "reset_voltmon_upgrade_fail",
44638c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44648c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
44658c03f64dSVadim Pasternak 		.mode = 0444,
44668c03f64dSVadim Pasternak 	},
44678c03f64dSVadim Pasternak 	{
44688c03f64dSVadim Pasternak 		.label = "reset_system",
44698c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44708c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(1),
44718c03f64dSVadim Pasternak 		.mode = 0444,
44728c03f64dSVadim Pasternak 	},
44738c03f64dSVadim Pasternak 	{
44748c03f64dSVadim Pasternak 		.label = "reset_sw_pwr_off",
44758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44768c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
44778c03f64dSVadim Pasternak 		.mode = 0444,
44788c03f64dSVadim Pasternak 	},
44798c03f64dSVadim Pasternak 	{
44808c03f64dSVadim Pasternak 		.label = "reset_comex_thermal",
44818c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44828c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
44838c03f64dSVadim Pasternak 		.mode = 0444,
44848c03f64dSVadim Pasternak 	},
44858c03f64dSVadim Pasternak 	{
44868c03f64dSVadim Pasternak 		.label = "reset_reload_bios",
44878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44888c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
44898c03f64dSVadim Pasternak 		.mode = 0444,
44908c03f64dSVadim Pasternak 	},
44918c03f64dSVadim Pasternak 	{
44928c03f64dSVadim Pasternak 		.label = "reset_ac_pwr_fail",
44938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
44948c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
44958c03f64dSVadim Pasternak 		.mode = 0444,
44968c03f64dSVadim Pasternak 	},
44978c03f64dSVadim Pasternak 	{
44988c03f64dSVadim Pasternak 		.label = "reset_long_pwr_pb",
44998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET,
45008c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
45018c03f64dSVadim Pasternak 		.mode = 0444,
45028c03f64dSVadim Pasternak 	},
45038c03f64dSVadim Pasternak 	{
45048c03f64dSVadim Pasternak 		.label = "pwr_cycle",
45058c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
45068c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(2),
45078c03f64dSVadim Pasternak 		.mode = 0200,
45088c03f64dSVadim Pasternak 	},
45098c03f64dSVadim Pasternak 	{
45108c03f64dSVadim Pasternak 		.label = "pwr_down",
45118c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET,
45128c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
45138c03f64dSVadim Pasternak 		.mode = 0200,
45148c03f64dSVadim Pasternak 	},
45158c03f64dSVadim Pasternak 	{
45168c03f64dSVadim Pasternak 		.label = "global_wp_request",
45178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
45188c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
45198c03f64dSVadim Pasternak 		.mode = 0644,
45208c03f64dSVadim Pasternak 	},
45218c03f64dSVadim Pasternak 	{
45228c03f64dSVadim Pasternak 		.label = "jtag_enable",
45238c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
45248c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
45258c03f64dSVadim Pasternak 		.mode = 0644,
45268c03f64dSVadim Pasternak 	},
45278c03f64dSVadim Pasternak 	{
45288c03f64dSVadim Pasternak 		.label = "comm_chnl_ready",
45298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET,
45308c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
45318c03f64dSVadim Pasternak 		.mode = 0200,
45328c03f64dSVadim Pasternak 	},
45338c03f64dSVadim Pasternak 	{
45348c03f64dSVadim Pasternak 		.label = "bios_safe_mode",
45358c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
45368c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
45378c03f64dSVadim Pasternak 		.mode = 0444,
45388c03f64dSVadim Pasternak 	},
45398c03f64dSVadim Pasternak 	{
45408c03f64dSVadim Pasternak 		.label = "bios_active_image",
45418c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
45428c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(5),
45438c03f64dSVadim Pasternak 		.mode = 0444,
45448c03f64dSVadim Pasternak 	},
45458c03f64dSVadim Pasternak 	{
45468c03f64dSVadim Pasternak 		.label = "bios_auth_fail",
45478c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
45488c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
45498c03f64dSVadim Pasternak 		.mode = 0444,
45508c03f64dSVadim Pasternak 	},
45518c03f64dSVadim Pasternak 	{
45528c03f64dSVadim Pasternak 		.label = "bios_upgrade_fail",
45538c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET,
45548c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(7),
45558c03f64dSVadim Pasternak 		.mode = 0444,
45568c03f64dSVadim Pasternak 	},
45578c03f64dSVadim Pasternak 	{
45588c03f64dSVadim Pasternak 		.label = "voltreg_update_status",
45598c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET,
45608c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK,
45618c03f64dSVadim Pasternak 		.bit = 5,
45628c03f64dSVadim Pasternak 		.mode = 0444,
45638c03f64dSVadim Pasternak 	},
45648c03f64dSVadim Pasternak 	{
45658c03f64dSVadim Pasternak 		.label = "vpd_wp",
45668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
45678c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(3),
45688c03f64dSVadim Pasternak 		.mode = 0644,
45698c03f64dSVadim Pasternak 	},
45708c03f64dSVadim Pasternak 	{
45718c03f64dSVadim Pasternak 		.label = "pcie_asic_reset_dis",
45728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET,
45738c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(4),
45748c03f64dSVadim Pasternak 		.mode = 0644,
45758c03f64dSVadim Pasternak 	},
45768c03f64dSVadim Pasternak 	{
45778c03f64dSVadim Pasternak 		.label = "global_wp_response",
45788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET,
45798c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(0),
45808c03f64dSVadim Pasternak 		.mode = 0444,
45818c03f64dSVadim Pasternak 	},
45828c03f64dSVadim Pasternak 	{
45838c03f64dSVadim Pasternak 		.label = "config1",
45848c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET,
45858c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
45868c03f64dSVadim Pasternak 		.mode = 0444,
45878c03f64dSVadim Pasternak 	},
45888c03f64dSVadim Pasternak 	{
45898c03f64dSVadim Pasternak 		.label = "config2",
45908c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET,
45918c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
45928c03f64dSVadim Pasternak 		.mode = 0444,
45938c03f64dSVadim Pasternak 	},
45948c03f64dSVadim Pasternak 	{
45958c03f64dSVadim Pasternak 		.label = "config3",
45968c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET,
45978c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
45988c03f64dSVadim Pasternak 		.mode = 0444,
45998c03f64dSVadim Pasternak 	},
46008c03f64dSVadim Pasternak 	{
46018c03f64dSVadim Pasternak 		.label = "ufm_version",
46028c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET,
46038c03f64dSVadim Pasternak 		.bit = GENMASK(7, 0),
46048c03f64dSVadim Pasternak 		.mode = 0444,
46058c03f64dSVadim Pasternak 	},
46068c03f64dSVadim Pasternak };
46078c03f64dSVadim Pasternak 
46088c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_chassis_blade_regs_io_data = {
46098c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_chassis_blade_regs_io_data,
46108c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_chassis_blade_regs_io_data),
46118c03f64dSVadim Pasternak };
46128c03f64dSVadim Pasternak 
46138c03f64dSVadim Pasternak /* Platform FAN default */
46148c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_data[] = {
46158c03f64dSVadim Pasternak 	{
46168c03f64dSVadim Pasternak 		.label = "pwm1",
46178c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET,
46188c03f64dSVadim Pasternak 	},
46198c03f64dSVadim Pasternak 	{
46208c03f64dSVadim Pasternak 		.label = "pwm2",
46218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET,
46228c03f64dSVadim Pasternak 	},
46238c03f64dSVadim Pasternak 	{
46248c03f64dSVadim Pasternak 		.label = "pwm3",
46258c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET,
46268c03f64dSVadim Pasternak 	},
46278c03f64dSVadim Pasternak 	{
46288c03f64dSVadim Pasternak 		.label = "pwm4",
46298c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET,
46308c03f64dSVadim Pasternak 	},
46318c03f64dSVadim Pasternak 	{
46328c03f64dSVadim Pasternak 		.label = "tacho1",
46338c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET,
46348c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46358c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46368c03f64dSVadim Pasternak 		.bit = BIT(0),
46378c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46388c03f64dSVadim Pasternak 
46398c03f64dSVadim Pasternak 	},
46408c03f64dSVadim Pasternak 	{
46418c03f64dSVadim Pasternak 		.label = "tacho2",
46428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET,
46438c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46448c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46458c03f64dSVadim Pasternak 		.bit = BIT(1),
46468c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46478c03f64dSVadim Pasternak 	},
46488c03f64dSVadim Pasternak 	{
46498c03f64dSVadim Pasternak 		.label = "tacho3",
46508c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET,
46518c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46528c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46538c03f64dSVadim Pasternak 		.bit = BIT(2),
46548c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46558c03f64dSVadim Pasternak 	},
46568c03f64dSVadim Pasternak 	{
46578c03f64dSVadim Pasternak 		.label = "tacho4",
46588c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET,
46598c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46608c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46618c03f64dSVadim Pasternak 		.bit = BIT(3),
46628c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46638c03f64dSVadim Pasternak 	},
46648c03f64dSVadim Pasternak 	{
46658c03f64dSVadim Pasternak 		.label = "tacho5",
46668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET,
46678c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46688c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46698c03f64dSVadim Pasternak 		.bit = BIT(4),
46708c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46718c03f64dSVadim Pasternak 	},
46728c03f64dSVadim Pasternak 	{
46738c03f64dSVadim Pasternak 		.label = "tacho6",
46748c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET,
46758c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46768c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46778c03f64dSVadim Pasternak 		.bit = BIT(5),
46788c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46798c03f64dSVadim Pasternak 	},
46808c03f64dSVadim Pasternak 	{
46818c03f64dSVadim Pasternak 		.label = "tacho7",
46828c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET,
46838c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46848c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46858c03f64dSVadim Pasternak 		.bit = BIT(6),
46868c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46878c03f64dSVadim Pasternak 	},
46888c03f64dSVadim Pasternak 	{
46898c03f64dSVadim Pasternak 		.label = "tacho8",
46908c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET,
46918c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
46928c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET,
46938c03f64dSVadim Pasternak 		.bit = BIT(7),
46948c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
46958c03f64dSVadim Pasternak 	},
46968c03f64dSVadim Pasternak 	{
46978c03f64dSVadim Pasternak 		.label = "tacho9",
46988c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET,
46998c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47008c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47018c03f64dSVadim Pasternak 		.bit = BIT(0),
47028c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
47038c03f64dSVadim Pasternak 	},
47048c03f64dSVadim Pasternak 	{
47058c03f64dSVadim Pasternak 		.label = "tacho10",
47068c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET,
47078c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47088c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47098c03f64dSVadim Pasternak 		.bit = BIT(1),
47108c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
47118c03f64dSVadim Pasternak 	},
47128c03f64dSVadim Pasternak 	{
47138c03f64dSVadim Pasternak 		.label = "tacho11",
47148c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET,
47158c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47168c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47178c03f64dSVadim Pasternak 		.bit = BIT(2),
47188c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
47198c03f64dSVadim Pasternak 	},
47208c03f64dSVadim Pasternak 	{
47218c03f64dSVadim Pasternak 		.label = "tacho12",
47228c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET,
47238c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47248c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47258c03f64dSVadim Pasternak 		.bit = BIT(3),
47268c03f64dSVadim Pasternak 		.reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET,
47278c03f64dSVadim Pasternak 	},
47288c03f64dSVadim Pasternak 	{
47298c03f64dSVadim Pasternak 		.label = "tacho13",
47308c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET,
47318c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47328c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47338c03f64dSVadim Pasternak 		.bit = BIT(4),
47348c03f64dSVadim Pasternak 	},
47358c03f64dSVadim Pasternak 	{
47368c03f64dSVadim Pasternak 		.label = "tacho14",
47378c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET,
47388c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0),
47398c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET,
47408c03f64dSVadim Pasternak 		.bit = BIT(5),
47418c03f64dSVadim Pasternak 	},
47428c03f64dSVadim Pasternak 	{
47438c03f64dSVadim Pasternak 		.label = "conf",
47448c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET,
47458c03f64dSVadim Pasternak 	},
47468c03f64dSVadim Pasternak };
47478c03f64dSVadim Pasternak 
47488c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_fan_data = {
47498c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_default_fan_data,
47508c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_data),
47518c03f64dSVadim Pasternak 		.capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET,
47528c03f64dSVadim Pasternak };
47538c03f64dSVadim Pasternak 
47548c03f64dSVadim Pasternak /* Watchdog type1: hardware implementation version1
47558c03f64dSVadim Pasternak  * (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140 systems).
47568c03f64dSVadim Pasternak  */
47578c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type1[] = {
47588c03f64dSVadim Pasternak 	{
47598c03f64dSVadim Pasternak 		.label = "action",
47608c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET,
47618c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK,
47628c03f64dSVadim Pasternak 		.bit = 0,
47638c03f64dSVadim Pasternak 	},
47648c03f64dSVadim Pasternak 	{
47658c03f64dSVadim Pasternak 		.label = "timeout",
47668c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET,
47678c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE1_TO_MASK,
47688c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT,
47698c03f64dSVadim Pasternak 	},
47708c03f64dSVadim Pasternak 	{
47718c03f64dSVadim Pasternak 		.label = "ping",
47728c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET,
47738c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD1_CLEAR_MASK,
47748c03f64dSVadim Pasternak 		.bit = 0,
47758c03f64dSVadim Pasternak 	},
47768c03f64dSVadim Pasternak 	{
47778c03f64dSVadim Pasternak 		.label = "reset",
47788c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
47798c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
47808c03f64dSVadim Pasternak 		.bit = 6,
47818c03f64dSVadim Pasternak 	},
47828c03f64dSVadim Pasternak };
47838c03f64dSVadim Pasternak 
47848c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type1[] = {
47858c03f64dSVadim Pasternak 	{
47868c03f64dSVadim Pasternak 		.label = "action",
47878c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET,
47888c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK,
47898c03f64dSVadim Pasternak 		.bit = 4,
47908c03f64dSVadim Pasternak 	},
47918c03f64dSVadim Pasternak 	{
47928c03f64dSVadim Pasternak 		.label = "timeout",
47938c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET,
47948c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE1_TO_MASK,
47958c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT,
47968c03f64dSVadim Pasternak 	},
47978c03f64dSVadim Pasternak 	{
47988c03f64dSVadim Pasternak 		.label = "ping",
47998c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET,
48008c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD1_CLEAR_MASK,
48018c03f64dSVadim Pasternak 		.bit = 1,
48028c03f64dSVadim Pasternak 	},
48038c03f64dSVadim Pasternak };
48048c03f64dSVadim Pasternak 
48058c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type1[] = {
48068c03f64dSVadim Pasternak 	{
48078c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_main_regs_type1,
48088c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type1),
48098c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE1,
48108c03f64dSVadim Pasternak 		.identity = "mlx-wdt-main",
48118c03f64dSVadim Pasternak 	},
48128c03f64dSVadim Pasternak 	{
48138c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_aux_regs_type1,
48148c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type1),
48158c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE1,
48168c03f64dSVadim Pasternak 		.identity = "mlx-wdt-aux",
48178c03f64dSVadim Pasternak 	},
48188c03f64dSVadim Pasternak };
48198c03f64dSVadim Pasternak 
48208c03f64dSVadim Pasternak /* Watchdog type2: hardware implementation version 2
48218c03f64dSVadim Pasternak  * (all systems except (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140).
48228c03f64dSVadim Pasternak  */
48238c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type2[] = {
48248c03f64dSVadim Pasternak 	{
48258c03f64dSVadim Pasternak 		.label = "action",
48268c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET,
48278c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK,
48288c03f64dSVadim Pasternak 		.bit = 0,
48298c03f64dSVadim Pasternak 	},
48308c03f64dSVadim Pasternak 	{
48318c03f64dSVadim Pasternak 		.label = "timeout",
48328c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET,
48338c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
48348c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT,
48358c03f64dSVadim Pasternak 	},
48368c03f64dSVadim Pasternak 	{
48378c03f64dSVadim Pasternak 		.label = "timeleft",
48388c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET,
48398c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
48408c03f64dSVadim Pasternak 	},
48418c03f64dSVadim Pasternak 	{
48428c03f64dSVadim Pasternak 		.label = "ping",
48438c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET,
48448c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK,
48458c03f64dSVadim Pasternak 		.bit = 0,
48468c03f64dSVadim Pasternak 	},
48478c03f64dSVadim Pasternak 	{
48488c03f64dSVadim Pasternak 		.label = "reset",
48498c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
48508c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
48518c03f64dSVadim Pasternak 		.bit = 6,
48528c03f64dSVadim Pasternak 	},
48538c03f64dSVadim Pasternak };
48548c03f64dSVadim Pasternak 
48558c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type2[] = {
48568c03f64dSVadim Pasternak 	{
48578c03f64dSVadim Pasternak 		.label = "action",
48588c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET,
48598c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK,
48608c03f64dSVadim Pasternak 		.bit = 4,
48618c03f64dSVadim Pasternak 	},
48628c03f64dSVadim Pasternak 	{
48638c03f64dSVadim Pasternak 		.label = "timeout",
48648c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET,
48658c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
48668c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT,
48678c03f64dSVadim Pasternak 	},
48688c03f64dSVadim Pasternak 	{
48698c03f64dSVadim Pasternak 		.label = "timeleft",
48708c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET,
48718c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
48728c03f64dSVadim Pasternak 	},
48738c03f64dSVadim Pasternak 	{
48748c03f64dSVadim Pasternak 		.label = "ping",
48758c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET,
48768c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK,
48778c03f64dSVadim Pasternak 		.bit = 4,
48788c03f64dSVadim Pasternak 	},
48798c03f64dSVadim Pasternak };
48808c03f64dSVadim Pasternak 
48818c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type2[] = {
48828c03f64dSVadim Pasternak 	{
48838c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_main_regs_type2,
48848c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type2),
48858c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE2,
48868c03f64dSVadim Pasternak 		.identity = "mlx-wdt-main",
48878c03f64dSVadim Pasternak 	},
48888c03f64dSVadim Pasternak 	{
48898c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_aux_regs_type2,
48908c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type2),
48918c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE2,
48928c03f64dSVadim Pasternak 		.identity = "mlx-wdt-aux",
48938c03f64dSVadim Pasternak 	},
48948c03f64dSVadim Pasternak };
48958c03f64dSVadim Pasternak 
48968c03f64dSVadim Pasternak /* Watchdog type3: hardware implementation version 3
48978c03f64dSVadim Pasternak  * Can be on all systems. It's differentiated by WD capability bit.
48988c03f64dSVadim Pasternak  * Old systems (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140)
48998c03f64dSVadim Pasternak  * still have only one main watchdog.
49008c03f64dSVadim Pasternak  */
49018c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type3[] = {
49028c03f64dSVadim Pasternak 	{
49038c03f64dSVadim Pasternak 		.label = "action",
49048c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET,
49058c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK,
49068c03f64dSVadim Pasternak 		.bit = 0,
49078c03f64dSVadim Pasternak 	},
49088c03f64dSVadim Pasternak 	{
49098c03f64dSVadim Pasternak 		.label = "timeout",
49108c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET,
49118c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
49128c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD3_DFLT_TIMEOUT,
49138c03f64dSVadim Pasternak 	},
49148c03f64dSVadim Pasternak 	{
49158c03f64dSVadim Pasternak 		.label = "timeleft",
49168c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET,
49178c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
49188c03f64dSVadim Pasternak 	},
49198c03f64dSVadim Pasternak 	{
49208c03f64dSVadim Pasternak 		.label = "ping",
49218c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET,
49228c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK,
49238c03f64dSVadim Pasternak 		.bit = 0,
49248c03f64dSVadim Pasternak 	},
49258c03f64dSVadim Pasternak 	{
49268c03f64dSVadim Pasternak 		.label = "reset",
49278c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET,
49288c03f64dSVadim Pasternak 		.mask = GENMASK(7, 0) & ~BIT(6),
49298c03f64dSVadim Pasternak 		.bit = 6,
49308c03f64dSVadim Pasternak 	},
49318c03f64dSVadim Pasternak };
49328c03f64dSVadim Pasternak 
49338c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type3[] = {
49348c03f64dSVadim Pasternak 	{
49358c03f64dSVadim Pasternak 		.label = "action",
49368c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET,
49378c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK,
49388c03f64dSVadim Pasternak 		.bit = 4,
49398c03f64dSVadim Pasternak 	},
49408c03f64dSVadim Pasternak 	{
49418c03f64dSVadim Pasternak 		.label = "timeout",
49428c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET,
49438c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
49448c03f64dSVadim Pasternak 		.health_cntr = MLXPLAT_CPLD_WD3_DFLT_TIMEOUT,
49458c03f64dSVadim Pasternak 	},
49468c03f64dSVadim Pasternak 	{
49478c03f64dSVadim Pasternak 		.label = "timeleft",
49488c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET,
49498c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK,
49508c03f64dSVadim Pasternak 	},
49518c03f64dSVadim Pasternak 	{
49528c03f64dSVadim Pasternak 		.label = "ping",
49538c03f64dSVadim Pasternak 		.reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET,
49548c03f64dSVadim Pasternak 		.mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK,
49558c03f64dSVadim Pasternak 		.bit = 4,
49568c03f64dSVadim Pasternak 	},
49578c03f64dSVadim Pasternak };
49588c03f64dSVadim Pasternak 
49598c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type3[] = {
49608c03f64dSVadim Pasternak 	{
49618c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_main_regs_type3,
49628c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type3),
49638c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE3,
49648c03f64dSVadim Pasternak 		.identity = "mlx-wdt-main",
49658c03f64dSVadim Pasternak 	},
49668c03f64dSVadim Pasternak 	{
49678c03f64dSVadim Pasternak 		.data = mlxplat_mlxcpld_wd_aux_regs_type3,
49688c03f64dSVadim Pasternak 		.counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type3),
49698c03f64dSVadim Pasternak 		.version = MLX_WDT_TYPE3,
49708c03f64dSVadim Pasternak 		.identity = "mlx-wdt-aux",
49718c03f64dSVadim Pasternak 	},
49728c03f64dSVadim Pasternak };
49738c03f64dSVadim Pasternak 
49748c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg)
49758c03f64dSVadim Pasternak {
49768c03f64dSVadim Pasternak 	switch (reg) {
49778c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET:
49788c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET:
49798c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET:
49808c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET:
49818c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET:
49828c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET:
49838c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET:
49848c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
49858c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
49868c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET:
49878c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET:
49888c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
49898c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET:
49908c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET:
49918c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WP2_OFFSET:
49928c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE:
49938c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET:
49948c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET:
49958c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET:
49968c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET:
49978c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET:
49988c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET:
49998c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET:
50008c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET:
50018c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET:
50028c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET:
50038c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET:
50048c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET:
50058c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET:
50068c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET:
50078c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET:
50088c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET:
50098c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET:
50108c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET:
50118c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET:
50128c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET:
50138c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET:
50148c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET:
50158c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET:
50168c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET:
50178c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET:
50188c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET:
50198c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET:
50208c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET:
50218c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET:
50228c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET:
50238c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET:
50248c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET:
50258c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET:
50268c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET:
50278c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET:
50288c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET:
50298c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET:
50308c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET:
50318c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET:
50328c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET:
50338c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET:
50348c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET:
50358c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET:
50368c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET:
50378c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET:
50388c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET:
50398c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
50408c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
50418c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
50428c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
50438c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET:
50448c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET:
50458c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET:
50468c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET:
50478c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET:
50488c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET:
50498c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET:
50508c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET:
50518c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET:
50528c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET:
50538c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET:
50548c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET:
50558c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET:
50568c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET:
50578c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET:
50588c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET:
50598c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET:
50608c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET:
50618c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
50628c03f64dSVadim Pasternak 		return true;
50638c03f64dSVadim Pasternak 	}
50648c03f64dSVadim Pasternak 	return false;
50658c03f64dSVadim Pasternak }
50668c03f64dSVadim Pasternak 
50678c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg)
50688c03f64dSVadim Pasternak {
50698c03f64dSVadim Pasternak 	switch (reg) {
50708c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET:
50718c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET:
50728c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET:
50738c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET:
50748c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET:
50758c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET:
50768c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET:
50778c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET:
50788c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET:
50798c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET:
50808c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET:
50818c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET:
50828c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET:
50838c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET:
50848c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET:
50858c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET:
50868c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET:
50878c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET:
50888c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET:
50898c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET:
50908c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET:
50918c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET:
50928c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET:
50938c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET:
50948c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET:
50958c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
50968c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
50978c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
50988c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
50998c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
51008c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET:
51018c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET:
51028c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
51038c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET:
51048c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET:
51058c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WP2_OFFSET:
51068c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE:
51078c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET:
51088c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET:
51098c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET:
51108c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET:
51118c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET:
51128c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET:
51138c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET:
51148c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET:
51158c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET:
51168c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET:
51178c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET:
51188c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET:
51198c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET:
51208c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET:
51218c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET:
51228c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET:
51238c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET:
51248c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET:
51258c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET:
51268c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET:
51278c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET:
51288c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET:
51298c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET:
51308c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET:
51318c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET:
51328c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET:
51338c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET:
51348c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_OFFSET:
51358c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET:
51368c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET:
51378c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_OFFSET:
51388c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET:
51398c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET:
51408c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET:
51418c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET:
51428c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET:
51438c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET:
51448c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET:
51458c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET:
51468c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET:
51478c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET:
51488c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET:
51498c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET:
51508c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET:
51518c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET:
51528c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET:
51538c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET:
51548c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET:
51558c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET:
51568c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET:
51578c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET:
51588c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET:
51598c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET:
51608c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET:
51618c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET:
51628c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET:
51638c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET:
51648c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET:
51658c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET:
51668c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET:
51678c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET:
51688c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET:
51698c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET:
51708c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET:
51718c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET:
51728c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
51738c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
51748c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
51758c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
51768c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
51778c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
51788c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET:
51798c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET:
51808c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET:
51818c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET:
51828c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET:
51838c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET:
51848c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET:
51858c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET:
51868c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET:
51878c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET:
5188*e75394bbSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD6_MVER_OFFSET:
51898c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET:
51908c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET:
51918c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET:
51928c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET:
51938c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET:
51948c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET:
51958c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET:
51968c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET:
51978c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET:
51988c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET:
51998c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET:
52008c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET:
52018c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET:
52028c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET:
52038c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET:
52048c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET:
52058c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET:
52068c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET:
52078c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET:
52088c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET:
52098c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET:
52108c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET:
52118c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET:
52128c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET:
52138c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET:
52148c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET:
52158c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET:
52168c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
52178c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET:
52188c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET:
52198c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET:
52208c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET:
52218c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET:
52228c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET:
52238c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET:
52248c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
52258c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
52268c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
52278c03f64dSVadim Pasternak 		return true;
52288c03f64dSVadim Pasternak 	}
52298c03f64dSVadim Pasternak 	return false;
52308c03f64dSVadim Pasternak }
52318c03f64dSVadim Pasternak 
52328c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg)
52338c03f64dSVadim Pasternak {
52348c03f64dSVadim Pasternak 	switch (reg) {
52358c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET:
52368c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET:
52378c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET:
52388c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET:
52398c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET:
52408c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET:
52418c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET:
52428c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET:
52438c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET:
52448c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET:
52458c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET:
52468c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET:
52478c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET:
52488c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET:
52498c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET:
52508c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET:
52518c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET:
52528c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET:
52538c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET:
52548c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET:
52558c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET:
52568c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET:
52578c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET:
52588c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET:
52598c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET:
52608c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET:
52618c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET:
52628c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION:
52638c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET:
52648c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET:
52658c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET:
52668c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET:
52678c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET:
52688c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET:
52698c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE:
52708c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET:
52718c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET:
52728c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET:
52738c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET:
52748c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET:
52758c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET:
52768c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET:
52778c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET:
52788c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET:
52798c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET:
52808c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET:
52818c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET:
52828c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET:
52838c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET:
52848c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET:
52858c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET:
52868c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET:
52878c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET:
52888c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET:
52898c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET:
52908c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET:
52918c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET:
52928c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET:
52938c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET:
52948c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET:
52958c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET:
52968c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET:
52978c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_OFFSET:
52988c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET:
52998c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET:
53008c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_OFFSET:
53018c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET:
53028c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET:
53038c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET:
53048c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET:
53058c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET:
53068c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET:
53078c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET:
53088c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET:
53098c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET:
53108c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET:
53118c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET:
53128c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET:
53138c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET:
53148c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET:
53158c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET:
53168c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET:
53178c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET:
53188c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET:
53198c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET:
53208c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET:
53218c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET:
53228c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET:
53238c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET:
53248c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET:
53258c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET:
53268c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET:
53278c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET:
53288c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET:
53298c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET:
53308c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET:
53318c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET:
53328c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET:
53338c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET:
53348c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET:
53358c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET:
53368c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET:
53378c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET:
53388c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON:
53398c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET:
53408c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT:
53418c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET:
53428c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET:
53438c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET:
53448c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET:
5345*e75394bbSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD6_MVER_OFFSET:
53468c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET:
53478c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET:
53488c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET:
53498c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET:
53508c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET:
53518c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET:
53528c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET:
53538c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET:
53548c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET:
53558c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET:
53568c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET:
53578c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET:
53588c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET:
53598c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET:
53608c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET:
53618c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET:
53628c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET:
53638c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET:
53648c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET:
53658c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET:
53668c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET:
53678c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET:
53688c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET:
53698c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET:
53708c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET:
53718c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET:
53728c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET:
53738c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET:
53748c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET:
53758c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET:
53768c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET:
53778c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET:
53788c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET:
53798c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET:
53808c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET:
53818c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET:
53828c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET:
53838c03f64dSVadim Pasternak 	case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET:
53848c03f64dSVadim Pasternak 		return true;
53858c03f64dSVadim Pasternak 	}
53868c03f64dSVadim Pasternak 	return false;
53878c03f64dSVadim Pasternak }
53888c03f64dSVadim Pasternak 
53898c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_default[] = {
53908c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WP1_OFFSET, 0x00 },
53918c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WP2_OFFSET, 0x00 },
53928c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 },
53938c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET, 0x00 },
53948c03f64dSVadim Pasternak };
53958c03f64dSVadim Pasternak 
53968c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_ng[] = {
53978c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 },
53988c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET, 0x00 },
53998c03f64dSVadim Pasternak };
54008c03f64dSVadim Pasternak 
54018c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_comex_default[] = {
54028c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET,
54038c03f64dSVadim Pasternak 	  MLXPLAT_CPLD_LOW_AGGRCX_MASK },
54048c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 },
54058c03f64dSVadim Pasternak };
54068c03f64dSVadim Pasternak 
54078c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_ng400[] = {
54088c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 },
54098c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 },
54108c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 },
54118c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 },
54128c03f64dSVadim Pasternak };
54138c03f64dSVadim Pasternak 
54148c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_rack_switch[] = {
54158c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT },
54168c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 },
54178c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 },
54188c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 },
54198c03f64dSVadim Pasternak };
54208c03f64dSVadim Pasternak 
54218c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_eth_modular[] = {
54228c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 0x61 },
54238c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 },
54248c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET, 0x00 },
54258c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET, 0x00 },
54268c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET, 0x00 },
54278c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 },
54288c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 },
54298c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 },
54308c03f64dSVadim Pasternak 	{ MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET,
54318c03f64dSVadim Pasternak 	  MLXPLAT_CPLD_AGGR_MASK_LC_LOW },
54328c03f64dSVadim Pasternak };
54338c03f64dSVadim Pasternak 
54348c03f64dSVadim Pasternak struct mlxplat_mlxcpld_regmap_context {
54358c03f64dSVadim Pasternak 	void __iomem *base;
54368c03f64dSVadim Pasternak };
54378c03f64dSVadim Pasternak 
54388c03f64dSVadim Pasternak static struct mlxplat_mlxcpld_regmap_context mlxplat_mlxcpld_regmap_ctx;
54398c03f64dSVadim Pasternak 
54408c03f64dSVadim Pasternak static int
54418c03f64dSVadim Pasternak mlxplat_mlxcpld_reg_read(void *context, unsigned int reg, unsigned int *val)
54428c03f64dSVadim Pasternak {
54438c03f64dSVadim Pasternak 	struct mlxplat_mlxcpld_regmap_context *ctx = context;
54448c03f64dSVadim Pasternak 
54458c03f64dSVadim Pasternak 	*val = ioread8(ctx->base + reg);
54468c03f64dSVadim Pasternak 	return 0;
54478c03f64dSVadim Pasternak }
54488c03f64dSVadim Pasternak 
54498c03f64dSVadim Pasternak static int
54508c03f64dSVadim Pasternak mlxplat_mlxcpld_reg_write(void *context, unsigned int reg, unsigned int val)
54518c03f64dSVadim Pasternak {
54528c03f64dSVadim Pasternak 	struct mlxplat_mlxcpld_regmap_context *ctx = context;
54538c03f64dSVadim Pasternak 
54548c03f64dSVadim Pasternak 	iowrite8(val, ctx->base + reg);
54558c03f64dSVadim Pasternak 	return 0;
54568c03f64dSVadim Pasternak }
54578c03f64dSVadim Pasternak 
54588c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config = {
54598c03f64dSVadim Pasternak 	.reg_bits = 8,
54608c03f64dSVadim Pasternak 	.val_bits = 8,
54618c03f64dSVadim Pasternak 	.max_register = 255,
54628c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
54638c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
54648c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
54658c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
54668c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_default,
54678c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_default),
54688c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
54698c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
54708c03f64dSVadim Pasternak };
54718c03f64dSVadim Pasternak 
54728c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng = {
54738c03f64dSVadim Pasternak 	.reg_bits = 8,
54748c03f64dSVadim Pasternak 	.val_bits = 8,
54758c03f64dSVadim Pasternak 	.max_register = 255,
54768c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
54778c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
54788c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
54798c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
54808c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_ng,
54818c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_ng),
54828c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
54838c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
54848c03f64dSVadim Pasternak };
54858c03f64dSVadim Pasternak 
54868c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_comex = {
54878c03f64dSVadim Pasternak 	.reg_bits = 8,
54888c03f64dSVadim Pasternak 	.val_bits = 8,
54898c03f64dSVadim Pasternak 	.max_register = 255,
54908c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
54918c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
54928c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
54938c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
54948c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_comex_default,
54958c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_comex_default),
54968c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
54978c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
54988c03f64dSVadim Pasternak };
54998c03f64dSVadim Pasternak 
55008c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng400 = {
55018c03f64dSVadim Pasternak 	.reg_bits = 8,
55028c03f64dSVadim Pasternak 	.val_bits = 8,
55038c03f64dSVadim Pasternak 	.max_register = 255,
55048c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
55058c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
55068c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
55078c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
55088c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_ng400,
55098c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_ng400),
55108c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
55118c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
55128c03f64dSVadim Pasternak };
55138c03f64dSVadim Pasternak 
55148c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_rack_switch = {
55158c03f64dSVadim Pasternak 	.reg_bits = 8,
55168c03f64dSVadim Pasternak 	.val_bits = 8,
55178c03f64dSVadim Pasternak 	.max_register = 255,
55188c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
55198c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
55208c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
55218c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
55228c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_rack_switch,
55238c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_rack_switch),
55248c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
55258c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
55268c03f64dSVadim Pasternak };
55278c03f64dSVadim Pasternak 
55288c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_eth_modular = {
55298c03f64dSVadim Pasternak 	.reg_bits = 8,
55308c03f64dSVadim Pasternak 	.val_bits = 8,
55318c03f64dSVadim Pasternak 	.max_register = 255,
55328c03f64dSVadim Pasternak 	.cache_type = REGCACHE_FLAT,
55338c03f64dSVadim Pasternak 	.writeable_reg = mlxplat_mlxcpld_writeable_reg,
55348c03f64dSVadim Pasternak 	.readable_reg = mlxplat_mlxcpld_readable_reg,
55358c03f64dSVadim Pasternak 	.volatile_reg = mlxplat_mlxcpld_volatile_reg,
55368c03f64dSVadim Pasternak 	.reg_defaults = mlxplat_mlxcpld_regmap_eth_modular,
55378c03f64dSVadim Pasternak 	.num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_eth_modular),
55388c03f64dSVadim Pasternak 	.reg_read = mlxplat_mlxcpld_reg_read,
55398c03f64dSVadim Pasternak 	.reg_write = mlxplat_mlxcpld_reg_write,
55408c03f64dSVadim Pasternak };
55418c03f64dSVadim Pasternak 
55428c03f64dSVadim Pasternak static struct resource mlxplat_mlxcpld_resources[] = {
55438c03f64dSVadim Pasternak 	[0] = DEFINE_RES_IRQ_NAMED(MLXPLAT_CPLD_LPC_SYSIRQ, "mlxreg-hotplug"),
55448c03f64dSVadim Pasternak };
55458c03f64dSVadim Pasternak 
55468c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data *mlxplat_i2c;
55478c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data *mlxplat_hotplug;
55488c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_led;
55498c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_regs_io;
55508c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_fan;
55518c03f64dSVadim Pasternak static struct mlxreg_core_platform_data
55528c03f64dSVadim Pasternak 	*mlxplat_wd_data[MLXPLAT_CPLD_WD_MAX_DEVS];
55538c03f64dSVadim Pasternak static const struct regmap_config *mlxplat_regmap_config;
55548c03f64dSVadim Pasternak static struct pci_dev *lpc_bridge;
55558c03f64dSVadim Pasternak static struct pci_dev *i2c_bridge;
55568c03f64dSVadim Pasternak static struct pci_dev *jtag_bridge;
55578c03f64dSVadim Pasternak 
55588c03f64dSVadim Pasternak /* Platform default reset function */
55598c03f64dSVadim Pasternak static int mlxplat_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused)
55608c03f64dSVadim Pasternak {
55618c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev);
55628c03f64dSVadim Pasternak 	u32 regval;
55638c03f64dSVadim Pasternak 	int ret;
55648c03f64dSVadim Pasternak 
55658c03f64dSVadim Pasternak 	ret = regmap_read(priv->regmap, MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET, &regval);
55668c03f64dSVadim Pasternak 
55678c03f64dSVadim Pasternak 	if (action == SYS_RESTART && !ret && regval & MLXPLAT_CPLD_SYS_RESET_MASK)
55688c03f64dSVadim Pasternak 		regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET,
55698c03f64dSVadim Pasternak 			     MLXPLAT_CPLD_RESET_MASK);
55708c03f64dSVadim Pasternak 
55718c03f64dSVadim Pasternak 	return NOTIFY_DONE;
55728c03f64dSVadim Pasternak }
55738c03f64dSVadim Pasternak 
55748c03f64dSVadim Pasternak static struct notifier_block mlxplat_reboot_default_nb = {
55758c03f64dSVadim Pasternak 	.notifier_call = mlxplat_reboot_notifier,
55768c03f64dSVadim Pasternak };
55778c03f64dSVadim Pasternak 
55788c03f64dSVadim Pasternak /* Platform default poweroff function */
55798c03f64dSVadim Pasternak static void mlxplat_poweroff(void)
55808c03f64dSVadim Pasternak {
55818c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev);
55828c03f64dSVadim Pasternak 
55838c03f64dSVadim Pasternak 	if (mlxplat_reboot_nb)
55848c03f64dSVadim Pasternak 		unregister_reboot_notifier(mlxplat_reboot_nb);
55858c03f64dSVadim Pasternak 	regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, MLXPLAT_CPLD_HALT_MASK);
55868c03f64dSVadim Pasternak 	kernel_halt();
55878c03f64dSVadim Pasternak }
55888c03f64dSVadim Pasternak 
55898c03f64dSVadim Pasternak static int __init mlxplat_register_platform_device(void)
55908c03f64dSVadim Pasternak {
55918c03f64dSVadim Pasternak 	mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, -1,
55928c03f64dSVadim Pasternak 						      mlxplat_lpc_resources,
55938c03f64dSVadim Pasternak 						      ARRAY_SIZE(mlxplat_lpc_resources));
55948c03f64dSVadim Pasternak 	if (IS_ERR(mlxplat_dev))
55958c03f64dSVadim Pasternak 		return PTR_ERR(mlxplat_dev);
55968c03f64dSVadim Pasternak 	else
55978c03f64dSVadim Pasternak 		return 1;
55988c03f64dSVadim Pasternak }
55998c03f64dSVadim Pasternak 
56008c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi)
56018c03f64dSVadim Pasternak {
56028c03f64dSVadim Pasternak 	int i;
56038c03f64dSVadim Pasternak 
56048c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
56058c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
56068c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
56078c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
56088c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_default_channels[i];
56098c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
56108c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_default_channels[i]);
56118c03f64dSVadim Pasternak 	}
56128c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_default_data;
56138c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
56148c03f64dSVadim Pasternak 		mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
56158c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_led_data;
56168c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_regs_io_data;
56178c03f64dSVadim Pasternak 	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
56188c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
56198c03f64dSVadim Pasternak 
56208c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
56218c03f64dSVadim Pasternak }
56228c03f64dSVadim Pasternak 
56238c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_wc_matched(const struct dmi_system_id *dmi)
56248c03f64dSVadim Pasternak {
56258c03f64dSVadim Pasternak 	int i;
56268c03f64dSVadim Pasternak 
56278c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
56288c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
56298c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
56308c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
56318c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_default_channels[i];
56328c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
56338c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_default_channels[i]);
56348c03f64dSVadim Pasternak 	}
56358c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_default_wc_data;
56368c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
56378c03f64dSVadim Pasternak 		mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
56388c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_led_wc_data;
56398c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_regs_io_data;
56408c03f64dSVadim Pasternak 	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
56418c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
56428c03f64dSVadim Pasternak 
56438c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
56448c03f64dSVadim Pasternak }
56458c03f64dSVadim Pasternak 
56468c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_eth_wc_blade_matched(const struct dmi_system_id *dmi)
56478c03f64dSVadim Pasternak {
56488c03f64dSVadim Pasternak 	int i;
56498c03f64dSVadim Pasternak 
56508c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
56518c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
56528c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
56538c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
56548c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
56558c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
56568c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
56578c03f64dSVadim Pasternak 	}
56588c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_default_wc_data;
56598c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
56608c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
56618c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_led_eth_wc_blade_data;
56628c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
56638c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
56648c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
56658c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
56668c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng;
56678c03f64dSVadim Pasternak 
56688c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
56698c03f64dSVadim Pasternak }
56708c03f64dSVadim Pasternak 
56718c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi)
56728c03f64dSVadim Pasternak {
56738c03f64dSVadim Pasternak 	int i;
56748c03f64dSVadim Pasternak 
56758c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
56768c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
56778c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
56788c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
56798c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
56808c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
56818c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
56828c03f64dSVadim Pasternak 	}
56838c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_msn21xx_data;
56848c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
56858c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
56868c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_msn21xx_led_data;
56878c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data;
56888c03f64dSVadim Pasternak 	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
56898c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
56908c03f64dSVadim Pasternak 
56918c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
56928c03f64dSVadim Pasternak }
56938c03f64dSVadim Pasternak 
56948c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn274x_matched(const struct dmi_system_id *dmi)
56958c03f64dSVadim Pasternak {
56968c03f64dSVadim Pasternak 	int i;
56978c03f64dSVadim Pasternak 
56988c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
56998c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
57008c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
57018c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
57028c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
57038c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
57048c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
57058c03f64dSVadim Pasternak 	}
57068c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_msn274x_data;
57078c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
57088c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
57098c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_led_data;
57108c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data;
57118c03f64dSVadim Pasternak 	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
57128c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
57138c03f64dSVadim Pasternak 
57148c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
57158c03f64dSVadim Pasternak }
57168c03f64dSVadim Pasternak 
57178c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi)
57188c03f64dSVadim Pasternak {
57198c03f64dSVadim Pasternak 	int i;
57208c03f64dSVadim Pasternak 
57218c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
57228c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
57238c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
57248c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
57258c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
57268c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
57278c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
57288c03f64dSVadim Pasternak 	}
57298c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_msn201x_data;
57308c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
57318c03f64dSVadim Pasternak 		mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
57328c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_msn21xx_led_data;
57338c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data;
57348c03f64dSVadim Pasternak 	mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0];
57358c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
57368c03f64dSVadim Pasternak 
57378c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
57388c03f64dSVadim Pasternak }
57398c03f64dSVadim Pasternak 
57408c03f64dSVadim Pasternak static int __init mlxplat_dmi_qmb7xx_matched(const struct dmi_system_id *dmi)
57418c03f64dSVadim Pasternak {
57428c03f64dSVadim Pasternak 	int i;
57438c03f64dSVadim Pasternak 
57448c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
57458c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
57468c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
57478c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
57488c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
57498c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
57508c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
57518c03f64dSVadim Pasternak 	}
57528c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_default_ng_data;
57538c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
57548c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
57558c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_ng_led_data;
57568c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
57578c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
57588c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
57598c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
57608c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
57618c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng;
57628c03f64dSVadim Pasternak 
57638c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
57648c03f64dSVadim Pasternak }
57658c03f64dSVadim Pasternak 
57668c03f64dSVadim Pasternak static int __init mlxplat_dmi_comex_matched(const struct dmi_system_id *dmi)
57678c03f64dSVadim Pasternak {
57688c03f64dSVadim Pasternak 	int i;
57698c03f64dSVadim Pasternak 
57708c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM;
57718c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_extended_mux_data);
57728c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_extended_mux_data;
57738c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
57748c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
57758c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
57768c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
57778c03f64dSVadim Pasternak 	}
57788c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_comex_data;
57798c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr = MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM;
57808c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_comex_100G_led_data;
57818c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
57828c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
57838c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
57848c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
57858c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data;
57868c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_comex;
57878c03f64dSVadim Pasternak 
57888c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
57898c03f64dSVadim Pasternak }
57908c03f64dSVadim Pasternak 
57918c03f64dSVadim Pasternak static int __init mlxplat_dmi_ng400_matched(const struct dmi_system_id *dmi)
57928c03f64dSVadim Pasternak {
57938c03f64dSVadim Pasternak 	int i;
57948c03f64dSVadim Pasternak 
57958c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
57968c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
57978c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
57988c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
57998c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
58008c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
58018c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
58028c03f64dSVadim Pasternak 	}
58038c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_ext_data;
58048c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
58058c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
58068c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_ng_led_data;
58078c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
58088c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
58098c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
58108c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
58118c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
58128c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400;
58138c03f64dSVadim Pasternak 
58148c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
58158c03f64dSVadim Pasternak }
58168c03f64dSVadim Pasternak 
58178c03f64dSVadim Pasternak static int __init mlxplat_dmi_modular_matched(const struct dmi_system_id *dmi)
58188c03f64dSVadim Pasternak {
58198c03f64dSVadim Pasternak 	int i;
58208c03f64dSVadim Pasternak 
58218c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
58228c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_modular_mux_data);
58238c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_modular_mux_data;
58248c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_modular_data;
58258c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr = MLXPLAT_CPLD_CH4_ETH_MODULAR;
58268c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_modular_led_data;
58278c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_modular_regs_io_data;
58288c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
58298c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
58308c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
58318c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
58328c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_eth_modular;
58338c03f64dSVadim Pasternak 
58348c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
58358c03f64dSVadim Pasternak }
58368c03f64dSVadim Pasternak 
58378c03f64dSVadim Pasternak static int __init mlxplat_dmi_chassis_blade_matched(const struct dmi_system_id *dmi)
58388c03f64dSVadim Pasternak {
58398c03f64dSVadim Pasternak 	int i;
58408c03f64dSVadim Pasternak 
58418c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
58428c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data);
58438c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_default_mux_data;
58448c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_chassis_blade_data;
58458c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
58468c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
58478c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
58488c03f64dSVadim Pasternak 		mlxplat_mux_data[i].values = mlxplat_msn21xx_channels;
58498c03f64dSVadim Pasternak 		mlxplat_mux_data[i].n_values =
58508c03f64dSVadim Pasternak 				ARRAY_SIZE(mlxplat_msn21xx_channels);
58518c03f64dSVadim Pasternak 	}
58528c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_chassis_blade_regs_io_data;
58538c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
58548c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400;
58558c03f64dSVadim Pasternak 
58568c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
58578c03f64dSVadim Pasternak }
58588c03f64dSVadim Pasternak 
58598c03f64dSVadim Pasternak static int __init mlxplat_dmi_rack_switch_matched(const struct dmi_system_id *dmi)
58608c03f64dSVadim Pasternak {
58618c03f64dSVadim Pasternak 	int i;
58628c03f64dSVadim Pasternak 
58638c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
58648c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data);
58658c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_rack_switch_mux_data;
58668c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_rack_switch_data;
58678c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
58688c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
58698c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_ng_led_data;
58708c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
58718c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
58728c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
58738c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
58748c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
58758c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch;
58768c03f64dSVadim Pasternak 
58778c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
58788c03f64dSVadim Pasternak }
58798c03f64dSVadim Pasternak 
58808c03f64dSVadim Pasternak static int __init mlxplat_dmi_ng800_matched(const struct dmi_system_id *dmi)
58818c03f64dSVadim Pasternak {
58828c03f64dSVadim Pasternak 	int i;
58838c03f64dSVadim Pasternak 
58848c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
58858c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_ng800_mux_data);
58868c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_ng800_mux_data;
58878c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_ng800_data;
58888c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
58898c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
58908c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_default_ng_led_data;
58918c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
58928c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
58938c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
58948c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
58958c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
58968c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400;
58978c03f64dSVadim Pasternak 
58988c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
58998c03f64dSVadim Pasternak }
59008c03f64dSVadim Pasternak 
59018c03f64dSVadim Pasternak static int __init mlxplat_dmi_l1_switch_matched(const struct dmi_system_id *dmi)
59028c03f64dSVadim Pasternak {
59038c03f64dSVadim Pasternak 	int i;
59048c03f64dSVadim Pasternak 
59058c03f64dSVadim Pasternak 	mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM;
59068c03f64dSVadim Pasternak 	mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data);
59078c03f64dSVadim Pasternak 	mlxplat_mux_data = mlxplat_rack_switch_mux_data;
59088c03f64dSVadim Pasternak 	mlxplat_hotplug = &mlxplat_mlxcpld_l1_switch_data;
59098c03f64dSVadim Pasternak 	mlxplat_hotplug->deferred_nr =
59108c03f64dSVadim Pasternak 		mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1];
59118c03f64dSVadim Pasternak 	mlxplat_led = &mlxplat_l1_switch_led_data;
59128c03f64dSVadim Pasternak 	mlxplat_regs_io = &mlxplat_default_ng_regs_io_data;
59138c03f64dSVadim Pasternak 	mlxplat_fan = &mlxplat_default_fan_data;
59148c03f64dSVadim Pasternak 	for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++)
59158c03f64dSVadim Pasternak 		mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i];
59168c03f64dSVadim Pasternak 	mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data;
59178c03f64dSVadim Pasternak 	mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch;
59188c03f64dSVadim Pasternak 	pm_power_off = mlxplat_poweroff;
59198c03f64dSVadim Pasternak 	mlxplat_reboot_nb = &mlxplat_reboot_default_nb;
59208c03f64dSVadim Pasternak 
59218c03f64dSVadim Pasternak 	return mlxplat_register_platform_device();
59228c03f64dSVadim Pasternak }
59238c03f64dSVadim Pasternak 
59248c03f64dSVadim Pasternak static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
59258c03f64dSVadim Pasternak 	{
59268c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_wc_matched,
59278c03f64dSVadim Pasternak 		.matches = {
59288c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"),
59298c03f64dSVadim Pasternak 			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI138"),
59308c03f64dSVadim Pasternak 		},
59318c03f64dSVadim Pasternak 	},
59328c03f64dSVadim Pasternak 	{
59338c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_matched,
59348c03f64dSVadim Pasternak 		.matches = {
59358c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"),
59368c03f64dSVadim Pasternak 		},
59378c03f64dSVadim Pasternak 	},
59388c03f64dSVadim Pasternak 	{
59398c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn21xx_matched,
59408c03f64dSVadim Pasternak 		.matches = {
59418c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0002"),
59428c03f64dSVadim Pasternak 		},
59438c03f64dSVadim Pasternak 	},
59448c03f64dSVadim Pasternak 	{
59458c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn274x_matched,
59468c03f64dSVadim Pasternak 		.matches = {
59478c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0003"),
59488c03f64dSVadim Pasternak 		},
59498c03f64dSVadim Pasternak 	},
59508c03f64dSVadim Pasternak 	{
59518c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn201x_matched,
59528c03f64dSVadim Pasternak 		.matches = {
59538c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0004"),
59548c03f64dSVadim Pasternak 		},
59558c03f64dSVadim Pasternak 	},
59568c03f64dSVadim Pasternak 	{
59578c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_eth_wc_blade_matched,
59588c03f64dSVadim Pasternak 		.matches = {
59598c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"),
59608c03f64dSVadim Pasternak 			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI139"),
59618c03f64dSVadim Pasternak 		},
59628c03f64dSVadim Pasternak 	},
59638c03f64dSVadim Pasternak 	{
59648c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
59658c03f64dSVadim Pasternak 		.matches = {
59668c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"),
59678c03f64dSVadim Pasternak 		},
59688c03f64dSVadim Pasternak 	},
59698c03f64dSVadim Pasternak 	{
59708c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
59718c03f64dSVadim Pasternak 		.matches = {
59728c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0007"),
59738c03f64dSVadim Pasternak 		},
59748c03f64dSVadim Pasternak 	},
59758c03f64dSVadim Pasternak 	{
59768c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_comex_matched,
59778c03f64dSVadim Pasternak 		.matches = {
59788c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0009"),
59798c03f64dSVadim Pasternak 		},
59808c03f64dSVadim Pasternak 	},
59818c03f64dSVadim Pasternak 	{
59828c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_rack_switch_matched,
59838c03f64dSVadim Pasternak 		.matches = {
59848c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0010"),
59858c03f64dSVadim Pasternak 			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI142"),
59868c03f64dSVadim Pasternak 		},
59878c03f64dSVadim Pasternak 	},
59888c03f64dSVadim Pasternak 	{
59898c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_ng400_matched,
59908c03f64dSVadim Pasternak 		.matches = {
59918c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0010"),
59928c03f64dSVadim Pasternak 		},
59938c03f64dSVadim Pasternak 	},
59948c03f64dSVadim Pasternak 	{
59958c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_modular_matched,
59968c03f64dSVadim Pasternak 		.matches = {
59978c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0011"),
59988c03f64dSVadim Pasternak 		},
59998c03f64dSVadim Pasternak 	},
60008c03f64dSVadim Pasternak 	{
60018c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_ng800_matched,
60028c03f64dSVadim Pasternak 		.matches = {
60038c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0013"),
60048c03f64dSVadim Pasternak 		},
60058c03f64dSVadim Pasternak 	},
60068c03f64dSVadim Pasternak 	{
60078c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_chassis_blade_matched,
60088c03f64dSVadim Pasternak 		.matches = {
60098c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0015"),
60108c03f64dSVadim Pasternak 		},
60118c03f64dSVadim Pasternak 	},
60128c03f64dSVadim Pasternak 	{
60138c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_l1_switch_matched,
60148c03f64dSVadim Pasternak 		.matches = {
60158c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_NAME, "VMOD0017"),
60168c03f64dSVadim Pasternak 		},
60178c03f64dSVadim Pasternak 	},
60188c03f64dSVadim Pasternak 	{
60198c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn274x_matched,
60208c03f64dSVadim Pasternak 		.matches = {
60218c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60228c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN274"),
60238c03f64dSVadim Pasternak 		},
60248c03f64dSVadim Pasternak 	},
60258c03f64dSVadim Pasternak 	{
60268c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_matched,
60278c03f64dSVadim Pasternak 		.matches = {
60288c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60298c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN24"),
60308c03f64dSVadim Pasternak 		},
60318c03f64dSVadim Pasternak 	},
60328c03f64dSVadim Pasternak 	{
60338c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_matched,
60348c03f64dSVadim Pasternak 		.matches = {
60358c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60368c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN27"),
60378c03f64dSVadim Pasternak 		},
60388c03f64dSVadim Pasternak 	},
60398c03f64dSVadim Pasternak 	{
60408c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_matched,
60418c03f64dSVadim Pasternak 		.matches = {
60428c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60438c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSB"),
60448c03f64dSVadim Pasternak 		},
60458c03f64dSVadim Pasternak 	},
60468c03f64dSVadim Pasternak 	{
60478c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_default_matched,
60488c03f64dSVadim Pasternak 		.matches = {
60498c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60508c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSX"),
60518c03f64dSVadim Pasternak 		},
60528c03f64dSVadim Pasternak 	},
60538c03f64dSVadim Pasternak 	{
60548c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn21xx_matched,
60558c03f64dSVadim Pasternak 		.matches = {
60568c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60578c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN21"),
60588c03f64dSVadim Pasternak 		},
60598c03f64dSVadim Pasternak 	},
60608c03f64dSVadim Pasternak 	{
60618c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_msn201x_matched,
60628c03f64dSVadim Pasternak 		.matches = {
60638c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60648c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"),
60658c03f64dSVadim Pasternak 		},
60668c03f64dSVadim Pasternak 	},
60678c03f64dSVadim Pasternak 	{
60688c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
60698c03f64dSVadim Pasternak 		.matches = {
60708c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60718c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MQM87"),
60728c03f64dSVadim Pasternak 		},
60738c03f64dSVadim Pasternak 	},
60748c03f64dSVadim Pasternak 	{
60758c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
60768c03f64dSVadim Pasternak 		.matches = {
60778c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60788c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN37"),
60798c03f64dSVadim Pasternak 		},
60808c03f64dSVadim Pasternak 	},
60818c03f64dSVadim Pasternak 	{
60828c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
60838c03f64dSVadim Pasternak 		.matches = {
60848c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60858c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN34"),
60868c03f64dSVadim Pasternak 		},
60878c03f64dSVadim Pasternak 	},
60888c03f64dSVadim Pasternak 	{
60898c03f64dSVadim Pasternak 		.callback = mlxplat_dmi_qmb7xx_matched,
60908c03f64dSVadim Pasternak 		.matches = {
60918c03f64dSVadim Pasternak 			DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"),
60928c03f64dSVadim Pasternak 			DMI_MATCH(DMI_PRODUCT_NAME, "MSN38"),
60938c03f64dSVadim Pasternak 		},
60948c03f64dSVadim Pasternak 	},
60958c03f64dSVadim Pasternak 	{ }
60968c03f64dSVadim Pasternak };
60978c03f64dSVadim Pasternak 
60988c03f64dSVadim Pasternak MODULE_DEVICE_TABLE(dmi, mlxplat_dmi_table);
60998c03f64dSVadim Pasternak 
61008c03f64dSVadim Pasternak static int mlxplat_mlxcpld_verify_bus_topology(int *nr)
61018c03f64dSVadim Pasternak {
61028c03f64dSVadim Pasternak 	struct i2c_adapter *search_adap;
61038c03f64dSVadim Pasternak 	int i, shift = 0;
61048c03f64dSVadim Pasternak 
61058c03f64dSVadim Pasternak 	/* Scan adapters from expected id to verify it is free. */
61068c03f64dSVadim Pasternak 	*nr = MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR;
61078c03f64dSVadim Pasternak 	for (i = MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR; i <
61088c03f64dSVadim Pasternak 	     mlxplat_max_adap_num; i++) {
61098c03f64dSVadim Pasternak 		search_adap = i2c_get_adapter(i);
61108c03f64dSVadim Pasternak 		if (search_adap) {
61118c03f64dSVadim Pasternak 			i2c_put_adapter(search_adap);
61128c03f64dSVadim Pasternak 			continue;
61138c03f64dSVadim Pasternak 		}
61148c03f64dSVadim Pasternak 
61158c03f64dSVadim Pasternak 		/* Return if expected parent adapter is free. */
61168c03f64dSVadim Pasternak 		if (i == MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR)
61178c03f64dSVadim Pasternak 			return 0;
61188c03f64dSVadim Pasternak 		break;
61198c03f64dSVadim Pasternak 	}
61208c03f64dSVadim Pasternak 
61218c03f64dSVadim Pasternak 	/* Return with error if free id for adapter is not found. */
61228c03f64dSVadim Pasternak 	if (i == mlxplat_max_adap_num)
61238c03f64dSVadim Pasternak 		return -ENODEV;
61248c03f64dSVadim Pasternak 
61258c03f64dSVadim Pasternak 	/* Shift adapter ids, since expected parent adapter is not free. */
61268c03f64dSVadim Pasternak 	*nr = i;
61278c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
61288c03f64dSVadim Pasternak 		shift = *nr - mlxplat_mux_data[i].parent;
61298c03f64dSVadim Pasternak 		mlxplat_mux_data[i].parent = *nr;
61308c03f64dSVadim Pasternak 		mlxplat_mux_data[i].base_nr += shift;
61318c03f64dSVadim Pasternak 	}
61328c03f64dSVadim Pasternak 
61338c03f64dSVadim Pasternak 	if (shift > 0)
61348c03f64dSVadim Pasternak 		mlxplat_hotplug->shift_nr = shift;
61358c03f64dSVadim Pasternak 
61368c03f64dSVadim Pasternak 	return 0;
61378c03f64dSVadim Pasternak }
61388c03f64dSVadim Pasternak 
61398c03f64dSVadim Pasternak static int mlxplat_mlxcpld_check_wd_capability(void *regmap)
61408c03f64dSVadim Pasternak {
61418c03f64dSVadim Pasternak 	u32 regval;
61428c03f64dSVadim Pasternak 	int i, rc;
61438c03f64dSVadim Pasternak 
61448c03f64dSVadim Pasternak 	rc = regmap_read(regmap, MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET,
61458c03f64dSVadim Pasternak 			 &regval);
61468c03f64dSVadim Pasternak 	if (rc)
61478c03f64dSVadim Pasternak 		return rc;
61488c03f64dSVadim Pasternak 
61498c03f64dSVadim Pasternak 	if (!(regval & ~MLXPLAT_CPLD_WD_CPBLTY_MASK)) {
61508c03f64dSVadim Pasternak 		for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type3); i++) {
61518c03f64dSVadim Pasternak 			if (mlxplat_wd_data[i])
61528c03f64dSVadim Pasternak 				mlxplat_wd_data[i] =
61538c03f64dSVadim Pasternak 					&mlxplat_mlxcpld_wd_set_type3[i];
61548c03f64dSVadim Pasternak 		}
61558c03f64dSVadim Pasternak 	}
61568c03f64dSVadim Pasternak 
61578c03f64dSVadim Pasternak 	return 0;
61588c03f64dSVadim Pasternak }
61598c03f64dSVadim Pasternak 
61608c03f64dSVadim Pasternak static int mlxplat_lpc_cpld_device_init(struct resource **hotplug_resources,
61618c03f64dSVadim Pasternak 					unsigned int *hotplug_resources_size)
61628c03f64dSVadim Pasternak {
61638c03f64dSVadim Pasternak 	int err;
61648c03f64dSVadim Pasternak 
61658c03f64dSVadim Pasternak 	mlxplat_mlxcpld_regmap_ctx.base = devm_ioport_map(&mlxplat_dev->dev,
61668c03f64dSVadim Pasternak 							  mlxplat_lpc_resources[1].start, 1);
61678c03f64dSVadim Pasternak 	if (!mlxplat_mlxcpld_regmap_ctx.base) {
61688c03f64dSVadim Pasternak 		err = -ENOMEM;
61698c03f64dSVadim Pasternak 		goto fail_devm_ioport_map;
61708c03f64dSVadim Pasternak 	}
61718c03f64dSVadim Pasternak 
61728c03f64dSVadim Pasternak 	*hotplug_resources = mlxplat_mlxcpld_resources;
61738c03f64dSVadim Pasternak 	*hotplug_resources_size = ARRAY_SIZE(mlxplat_mlxcpld_resources);
61748c03f64dSVadim Pasternak 
61758c03f64dSVadim Pasternak 	return 0;
61768c03f64dSVadim Pasternak 
61778c03f64dSVadim Pasternak fail_devm_ioport_map:
61788c03f64dSVadim Pasternak 	return err;
61798c03f64dSVadim Pasternak }
61808c03f64dSVadim Pasternak 
61818c03f64dSVadim Pasternak static void mlxplat_lpc_cpld_device_exit(void)
61828c03f64dSVadim Pasternak {
61838c03f64dSVadim Pasternak }
61848c03f64dSVadim Pasternak 
61858c03f64dSVadim Pasternak static int
61868c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init(unsigned int device, const char *res_name, struct pci_dev **pci_bridge,
61878c03f64dSVadim Pasternak 			     void __iomem **pci_bridge_addr)
61888c03f64dSVadim Pasternak {
61898c03f64dSVadim Pasternak 	void __iomem *pci_mem_addr;
61908c03f64dSVadim Pasternak 	struct pci_dev *pci_dev;
61918c03f64dSVadim Pasternak 	int err;
61928c03f64dSVadim Pasternak 
61938c03f64dSVadim Pasternak 	pci_dev = pci_get_device(PCI_VENDOR_ID_LATTICE, device, NULL);
61948c03f64dSVadim Pasternak 	if (!pci_dev)
61958c03f64dSVadim Pasternak 		return -ENODEV;
61968c03f64dSVadim Pasternak 
61978c03f64dSVadim Pasternak 	err = pci_enable_device(pci_dev);
61988c03f64dSVadim Pasternak 	if (err) {
61998c03f64dSVadim Pasternak 		dev_err(&pci_dev->dev, "pci_enable_device failed with error %d\n", err);
62008c03f64dSVadim Pasternak 		goto fail_pci_enable_device;
62018c03f64dSVadim Pasternak 	}
62028c03f64dSVadim Pasternak 
62038c03f64dSVadim Pasternak 	err = pci_request_region(pci_dev, 0, res_name);
62048c03f64dSVadim Pasternak 	if (err) {
62058c03f64dSVadim Pasternak 		dev_err(&pci_dev->dev, "pci_request_regions failed with error %d\n", err);
62068c03f64dSVadim Pasternak 		goto fail_pci_request_regions;
62078c03f64dSVadim Pasternak 	}
62088c03f64dSVadim Pasternak 
62098c03f64dSVadim Pasternak 	err = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(64));
62108c03f64dSVadim Pasternak 	if (err) {
62118c03f64dSVadim Pasternak 		err = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32));
62128c03f64dSVadim Pasternak 		if (err) {
62138c03f64dSVadim Pasternak 			dev_err(&pci_dev->dev, "dma_set_mask failed with error %d\n", err);
62148c03f64dSVadim Pasternak 			goto fail_pci_set_dma_mask;
62158c03f64dSVadim Pasternak 		}
62168c03f64dSVadim Pasternak 	}
62178c03f64dSVadim Pasternak 
62188c03f64dSVadim Pasternak 	pci_set_master(pci_dev);
62198c03f64dSVadim Pasternak 
62208c03f64dSVadim Pasternak 	pci_mem_addr = devm_ioremap(&pci_dev->dev, pci_resource_start(pci_dev, 0),
62218c03f64dSVadim Pasternak 				    pci_resource_len(pci_dev, 0));
62228c03f64dSVadim Pasternak 	if (!pci_mem_addr) {
62238c03f64dSVadim Pasternak 		dev_err(&mlxplat_dev->dev, "ioremap failed\n");
62248c03f64dSVadim Pasternak 		err = -EIO;
62258c03f64dSVadim Pasternak 		goto fail_ioremap;
62268c03f64dSVadim Pasternak 	}
62278c03f64dSVadim Pasternak 
62288c03f64dSVadim Pasternak 	*pci_bridge = pci_dev;
62298c03f64dSVadim Pasternak 	*pci_bridge_addr = pci_mem_addr;
62308c03f64dSVadim Pasternak 
62318c03f64dSVadim Pasternak 	return 0;
62328c03f64dSVadim Pasternak 
62338c03f64dSVadim Pasternak fail_ioremap:
62348c03f64dSVadim Pasternak fail_pci_set_dma_mask:
62358c03f64dSVadim Pasternak 	pci_release_regions(pci_dev);
62368c03f64dSVadim Pasternak fail_pci_request_regions:
62378c03f64dSVadim Pasternak 	pci_disable_device(pci_dev);
62388c03f64dSVadim Pasternak fail_pci_enable_device:
62398c03f64dSVadim Pasternak 	pci_dev_put(pci_dev);
62408c03f64dSVadim Pasternak 	return err;
62418c03f64dSVadim Pasternak }
62428c03f64dSVadim Pasternak 
62438c03f64dSVadim Pasternak static void
62448c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(struct pci_dev *pci_bridge,
62458c03f64dSVadim Pasternak 			     void __iomem *pci_bridge_addr)
62468c03f64dSVadim Pasternak {
62478c03f64dSVadim Pasternak 	iounmap(pci_bridge_addr);
62488c03f64dSVadim Pasternak 	pci_release_regions(pci_bridge);
62498c03f64dSVadim Pasternak 	pci_disable_device(pci_bridge);
62508c03f64dSVadim Pasternak 	pci_dev_put(pci_bridge);
62518c03f64dSVadim Pasternak }
62528c03f64dSVadim Pasternak 
62538c03f64dSVadim Pasternak static int
62548c03f64dSVadim Pasternak mlxplat_pci_fpga_devices_init(struct resource **hotplug_resources,
62558c03f64dSVadim Pasternak 			      unsigned int *hotplug_resources_size)
62568c03f64dSVadim Pasternak {
62578c03f64dSVadim Pasternak 	int err;
62588c03f64dSVadim Pasternak 
62598c03f64dSVadim Pasternak 	err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_LPC_BRIDGE,
62608c03f64dSVadim Pasternak 					   "mlxplat_lpc_bridge", &lpc_bridge,
62618c03f64dSVadim Pasternak 					   &mlxplat_mlxcpld_regmap_ctx.base);
62628c03f64dSVadim Pasternak 	if (err)
62638c03f64dSVadim Pasternak 		goto mlxplat_pci_fpga_device_init_lpc_fail;
62648c03f64dSVadim Pasternak 
62658c03f64dSVadim Pasternak 	err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_I2C_BRIDGE,
62668c03f64dSVadim Pasternak 					   "mlxplat_i2c_bridge", &i2c_bridge,
62678c03f64dSVadim Pasternak 					    &i2c_bridge_addr);
62688c03f64dSVadim Pasternak 	if (err)
62698c03f64dSVadim Pasternak 		goto mlxplat_pci_fpga_device_init_i2c_fail;
62708c03f64dSVadim Pasternak 
62718c03f64dSVadim Pasternak 	err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_JTAG_BRIDGE,
62728c03f64dSVadim Pasternak 					   "mlxplat_jtag_bridge", &jtag_bridge,
62738c03f64dSVadim Pasternak 					    &jtag_bridge_addr);
62748c03f64dSVadim Pasternak 	if (err)
62758c03f64dSVadim Pasternak 		goto mlxplat_pci_fpga_device_init_jtag_fail;
62768c03f64dSVadim Pasternak 
62778c03f64dSVadim Pasternak 	return 0;
62788c03f64dSVadim Pasternak 
62798c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_jtag_fail:
62808c03f64dSVadim Pasternak 	mlxplat_pci_fpga_device_exit(i2c_bridge, i2c_bridge_addr);
62818c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_i2c_fail:
62828c03f64dSVadim Pasternak 	mlxplat_pci_fpga_device_exit(lpc_bridge, mlxplat_mlxcpld_regmap_ctx.base);
62838c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_lpc_fail:
62848c03f64dSVadim Pasternak 	return err;
62858c03f64dSVadim Pasternak }
62868c03f64dSVadim Pasternak 
62878c03f64dSVadim Pasternak static void mlxplat_pci_fpga_devices_exit(void)
62888c03f64dSVadim Pasternak {
62898c03f64dSVadim Pasternak 	mlxplat_pci_fpga_device_exit(jtag_bridge, jtag_bridge_addr);
62908c03f64dSVadim Pasternak 	mlxplat_pci_fpga_device_exit(i2c_bridge, i2c_bridge_addr);
62918c03f64dSVadim Pasternak 	mlxplat_pci_fpga_device_exit(lpc_bridge, mlxplat_mlxcpld_regmap_ctx.base);
62928c03f64dSVadim Pasternak }
62938c03f64dSVadim Pasternak 
62948c03f64dSVadim Pasternak static int
62958c03f64dSVadim Pasternak mlxplat_logicdev_init(struct resource **hotplug_resources, unsigned int *hotplug_resources_size)
62968c03f64dSVadim Pasternak {
62978c03f64dSVadim Pasternak 	int err;
62988c03f64dSVadim Pasternak 
62998c03f64dSVadim Pasternak 	err = mlxplat_pci_fpga_devices_init(hotplug_resources, hotplug_resources_size);
63008c03f64dSVadim Pasternak 	if (err == -ENODEV)
63018c03f64dSVadim Pasternak 		return mlxplat_lpc_cpld_device_init(hotplug_resources, hotplug_resources_size);
63028c03f64dSVadim Pasternak 
63038c03f64dSVadim Pasternak 	return err;
63048c03f64dSVadim Pasternak }
63058c03f64dSVadim Pasternak 
63068c03f64dSVadim Pasternak static void mlxplat_logicdev_exit(void)
63078c03f64dSVadim Pasternak {
63088c03f64dSVadim Pasternak 	if (lpc_bridge)
63098c03f64dSVadim Pasternak 		mlxplat_pci_fpga_devices_exit();
63108c03f64dSVadim Pasternak 	else
63118c03f64dSVadim Pasternak 		mlxplat_lpc_cpld_device_exit();
63128c03f64dSVadim Pasternak }
63138c03f64dSVadim Pasternak 
63148c03f64dSVadim Pasternak static int mlxplat_platdevs_init(struct mlxplat_priv *priv)
63158c03f64dSVadim Pasternak {
63168c03f64dSVadim Pasternak 	int i = 0, err;
63178c03f64dSVadim Pasternak 
63188c03f64dSVadim Pasternak 	/* Add hotplug driver */
63198c03f64dSVadim Pasternak 	if (mlxplat_hotplug) {
63208c03f64dSVadim Pasternak 		mlxplat_hotplug->regmap = priv->regmap;
63218c03f64dSVadim Pasternak 		if (priv->irq_fpga)
63228c03f64dSVadim Pasternak 			mlxplat_hotplug->irq = priv->irq_fpga;
63238c03f64dSVadim Pasternak 		priv->pdev_hotplug =
63248c03f64dSVadim Pasternak 		platform_device_register_resndata(&mlxplat_dev->dev,
63258c03f64dSVadim Pasternak 						  "mlxreg-hotplug", PLATFORM_DEVID_NONE,
63268c03f64dSVadim Pasternak 						  priv->hotplug_resources,
63278c03f64dSVadim Pasternak 						  priv->hotplug_resources_size,
63288c03f64dSVadim Pasternak 						  mlxplat_hotplug, sizeof(*mlxplat_hotplug));
63298c03f64dSVadim Pasternak 		if (IS_ERR(priv->pdev_hotplug)) {
63308c03f64dSVadim Pasternak 			err = PTR_ERR(priv->pdev_hotplug);
63318c03f64dSVadim Pasternak 			goto fail_platform_hotplug_register;
63328c03f64dSVadim Pasternak 		}
63338c03f64dSVadim Pasternak 	}
63348c03f64dSVadim Pasternak 
63358c03f64dSVadim Pasternak 	/* Add LED driver. */
63368c03f64dSVadim Pasternak 	if (mlxplat_led) {
63378c03f64dSVadim Pasternak 		mlxplat_led->regmap = priv->regmap;
63388c03f64dSVadim Pasternak 		priv->pdev_led =
63398c03f64dSVadim Pasternak 		platform_device_register_resndata(&mlxplat_dev->dev, "leds-mlxreg",
63408c03f64dSVadim Pasternak 						  PLATFORM_DEVID_NONE, NULL, 0, mlxplat_led,
63418c03f64dSVadim Pasternak 						  sizeof(*mlxplat_led));
63428c03f64dSVadim Pasternak 		if (IS_ERR(priv->pdev_led)) {
63438c03f64dSVadim Pasternak 			err = PTR_ERR(priv->pdev_led);
63448c03f64dSVadim Pasternak 			goto fail_platform_leds_register;
63458c03f64dSVadim Pasternak 		}
63468c03f64dSVadim Pasternak 	}
63478c03f64dSVadim Pasternak 
63488c03f64dSVadim Pasternak 	/* Add registers io access driver. */
63498c03f64dSVadim Pasternak 	if (mlxplat_regs_io) {
63508c03f64dSVadim Pasternak 		mlxplat_regs_io->regmap = priv->regmap;
63518c03f64dSVadim Pasternak 		priv->pdev_io_regs = platform_device_register_resndata(&mlxplat_dev->dev,
63528c03f64dSVadim Pasternak 								       "mlxreg-io",
63538c03f64dSVadim Pasternak 								       PLATFORM_DEVID_NONE, NULL,
63548c03f64dSVadim Pasternak 								       0, mlxplat_regs_io,
63558c03f64dSVadim Pasternak 								       sizeof(*mlxplat_regs_io));
63568c03f64dSVadim Pasternak 		if (IS_ERR(priv->pdev_io_regs)) {
63578c03f64dSVadim Pasternak 			err = PTR_ERR(priv->pdev_io_regs);
63588c03f64dSVadim Pasternak 			goto fail_platform_io_register;
63598c03f64dSVadim Pasternak 		}
63608c03f64dSVadim Pasternak 	}
63618c03f64dSVadim Pasternak 
63628c03f64dSVadim Pasternak 	/* Add FAN driver. */
63638c03f64dSVadim Pasternak 	if (mlxplat_fan) {
63648c03f64dSVadim Pasternak 		mlxplat_fan->regmap = priv->regmap;
63658c03f64dSVadim Pasternak 		priv->pdev_fan = platform_device_register_resndata(&mlxplat_dev->dev, "mlxreg-fan",
63668c03f64dSVadim Pasternak 								   PLATFORM_DEVID_NONE, NULL, 0,
63678c03f64dSVadim Pasternak 								   mlxplat_fan,
63688c03f64dSVadim Pasternak 								   sizeof(*mlxplat_fan));
63698c03f64dSVadim Pasternak 		if (IS_ERR(priv->pdev_fan)) {
63708c03f64dSVadim Pasternak 			err = PTR_ERR(priv->pdev_fan);
63718c03f64dSVadim Pasternak 			goto fail_platform_fan_register;
63728c03f64dSVadim Pasternak 		}
63738c03f64dSVadim Pasternak 	}
63748c03f64dSVadim Pasternak 
63758c03f64dSVadim Pasternak 	/* Add WD drivers. */
63768c03f64dSVadim Pasternak 	err = mlxplat_mlxcpld_check_wd_capability(priv->regmap);
63778c03f64dSVadim Pasternak 	if (err)
63788c03f64dSVadim Pasternak 		goto fail_platform_wd_register;
63798c03f64dSVadim Pasternak 	for (i = 0; i < MLXPLAT_CPLD_WD_MAX_DEVS; i++) {
63808c03f64dSVadim Pasternak 		if (mlxplat_wd_data[i]) {
63818c03f64dSVadim Pasternak 			mlxplat_wd_data[i]->regmap = priv->regmap;
63828c03f64dSVadim Pasternak 			priv->pdev_wd[i] =
63838c03f64dSVadim Pasternak 				platform_device_register_resndata(&mlxplat_dev->dev, "mlx-wdt", i,
63848c03f64dSVadim Pasternak 								  NULL, 0, mlxplat_wd_data[i],
63858c03f64dSVadim Pasternak 								  sizeof(*mlxplat_wd_data[i]));
63868c03f64dSVadim Pasternak 			if (IS_ERR(priv->pdev_wd[i])) {
63878c03f64dSVadim Pasternak 				err = PTR_ERR(priv->pdev_wd[i]);
63888c03f64dSVadim Pasternak 				goto fail_platform_wd_register;
63898c03f64dSVadim Pasternak 			}
63908c03f64dSVadim Pasternak 		}
63918c03f64dSVadim Pasternak 	}
63928c03f64dSVadim Pasternak 
63938c03f64dSVadim Pasternak 	return 0;
63948c03f64dSVadim Pasternak 
63958c03f64dSVadim Pasternak fail_platform_wd_register:
63968c03f64dSVadim Pasternak 	while (--i >= 0)
63978c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_wd[i]);
63988c03f64dSVadim Pasternak fail_platform_fan_register:
63998c03f64dSVadim Pasternak 	if (mlxplat_regs_io)
64008c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_io_regs);
64018c03f64dSVadim Pasternak fail_platform_io_register:
64028c03f64dSVadim Pasternak 	if (mlxplat_led)
64038c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_led);
64048c03f64dSVadim Pasternak fail_platform_leds_register:
64058c03f64dSVadim Pasternak 	if (mlxplat_hotplug)
64068c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_hotplug);
64078c03f64dSVadim Pasternak fail_platform_hotplug_register:
64088c03f64dSVadim Pasternak 	return err;
64098c03f64dSVadim Pasternak }
64108c03f64dSVadim Pasternak 
64118c03f64dSVadim Pasternak static void mlxplat_platdevs_exit(struct mlxplat_priv *priv)
64128c03f64dSVadim Pasternak {
64138c03f64dSVadim Pasternak 	int i;
64148c03f64dSVadim Pasternak 
64158c03f64dSVadim Pasternak 	for (i = MLXPLAT_CPLD_WD_MAX_DEVS - 1; i >= 0 ; i--)
64168c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_wd[i]);
64178c03f64dSVadim Pasternak 	if (priv->pdev_fan)
64188c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_fan);
64198c03f64dSVadim Pasternak 	if (priv->pdev_io_regs)
64208c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_io_regs);
64218c03f64dSVadim Pasternak 	if (priv->pdev_led)
64228c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_led);
64238c03f64dSVadim Pasternak 	if (priv->pdev_hotplug)
64248c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_hotplug);
64258c03f64dSVadim Pasternak }
64268c03f64dSVadim Pasternak 
64278c03f64dSVadim Pasternak static int
64288c03f64dSVadim Pasternak mlxplat_i2c_mux_complition_notify(void *handle, struct i2c_adapter *parent,
64298c03f64dSVadim Pasternak 				  struct i2c_adapter *adapters[])
64308c03f64dSVadim Pasternak {
64318c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = handle;
64328c03f64dSVadim Pasternak 
64338c03f64dSVadim Pasternak 	return mlxplat_platdevs_init(priv);
64348c03f64dSVadim Pasternak }
64358c03f64dSVadim Pasternak 
64368c03f64dSVadim Pasternak static int mlxplat_i2c_mux_topology_init(struct mlxplat_priv *priv)
64378c03f64dSVadim Pasternak {
64388c03f64dSVadim Pasternak 	int i, err;
64398c03f64dSVadim Pasternak 
64408c03f64dSVadim Pasternak 	if (!priv->pdev_i2c) {
64418c03f64dSVadim Pasternak 		priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_NOTIFIED;
64428c03f64dSVadim Pasternak 		return 0;
64438c03f64dSVadim Pasternak 	}
64448c03f64dSVadim Pasternak 
64458c03f64dSVadim Pasternak 	priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED;
64468c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_mux_num; i++) {
64478c03f64dSVadim Pasternak 		priv->pdev_mux[i] = platform_device_register_resndata(&priv->pdev_i2c->dev,
64488c03f64dSVadim Pasternak 								      "i2c-mux-reg", i, NULL, 0,
64498c03f64dSVadim Pasternak 								      &mlxplat_mux_data[i],
64508c03f64dSVadim Pasternak 								      sizeof(mlxplat_mux_data[i]));
64518c03f64dSVadim Pasternak 		if (IS_ERR(priv->pdev_mux[i])) {
64528c03f64dSVadim Pasternak 			err = PTR_ERR(priv->pdev_mux[i]);
64538c03f64dSVadim Pasternak 			goto fail_platform_mux_register;
64548c03f64dSVadim Pasternak 		}
64558c03f64dSVadim Pasternak 	}
64568c03f64dSVadim Pasternak 
64578c03f64dSVadim Pasternak 	return mlxplat_i2c_mux_complition_notify(priv, NULL, NULL);
64588c03f64dSVadim Pasternak 
64598c03f64dSVadim Pasternak fail_platform_mux_register:
64608c03f64dSVadim Pasternak 	while (--i >= 0)
64618c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_mux[i]);
64628c03f64dSVadim Pasternak 	return err;
64638c03f64dSVadim Pasternak }
64648c03f64dSVadim Pasternak 
64658c03f64dSVadim Pasternak static void mlxplat_i2c_mux_topology_exit(struct mlxplat_priv *priv)
64668c03f64dSVadim Pasternak {
64678c03f64dSVadim Pasternak 	int i;
64688c03f64dSVadim Pasternak 
64698c03f64dSVadim Pasternak 	for (i = mlxplat_mux_num - 1; i >= 0 ; i--) {
64708c03f64dSVadim Pasternak 		if (priv->pdev_mux[i])
64718c03f64dSVadim Pasternak 			platform_device_unregister(priv->pdev_mux[i]);
64728c03f64dSVadim Pasternak 	}
64738c03f64dSVadim Pasternak }
64748c03f64dSVadim Pasternak 
64758c03f64dSVadim Pasternak static int mlxplat_i2c_main_completion_notify(void *handle, int id)
64768c03f64dSVadim Pasternak {
64778c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = handle;
64788c03f64dSVadim Pasternak 
64798c03f64dSVadim Pasternak 	return mlxplat_i2c_mux_topology_init(priv);
64808c03f64dSVadim Pasternak }
64818c03f64dSVadim Pasternak 
64828c03f64dSVadim Pasternak static int mlxplat_i2c_main_init(struct mlxplat_priv *priv)
64838c03f64dSVadim Pasternak {
64848c03f64dSVadim Pasternak 	int nr, err;
64858c03f64dSVadim Pasternak 
64868c03f64dSVadim Pasternak 	if (!mlxplat_i2c)
64878c03f64dSVadim Pasternak 		return 0;
64888c03f64dSVadim Pasternak 
64898c03f64dSVadim Pasternak 	err = mlxplat_mlxcpld_verify_bus_topology(&nr);
64908c03f64dSVadim Pasternak 	if (nr < 0)
64918c03f64dSVadim Pasternak 		goto fail_mlxplat_mlxcpld_verify_bus_topology;
64928c03f64dSVadim Pasternak 
64938c03f64dSVadim Pasternak 	nr = (nr == mlxplat_max_adap_num) ? -1 : nr;
64948c03f64dSVadim Pasternak 	mlxplat_i2c->regmap = priv->regmap;
64958c03f64dSVadim Pasternak 	mlxplat_i2c->handle = priv;
64968c03f64dSVadim Pasternak 
64978c03f64dSVadim Pasternak 	/* Set mapped base address of I2C-LPC bridge over PCIe */
64988c03f64dSVadim Pasternak 	if (lpc_bridge)
64998c03f64dSVadim Pasternak 		mlxplat_i2c->addr = i2c_bridge_addr;
65008c03f64dSVadim Pasternak 	priv->pdev_i2c = platform_device_register_resndata(&mlxplat_dev->dev, "i2c_mlxcpld",
65018c03f64dSVadim Pasternak 							   nr, priv->hotplug_resources,
65028c03f64dSVadim Pasternak 							   priv->hotplug_resources_size,
65038c03f64dSVadim Pasternak 							   mlxplat_i2c, sizeof(*mlxplat_i2c));
65048c03f64dSVadim Pasternak 	if (IS_ERR(priv->pdev_i2c)) {
65058c03f64dSVadim Pasternak 		err = PTR_ERR(priv->pdev_i2c);
65068c03f64dSVadim Pasternak 		goto fail_platform_i2c_register;
65078c03f64dSVadim Pasternak 	}
65088c03f64dSVadim Pasternak 
65098c03f64dSVadim Pasternak 	if (priv->i2c_main_init_status == MLXPLAT_I2C_MAIN_BUS_NOTIFIED) {
65108c03f64dSVadim Pasternak 		err = mlxplat_i2c_mux_topology_init(priv);
65118c03f64dSVadim Pasternak 		if (err)
65128c03f64dSVadim Pasternak 			goto fail_mlxplat_i2c_mux_topology_init;
65138c03f64dSVadim Pasternak 	}
65148c03f64dSVadim Pasternak 
65158c03f64dSVadim Pasternak 	return 0;
65168c03f64dSVadim Pasternak 
65178c03f64dSVadim Pasternak fail_mlxplat_i2c_mux_topology_init:
65188c03f64dSVadim Pasternak 	platform_device_unregister(priv->pdev_i2c);
65198c03f64dSVadim Pasternak fail_platform_i2c_register:
65208c03f64dSVadim Pasternak fail_mlxplat_mlxcpld_verify_bus_topology:
65218c03f64dSVadim Pasternak 	return err;
65228c03f64dSVadim Pasternak }
65238c03f64dSVadim Pasternak 
65248c03f64dSVadim Pasternak static void mlxplat_i2c_main_exit(struct mlxplat_priv *priv)
65258c03f64dSVadim Pasternak {
65268c03f64dSVadim Pasternak 	mlxplat_platdevs_exit(priv);
65278c03f64dSVadim Pasternak 	mlxplat_i2c_mux_topology_exit(priv);
65288c03f64dSVadim Pasternak 	if (priv->pdev_i2c)
65298c03f64dSVadim Pasternak 		platform_device_unregister(priv->pdev_i2c);
65308c03f64dSVadim Pasternak }
65318c03f64dSVadim Pasternak 
65328c03f64dSVadim Pasternak static int mlxplat_probe(struct platform_device *pdev)
65338c03f64dSVadim Pasternak {
65348c03f64dSVadim Pasternak 	unsigned int hotplug_resources_size = 0;
65358c03f64dSVadim Pasternak 	struct resource *hotplug_resources = NULL;
65368c03f64dSVadim Pasternak 	struct acpi_device *acpi_dev;
65378c03f64dSVadim Pasternak 	struct mlxplat_priv *priv;
65388c03f64dSVadim Pasternak 	int irq_fpga = 0, i, err;
65398c03f64dSVadim Pasternak 
65408c03f64dSVadim Pasternak 	acpi_dev = ACPI_COMPANION(&pdev->dev);
65418c03f64dSVadim Pasternak 	if (acpi_dev) {
65428c03f64dSVadim Pasternak 		irq_fpga = acpi_dev_gpio_irq_get(acpi_dev, 0);
65438c03f64dSVadim Pasternak 		if (irq_fpga < 0)
65448c03f64dSVadim Pasternak 			return -ENODEV;
65458c03f64dSVadim Pasternak 		mlxplat_dev = pdev;
65468c03f64dSVadim Pasternak 	}
65478c03f64dSVadim Pasternak 
65488c03f64dSVadim Pasternak 	err = mlxplat_logicdev_init(&hotplug_resources, &hotplug_resources_size);
65498c03f64dSVadim Pasternak 	if (err)
65508c03f64dSVadim Pasternak 		return err;
65518c03f64dSVadim Pasternak 
65528c03f64dSVadim Pasternak 	priv = devm_kzalloc(&mlxplat_dev->dev, sizeof(struct mlxplat_priv),
65538c03f64dSVadim Pasternak 			    GFP_KERNEL);
65548c03f64dSVadim Pasternak 	if (!priv) {
65558c03f64dSVadim Pasternak 		err = -ENOMEM;
65568c03f64dSVadim Pasternak 		goto fail_alloc;
65578c03f64dSVadim Pasternak 	}
65588c03f64dSVadim Pasternak 	platform_set_drvdata(mlxplat_dev, priv);
65598c03f64dSVadim Pasternak 	priv->hotplug_resources = hotplug_resources;
65608c03f64dSVadim Pasternak 	priv->hotplug_resources_size = hotplug_resources_size;
65618c03f64dSVadim Pasternak 	priv->irq_fpga = irq_fpga;
65628c03f64dSVadim Pasternak 
65638c03f64dSVadim Pasternak 	if (!mlxplat_regmap_config)
65648c03f64dSVadim Pasternak 		mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config;
65658c03f64dSVadim Pasternak 
65668c03f64dSVadim Pasternak 	priv->regmap = devm_regmap_init(&mlxplat_dev->dev, NULL,
65678c03f64dSVadim Pasternak 					&mlxplat_mlxcpld_regmap_ctx,
65688c03f64dSVadim Pasternak 					mlxplat_regmap_config);
65698c03f64dSVadim Pasternak 	if (IS_ERR(priv->regmap)) {
65708c03f64dSVadim Pasternak 		err = PTR_ERR(priv->regmap);
65718c03f64dSVadim Pasternak 		goto fail_alloc;
65728c03f64dSVadim Pasternak 	}
65738c03f64dSVadim Pasternak 
65748c03f64dSVadim Pasternak 	/* Set default registers. */
65758c03f64dSVadim Pasternak 	for (i = 0; i < mlxplat_regmap_config->num_reg_defaults; i++) {
65768c03f64dSVadim Pasternak 		err = regmap_write(priv->regmap,
65778c03f64dSVadim Pasternak 				   mlxplat_regmap_config->reg_defaults[i].reg,
65788c03f64dSVadim Pasternak 				   mlxplat_regmap_config->reg_defaults[i].def);
65798c03f64dSVadim Pasternak 		if (err)
65808c03f64dSVadim Pasternak 			goto fail_regmap_write;
65818c03f64dSVadim Pasternak 	}
65828c03f64dSVadim Pasternak 
65838c03f64dSVadim Pasternak 	err = mlxplat_i2c_main_init(priv);
65848c03f64dSVadim Pasternak 	if (err)
65858c03f64dSVadim Pasternak 		goto fail_mlxplat_i2c_main_init;
65868c03f64dSVadim Pasternak 
65878c03f64dSVadim Pasternak 	/* Sync registers with hardware. */
65888c03f64dSVadim Pasternak 	regcache_mark_dirty(priv->regmap);
65898c03f64dSVadim Pasternak 	err = regcache_sync(priv->regmap);
65908c03f64dSVadim Pasternak 	if (err)
65918c03f64dSVadim Pasternak 		goto fail_regcache_sync;
65928c03f64dSVadim Pasternak 
65938c03f64dSVadim Pasternak 	if (mlxplat_reboot_nb) {
65948c03f64dSVadim Pasternak 		err = register_reboot_notifier(mlxplat_reboot_nb);
65958c03f64dSVadim Pasternak 		if (err)
65968c03f64dSVadim Pasternak 			goto fail_register_reboot_notifier;
65978c03f64dSVadim Pasternak 	}
65988c03f64dSVadim Pasternak 
65998c03f64dSVadim Pasternak 	return 0;
66008c03f64dSVadim Pasternak 
66018c03f64dSVadim Pasternak fail_register_reboot_notifier:
66028c03f64dSVadim Pasternak fail_regcache_sync:
66038c03f64dSVadim Pasternak 	mlxplat_i2c_main_exit(priv);
66048c03f64dSVadim Pasternak fail_mlxplat_i2c_main_init:
66058c03f64dSVadim Pasternak fail_regmap_write:
66068c03f64dSVadim Pasternak fail_alloc:
66078c03f64dSVadim Pasternak 	mlxplat_logicdev_exit();
66088c03f64dSVadim Pasternak 
66098c03f64dSVadim Pasternak 	return err;
66108c03f64dSVadim Pasternak }
66118c03f64dSVadim Pasternak 
66128c03f64dSVadim Pasternak static void mlxplat_remove(struct platform_device *pdev)
66138c03f64dSVadim Pasternak {
66148c03f64dSVadim Pasternak 	struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev);
66158c03f64dSVadim Pasternak 
66168c03f64dSVadim Pasternak 	if (pm_power_off)
66178c03f64dSVadim Pasternak 		pm_power_off = NULL;
66188c03f64dSVadim Pasternak 	if (mlxplat_reboot_nb)
66198c03f64dSVadim Pasternak 		unregister_reboot_notifier(mlxplat_reboot_nb);
66208c03f64dSVadim Pasternak 	mlxplat_i2c_main_exit(priv);
66218c03f64dSVadim Pasternak 	mlxplat_logicdev_exit();
66228c03f64dSVadim Pasternak }
66238c03f64dSVadim Pasternak 
66248c03f64dSVadim Pasternak static const struct acpi_device_id mlxplat_acpi_table[] = {
66258c03f64dSVadim Pasternak 	{ "MLNXBF49", 0 },
66268c03f64dSVadim Pasternak 	{}
66278c03f64dSVadim Pasternak };
66288c03f64dSVadim Pasternak MODULE_DEVICE_TABLE(acpi, mlxplat_acpi_table);
66298c03f64dSVadim Pasternak 
66308c03f64dSVadim Pasternak static struct platform_driver mlxplat_driver = {
66318c03f64dSVadim Pasternak 	.driver		= {
66328c03f64dSVadim Pasternak 		.name	= "mlxplat",
66338c03f64dSVadim Pasternak 		.acpi_match_table = mlxplat_acpi_table,
66348c03f64dSVadim Pasternak 		.probe_type = PROBE_FORCE_SYNCHRONOUS,
66358c03f64dSVadim Pasternak 	},
66368c03f64dSVadim Pasternak 	.probe		= mlxplat_probe,
66378c03f64dSVadim Pasternak 	.remove		= mlxplat_remove,
66388c03f64dSVadim Pasternak };
66398c03f64dSVadim Pasternak 
66408c03f64dSVadim Pasternak static int __init mlxplat_init(void)
66418c03f64dSVadim Pasternak {
66428c03f64dSVadim Pasternak 	int err;
66438c03f64dSVadim Pasternak 
66448c03f64dSVadim Pasternak 	if (!dmi_check_system(mlxplat_dmi_table))
66458c03f64dSVadim Pasternak 		return -ENODEV;
66468c03f64dSVadim Pasternak 
66478c03f64dSVadim Pasternak 	err = platform_driver_register(&mlxplat_driver);
66488c03f64dSVadim Pasternak 	if (err)
66498c03f64dSVadim Pasternak 		return err;
66508c03f64dSVadim Pasternak 	return 0;
66518c03f64dSVadim Pasternak }
66528c03f64dSVadim Pasternak module_init(mlxplat_init);
66538c03f64dSVadim Pasternak 
66548c03f64dSVadim Pasternak static void __exit mlxplat_exit(void)
66558c03f64dSVadim Pasternak {
66568c03f64dSVadim Pasternak 	if (mlxplat_dev)
66578c03f64dSVadim Pasternak 		platform_device_unregister(mlxplat_dev);
66588c03f64dSVadim Pasternak 
66598c03f64dSVadim Pasternak 	platform_driver_unregister(&mlxplat_driver);
66608c03f64dSVadim Pasternak }
66618c03f64dSVadim Pasternak module_exit(mlxplat_exit);
66628c03f64dSVadim Pasternak 
66638c03f64dSVadim Pasternak MODULE_AUTHOR("Vadim Pasternak <vadimp@mellanox.com>");
66648c03f64dSVadim Pasternak MODULE_DESCRIPTION("Mellanox platform driver");
66658c03f64dSVadim Pasternak MODULE_LICENSE("Dual BSD/GPL");
6666