1*8c03f64dSVadim Pasternak // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 2*8c03f64dSVadim Pasternak /* 3*8c03f64dSVadim Pasternak * Mellanox platform driver 4*8c03f64dSVadim Pasternak * 5*8c03f64dSVadim Pasternak * Copyright (C) 2016-2018 Mellanox Technologies 6*8c03f64dSVadim Pasternak * Copyright (C) 2016-2018 Vadim Pasternak <vadimp@mellanox.com> 7*8c03f64dSVadim Pasternak */ 8*8c03f64dSVadim Pasternak 9*8c03f64dSVadim Pasternak #include <linux/device.h> 10*8c03f64dSVadim Pasternak #include <linux/dmi.h> 11*8c03f64dSVadim Pasternak #include <linux/i2c.h> 12*8c03f64dSVadim Pasternak #include <linux/i2c-mux.h> 13*8c03f64dSVadim Pasternak #include <linux/io.h> 14*8c03f64dSVadim Pasternak #include <linux/module.h> 15*8c03f64dSVadim Pasternak #include <linux/pci.h> 16*8c03f64dSVadim Pasternak #include <linux/platform_device.h> 17*8c03f64dSVadim Pasternak #include <linux/platform_data/i2c-mux-reg.h> 18*8c03f64dSVadim Pasternak #include <linux/platform_data/mlxreg.h> 19*8c03f64dSVadim Pasternak #include <linux/reboot.h> 20*8c03f64dSVadim Pasternak #include <linux/regmap.h> 21*8c03f64dSVadim Pasternak 22*8c03f64dSVadim Pasternak #define MLX_PLAT_DEVICE_NAME "mlxplat" 23*8c03f64dSVadim Pasternak 24*8c03f64dSVadim Pasternak /* LPC bus IO offsets */ 25*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_I2C_BASE_ADRR 0x2000 26*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BASE_ADRR 0x2500 27*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET 0x00 28*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET 0x01 29*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET 0x02 30*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET 0x03 31*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET 0x04 32*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET 0x05 33*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET 0x06 34*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET 0x07 35*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET 0x08 36*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET 0x09 37*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET 0x0a 38*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET 0x0b 39*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET 0x17 40*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET 0x19 41*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET 0x1c 42*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET 0x1d 43*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET 0x1e 44*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET 0x1f 45*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED1_OFFSET 0x20 46*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED2_OFFSET 0x21 47*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED3_OFFSET 0x22 48*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED4_OFFSET 0x23 49*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED5_OFFSET 0x24 50*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED6_OFFSET 0x25 51*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LED7_OFFSET 0x26 52*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION 0x2a 53*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET 0x2b 54*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET 0x2d 55*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP0_OFFSET 0x2e 56*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET 0x2f 57*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP1_OFFSET 0x30 58*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WP1_OFFSET 0x31 59*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP2_OFFSET 0x32 60*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WP2_OFFSET 0x33 61*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE 0x34 62*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET 0x35 63*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET 0x36 64*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET 0x37 65*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET 0x3a 66*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET 0x3b 67*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET 0x3c 68*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET 0x40 69*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET 0x41 70*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET 0x42 71*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET 0x43 72*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET 0x44 73*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET 0x45 74*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_OFFSET 0x47 75*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET 0x48 76*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET 0x49 77*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_OFFSET 0x4a 78*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET 0x4b 79*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET 0x4c 80*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET 0x50 81*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET 0x51 82*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET 0x52 83*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET 0x53 84*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET 0x54 85*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET 0x55 86*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET 0x56 87*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET 0x57 88*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_OFFSET 0x58 89*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET 0x59 90*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET 0x5a 91*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_OFFSET 0x64 92*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET 0x65 93*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET 0x66 94*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET 0x70 95*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET 0x71 96*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET 0x72 97*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_OFFSET 0x88 98*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET 0x89 99*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET 0x8a 100*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET 0x8e 101*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET 0x8f 102*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET 0x90 103*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_OFFSET 0x91 104*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET 0x92 105*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET 0x93 106*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET 0x94 107*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET 0x95 108*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET 0x96 109*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET 0x97 110*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET 0x98 111*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET 0x99 112*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET 0x9a 113*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET 0x9b 114*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET 0x9c 115*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET 0x9d 116*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET 0x9e 117*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET 0x9f 118*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET 0xa0 119*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET 0xa1 120*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET 0xa2 121*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET 0xa3 122*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET 0xa4 123*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET 0xa5 124*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET 0xa6 125*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET 0xa7 126*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET 0xa8 127*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET 0xa9 128*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET 0xaa 129*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET 0xab 130*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_LC_PWR_ON 0xb2 131*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET 0xb6 132*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET 0xb7 133*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET 0xb8 134*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET 0xb9 135*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET 0xc2 136*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT 0xc3 137*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET 0xc4 138*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET 0xc7 139*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET 0xc8 140*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET 0xc9 141*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET 0xcb 142*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET 0xcd 143*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET 0xce 144*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET 0xcf 145*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET 0xd1 146*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET 0xd2 147*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET 0xd3 148*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET 0xd9 149*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET 0xdb 150*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET 0xda 151*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET 0xdc 152*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET 0xdd 153*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET 0xde 154*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET 0xdf 155*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET 0xe0 156*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET 0xe1 157*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET 0xe2 158*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET 0xe3 159*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET 0xe4 160*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET 0xe5 161*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET 0xe6 162*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET 0xe7 163*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET 0xe8 164*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET 0xe9 165*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET 0xea 166*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET 0xeb 167*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET 0xec 168*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET 0xed 169*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET 0xee 170*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET 0xef 171*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET 0xf0 172*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET 0xf1 173*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET 0xf2 174*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET 0xf3 175*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET 0xf4 176*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET 0xf5 177*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET 0xf6 178*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET 0xf7 179*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET 0xf8 180*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET 0xf9 181*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET 0xfa 182*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET 0xfb 183*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET 0xfc 184*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET 0xfd 185*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_IO_RANGE 0x100 186*8c03f64dSVadim Pasternak 187*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_PIO_OFFSET 0x10000UL 188*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG1 ((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \ 189*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET) | \ 190*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_PIO_OFFSET) 191*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG2 ((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \ 192*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET) | \ 193*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_PIO_OFFSET) 194*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG3 ((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \ 195*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET) | \ 196*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_PIO_OFFSET) 197*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_REG4 ((MLXPLAT_CPLD_LPC_REG_BASE_ADRR + \ 198*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET) | \ 199*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_PIO_OFFSET) 200*8c03f64dSVadim Pasternak 201*8c03f64dSVadim Pasternak /* Masks for aggregation, psu, pwr and fan event in CPLD related registers. */ 202*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF 0x04 203*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_PSU_MASK_DEF 0x08 204*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_PWR_MASK_DEF 0x08 205*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_FAN_MASK_DEF 0x40 206*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_DEF (MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF | \ 207*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_PSU_MASK_DEF | \ 208*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_FAN_MASK_DEF) 209*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_ASIC_MASK_NG 0x01 210*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_NG_DEF 0x04 211*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_COMEX BIT(0) 212*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC BIT(3) 213*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_MODULAR (MLXPLAT_CPLD_AGGR_MASK_NG_DEF | \ 214*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_COMEX | \ 215*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC) 216*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_PRSNT BIT(0) 217*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_RDY BIT(1) 218*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_PG BIT(2) 219*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SCRD BIT(3) 220*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SYNC BIT(4) 221*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_ACT BIT(5) 222*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_SDWN BIT(6) 223*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_LC_LOW (MLXPLAT_CPLD_AGGR_MASK_LC_PRSNT | \ 224*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_RDY | \ 225*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_PG | \ 226*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_SCRD | \ 227*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_SYNC | \ 228*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_ACT | \ 229*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_SDWN) 230*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_LOW 0xc1 231*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2 BIT(2) 232*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT GENMASK(5, 4) 233*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGR_MASK_I2C BIT(6) 234*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_MASK GENMASK(1, 0) 235*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_MASK GENMASK(1, 0) 236*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_EXT_MASK GENMASK(3, 0) 237*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_EXT_MASK GENMASK(3, 0) 238*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN_MASK GENMASK(3, 0) 239*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_ASIC_MASK GENMASK(1, 0) 240*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN_NG_MASK GENMASK(6, 0) 241*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LED_LO_NIBBLE_MASK GENMASK(7, 4) 242*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LED_HI_NIBBLE_MASK GENMASK(3, 0) 243*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_VOLTREG_UPD_MASK GENMASK(5, 4) 244*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_GWP_MASK GENMASK(0, 0) 245*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_EROT_MASK GENMASK(1, 0) 246*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FU_CAP_MASK GENMASK(1, 0) 247*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWR_BUTTON_MASK BIT(0) 248*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LATCH_RST_MASK BIT(6) 249*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_THERMAL1_PDB_MASK BIT(3) 250*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_THERMAL2_PDB_MASK BIT(4) 251*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_INTRUSION_MASK BIT(6) 252*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PWM_PG_MASK BIT(7) 253*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_L1_CHA_HEALTH_MASK (MLXPLAT_CPLD_THERMAL1_PDB_MASK | \ 254*8c03f64dSVadim Pasternak MLXPLAT_CPLD_THERMAL2_PDB_MASK | \ 255*8c03f64dSVadim Pasternak MLXPLAT_CPLD_INTRUSION_MASK |\ 256*8c03f64dSVadim Pasternak MLXPLAT_CPLD_PWM_PG_MASK) 257*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_I2C_CAP_BIT 0x04 258*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_I2C_CAP_MASK GENMASK(5, MLXPLAT_CPLD_I2C_CAP_BIT) 259*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_SYS_RESET_MASK BIT(0) 260*8c03f64dSVadim Pasternak 261*8c03f64dSVadim Pasternak /* Masks for aggregation for comex carriers */ 262*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_CARRIER BIT(1) 263*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_AGGR_MASK_CARR_DEF (MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF | \ 264*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_CARRIER) 265*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LOW_AGGRCX_MASK 0xc1 266*8c03f64dSVadim Pasternak 267*8c03f64dSVadim Pasternak /* Masks for aggregation for modular systems */ 268*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_LC_MASK GENMASK(7, 0) 269*8c03f64dSVadim Pasternak 270*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_HALT_MASK BIT(3) 271*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_RESET_MASK GENMASK(7, 1) 272*8c03f64dSVadim Pasternak 273*8c03f64dSVadim Pasternak /* Default I2C parent bus number */ 274*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR 1 275*8c03f64dSVadim Pasternak 276*8c03f64dSVadim Pasternak /* Maximum number of possible physical buses equipped on system */ 277*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM 16 278*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM 24 279*8c03f64dSVadim Pasternak 280*8c03f64dSVadim Pasternak /* Number of channels in group */ 281*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_GRP_CHNL_NUM 8 282*8c03f64dSVadim Pasternak 283*8c03f64dSVadim Pasternak /* Start channel numbers */ 284*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH1 2 285*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2 10 286*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH3 18 287*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_ETH_MODULAR 3 288*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH3_ETH_MODULAR 43 289*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH4_ETH_MODULAR 51 290*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_RACK_SWITCH 18 291*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_CH2_NG800 34 292*8c03f64dSVadim Pasternak 293*8c03f64dSVadim Pasternak /* Number of LPC attached MUX platform devices */ 294*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_MUX_DEVS 4 295*8c03f64dSVadim Pasternak 296*8c03f64dSVadim Pasternak /* Hotplug devices adapter numbers */ 297*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_NONE -1 298*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_DEFAULT_NR 10 299*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_PSU_MSNXXXX_NR 4 300*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN1_DEFAULT_NR 11 301*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN2_DEFAULT_NR 12 302*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN3_DEFAULT_NR 13 303*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_FAN4_DEFAULT_NR 14 304*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_ASIC 3 305*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_LC_BASE 34 306*8c03f64dSVadim Pasternak 307*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_NR_LC_SET(nr) (MLXPLAT_CPLD_NR_LC_BASE + (nr)) 308*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LC_ADDR 0x32 309*8c03f64dSVadim Pasternak 310*8c03f64dSVadim Pasternak /* Masks and default values for watchdogs */ 311*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD1_CLEAR_MASK GENMASK(7, 1) 312*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD2_CLEAR_MASK (GENMASK(7, 0) & ~BIT(1)) 313*8c03f64dSVadim Pasternak 314*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_TYPE1_TO_MASK GENMASK(7, 4) 315*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_TYPE2_TO_MASK 0 316*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_RESET_ACT_MASK GENMASK(7, 1) 317*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_FAN_ACT_MASK (GENMASK(7, 0) & ~BIT(4)) 318*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_COUNT_ACT_MASK (GENMASK(7, 0) & ~BIT(7)) 319*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_CPBLTY_MASK (GENMASK(7, 0) & ~BIT(6)) 320*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_DFLT_TIMEOUT 30 321*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD3_DFLT_TIMEOUT 600 322*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_WD_MAX_DEVS 2 323*8c03f64dSVadim Pasternak 324*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_LPC_SYSIRQ 17 325*8c03f64dSVadim Pasternak 326*8c03f64dSVadim Pasternak /* Minimum power required for turning on Ethernet modular system (WATT) */ 327*8c03f64dSVadim Pasternak #define MLXPLAT_CPLD_ETH_MODULAR_PWR_MIN 50 328*8c03f64dSVadim Pasternak 329*8c03f64dSVadim Pasternak /* Default value for PWM control register for rack switch system */ 330*8c03f64dSVadim Pasternak #define MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT 0xf4 331*8c03f64dSVadim Pasternak 332*8c03f64dSVadim Pasternak #define MLXPLAT_I2C_MAIN_BUS_NOTIFIED 0x01 333*8c03f64dSVadim Pasternak #define MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED 0x02 334*8c03f64dSVadim Pasternak 335*8c03f64dSVadim Pasternak /* Lattice FPGA PCI configuration */ 336*8c03f64dSVadim Pasternak #define PCI_VENDOR_ID_LATTICE 0x1204 337*8c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_I2C_BRIDGE 0x9c2f 338*8c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_JTAG_BRIDGE 0x9c30 339*8c03f64dSVadim Pasternak #define PCI_DEVICE_ID_LATTICE_LPC_BRIDGE 0x9c32 340*8c03f64dSVadim Pasternak 341*8c03f64dSVadim Pasternak /* mlxplat_priv - platform private data 342*8c03f64dSVadim Pasternak * @pdev_i2c - i2c controller platform device 343*8c03f64dSVadim Pasternak * @pdev_mux - array of mux platform devices 344*8c03f64dSVadim Pasternak * @pdev_hotplug - hotplug platform devices 345*8c03f64dSVadim Pasternak * @pdev_led - led platform devices 346*8c03f64dSVadim Pasternak * @pdev_io_regs - register access platform devices 347*8c03f64dSVadim Pasternak * @pdev_fan - FAN platform devices 348*8c03f64dSVadim Pasternak * @pdev_wd - array of watchdog platform devices 349*8c03f64dSVadim Pasternak * @regmap: device register map 350*8c03f64dSVadim Pasternak * @hotplug_resources: system hotplug resources 351*8c03f64dSVadim Pasternak * @hotplug_resources_size: size of system hotplug resources 352*8c03f64dSVadim Pasternak * @hi2c_main_init_status: init status of I2C main bus 353*8c03f64dSVadim Pasternak * @irq_fpga: FPGA IRQ number 354*8c03f64dSVadim Pasternak */ 355*8c03f64dSVadim Pasternak struct mlxplat_priv { 356*8c03f64dSVadim Pasternak struct platform_device *pdev_i2c; 357*8c03f64dSVadim Pasternak struct platform_device *pdev_mux[MLXPLAT_CPLD_LPC_MUX_DEVS]; 358*8c03f64dSVadim Pasternak struct platform_device *pdev_hotplug; 359*8c03f64dSVadim Pasternak struct platform_device *pdev_led; 360*8c03f64dSVadim Pasternak struct platform_device *pdev_io_regs; 361*8c03f64dSVadim Pasternak struct platform_device *pdev_fan; 362*8c03f64dSVadim Pasternak struct platform_device *pdev_wd[MLXPLAT_CPLD_WD_MAX_DEVS]; 363*8c03f64dSVadim Pasternak void *regmap; 364*8c03f64dSVadim Pasternak struct resource *hotplug_resources; 365*8c03f64dSVadim Pasternak unsigned int hotplug_resources_size; 366*8c03f64dSVadim Pasternak u8 i2c_main_init_status; 367*8c03f64dSVadim Pasternak int irq_fpga; 368*8c03f64dSVadim Pasternak }; 369*8c03f64dSVadim Pasternak 370*8c03f64dSVadim Pasternak static struct platform_device *mlxplat_dev; 371*8c03f64dSVadim Pasternak static int mlxplat_i2c_main_completion_notify(void *handle, int id); 372*8c03f64dSVadim Pasternak static void __iomem *i2c_bridge_addr, *jtag_bridge_addr; 373*8c03f64dSVadim Pasternak 374*8c03f64dSVadim Pasternak /* Regions for LPC I2C controller and LPC base register space */ 375*8c03f64dSVadim Pasternak static const struct resource mlxplat_lpc_resources[] = { 376*8c03f64dSVadim Pasternak [0] = DEFINE_RES_NAMED(MLXPLAT_CPLD_LPC_I2C_BASE_ADRR, 377*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_IO_RANGE, 378*8c03f64dSVadim Pasternak "mlxplat_cpld_lpc_i2c_ctrl", IORESOURCE_IO), 379*8c03f64dSVadim Pasternak [1] = DEFINE_RES_NAMED(MLXPLAT_CPLD_LPC_REG_BASE_ADRR, 380*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LPC_IO_RANGE, 381*8c03f64dSVadim Pasternak "mlxplat_cpld_lpc_regs", 382*8c03f64dSVadim Pasternak IORESOURCE_IO), 383*8c03f64dSVadim Pasternak }; 384*8c03f64dSVadim Pasternak 385*8c03f64dSVadim Pasternak /* Platform systems default i2c data */ 386*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_default_data = { 387*8c03f64dSVadim Pasternak .completion_notify = mlxplat_i2c_main_completion_notify, 388*8c03f64dSVadim Pasternak }; 389*8c03f64dSVadim Pasternak 390*8c03f64dSVadim Pasternak /* Platform i2c next generation systems data */ 391*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_i2c_ng_items_data[] = { 392*8c03f64dSVadim Pasternak { 393*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 394*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_I2C_CAP_MASK, 395*8c03f64dSVadim Pasternak .bit = MLXPLAT_CPLD_I2C_CAP_BIT, 396*8c03f64dSVadim Pasternak }, 397*8c03f64dSVadim Pasternak }; 398*8c03f64dSVadim Pasternak 399*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_i2c_ng_items[] = { 400*8c03f64dSVadim Pasternak { 401*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_i2c_ng_items_data, 402*8c03f64dSVadim Pasternak }, 403*8c03f64dSVadim Pasternak }; 404*8c03f64dSVadim Pasternak 405*8c03f64dSVadim Pasternak /* Platform next generation systems i2c data */ 406*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_i2c_ng_data = { 407*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_i2c_ng_items, 408*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 409*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_COMEX, 410*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET, 411*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_I2C, 412*8c03f64dSVadim Pasternak .completion_notify = mlxplat_i2c_main_completion_notify, 413*8c03f64dSVadim Pasternak }; 414*8c03f64dSVadim Pasternak 415*8c03f64dSVadim Pasternak /* Platform default channels */ 416*8c03f64dSVadim Pasternak static const int mlxplat_default_channels[][MLXPLAT_CPLD_GRP_CHNL_NUM] = { 417*8c03f64dSVadim Pasternak { 418*8c03f64dSVadim Pasternak MLXPLAT_CPLD_CH1, MLXPLAT_CPLD_CH1 + 1, MLXPLAT_CPLD_CH1 + 2, 419*8c03f64dSVadim Pasternak MLXPLAT_CPLD_CH1 + 3, MLXPLAT_CPLD_CH1 + 4, MLXPLAT_CPLD_CH1 + 420*8c03f64dSVadim Pasternak 5, MLXPLAT_CPLD_CH1 + 6, MLXPLAT_CPLD_CH1 + 7 421*8c03f64dSVadim Pasternak }, 422*8c03f64dSVadim Pasternak { 423*8c03f64dSVadim Pasternak MLXPLAT_CPLD_CH2, MLXPLAT_CPLD_CH2 + 1, MLXPLAT_CPLD_CH2 + 2, 424*8c03f64dSVadim Pasternak MLXPLAT_CPLD_CH2 + 3, MLXPLAT_CPLD_CH2 + 4, MLXPLAT_CPLD_CH2 + 425*8c03f64dSVadim Pasternak 5, MLXPLAT_CPLD_CH2 + 6, MLXPLAT_CPLD_CH2 + 7 426*8c03f64dSVadim Pasternak }, 427*8c03f64dSVadim Pasternak }; 428*8c03f64dSVadim Pasternak 429*8c03f64dSVadim Pasternak /* Platform channels for MSN21xx system family */ 430*8c03f64dSVadim Pasternak static const int mlxplat_msn21xx_channels[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 431*8c03f64dSVadim Pasternak 432*8c03f64dSVadim Pasternak /* Platform mux data */ 433*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_default_mux_data[] = { 434*8c03f64dSVadim Pasternak { 435*8c03f64dSVadim Pasternak .parent = 1, 436*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH1, 437*8c03f64dSVadim Pasternak .write_only = 1, 438*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, 439*8c03f64dSVadim Pasternak .reg_size = 1, 440*8c03f64dSVadim Pasternak .idle_in_use = 1, 441*8c03f64dSVadim Pasternak }, 442*8c03f64dSVadim Pasternak { 443*8c03f64dSVadim Pasternak .parent = 1, 444*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH2, 445*8c03f64dSVadim Pasternak .write_only = 1, 446*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, 447*8c03f64dSVadim Pasternak .reg_size = 1, 448*8c03f64dSVadim Pasternak .idle_in_use = 1, 449*8c03f64dSVadim Pasternak }, 450*8c03f64dSVadim Pasternak 451*8c03f64dSVadim Pasternak }; 452*8c03f64dSVadim Pasternak 453*8c03f64dSVadim Pasternak /* Platform mux configuration variables */ 454*8c03f64dSVadim Pasternak static int mlxplat_max_adap_num; 455*8c03f64dSVadim Pasternak static int mlxplat_mux_num; 456*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data *mlxplat_mux_data; 457*8c03f64dSVadim Pasternak static struct notifier_block *mlxplat_reboot_nb; 458*8c03f64dSVadim Pasternak 459*8c03f64dSVadim Pasternak /* Platform extended mux data */ 460*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_extended_mux_data[] = { 461*8c03f64dSVadim Pasternak { 462*8c03f64dSVadim Pasternak .parent = 1, 463*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH1, 464*8c03f64dSVadim Pasternak .write_only = 1, 465*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, 466*8c03f64dSVadim Pasternak .reg_size = 1, 467*8c03f64dSVadim Pasternak .idle_in_use = 1, 468*8c03f64dSVadim Pasternak }, 469*8c03f64dSVadim Pasternak { 470*8c03f64dSVadim Pasternak .parent = 1, 471*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH2, 472*8c03f64dSVadim Pasternak .write_only = 1, 473*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG3, 474*8c03f64dSVadim Pasternak .reg_size = 1, 475*8c03f64dSVadim Pasternak .idle_in_use = 1, 476*8c03f64dSVadim Pasternak }, 477*8c03f64dSVadim Pasternak { 478*8c03f64dSVadim Pasternak .parent = 1, 479*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH3, 480*8c03f64dSVadim Pasternak .write_only = 1, 481*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, 482*8c03f64dSVadim Pasternak .reg_size = 1, 483*8c03f64dSVadim Pasternak .idle_in_use = 1, 484*8c03f64dSVadim Pasternak }, 485*8c03f64dSVadim Pasternak 486*8c03f64dSVadim Pasternak }; 487*8c03f64dSVadim Pasternak 488*8c03f64dSVadim Pasternak /* Platform channels for modular system family */ 489*8c03f64dSVadim Pasternak static const int mlxplat_modular_upper_channel[] = { 1 }; 490*8c03f64dSVadim Pasternak static const int mlxplat_modular_channels[] = { 491*8c03f64dSVadim Pasternak 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 492*8c03f64dSVadim Pasternak 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 493*8c03f64dSVadim Pasternak 38, 39, 40 494*8c03f64dSVadim Pasternak }; 495*8c03f64dSVadim Pasternak 496*8c03f64dSVadim Pasternak /* Platform modular mux data */ 497*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_modular_mux_data[] = { 498*8c03f64dSVadim Pasternak { 499*8c03f64dSVadim Pasternak .parent = 1, 500*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH1, 501*8c03f64dSVadim Pasternak .write_only = 1, 502*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG4, 503*8c03f64dSVadim Pasternak .reg_size = 1, 504*8c03f64dSVadim Pasternak .idle_in_use = 1, 505*8c03f64dSVadim Pasternak .values = mlxplat_modular_upper_channel, 506*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_modular_upper_channel), 507*8c03f64dSVadim Pasternak }, 508*8c03f64dSVadim Pasternak { 509*8c03f64dSVadim Pasternak .parent = 1, 510*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH2_ETH_MODULAR, 511*8c03f64dSVadim Pasternak .write_only = 1, 512*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, 513*8c03f64dSVadim Pasternak .reg_size = 1, 514*8c03f64dSVadim Pasternak .idle_in_use = 1, 515*8c03f64dSVadim Pasternak .values = mlxplat_modular_channels, 516*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_modular_channels), 517*8c03f64dSVadim Pasternak }, 518*8c03f64dSVadim Pasternak { 519*8c03f64dSVadim Pasternak .parent = MLXPLAT_CPLD_CH1, 520*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH3_ETH_MODULAR, 521*8c03f64dSVadim Pasternak .write_only = 1, 522*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG3, 523*8c03f64dSVadim Pasternak .reg_size = 1, 524*8c03f64dSVadim Pasternak .idle_in_use = 1, 525*8c03f64dSVadim Pasternak .values = mlxplat_msn21xx_channels, 526*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), 527*8c03f64dSVadim Pasternak }, 528*8c03f64dSVadim Pasternak { 529*8c03f64dSVadim Pasternak .parent = 1, 530*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH4_ETH_MODULAR, 531*8c03f64dSVadim Pasternak .write_only = 1, 532*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, 533*8c03f64dSVadim Pasternak .reg_size = 1, 534*8c03f64dSVadim Pasternak .idle_in_use = 1, 535*8c03f64dSVadim Pasternak .values = mlxplat_msn21xx_channels, 536*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), 537*8c03f64dSVadim Pasternak }, 538*8c03f64dSVadim Pasternak }; 539*8c03f64dSVadim Pasternak 540*8c03f64dSVadim Pasternak /* Platform channels for rack switch system family */ 541*8c03f64dSVadim Pasternak static const int mlxplat_rack_switch_channels[] = { 542*8c03f64dSVadim Pasternak 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 543*8c03f64dSVadim Pasternak }; 544*8c03f64dSVadim Pasternak 545*8c03f64dSVadim Pasternak /* Platform rack switch mux data */ 546*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_rack_switch_mux_data[] = { 547*8c03f64dSVadim Pasternak { 548*8c03f64dSVadim Pasternak .parent = 1, 549*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH1, 550*8c03f64dSVadim Pasternak .write_only = 1, 551*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, 552*8c03f64dSVadim Pasternak .reg_size = 1, 553*8c03f64dSVadim Pasternak .idle_in_use = 1, 554*8c03f64dSVadim Pasternak .values = mlxplat_rack_switch_channels, 555*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_rack_switch_channels), 556*8c03f64dSVadim Pasternak }, 557*8c03f64dSVadim Pasternak { 558*8c03f64dSVadim Pasternak .parent = 1, 559*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH2_RACK_SWITCH, 560*8c03f64dSVadim Pasternak .write_only = 1, 561*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, 562*8c03f64dSVadim Pasternak .reg_size = 1, 563*8c03f64dSVadim Pasternak .idle_in_use = 1, 564*8c03f64dSVadim Pasternak .values = mlxplat_msn21xx_channels, 565*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), 566*8c03f64dSVadim Pasternak }, 567*8c03f64dSVadim Pasternak 568*8c03f64dSVadim Pasternak }; 569*8c03f64dSVadim Pasternak 570*8c03f64dSVadim Pasternak /* Platform channels for ng800 system family */ 571*8c03f64dSVadim Pasternak static const int mlxplat_ng800_channels[] = { 572*8c03f64dSVadim Pasternak 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 573*8c03f64dSVadim Pasternak 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 574*8c03f64dSVadim Pasternak }; 575*8c03f64dSVadim Pasternak 576*8c03f64dSVadim Pasternak /* Platform ng800 mux data */ 577*8c03f64dSVadim Pasternak static struct i2c_mux_reg_platform_data mlxplat_ng800_mux_data[] = { 578*8c03f64dSVadim Pasternak { 579*8c03f64dSVadim Pasternak .parent = 1, 580*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH1, 581*8c03f64dSVadim Pasternak .write_only = 1, 582*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG1, 583*8c03f64dSVadim Pasternak .reg_size = 1, 584*8c03f64dSVadim Pasternak .idle_in_use = 1, 585*8c03f64dSVadim Pasternak .values = mlxplat_ng800_channels, 586*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_ng800_channels), 587*8c03f64dSVadim Pasternak }, 588*8c03f64dSVadim Pasternak { 589*8c03f64dSVadim Pasternak .parent = 1, 590*8c03f64dSVadim Pasternak .base_nr = MLXPLAT_CPLD_CH2_NG800, 591*8c03f64dSVadim Pasternak .write_only = 1, 592*8c03f64dSVadim Pasternak .reg = (void __iomem *)MLXPLAT_CPLD_LPC_REG2, 593*8c03f64dSVadim Pasternak .reg_size = 1, 594*8c03f64dSVadim Pasternak .idle_in_use = 1, 595*8c03f64dSVadim Pasternak .values = mlxplat_msn21xx_channels, 596*8c03f64dSVadim Pasternak .n_values = ARRAY_SIZE(mlxplat_msn21xx_channels), 597*8c03f64dSVadim Pasternak }, 598*8c03f64dSVadim Pasternak 599*8c03f64dSVadim Pasternak }; 600*8c03f64dSVadim Pasternak 601*8c03f64dSVadim Pasternak /* Platform hotplug devices */ 602*8c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_pwr[] = { 603*8c03f64dSVadim Pasternak { 604*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x59), 605*8c03f64dSVadim Pasternak }, 606*8c03f64dSVadim Pasternak { 607*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x58), 608*8c03f64dSVadim Pasternak }, 609*8c03f64dSVadim Pasternak }; 610*8c03f64dSVadim Pasternak 611*8c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_ext_pwr[] = { 612*8c03f64dSVadim Pasternak { 613*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x5b), 614*8c03f64dSVadim Pasternak }, 615*8c03f64dSVadim Pasternak { 616*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x5a), 617*8c03f64dSVadim Pasternak }, 618*8c03f64dSVadim Pasternak }; 619*8c03f64dSVadim Pasternak 620*8c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_pwr_ng800[] = { 621*8c03f64dSVadim Pasternak { 622*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x59), 623*8c03f64dSVadim Pasternak }, 624*8c03f64dSVadim Pasternak { 625*8c03f64dSVadim Pasternak I2C_BOARD_INFO("dps460", 0x5a), 626*8c03f64dSVadim Pasternak }, 627*8c03f64dSVadim Pasternak }; 628*8c03f64dSVadim Pasternak 629*8c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_fan[] = { 630*8c03f64dSVadim Pasternak { 631*8c03f64dSVadim Pasternak I2C_BOARD_INFO("24c32", 0x50), 632*8c03f64dSVadim Pasternak }, 633*8c03f64dSVadim Pasternak { 634*8c03f64dSVadim Pasternak I2C_BOARD_INFO("24c32", 0x50), 635*8c03f64dSVadim Pasternak }, 636*8c03f64dSVadim Pasternak { 637*8c03f64dSVadim Pasternak I2C_BOARD_INFO("24c32", 0x50), 638*8c03f64dSVadim Pasternak }, 639*8c03f64dSVadim Pasternak { 640*8c03f64dSVadim Pasternak I2C_BOARD_INFO("24c32", 0x50), 641*8c03f64dSVadim Pasternak }, 642*8c03f64dSVadim Pasternak }; 643*8c03f64dSVadim Pasternak 644*8c03f64dSVadim Pasternak /* Platform hotplug comex carrier system family data */ 645*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_comex_psu_items_data[] = { 646*8c03f64dSVadim Pasternak { 647*8c03f64dSVadim Pasternak .label = "psu1", 648*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 649*8c03f64dSVadim Pasternak .mask = BIT(0), 650*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 651*8c03f64dSVadim Pasternak }, 652*8c03f64dSVadim Pasternak { 653*8c03f64dSVadim Pasternak .label = "psu2", 654*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 655*8c03f64dSVadim Pasternak .mask = BIT(1), 656*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 657*8c03f64dSVadim Pasternak }, 658*8c03f64dSVadim Pasternak }; 659*8c03f64dSVadim Pasternak 660*8c03f64dSVadim Pasternak /* Platform hotplug default data */ 661*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_psu_items_data[] = { 662*8c03f64dSVadim Pasternak { 663*8c03f64dSVadim Pasternak .label = "psu1", 664*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 665*8c03f64dSVadim Pasternak .mask = BIT(0), 666*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 667*8c03f64dSVadim Pasternak }, 668*8c03f64dSVadim Pasternak { 669*8c03f64dSVadim Pasternak .label = "psu2", 670*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 671*8c03f64dSVadim Pasternak .mask = BIT(1), 672*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 673*8c03f64dSVadim Pasternak }, 674*8c03f64dSVadim Pasternak }; 675*8c03f64dSVadim Pasternak 676*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_items_data[] = { 677*8c03f64dSVadim Pasternak { 678*8c03f64dSVadim Pasternak .label = "pwr1", 679*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 680*8c03f64dSVadim Pasternak .mask = BIT(0), 681*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], 682*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, 683*8c03f64dSVadim Pasternak }, 684*8c03f64dSVadim Pasternak { 685*8c03f64dSVadim Pasternak .label = "pwr2", 686*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 687*8c03f64dSVadim Pasternak .mask = BIT(1), 688*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], 689*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, 690*8c03f64dSVadim Pasternak }, 691*8c03f64dSVadim Pasternak }; 692*8c03f64dSVadim Pasternak 693*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_wc_items_data[] = { 694*8c03f64dSVadim Pasternak { 695*8c03f64dSVadim Pasternak .label = "pwr1", 696*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 697*8c03f64dSVadim Pasternak .mask = BIT(0), 698*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 699*8c03f64dSVadim Pasternak }, 700*8c03f64dSVadim Pasternak { 701*8c03f64dSVadim Pasternak .label = "pwr2", 702*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 703*8c03f64dSVadim Pasternak .mask = BIT(1), 704*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 705*8c03f64dSVadim Pasternak }, 706*8c03f64dSVadim Pasternak }; 707*8c03f64dSVadim Pasternak 708*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_pwr_ng800_items_data[] = { 709*8c03f64dSVadim Pasternak { 710*8c03f64dSVadim Pasternak .label = "pwr1", 711*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 712*8c03f64dSVadim Pasternak .mask = BIT(0), 713*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[0], 714*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 715*8c03f64dSVadim Pasternak }, 716*8c03f64dSVadim Pasternak { 717*8c03f64dSVadim Pasternak .label = "pwr2", 718*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 719*8c03f64dSVadim Pasternak .mask = BIT(1), 720*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr_ng800[1], 721*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 722*8c03f64dSVadim Pasternak }, 723*8c03f64dSVadim Pasternak }; 724*8c03f64dSVadim Pasternak 725*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_items_data[] = { 726*8c03f64dSVadim Pasternak { 727*8c03f64dSVadim Pasternak .label = "fan1", 728*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 729*8c03f64dSVadim Pasternak .mask = BIT(0), 730*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_fan[0], 731*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_FAN1_DEFAULT_NR, 732*8c03f64dSVadim Pasternak }, 733*8c03f64dSVadim Pasternak { 734*8c03f64dSVadim Pasternak .label = "fan2", 735*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 736*8c03f64dSVadim Pasternak .mask = BIT(1), 737*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_fan[1], 738*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_FAN2_DEFAULT_NR, 739*8c03f64dSVadim Pasternak }, 740*8c03f64dSVadim Pasternak { 741*8c03f64dSVadim Pasternak .label = "fan3", 742*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 743*8c03f64dSVadim Pasternak .mask = BIT(2), 744*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_fan[2], 745*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_FAN3_DEFAULT_NR, 746*8c03f64dSVadim Pasternak }, 747*8c03f64dSVadim Pasternak { 748*8c03f64dSVadim Pasternak .label = "fan4", 749*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 750*8c03f64dSVadim Pasternak .mask = BIT(3), 751*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_fan[3], 752*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_FAN4_DEFAULT_NR, 753*8c03f64dSVadim Pasternak }, 754*8c03f64dSVadim Pasternak }; 755*8c03f64dSVadim Pasternak 756*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_asic_items_data[] = { 757*8c03f64dSVadim Pasternak { 758*8c03f64dSVadim Pasternak .label = "asic1", 759*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 760*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 761*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 762*8c03f64dSVadim Pasternak }, 763*8c03f64dSVadim Pasternak }; 764*8c03f64dSVadim Pasternak 765*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_asic2_items_data[] = { 766*8c03f64dSVadim Pasternak { 767*8c03f64dSVadim Pasternak .label = "asic2", 768*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET, 769*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 770*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 771*8c03f64dSVadim Pasternak }, 772*8c03f64dSVadim Pasternak }; 773*8c03f64dSVadim Pasternak 774*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_items[] = { 775*8c03f64dSVadim Pasternak { 776*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_psu_items_data, 777*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_PSU_MASK_DEF, 778*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 779*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_MASK, 780*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data), 781*8c03f64dSVadim Pasternak .inversed = 1, 782*8c03f64dSVadim Pasternak .health = false, 783*8c03f64dSVadim Pasternak }, 784*8c03f64dSVadim Pasternak { 785*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_pwr_items_data, 786*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, 787*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 788*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 789*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data), 790*8c03f64dSVadim Pasternak .inversed = 0, 791*8c03f64dSVadim Pasternak .health = false, 792*8c03f64dSVadim Pasternak }, 793*8c03f64dSVadim Pasternak { 794*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_fan_items_data, 795*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_FAN_MASK_DEF, 796*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 797*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_MASK, 798*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_items_data), 799*8c03f64dSVadim Pasternak .inversed = 1, 800*8c03f64dSVadim Pasternak .health = false, 801*8c03f64dSVadim Pasternak }, 802*8c03f64dSVadim Pasternak { 803*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 804*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF, 805*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 806*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 807*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 808*8c03f64dSVadim Pasternak .inversed = 0, 809*8c03f64dSVadim Pasternak .health = true, 810*8c03f64dSVadim Pasternak }, 811*8c03f64dSVadim Pasternak }; 812*8c03f64dSVadim Pasternak 813*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_comex_items[] = { 814*8c03f64dSVadim Pasternak { 815*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_comex_psu_items_data, 816*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER, 817*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 818*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_MASK, 819*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data), 820*8c03f64dSVadim Pasternak .inversed = 1, 821*8c03f64dSVadim Pasternak .health = false, 822*8c03f64dSVadim Pasternak }, 823*8c03f64dSVadim Pasternak { 824*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_pwr_items_data, 825*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER, 826*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 827*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 828*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data), 829*8c03f64dSVadim Pasternak .inversed = 0, 830*8c03f64dSVadim Pasternak .health = false, 831*8c03f64dSVadim Pasternak }, 832*8c03f64dSVadim Pasternak { 833*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_fan_items_data, 834*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER, 835*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 836*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_MASK, 837*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_items_data), 838*8c03f64dSVadim Pasternak .inversed = 1, 839*8c03f64dSVadim Pasternak .health = false, 840*8c03f64dSVadim Pasternak }, 841*8c03f64dSVadim Pasternak { 842*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 843*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF, 844*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 845*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 846*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 847*8c03f64dSVadim Pasternak .inversed = 0, 848*8c03f64dSVadim Pasternak .health = true, 849*8c03f64dSVadim Pasternak }, 850*8c03f64dSVadim Pasternak }; 851*8c03f64dSVadim Pasternak 852*8c03f64dSVadim Pasternak static 853*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_data = { 854*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_default_items, 855*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_items), 856*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 857*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, 858*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 859*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 860*8c03f64dSVadim Pasternak }; 861*8c03f64dSVadim Pasternak 862*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_wc_items[] = { 863*8c03f64dSVadim Pasternak { 864*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_comex_psu_items_data, 865*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER, 866*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 867*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_MASK, 868*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_psu_items_data), 869*8c03f64dSVadim Pasternak .inversed = 1, 870*8c03f64dSVadim Pasternak .health = false, 871*8c03f64dSVadim Pasternak }, 872*8c03f64dSVadim Pasternak { 873*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_pwr_wc_items_data, 874*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_CARRIER, 875*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 876*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 877*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data), 878*8c03f64dSVadim Pasternak .inversed = 0, 879*8c03f64dSVadim Pasternak .health = false, 880*8c03f64dSVadim Pasternak }, 881*8c03f64dSVadim Pasternak { 882*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 883*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF, 884*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 885*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 886*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 887*8c03f64dSVadim Pasternak .inversed = 0, 888*8c03f64dSVadim Pasternak .health = true, 889*8c03f64dSVadim Pasternak }, 890*8c03f64dSVadim Pasternak }; 891*8c03f64dSVadim Pasternak 892*8c03f64dSVadim Pasternak static 893*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_wc_data = { 894*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_default_wc_items, 895*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_wc_items), 896*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 897*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, 898*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 899*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 900*8c03f64dSVadim Pasternak }; 901*8c03f64dSVadim Pasternak 902*8c03f64dSVadim Pasternak static 903*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_comex_data = { 904*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_comex_items, 905*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_comex_items), 906*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 907*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_CARR_DEF, 908*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET, 909*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGRCX_MASK, 910*8c03f64dSVadim Pasternak }; 911*8c03f64dSVadim Pasternak 912*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_pwr_items_data[] = { 913*8c03f64dSVadim Pasternak { 914*8c03f64dSVadim Pasternak .label = "pwr1", 915*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 916*8c03f64dSVadim Pasternak .mask = BIT(0), 917*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 918*8c03f64dSVadim Pasternak }, 919*8c03f64dSVadim Pasternak { 920*8c03f64dSVadim Pasternak .label = "pwr2", 921*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 922*8c03f64dSVadim Pasternak .mask = BIT(1), 923*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 924*8c03f64dSVadim Pasternak }, 925*8c03f64dSVadim Pasternak }; 926*8c03f64dSVadim Pasternak 927*8c03f64dSVadim Pasternak /* Platform hotplug MSN21xx system family data */ 928*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn21xx_items[] = { 929*8c03f64dSVadim Pasternak { 930*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn21xx_pwr_items_data, 931*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, 932*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 933*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 934*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_pwr_items_data), 935*8c03f64dSVadim Pasternak .inversed = 0, 936*8c03f64dSVadim Pasternak .health = false, 937*8c03f64dSVadim Pasternak }, 938*8c03f64dSVadim Pasternak { 939*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 940*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF, 941*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 942*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 943*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 944*8c03f64dSVadim Pasternak .inversed = 0, 945*8c03f64dSVadim Pasternak .health = true, 946*8c03f64dSVadim Pasternak }, 947*8c03f64dSVadim Pasternak }; 948*8c03f64dSVadim Pasternak 949*8c03f64dSVadim Pasternak static 950*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn21xx_data = { 951*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_msn21xx_items, 952*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_items), 953*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 954*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, 955*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 956*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 957*8c03f64dSVadim Pasternak }; 958*8c03f64dSVadim Pasternak 959*8c03f64dSVadim Pasternak /* Platform hotplug msn274x system family data */ 960*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_psu_items_data[] = { 961*8c03f64dSVadim Pasternak { 962*8c03f64dSVadim Pasternak .label = "psu1", 963*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 964*8c03f64dSVadim Pasternak .mask = BIT(0), 965*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 966*8c03f64dSVadim Pasternak }, 967*8c03f64dSVadim Pasternak { 968*8c03f64dSVadim Pasternak .label = "psu2", 969*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 970*8c03f64dSVadim Pasternak .mask = BIT(1), 971*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 972*8c03f64dSVadim Pasternak }, 973*8c03f64dSVadim Pasternak }; 974*8c03f64dSVadim Pasternak 975*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_pwr_items_data[] = { 976*8c03f64dSVadim Pasternak { 977*8c03f64dSVadim Pasternak .label = "pwr1", 978*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 979*8c03f64dSVadim Pasternak .mask = BIT(0), 980*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], 981*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 982*8c03f64dSVadim Pasternak }, 983*8c03f64dSVadim Pasternak { 984*8c03f64dSVadim Pasternak .label = "pwr2", 985*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 986*8c03f64dSVadim Pasternak .mask = BIT(1), 987*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], 988*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 989*8c03f64dSVadim Pasternak }, 990*8c03f64dSVadim Pasternak }; 991*8c03f64dSVadim Pasternak 992*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_fan_items_data[] = { 993*8c03f64dSVadim Pasternak { 994*8c03f64dSVadim Pasternak .label = "fan1", 995*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 996*8c03f64dSVadim Pasternak .mask = BIT(0), 997*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 998*8c03f64dSVadim Pasternak }, 999*8c03f64dSVadim Pasternak { 1000*8c03f64dSVadim Pasternak .label = "fan2", 1001*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1002*8c03f64dSVadim Pasternak .mask = BIT(1), 1003*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1004*8c03f64dSVadim Pasternak }, 1005*8c03f64dSVadim Pasternak { 1006*8c03f64dSVadim Pasternak .label = "fan3", 1007*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1008*8c03f64dSVadim Pasternak .mask = BIT(2), 1009*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1010*8c03f64dSVadim Pasternak }, 1011*8c03f64dSVadim Pasternak { 1012*8c03f64dSVadim Pasternak .label = "fan4", 1013*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1014*8c03f64dSVadim Pasternak .mask = BIT(3), 1015*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1016*8c03f64dSVadim Pasternak }, 1017*8c03f64dSVadim Pasternak }; 1018*8c03f64dSVadim Pasternak 1019*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn274x_items[] = { 1020*8c03f64dSVadim Pasternak { 1021*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn274x_psu_items_data, 1022*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1023*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1024*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_MASK, 1025*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_psu_items_data), 1026*8c03f64dSVadim Pasternak .inversed = 1, 1027*8c03f64dSVadim Pasternak .health = false, 1028*8c03f64dSVadim Pasternak }, 1029*8c03f64dSVadim Pasternak { 1030*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_pwr_items_data, 1031*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1032*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1033*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 1034*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data), 1035*8c03f64dSVadim Pasternak .inversed = 0, 1036*8c03f64dSVadim Pasternak .health = false, 1037*8c03f64dSVadim Pasternak }, 1038*8c03f64dSVadim Pasternak { 1039*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn274x_fan_items_data, 1040*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1041*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1042*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_MASK, 1043*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_fan_items_data), 1044*8c03f64dSVadim Pasternak .inversed = 1, 1045*8c03f64dSVadim Pasternak .health = false, 1046*8c03f64dSVadim Pasternak }, 1047*8c03f64dSVadim Pasternak { 1048*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 1049*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1050*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1051*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1052*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 1053*8c03f64dSVadim Pasternak .inversed = 0, 1054*8c03f64dSVadim Pasternak .health = true, 1055*8c03f64dSVadim Pasternak }, 1056*8c03f64dSVadim Pasternak }; 1057*8c03f64dSVadim Pasternak 1058*8c03f64dSVadim Pasternak static 1059*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn274x_data = { 1060*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_msn274x_items, 1061*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn274x_items), 1062*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 1063*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1064*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 1065*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 1066*8c03f64dSVadim Pasternak }; 1067*8c03f64dSVadim Pasternak 1068*8c03f64dSVadim Pasternak /* Platform hotplug MSN201x system family data */ 1069*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn201x_pwr_items_data[] = { 1070*8c03f64dSVadim Pasternak { 1071*8c03f64dSVadim Pasternak .label = "pwr1", 1072*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1073*8c03f64dSVadim Pasternak .mask = BIT(0), 1074*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1075*8c03f64dSVadim Pasternak }, 1076*8c03f64dSVadim Pasternak { 1077*8c03f64dSVadim Pasternak .label = "pwr2", 1078*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1079*8c03f64dSVadim Pasternak .mask = BIT(1), 1080*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1081*8c03f64dSVadim Pasternak }, 1082*8c03f64dSVadim Pasternak }; 1083*8c03f64dSVadim Pasternak 1084*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_msn201x_items[] = { 1085*8c03f64dSVadim Pasternak { 1086*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn201x_pwr_items_data, 1087*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, 1088*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1089*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 1090*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_pwr_items_data), 1091*8c03f64dSVadim Pasternak .inversed = 0, 1092*8c03f64dSVadim Pasternak .health = false, 1093*8c03f64dSVadim Pasternak }, 1094*8c03f64dSVadim Pasternak { 1095*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 1096*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_ASIC_MASK_DEF, 1097*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1098*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1099*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 1100*8c03f64dSVadim Pasternak .inversed = 0, 1101*8c03f64dSVadim Pasternak .health = true, 1102*8c03f64dSVadim Pasternak }, 1103*8c03f64dSVadim Pasternak }; 1104*8c03f64dSVadim Pasternak 1105*8c03f64dSVadim Pasternak static 1106*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_msn201x_data = { 1107*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_msn201x_items, 1108*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn201x_items), 1109*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 1110*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_DEF, 1111*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 1112*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 1113*8c03f64dSVadim Pasternak }; 1114*8c03f64dSVadim Pasternak 1115*8c03f64dSVadim Pasternak /* Platform hotplug next generation system family data */ 1116*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_psu_items_data[] = { 1117*8c03f64dSVadim Pasternak { 1118*8c03f64dSVadim Pasternak .label = "psu1", 1119*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1120*8c03f64dSVadim Pasternak .mask = BIT(0), 1121*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1122*8c03f64dSVadim Pasternak }, 1123*8c03f64dSVadim Pasternak { 1124*8c03f64dSVadim Pasternak .label = "psu2", 1125*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1126*8c03f64dSVadim Pasternak .mask = BIT(1), 1127*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1128*8c03f64dSVadim Pasternak }, 1129*8c03f64dSVadim Pasternak }; 1130*8c03f64dSVadim Pasternak 1131*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_fan_items_data[] = { 1132*8c03f64dSVadim Pasternak { 1133*8c03f64dSVadim Pasternak .label = "fan1", 1134*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1135*8c03f64dSVadim Pasternak .mask = BIT(0), 1136*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1137*8c03f64dSVadim Pasternak .bit = BIT(0), 1138*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1139*8c03f64dSVadim Pasternak }, 1140*8c03f64dSVadim Pasternak { 1141*8c03f64dSVadim Pasternak .label = "fan2", 1142*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1143*8c03f64dSVadim Pasternak .mask = BIT(1), 1144*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1145*8c03f64dSVadim Pasternak .bit = BIT(1), 1146*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1147*8c03f64dSVadim Pasternak }, 1148*8c03f64dSVadim Pasternak { 1149*8c03f64dSVadim Pasternak .label = "fan3", 1150*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1151*8c03f64dSVadim Pasternak .mask = BIT(2), 1152*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1153*8c03f64dSVadim Pasternak .bit = BIT(2), 1154*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1155*8c03f64dSVadim Pasternak }, 1156*8c03f64dSVadim Pasternak { 1157*8c03f64dSVadim Pasternak .label = "fan4", 1158*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1159*8c03f64dSVadim Pasternak .mask = BIT(3), 1160*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1161*8c03f64dSVadim Pasternak .bit = BIT(3), 1162*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1163*8c03f64dSVadim Pasternak }, 1164*8c03f64dSVadim Pasternak { 1165*8c03f64dSVadim Pasternak .label = "fan5", 1166*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1167*8c03f64dSVadim Pasternak .mask = BIT(4), 1168*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1169*8c03f64dSVadim Pasternak .bit = BIT(4), 1170*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1171*8c03f64dSVadim Pasternak }, 1172*8c03f64dSVadim Pasternak { 1173*8c03f64dSVadim Pasternak .label = "fan6", 1174*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1175*8c03f64dSVadim Pasternak .mask = BIT(5), 1176*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1177*8c03f64dSVadim Pasternak .bit = BIT(5), 1178*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1179*8c03f64dSVadim Pasternak }, 1180*8c03f64dSVadim Pasternak { 1181*8c03f64dSVadim Pasternak .label = "fan7", 1182*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1183*8c03f64dSVadim Pasternak .mask = BIT(6), 1184*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 1185*8c03f64dSVadim Pasternak .bit = BIT(6), 1186*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1187*8c03f64dSVadim Pasternak }, 1188*8c03f64dSVadim Pasternak }; 1189*8c03f64dSVadim Pasternak 1190*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_default_ng_items[] = { 1191*8c03f64dSVadim Pasternak { 1192*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_psu_items_data, 1193*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1194*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1195*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_MASK, 1196*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data), 1197*8c03f64dSVadim Pasternak .inversed = 1, 1198*8c03f64dSVadim Pasternak .health = false, 1199*8c03f64dSVadim Pasternak }, 1200*8c03f64dSVadim Pasternak { 1201*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_pwr_items_data, 1202*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1203*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1204*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_MASK, 1205*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_pwr_items_data), 1206*8c03f64dSVadim Pasternak .inversed = 0, 1207*8c03f64dSVadim Pasternak .health = false, 1208*8c03f64dSVadim Pasternak }, 1209*8c03f64dSVadim Pasternak { 1210*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 1211*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1212*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1213*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 1214*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 1215*8c03f64dSVadim Pasternak .inversed = 1, 1216*8c03f64dSVadim Pasternak .health = false, 1217*8c03f64dSVadim Pasternak }, 1218*8c03f64dSVadim Pasternak { 1219*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 1220*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1221*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1222*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1223*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 1224*8c03f64dSVadim Pasternak .inversed = 0, 1225*8c03f64dSVadim Pasternak .health = true, 1226*8c03f64dSVadim Pasternak }, 1227*8c03f64dSVadim Pasternak }; 1228*8c03f64dSVadim Pasternak 1229*8c03f64dSVadim Pasternak static 1230*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_default_ng_data = { 1231*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_default_ng_items, 1232*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_items), 1233*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 1234*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, 1235*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 1236*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 1237*8c03f64dSVadim Pasternak }; 1238*8c03f64dSVadim Pasternak 1239*8c03f64dSVadim Pasternak /* Platform hotplug extended system family data */ 1240*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_ext_psu_items_data[] = { 1241*8c03f64dSVadim Pasternak { 1242*8c03f64dSVadim Pasternak .label = "psu1", 1243*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1244*8c03f64dSVadim Pasternak .mask = BIT(0), 1245*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1246*8c03f64dSVadim Pasternak }, 1247*8c03f64dSVadim Pasternak { 1248*8c03f64dSVadim Pasternak .label = "psu2", 1249*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1250*8c03f64dSVadim Pasternak .mask = BIT(1), 1251*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1252*8c03f64dSVadim Pasternak }, 1253*8c03f64dSVadim Pasternak { 1254*8c03f64dSVadim Pasternak .label = "psu3", 1255*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1256*8c03f64dSVadim Pasternak .mask = BIT(2), 1257*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1258*8c03f64dSVadim Pasternak }, 1259*8c03f64dSVadim Pasternak { 1260*8c03f64dSVadim Pasternak .label = "psu4", 1261*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1262*8c03f64dSVadim Pasternak .mask = BIT(3), 1263*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1264*8c03f64dSVadim Pasternak }, 1265*8c03f64dSVadim Pasternak }; 1266*8c03f64dSVadim Pasternak 1267*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_ext_pwr_items_data[] = { 1268*8c03f64dSVadim Pasternak { 1269*8c03f64dSVadim Pasternak .label = "pwr1", 1270*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1271*8c03f64dSVadim Pasternak .mask = BIT(0), 1272*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], 1273*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1274*8c03f64dSVadim Pasternak }, 1275*8c03f64dSVadim Pasternak { 1276*8c03f64dSVadim Pasternak .label = "pwr2", 1277*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1278*8c03f64dSVadim Pasternak .mask = BIT(1), 1279*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], 1280*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1281*8c03f64dSVadim Pasternak }, 1282*8c03f64dSVadim Pasternak { 1283*8c03f64dSVadim Pasternak .label = "pwr3", 1284*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1285*8c03f64dSVadim Pasternak .mask = BIT(2), 1286*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[0], 1287*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1288*8c03f64dSVadim Pasternak }, 1289*8c03f64dSVadim Pasternak { 1290*8c03f64dSVadim Pasternak .label = "pwr4", 1291*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1292*8c03f64dSVadim Pasternak .mask = BIT(3), 1293*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[1], 1294*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1295*8c03f64dSVadim Pasternak }, 1296*8c03f64dSVadim Pasternak }; 1297*8c03f64dSVadim Pasternak 1298*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_ext_items[] = { 1299*8c03f64dSVadim Pasternak { 1300*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_ext_psu_items_data, 1301*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1302*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1303*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_EXT_MASK, 1304*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 1305*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data), 1306*8c03f64dSVadim Pasternak .inversed = 1, 1307*8c03f64dSVadim Pasternak .health = false, 1308*8c03f64dSVadim Pasternak }, 1309*8c03f64dSVadim Pasternak { 1310*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_ext_pwr_items_data, 1311*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1312*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1313*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_EXT_MASK, 1314*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 1315*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data), 1316*8c03f64dSVadim Pasternak .inversed = 0, 1317*8c03f64dSVadim Pasternak .health = false, 1318*8c03f64dSVadim Pasternak }, 1319*8c03f64dSVadim Pasternak { 1320*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 1321*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1322*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1323*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 1324*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 1325*8c03f64dSVadim Pasternak .inversed = 1, 1326*8c03f64dSVadim Pasternak .health = false, 1327*8c03f64dSVadim Pasternak }, 1328*8c03f64dSVadim Pasternak { 1329*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 1330*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1331*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1332*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1333*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 1334*8c03f64dSVadim Pasternak .inversed = 0, 1335*8c03f64dSVadim Pasternak .health = true, 1336*8c03f64dSVadim Pasternak }, 1337*8c03f64dSVadim Pasternak { 1338*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic2_items_data, 1339*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1340*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET, 1341*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1342*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic2_items_data), 1343*8c03f64dSVadim Pasternak .inversed = 0, 1344*8c03f64dSVadim Pasternak .health = true, 1345*8c03f64dSVadim Pasternak } 1346*8c03f64dSVadim Pasternak }; 1347*8c03f64dSVadim Pasternak 1348*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_ng800_items[] = { 1349*8c03f64dSVadim Pasternak { 1350*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_psu_items_data, 1351*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1352*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 1353*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_EXT_MASK, 1354*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 1355*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_psu_items_data), 1356*8c03f64dSVadim Pasternak .inversed = 1, 1357*8c03f64dSVadim Pasternak .health = false, 1358*8c03f64dSVadim Pasternak }, 1359*8c03f64dSVadim Pasternak { 1360*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_pwr_ng800_items_data, 1361*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1362*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1363*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_EXT_MASK, 1364*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 1365*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_ng800_items_data), 1366*8c03f64dSVadim Pasternak .inversed = 0, 1367*8c03f64dSVadim Pasternak .health = false, 1368*8c03f64dSVadim Pasternak }, 1369*8c03f64dSVadim Pasternak { 1370*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 1371*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1372*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 1373*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 1374*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 1375*8c03f64dSVadim Pasternak .inversed = 1, 1376*8c03f64dSVadim Pasternak .health = false, 1377*8c03f64dSVadim Pasternak }, 1378*8c03f64dSVadim Pasternak { 1379*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_asic_items_data, 1380*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 1381*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1382*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1383*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_asic_items_data), 1384*8c03f64dSVadim Pasternak .inversed = 0, 1385*8c03f64dSVadim Pasternak .health = true, 1386*8c03f64dSVadim Pasternak }, 1387*8c03f64dSVadim Pasternak }; 1388*8c03f64dSVadim Pasternak 1389*8c03f64dSVadim Pasternak static 1390*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ext_data = { 1391*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_ext_items, 1392*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_ext_items), 1393*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 1394*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, 1395*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 1396*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2, 1397*8c03f64dSVadim Pasternak }; 1398*8c03f64dSVadim Pasternak 1399*8c03f64dSVadim Pasternak static 1400*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_ng800_data = { 1401*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_ng800_items, 1402*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_ng800_items), 1403*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 1404*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, 1405*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 1406*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_ASIC2, 1407*8c03f64dSVadim Pasternak }; 1408*8c03f64dSVadim Pasternak 1409*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_pwr_items_data[] = { 1410*8c03f64dSVadim Pasternak { 1411*8c03f64dSVadim Pasternak .label = "pwr1", 1412*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1413*8c03f64dSVadim Pasternak .mask = BIT(0), 1414*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[0], 1415*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1416*8c03f64dSVadim Pasternak }, 1417*8c03f64dSVadim Pasternak { 1418*8c03f64dSVadim Pasternak .label = "pwr2", 1419*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1420*8c03f64dSVadim Pasternak .mask = BIT(1), 1421*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_pwr[1], 1422*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1423*8c03f64dSVadim Pasternak }, 1424*8c03f64dSVadim Pasternak { 1425*8c03f64dSVadim Pasternak .label = "pwr3", 1426*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1427*8c03f64dSVadim Pasternak .mask = BIT(2), 1428*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[0], 1429*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1430*8c03f64dSVadim Pasternak }, 1431*8c03f64dSVadim Pasternak { 1432*8c03f64dSVadim Pasternak .label = "pwr4", 1433*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 1434*8c03f64dSVadim Pasternak .mask = BIT(3), 1435*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_ext_pwr[1], 1436*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, 1437*8c03f64dSVadim Pasternak }, 1438*8c03f64dSVadim Pasternak }; 1439*8c03f64dSVadim Pasternak 1440*8c03f64dSVadim Pasternak static 1441*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_lc_act = { 1442*8c03f64dSVadim Pasternak .irq = MLXPLAT_CPLD_LPC_SYSIRQ, 1443*8c03f64dSVadim Pasternak }; 1444*8c03f64dSVadim Pasternak 1445*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_asic_items_data[] = { 1446*8c03f64dSVadim Pasternak { 1447*8c03f64dSVadim Pasternak .label = "asic1", 1448*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 1449*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 1450*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 1451*8c03f64dSVadim Pasternak }, 1452*8c03f64dSVadim Pasternak }; 1453*8c03f64dSVadim Pasternak 1454*8c03f64dSVadim Pasternak static struct i2c_board_info mlxplat_mlxcpld_lc_i2c_dev[] = { 1455*8c03f64dSVadim Pasternak { 1456*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1457*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1458*8c03f64dSVadim Pasternak }, 1459*8c03f64dSVadim Pasternak { 1460*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1461*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1462*8c03f64dSVadim Pasternak }, 1463*8c03f64dSVadim Pasternak { 1464*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1465*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1466*8c03f64dSVadim Pasternak }, 1467*8c03f64dSVadim Pasternak { 1468*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1469*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1470*8c03f64dSVadim Pasternak }, 1471*8c03f64dSVadim Pasternak { 1472*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1473*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1474*8c03f64dSVadim Pasternak }, 1475*8c03f64dSVadim Pasternak { 1476*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1477*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1478*8c03f64dSVadim Pasternak }, 1479*8c03f64dSVadim Pasternak { 1480*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1481*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1482*8c03f64dSVadim Pasternak }, 1483*8c03f64dSVadim Pasternak { 1484*8c03f64dSVadim Pasternak I2C_BOARD_INFO("mlxreg-lc", MLXPLAT_CPLD_LC_ADDR), 1485*8c03f64dSVadim Pasternak .platform_data = &mlxplat_mlxcpld_lc_act, 1486*8c03f64dSVadim Pasternak }, 1487*8c03f64dSVadim Pasternak }; 1488*8c03f64dSVadim Pasternak 1489*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_modular_lc_notifier[] = { 1490*8c03f64dSVadim Pasternak { 1491*8c03f64dSVadim Pasternak .identity = "lc1", 1492*8c03f64dSVadim Pasternak }, 1493*8c03f64dSVadim Pasternak { 1494*8c03f64dSVadim Pasternak .identity = "lc2", 1495*8c03f64dSVadim Pasternak }, 1496*8c03f64dSVadim Pasternak { 1497*8c03f64dSVadim Pasternak .identity = "lc3", 1498*8c03f64dSVadim Pasternak }, 1499*8c03f64dSVadim Pasternak { 1500*8c03f64dSVadim Pasternak .identity = "lc4", 1501*8c03f64dSVadim Pasternak }, 1502*8c03f64dSVadim Pasternak { 1503*8c03f64dSVadim Pasternak .identity = "lc5", 1504*8c03f64dSVadim Pasternak }, 1505*8c03f64dSVadim Pasternak { 1506*8c03f64dSVadim Pasternak .identity = "lc6", 1507*8c03f64dSVadim Pasternak }, 1508*8c03f64dSVadim Pasternak { 1509*8c03f64dSVadim Pasternak .identity = "lc7", 1510*8c03f64dSVadim Pasternak }, 1511*8c03f64dSVadim Pasternak { 1512*8c03f64dSVadim Pasternak .identity = "lc8", 1513*8c03f64dSVadim Pasternak }, 1514*8c03f64dSVadim Pasternak }; 1515*8c03f64dSVadim Pasternak 1516*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_pr_items_data[] = { 1517*8c03f64dSVadim Pasternak { 1518*8c03f64dSVadim Pasternak .label = "lc1_present", 1519*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1520*8c03f64dSVadim Pasternak .mask = BIT(0), 1521*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1522*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1523*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1524*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1525*8c03f64dSVadim Pasternak .slot = 1, 1526*8c03f64dSVadim Pasternak }, 1527*8c03f64dSVadim Pasternak { 1528*8c03f64dSVadim Pasternak .label = "lc2_present", 1529*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1530*8c03f64dSVadim Pasternak .mask = BIT(1), 1531*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1532*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1533*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1534*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1535*8c03f64dSVadim Pasternak .slot = 2, 1536*8c03f64dSVadim Pasternak }, 1537*8c03f64dSVadim Pasternak { 1538*8c03f64dSVadim Pasternak .label = "lc3_present", 1539*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1540*8c03f64dSVadim Pasternak .mask = BIT(2), 1541*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1542*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1543*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1544*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1545*8c03f64dSVadim Pasternak .slot = 3, 1546*8c03f64dSVadim Pasternak }, 1547*8c03f64dSVadim Pasternak { 1548*8c03f64dSVadim Pasternak .label = "lc4_present", 1549*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1550*8c03f64dSVadim Pasternak .mask = BIT(3), 1551*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1552*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 1553*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1554*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 1555*8c03f64dSVadim Pasternak .slot = 4, 1556*8c03f64dSVadim Pasternak }, 1557*8c03f64dSVadim Pasternak { 1558*8c03f64dSVadim Pasternak .label = "lc5_present", 1559*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1560*8c03f64dSVadim Pasternak .mask = BIT(4), 1561*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 1562*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 1563*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1564*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 1565*8c03f64dSVadim Pasternak .slot = 5, 1566*8c03f64dSVadim Pasternak }, 1567*8c03f64dSVadim Pasternak { 1568*8c03f64dSVadim Pasternak .label = "lc6_present", 1569*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1570*8c03f64dSVadim Pasternak .mask = BIT(5), 1571*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 1572*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 1573*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1574*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 1575*8c03f64dSVadim Pasternak .slot = 6, 1576*8c03f64dSVadim Pasternak }, 1577*8c03f64dSVadim Pasternak { 1578*8c03f64dSVadim Pasternak .label = "lc7_present", 1579*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1580*8c03f64dSVadim Pasternak .mask = BIT(6), 1581*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 1582*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 1583*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1584*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 1585*8c03f64dSVadim Pasternak .slot = 7, 1586*8c03f64dSVadim Pasternak }, 1587*8c03f64dSVadim Pasternak { 1588*8c03f64dSVadim Pasternak .label = "lc8_present", 1589*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 1590*8c03f64dSVadim Pasternak .mask = BIT(7), 1591*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 1592*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 1593*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1594*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 1595*8c03f64dSVadim Pasternak .slot = 8, 1596*8c03f64dSVadim Pasternak }, 1597*8c03f64dSVadim Pasternak }; 1598*8c03f64dSVadim Pasternak 1599*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_ver_items_data[] = { 1600*8c03f64dSVadim Pasternak { 1601*8c03f64dSVadim Pasternak .label = "lc1_verified", 1602*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1603*8c03f64dSVadim Pasternak .mask = BIT(0), 1604*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1605*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1606*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1607*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1608*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1609*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1610*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1611*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1612*8c03f64dSVadim Pasternak .slot = 1, 1613*8c03f64dSVadim Pasternak }, 1614*8c03f64dSVadim Pasternak { 1615*8c03f64dSVadim Pasternak .label = "lc2_verified", 1616*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1617*8c03f64dSVadim Pasternak .mask = BIT(1), 1618*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1619*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1620*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1621*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1622*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1623*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1624*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1625*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1626*8c03f64dSVadim Pasternak .slot = 2, 1627*8c03f64dSVadim Pasternak }, 1628*8c03f64dSVadim Pasternak { 1629*8c03f64dSVadim Pasternak .label = "lc3_verified", 1630*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1631*8c03f64dSVadim Pasternak .mask = BIT(2), 1632*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1633*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1634*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1635*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1636*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1637*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1638*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1639*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1640*8c03f64dSVadim Pasternak .slot = 3, 1641*8c03f64dSVadim Pasternak }, 1642*8c03f64dSVadim Pasternak { 1643*8c03f64dSVadim Pasternak .label = "lc4_verified", 1644*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1645*8c03f64dSVadim Pasternak .mask = BIT(3), 1646*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1647*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1648*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1649*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1650*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1651*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 1652*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1653*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 1654*8c03f64dSVadim Pasternak .slot = 4, 1655*8c03f64dSVadim Pasternak }, 1656*8c03f64dSVadim Pasternak { 1657*8c03f64dSVadim Pasternak .label = "lc5_verified", 1658*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1659*8c03f64dSVadim Pasternak .mask = BIT(4), 1660*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1661*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1662*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1663*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1664*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 1665*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 1666*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1667*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 1668*8c03f64dSVadim Pasternak .slot = 5, 1669*8c03f64dSVadim Pasternak }, 1670*8c03f64dSVadim Pasternak { 1671*8c03f64dSVadim Pasternak .label = "lc6_verified", 1672*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1673*8c03f64dSVadim Pasternak .mask = BIT(5), 1674*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1675*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1676*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1677*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1678*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 1679*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 1680*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1681*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 1682*8c03f64dSVadim Pasternak .slot = 6, 1683*8c03f64dSVadim Pasternak }, 1684*8c03f64dSVadim Pasternak { 1685*8c03f64dSVadim Pasternak .label = "lc7_verified", 1686*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1687*8c03f64dSVadim Pasternak .mask = BIT(6), 1688*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1689*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1690*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1691*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1692*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 1693*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 1694*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1695*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 1696*8c03f64dSVadim Pasternak .slot = 7, 1697*8c03f64dSVadim Pasternak }, 1698*8c03f64dSVadim Pasternak { 1699*8c03f64dSVadim Pasternak .label = "lc8_verified", 1700*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 1701*8c03f64dSVadim Pasternak .mask = BIT(7), 1702*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1703*8c03f64dSVadim Pasternak .reg_sync = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1704*8c03f64dSVadim Pasternak .reg_pwr = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 1705*8c03f64dSVadim Pasternak .reg_ena = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 1706*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 1707*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 1708*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_PLATFORM_ACTION, 1709*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 1710*8c03f64dSVadim Pasternak .slot = 8, 1711*8c03f64dSVadim Pasternak }, 1712*8c03f64dSVadim Pasternak }; 1713*8c03f64dSVadim Pasternak 1714*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_pg_data[] = { 1715*8c03f64dSVadim Pasternak { 1716*8c03f64dSVadim Pasternak .label = "lc1_powered", 1717*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1718*8c03f64dSVadim Pasternak .mask = BIT(0), 1719*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1720*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1721*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1722*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1723*8c03f64dSVadim Pasternak .slot = 1, 1724*8c03f64dSVadim Pasternak }, 1725*8c03f64dSVadim Pasternak { 1726*8c03f64dSVadim Pasternak .label = "lc2_powered", 1727*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1728*8c03f64dSVadim Pasternak .mask = BIT(1), 1729*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1730*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1731*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1732*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1733*8c03f64dSVadim Pasternak .slot = 2, 1734*8c03f64dSVadim Pasternak }, 1735*8c03f64dSVadim Pasternak { 1736*8c03f64dSVadim Pasternak .label = "lc3_powered", 1737*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1738*8c03f64dSVadim Pasternak .mask = BIT(2), 1739*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1740*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1741*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1742*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1743*8c03f64dSVadim Pasternak .slot = 3, 1744*8c03f64dSVadim Pasternak }, 1745*8c03f64dSVadim Pasternak { 1746*8c03f64dSVadim Pasternak .label = "lc4_powered", 1747*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1748*8c03f64dSVadim Pasternak .mask = BIT(3), 1749*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1750*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 1751*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1752*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 1753*8c03f64dSVadim Pasternak .slot = 4, 1754*8c03f64dSVadim Pasternak }, 1755*8c03f64dSVadim Pasternak { 1756*8c03f64dSVadim Pasternak .label = "lc5_powered", 1757*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1758*8c03f64dSVadim Pasternak .mask = BIT(4), 1759*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 1760*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 1761*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1762*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 1763*8c03f64dSVadim Pasternak .slot = 5, 1764*8c03f64dSVadim Pasternak }, 1765*8c03f64dSVadim Pasternak { 1766*8c03f64dSVadim Pasternak .label = "lc6_powered", 1767*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1768*8c03f64dSVadim Pasternak .mask = BIT(5), 1769*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 1770*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 1771*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1772*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 1773*8c03f64dSVadim Pasternak .slot = 6, 1774*8c03f64dSVadim Pasternak }, 1775*8c03f64dSVadim Pasternak { 1776*8c03f64dSVadim Pasternak .label = "lc7_powered", 1777*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1778*8c03f64dSVadim Pasternak .mask = BIT(6), 1779*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 1780*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 1781*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1782*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 1783*8c03f64dSVadim Pasternak .slot = 7, 1784*8c03f64dSVadim Pasternak }, 1785*8c03f64dSVadim Pasternak { 1786*8c03f64dSVadim Pasternak .label = "lc8_powered", 1787*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 1788*8c03f64dSVadim Pasternak .mask = BIT(7), 1789*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 1790*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 1791*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1792*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 1793*8c03f64dSVadim Pasternak .slot = 8, 1794*8c03f64dSVadim Pasternak }, 1795*8c03f64dSVadim Pasternak }; 1796*8c03f64dSVadim Pasternak 1797*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_ready_data[] = { 1798*8c03f64dSVadim Pasternak { 1799*8c03f64dSVadim Pasternak .label = "lc1_ready", 1800*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1801*8c03f64dSVadim Pasternak .mask = BIT(0), 1802*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1803*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1804*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1805*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1806*8c03f64dSVadim Pasternak .slot = 1, 1807*8c03f64dSVadim Pasternak }, 1808*8c03f64dSVadim Pasternak { 1809*8c03f64dSVadim Pasternak .label = "lc2_ready", 1810*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1811*8c03f64dSVadim Pasternak .mask = BIT(1), 1812*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1813*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1814*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1815*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1816*8c03f64dSVadim Pasternak .slot = 2, 1817*8c03f64dSVadim Pasternak }, 1818*8c03f64dSVadim Pasternak { 1819*8c03f64dSVadim Pasternak .label = "lc3_ready", 1820*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1821*8c03f64dSVadim Pasternak .mask = BIT(2), 1822*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1823*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1824*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1825*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1826*8c03f64dSVadim Pasternak .slot = 3, 1827*8c03f64dSVadim Pasternak }, 1828*8c03f64dSVadim Pasternak { 1829*8c03f64dSVadim Pasternak .label = "lc4_ready", 1830*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1831*8c03f64dSVadim Pasternak .mask = BIT(3), 1832*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1833*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 1834*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1835*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 1836*8c03f64dSVadim Pasternak .slot = 4, 1837*8c03f64dSVadim Pasternak }, 1838*8c03f64dSVadim Pasternak { 1839*8c03f64dSVadim Pasternak .label = "lc5_ready", 1840*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1841*8c03f64dSVadim Pasternak .mask = BIT(4), 1842*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 1843*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 1844*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1845*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 1846*8c03f64dSVadim Pasternak .slot = 5, 1847*8c03f64dSVadim Pasternak }, 1848*8c03f64dSVadim Pasternak { 1849*8c03f64dSVadim Pasternak .label = "lc6_ready", 1850*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1851*8c03f64dSVadim Pasternak .mask = BIT(5), 1852*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 1853*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 1854*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1855*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 1856*8c03f64dSVadim Pasternak .slot = 6, 1857*8c03f64dSVadim Pasternak }, 1858*8c03f64dSVadim Pasternak { 1859*8c03f64dSVadim Pasternak .label = "lc7_ready", 1860*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1861*8c03f64dSVadim Pasternak .mask = BIT(6), 1862*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 1863*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 1864*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1865*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 1866*8c03f64dSVadim Pasternak .slot = 7, 1867*8c03f64dSVadim Pasternak }, 1868*8c03f64dSVadim Pasternak { 1869*8c03f64dSVadim Pasternak .label = "lc8_ready", 1870*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 1871*8c03f64dSVadim Pasternak .mask = BIT(7), 1872*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 1873*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 1874*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1875*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 1876*8c03f64dSVadim Pasternak .slot = 8, 1877*8c03f64dSVadim Pasternak }, 1878*8c03f64dSVadim Pasternak }; 1879*8c03f64dSVadim Pasternak 1880*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_synced_data[] = { 1881*8c03f64dSVadim Pasternak { 1882*8c03f64dSVadim Pasternak .label = "lc1_synced", 1883*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1884*8c03f64dSVadim Pasternak .mask = BIT(0), 1885*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1886*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1887*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1888*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1889*8c03f64dSVadim Pasternak .slot = 1, 1890*8c03f64dSVadim Pasternak }, 1891*8c03f64dSVadim Pasternak { 1892*8c03f64dSVadim Pasternak .label = "lc2_synced", 1893*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1894*8c03f64dSVadim Pasternak .mask = BIT(1), 1895*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1896*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1897*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1898*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1899*8c03f64dSVadim Pasternak .slot = 2, 1900*8c03f64dSVadim Pasternak }, 1901*8c03f64dSVadim Pasternak { 1902*8c03f64dSVadim Pasternak .label = "lc3_synced", 1903*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1904*8c03f64dSVadim Pasternak .mask = BIT(2), 1905*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1906*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1907*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1908*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1909*8c03f64dSVadim Pasternak .slot = 3, 1910*8c03f64dSVadim Pasternak }, 1911*8c03f64dSVadim Pasternak { 1912*8c03f64dSVadim Pasternak .label = "lc4_synced", 1913*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1914*8c03f64dSVadim Pasternak .mask = BIT(3), 1915*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1916*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 1917*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1918*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 1919*8c03f64dSVadim Pasternak .slot = 4, 1920*8c03f64dSVadim Pasternak }, 1921*8c03f64dSVadim Pasternak { 1922*8c03f64dSVadim Pasternak .label = "lc5_synced", 1923*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1924*8c03f64dSVadim Pasternak .mask = BIT(4), 1925*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 1926*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 1927*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1928*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 1929*8c03f64dSVadim Pasternak .slot = 5, 1930*8c03f64dSVadim Pasternak }, 1931*8c03f64dSVadim Pasternak { 1932*8c03f64dSVadim Pasternak .label = "lc6_synced", 1933*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1934*8c03f64dSVadim Pasternak .mask = BIT(5), 1935*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 1936*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 1937*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1938*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 1939*8c03f64dSVadim Pasternak .slot = 6, 1940*8c03f64dSVadim Pasternak }, 1941*8c03f64dSVadim Pasternak { 1942*8c03f64dSVadim Pasternak .label = "lc7_synced", 1943*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1944*8c03f64dSVadim Pasternak .mask = BIT(6), 1945*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 1946*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 1947*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1948*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 1949*8c03f64dSVadim Pasternak .slot = 7, 1950*8c03f64dSVadim Pasternak }, 1951*8c03f64dSVadim Pasternak { 1952*8c03f64dSVadim Pasternak .label = "lc8_synced", 1953*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 1954*8c03f64dSVadim Pasternak .mask = BIT(7), 1955*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 1956*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 1957*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1958*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 1959*8c03f64dSVadim Pasternak .slot = 8, 1960*8c03f64dSVadim Pasternak }, 1961*8c03f64dSVadim Pasternak }; 1962*8c03f64dSVadim Pasternak 1963*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_act_data[] = { 1964*8c03f64dSVadim Pasternak { 1965*8c03f64dSVadim Pasternak .label = "lc1_active", 1966*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 1967*8c03f64dSVadim Pasternak .mask = BIT(0), 1968*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 1969*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 1970*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1971*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 1972*8c03f64dSVadim Pasternak .slot = 1, 1973*8c03f64dSVadim Pasternak }, 1974*8c03f64dSVadim Pasternak { 1975*8c03f64dSVadim Pasternak .label = "lc2_active", 1976*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 1977*8c03f64dSVadim Pasternak .mask = BIT(1), 1978*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 1979*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 1980*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1981*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 1982*8c03f64dSVadim Pasternak .slot = 2, 1983*8c03f64dSVadim Pasternak }, 1984*8c03f64dSVadim Pasternak { 1985*8c03f64dSVadim Pasternak .label = "lc3_active", 1986*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 1987*8c03f64dSVadim Pasternak .mask = BIT(2), 1988*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 1989*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 1990*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 1991*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 1992*8c03f64dSVadim Pasternak .slot = 3, 1993*8c03f64dSVadim Pasternak }, 1994*8c03f64dSVadim Pasternak { 1995*8c03f64dSVadim Pasternak .label = "lc4_active", 1996*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 1997*8c03f64dSVadim Pasternak .mask = BIT(3), 1998*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 1999*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 2000*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2001*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 2002*8c03f64dSVadim Pasternak .slot = 4, 2003*8c03f64dSVadim Pasternak }, 2004*8c03f64dSVadim Pasternak { 2005*8c03f64dSVadim Pasternak .label = "lc5_active", 2006*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 2007*8c03f64dSVadim Pasternak .mask = BIT(4), 2008*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 2009*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 2010*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2011*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 2012*8c03f64dSVadim Pasternak .slot = 5, 2013*8c03f64dSVadim Pasternak }, 2014*8c03f64dSVadim Pasternak { 2015*8c03f64dSVadim Pasternak .label = "lc6_active", 2016*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 2017*8c03f64dSVadim Pasternak .mask = BIT(5), 2018*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 2019*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 2020*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2021*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 2022*8c03f64dSVadim Pasternak .slot = 6, 2023*8c03f64dSVadim Pasternak }, 2024*8c03f64dSVadim Pasternak { 2025*8c03f64dSVadim Pasternak .label = "lc7_active", 2026*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 2027*8c03f64dSVadim Pasternak .mask = BIT(6), 2028*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 2029*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 2030*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2031*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 2032*8c03f64dSVadim Pasternak .slot = 7, 2033*8c03f64dSVadim Pasternak }, 2034*8c03f64dSVadim Pasternak { 2035*8c03f64dSVadim Pasternak .label = "lc8_active", 2036*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 2037*8c03f64dSVadim Pasternak .mask = BIT(7), 2038*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 2039*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 2040*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2041*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 2042*8c03f64dSVadim Pasternak .slot = 8, 2043*8c03f64dSVadim Pasternak }, 2044*8c03f64dSVadim Pasternak }; 2045*8c03f64dSVadim Pasternak 2046*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_lc_sd_data[] = { 2047*8c03f64dSVadim Pasternak { 2048*8c03f64dSVadim Pasternak .label = "lc1_shutdown", 2049*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2050*8c03f64dSVadim Pasternak .mask = BIT(0), 2051*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[0], 2052*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(0), 2053*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2054*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[0], 2055*8c03f64dSVadim Pasternak .slot = 1, 2056*8c03f64dSVadim Pasternak }, 2057*8c03f64dSVadim Pasternak { 2058*8c03f64dSVadim Pasternak .label = "lc2_shutdown", 2059*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2060*8c03f64dSVadim Pasternak .mask = BIT(1), 2061*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[1], 2062*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(1), 2063*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2064*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[1], 2065*8c03f64dSVadim Pasternak .slot = 2, 2066*8c03f64dSVadim Pasternak }, 2067*8c03f64dSVadim Pasternak { 2068*8c03f64dSVadim Pasternak .label = "lc3_shutdown", 2069*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2070*8c03f64dSVadim Pasternak .mask = BIT(2), 2071*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[2], 2072*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(2), 2073*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2074*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[2], 2075*8c03f64dSVadim Pasternak .slot = 3, 2076*8c03f64dSVadim Pasternak }, 2077*8c03f64dSVadim Pasternak { 2078*8c03f64dSVadim Pasternak .label = "lc4_shutdown", 2079*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2080*8c03f64dSVadim Pasternak .mask = BIT(3), 2081*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[3], 2082*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(3), 2083*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2084*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[3], 2085*8c03f64dSVadim Pasternak .slot = 4, 2086*8c03f64dSVadim Pasternak }, 2087*8c03f64dSVadim Pasternak { 2088*8c03f64dSVadim Pasternak .label = "lc5_shutdown", 2089*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2090*8c03f64dSVadim Pasternak .mask = BIT(4), 2091*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[4], 2092*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(4), 2093*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2094*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[4], 2095*8c03f64dSVadim Pasternak .slot = 5, 2096*8c03f64dSVadim Pasternak }, 2097*8c03f64dSVadim Pasternak { 2098*8c03f64dSVadim Pasternak .label = "lc6_shutdown", 2099*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2100*8c03f64dSVadim Pasternak .mask = BIT(5), 2101*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[5], 2102*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(5), 2103*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2104*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[5], 2105*8c03f64dSVadim Pasternak .slot = 6, 2106*8c03f64dSVadim Pasternak }, 2107*8c03f64dSVadim Pasternak { 2108*8c03f64dSVadim Pasternak .label = "lc7_shutdown", 2109*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2110*8c03f64dSVadim Pasternak .mask = BIT(6), 2111*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[6], 2112*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(6), 2113*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2114*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[6], 2115*8c03f64dSVadim Pasternak .slot = 7, 2116*8c03f64dSVadim Pasternak }, 2117*8c03f64dSVadim Pasternak { 2118*8c03f64dSVadim Pasternak .label = "lc8_shutdown", 2119*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2120*8c03f64dSVadim Pasternak .mask = BIT(7), 2121*8c03f64dSVadim Pasternak .hpdev.brdinfo = &mlxplat_mlxcpld_lc_i2c_dev[7], 2122*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_LC_SET(7), 2123*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2124*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_modular_lc_notifier[7], 2125*8c03f64dSVadim Pasternak .slot = 8, 2126*8c03f64dSVadim Pasternak }, 2127*8c03f64dSVadim Pasternak }; 2128*8c03f64dSVadim Pasternak 2129*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_modular_items[] = { 2130*8c03f64dSVadim Pasternak { 2131*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_ext_psu_items_data, 2132*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2133*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 2134*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_EXT_MASK, 2135*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 2136*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data), 2137*8c03f64dSVadim Pasternak .inversed = 1, 2138*8c03f64dSVadim Pasternak .health = false, 2139*8c03f64dSVadim Pasternak }, 2140*8c03f64dSVadim Pasternak { 2141*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_pwr_items_data, 2142*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2143*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 2144*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_EXT_MASK, 2145*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 2146*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data), 2147*8c03f64dSVadim Pasternak .inversed = 0, 2148*8c03f64dSVadim Pasternak .health = false, 2149*8c03f64dSVadim Pasternak }, 2150*8c03f64dSVadim Pasternak { 2151*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 2152*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2153*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 2154*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 2155*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 2156*8c03f64dSVadim Pasternak .inversed = 1, 2157*8c03f64dSVadim Pasternak .health = false, 2158*8c03f64dSVadim Pasternak }, 2159*8c03f64dSVadim Pasternak { 2160*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_asic_items_data, 2161*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2162*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 2163*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 2164*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_asic_items_data), 2165*8c03f64dSVadim Pasternak .inversed = 0, 2166*8c03f64dSVadim Pasternak .health = true, 2167*8c03f64dSVadim Pasternak }, 2168*8c03f64dSVadim Pasternak { 2169*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_pr_items_data, 2170*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_PRESENT, 2171*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2172*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET, 2173*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2174*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_pr_items_data), 2175*8c03f64dSVadim Pasternak .inversed = 1, 2176*8c03f64dSVadim Pasternak .health = false, 2177*8c03f64dSVadim Pasternak }, 2178*8c03f64dSVadim Pasternak { 2179*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_ver_items_data, 2180*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_VERIFIED, 2181*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2182*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET, 2183*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2184*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_ver_items_data), 2185*8c03f64dSVadim Pasternak .inversed = 0, 2186*8c03f64dSVadim Pasternak .health = false, 2187*8c03f64dSVadim Pasternak }, 2188*8c03f64dSVadim Pasternak { 2189*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_pg_data, 2190*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_POWERED, 2191*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2192*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET, 2193*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2194*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_pg_data), 2195*8c03f64dSVadim Pasternak .inversed = 0, 2196*8c03f64dSVadim Pasternak .health = false, 2197*8c03f64dSVadim Pasternak }, 2198*8c03f64dSVadim Pasternak { 2199*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_ready_data, 2200*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_READY, 2201*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2202*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET, 2203*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2204*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_ready_data), 2205*8c03f64dSVadim Pasternak .inversed = 0, 2206*8c03f64dSVadim Pasternak .health = false, 2207*8c03f64dSVadim Pasternak }, 2208*8c03f64dSVadim Pasternak { 2209*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_synced_data, 2210*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_SYNCED, 2211*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2212*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET, 2213*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2214*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_synced_data), 2215*8c03f64dSVadim Pasternak .inversed = 0, 2216*8c03f64dSVadim Pasternak .health = false, 2217*8c03f64dSVadim Pasternak }, 2218*8c03f64dSVadim Pasternak { 2219*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_act_data, 2220*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_ACTIVE, 2221*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2222*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET, 2223*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2224*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_act_data), 2225*8c03f64dSVadim Pasternak .inversed = 0, 2226*8c03f64dSVadim Pasternak .health = false, 2227*8c03f64dSVadim Pasternak }, 2228*8c03f64dSVadim Pasternak { 2229*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_lc_sd_data, 2230*8c03f64dSVadim Pasternak .kind = MLXREG_HOTPLUG_LC_THERMAL, 2231*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_LC, 2232*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET, 2233*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LPC_LC_MASK, 2234*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_modular_lc_sd_data), 2235*8c03f64dSVadim Pasternak .inversed = 0, 2236*8c03f64dSVadim Pasternak .health = false, 2237*8c03f64dSVadim Pasternak }, 2238*8c03f64dSVadim Pasternak }; 2239*8c03f64dSVadim Pasternak 2240*8c03f64dSVadim Pasternak static 2241*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_modular_data = { 2242*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_modular_items, 2243*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_items), 2244*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 2245*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_MODULAR, 2246*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 2247*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 2248*8c03f64dSVadim Pasternak }; 2249*8c03f64dSVadim Pasternak 2250*8c03f64dSVadim Pasternak /* Platform hotplug for NVLink blade systems family data */ 2251*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_global_wp_items_data[] = { 2252*8c03f64dSVadim Pasternak { 2253*8c03f64dSVadim Pasternak .label = "global_wp_grant", 2254*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET, 2255*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_GWP_MASK, 2256*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2257*8c03f64dSVadim Pasternak }, 2258*8c03f64dSVadim Pasternak }; 2259*8c03f64dSVadim Pasternak 2260*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_chassis_blade_items[] = { 2261*8c03f64dSVadim Pasternak { 2262*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_global_wp_items_data, 2263*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2264*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET, 2265*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_GWP_MASK, 2266*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_global_wp_items_data), 2267*8c03f64dSVadim Pasternak .inversed = 0, 2268*8c03f64dSVadim Pasternak .health = false, 2269*8c03f64dSVadim Pasternak }, 2270*8c03f64dSVadim Pasternak }; 2271*8c03f64dSVadim Pasternak 2272*8c03f64dSVadim Pasternak static 2273*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_chassis_blade_data = { 2274*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_chassis_blade_items, 2275*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_chassis_blade_items), 2276*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 2277*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_COMEX, 2278*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 2279*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 2280*8c03f64dSVadim Pasternak }; 2281*8c03f64dSVadim Pasternak 2282*8c03f64dSVadim Pasternak /* Platform hotplug for switch systems family data */ 2283*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_erot_ap_items_data[] = { 2284*8c03f64dSVadim Pasternak { 2285*8c03f64dSVadim Pasternak .label = "erot1_ap", 2286*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, 2287*8c03f64dSVadim Pasternak .mask = BIT(0), 2288*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2289*8c03f64dSVadim Pasternak }, 2290*8c03f64dSVadim Pasternak { 2291*8c03f64dSVadim Pasternak .label = "erot2_ap", 2292*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, 2293*8c03f64dSVadim Pasternak .mask = BIT(1), 2294*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2295*8c03f64dSVadim Pasternak }, 2296*8c03f64dSVadim Pasternak }; 2297*8c03f64dSVadim Pasternak 2298*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_erot_error_items_data[] = { 2299*8c03f64dSVadim Pasternak { 2300*8c03f64dSVadim Pasternak .label = "erot1_error", 2301*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, 2302*8c03f64dSVadim Pasternak .mask = BIT(0), 2303*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2304*8c03f64dSVadim Pasternak }, 2305*8c03f64dSVadim Pasternak { 2306*8c03f64dSVadim Pasternak .label = "erot2_error", 2307*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, 2308*8c03f64dSVadim Pasternak .mask = BIT(1), 2309*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2310*8c03f64dSVadim Pasternak }, 2311*8c03f64dSVadim Pasternak }; 2312*8c03f64dSVadim Pasternak 2313*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_rack_switch_items[] = { 2314*8c03f64dSVadim Pasternak { 2315*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_ext_psu_items_data, 2316*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2317*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, 2318*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PSU_EXT_MASK, 2319*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 2320*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_psu_items_data), 2321*8c03f64dSVadim Pasternak .inversed = 1, 2322*8c03f64dSVadim Pasternak .health = false, 2323*8c03f64dSVadim Pasternak }, 2324*8c03f64dSVadim Pasternak { 2325*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_ext_pwr_items_data, 2326*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2327*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, 2328*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_EXT_MASK, 2329*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 2330*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_ext_pwr_items_data), 2331*8c03f64dSVadim Pasternak .inversed = 0, 2332*8c03f64dSVadim Pasternak .health = false, 2333*8c03f64dSVadim Pasternak }, 2334*8c03f64dSVadim Pasternak { 2335*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 2336*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2337*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 2338*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 2339*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 2340*8c03f64dSVadim Pasternak .inversed = 1, 2341*8c03f64dSVadim Pasternak .health = false, 2342*8c03f64dSVadim Pasternak }, 2343*8c03f64dSVadim Pasternak { 2344*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_erot_ap_items_data, 2345*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2346*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, 2347*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_EROT_MASK, 2348*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data), 2349*8c03f64dSVadim Pasternak .inversed = 1, 2350*8c03f64dSVadim Pasternak .health = false, 2351*8c03f64dSVadim Pasternak }, 2352*8c03f64dSVadim Pasternak { 2353*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_erot_error_items_data, 2354*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2355*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, 2356*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_EROT_MASK, 2357*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data), 2358*8c03f64dSVadim Pasternak .inversed = 1, 2359*8c03f64dSVadim Pasternak .health = false, 2360*8c03f64dSVadim Pasternak }, 2361*8c03f64dSVadim Pasternak }; 2362*8c03f64dSVadim Pasternak 2363*8c03f64dSVadim Pasternak static 2364*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_rack_switch_data = { 2365*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_rack_switch_items, 2366*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_rack_switch_items), 2367*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 2368*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, 2369*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 2370*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW, 2371*8c03f64dSVadim Pasternak }; 2372*8c03f64dSVadim Pasternak 2373*8c03f64dSVadim Pasternak /* Callback performs graceful shutdown after notification about power button event */ 2374*8c03f64dSVadim Pasternak static int 2375*8c03f64dSVadim Pasternak mlxplat_mlxcpld_l1_switch_pwr_events_handler(void *handle, enum mlxreg_hotplug_kind kind, 2376*8c03f64dSVadim Pasternak u8 action) 2377*8c03f64dSVadim Pasternak { 2378*8c03f64dSVadim Pasternak if (action) { 2379*8c03f64dSVadim Pasternak dev_info(&mlxplat_dev->dev, "System shutdown due to short press of power button"); 2380*8c03f64dSVadim Pasternak kernel_power_off(); 2381*8c03f64dSVadim Pasternak } 2382*8c03f64dSVadim Pasternak 2383*8c03f64dSVadim Pasternak return 0; 2384*8c03f64dSVadim Pasternak } 2385*8c03f64dSVadim Pasternak 2386*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_pwr_events_notifier = { 2387*8c03f64dSVadim Pasternak .user_handler = mlxplat_mlxcpld_l1_switch_pwr_events_handler, 2388*8c03f64dSVadim Pasternak }; 2389*8c03f64dSVadim Pasternak 2390*8c03f64dSVadim Pasternak /* Platform hotplug for l1 switch systems family data */ 2391*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_pwr_events_items_data[] = { 2392*8c03f64dSVadim Pasternak { 2393*8c03f64dSVadim Pasternak .label = "power_button", 2394*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET, 2395*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_BUTTON_MASK, 2396*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2397*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2398*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_l1_switch_pwr_events_notifier, 2399*8c03f64dSVadim Pasternak }, 2400*8c03f64dSVadim Pasternak }; 2401*8c03f64dSVadim Pasternak 2402*8c03f64dSVadim Pasternak /* Callback activates latch reset flow after notification about intrusion event */ 2403*8c03f64dSVadim Pasternak static int 2404*8c03f64dSVadim Pasternak mlxplat_mlxcpld_l1_switch_intrusion_events_handler(void *handle, enum mlxreg_hotplug_kind kind, 2405*8c03f64dSVadim Pasternak u8 action) 2406*8c03f64dSVadim Pasternak { 2407*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); 2408*8c03f64dSVadim Pasternak u32 regval; 2409*8c03f64dSVadim Pasternak int err; 2410*8c03f64dSVadim Pasternak 2411*8c03f64dSVadim Pasternak err = regmap_read(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, ®val); 2412*8c03f64dSVadim Pasternak if (err) 2413*8c03f64dSVadim Pasternak goto fail_regmap_read; 2414*8c03f64dSVadim Pasternak 2415*8c03f64dSVadim Pasternak if (action) { 2416*8c03f64dSVadim Pasternak dev_info(&mlxplat_dev->dev, "Detected intrusion - system latch is opened"); 2417*8c03f64dSVadim Pasternak err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 2418*8c03f64dSVadim Pasternak regval | MLXPLAT_CPLD_LATCH_RST_MASK); 2419*8c03f64dSVadim Pasternak } else { 2420*8c03f64dSVadim Pasternak dev_info(&mlxplat_dev->dev, "System latch is properly closed"); 2421*8c03f64dSVadim Pasternak err = regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 2422*8c03f64dSVadim Pasternak regval & ~MLXPLAT_CPLD_LATCH_RST_MASK); 2423*8c03f64dSVadim Pasternak } 2424*8c03f64dSVadim Pasternak 2425*8c03f64dSVadim Pasternak if (err) 2426*8c03f64dSVadim Pasternak goto fail_regmap_write; 2427*8c03f64dSVadim Pasternak 2428*8c03f64dSVadim Pasternak return 0; 2429*8c03f64dSVadim Pasternak 2430*8c03f64dSVadim Pasternak fail_regmap_read: 2431*8c03f64dSVadim Pasternak fail_regmap_write: 2432*8c03f64dSVadim Pasternak dev_err(&mlxplat_dev->dev, "Register access failed"); 2433*8c03f64dSVadim Pasternak return err; 2434*8c03f64dSVadim Pasternak } 2435*8c03f64dSVadim Pasternak 2436*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_notifier mlxplat_mlxcpld_l1_switch_intrusion_events_notifier = { 2437*8c03f64dSVadim Pasternak .user_handler = mlxplat_mlxcpld_l1_switch_intrusion_events_handler, 2438*8c03f64dSVadim Pasternak }; 2439*8c03f64dSVadim Pasternak 2440*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_health_events_items_data[] = { 2441*8c03f64dSVadim Pasternak { 2442*8c03f64dSVadim Pasternak .label = "thermal1_pdb", 2443*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, 2444*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_THERMAL1_PDB_MASK, 2445*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2446*8c03f64dSVadim Pasternak }, 2447*8c03f64dSVadim Pasternak { 2448*8c03f64dSVadim Pasternak .label = "thermal2_pdb", 2449*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, 2450*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_THERMAL2_PDB_MASK, 2451*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2452*8c03f64dSVadim Pasternak }, 2453*8c03f64dSVadim Pasternak { 2454*8c03f64dSVadim Pasternak .label = "intrusion", 2455*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, 2456*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_INTRUSION_MASK, 2457*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2458*8c03f64dSVadim Pasternak .hpdev.action = MLXREG_HOTPLUG_DEVICE_NO_ACTION, 2459*8c03f64dSVadim Pasternak .hpdev.notifier = &mlxplat_mlxcpld_l1_switch_intrusion_events_notifier, 2460*8c03f64dSVadim Pasternak }, 2461*8c03f64dSVadim Pasternak { 2462*8c03f64dSVadim Pasternak .label = "pwm_pg", 2463*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, 2464*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWM_PG_MASK, 2465*8c03f64dSVadim Pasternak .hpdev.nr = MLXPLAT_CPLD_NR_NONE, 2466*8c03f64dSVadim Pasternak }, 2467*8c03f64dSVadim Pasternak }; 2468*8c03f64dSVadim Pasternak 2469*8c03f64dSVadim Pasternak static struct mlxreg_core_item mlxplat_mlxcpld_l1_switch_events_items[] = { 2470*8c03f64dSVadim Pasternak { 2471*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_fan_items_data, 2472*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2473*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 2474*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FAN_NG_MASK, 2475*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_fan_items_data), 2476*8c03f64dSVadim Pasternak .inversed = 1, 2477*8c03f64dSVadim Pasternak .health = false, 2478*8c03f64dSVadim Pasternak }, 2479*8c03f64dSVadim Pasternak { 2480*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_erot_ap_items_data, 2481*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2482*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROT_OFFSET, 2483*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_EROT_MASK, 2484*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_erot_ap_items_data), 2485*8c03f64dSVadim Pasternak .inversed = 1, 2486*8c03f64dSVadim Pasternak .health = false, 2487*8c03f64dSVadim Pasternak }, 2488*8c03f64dSVadim Pasternak { 2489*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_erot_error_items_data, 2490*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2491*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET, 2492*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_EROT_MASK, 2493*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_erot_error_items_data), 2494*8c03f64dSVadim Pasternak .inversed = 1, 2495*8c03f64dSVadim Pasternak .health = false, 2496*8c03f64dSVadim Pasternak }, 2497*8c03f64dSVadim Pasternak { 2498*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_l1_switch_pwr_events_items_data, 2499*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2500*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET, 2501*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_PWR_BUTTON_MASK, 2502*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_pwr_events_items_data), 2503*8c03f64dSVadim Pasternak .inversed = 1, 2504*8c03f64dSVadim Pasternak .health = false, 2505*8c03f64dSVadim Pasternak }, 2506*8c03f64dSVadim Pasternak { 2507*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_l1_switch_health_events_items_data, 2508*8c03f64dSVadim Pasternak .aggr_mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF, 2509*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_BRD_OFFSET, 2510*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_L1_CHA_HEALTH_MASK, 2511*8c03f64dSVadim Pasternak .count = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_health_events_items_data), 2512*8c03f64dSVadim Pasternak .inversed = 1, 2513*8c03f64dSVadim Pasternak .health = false, 2514*8c03f64dSVadim Pasternak .ind = 8, 2515*8c03f64dSVadim Pasternak }, 2516*8c03f64dSVadim Pasternak }; 2517*8c03f64dSVadim Pasternak 2518*8c03f64dSVadim Pasternak static 2519*8c03f64dSVadim Pasternak struct mlxreg_core_hotplug_platform_data mlxplat_mlxcpld_l1_switch_data = { 2520*8c03f64dSVadim Pasternak .items = mlxplat_mlxcpld_l1_switch_events_items, 2521*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_events_items), 2522*8c03f64dSVadim Pasternak .cell = MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET, 2523*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_AGGR_MASK_NG_DEF | MLXPLAT_CPLD_AGGR_MASK_COMEX, 2524*8c03f64dSVadim Pasternak .cell_low = MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET, 2525*8c03f64dSVadim Pasternak .mask_low = MLXPLAT_CPLD_LOW_AGGR_MASK_LOW | MLXPLAT_CPLD_LOW_AGGR_MASK_PWR_BUT, 2526*8c03f64dSVadim Pasternak }; 2527*8c03f64dSVadim Pasternak 2528*8c03f64dSVadim Pasternak /* Platform led default data */ 2529*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_data[] = { 2530*8c03f64dSVadim Pasternak { 2531*8c03f64dSVadim Pasternak .label = "status:green", 2532*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2533*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2534*8c03f64dSVadim Pasternak }, 2535*8c03f64dSVadim Pasternak { 2536*8c03f64dSVadim Pasternak .label = "status:red", 2537*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2538*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2539*8c03f64dSVadim Pasternak }, 2540*8c03f64dSVadim Pasternak { 2541*8c03f64dSVadim Pasternak .label = "psu:green", 2542*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2543*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2544*8c03f64dSVadim Pasternak }, 2545*8c03f64dSVadim Pasternak { 2546*8c03f64dSVadim Pasternak .label = "psu:red", 2547*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2548*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2549*8c03f64dSVadim Pasternak }, 2550*8c03f64dSVadim Pasternak { 2551*8c03f64dSVadim Pasternak .label = "fan1:green", 2552*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2553*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2554*8c03f64dSVadim Pasternak }, 2555*8c03f64dSVadim Pasternak { 2556*8c03f64dSVadim Pasternak .label = "fan1:red", 2557*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2558*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2559*8c03f64dSVadim Pasternak }, 2560*8c03f64dSVadim Pasternak { 2561*8c03f64dSVadim Pasternak .label = "fan2:green", 2562*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2563*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2564*8c03f64dSVadim Pasternak }, 2565*8c03f64dSVadim Pasternak { 2566*8c03f64dSVadim Pasternak .label = "fan2:red", 2567*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2568*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2569*8c03f64dSVadim Pasternak }, 2570*8c03f64dSVadim Pasternak { 2571*8c03f64dSVadim Pasternak .label = "fan3:green", 2572*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2573*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2574*8c03f64dSVadim Pasternak }, 2575*8c03f64dSVadim Pasternak { 2576*8c03f64dSVadim Pasternak .label = "fan3:red", 2577*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2578*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2579*8c03f64dSVadim Pasternak }, 2580*8c03f64dSVadim Pasternak { 2581*8c03f64dSVadim Pasternak .label = "fan4:green", 2582*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2583*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2584*8c03f64dSVadim Pasternak }, 2585*8c03f64dSVadim Pasternak { 2586*8c03f64dSVadim Pasternak .label = "fan4:red", 2587*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2588*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2589*8c03f64dSVadim Pasternak }, 2590*8c03f64dSVadim Pasternak }; 2591*8c03f64dSVadim Pasternak 2592*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_data = { 2593*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_led_data, 2594*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_data), 2595*8c03f64dSVadim Pasternak }; 2596*8c03f64dSVadim Pasternak 2597*8c03f64dSVadim Pasternak /* Platform led default data for water cooling */ 2598*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_wc_data[] = { 2599*8c03f64dSVadim Pasternak { 2600*8c03f64dSVadim Pasternak .label = "status:green", 2601*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2602*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2603*8c03f64dSVadim Pasternak }, 2604*8c03f64dSVadim Pasternak { 2605*8c03f64dSVadim Pasternak .label = "status:red", 2606*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2607*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2608*8c03f64dSVadim Pasternak }, 2609*8c03f64dSVadim Pasternak { 2610*8c03f64dSVadim Pasternak .label = "psu:green", 2611*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2612*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2613*8c03f64dSVadim Pasternak }, 2614*8c03f64dSVadim Pasternak { 2615*8c03f64dSVadim Pasternak .label = "psu:red", 2616*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2617*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2618*8c03f64dSVadim Pasternak }, 2619*8c03f64dSVadim Pasternak }; 2620*8c03f64dSVadim Pasternak 2621*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_wc_data = { 2622*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_led_wc_data, 2623*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_wc_data), 2624*8c03f64dSVadim Pasternak }; 2625*8c03f64dSVadim Pasternak 2626*8c03f64dSVadim Pasternak /* Platform led default data for water cooling Ethernet switch blade */ 2627*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_led_eth_wc_blade_data[] = { 2628*8c03f64dSVadim Pasternak { 2629*8c03f64dSVadim Pasternak .label = "status:green", 2630*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2631*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2632*8c03f64dSVadim Pasternak }, 2633*8c03f64dSVadim Pasternak { 2634*8c03f64dSVadim Pasternak .label = "status:red", 2635*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2636*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2637*8c03f64dSVadim Pasternak }, 2638*8c03f64dSVadim Pasternak }; 2639*8c03f64dSVadim Pasternak 2640*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_led_eth_wc_blade_data = { 2641*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_led_eth_wc_blade_data, 2642*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_led_eth_wc_blade_data), 2643*8c03f64dSVadim Pasternak }; 2644*8c03f64dSVadim Pasternak 2645*8c03f64dSVadim Pasternak /* Platform led MSN21xx system family data */ 2646*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_led_data[] = { 2647*8c03f64dSVadim Pasternak { 2648*8c03f64dSVadim Pasternak .label = "status:green", 2649*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2650*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2651*8c03f64dSVadim Pasternak }, 2652*8c03f64dSVadim Pasternak { 2653*8c03f64dSVadim Pasternak .label = "status:red", 2654*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2655*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2656*8c03f64dSVadim Pasternak }, 2657*8c03f64dSVadim Pasternak { 2658*8c03f64dSVadim Pasternak .label = "fan:green", 2659*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2660*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2661*8c03f64dSVadim Pasternak }, 2662*8c03f64dSVadim Pasternak { 2663*8c03f64dSVadim Pasternak .label = "fan:red", 2664*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2665*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2666*8c03f64dSVadim Pasternak }, 2667*8c03f64dSVadim Pasternak { 2668*8c03f64dSVadim Pasternak .label = "psu1:green", 2669*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2670*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2671*8c03f64dSVadim Pasternak }, 2672*8c03f64dSVadim Pasternak { 2673*8c03f64dSVadim Pasternak .label = "psu1:red", 2674*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2675*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2676*8c03f64dSVadim Pasternak }, 2677*8c03f64dSVadim Pasternak { 2678*8c03f64dSVadim Pasternak .label = "psu2:green", 2679*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2680*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2681*8c03f64dSVadim Pasternak }, 2682*8c03f64dSVadim Pasternak { 2683*8c03f64dSVadim Pasternak .label = "psu2:red", 2684*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2685*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2686*8c03f64dSVadim Pasternak }, 2687*8c03f64dSVadim Pasternak { 2688*8c03f64dSVadim Pasternak .label = "uid:blue", 2689*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, 2690*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2691*8c03f64dSVadim Pasternak }, 2692*8c03f64dSVadim Pasternak }; 2693*8c03f64dSVadim Pasternak 2694*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_msn21xx_led_data = { 2695*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn21xx_led_data, 2696*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_led_data), 2697*8c03f64dSVadim Pasternak }; 2698*8c03f64dSVadim Pasternak 2699*8c03f64dSVadim Pasternak /* Platform led for default data for 200GbE systems */ 2700*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_led_data[] = { 2701*8c03f64dSVadim Pasternak { 2702*8c03f64dSVadim Pasternak .label = "status:green", 2703*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2704*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2705*8c03f64dSVadim Pasternak }, 2706*8c03f64dSVadim Pasternak { 2707*8c03f64dSVadim Pasternak .label = "status:orange", 2708*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2709*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2710*8c03f64dSVadim Pasternak }, 2711*8c03f64dSVadim Pasternak { 2712*8c03f64dSVadim Pasternak .label = "psu:green", 2713*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2714*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2715*8c03f64dSVadim Pasternak }, 2716*8c03f64dSVadim Pasternak { 2717*8c03f64dSVadim Pasternak .label = "psu:orange", 2718*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2719*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2720*8c03f64dSVadim Pasternak }, 2721*8c03f64dSVadim Pasternak { 2722*8c03f64dSVadim Pasternak .label = "fan1:green", 2723*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2724*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2725*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2726*8c03f64dSVadim Pasternak .bit = BIT(0), 2727*8c03f64dSVadim Pasternak }, 2728*8c03f64dSVadim Pasternak { 2729*8c03f64dSVadim Pasternak .label = "fan1:orange", 2730*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2731*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2732*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2733*8c03f64dSVadim Pasternak .bit = BIT(0), 2734*8c03f64dSVadim Pasternak }, 2735*8c03f64dSVadim Pasternak { 2736*8c03f64dSVadim Pasternak .label = "fan2:green", 2737*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2738*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2739*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2740*8c03f64dSVadim Pasternak .bit = BIT(1), 2741*8c03f64dSVadim Pasternak }, 2742*8c03f64dSVadim Pasternak { 2743*8c03f64dSVadim Pasternak .label = "fan2:orange", 2744*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2745*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2746*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2747*8c03f64dSVadim Pasternak .bit = BIT(1), 2748*8c03f64dSVadim Pasternak }, 2749*8c03f64dSVadim Pasternak { 2750*8c03f64dSVadim Pasternak .label = "fan3:green", 2751*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2752*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2753*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2754*8c03f64dSVadim Pasternak .bit = BIT(2), 2755*8c03f64dSVadim Pasternak }, 2756*8c03f64dSVadim Pasternak { 2757*8c03f64dSVadim Pasternak .label = "fan3:orange", 2758*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2759*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2760*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2761*8c03f64dSVadim Pasternak .bit = BIT(2), 2762*8c03f64dSVadim Pasternak }, 2763*8c03f64dSVadim Pasternak { 2764*8c03f64dSVadim Pasternak .label = "fan4:green", 2765*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2766*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2767*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2768*8c03f64dSVadim Pasternak .bit = BIT(3), 2769*8c03f64dSVadim Pasternak }, 2770*8c03f64dSVadim Pasternak { 2771*8c03f64dSVadim Pasternak .label = "fan4:orange", 2772*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2773*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2774*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2775*8c03f64dSVadim Pasternak .bit = BIT(3), 2776*8c03f64dSVadim Pasternak }, 2777*8c03f64dSVadim Pasternak { 2778*8c03f64dSVadim Pasternak .label = "fan5:green", 2779*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2780*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2781*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2782*8c03f64dSVadim Pasternak .bit = BIT(4), 2783*8c03f64dSVadim Pasternak }, 2784*8c03f64dSVadim Pasternak { 2785*8c03f64dSVadim Pasternak .label = "fan5:orange", 2786*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2787*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2788*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2789*8c03f64dSVadim Pasternak .bit = BIT(4), 2790*8c03f64dSVadim Pasternak }, 2791*8c03f64dSVadim Pasternak { 2792*8c03f64dSVadim Pasternak .label = "fan6:green", 2793*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2794*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2795*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2796*8c03f64dSVadim Pasternak .bit = BIT(5), 2797*8c03f64dSVadim Pasternak }, 2798*8c03f64dSVadim Pasternak { 2799*8c03f64dSVadim Pasternak .label = "fan6:orange", 2800*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2801*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2802*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2803*8c03f64dSVadim Pasternak .bit = BIT(5), 2804*8c03f64dSVadim Pasternak }, 2805*8c03f64dSVadim Pasternak { 2806*8c03f64dSVadim Pasternak .label = "fan7:green", 2807*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 2808*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2809*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2810*8c03f64dSVadim Pasternak .bit = BIT(6), 2811*8c03f64dSVadim Pasternak }, 2812*8c03f64dSVadim Pasternak { 2813*8c03f64dSVadim Pasternak .label = "fan7:orange", 2814*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 2815*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2816*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2817*8c03f64dSVadim Pasternak .bit = BIT(6), 2818*8c03f64dSVadim Pasternak }, 2819*8c03f64dSVadim Pasternak { 2820*8c03f64dSVadim Pasternak .label = "uid:blue", 2821*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, 2822*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2823*8c03f64dSVadim Pasternak }, 2824*8c03f64dSVadim Pasternak }; 2825*8c03f64dSVadim Pasternak 2826*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_ng_led_data = { 2827*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_led_data, 2828*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_led_data), 2829*8c03f64dSVadim Pasternak }; 2830*8c03f64dSVadim Pasternak 2831*8c03f64dSVadim Pasternak /* Platform led for Comex based 100GbE systems */ 2832*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_comex_100G_led_data[] = { 2833*8c03f64dSVadim Pasternak { 2834*8c03f64dSVadim Pasternak .label = "status:green", 2835*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2836*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2837*8c03f64dSVadim Pasternak }, 2838*8c03f64dSVadim Pasternak { 2839*8c03f64dSVadim Pasternak .label = "status:red", 2840*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2841*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2842*8c03f64dSVadim Pasternak }, 2843*8c03f64dSVadim Pasternak { 2844*8c03f64dSVadim Pasternak .label = "psu:green", 2845*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2846*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2847*8c03f64dSVadim Pasternak }, 2848*8c03f64dSVadim Pasternak { 2849*8c03f64dSVadim Pasternak .label = "psu:red", 2850*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2851*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2852*8c03f64dSVadim Pasternak }, 2853*8c03f64dSVadim Pasternak { 2854*8c03f64dSVadim Pasternak .label = "fan1:green", 2855*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2856*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2857*8c03f64dSVadim Pasternak }, 2858*8c03f64dSVadim Pasternak { 2859*8c03f64dSVadim Pasternak .label = "fan1:red", 2860*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2861*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2862*8c03f64dSVadim Pasternak }, 2863*8c03f64dSVadim Pasternak { 2864*8c03f64dSVadim Pasternak .label = "fan2:green", 2865*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2866*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2867*8c03f64dSVadim Pasternak }, 2868*8c03f64dSVadim Pasternak { 2869*8c03f64dSVadim Pasternak .label = "fan2:red", 2870*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2871*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2872*8c03f64dSVadim Pasternak }, 2873*8c03f64dSVadim Pasternak { 2874*8c03f64dSVadim Pasternak .label = "fan3:green", 2875*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2876*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2877*8c03f64dSVadim Pasternak }, 2878*8c03f64dSVadim Pasternak { 2879*8c03f64dSVadim Pasternak .label = "fan3:red", 2880*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2881*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2882*8c03f64dSVadim Pasternak }, 2883*8c03f64dSVadim Pasternak { 2884*8c03f64dSVadim Pasternak .label = "fan4:green", 2885*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2886*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2887*8c03f64dSVadim Pasternak }, 2888*8c03f64dSVadim Pasternak { 2889*8c03f64dSVadim Pasternak .label = "fan4:red", 2890*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2891*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2892*8c03f64dSVadim Pasternak }, 2893*8c03f64dSVadim Pasternak { 2894*8c03f64dSVadim Pasternak .label = "uid:blue", 2895*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, 2896*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2897*8c03f64dSVadim Pasternak }, 2898*8c03f64dSVadim Pasternak }; 2899*8c03f64dSVadim Pasternak 2900*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_comex_100G_led_data = { 2901*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_comex_100G_led_data, 2902*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_comex_100G_led_data), 2903*8c03f64dSVadim Pasternak }; 2904*8c03f64dSVadim Pasternak 2905*8c03f64dSVadim Pasternak /* Platform led for data for modular systems */ 2906*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_led_data[] = { 2907*8c03f64dSVadim Pasternak { 2908*8c03f64dSVadim Pasternak .label = "status:green", 2909*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2910*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2911*8c03f64dSVadim Pasternak }, 2912*8c03f64dSVadim Pasternak { 2913*8c03f64dSVadim Pasternak .label = "status:orange", 2914*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2915*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 2916*8c03f64dSVadim Pasternak }, 2917*8c03f64dSVadim Pasternak { 2918*8c03f64dSVadim Pasternak .label = "psu:green", 2919*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2920*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2921*8c03f64dSVadim Pasternak }, 2922*8c03f64dSVadim Pasternak { 2923*8c03f64dSVadim Pasternak .label = "psu:orange", 2924*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 2925*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2926*8c03f64dSVadim Pasternak }, 2927*8c03f64dSVadim Pasternak { 2928*8c03f64dSVadim Pasternak .label = "fan1:green", 2929*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2930*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2931*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2932*8c03f64dSVadim Pasternak .bit = BIT(0), 2933*8c03f64dSVadim Pasternak }, 2934*8c03f64dSVadim Pasternak { 2935*8c03f64dSVadim Pasternak .label = "fan1:orange", 2936*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2937*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2938*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2939*8c03f64dSVadim Pasternak .bit = BIT(0), 2940*8c03f64dSVadim Pasternak }, 2941*8c03f64dSVadim Pasternak { 2942*8c03f64dSVadim Pasternak .label = "fan2:green", 2943*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2944*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2945*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2946*8c03f64dSVadim Pasternak .bit = BIT(1), 2947*8c03f64dSVadim Pasternak }, 2948*8c03f64dSVadim Pasternak { 2949*8c03f64dSVadim Pasternak .label = "fan2:orange", 2950*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 2951*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2952*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2953*8c03f64dSVadim Pasternak .bit = BIT(1), 2954*8c03f64dSVadim Pasternak }, 2955*8c03f64dSVadim Pasternak { 2956*8c03f64dSVadim Pasternak .label = "fan3:green", 2957*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2958*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2959*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2960*8c03f64dSVadim Pasternak .bit = BIT(2), 2961*8c03f64dSVadim Pasternak }, 2962*8c03f64dSVadim Pasternak { 2963*8c03f64dSVadim Pasternak .label = "fan3:orange", 2964*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2965*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2966*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2967*8c03f64dSVadim Pasternak .bit = BIT(2), 2968*8c03f64dSVadim Pasternak }, 2969*8c03f64dSVadim Pasternak { 2970*8c03f64dSVadim Pasternak .label = "fan4:green", 2971*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2972*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2973*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2974*8c03f64dSVadim Pasternak .bit = BIT(3), 2975*8c03f64dSVadim Pasternak }, 2976*8c03f64dSVadim Pasternak { 2977*8c03f64dSVadim Pasternak .label = "fan4:orange", 2978*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 2979*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 2980*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2981*8c03f64dSVadim Pasternak .bit = BIT(3), 2982*8c03f64dSVadim Pasternak }, 2983*8c03f64dSVadim Pasternak { 2984*8c03f64dSVadim Pasternak .label = "fan5:green", 2985*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2986*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2987*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2988*8c03f64dSVadim Pasternak .bit = BIT(4), 2989*8c03f64dSVadim Pasternak }, 2990*8c03f64dSVadim Pasternak { 2991*8c03f64dSVadim Pasternak .label = "fan5:orange", 2992*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 2993*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 2994*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 2995*8c03f64dSVadim Pasternak .bit = BIT(4), 2996*8c03f64dSVadim Pasternak }, 2997*8c03f64dSVadim Pasternak { 2998*8c03f64dSVadim Pasternak .label = "fan6:green", 2999*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3000*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3001*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3002*8c03f64dSVadim Pasternak .bit = BIT(5), 3003*8c03f64dSVadim Pasternak }, 3004*8c03f64dSVadim Pasternak { 3005*8c03f64dSVadim Pasternak .label = "fan6:orange", 3006*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3007*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3008*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3009*8c03f64dSVadim Pasternak .bit = BIT(5), 3010*8c03f64dSVadim Pasternak }, 3011*8c03f64dSVadim Pasternak { 3012*8c03f64dSVadim Pasternak .label = "fan7:green", 3013*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 3014*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3015*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3016*8c03f64dSVadim Pasternak .bit = BIT(6), 3017*8c03f64dSVadim Pasternak }, 3018*8c03f64dSVadim Pasternak { 3019*8c03f64dSVadim Pasternak .label = "fan7:orange", 3020*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 3021*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3022*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3023*8c03f64dSVadim Pasternak .bit = BIT(6), 3024*8c03f64dSVadim Pasternak }, 3025*8c03f64dSVadim Pasternak { 3026*8c03f64dSVadim Pasternak .label = "uid:blue", 3027*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, 3028*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3029*8c03f64dSVadim Pasternak }, 3030*8c03f64dSVadim Pasternak { 3031*8c03f64dSVadim Pasternak .label = "fan_front:green", 3032*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 3033*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3034*8c03f64dSVadim Pasternak }, 3035*8c03f64dSVadim Pasternak { 3036*8c03f64dSVadim Pasternak .label = "fan_front:orange", 3037*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED6_OFFSET, 3038*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3039*8c03f64dSVadim Pasternak }, 3040*8c03f64dSVadim Pasternak { 3041*8c03f64dSVadim Pasternak .label = "mgmt:green", 3042*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED7_OFFSET, 3043*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3044*8c03f64dSVadim Pasternak }, 3045*8c03f64dSVadim Pasternak { 3046*8c03f64dSVadim Pasternak .label = "mgmt:orange", 3047*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED7_OFFSET, 3048*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3049*8c03f64dSVadim Pasternak }, 3050*8c03f64dSVadim Pasternak }; 3051*8c03f64dSVadim Pasternak 3052*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_modular_led_data = { 3053*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_led_data, 3054*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_led_data), 3055*8c03f64dSVadim Pasternak }; 3056*8c03f64dSVadim Pasternak 3057*8c03f64dSVadim Pasternak /* Platform led data for chassis system */ 3058*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_l1_switch_led_data[] = { 3059*8c03f64dSVadim Pasternak { 3060*8c03f64dSVadim Pasternak .label = "status:green", 3061*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 3062*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3063*8c03f64dSVadim Pasternak }, 3064*8c03f64dSVadim Pasternak { 3065*8c03f64dSVadim Pasternak .label = "status:orange", 3066*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED1_OFFSET, 3067*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK 3068*8c03f64dSVadim Pasternak }, 3069*8c03f64dSVadim Pasternak { 3070*8c03f64dSVadim Pasternak .label = "fan1:green", 3071*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 3072*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3073*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3074*8c03f64dSVadim Pasternak .bit = BIT(0), 3075*8c03f64dSVadim Pasternak }, 3076*8c03f64dSVadim Pasternak { 3077*8c03f64dSVadim Pasternak .label = "fan1:orange", 3078*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 3079*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3080*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3081*8c03f64dSVadim Pasternak .bit = BIT(0), 3082*8c03f64dSVadim Pasternak }, 3083*8c03f64dSVadim Pasternak { 3084*8c03f64dSVadim Pasternak .label = "fan2:green", 3085*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 3086*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3087*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3088*8c03f64dSVadim Pasternak .bit = BIT(1), 3089*8c03f64dSVadim Pasternak }, 3090*8c03f64dSVadim Pasternak { 3091*8c03f64dSVadim Pasternak .label = "fan2:orange", 3092*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED2_OFFSET, 3093*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3094*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3095*8c03f64dSVadim Pasternak .bit = BIT(1), 3096*8c03f64dSVadim Pasternak }, 3097*8c03f64dSVadim Pasternak { 3098*8c03f64dSVadim Pasternak .label = "fan3:green", 3099*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 3100*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3101*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3102*8c03f64dSVadim Pasternak .bit = BIT(2), 3103*8c03f64dSVadim Pasternak }, 3104*8c03f64dSVadim Pasternak { 3105*8c03f64dSVadim Pasternak .label = "fan3:orange", 3106*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 3107*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3108*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3109*8c03f64dSVadim Pasternak .bit = BIT(2), 3110*8c03f64dSVadim Pasternak }, 3111*8c03f64dSVadim Pasternak { 3112*8c03f64dSVadim Pasternak .label = "fan4:green", 3113*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 3114*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3115*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3116*8c03f64dSVadim Pasternak .bit = BIT(3), 3117*8c03f64dSVadim Pasternak }, 3118*8c03f64dSVadim Pasternak { 3119*8c03f64dSVadim Pasternak .label = "fan4:orange", 3120*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED3_OFFSET, 3121*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3122*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3123*8c03f64dSVadim Pasternak .bit = BIT(3), 3124*8c03f64dSVadim Pasternak }, 3125*8c03f64dSVadim Pasternak { 3126*8c03f64dSVadim Pasternak .label = "fan5:green", 3127*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3128*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3129*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3130*8c03f64dSVadim Pasternak .bit = BIT(4), 3131*8c03f64dSVadim Pasternak }, 3132*8c03f64dSVadim Pasternak { 3133*8c03f64dSVadim Pasternak .label = "fan5:orange", 3134*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3135*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3136*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3137*8c03f64dSVadim Pasternak .bit = BIT(4), 3138*8c03f64dSVadim Pasternak }, 3139*8c03f64dSVadim Pasternak { 3140*8c03f64dSVadim Pasternak .label = "fan6:green", 3141*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3142*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3143*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3144*8c03f64dSVadim Pasternak .bit = BIT(5), 3145*8c03f64dSVadim Pasternak }, 3146*8c03f64dSVadim Pasternak { 3147*8c03f64dSVadim Pasternak .label = "fan6:orange", 3148*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED4_OFFSET, 3149*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_HI_NIBBLE_MASK, 3150*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 3151*8c03f64dSVadim Pasternak .bit = BIT(5), 3152*8c03f64dSVadim Pasternak }, 3153*8c03f64dSVadim Pasternak { 3154*8c03f64dSVadim Pasternak .label = "uid:blue", 3155*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LED5_OFFSET, 3156*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_LED_LO_NIBBLE_MASK, 3157*8c03f64dSVadim Pasternak }, 3158*8c03f64dSVadim Pasternak }; 3159*8c03f64dSVadim Pasternak 3160*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_l1_switch_led_data = { 3161*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_l1_switch_led_data, 3162*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_l1_switch_led_data), 3163*8c03f64dSVadim Pasternak }; 3164*8c03f64dSVadim Pasternak 3165*8c03f64dSVadim Pasternak /* Platform register access default */ 3166*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_regs_io_data[] = { 3167*8c03f64dSVadim Pasternak { 3168*8c03f64dSVadim Pasternak .label = "cpld1_version", 3169*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET, 3170*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3171*8c03f64dSVadim Pasternak .mode = 0444, 3172*8c03f64dSVadim Pasternak }, 3173*8c03f64dSVadim Pasternak { 3174*8c03f64dSVadim Pasternak .label = "cpld2_version", 3175*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET, 3176*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3177*8c03f64dSVadim Pasternak .mode = 0444, 3178*8c03f64dSVadim Pasternak }, 3179*8c03f64dSVadim Pasternak { 3180*8c03f64dSVadim Pasternak .label = "cpld1_pn", 3181*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET, 3182*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3183*8c03f64dSVadim Pasternak .mode = 0444, 3184*8c03f64dSVadim Pasternak .regnum = 2, 3185*8c03f64dSVadim Pasternak }, 3186*8c03f64dSVadim Pasternak { 3187*8c03f64dSVadim Pasternak .label = "cpld2_pn", 3188*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET, 3189*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3190*8c03f64dSVadim Pasternak .mode = 0444, 3191*8c03f64dSVadim Pasternak .regnum = 2, 3192*8c03f64dSVadim Pasternak }, 3193*8c03f64dSVadim Pasternak { 3194*8c03f64dSVadim Pasternak .label = "cpld1_version_min", 3195*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET, 3196*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3197*8c03f64dSVadim Pasternak .mode = 0444, 3198*8c03f64dSVadim Pasternak }, 3199*8c03f64dSVadim Pasternak { 3200*8c03f64dSVadim Pasternak .label = "cpld2_version_min", 3201*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET, 3202*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3203*8c03f64dSVadim Pasternak .mode = 0444, 3204*8c03f64dSVadim Pasternak }, 3205*8c03f64dSVadim Pasternak { 3206*8c03f64dSVadim Pasternak .label = "reset_long_pb", 3207*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3208*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3209*8c03f64dSVadim Pasternak .mode = 0444, 3210*8c03f64dSVadim Pasternak }, 3211*8c03f64dSVadim Pasternak { 3212*8c03f64dSVadim Pasternak .label = "reset_short_pb", 3213*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3214*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3215*8c03f64dSVadim Pasternak .mode = 0444, 3216*8c03f64dSVadim Pasternak }, 3217*8c03f64dSVadim Pasternak { 3218*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_ref", 3219*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3220*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3221*8c03f64dSVadim Pasternak .mode = 0444, 3222*8c03f64dSVadim Pasternak }, 3223*8c03f64dSVadim Pasternak { 3224*8c03f64dSVadim Pasternak .label = "reset_main_pwr_fail", 3225*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3226*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3227*8c03f64dSVadim Pasternak .mode = 0444, 3228*8c03f64dSVadim Pasternak }, 3229*8c03f64dSVadim Pasternak { 3230*8c03f64dSVadim Pasternak .label = "reset_sw_reset", 3231*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3232*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3233*8c03f64dSVadim Pasternak .mode = 0444, 3234*8c03f64dSVadim Pasternak }, 3235*8c03f64dSVadim Pasternak { 3236*8c03f64dSVadim Pasternak .label = "reset_fw_reset", 3237*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3238*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3239*8c03f64dSVadim Pasternak .mode = 0444, 3240*8c03f64dSVadim Pasternak }, 3241*8c03f64dSVadim Pasternak { 3242*8c03f64dSVadim Pasternak .label = "reset_hotswap_or_wd", 3243*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3244*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3245*8c03f64dSVadim Pasternak .mode = 0444, 3246*8c03f64dSVadim Pasternak }, 3247*8c03f64dSVadim Pasternak { 3248*8c03f64dSVadim Pasternak .label = "reset_asic_thermal", 3249*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3250*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3251*8c03f64dSVadim Pasternak .mode = 0444, 3252*8c03f64dSVadim Pasternak }, 3253*8c03f64dSVadim Pasternak { 3254*8c03f64dSVadim Pasternak .label = "psu1_on", 3255*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3256*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3257*8c03f64dSVadim Pasternak .mode = 0200, 3258*8c03f64dSVadim Pasternak }, 3259*8c03f64dSVadim Pasternak { 3260*8c03f64dSVadim Pasternak .label = "psu2_on", 3261*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3262*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3263*8c03f64dSVadim Pasternak .mode = 0200, 3264*8c03f64dSVadim Pasternak }, 3265*8c03f64dSVadim Pasternak { 3266*8c03f64dSVadim Pasternak .label = "pwr_cycle", 3267*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3268*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3269*8c03f64dSVadim Pasternak .mode = 0200, 3270*8c03f64dSVadim Pasternak }, 3271*8c03f64dSVadim Pasternak { 3272*8c03f64dSVadim Pasternak .label = "pwr_down", 3273*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3274*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3275*8c03f64dSVadim Pasternak .mode = 0200, 3276*8c03f64dSVadim Pasternak }, 3277*8c03f64dSVadim Pasternak { 3278*8c03f64dSVadim Pasternak .label = "select_iio", 3279*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 3280*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3281*8c03f64dSVadim Pasternak .mode = 0644, 3282*8c03f64dSVadim Pasternak }, 3283*8c03f64dSVadim Pasternak { 3284*8c03f64dSVadim Pasternak .label = "asic_health", 3285*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 3286*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 3287*8c03f64dSVadim Pasternak .bit = 1, 3288*8c03f64dSVadim Pasternak .mode = 0444, 3289*8c03f64dSVadim Pasternak }, 3290*8c03f64dSVadim Pasternak }; 3291*8c03f64dSVadim Pasternak 3292*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_regs_io_data = { 3293*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_regs_io_data, 3294*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_regs_io_data), 3295*8c03f64dSVadim Pasternak }; 3296*8c03f64dSVadim Pasternak 3297*8c03f64dSVadim Pasternak /* Platform register access MSN21xx, MSN201x, MSN274x systems families data */ 3298*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_msn21xx_regs_io_data[] = { 3299*8c03f64dSVadim Pasternak { 3300*8c03f64dSVadim Pasternak .label = "cpld1_version", 3301*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET, 3302*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3303*8c03f64dSVadim Pasternak .mode = 0444, 3304*8c03f64dSVadim Pasternak }, 3305*8c03f64dSVadim Pasternak { 3306*8c03f64dSVadim Pasternak .label = "cpld2_version", 3307*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET, 3308*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3309*8c03f64dSVadim Pasternak .mode = 0444, 3310*8c03f64dSVadim Pasternak }, 3311*8c03f64dSVadim Pasternak { 3312*8c03f64dSVadim Pasternak .label = "cpld1_pn", 3313*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET, 3314*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3315*8c03f64dSVadim Pasternak .mode = 0444, 3316*8c03f64dSVadim Pasternak .regnum = 2, 3317*8c03f64dSVadim Pasternak }, 3318*8c03f64dSVadim Pasternak { 3319*8c03f64dSVadim Pasternak .label = "cpld2_pn", 3320*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET, 3321*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3322*8c03f64dSVadim Pasternak .mode = 0444, 3323*8c03f64dSVadim Pasternak .regnum = 2, 3324*8c03f64dSVadim Pasternak }, 3325*8c03f64dSVadim Pasternak { 3326*8c03f64dSVadim Pasternak .label = "cpld1_version_min", 3327*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET, 3328*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3329*8c03f64dSVadim Pasternak .mode = 0444, 3330*8c03f64dSVadim Pasternak }, 3331*8c03f64dSVadim Pasternak { 3332*8c03f64dSVadim Pasternak .label = "cpld2_version_min", 3333*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET, 3334*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3335*8c03f64dSVadim Pasternak .mode = 0444, 3336*8c03f64dSVadim Pasternak }, 3337*8c03f64dSVadim Pasternak { 3338*8c03f64dSVadim Pasternak .label = "reset_long_pb", 3339*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3340*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3341*8c03f64dSVadim Pasternak .mode = 0444, 3342*8c03f64dSVadim Pasternak }, 3343*8c03f64dSVadim Pasternak { 3344*8c03f64dSVadim Pasternak .label = "reset_short_pb", 3345*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3346*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3347*8c03f64dSVadim Pasternak .mode = 0444, 3348*8c03f64dSVadim Pasternak }, 3349*8c03f64dSVadim Pasternak { 3350*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_ref", 3351*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3352*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3353*8c03f64dSVadim Pasternak .mode = 0444, 3354*8c03f64dSVadim Pasternak }, 3355*8c03f64dSVadim Pasternak { 3356*8c03f64dSVadim Pasternak .label = "reset_sw_reset", 3357*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3358*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3359*8c03f64dSVadim Pasternak .mode = 0444, 3360*8c03f64dSVadim Pasternak }, 3361*8c03f64dSVadim Pasternak { 3362*8c03f64dSVadim Pasternak .label = "reset_main_pwr_fail", 3363*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3364*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3365*8c03f64dSVadim Pasternak .mode = 0444, 3366*8c03f64dSVadim Pasternak }, 3367*8c03f64dSVadim Pasternak { 3368*8c03f64dSVadim Pasternak .label = "reset_asic_thermal", 3369*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3370*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3371*8c03f64dSVadim Pasternak .mode = 0444, 3372*8c03f64dSVadim Pasternak }, 3373*8c03f64dSVadim Pasternak { 3374*8c03f64dSVadim Pasternak .label = "reset_hotswap_or_halt", 3375*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3376*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3377*8c03f64dSVadim Pasternak .mode = 0444, 3378*8c03f64dSVadim Pasternak }, 3379*8c03f64dSVadim Pasternak { 3380*8c03f64dSVadim Pasternak .label = "reset_sff_wd", 3381*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3382*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3383*8c03f64dSVadim Pasternak .mode = 0444, 3384*8c03f64dSVadim Pasternak }, 3385*8c03f64dSVadim Pasternak { 3386*8c03f64dSVadim Pasternak .label = "psu1_on", 3387*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3388*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3389*8c03f64dSVadim Pasternak .mode = 0200, 3390*8c03f64dSVadim Pasternak }, 3391*8c03f64dSVadim Pasternak { 3392*8c03f64dSVadim Pasternak .label = "psu2_on", 3393*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3394*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3395*8c03f64dSVadim Pasternak .mode = 0200, 3396*8c03f64dSVadim Pasternak }, 3397*8c03f64dSVadim Pasternak { 3398*8c03f64dSVadim Pasternak .label = "pwr_cycle", 3399*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3400*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3401*8c03f64dSVadim Pasternak .mode = 0200, 3402*8c03f64dSVadim Pasternak }, 3403*8c03f64dSVadim Pasternak { 3404*8c03f64dSVadim Pasternak .label = "pwr_down", 3405*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3406*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3407*8c03f64dSVadim Pasternak .mode = 0200, 3408*8c03f64dSVadim Pasternak }, 3409*8c03f64dSVadim Pasternak { 3410*8c03f64dSVadim Pasternak .label = "select_iio", 3411*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 3412*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3413*8c03f64dSVadim Pasternak .mode = 0644, 3414*8c03f64dSVadim Pasternak }, 3415*8c03f64dSVadim Pasternak { 3416*8c03f64dSVadim Pasternak .label = "asic_health", 3417*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 3418*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 3419*8c03f64dSVadim Pasternak .bit = 1, 3420*8c03f64dSVadim Pasternak .mode = 0444, 3421*8c03f64dSVadim Pasternak }, 3422*8c03f64dSVadim Pasternak }; 3423*8c03f64dSVadim Pasternak 3424*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_msn21xx_regs_io_data = { 3425*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_msn21xx_regs_io_data, 3426*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_msn21xx_regs_io_data), 3427*8c03f64dSVadim Pasternak }; 3428*8c03f64dSVadim Pasternak 3429*8c03f64dSVadim Pasternak /* Platform register access for next generation systems families data */ 3430*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_regs_io_data[] = { 3431*8c03f64dSVadim Pasternak { 3432*8c03f64dSVadim Pasternak .label = "cpld1_version", 3433*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET, 3434*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3435*8c03f64dSVadim Pasternak .mode = 0444, 3436*8c03f64dSVadim Pasternak }, 3437*8c03f64dSVadim Pasternak { 3438*8c03f64dSVadim Pasternak .label = "cpld2_version", 3439*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET, 3440*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3441*8c03f64dSVadim Pasternak .mode = 0444, 3442*8c03f64dSVadim Pasternak }, 3443*8c03f64dSVadim Pasternak { 3444*8c03f64dSVadim Pasternak .label = "cpld3_version", 3445*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET, 3446*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3447*8c03f64dSVadim Pasternak .mode = 0444, 3448*8c03f64dSVadim Pasternak }, 3449*8c03f64dSVadim Pasternak { 3450*8c03f64dSVadim Pasternak .label = "cpld4_version", 3451*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET, 3452*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3453*8c03f64dSVadim Pasternak .mode = 0444, 3454*8c03f64dSVadim Pasternak }, 3455*8c03f64dSVadim Pasternak { 3456*8c03f64dSVadim Pasternak .label = "cpld5_version", 3457*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET, 3458*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3459*8c03f64dSVadim Pasternak .mode = 0444, 3460*8c03f64dSVadim Pasternak }, 3461*8c03f64dSVadim Pasternak { 3462*8c03f64dSVadim Pasternak .label = "cpld1_pn", 3463*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET, 3464*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3465*8c03f64dSVadim Pasternak .mode = 0444, 3466*8c03f64dSVadim Pasternak .regnum = 2, 3467*8c03f64dSVadim Pasternak }, 3468*8c03f64dSVadim Pasternak { 3469*8c03f64dSVadim Pasternak .label = "cpld2_pn", 3470*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET, 3471*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3472*8c03f64dSVadim Pasternak .mode = 0444, 3473*8c03f64dSVadim Pasternak .regnum = 2, 3474*8c03f64dSVadim Pasternak }, 3475*8c03f64dSVadim Pasternak { 3476*8c03f64dSVadim Pasternak .label = "cpld3_pn", 3477*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET, 3478*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3479*8c03f64dSVadim Pasternak .mode = 0444, 3480*8c03f64dSVadim Pasternak .regnum = 2, 3481*8c03f64dSVadim Pasternak }, 3482*8c03f64dSVadim Pasternak { 3483*8c03f64dSVadim Pasternak .label = "cpld4_pn", 3484*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET, 3485*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3486*8c03f64dSVadim Pasternak .mode = 0444, 3487*8c03f64dSVadim Pasternak .regnum = 2, 3488*8c03f64dSVadim Pasternak }, 3489*8c03f64dSVadim Pasternak { 3490*8c03f64dSVadim Pasternak .label = "cpld5_pn", 3491*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET, 3492*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3493*8c03f64dSVadim Pasternak .mode = 0444, 3494*8c03f64dSVadim Pasternak .regnum = 2, 3495*8c03f64dSVadim Pasternak }, 3496*8c03f64dSVadim Pasternak { 3497*8c03f64dSVadim Pasternak .label = "cpld1_version_min", 3498*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET, 3499*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3500*8c03f64dSVadim Pasternak .mode = 0444, 3501*8c03f64dSVadim Pasternak }, 3502*8c03f64dSVadim Pasternak { 3503*8c03f64dSVadim Pasternak .label = "cpld2_version_min", 3504*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET, 3505*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3506*8c03f64dSVadim Pasternak .mode = 0444, 3507*8c03f64dSVadim Pasternak }, 3508*8c03f64dSVadim Pasternak { 3509*8c03f64dSVadim Pasternak .label = "cpld3_version_min", 3510*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET, 3511*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3512*8c03f64dSVadim Pasternak .mode = 0444, 3513*8c03f64dSVadim Pasternak }, 3514*8c03f64dSVadim Pasternak { 3515*8c03f64dSVadim Pasternak .label = "cpld4_version_min", 3516*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET, 3517*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3518*8c03f64dSVadim Pasternak .mode = 0444, 3519*8c03f64dSVadim Pasternak }, 3520*8c03f64dSVadim Pasternak { 3521*8c03f64dSVadim Pasternak .label = "cpld5_version_min", 3522*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET, 3523*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3524*8c03f64dSVadim Pasternak .mode = 0444, 3525*8c03f64dSVadim Pasternak }, 3526*8c03f64dSVadim Pasternak { 3527*8c03f64dSVadim Pasternak .label = "asic_reset", 3528*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, 3529*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3530*8c03f64dSVadim Pasternak .mode = 0200, 3531*8c03f64dSVadim Pasternak }, 3532*8c03f64dSVadim Pasternak { 3533*8c03f64dSVadim Pasternak .label = "asic2_reset", 3534*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, 3535*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3536*8c03f64dSVadim Pasternak .mode = 0200, 3537*8c03f64dSVadim Pasternak }, 3538*8c03f64dSVadim Pasternak { 3539*8c03f64dSVadim Pasternak .label = "erot1_reset", 3540*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, 3541*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3542*8c03f64dSVadim Pasternak .mode = 0644, 3543*8c03f64dSVadim Pasternak }, 3544*8c03f64dSVadim Pasternak { 3545*8c03f64dSVadim Pasternak .label = "erot2_reset", 3546*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP2_OFFSET, 3547*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3548*8c03f64dSVadim Pasternak .mode = 0644, 3549*8c03f64dSVadim Pasternak }, 3550*8c03f64dSVadim Pasternak { 3551*8c03f64dSVadim Pasternak .label = "clk_brd_prog_en", 3552*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 3553*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3554*8c03f64dSVadim Pasternak .mode = 0644, 3555*8c03f64dSVadim Pasternak .secured = 1, 3556*8c03f64dSVadim Pasternak }, 3557*8c03f64dSVadim Pasternak { 3558*8c03f64dSVadim Pasternak .label = "erot1_recovery", 3559*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 3560*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3561*8c03f64dSVadim Pasternak .mode = 0644, 3562*8c03f64dSVadim Pasternak }, 3563*8c03f64dSVadim Pasternak { 3564*8c03f64dSVadim Pasternak .label = "erot2_recovery", 3565*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 3566*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3567*8c03f64dSVadim Pasternak .mode = 0644, 3568*8c03f64dSVadim Pasternak }, 3569*8c03f64dSVadim Pasternak { 3570*8c03f64dSVadim Pasternak .label = "erot1_wp", 3571*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 3572*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3573*8c03f64dSVadim Pasternak .mode = 0644, 3574*8c03f64dSVadim Pasternak .secured = 1, 3575*8c03f64dSVadim Pasternak }, 3576*8c03f64dSVadim Pasternak { 3577*8c03f64dSVadim Pasternak .label = "erot2_wp", 3578*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 3579*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3580*8c03f64dSVadim Pasternak .mode = 0644, 3581*8c03f64dSVadim Pasternak .secured = 1, 3582*8c03f64dSVadim Pasternak }, 3583*8c03f64dSVadim Pasternak { 3584*8c03f64dSVadim Pasternak .label = "reset_long_pb", 3585*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3586*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3587*8c03f64dSVadim Pasternak .mode = 0444, 3588*8c03f64dSVadim Pasternak }, 3589*8c03f64dSVadim Pasternak { 3590*8c03f64dSVadim Pasternak .label = "reset_short_pb", 3591*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3592*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3593*8c03f64dSVadim Pasternak .mode = 0444, 3594*8c03f64dSVadim Pasternak }, 3595*8c03f64dSVadim Pasternak { 3596*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_ref", 3597*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3598*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3599*8c03f64dSVadim Pasternak .mode = 0444, 3600*8c03f64dSVadim Pasternak }, 3601*8c03f64dSVadim Pasternak { 3602*8c03f64dSVadim Pasternak .label = "reset_swb_dc_dc_pwr_fail", 3603*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3604*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3605*8c03f64dSVadim Pasternak .mode = 0444, 3606*8c03f64dSVadim Pasternak }, 3607*8c03f64dSVadim Pasternak { 3608*8c03f64dSVadim Pasternak .label = "reset_from_asic", 3609*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3610*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3611*8c03f64dSVadim Pasternak .mode = 0444, 3612*8c03f64dSVadim Pasternak }, 3613*8c03f64dSVadim Pasternak { 3614*8c03f64dSVadim Pasternak .label = "reset_swb_wd", 3615*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3616*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3617*8c03f64dSVadim Pasternak .mode = 0444, 3618*8c03f64dSVadim Pasternak }, 3619*8c03f64dSVadim Pasternak { 3620*8c03f64dSVadim Pasternak .label = "reset_asic_thermal", 3621*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 3622*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3623*8c03f64dSVadim Pasternak .mode = 0444, 3624*8c03f64dSVadim Pasternak }, 3625*8c03f64dSVadim Pasternak { 3626*8c03f64dSVadim Pasternak .label = "reset_sw_reset", 3627*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3628*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3629*8c03f64dSVadim Pasternak .mode = 0444, 3630*8c03f64dSVadim Pasternak }, 3631*8c03f64dSVadim Pasternak { 3632*8c03f64dSVadim Pasternak .label = "reset_comex_pwr_fail", 3633*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3634*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3635*8c03f64dSVadim Pasternak .mode = 0444, 3636*8c03f64dSVadim Pasternak }, 3637*8c03f64dSVadim Pasternak { 3638*8c03f64dSVadim Pasternak .label = "reset_platform", 3639*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3640*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3641*8c03f64dSVadim Pasternak .mode = 0444, 3642*8c03f64dSVadim Pasternak }, 3643*8c03f64dSVadim Pasternak { 3644*8c03f64dSVadim Pasternak .label = "reset_soc", 3645*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3646*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3647*8c03f64dSVadim Pasternak .mode = 0444, 3648*8c03f64dSVadim Pasternak }, 3649*8c03f64dSVadim Pasternak { 3650*8c03f64dSVadim Pasternak .label = "reset_comex_wd", 3651*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 3652*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3653*8c03f64dSVadim Pasternak .mode = 0444, 3654*8c03f64dSVadim Pasternak }, 3655*8c03f64dSVadim Pasternak { 3656*8c03f64dSVadim Pasternak .label = "reset_pwr_converter_fail", 3657*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3658*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3659*8c03f64dSVadim Pasternak .mode = 0444, 3660*8c03f64dSVadim Pasternak }, 3661*8c03f64dSVadim Pasternak { 3662*8c03f64dSVadim Pasternak .label = "reset_system", 3663*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3664*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3665*8c03f64dSVadim Pasternak .mode = 0444, 3666*8c03f64dSVadim Pasternak }, 3667*8c03f64dSVadim Pasternak { 3668*8c03f64dSVadim Pasternak .label = "reset_sw_pwr_off", 3669*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3670*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3671*8c03f64dSVadim Pasternak .mode = 0444, 3672*8c03f64dSVadim Pasternak }, 3673*8c03f64dSVadim Pasternak { 3674*8c03f64dSVadim Pasternak .label = "reset_comex_thermal", 3675*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3676*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3677*8c03f64dSVadim Pasternak .mode = 0444, 3678*8c03f64dSVadim Pasternak }, 3679*8c03f64dSVadim Pasternak { 3680*8c03f64dSVadim Pasternak .label = "reset_reload_bios", 3681*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3682*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3683*8c03f64dSVadim Pasternak .mode = 0444, 3684*8c03f64dSVadim Pasternak }, 3685*8c03f64dSVadim Pasternak { 3686*8c03f64dSVadim Pasternak .label = "reset_ac_pwr_fail", 3687*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3688*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3689*8c03f64dSVadim Pasternak .mode = 0444, 3690*8c03f64dSVadim Pasternak }, 3691*8c03f64dSVadim Pasternak { 3692*8c03f64dSVadim Pasternak .label = "reset_ac_ok_fail", 3693*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 3694*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3695*8c03f64dSVadim Pasternak .mode = 0444, 3696*8c03f64dSVadim Pasternak }, 3697*8c03f64dSVadim Pasternak { 3698*8c03f64dSVadim Pasternak .label = "psu1_on", 3699*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3700*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3701*8c03f64dSVadim Pasternak .mode = 0200, 3702*8c03f64dSVadim Pasternak }, 3703*8c03f64dSVadim Pasternak { 3704*8c03f64dSVadim Pasternak .label = "psu2_on", 3705*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3706*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3707*8c03f64dSVadim Pasternak .mode = 0200, 3708*8c03f64dSVadim Pasternak }, 3709*8c03f64dSVadim Pasternak { 3710*8c03f64dSVadim Pasternak .label = "pwr_cycle", 3711*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3712*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3713*8c03f64dSVadim Pasternak .mode = 0200, 3714*8c03f64dSVadim Pasternak }, 3715*8c03f64dSVadim Pasternak { 3716*8c03f64dSVadim Pasternak .label = "pwr_down", 3717*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3718*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3719*8c03f64dSVadim Pasternak .mode = 0200, 3720*8c03f64dSVadim Pasternak }, 3721*8c03f64dSVadim Pasternak { 3722*8c03f64dSVadim Pasternak .label = "deep_pwr_cycle", 3723*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3724*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3725*8c03f64dSVadim Pasternak .mode = 0200, 3726*8c03f64dSVadim Pasternak }, 3727*8c03f64dSVadim Pasternak { 3728*8c03f64dSVadim Pasternak .label = "latch_reset", 3729*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 3730*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3731*8c03f64dSVadim Pasternak .mode = 0200, 3732*8c03f64dSVadim Pasternak }, 3733*8c03f64dSVadim Pasternak { 3734*8c03f64dSVadim Pasternak .label = "jtag_cap", 3735*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET, 3736*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_FU_CAP_MASK, 3737*8c03f64dSVadim Pasternak .bit = 1, 3738*8c03f64dSVadim Pasternak .mode = 0444, 3739*8c03f64dSVadim Pasternak }, 3740*8c03f64dSVadim Pasternak { 3741*8c03f64dSVadim Pasternak .label = "jtag_enable", 3742*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 3743*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3744*8c03f64dSVadim Pasternak .mode = 0644, 3745*8c03f64dSVadim Pasternak }, 3746*8c03f64dSVadim Pasternak { 3747*8c03f64dSVadim Pasternak .label = "dbg1", 3748*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET, 3749*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3750*8c03f64dSVadim Pasternak .mode = 0644, 3751*8c03f64dSVadim Pasternak }, 3752*8c03f64dSVadim Pasternak { 3753*8c03f64dSVadim Pasternak .label = "dbg2", 3754*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET, 3755*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3756*8c03f64dSVadim Pasternak .mode = 0644, 3757*8c03f64dSVadim Pasternak }, 3758*8c03f64dSVadim Pasternak { 3759*8c03f64dSVadim Pasternak .label = "dbg3", 3760*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET, 3761*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3762*8c03f64dSVadim Pasternak .mode = 0644, 3763*8c03f64dSVadim Pasternak }, 3764*8c03f64dSVadim Pasternak { 3765*8c03f64dSVadim Pasternak .label = "dbg4", 3766*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET, 3767*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3768*8c03f64dSVadim Pasternak .mode = 0644, 3769*8c03f64dSVadim Pasternak }, 3770*8c03f64dSVadim Pasternak { 3771*8c03f64dSVadim Pasternak .label = "asic_health", 3772*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 3773*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 3774*8c03f64dSVadim Pasternak .bit = 1, 3775*8c03f64dSVadim Pasternak .mode = 0444, 3776*8c03f64dSVadim Pasternak }, 3777*8c03f64dSVadim Pasternak { 3778*8c03f64dSVadim Pasternak .label = "asic2_health", 3779*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET, 3780*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 3781*8c03f64dSVadim Pasternak .bit = 1, 3782*8c03f64dSVadim Pasternak .mode = 0444, 3783*8c03f64dSVadim Pasternak }, 3784*8c03f64dSVadim Pasternak { 3785*8c03f64dSVadim Pasternak .label = "fan_dir", 3786*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION, 3787*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3788*8c03f64dSVadim Pasternak .mode = 0444, 3789*8c03f64dSVadim Pasternak }, 3790*8c03f64dSVadim Pasternak { 3791*8c03f64dSVadim Pasternak .label = "bios_safe_mode", 3792*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 3793*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3794*8c03f64dSVadim Pasternak .mode = 0444, 3795*8c03f64dSVadim Pasternak }, 3796*8c03f64dSVadim Pasternak { 3797*8c03f64dSVadim Pasternak .label = "bios_active_image", 3798*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 3799*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3800*8c03f64dSVadim Pasternak .mode = 0444, 3801*8c03f64dSVadim Pasternak }, 3802*8c03f64dSVadim Pasternak { 3803*8c03f64dSVadim Pasternak .label = "bios_auth_fail", 3804*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 3805*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3806*8c03f64dSVadim Pasternak .mode = 0444, 3807*8c03f64dSVadim Pasternak }, 3808*8c03f64dSVadim Pasternak { 3809*8c03f64dSVadim Pasternak .label = "bios_upgrade_fail", 3810*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 3811*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3812*8c03f64dSVadim Pasternak .mode = 0444, 3813*8c03f64dSVadim Pasternak }, 3814*8c03f64dSVadim Pasternak { 3815*8c03f64dSVadim Pasternak .label = "voltreg_update_status", 3816*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET, 3817*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK, 3818*8c03f64dSVadim Pasternak .bit = 5, 3819*8c03f64dSVadim Pasternak .mode = 0444, 3820*8c03f64dSVadim Pasternak }, 3821*8c03f64dSVadim Pasternak { 3822*8c03f64dSVadim Pasternak .label = "pwr_converter_prog_en", 3823*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 3824*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3825*8c03f64dSVadim Pasternak .mode = 0644, 3826*8c03f64dSVadim Pasternak .secured = 1, 3827*8c03f64dSVadim Pasternak }, 3828*8c03f64dSVadim Pasternak { 3829*8c03f64dSVadim Pasternak .label = "vpd_wp", 3830*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 3831*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 3832*8c03f64dSVadim Pasternak .mode = 0644, 3833*8c03f64dSVadim Pasternak }, 3834*8c03f64dSVadim Pasternak { 3835*8c03f64dSVadim Pasternak .label = "pcie_asic_reset_dis", 3836*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 3837*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3838*8c03f64dSVadim Pasternak .mode = 0644, 3839*8c03f64dSVadim Pasternak }, 3840*8c03f64dSVadim Pasternak { 3841*8c03f64dSVadim Pasternak .label = "erot1_ap_reset", 3842*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3843*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 3844*8c03f64dSVadim Pasternak .mode = 0444, 3845*8c03f64dSVadim Pasternak }, 3846*8c03f64dSVadim Pasternak { 3847*8c03f64dSVadim Pasternak .label = "erot2_ap_reset", 3848*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3849*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 3850*8c03f64dSVadim Pasternak .mode = 0444, 3851*8c03f64dSVadim Pasternak }, 3852*8c03f64dSVadim Pasternak { 3853*8c03f64dSVadim Pasternak .label = "lid_open", 3854*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3855*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 3856*8c03f64dSVadim Pasternak .mode = 0444, 3857*8c03f64dSVadim Pasternak }, 3858*8c03f64dSVadim Pasternak { 3859*8c03f64dSVadim Pasternak .label = "clk_brd1_boot_fail", 3860*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3861*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 3862*8c03f64dSVadim Pasternak .mode = 0444, 3863*8c03f64dSVadim Pasternak }, 3864*8c03f64dSVadim Pasternak { 3865*8c03f64dSVadim Pasternak .label = "clk_brd2_boot_fail", 3866*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3867*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 3868*8c03f64dSVadim Pasternak .mode = 0444, 3869*8c03f64dSVadim Pasternak }, 3870*8c03f64dSVadim Pasternak { 3871*8c03f64dSVadim Pasternak .label = "clk_brd_fail", 3872*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3873*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 3874*8c03f64dSVadim Pasternak .mode = 0444, 3875*8c03f64dSVadim Pasternak }, 3876*8c03f64dSVadim Pasternak { 3877*8c03f64dSVadim Pasternak .label = "asic_pg_fail", 3878*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET, 3879*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 3880*8c03f64dSVadim Pasternak .mode = 0444, 3881*8c03f64dSVadim Pasternak }, 3882*8c03f64dSVadim Pasternak { 3883*8c03f64dSVadim Pasternak .label = "spi_chnl_select", 3884*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT, 3885*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 3886*8c03f64dSVadim Pasternak .bit = 1, 3887*8c03f64dSVadim Pasternak .mode = 0644, 3888*8c03f64dSVadim Pasternak }, 3889*8c03f64dSVadim Pasternak { 3890*8c03f64dSVadim Pasternak .label = "config1", 3891*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET, 3892*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3893*8c03f64dSVadim Pasternak .mode = 0444, 3894*8c03f64dSVadim Pasternak }, 3895*8c03f64dSVadim Pasternak { 3896*8c03f64dSVadim Pasternak .label = "config2", 3897*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET, 3898*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3899*8c03f64dSVadim Pasternak .mode = 0444, 3900*8c03f64dSVadim Pasternak }, 3901*8c03f64dSVadim Pasternak { 3902*8c03f64dSVadim Pasternak .label = "config3", 3903*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET, 3904*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3905*8c03f64dSVadim Pasternak .mode = 0444, 3906*8c03f64dSVadim Pasternak }, 3907*8c03f64dSVadim Pasternak { 3908*8c03f64dSVadim Pasternak .label = "ufm_version", 3909*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET, 3910*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3911*8c03f64dSVadim Pasternak .mode = 0444, 3912*8c03f64dSVadim Pasternak }, 3913*8c03f64dSVadim Pasternak }; 3914*8c03f64dSVadim Pasternak 3915*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_ng_regs_io_data = { 3916*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_ng_regs_io_data, 3917*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_ng_regs_io_data), 3918*8c03f64dSVadim Pasternak }; 3919*8c03f64dSVadim Pasternak 3920*8c03f64dSVadim Pasternak /* Platform register access for modular systems families data */ 3921*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_modular_regs_io_data[] = { 3922*8c03f64dSVadim Pasternak { 3923*8c03f64dSVadim Pasternak .label = "cpld1_version", 3924*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET, 3925*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3926*8c03f64dSVadim Pasternak .mode = 0444, 3927*8c03f64dSVadim Pasternak }, 3928*8c03f64dSVadim Pasternak { 3929*8c03f64dSVadim Pasternak .label = "cpld2_version", 3930*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET, 3931*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3932*8c03f64dSVadim Pasternak .mode = 0444, 3933*8c03f64dSVadim Pasternak }, 3934*8c03f64dSVadim Pasternak { 3935*8c03f64dSVadim Pasternak .label = "cpld3_version", 3936*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET, 3937*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3938*8c03f64dSVadim Pasternak .mode = 0444, 3939*8c03f64dSVadim Pasternak }, 3940*8c03f64dSVadim Pasternak { 3941*8c03f64dSVadim Pasternak .label = "cpld4_version", 3942*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET, 3943*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3944*8c03f64dSVadim Pasternak .mode = 0444, 3945*8c03f64dSVadim Pasternak }, 3946*8c03f64dSVadim Pasternak { 3947*8c03f64dSVadim Pasternak .label = "cpld1_pn", 3948*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET, 3949*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3950*8c03f64dSVadim Pasternak .mode = 0444, 3951*8c03f64dSVadim Pasternak .regnum = 2, 3952*8c03f64dSVadim Pasternak }, 3953*8c03f64dSVadim Pasternak { 3954*8c03f64dSVadim Pasternak .label = "cpld2_pn", 3955*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET, 3956*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3957*8c03f64dSVadim Pasternak .mode = 0444, 3958*8c03f64dSVadim Pasternak .regnum = 2, 3959*8c03f64dSVadim Pasternak }, 3960*8c03f64dSVadim Pasternak { 3961*8c03f64dSVadim Pasternak .label = "cpld3_pn", 3962*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET, 3963*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3964*8c03f64dSVadim Pasternak .mode = 0444, 3965*8c03f64dSVadim Pasternak .regnum = 2, 3966*8c03f64dSVadim Pasternak }, 3967*8c03f64dSVadim Pasternak { 3968*8c03f64dSVadim Pasternak .label = "cpld4_pn", 3969*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET, 3970*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 3971*8c03f64dSVadim Pasternak .mode = 0444, 3972*8c03f64dSVadim Pasternak .regnum = 2, 3973*8c03f64dSVadim Pasternak }, 3974*8c03f64dSVadim Pasternak { 3975*8c03f64dSVadim Pasternak .label = "cpld1_version_min", 3976*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET, 3977*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3978*8c03f64dSVadim Pasternak .mode = 0444, 3979*8c03f64dSVadim Pasternak }, 3980*8c03f64dSVadim Pasternak { 3981*8c03f64dSVadim Pasternak .label = "cpld2_version_min", 3982*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET, 3983*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3984*8c03f64dSVadim Pasternak .mode = 0444, 3985*8c03f64dSVadim Pasternak }, 3986*8c03f64dSVadim Pasternak { 3987*8c03f64dSVadim Pasternak .label = "cpld3_version_min", 3988*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET, 3989*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3990*8c03f64dSVadim Pasternak .mode = 0444, 3991*8c03f64dSVadim Pasternak }, 3992*8c03f64dSVadim Pasternak { 3993*8c03f64dSVadim Pasternak .label = "cpld4_version_min", 3994*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET, 3995*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 3996*8c03f64dSVadim Pasternak .mode = 0444, 3997*8c03f64dSVadim Pasternak }, 3998*8c03f64dSVadim Pasternak { 3999*8c03f64dSVadim Pasternak .label = "lc1_enable", 4000*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4001*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4002*8c03f64dSVadim Pasternak .mode = 0644, 4003*8c03f64dSVadim Pasternak }, 4004*8c03f64dSVadim Pasternak { 4005*8c03f64dSVadim Pasternak .label = "lc2_enable", 4006*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4007*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4008*8c03f64dSVadim Pasternak .mode = 0644, 4009*8c03f64dSVadim Pasternak }, 4010*8c03f64dSVadim Pasternak { 4011*8c03f64dSVadim Pasternak .label = "lc3_enable", 4012*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4013*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4014*8c03f64dSVadim Pasternak .mode = 0644, 4015*8c03f64dSVadim Pasternak }, 4016*8c03f64dSVadim Pasternak { 4017*8c03f64dSVadim Pasternak .label = "lc4_enable", 4018*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4019*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4020*8c03f64dSVadim Pasternak .mode = 0644, 4021*8c03f64dSVadim Pasternak }, 4022*8c03f64dSVadim Pasternak { 4023*8c03f64dSVadim Pasternak .label = "lc5_enable", 4024*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4025*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4026*8c03f64dSVadim Pasternak .mode = 0644, 4027*8c03f64dSVadim Pasternak }, 4028*8c03f64dSVadim Pasternak { 4029*8c03f64dSVadim Pasternak .label = "lc6_enable", 4030*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4031*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4032*8c03f64dSVadim Pasternak .mode = 0644, 4033*8c03f64dSVadim Pasternak }, 4034*8c03f64dSVadim Pasternak { 4035*8c03f64dSVadim Pasternak .label = "lc7_enable", 4036*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4037*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4038*8c03f64dSVadim Pasternak .mode = 0644, 4039*8c03f64dSVadim Pasternak }, 4040*8c03f64dSVadim Pasternak { 4041*8c03f64dSVadim Pasternak .label = "lc8_enable", 4042*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET, 4043*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4044*8c03f64dSVadim Pasternak .mode = 0644, 4045*8c03f64dSVadim Pasternak }, 4046*8c03f64dSVadim Pasternak { 4047*8c03f64dSVadim Pasternak .label = "reset_long_pb", 4048*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4049*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4050*8c03f64dSVadim Pasternak .mode = 0444, 4051*8c03f64dSVadim Pasternak }, 4052*8c03f64dSVadim Pasternak { 4053*8c03f64dSVadim Pasternak .label = "reset_short_pb", 4054*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4055*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4056*8c03f64dSVadim Pasternak .mode = 0444, 4057*8c03f64dSVadim Pasternak }, 4058*8c03f64dSVadim Pasternak { 4059*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_fu", 4060*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4061*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4062*8c03f64dSVadim Pasternak .mode = 0444, 4063*8c03f64dSVadim Pasternak }, 4064*8c03f64dSVadim Pasternak { 4065*8c03f64dSVadim Pasternak .label = "reset_mgmt_dc_dc_pwr_fail", 4066*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4067*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4068*8c03f64dSVadim Pasternak .mode = 0444, 4069*8c03f64dSVadim Pasternak }, 4070*8c03f64dSVadim Pasternak { 4071*8c03f64dSVadim Pasternak .label = "reset_sys_comex_bios", 4072*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4073*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4074*8c03f64dSVadim Pasternak .mode = 0444, 4075*8c03f64dSVadim Pasternak }, 4076*8c03f64dSVadim Pasternak { 4077*8c03f64dSVadim Pasternak .label = "reset_sw_reset", 4078*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4079*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4080*8c03f64dSVadim Pasternak .mode = 0444, 4081*8c03f64dSVadim Pasternak }, 4082*8c03f64dSVadim Pasternak { 4083*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_reload", 4084*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4085*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4086*8c03f64dSVadim Pasternak .mode = 0444, 4087*8c03f64dSVadim Pasternak }, 4088*8c03f64dSVadim Pasternak { 4089*8c03f64dSVadim Pasternak .label = "reset_comex_pwr_fail", 4090*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4091*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4092*8c03f64dSVadim Pasternak .mode = 0444, 4093*8c03f64dSVadim Pasternak }, 4094*8c03f64dSVadim Pasternak { 4095*8c03f64dSVadim Pasternak .label = "reset_platform", 4096*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4097*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4098*8c03f64dSVadim Pasternak .mode = 0444, 4099*8c03f64dSVadim Pasternak }, 4100*8c03f64dSVadim Pasternak { 4101*8c03f64dSVadim Pasternak .label = "reset_soc", 4102*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4103*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4104*8c03f64dSVadim Pasternak .mode = 0444, 4105*8c03f64dSVadim Pasternak }, 4106*8c03f64dSVadim Pasternak { 4107*8c03f64dSVadim Pasternak .label = "reset_pwr_off_from_carrier", 4108*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4109*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4110*8c03f64dSVadim Pasternak .mode = 0444, 4111*8c03f64dSVadim Pasternak }, 4112*8c03f64dSVadim Pasternak { 4113*8c03f64dSVadim Pasternak .label = "reset_swb_wd", 4114*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4115*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4116*8c03f64dSVadim Pasternak .mode = 0444, 4117*8c03f64dSVadim Pasternak }, 4118*8c03f64dSVadim Pasternak { 4119*8c03f64dSVadim Pasternak .label = "reset_swb_aux_pwr_or_fu", 4120*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4121*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4122*8c03f64dSVadim Pasternak .mode = 0444, 4123*8c03f64dSVadim Pasternak }, 4124*8c03f64dSVadim Pasternak { 4125*8c03f64dSVadim Pasternak .label = "reset_swb_dc_dc_pwr_fail", 4126*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4127*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4128*8c03f64dSVadim Pasternak .mode = 0444, 4129*8c03f64dSVadim Pasternak }, 4130*8c03f64dSVadim Pasternak { 4131*8c03f64dSVadim Pasternak .label = "reset_swb_12v_fail", 4132*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4133*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4134*8c03f64dSVadim Pasternak .mode = 0444, 4135*8c03f64dSVadim Pasternak }, 4136*8c03f64dSVadim Pasternak { 4137*8c03f64dSVadim Pasternak .label = "reset_system", 4138*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4139*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4140*8c03f64dSVadim Pasternak .mode = 0444, 4141*8c03f64dSVadim Pasternak }, 4142*8c03f64dSVadim Pasternak { 4143*8c03f64dSVadim Pasternak .label = "reset_thermal_spc_or_pciesw", 4144*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4145*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4146*8c03f64dSVadim Pasternak .mode = 0444, 4147*8c03f64dSVadim Pasternak }, 4148*8c03f64dSVadim Pasternak { 4149*8c03f64dSVadim Pasternak .label = "bios_safe_mode", 4150*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4151*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4152*8c03f64dSVadim Pasternak .mode = 0444, 4153*8c03f64dSVadim Pasternak }, 4154*8c03f64dSVadim Pasternak { 4155*8c03f64dSVadim Pasternak .label = "bios_active_image", 4156*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4157*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4158*8c03f64dSVadim Pasternak .mode = 0444, 4159*8c03f64dSVadim Pasternak }, 4160*8c03f64dSVadim Pasternak { 4161*8c03f64dSVadim Pasternak .label = "bios_auth_fail", 4162*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4163*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4164*8c03f64dSVadim Pasternak .mode = 0444, 4165*8c03f64dSVadim Pasternak }, 4166*8c03f64dSVadim Pasternak { 4167*8c03f64dSVadim Pasternak .label = "bios_upgrade_fail", 4168*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4169*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4170*8c03f64dSVadim Pasternak .mode = 0444, 4171*8c03f64dSVadim Pasternak }, 4172*8c03f64dSVadim Pasternak { 4173*8c03f64dSVadim Pasternak .label = "voltreg_update_status", 4174*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET, 4175*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK, 4176*8c03f64dSVadim Pasternak .bit = 5, 4177*8c03f64dSVadim Pasternak .mode = 0444, 4178*8c03f64dSVadim Pasternak }, 4179*8c03f64dSVadim Pasternak { 4180*8c03f64dSVadim Pasternak .label = "vpd_wp", 4181*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 4182*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4183*8c03f64dSVadim Pasternak .mode = 0644, 4184*8c03f64dSVadim Pasternak }, 4185*8c03f64dSVadim Pasternak { 4186*8c03f64dSVadim Pasternak .label = "pcie_asic_reset_dis", 4187*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 4188*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4189*8c03f64dSVadim Pasternak .mode = 0644, 4190*8c03f64dSVadim Pasternak }, 4191*8c03f64dSVadim Pasternak { 4192*8c03f64dSVadim Pasternak .label = "shutdown_unlock", 4193*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 4194*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4195*8c03f64dSVadim Pasternak .mode = 0644, 4196*8c03f64dSVadim Pasternak }, 4197*8c03f64dSVadim Pasternak { 4198*8c03f64dSVadim Pasternak .label = "lc1_rst_mask", 4199*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4200*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4201*8c03f64dSVadim Pasternak .mode = 0200, 4202*8c03f64dSVadim Pasternak }, 4203*8c03f64dSVadim Pasternak { 4204*8c03f64dSVadim Pasternak .label = "lc2_rst_mask", 4205*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4206*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4207*8c03f64dSVadim Pasternak .mode = 0200, 4208*8c03f64dSVadim Pasternak }, 4209*8c03f64dSVadim Pasternak { 4210*8c03f64dSVadim Pasternak .label = "lc3_rst_mask", 4211*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4212*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4213*8c03f64dSVadim Pasternak .mode = 0200, 4214*8c03f64dSVadim Pasternak }, 4215*8c03f64dSVadim Pasternak { 4216*8c03f64dSVadim Pasternak .label = "lc4_rst_mask", 4217*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4218*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4219*8c03f64dSVadim Pasternak .mode = 0200, 4220*8c03f64dSVadim Pasternak }, 4221*8c03f64dSVadim Pasternak { 4222*8c03f64dSVadim Pasternak .label = "lc5_rst_mask", 4223*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4224*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4225*8c03f64dSVadim Pasternak .mode = 0200, 4226*8c03f64dSVadim Pasternak }, 4227*8c03f64dSVadim Pasternak { 4228*8c03f64dSVadim Pasternak .label = "lc6_rst_mask", 4229*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4230*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4231*8c03f64dSVadim Pasternak .mode = 0200, 4232*8c03f64dSVadim Pasternak }, 4233*8c03f64dSVadim Pasternak { 4234*8c03f64dSVadim Pasternak .label = "lc7_rst_mask", 4235*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4236*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4237*8c03f64dSVadim Pasternak .mode = 0200, 4238*8c03f64dSVadim Pasternak }, 4239*8c03f64dSVadim Pasternak { 4240*8c03f64dSVadim Pasternak .label = "lc8_rst_mask", 4241*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET, 4242*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4243*8c03f64dSVadim Pasternak .mode = 0200, 4244*8c03f64dSVadim Pasternak }, 4245*8c03f64dSVadim Pasternak { 4246*8c03f64dSVadim Pasternak .label = "psu1_on", 4247*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4248*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4249*8c03f64dSVadim Pasternak .mode = 0200, 4250*8c03f64dSVadim Pasternak }, 4251*8c03f64dSVadim Pasternak { 4252*8c03f64dSVadim Pasternak .label = "psu2_on", 4253*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4254*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4255*8c03f64dSVadim Pasternak .mode = 0200, 4256*8c03f64dSVadim Pasternak }, 4257*8c03f64dSVadim Pasternak { 4258*8c03f64dSVadim Pasternak .label = "pwr_cycle", 4259*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4260*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4261*8c03f64dSVadim Pasternak .mode = 0200, 4262*8c03f64dSVadim Pasternak }, 4263*8c03f64dSVadim Pasternak { 4264*8c03f64dSVadim Pasternak .label = "pwr_down", 4265*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4266*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4267*8c03f64dSVadim Pasternak .mode = 0200, 4268*8c03f64dSVadim Pasternak }, 4269*8c03f64dSVadim Pasternak { 4270*8c03f64dSVadim Pasternak .label = "psu3_on", 4271*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4272*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4273*8c03f64dSVadim Pasternak .mode = 0200, 4274*8c03f64dSVadim Pasternak }, 4275*8c03f64dSVadim Pasternak { 4276*8c03f64dSVadim Pasternak .label = "psu4_on", 4277*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4278*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4279*8c03f64dSVadim Pasternak .mode = 0200, 4280*8c03f64dSVadim Pasternak }, 4281*8c03f64dSVadim Pasternak { 4282*8c03f64dSVadim Pasternak .label = "auto_power_mode", 4283*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4284*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4285*8c03f64dSVadim Pasternak .mode = 0644, 4286*8c03f64dSVadim Pasternak }, 4287*8c03f64dSVadim Pasternak { 4288*8c03f64dSVadim Pasternak .label = "pm_mgmt_en", 4289*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4290*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4291*8c03f64dSVadim Pasternak .mode = 0644, 4292*8c03f64dSVadim Pasternak }, 4293*8c03f64dSVadim Pasternak { 4294*8c03f64dSVadim Pasternak .label = "jtag_enable", 4295*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE, 4296*8c03f64dSVadim Pasternak .mask = GENMASK(3, 0), 4297*8c03f64dSVadim Pasternak .bit = 1, 4298*8c03f64dSVadim Pasternak .mode = 0644, 4299*8c03f64dSVadim Pasternak }, 4300*8c03f64dSVadim Pasternak { 4301*8c03f64dSVadim Pasternak .label = "safe_bios_dis", 4302*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET, 4303*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4304*8c03f64dSVadim Pasternak .mode = 0644, 4305*8c03f64dSVadim Pasternak }, 4306*8c03f64dSVadim Pasternak { 4307*8c03f64dSVadim Pasternak .label = "safe_bios_dis_wp", 4308*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET, 4309*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4310*8c03f64dSVadim Pasternak .mode = 0644, 4311*8c03f64dSVadim Pasternak }, 4312*8c03f64dSVadim Pasternak { 4313*8c03f64dSVadim Pasternak .label = "asic_health", 4314*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET, 4315*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_ASIC_MASK, 4316*8c03f64dSVadim Pasternak .bit = 1, 4317*8c03f64dSVadim Pasternak .mode = 0444, 4318*8c03f64dSVadim Pasternak }, 4319*8c03f64dSVadim Pasternak { 4320*8c03f64dSVadim Pasternak .label = "fan_dir", 4321*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION, 4322*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4323*8c03f64dSVadim Pasternak .mode = 0444, 4324*8c03f64dSVadim Pasternak }, 4325*8c03f64dSVadim Pasternak { 4326*8c03f64dSVadim Pasternak .label = "lc1_pwr", 4327*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4328*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4329*8c03f64dSVadim Pasternak .mode = 0644, 4330*8c03f64dSVadim Pasternak }, 4331*8c03f64dSVadim Pasternak { 4332*8c03f64dSVadim Pasternak .label = "lc2_pwr", 4333*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4334*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4335*8c03f64dSVadim Pasternak .mode = 0644, 4336*8c03f64dSVadim Pasternak }, 4337*8c03f64dSVadim Pasternak { 4338*8c03f64dSVadim Pasternak .label = "lc3_pwr", 4339*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4340*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4341*8c03f64dSVadim Pasternak .mode = 0644, 4342*8c03f64dSVadim Pasternak }, 4343*8c03f64dSVadim Pasternak { 4344*8c03f64dSVadim Pasternak .label = "lc4_pwr", 4345*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4346*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4347*8c03f64dSVadim Pasternak .mode = 0644, 4348*8c03f64dSVadim Pasternak }, 4349*8c03f64dSVadim Pasternak { 4350*8c03f64dSVadim Pasternak .label = "lc5_pwr", 4351*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4352*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4353*8c03f64dSVadim Pasternak .mode = 0644, 4354*8c03f64dSVadim Pasternak }, 4355*8c03f64dSVadim Pasternak { 4356*8c03f64dSVadim Pasternak .label = "lc6_pwr", 4357*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4358*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4359*8c03f64dSVadim Pasternak .mode = 0644, 4360*8c03f64dSVadim Pasternak }, 4361*8c03f64dSVadim Pasternak { 4362*8c03f64dSVadim Pasternak .label = "lc7_pwr", 4363*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4364*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4365*8c03f64dSVadim Pasternak .mode = 0644, 4366*8c03f64dSVadim Pasternak }, 4367*8c03f64dSVadim Pasternak { 4368*8c03f64dSVadim Pasternak .label = "lc8_pwr", 4369*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_LC_PWR_ON, 4370*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4371*8c03f64dSVadim Pasternak .mode = 0644, 4372*8c03f64dSVadim Pasternak }, 4373*8c03f64dSVadim Pasternak { 4374*8c03f64dSVadim Pasternak .label = "config1", 4375*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET, 4376*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4377*8c03f64dSVadim Pasternak .mode = 0444, 4378*8c03f64dSVadim Pasternak }, 4379*8c03f64dSVadim Pasternak { 4380*8c03f64dSVadim Pasternak .label = "config2", 4381*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET, 4382*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4383*8c03f64dSVadim Pasternak .mode = 0444, 4384*8c03f64dSVadim Pasternak }, 4385*8c03f64dSVadim Pasternak { 4386*8c03f64dSVadim Pasternak .label = "config3", 4387*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET, 4388*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4389*8c03f64dSVadim Pasternak .mode = 0444, 4390*8c03f64dSVadim Pasternak }, 4391*8c03f64dSVadim Pasternak { 4392*8c03f64dSVadim Pasternak .label = "ufm_version", 4393*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET, 4394*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4395*8c03f64dSVadim Pasternak .mode = 0444, 4396*8c03f64dSVadim Pasternak }, 4397*8c03f64dSVadim Pasternak }; 4398*8c03f64dSVadim Pasternak 4399*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_modular_regs_io_data = { 4400*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_modular_regs_io_data, 4401*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_modular_regs_io_data), 4402*8c03f64dSVadim Pasternak }; 4403*8c03f64dSVadim Pasternak 4404*8c03f64dSVadim Pasternak /* Platform register access for chassis blade systems family data */ 4405*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_chassis_blade_regs_io_data[] = { 4406*8c03f64dSVadim Pasternak { 4407*8c03f64dSVadim Pasternak .label = "cpld1_version", 4408*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET, 4409*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4410*8c03f64dSVadim Pasternak .mode = 0444, 4411*8c03f64dSVadim Pasternak }, 4412*8c03f64dSVadim Pasternak { 4413*8c03f64dSVadim Pasternak .label = "cpld1_pn", 4414*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET, 4415*8c03f64dSVadim Pasternak .bit = GENMASK(15, 0), 4416*8c03f64dSVadim Pasternak .mode = 0444, 4417*8c03f64dSVadim Pasternak .regnum = 2, 4418*8c03f64dSVadim Pasternak }, 4419*8c03f64dSVadim Pasternak { 4420*8c03f64dSVadim Pasternak .label = "cpld1_version_min", 4421*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET, 4422*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4423*8c03f64dSVadim Pasternak .mode = 0444, 4424*8c03f64dSVadim Pasternak }, 4425*8c03f64dSVadim Pasternak { 4426*8c03f64dSVadim Pasternak .label = "reset_aux_pwr_or_ref", 4427*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4428*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4429*8c03f64dSVadim Pasternak .mode = 0444, 4430*8c03f64dSVadim Pasternak }, 4431*8c03f64dSVadim Pasternak { 4432*8c03f64dSVadim Pasternak .label = "reset_from_comex", 4433*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4434*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4435*8c03f64dSVadim Pasternak .mode = 0444, 4436*8c03f64dSVadim Pasternak }, 4437*8c03f64dSVadim Pasternak { 4438*8c03f64dSVadim Pasternak .label = "reset_comex_pwr_fail", 4439*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4440*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4441*8c03f64dSVadim Pasternak .mode = 0444, 4442*8c03f64dSVadim Pasternak }, 4443*8c03f64dSVadim Pasternak { 4444*8c03f64dSVadim Pasternak .label = "reset_platform", 4445*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4446*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4447*8c03f64dSVadim Pasternak .mode = 0444, 4448*8c03f64dSVadim Pasternak }, 4449*8c03f64dSVadim Pasternak { 4450*8c03f64dSVadim Pasternak .label = "reset_soc", 4451*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4452*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4453*8c03f64dSVadim Pasternak .mode = 0444, 4454*8c03f64dSVadim Pasternak }, 4455*8c03f64dSVadim Pasternak { 4456*8c03f64dSVadim Pasternak .label = "reset_comex_wd", 4457*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET, 4458*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4459*8c03f64dSVadim Pasternak .mode = 0444, 4460*8c03f64dSVadim Pasternak }, 4461*8c03f64dSVadim Pasternak { 4462*8c03f64dSVadim Pasternak .label = "reset_voltmon_upgrade_fail", 4463*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4464*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4465*8c03f64dSVadim Pasternak .mode = 0444, 4466*8c03f64dSVadim Pasternak }, 4467*8c03f64dSVadim Pasternak { 4468*8c03f64dSVadim Pasternak .label = "reset_system", 4469*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4470*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(1), 4471*8c03f64dSVadim Pasternak .mode = 0444, 4472*8c03f64dSVadim Pasternak }, 4473*8c03f64dSVadim Pasternak { 4474*8c03f64dSVadim Pasternak .label = "reset_sw_pwr_off", 4475*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4476*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4477*8c03f64dSVadim Pasternak .mode = 0444, 4478*8c03f64dSVadim Pasternak }, 4479*8c03f64dSVadim Pasternak { 4480*8c03f64dSVadim Pasternak .label = "reset_comex_thermal", 4481*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4482*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4483*8c03f64dSVadim Pasternak .mode = 0444, 4484*8c03f64dSVadim Pasternak }, 4485*8c03f64dSVadim Pasternak { 4486*8c03f64dSVadim Pasternak .label = "reset_reload_bios", 4487*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4488*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4489*8c03f64dSVadim Pasternak .mode = 0444, 4490*8c03f64dSVadim Pasternak }, 4491*8c03f64dSVadim Pasternak { 4492*8c03f64dSVadim Pasternak .label = "reset_ac_pwr_fail", 4493*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4494*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4495*8c03f64dSVadim Pasternak .mode = 0444, 4496*8c03f64dSVadim Pasternak }, 4497*8c03f64dSVadim Pasternak { 4498*8c03f64dSVadim Pasternak .label = "reset_long_pwr_pb", 4499*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET, 4500*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4501*8c03f64dSVadim Pasternak .mode = 0444, 4502*8c03f64dSVadim Pasternak }, 4503*8c03f64dSVadim Pasternak { 4504*8c03f64dSVadim Pasternak .label = "pwr_cycle", 4505*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4506*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(2), 4507*8c03f64dSVadim Pasternak .mode = 0200, 4508*8c03f64dSVadim Pasternak }, 4509*8c03f64dSVadim Pasternak { 4510*8c03f64dSVadim Pasternak .label = "pwr_down", 4511*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, 4512*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4513*8c03f64dSVadim Pasternak .mode = 0200, 4514*8c03f64dSVadim Pasternak }, 4515*8c03f64dSVadim Pasternak { 4516*8c03f64dSVadim Pasternak .label = "global_wp_request", 4517*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 4518*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4519*8c03f64dSVadim Pasternak .mode = 0644, 4520*8c03f64dSVadim Pasternak }, 4521*8c03f64dSVadim Pasternak { 4522*8c03f64dSVadim Pasternak .label = "jtag_enable", 4523*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 4524*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4525*8c03f64dSVadim Pasternak .mode = 0644, 4526*8c03f64dSVadim Pasternak }, 4527*8c03f64dSVadim Pasternak { 4528*8c03f64dSVadim Pasternak .label = "comm_chnl_ready", 4529*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 4530*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4531*8c03f64dSVadim Pasternak .mode = 0200, 4532*8c03f64dSVadim Pasternak }, 4533*8c03f64dSVadim Pasternak { 4534*8c03f64dSVadim Pasternak .label = "bios_safe_mode", 4535*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4536*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4537*8c03f64dSVadim Pasternak .mode = 0444, 4538*8c03f64dSVadim Pasternak }, 4539*8c03f64dSVadim Pasternak { 4540*8c03f64dSVadim Pasternak .label = "bios_active_image", 4541*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4542*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(5), 4543*8c03f64dSVadim Pasternak .mode = 0444, 4544*8c03f64dSVadim Pasternak }, 4545*8c03f64dSVadim Pasternak { 4546*8c03f64dSVadim Pasternak .label = "bios_auth_fail", 4547*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4548*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4549*8c03f64dSVadim Pasternak .mode = 0444, 4550*8c03f64dSVadim Pasternak }, 4551*8c03f64dSVadim Pasternak { 4552*8c03f64dSVadim Pasternak .label = "bios_upgrade_fail", 4553*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET, 4554*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(7), 4555*8c03f64dSVadim Pasternak .mode = 0444, 4556*8c03f64dSVadim Pasternak }, 4557*8c03f64dSVadim Pasternak { 4558*8c03f64dSVadim Pasternak .label = "voltreg_update_status", 4559*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET, 4560*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_VOLTREG_UPD_MASK, 4561*8c03f64dSVadim Pasternak .bit = 5, 4562*8c03f64dSVadim Pasternak .mode = 0444, 4563*8c03f64dSVadim Pasternak }, 4564*8c03f64dSVadim Pasternak { 4565*8c03f64dSVadim Pasternak .label = "vpd_wp", 4566*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 4567*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(3), 4568*8c03f64dSVadim Pasternak .mode = 0644, 4569*8c03f64dSVadim Pasternak }, 4570*8c03f64dSVadim Pasternak { 4571*8c03f64dSVadim Pasternak .label = "pcie_asic_reset_dis", 4572*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GP0_OFFSET, 4573*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(4), 4574*8c03f64dSVadim Pasternak .mode = 0644, 4575*8c03f64dSVadim Pasternak }, 4576*8c03f64dSVadim Pasternak { 4577*8c03f64dSVadim Pasternak .label = "global_wp_response", 4578*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_GWP_OFFSET, 4579*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(0), 4580*8c03f64dSVadim Pasternak .mode = 0444, 4581*8c03f64dSVadim Pasternak }, 4582*8c03f64dSVadim Pasternak { 4583*8c03f64dSVadim Pasternak .label = "config1", 4584*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET, 4585*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4586*8c03f64dSVadim Pasternak .mode = 0444, 4587*8c03f64dSVadim Pasternak }, 4588*8c03f64dSVadim Pasternak { 4589*8c03f64dSVadim Pasternak .label = "config2", 4590*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET, 4591*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4592*8c03f64dSVadim Pasternak .mode = 0444, 4593*8c03f64dSVadim Pasternak }, 4594*8c03f64dSVadim Pasternak { 4595*8c03f64dSVadim Pasternak .label = "config3", 4596*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET, 4597*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4598*8c03f64dSVadim Pasternak .mode = 0444, 4599*8c03f64dSVadim Pasternak }, 4600*8c03f64dSVadim Pasternak { 4601*8c03f64dSVadim Pasternak .label = "ufm_version", 4602*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET, 4603*8c03f64dSVadim Pasternak .bit = GENMASK(7, 0), 4604*8c03f64dSVadim Pasternak .mode = 0444, 4605*8c03f64dSVadim Pasternak }, 4606*8c03f64dSVadim Pasternak }; 4607*8c03f64dSVadim Pasternak 4608*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_chassis_blade_regs_io_data = { 4609*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_chassis_blade_regs_io_data, 4610*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_chassis_blade_regs_io_data), 4611*8c03f64dSVadim Pasternak }; 4612*8c03f64dSVadim Pasternak 4613*8c03f64dSVadim Pasternak /* Platform FAN default */ 4614*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_default_fan_data[] = { 4615*8c03f64dSVadim Pasternak { 4616*8c03f64dSVadim Pasternak .label = "pwm1", 4617*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET, 4618*8c03f64dSVadim Pasternak }, 4619*8c03f64dSVadim Pasternak { 4620*8c03f64dSVadim Pasternak .label = "pwm2", 4621*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET, 4622*8c03f64dSVadim Pasternak }, 4623*8c03f64dSVadim Pasternak { 4624*8c03f64dSVadim Pasternak .label = "pwm3", 4625*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET, 4626*8c03f64dSVadim Pasternak }, 4627*8c03f64dSVadim Pasternak { 4628*8c03f64dSVadim Pasternak .label = "pwm4", 4629*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET, 4630*8c03f64dSVadim Pasternak }, 4631*8c03f64dSVadim Pasternak { 4632*8c03f64dSVadim Pasternak .label = "tacho1", 4633*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET, 4634*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4635*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4636*8c03f64dSVadim Pasternak .bit = BIT(0), 4637*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4638*8c03f64dSVadim Pasternak 4639*8c03f64dSVadim Pasternak }, 4640*8c03f64dSVadim Pasternak { 4641*8c03f64dSVadim Pasternak .label = "tacho2", 4642*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET, 4643*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4644*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4645*8c03f64dSVadim Pasternak .bit = BIT(1), 4646*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4647*8c03f64dSVadim Pasternak }, 4648*8c03f64dSVadim Pasternak { 4649*8c03f64dSVadim Pasternak .label = "tacho3", 4650*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET, 4651*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4652*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4653*8c03f64dSVadim Pasternak .bit = BIT(2), 4654*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4655*8c03f64dSVadim Pasternak }, 4656*8c03f64dSVadim Pasternak { 4657*8c03f64dSVadim Pasternak .label = "tacho4", 4658*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET, 4659*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4660*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4661*8c03f64dSVadim Pasternak .bit = BIT(3), 4662*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4663*8c03f64dSVadim Pasternak }, 4664*8c03f64dSVadim Pasternak { 4665*8c03f64dSVadim Pasternak .label = "tacho5", 4666*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET, 4667*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4668*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4669*8c03f64dSVadim Pasternak .bit = BIT(4), 4670*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4671*8c03f64dSVadim Pasternak }, 4672*8c03f64dSVadim Pasternak { 4673*8c03f64dSVadim Pasternak .label = "tacho6", 4674*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET, 4675*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4676*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4677*8c03f64dSVadim Pasternak .bit = BIT(5), 4678*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4679*8c03f64dSVadim Pasternak }, 4680*8c03f64dSVadim Pasternak { 4681*8c03f64dSVadim Pasternak .label = "tacho7", 4682*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET, 4683*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4684*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4685*8c03f64dSVadim Pasternak .bit = BIT(6), 4686*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4687*8c03f64dSVadim Pasternak }, 4688*8c03f64dSVadim Pasternak { 4689*8c03f64dSVadim Pasternak .label = "tacho8", 4690*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET, 4691*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4692*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET, 4693*8c03f64dSVadim Pasternak .bit = BIT(7), 4694*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4695*8c03f64dSVadim Pasternak }, 4696*8c03f64dSVadim Pasternak { 4697*8c03f64dSVadim Pasternak .label = "tacho9", 4698*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET, 4699*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4700*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4701*8c03f64dSVadim Pasternak .bit = BIT(0), 4702*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4703*8c03f64dSVadim Pasternak }, 4704*8c03f64dSVadim Pasternak { 4705*8c03f64dSVadim Pasternak .label = "tacho10", 4706*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET, 4707*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4708*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4709*8c03f64dSVadim Pasternak .bit = BIT(1), 4710*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4711*8c03f64dSVadim Pasternak }, 4712*8c03f64dSVadim Pasternak { 4713*8c03f64dSVadim Pasternak .label = "tacho11", 4714*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET, 4715*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4716*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4717*8c03f64dSVadim Pasternak .bit = BIT(2), 4718*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4719*8c03f64dSVadim Pasternak }, 4720*8c03f64dSVadim Pasternak { 4721*8c03f64dSVadim Pasternak .label = "tacho12", 4722*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET, 4723*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4724*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4725*8c03f64dSVadim Pasternak .bit = BIT(3), 4726*8c03f64dSVadim Pasternak .reg_prsnt = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, 4727*8c03f64dSVadim Pasternak }, 4728*8c03f64dSVadim Pasternak { 4729*8c03f64dSVadim Pasternak .label = "tacho13", 4730*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET, 4731*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4732*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4733*8c03f64dSVadim Pasternak .bit = BIT(4), 4734*8c03f64dSVadim Pasternak }, 4735*8c03f64dSVadim Pasternak { 4736*8c03f64dSVadim Pasternak .label = "tacho14", 4737*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET, 4738*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0), 4739*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET, 4740*8c03f64dSVadim Pasternak .bit = BIT(5), 4741*8c03f64dSVadim Pasternak }, 4742*8c03f64dSVadim Pasternak { 4743*8c03f64dSVadim Pasternak .label = "conf", 4744*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET, 4745*8c03f64dSVadim Pasternak }, 4746*8c03f64dSVadim Pasternak }; 4747*8c03f64dSVadim Pasternak 4748*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_default_fan_data = { 4749*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_default_fan_data, 4750*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_data), 4751*8c03f64dSVadim Pasternak .capability = MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET, 4752*8c03f64dSVadim Pasternak }; 4753*8c03f64dSVadim Pasternak 4754*8c03f64dSVadim Pasternak /* Watchdog type1: hardware implementation version1 4755*8c03f64dSVadim Pasternak * (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140 systems). 4756*8c03f64dSVadim Pasternak */ 4757*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type1[] = { 4758*8c03f64dSVadim Pasternak { 4759*8c03f64dSVadim Pasternak .label = "action", 4760*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 4761*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK, 4762*8c03f64dSVadim Pasternak .bit = 0, 4763*8c03f64dSVadim Pasternak }, 4764*8c03f64dSVadim Pasternak { 4765*8c03f64dSVadim Pasternak .label = "timeout", 4766*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET, 4767*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE1_TO_MASK, 4768*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT, 4769*8c03f64dSVadim Pasternak }, 4770*8c03f64dSVadim Pasternak { 4771*8c03f64dSVadim Pasternak .label = "ping", 4772*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET, 4773*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD1_CLEAR_MASK, 4774*8c03f64dSVadim Pasternak .bit = 0, 4775*8c03f64dSVadim Pasternak }, 4776*8c03f64dSVadim Pasternak { 4777*8c03f64dSVadim Pasternak .label = "reset", 4778*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4779*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4780*8c03f64dSVadim Pasternak .bit = 6, 4781*8c03f64dSVadim Pasternak }, 4782*8c03f64dSVadim Pasternak }; 4783*8c03f64dSVadim Pasternak 4784*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type1[] = { 4785*8c03f64dSVadim Pasternak { 4786*8c03f64dSVadim Pasternak .label = "action", 4787*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 4788*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK, 4789*8c03f64dSVadim Pasternak .bit = 4, 4790*8c03f64dSVadim Pasternak }, 4791*8c03f64dSVadim Pasternak { 4792*8c03f64dSVadim Pasternak .label = "timeout", 4793*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET, 4794*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE1_TO_MASK, 4795*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT, 4796*8c03f64dSVadim Pasternak }, 4797*8c03f64dSVadim Pasternak { 4798*8c03f64dSVadim Pasternak .label = "ping", 4799*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET, 4800*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD1_CLEAR_MASK, 4801*8c03f64dSVadim Pasternak .bit = 1, 4802*8c03f64dSVadim Pasternak }, 4803*8c03f64dSVadim Pasternak }; 4804*8c03f64dSVadim Pasternak 4805*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type1[] = { 4806*8c03f64dSVadim Pasternak { 4807*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_main_regs_type1, 4808*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type1), 4809*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE1, 4810*8c03f64dSVadim Pasternak .identity = "mlx-wdt-main", 4811*8c03f64dSVadim Pasternak }, 4812*8c03f64dSVadim Pasternak { 4813*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_aux_regs_type1, 4814*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type1), 4815*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE1, 4816*8c03f64dSVadim Pasternak .identity = "mlx-wdt-aux", 4817*8c03f64dSVadim Pasternak }, 4818*8c03f64dSVadim Pasternak }; 4819*8c03f64dSVadim Pasternak 4820*8c03f64dSVadim Pasternak /* Watchdog type2: hardware implementation version 2 4821*8c03f64dSVadim Pasternak * (all systems except (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140). 4822*8c03f64dSVadim Pasternak */ 4823*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type2[] = { 4824*8c03f64dSVadim Pasternak { 4825*8c03f64dSVadim Pasternak .label = "action", 4826*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 4827*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK, 4828*8c03f64dSVadim Pasternak .bit = 0, 4829*8c03f64dSVadim Pasternak }, 4830*8c03f64dSVadim Pasternak { 4831*8c03f64dSVadim Pasternak .label = "timeout", 4832*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET, 4833*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4834*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT, 4835*8c03f64dSVadim Pasternak }, 4836*8c03f64dSVadim Pasternak { 4837*8c03f64dSVadim Pasternak .label = "timeleft", 4838*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET, 4839*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4840*8c03f64dSVadim Pasternak }, 4841*8c03f64dSVadim Pasternak { 4842*8c03f64dSVadim Pasternak .label = "ping", 4843*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 4844*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK, 4845*8c03f64dSVadim Pasternak .bit = 0, 4846*8c03f64dSVadim Pasternak }, 4847*8c03f64dSVadim Pasternak { 4848*8c03f64dSVadim Pasternak .label = "reset", 4849*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4850*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4851*8c03f64dSVadim Pasternak .bit = 6, 4852*8c03f64dSVadim Pasternak }, 4853*8c03f64dSVadim Pasternak }; 4854*8c03f64dSVadim Pasternak 4855*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type2[] = { 4856*8c03f64dSVadim Pasternak { 4857*8c03f64dSVadim Pasternak .label = "action", 4858*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 4859*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK, 4860*8c03f64dSVadim Pasternak .bit = 4, 4861*8c03f64dSVadim Pasternak }, 4862*8c03f64dSVadim Pasternak { 4863*8c03f64dSVadim Pasternak .label = "timeout", 4864*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET, 4865*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4866*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD_DFLT_TIMEOUT, 4867*8c03f64dSVadim Pasternak }, 4868*8c03f64dSVadim Pasternak { 4869*8c03f64dSVadim Pasternak .label = "timeleft", 4870*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET, 4871*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4872*8c03f64dSVadim Pasternak }, 4873*8c03f64dSVadim Pasternak { 4874*8c03f64dSVadim Pasternak .label = "ping", 4875*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 4876*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK, 4877*8c03f64dSVadim Pasternak .bit = 4, 4878*8c03f64dSVadim Pasternak }, 4879*8c03f64dSVadim Pasternak }; 4880*8c03f64dSVadim Pasternak 4881*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type2[] = { 4882*8c03f64dSVadim Pasternak { 4883*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_main_regs_type2, 4884*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type2), 4885*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE2, 4886*8c03f64dSVadim Pasternak .identity = "mlx-wdt-main", 4887*8c03f64dSVadim Pasternak }, 4888*8c03f64dSVadim Pasternak { 4889*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_aux_regs_type2, 4890*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type2), 4891*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE2, 4892*8c03f64dSVadim Pasternak .identity = "mlx-wdt-aux", 4893*8c03f64dSVadim Pasternak }, 4894*8c03f64dSVadim Pasternak }; 4895*8c03f64dSVadim Pasternak 4896*8c03f64dSVadim Pasternak /* Watchdog type3: hardware implementation version 3 4897*8c03f64dSVadim Pasternak * Can be on all systems. It's differentiated by WD capability bit. 4898*8c03f64dSVadim Pasternak * Old systems (MSN2700, MSN2410, MSN2740, MSN2100 and MSN2140) 4899*8c03f64dSVadim Pasternak * still have only one main watchdog. 4900*8c03f64dSVadim Pasternak */ 4901*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_main_regs_type3[] = { 4902*8c03f64dSVadim Pasternak { 4903*8c03f64dSVadim Pasternak .label = "action", 4904*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 4905*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK, 4906*8c03f64dSVadim Pasternak .bit = 0, 4907*8c03f64dSVadim Pasternak }, 4908*8c03f64dSVadim Pasternak { 4909*8c03f64dSVadim Pasternak .label = "timeout", 4910*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET, 4911*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4912*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD3_DFLT_TIMEOUT, 4913*8c03f64dSVadim Pasternak }, 4914*8c03f64dSVadim Pasternak { 4915*8c03f64dSVadim Pasternak .label = "timeleft", 4916*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET, 4917*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4918*8c03f64dSVadim Pasternak }, 4919*8c03f64dSVadim Pasternak { 4920*8c03f64dSVadim Pasternak .label = "ping", 4921*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 4922*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_RESET_ACT_MASK, 4923*8c03f64dSVadim Pasternak .bit = 0, 4924*8c03f64dSVadim Pasternak }, 4925*8c03f64dSVadim Pasternak { 4926*8c03f64dSVadim Pasternak .label = "reset", 4927*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET, 4928*8c03f64dSVadim Pasternak .mask = GENMASK(7, 0) & ~BIT(6), 4929*8c03f64dSVadim Pasternak .bit = 6, 4930*8c03f64dSVadim Pasternak }, 4931*8c03f64dSVadim Pasternak }; 4932*8c03f64dSVadim Pasternak 4933*8c03f64dSVadim Pasternak static struct mlxreg_core_data mlxplat_mlxcpld_wd_aux_regs_type3[] = { 4934*8c03f64dSVadim Pasternak { 4935*8c03f64dSVadim Pasternak .label = "action", 4936*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 4937*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK, 4938*8c03f64dSVadim Pasternak .bit = 4, 4939*8c03f64dSVadim Pasternak }, 4940*8c03f64dSVadim Pasternak { 4941*8c03f64dSVadim Pasternak .label = "timeout", 4942*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET, 4943*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4944*8c03f64dSVadim Pasternak .health_cntr = MLXPLAT_CPLD_WD3_DFLT_TIMEOUT, 4945*8c03f64dSVadim Pasternak }, 4946*8c03f64dSVadim Pasternak { 4947*8c03f64dSVadim Pasternak .label = "timeleft", 4948*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET, 4949*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_TYPE2_TO_MASK, 4950*8c03f64dSVadim Pasternak }, 4951*8c03f64dSVadim Pasternak { 4952*8c03f64dSVadim Pasternak .label = "ping", 4953*8c03f64dSVadim Pasternak .reg = MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 4954*8c03f64dSVadim Pasternak .mask = MLXPLAT_CPLD_WD_FAN_ACT_MASK, 4955*8c03f64dSVadim Pasternak .bit = 4, 4956*8c03f64dSVadim Pasternak }, 4957*8c03f64dSVadim Pasternak }; 4958*8c03f64dSVadim Pasternak 4959*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data mlxplat_mlxcpld_wd_set_type3[] = { 4960*8c03f64dSVadim Pasternak { 4961*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_main_regs_type3, 4962*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_main_regs_type3), 4963*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE3, 4964*8c03f64dSVadim Pasternak .identity = "mlx-wdt-main", 4965*8c03f64dSVadim Pasternak }, 4966*8c03f64dSVadim Pasternak { 4967*8c03f64dSVadim Pasternak .data = mlxplat_mlxcpld_wd_aux_regs_type3, 4968*8c03f64dSVadim Pasternak .counter = ARRAY_SIZE(mlxplat_mlxcpld_wd_aux_regs_type3), 4969*8c03f64dSVadim Pasternak .version = MLX_WDT_TYPE3, 4970*8c03f64dSVadim Pasternak .identity = "mlx-wdt-aux", 4971*8c03f64dSVadim Pasternak }, 4972*8c03f64dSVadim Pasternak }; 4973*8c03f64dSVadim Pasternak 4974*8c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_writeable_reg(struct device *dev, unsigned int reg) 4975*8c03f64dSVadim Pasternak { 4976*8c03f64dSVadim Pasternak switch (reg) { 4977*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET: 4978*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET: 4979*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET: 4980*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET: 4981*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET: 4982*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET: 4983*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET: 4984*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET: 4985*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET: 4986*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET: 4987*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET: 4988*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET: 4989*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET: 4990*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET: 4991*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WP2_OFFSET: 4992*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE: 4993*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET: 4994*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: 4995*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: 4996*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET: 4997*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: 4998*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: 4999*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: 5000*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: 5001*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: 5002*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET: 5003*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET: 5004*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: 5005*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: 5006*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: 5007*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: 5008*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: 5009*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: 5010*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: 5011*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET: 5012*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET: 5013*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET: 5014*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET: 5015*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET: 5016*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET: 5017*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: 5018*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: 5019*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: 5020*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: 5021*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: 5022*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: 5023*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: 5024*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: 5025*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: 5026*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET: 5027*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET: 5028*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET: 5029*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET: 5030*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET: 5031*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET: 5032*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET: 5033*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET: 5034*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET: 5035*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET: 5036*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET: 5037*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET: 5038*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET: 5039*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: 5040*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: 5041*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: 5042*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: 5043*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET: 5044*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET: 5045*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET: 5046*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET: 5047*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET: 5048*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET: 5049*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET: 5050*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: 5051*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: 5052*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET: 5053*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: 5054*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET: 5055*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET: 5056*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET: 5057*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET: 5058*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET: 5059*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET: 5060*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET: 5061*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET: 5062*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET: 5063*8c03f64dSVadim Pasternak return true; 5064*8c03f64dSVadim Pasternak } 5065*8c03f64dSVadim Pasternak return false; 5066*8c03f64dSVadim Pasternak } 5067*8c03f64dSVadim Pasternak 5068*8c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_readable_reg(struct device *dev, unsigned int reg) 5069*8c03f64dSVadim Pasternak { 5070*8c03f64dSVadim Pasternak switch (reg) { 5071*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET: 5072*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET: 5073*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET: 5074*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET: 5075*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET: 5076*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET: 5077*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET: 5078*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET: 5079*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET: 5080*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET: 5081*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET: 5082*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET: 5083*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET: 5084*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET: 5085*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET: 5086*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET: 5087*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET: 5088*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET: 5089*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET: 5090*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET: 5091*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET: 5092*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET: 5093*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET: 5094*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET: 5095*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET: 5096*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET: 5097*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET: 5098*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION: 5099*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET: 5100*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET: 5101*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET: 5102*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET: 5103*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET: 5104*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WP1_OFFSET: 5105*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET: 5106*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WP2_OFFSET: 5107*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE: 5108*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET: 5109*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: 5110*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET: 5111*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: 5112*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET: 5113*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: 5114*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: 5115*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: 5116*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: 5117*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET: 5118*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: 5119*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET: 5120*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET: 5121*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET: 5122*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET: 5123*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET: 5124*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: 5125*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: 5126*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: 5127*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: 5128*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: 5129*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET: 5130*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: 5131*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: 5132*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET: 5133*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET: 5134*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET: 5135*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_OFFSET: 5136*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET: 5137*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET: 5138*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_OFFSET: 5139*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET: 5140*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET: 5141*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET: 5142*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: 5143*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: 5144*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET: 5145*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: 5146*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: 5147*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: 5148*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: 5149*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: 5150*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET: 5151*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: 5152*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: 5153*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: 5154*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: 5155*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: 5156*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET: 5157*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET: 5158*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET: 5159*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET: 5160*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET: 5161*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET: 5162*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET: 5163*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET: 5164*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET: 5165*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET: 5166*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET: 5167*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET: 5168*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET: 5169*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET: 5170*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET: 5171*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET: 5172*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET: 5173*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET: 5174*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: 5175*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: 5176*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: 5177*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET: 5178*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: 5179*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_OFFSET: 5180*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET: 5181*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD1_TMR_OFFSET: 5182*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET: 5183*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET: 5184*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET: 5185*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET: 5186*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: 5187*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: 5188*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET: 5189*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: 5190*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET: 5191*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET: 5192*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET: 5193*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET: 5194*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET: 5195*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET: 5196*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET: 5197*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET: 5198*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET: 5199*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET: 5200*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET: 5201*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET: 5202*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET: 5203*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET: 5204*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET: 5205*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET: 5206*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET: 5207*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET: 5208*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET: 5209*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET: 5210*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET: 5211*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET: 5212*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET: 5213*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET: 5214*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET: 5215*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET: 5216*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET: 5217*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET: 5218*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET: 5219*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET: 5220*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET: 5221*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET: 5222*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET: 5223*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET: 5224*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET: 5225*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET: 5226*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET: 5227*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET: 5228*8c03f64dSVadim Pasternak return true; 5229*8c03f64dSVadim Pasternak } 5230*8c03f64dSVadim Pasternak return false; 5231*8c03f64dSVadim Pasternak } 5232*8c03f64dSVadim Pasternak 5233*8c03f64dSVadim Pasternak static bool mlxplat_mlxcpld_volatile_reg(struct device *dev, unsigned int reg) 5234*8c03f64dSVadim Pasternak { 5235*8c03f64dSVadim Pasternak switch (reg) { 5236*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_VER_OFFSET: 5237*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_VER_OFFSET: 5238*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_VER_OFFSET: 5239*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_VER_OFFSET: 5240*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_VER_OFFSET: 5241*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_PN_OFFSET: 5242*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_PN1_OFFSET: 5243*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_PN_OFFSET: 5244*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_PN1_OFFSET: 5245*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_PN_OFFSET: 5246*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_PN1_OFFSET: 5247*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_PN_OFFSET: 5248*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_PN1_OFFSET: 5249*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_PN_OFFSET: 5250*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_PN1_OFFSET: 5251*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET: 5252*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_GP4_OFFSET: 5253*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RESET_CAUSE_OFFSET: 5254*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RST_CAUSE1_OFFSET: 5255*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_RST_CAUSE2_OFFSET: 5256*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED1_OFFSET: 5257*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED2_OFFSET: 5258*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED3_OFFSET: 5259*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED4_OFFSET: 5260*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED5_OFFSET: 5261*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED6_OFFSET: 5262*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LED7_OFFSET: 5263*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_DIRECTION: 5264*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP0_RO_OFFSET: 5265*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GPCOM0_OFFSET: 5266*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP0_OFFSET: 5267*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP_RST_OFFSET: 5268*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP1_OFFSET: 5269*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP2_OFFSET: 5270*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FIELD_UPGRADE: 5271*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_OFFSET: 5272*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_SAFE_BIOS_WP_OFFSET: 5273*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGR_OFFSET: 5274*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGR_MASK_OFFSET: 5275*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FU_CAP_OFFSET: 5276*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG1_OFFSET: 5277*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG2_OFFSET: 5278*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG3_OFFSET: 5279*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG4_OFFSET: 5280*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLO_OFFSET: 5281*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLO_MASK_OFFSET: 5282*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCO_OFFSET: 5283*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCO_MASK_OFFSET: 5284*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCX_OFFSET: 5285*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET: 5286*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_OFFSET: 5287*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_EVENT_OFFSET: 5288*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GWP_MASK_OFFSET: 5289*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_OFFSET: 5290*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_EVENT_OFFSET: 5291*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_BRD_MASK_OFFSET: 5292*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_HEALTH_OFFSET: 5293*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_EVENT_OFFSET: 5294*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC_MASK_OFFSET: 5295*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_HEALTH_OFFSET: 5296*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_EVENT_OFFSET: 5297*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_ASIC2_MASK_OFFSET: 5298*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_OFFSET: 5299*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_EVENT_OFFSET: 5300*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_MASK_OFFSET: 5301*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_OFFSET: 5302*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_EVENT_OFFSET: 5303*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWR_MASK_OFFSET: 5304*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_OFFSET: 5305*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_EVENT_OFFSET: 5306*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_MASK_OFFSET: 5307*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_OFFSET: 5308*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_EVENT_OFFSET: 5309*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROT_MASK_OFFSET: 5310*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_OFFSET: 5311*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_EVENT_OFFSET: 5312*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_EROTE_MASK_OFFSET: 5313*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_OFFSET: 5314*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_EVENT_OFFSET: 5315*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWRB_MASK_OFFSET: 5316*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLC_OFFSET: 5317*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET: 5318*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_OFFSET: 5319*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_EVENT_OFFSET: 5320*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_IN_MASK_OFFSET: 5321*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_OFFSET: 5322*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_EVENT_OFFSET: 5323*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_VR_MASK_OFFSET: 5324*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_OFFSET: 5325*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_EVENT_OFFSET: 5326*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PG_MASK_OFFSET: 5327*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_OFFSET: 5328*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_EVENT_OFFSET: 5329*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_RD_MASK_OFFSET: 5330*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_OFFSET: 5331*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_EVENT_OFFSET: 5332*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_OK_MASK_OFFSET: 5333*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_OFFSET: 5334*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_EVENT_OFFSET: 5335*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SN_MASK_OFFSET: 5336*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_OFFSET: 5337*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_EVENT_OFFSET: 5338*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_SD_MASK_OFFSET: 5339*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_LC_PWR_ON: 5340*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_GP4_RO_OFFSET: 5341*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_SPI_CHNL_SELECT: 5342*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TMR_OFFSET: 5343*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD2_TLEFT_OFFSET: 5344*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TMR_OFFSET: 5345*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_WD3_TLEFT_OFFSET: 5346*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_DBG_CTRL_OFFSET: 5347*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH1_OFFSET: 5348*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH2_OFFSET: 5349*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH3_OFFSET: 5350*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_I2C_CH4_OFFSET: 5351*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD1_MVER_OFFSET: 5352*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD2_MVER_OFFSET: 5353*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD3_MVER_OFFSET: 5354*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD4_MVER_OFFSET: 5355*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CPLD5_MVER_OFFSET: 5356*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM1_OFFSET: 5357*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET: 5358*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET: 5359*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET: 5360*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO1_OFFSET: 5361*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO2_OFFSET: 5362*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO3_OFFSET: 5363*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET: 5364*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET: 5365*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET: 5366*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET: 5367*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET: 5368*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET: 5369*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET: 5370*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET: 5371*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET: 5372*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO13_OFFSET: 5373*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO14_OFFSET: 5374*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET: 5375*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_CAP1_OFFSET: 5376*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_CAP2_OFFSET: 5377*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_FAN_DRW_CAP_OFFSET: 5378*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_TACHO_SPEED_OFFSET: 5379*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET: 5380*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_SLOT_QTY_OFFSET: 5381*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG1_OFFSET: 5382*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG2_OFFSET: 5383*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_CONFIG3_OFFSET: 5384*8c03f64dSVadim Pasternak case MLXPLAT_CPLD_LPC_REG_UFM_VERSION_OFFSET: 5385*8c03f64dSVadim Pasternak return true; 5386*8c03f64dSVadim Pasternak } 5387*8c03f64dSVadim Pasternak return false; 5388*8c03f64dSVadim Pasternak } 5389*8c03f64dSVadim Pasternak 5390*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_default[] = { 5391*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WP1_OFFSET, 0x00 }, 5392*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WP2_OFFSET, 0x00 }, 5393*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, 5394*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET, 0x00 }, 5395*8c03f64dSVadim Pasternak }; 5396*8c03f64dSVadim Pasternak 5397*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_ng[] = { 5398*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, 5399*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD_CLEAR_WP_OFFSET, 0x00 }, 5400*8c03f64dSVadim Pasternak }; 5401*8c03f64dSVadim Pasternak 5402*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_comex_default[] = { 5403*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_AGGRCX_MASK_OFFSET, 5404*8c03f64dSVadim Pasternak MLXPLAT_CPLD_LOW_AGGRCX_MASK }, 5405*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, 5406*8c03f64dSVadim Pasternak }; 5407*8c03f64dSVadim Pasternak 5408*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_ng400[] = { 5409*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, 5410*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 }, 5411*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 }, 5412*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 }, 5413*8c03f64dSVadim Pasternak }; 5414*8c03f64dSVadim Pasternak 5415*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_rack_switch[] = { 5416*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, MLXPLAT_REGMAP_NVSWITCH_PWM_DEFAULT }, 5417*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 }, 5418*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 }, 5419*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 }, 5420*8c03f64dSVadim Pasternak }; 5421*8c03f64dSVadim Pasternak 5422*8c03f64dSVadim Pasternak static const struct reg_default mlxplat_mlxcpld_regmap_eth_modular[] = { 5423*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_GP2_OFFSET, 0x61 }, 5424*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM_CONTROL_OFFSET, 0x00 }, 5425*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM2_OFFSET, 0x00 }, 5426*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM3_OFFSET, 0x00 }, 5427*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_PWM4_OFFSET, 0x00 }, 5428*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD1_ACT_OFFSET, 0x00 }, 5429*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD2_ACT_OFFSET, 0x00 }, 5430*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_WD3_ACT_OFFSET, 0x00 }, 5431*8c03f64dSVadim Pasternak { MLXPLAT_CPLD_LPC_REG_AGGRLC_MASK_OFFSET, 5432*8c03f64dSVadim Pasternak MLXPLAT_CPLD_AGGR_MASK_LC_LOW }, 5433*8c03f64dSVadim Pasternak }; 5434*8c03f64dSVadim Pasternak 5435*8c03f64dSVadim Pasternak struct mlxplat_mlxcpld_regmap_context { 5436*8c03f64dSVadim Pasternak void __iomem *base; 5437*8c03f64dSVadim Pasternak }; 5438*8c03f64dSVadim Pasternak 5439*8c03f64dSVadim Pasternak static struct mlxplat_mlxcpld_regmap_context mlxplat_mlxcpld_regmap_ctx; 5440*8c03f64dSVadim Pasternak 5441*8c03f64dSVadim Pasternak static int 5442*8c03f64dSVadim Pasternak mlxplat_mlxcpld_reg_read(void *context, unsigned int reg, unsigned int *val) 5443*8c03f64dSVadim Pasternak { 5444*8c03f64dSVadim Pasternak struct mlxplat_mlxcpld_regmap_context *ctx = context; 5445*8c03f64dSVadim Pasternak 5446*8c03f64dSVadim Pasternak *val = ioread8(ctx->base + reg); 5447*8c03f64dSVadim Pasternak return 0; 5448*8c03f64dSVadim Pasternak } 5449*8c03f64dSVadim Pasternak 5450*8c03f64dSVadim Pasternak static int 5451*8c03f64dSVadim Pasternak mlxplat_mlxcpld_reg_write(void *context, unsigned int reg, unsigned int val) 5452*8c03f64dSVadim Pasternak { 5453*8c03f64dSVadim Pasternak struct mlxplat_mlxcpld_regmap_context *ctx = context; 5454*8c03f64dSVadim Pasternak 5455*8c03f64dSVadim Pasternak iowrite8(val, ctx->base + reg); 5456*8c03f64dSVadim Pasternak return 0; 5457*8c03f64dSVadim Pasternak } 5458*8c03f64dSVadim Pasternak 5459*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config = { 5460*8c03f64dSVadim Pasternak .reg_bits = 8, 5461*8c03f64dSVadim Pasternak .val_bits = 8, 5462*8c03f64dSVadim Pasternak .max_register = 255, 5463*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5464*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5465*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5466*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5467*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_default, 5468*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_default), 5469*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5470*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5471*8c03f64dSVadim Pasternak }; 5472*8c03f64dSVadim Pasternak 5473*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng = { 5474*8c03f64dSVadim Pasternak .reg_bits = 8, 5475*8c03f64dSVadim Pasternak .val_bits = 8, 5476*8c03f64dSVadim Pasternak .max_register = 255, 5477*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5478*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5479*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5480*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5481*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_ng, 5482*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_ng), 5483*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5484*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5485*8c03f64dSVadim Pasternak }; 5486*8c03f64dSVadim Pasternak 5487*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_comex = { 5488*8c03f64dSVadim Pasternak .reg_bits = 8, 5489*8c03f64dSVadim Pasternak .val_bits = 8, 5490*8c03f64dSVadim Pasternak .max_register = 255, 5491*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5492*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5493*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5494*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5495*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_comex_default, 5496*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_comex_default), 5497*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5498*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5499*8c03f64dSVadim Pasternak }; 5500*8c03f64dSVadim Pasternak 5501*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_ng400 = { 5502*8c03f64dSVadim Pasternak .reg_bits = 8, 5503*8c03f64dSVadim Pasternak .val_bits = 8, 5504*8c03f64dSVadim Pasternak .max_register = 255, 5505*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5506*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5507*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5508*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5509*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_ng400, 5510*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_ng400), 5511*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5512*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5513*8c03f64dSVadim Pasternak }; 5514*8c03f64dSVadim Pasternak 5515*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_rack_switch = { 5516*8c03f64dSVadim Pasternak .reg_bits = 8, 5517*8c03f64dSVadim Pasternak .val_bits = 8, 5518*8c03f64dSVadim Pasternak .max_register = 255, 5519*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5520*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5521*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5522*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5523*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_rack_switch, 5524*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_rack_switch), 5525*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5526*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5527*8c03f64dSVadim Pasternak }; 5528*8c03f64dSVadim Pasternak 5529*8c03f64dSVadim Pasternak static const struct regmap_config mlxplat_mlxcpld_regmap_config_eth_modular = { 5530*8c03f64dSVadim Pasternak .reg_bits = 8, 5531*8c03f64dSVadim Pasternak .val_bits = 8, 5532*8c03f64dSVadim Pasternak .max_register = 255, 5533*8c03f64dSVadim Pasternak .cache_type = REGCACHE_FLAT, 5534*8c03f64dSVadim Pasternak .writeable_reg = mlxplat_mlxcpld_writeable_reg, 5535*8c03f64dSVadim Pasternak .readable_reg = mlxplat_mlxcpld_readable_reg, 5536*8c03f64dSVadim Pasternak .volatile_reg = mlxplat_mlxcpld_volatile_reg, 5537*8c03f64dSVadim Pasternak .reg_defaults = mlxplat_mlxcpld_regmap_eth_modular, 5538*8c03f64dSVadim Pasternak .num_reg_defaults = ARRAY_SIZE(mlxplat_mlxcpld_regmap_eth_modular), 5539*8c03f64dSVadim Pasternak .reg_read = mlxplat_mlxcpld_reg_read, 5540*8c03f64dSVadim Pasternak .reg_write = mlxplat_mlxcpld_reg_write, 5541*8c03f64dSVadim Pasternak }; 5542*8c03f64dSVadim Pasternak 5543*8c03f64dSVadim Pasternak static struct resource mlxplat_mlxcpld_resources[] = { 5544*8c03f64dSVadim Pasternak [0] = DEFINE_RES_IRQ_NAMED(MLXPLAT_CPLD_LPC_SYSIRQ, "mlxreg-hotplug"), 5545*8c03f64dSVadim Pasternak }; 5546*8c03f64dSVadim Pasternak 5547*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data *mlxplat_i2c; 5548*8c03f64dSVadim Pasternak static struct mlxreg_core_hotplug_platform_data *mlxplat_hotplug; 5549*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_led; 5550*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_regs_io; 5551*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data *mlxplat_fan; 5552*8c03f64dSVadim Pasternak static struct mlxreg_core_platform_data 5553*8c03f64dSVadim Pasternak *mlxplat_wd_data[MLXPLAT_CPLD_WD_MAX_DEVS]; 5554*8c03f64dSVadim Pasternak static const struct regmap_config *mlxplat_regmap_config; 5555*8c03f64dSVadim Pasternak static struct pci_dev *lpc_bridge; 5556*8c03f64dSVadim Pasternak static struct pci_dev *i2c_bridge; 5557*8c03f64dSVadim Pasternak static struct pci_dev *jtag_bridge; 5558*8c03f64dSVadim Pasternak 5559*8c03f64dSVadim Pasternak /* Platform default reset function */ 5560*8c03f64dSVadim Pasternak static int mlxplat_reboot_notifier(struct notifier_block *nb, unsigned long action, void *unused) 5561*8c03f64dSVadim Pasternak { 5562*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); 5563*8c03f64dSVadim Pasternak u32 regval; 5564*8c03f64dSVadim Pasternak int ret; 5565*8c03f64dSVadim Pasternak 5566*8c03f64dSVadim Pasternak ret = regmap_read(priv->regmap, MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET, ®val); 5567*8c03f64dSVadim Pasternak 5568*8c03f64dSVadim Pasternak if (action == SYS_RESTART && !ret && regval & MLXPLAT_CPLD_SYS_RESET_MASK) 5569*8c03f64dSVadim Pasternak regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_RESET_GP1_OFFSET, 5570*8c03f64dSVadim Pasternak MLXPLAT_CPLD_RESET_MASK); 5571*8c03f64dSVadim Pasternak 5572*8c03f64dSVadim Pasternak return NOTIFY_DONE; 5573*8c03f64dSVadim Pasternak } 5574*8c03f64dSVadim Pasternak 5575*8c03f64dSVadim Pasternak static struct notifier_block mlxplat_reboot_default_nb = { 5576*8c03f64dSVadim Pasternak .notifier_call = mlxplat_reboot_notifier, 5577*8c03f64dSVadim Pasternak }; 5578*8c03f64dSVadim Pasternak 5579*8c03f64dSVadim Pasternak /* Platform default poweroff function */ 5580*8c03f64dSVadim Pasternak static void mlxplat_poweroff(void) 5581*8c03f64dSVadim Pasternak { 5582*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); 5583*8c03f64dSVadim Pasternak 5584*8c03f64dSVadim Pasternak if (mlxplat_reboot_nb) 5585*8c03f64dSVadim Pasternak unregister_reboot_notifier(mlxplat_reboot_nb); 5586*8c03f64dSVadim Pasternak regmap_write(priv->regmap, MLXPLAT_CPLD_LPC_REG_GP1_OFFSET, MLXPLAT_CPLD_HALT_MASK); 5587*8c03f64dSVadim Pasternak kernel_halt(); 5588*8c03f64dSVadim Pasternak } 5589*8c03f64dSVadim Pasternak 5590*8c03f64dSVadim Pasternak static int __init mlxplat_register_platform_device(void) 5591*8c03f64dSVadim Pasternak { 5592*8c03f64dSVadim Pasternak mlxplat_dev = platform_device_register_simple(MLX_PLAT_DEVICE_NAME, -1, 5593*8c03f64dSVadim Pasternak mlxplat_lpc_resources, 5594*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_lpc_resources)); 5595*8c03f64dSVadim Pasternak if (IS_ERR(mlxplat_dev)) 5596*8c03f64dSVadim Pasternak return PTR_ERR(mlxplat_dev); 5597*8c03f64dSVadim Pasternak else 5598*8c03f64dSVadim Pasternak return 1; 5599*8c03f64dSVadim Pasternak } 5600*8c03f64dSVadim Pasternak 5601*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_matched(const struct dmi_system_id *dmi) 5602*8c03f64dSVadim Pasternak { 5603*8c03f64dSVadim Pasternak int i; 5604*8c03f64dSVadim Pasternak 5605*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5606*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5607*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5608*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5609*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_default_channels[i]; 5610*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5611*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_default_channels[i]); 5612*8c03f64dSVadim Pasternak } 5613*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_default_data; 5614*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5615*8c03f64dSVadim Pasternak mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5616*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_led_data; 5617*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_regs_io_data; 5618*8c03f64dSVadim Pasternak mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; 5619*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5620*8c03f64dSVadim Pasternak 5621*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5622*8c03f64dSVadim Pasternak } 5623*8c03f64dSVadim Pasternak 5624*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_wc_matched(const struct dmi_system_id *dmi) 5625*8c03f64dSVadim Pasternak { 5626*8c03f64dSVadim Pasternak int i; 5627*8c03f64dSVadim Pasternak 5628*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5629*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5630*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5631*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5632*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_default_channels[i]; 5633*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5634*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_default_channels[i]); 5635*8c03f64dSVadim Pasternak } 5636*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_default_wc_data; 5637*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5638*8c03f64dSVadim Pasternak mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5639*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_led_wc_data; 5640*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_regs_io_data; 5641*8c03f64dSVadim Pasternak mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; 5642*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5643*8c03f64dSVadim Pasternak 5644*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5645*8c03f64dSVadim Pasternak } 5646*8c03f64dSVadim Pasternak 5647*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_default_eth_wc_blade_matched(const struct dmi_system_id *dmi) 5648*8c03f64dSVadim Pasternak { 5649*8c03f64dSVadim Pasternak int i; 5650*8c03f64dSVadim Pasternak 5651*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5652*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5653*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5654*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5655*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5656*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5657*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5658*8c03f64dSVadim Pasternak } 5659*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_default_wc_data; 5660*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5661*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5662*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_led_eth_wc_blade_data; 5663*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5664*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5665*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5666*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5667*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng; 5668*8c03f64dSVadim Pasternak 5669*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5670*8c03f64dSVadim Pasternak } 5671*8c03f64dSVadim Pasternak 5672*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi) 5673*8c03f64dSVadim Pasternak { 5674*8c03f64dSVadim Pasternak int i; 5675*8c03f64dSVadim Pasternak 5676*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5677*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5678*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5679*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5680*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5681*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5682*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5683*8c03f64dSVadim Pasternak } 5684*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_msn21xx_data; 5685*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5686*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5687*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_msn21xx_led_data; 5688*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; 5689*8c03f64dSVadim Pasternak mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; 5690*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5691*8c03f64dSVadim Pasternak 5692*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5693*8c03f64dSVadim Pasternak } 5694*8c03f64dSVadim Pasternak 5695*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn274x_matched(const struct dmi_system_id *dmi) 5696*8c03f64dSVadim Pasternak { 5697*8c03f64dSVadim Pasternak int i; 5698*8c03f64dSVadim Pasternak 5699*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5700*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5701*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5702*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5703*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5704*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5705*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5706*8c03f64dSVadim Pasternak } 5707*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_msn274x_data; 5708*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5709*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5710*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_led_data; 5711*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; 5712*8c03f64dSVadim Pasternak mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; 5713*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5714*8c03f64dSVadim Pasternak 5715*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5716*8c03f64dSVadim Pasternak } 5717*8c03f64dSVadim Pasternak 5718*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_msn201x_matched(const struct dmi_system_id *dmi) 5719*8c03f64dSVadim Pasternak { 5720*8c03f64dSVadim Pasternak int i; 5721*8c03f64dSVadim Pasternak 5722*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5723*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5724*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5725*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5726*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5727*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5728*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5729*8c03f64dSVadim Pasternak } 5730*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_msn201x_data; 5731*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5732*8c03f64dSVadim Pasternak mlxplat_default_channels[i - 1][MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5733*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_msn21xx_led_data; 5734*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_msn21xx_regs_io_data; 5735*8c03f64dSVadim Pasternak mlxplat_wd_data[0] = &mlxplat_mlxcpld_wd_set_type1[0]; 5736*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5737*8c03f64dSVadim Pasternak 5738*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5739*8c03f64dSVadim Pasternak } 5740*8c03f64dSVadim Pasternak 5741*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_qmb7xx_matched(const struct dmi_system_id *dmi) 5742*8c03f64dSVadim Pasternak { 5743*8c03f64dSVadim Pasternak int i; 5744*8c03f64dSVadim Pasternak 5745*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5746*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5747*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5748*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5749*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5750*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5751*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5752*8c03f64dSVadim Pasternak } 5753*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_default_ng_data; 5754*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5755*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5756*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_ng_led_data; 5757*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5758*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5759*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5760*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5761*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5762*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng; 5763*8c03f64dSVadim Pasternak 5764*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5765*8c03f64dSVadim Pasternak } 5766*8c03f64dSVadim Pasternak 5767*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_comex_matched(const struct dmi_system_id *dmi) 5768*8c03f64dSVadim Pasternak { 5769*8c03f64dSVadim Pasternak int i; 5770*8c03f64dSVadim Pasternak 5771*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM; 5772*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_extended_mux_data); 5773*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_extended_mux_data; 5774*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5775*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5776*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5777*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5778*8c03f64dSVadim Pasternak } 5779*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_comex_data; 5780*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = MLXPLAT_CPLD_MAX_PHYS_EXT_ADAPTER_NUM; 5781*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_comex_100G_led_data; 5782*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5783*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5784*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5785*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5786*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_default_data; 5787*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_comex; 5788*8c03f64dSVadim Pasternak 5789*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5790*8c03f64dSVadim Pasternak } 5791*8c03f64dSVadim Pasternak 5792*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_ng400_matched(const struct dmi_system_id *dmi) 5793*8c03f64dSVadim Pasternak { 5794*8c03f64dSVadim Pasternak int i; 5795*8c03f64dSVadim Pasternak 5796*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5797*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5798*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5799*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5800*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5801*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5802*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5803*8c03f64dSVadim Pasternak } 5804*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_ext_data; 5805*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5806*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5807*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_ng_led_data; 5808*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5809*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5810*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5811*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5812*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5813*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400; 5814*8c03f64dSVadim Pasternak 5815*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5816*8c03f64dSVadim Pasternak } 5817*8c03f64dSVadim Pasternak 5818*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_modular_matched(const struct dmi_system_id *dmi) 5819*8c03f64dSVadim Pasternak { 5820*8c03f64dSVadim Pasternak int i; 5821*8c03f64dSVadim Pasternak 5822*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5823*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_modular_mux_data); 5824*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_modular_mux_data; 5825*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_modular_data; 5826*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = MLXPLAT_CPLD_CH4_ETH_MODULAR; 5827*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_modular_led_data; 5828*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_modular_regs_io_data; 5829*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5830*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5831*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5832*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5833*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_eth_modular; 5834*8c03f64dSVadim Pasternak 5835*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5836*8c03f64dSVadim Pasternak } 5837*8c03f64dSVadim Pasternak 5838*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_chassis_blade_matched(const struct dmi_system_id *dmi) 5839*8c03f64dSVadim Pasternak { 5840*8c03f64dSVadim Pasternak int i; 5841*8c03f64dSVadim Pasternak 5842*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5843*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_default_mux_data); 5844*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_default_mux_data; 5845*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_chassis_blade_data; 5846*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5847*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5848*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 5849*8c03f64dSVadim Pasternak mlxplat_mux_data[i].values = mlxplat_msn21xx_channels; 5850*8c03f64dSVadim Pasternak mlxplat_mux_data[i].n_values = 5851*8c03f64dSVadim Pasternak ARRAY_SIZE(mlxplat_msn21xx_channels); 5852*8c03f64dSVadim Pasternak } 5853*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_chassis_blade_regs_io_data; 5854*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5855*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400; 5856*8c03f64dSVadim Pasternak 5857*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5858*8c03f64dSVadim Pasternak } 5859*8c03f64dSVadim Pasternak 5860*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_rack_switch_matched(const struct dmi_system_id *dmi) 5861*8c03f64dSVadim Pasternak { 5862*8c03f64dSVadim Pasternak int i; 5863*8c03f64dSVadim Pasternak 5864*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5865*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data); 5866*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_rack_switch_mux_data; 5867*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_rack_switch_data; 5868*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5869*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5870*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_ng_led_data; 5871*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5872*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5873*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5874*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5875*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5876*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch; 5877*8c03f64dSVadim Pasternak 5878*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5879*8c03f64dSVadim Pasternak } 5880*8c03f64dSVadim Pasternak 5881*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_ng800_matched(const struct dmi_system_id *dmi) 5882*8c03f64dSVadim Pasternak { 5883*8c03f64dSVadim Pasternak int i; 5884*8c03f64dSVadim Pasternak 5885*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5886*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_ng800_mux_data); 5887*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_ng800_mux_data; 5888*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_ng800_data; 5889*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5890*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5891*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_default_ng_led_data; 5892*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5893*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5894*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5895*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5896*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5897*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_ng400; 5898*8c03f64dSVadim Pasternak 5899*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5900*8c03f64dSVadim Pasternak } 5901*8c03f64dSVadim Pasternak 5902*8c03f64dSVadim Pasternak static int __init mlxplat_dmi_l1_switch_matched(const struct dmi_system_id *dmi) 5903*8c03f64dSVadim Pasternak { 5904*8c03f64dSVadim Pasternak int i; 5905*8c03f64dSVadim Pasternak 5906*8c03f64dSVadim Pasternak mlxplat_max_adap_num = MLXPLAT_CPLD_MAX_PHYS_ADAPTER_NUM; 5907*8c03f64dSVadim Pasternak mlxplat_mux_num = ARRAY_SIZE(mlxplat_rack_switch_mux_data); 5908*8c03f64dSVadim Pasternak mlxplat_mux_data = mlxplat_rack_switch_mux_data; 5909*8c03f64dSVadim Pasternak mlxplat_hotplug = &mlxplat_mlxcpld_l1_switch_data; 5910*8c03f64dSVadim Pasternak mlxplat_hotplug->deferred_nr = 5911*8c03f64dSVadim Pasternak mlxplat_msn21xx_channels[MLXPLAT_CPLD_GRP_CHNL_NUM - 1]; 5912*8c03f64dSVadim Pasternak mlxplat_led = &mlxplat_l1_switch_led_data; 5913*8c03f64dSVadim Pasternak mlxplat_regs_io = &mlxplat_default_ng_regs_io_data; 5914*8c03f64dSVadim Pasternak mlxplat_fan = &mlxplat_default_fan_data; 5915*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type2); i++) 5916*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = &mlxplat_mlxcpld_wd_set_type2[i]; 5917*8c03f64dSVadim Pasternak mlxplat_i2c = &mlxplat_mlxcpld_i2c_ng_data; 5918*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config_rack_switch; 5919*8c03f64dSVadim Pasternak pm_power_off = mlxplat_poweroff; 5920*8c03f64dSVadim Pasternak mlxplat_reboot_nb = &mlxplat_reboot_default_nb; 5921*8c03f64dSVadim Pasternak 5922*8c03f64dSVadim Pasternak return mlxplat_register_platform_device(); 5923*8c03f64dSVadim Pasternak } 5924*8c03f64dSVadim Pasternak 5925*8c03f64dSVadim Pasternak static const struct dmi_system_id mlxplat_dmi_table[] __initconst = { 5926*8c03f64dSVadim Pasternak { 5927*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_wc_matched, 5928*8c03f64dSVadim Pasternak .matches = { 5929*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"), 5930*8c03f64dSVadim Pasternak DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI138"), 5931*8c03f64dSVadim Pasternak }, 5932*8c03f64dSVadim Pasternak }, 5933*8c03f64dSVadim Pasternak { 5934*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_matched, 5935*8c03f64dSVadim Pasternak .matches = { 5936*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0001"), 5937*8c03f64dSVadim Pasternak }, 5938*8c03f64dSVadim Pasternak }, 5939*8c03f64dSVadim Pasternak { 5940*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn21xx_matched, 5941*8c03f64dSVadim Pasternak .matches = { 5942*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0002"), 5943*8c03f64dSVadim Pasternak }, 5944*8c03f64dSVadim Pasternak }, 5945*8c03f64dSVadim Pasternak { 5946*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn274x_matched, 5947*8c03f64dSVadim Pasternak .matches = { 5948*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0003"), 5949*8c03f64dSVadim Pasternak }, 5950*8c03f64dSVadim Pasternak }, 5951*8c03f64dSVadim Pasternak { 5952*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn201x_matched, 5953*8c03f64dSVadim Pasternak .matches = { 5954*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0004"), 5955*8c03f64dSVadim Pasternak }, 5956*8c03f64dSVadim Pasternak }, 5957*8c03f64dSVadim Pasternak { 5958*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_eth_wc_blade_matched, 5959*8c03f64dSVadim Pasternak .matches = { 5960*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"), 5961*8c03f64dSVadim Pasternak DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI139"), 5962*8c03f64dSVadim Pasternak }, 5963*8c03f64dSVadim Pasternak }, 5964*8c03f64dSVadim Pasternak { 5965*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 5966*8c03f64dSVadim Pasternak .matches = { 5967*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0005"), 5968*8c03f64dSVadim Pasternak }, 5969*8c03f64dSVadim Pasternak }, 5970*8c03f64dSVadim Pasternak { 5971*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 5972*8c03f64dSVadim Pasternak .matches = { 5973*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0007"), 5974*8c03f64dSVadim Pasternak }, 5975*8c03f64dSVadim Pasternak }, 5976*8c03f64dSVadim Pasternak { 5977*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_comex_matched, 5978*8c03f64dSVadim Pasternak .matches = { 5979*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0009"), 5980*8c03f64dSVadim Pasternak }, 5981*8c03f64dSVadim Pasternak }, 5982*8c03f64dSVadim Pasternak { 5983*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_rack_switch_matched, 5984*8c03f64dSVadim Pasternak .matches = { 5985*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0010"), 5986*8c03f64dSVadim Pasternak DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "HI142"), 5987*8c03f64dSVadim Pasternak }, 5988*8c03f64dSVadim Pasternak }, 5989*8c03f64dSVadim Pasternak { 5990*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_ng400_matched, 5991*8c03f64dSVadim Pasternak .matches = { 5992*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0010"), 5993*8c03f64dSVadim Pasternak }, 5994*8c03f64dSVadim Pasternak }, 5995*8c03f64dSVadim Pasternak { 5996*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_modular_matched, 5997*8c03f64dSVadim Pasternak .matches = { 5998*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0011"), 5999*8c03f64dSVadim Pasternak }, 6000*8c03f64dSVadim Pasternak }, 6001*8c03f64dSVadim Pasternak { 6002*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_ng800_matched, 6003*8c03f64dSVadim Pasternak .matches = { 6004*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0013"), 6005*8c03f64dSVadim Pasternak }, 6006*8c03f64dSVadim Pasternak }, 6007*8c03f64dSVadim Pasternak { 6008*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_chassis_blade_matched, 6009*8c03f64dSVadim Pasternak .matches = { 6010*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0015"), 6011*8c03f64dSVadim Pasternak }, 6012*8c03f64dSVadim Pasternak }, 6013*8c03f64dSVadim Pasternak { 6014*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_l1_switch_matched, 6015*8c03f64dSVadim Pasternak .matches = { 6016*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_NAME, "VMOD0017"), 6017*8c03f64dSVadim Pasternak }, 6018*8c03f64dSVadim Pasternak }, 6019*8c03f64dSVadim Pasternak { 6020*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn274x_matched, 6021*8c03f64dSVadim Pasternak .matches = { 6022*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6023*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN274"), 6024*8c03f64dSVadim Pasternak }, 6025*8c03f64dSVadim Pasternak }, 6026*8c03f64dSVadim Pasternak { 6027*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_matched, 6028*8c03f64dSVadim Pasternak .matches = { 6029*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6030*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN24"), 6031*8c03f64dSVadim Pasternak }, 6032*8c03f64dSVadim Pasternak }, 6033*8c03f64dSVadim Pasternak { 6034*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_matched, 6035*8c03f64dSVadim Pasternak .matches = { 6036*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6037*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN27"), 6038*8c03f64dSVadim Pasternak }, 6039*8c03f64dSVadim Pasternak }, 6040*8c03f64dSVadim Pasternak { 6041*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_matched, 6042*8c03f64dSVadim Pasternak .matches = { 6043*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6044*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSB"), 6045*8c03f64dSVadim Pasternak }, 6046*8c03f64dSVadim Pasternak }, 6047*8c03f64dSVadim Pasternak { 6048*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_default_matched, 6049*8c03f64dSVadim Pasternak .matches = { 6050*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6051*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSX"), 6052*8c03f64dSVadim Pasternak }, 6053*8c03f64dSVadim Pasternak }, 6054*8c03f64dSVadim Pasternak { 6055*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn21xx_matched, 6056*8c03f64dSVadim Pasternak .matches = { 6057*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6058*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN21"), 6059*8c03f64dSVadim Pasternak }, 6060*8c03f64dSVadim Pasternak }, 6061*8c03f64dSVadim Pasternak { 6062*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_msn201x_matched, 6063*8c03f64dSVadim Pasternak .matches = { 6064*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6065*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN201"), 6066*8c03f64dSVadim Pasternak }, 6067*8c03f64dSVadim Pasternak }, 6068*8c03f64dSVadim Pasternak { 6069*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 6070*8c03f64dSVadim Pasternak .matches = { 6071*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6072*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MQM87"), 6073*8c03f64dSVadim Pasternak }, 6074*8c03f64dSVadim Pasternak }, 6075*8c03f64dSVadim Pasternak { 6076*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 6077*8c03f64dSVadim Pasternak .matches = { 6078*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6079*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN37"), 6080*8c03f64dSVadim Pasternak }, 6081*8c03f64dSVadim Pasternak }, 6082*8c03f64dSVadim Pasternak { 6083*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 6084*8c03f64dSVadim Pasternak .matches = { 6085*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6086*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN34"), 6087*8c03f64dSVadim Pasternak }, 6088*8c03f64dSVadim Pasternak }, 6089*8c03f64dSVadim Pasternak { 6090*8c03f64dSVadim Pasternak .callback = mlxplat_dmi_qmb7xx_matched, 6091*8c03f64dSVadim Pasternak .matches = { 6092*8c03f64dSVadim Pasternak DMI_MATCH(DMI_BOARD_VENDOR, "Mellanox Technologies"), 6093*8c03f64dSVadim Pasternak DMI_MATCH(DMI_PRODUCT_NAME, "MSN38"), 6094*8c03f64dSVadim Pasternak }, 6095*8c03f64dSVadim Pasternak }, 6096*8c03f64dSVadim Pasternak { } 6097*8c03f64dSVadim Pasternak }; 6098*8c03f64dSVadim Pasternak 6099*8c03f64dSVadim Pasternak MODULE_DEVICE_TABLE(dmi, mlxplat_dmi_table); 6100*8c03f64dSVadim Pasternak 6101*8c03f64dSVadim Pasternak static int mlxplat_mlxcpld_verify_bus_topology(int *nr) 6102*8c03f64dSVadim Pasternak { 6103*8c03f64dSVadim Pasternak struct i2c_adapter *search_adap; 6104*8c03f64dSVadim Pasternak int i, shift = 0; 6105*8c03f64dSVadim Pasternak 6106*8c03f64dSVadim Pasternak /* Scan adapters from expected id to verify it is free. */ 6107*8c03f64dSVadim Pasternak *nr = MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR; 6108*8c03f64dSVadim Pasternak for (i = MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR; i < 6109*8c03f64dSVadim Pasternak mlxplat_max_adap_num; i++) { 6110*8c03f64dSVadim Pasternak search_adap = i2c_get_adapter(i); 6111*8c03f64dSVadim Pasternak if (search_adap) { 6112*8c03f64dSVadim Pasternak i2c_put_adapter(search_adap); 6113*8c03f64dSVadim Pasternak continue; 6114*8c03f64dSVadim Pasternak } 6115*8c03f64dSVadim Pasternak 6116*8c03f64dSVadim Pasternak /* Return if expected parent adapter is free. */ 6117*8c03f64dSVadim Pasternak if (i == MLXPLAT_CPLD_PHYS_ADAPTER_DEF_NR) 6118*8c03f64dSVadim Pasternak return 0; 6119*8c03f64dSVadim Pasternak break; 6120*8c03f64dSVadim Pasternak } 6121*8c03f64dSVadim Pasternak 6122*8c03f64dSVadim Pasternak /* Return with error if free id for adapter is not found. */ 6123*8c03f64dSVadim Pasternak if (i == mlxplat_max_adap_num) 6124*8c03f64dSVadim Pasternak return -ENODEV; 6125*8c03f64dSVadim Pasternak 6126*8c03f64dSVadim Pasternak /* Shift adapter ids, since expected parent adapter is not free. */ 6127*8c03f64dSVadim Pasternak *nr = i; 6128*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 6129*8c03f64dSVadim Pasternak shift = *nr - mlxplat_mux_data[i].parent; 6130*8c03f64dSVadim Pasternak mlxplat_mux_data[i].parent = *nr; 6131*8c03f64dSVadim Pasternak mlxplat_mux_data[i].base_nr += shift; 6132*8c03f64dSVadim Pasternak } 6133*8c03f64dSVadim Pasternak 6134*8c03f64dSVadim Pasternak if (shift > 0) 6135*8c03f64dSVadim Pasternak mlxplat_hotplug->shift_nr = shift; 6136*8c03f64dSVadim Pasternak 6137*8c03f64dSVadim Pasternak return 0; 6138*8c03f64dSVadim Pasternak } 6139*8c03f64dSVadim Pasternak 6140*8c03f64dSVadim Pasternak static int mlxplat_mlxcpld_check_wd_capability(void *regmap) 6141*8c03f64dSVadim Pasternak { 6142*8c03f64dSVadim Pasternak u32 regval; 6143*8c03f64dSVadim Pasternak int i, rc; 6144*8c03f64dSVadim Pasternak 6145*8c03f64dSVadim Pasternak rc = regmap_read(regmap, MLXPLAT_CPLD_LPC_REG_PSU_I2C_CAP_OFFSET, 6146*8c03f64dSVadim Pasternak ®val); 6147*8c03f64dSVadim Pasternak if (rc) 6148*8c03f64dSVadim Pasternak return rc; 6149*8c03f64dSVadim Pasternak 6150*8c03f64dSVadim Pasternak if (!(regval & ~MLXPLAT_CPLD_WD_CPBLTY_MASK)) { 6151*8c03f64dSVadim Pasternak for (i = 0; i < ARRAY_SIZE(mlxplat_mlxcpld_wd_set_type3); i++) { 6152*8c03f64dSVadim Pasternak if (mlxplat_wd_data[i]) 6153*8c03f64dSVadim Pasternak mlxplat_wd_data[i] = 6154*8c03f64dSVadim Pasternak &mlxplat_mlxcpld_wd_set_type3[i]; 6155*8c03f64dSVadim Pasternak } 6156*8c03f64dSVadim Pasternak } 6157*8c03f64dSVadim Pasternak 6158*8c03f64dSVadim Pasternak return 0; 6159*8c03f64dSVadim Pasternak } 6160*8c03f64dSVadim Pasternak 6161*8c03f64dSVadim Pasternak static int mlxplat_lpc_cpld_device_init(struct resource **hotplug_resources, 6162*8c03f64dSVadim Pasternak unsigned int *hotplug_resources_size) 6163*8c03f64dSVadim Pasternak { 6164*8c03f64dSVadim Pasternak int err; 6165*8c03f64dSVadim Pasternak 6166*8c03f64dSVadim Pasternak mlxplat_mlxcpld_regmap_ctx.base = devm_ioport_map(&mlxplat_dev->dev, 6167*8c03f64dSVadim Pasternak mlxplat_lpc_resources[1].start, 1); 6168*8c03f64dSVadim Pasternak if (!mlxplat_mlxcpld_regmap_ctx.base) { 6169*8c03f64dSVadim Pasternak err = -ENOMEM; 6170*8c03f64dSVadim Pasternak goto fail_devm_ioport_map; 6171*8c03f64dSVadim Pasternak } 6172*8c03f64dSVadim Pasternak 6173*8c03f64dSVadim Pasternak *hotplug_resources = mlxplat_mlxcpld_resources; 6174*8c03f64dSVadim Pasternak *hotplug_resources_size = ARRAY_SIZE(mlxplat_mlxcpld_resources); 6175*8c03f64dSVadim Pasternak 6176*8c03f64dSVadim Pasternak return 0; 6177*8c03f64dSVadim Pasternak 6178*8c03f64dSVadim Pasternak fail_devm_ioport_map: 6179*8c03f64dSVadim Pasternak return err; 6180*8c03f64dSVadim Pasternak } 6181*8c03f64dSVadim Pasternak 6182*8c03f64dSVadim Pasternak static void mlxplat_lpc_cpld_device_exit(void) 6183*8c03f64dSVadim Pasternak { 6184*8c03f64dSVadim Pasternak } 6185*8c03f64dSVadim Pasternak 6186*8c03f64dSVadim Pasternak static int 6187*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init(unsigned int device, const char *res_name, struct pci_dev **pci_bridge, 6188*8c03f64dSVadim Pasternak void __iomem **pci_bridge_addr) 6189*8c03f64dSVadim Pasternak { 6190*8c03f64dSVadim Pasternak void __iomem *pci_mem_addr; 6191*8c03f64dSVadim Pasternak struct pci_dev *pci_dev; 6192*8c03f64dSVadim Pasternak int err; 6193*8c03f64dSVadim Pasternak 6194*8c03f64dSVadim Pasternak pci_dev = pci_get_device(PCI_VENDOR_ID_LATTICE, device, NULL); 6195*8c03f64dSVadim Pasternak if (!pci_dev) 6196*8c03f64dSVadim Pasternak return -ENODEV; 6197*8c03f64dSVadim Pasternak 6198*8c03f64dSVadim Pasternak err = pci_enable_device(pci_dev); 6199*8c03f64dSVadim Pasternak if (err) { 6200*8c03f64dSVadim Pasternak dev_err(&pci_dev->dev, "pci_enable_device failed with error %d\n", err); 6201*8c03f64dSVadim Pasternak goto fail_pci_enable_device; 6202*8c03f64dSVadim Pasternak } 6203*8c03f64dSVadim Pasternak 6204*8c03f64dSVadim Pasternak err = pci_request_region(pci_dev, 0, res_name); 6205*8c03f64dSVadim Pasternak if (err) { 6206*8c03f64dSVadim Pasternak dev_err(&pci_dev->dev, "pci_request_regions failed with error %d\n", err); 6207*8c03f64dSVadim Pasternak goto fail_pci_request_regions; 6208*8c03f64dSVadim Pasternak } 6209*8c03f64dSVadim Pasternak 6210*8c03f64dSVadim Pasternak err = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(64)); 6211*8c03f64dSVadim Pasternak if (err) { 6212*8c03f64dSVadim Pasternak err = dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32)); 6213*8c03f64dSVadim Pasternak if (err) { 6214*8c03f64dSVadim Pasternak dev_err(&pci_dev->dev, "dma_set_mask failed with error %d\n", err); 6215*8c03f64dSVadim Pasternak goto fail_pci_set_dma_mask; 6216*8c03f64dSVadim Pasternak } 6217*8c03f64dSVadim Pasternak } 6218*8c03f64dSVadim Pasternak 6219*8c03f64dSVadim Pasternak pci_set_master(pci_dev); 6220*8c03f64dSVadim Pasternak 6221*8c03f64dSVadim Pasternak pci_mem_addr = devm_ioremap(&pci_dev->dev, pci_resource_start(pci_dev, 0), 6222*8c03f64dSVadim Pasternak pci_resource_len(pci_dev, 0)); 6223*8c03f64dSVadim Pasternak if (!pci_mem_addr) { 6224*8c03f64dSVadim Pasternak dev_err(&mlxplat_dev->dev, "ioremap failed\n"); 6225*8c03f64dSVadim Pasternak err = -EIO; 6226*8c03f64dSVadim Pasternak goto fail_ioremap; 6227*8c03f64dSVadim Pasternak } 6228*8c03f64dSVadim Pasternak 6229*8c03f64dSVadim Pasternak *pci_bridge = pci_dev; 6230*8c03f64dSVadim Pasternak *pci_bridge_addr = pci_mem_addr; 6231*8c03f64dSVadim Pasternak 6232*8c03f64dSVadim Pasternak return 0; 6233*8c03f64dSVadim Pasternak 6234*8c03f64dSVadim Pasternak fail_ioremap: 6235*8c03f64dSVadim Pasternak fail_pci_set_dma_mask: 6236*8c03f64dSVadim Pasternak pci_release_regions(pci_dev); 6237*8c03f64dSVadim Pasternak fail_pci_request_regions: 6238*8c03f64dSVadim Pasternak pci_disable_device(pci_dev); 6239*8c03f64dSVadim Pasternak fail_pci_enable_device: 6240*8c03f64dSVadim Pasternak pci_dev_put(pci_dev); 6241*8c03f64dSVadim Pasternak return err; 6242*8c03f64dSVadim Pasternak } 6243*8c03f64dSVadim Pasternak 6244*8c03f64dSVadim Pasternak static void 6245*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(struct pci_dev *pci_bridge, 6246*8c03f64dSVadim Pasternak void __iomem *pci_bridge_addr) 6247*8c03f64dSVadim Pasternak { 6248*8c03f64dSVadim Pasternak iounmap(pci_bridge_addr); 6249*8c03f64dSVadim Pasternak pci_release_regions(pci_bridge); 6250*8c03f64dSVadim Pasternak pci_disable_device(pci_bridge); 6251*8c03f64dSVadim Pasternak pci_dev_put(pci_bridge); 6252*8c03f64dSVadim Pasternak } 6253*8c03f64dSVadim Pasternak 6254*8c03f64dSVadim Pasternak static int 6255*8c03f64dSVadim Pasternak mlxplat_pci_fpga_devices_init(struct resource **hotplug_resources, 6256*8c03f64dSVadim Pasternak unsigned int *hotplug_resources_size) 6257*8c03f64dSVadim Pasternak { 6258*8c03f64dSVadim Pasternak int err; 6259*8c03f64dSVadim Pasternak 6260*8c03f64dSVadim Pasternak err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_LPC_BRIDGE, 6261*8c03f64dSVadim Pasternak "mlxplat_lpc_bridge", &lpc_bridge, 6262*8c03f64dSVadim Pasternak &mlxplat_mlxcpld_regmap_ctx.base); 6263*8c03f64dSVadim Pasternak if (err) 6264*8c03f64dSVadim Pasternak goto mlxplat_pci_fpga_device_init_lpc_fail; 6265*8c03f64dSVadim Pasternak 6266*8c03f64dSVadim Pasternak err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_I2C_BRIDGE, 6267*8c03f64dSVadim Pasternak "mlxplat_i2c_bridge", &i2c_bridge, 6268*8c03f64dSVadim Pasternak &i2c_bridge_addr); 6269*8c03f64dSVadim Pasternak if (err) 6270*8c03f64dSVadim Pasternak goto mlxplat_pci_fpga_device_init_i2c_fail; 6271*8c03f64dSVadim Pasternak 6272*8c03f64dSVadim Pasternak err = mlxplat_pci_fpga_device_init(PCI_DEVICE_ID_LATTICE_JTAG_BRIDGE, 6273*8c03f64dSVadim Pasternak "mlxplat_jtag_bridge", &jtag_bridge, 6274*8c03f64dSVadim Pasternak &jtag_bridge_addr); 6275*8c03f64dSVadim Pasternak if (err) 6276*8c03f64dSVadim Pasternak goto mlxplat_pci_fpga_device_init_jtag_fail; 6277*8c03f64dSVadim Pasternak 6278*8c03f64dSVadim Pasternak return 0; 6279*8c03f64dSVadim Pasternak 6280*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_jtag_fail: 6281*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(i2c_bridge, i2c_bridge_addr); 6282*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_i2c_fail: 6283*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(lpc_bridge, mlxplat_mlxcpld_regmap_ctx.base); 6284*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_init_lpc_fail: 6285*8c03f64dSVadim Pasternak return err; 6286*8c03f64dSVadim Pasternak } 6287*8c03f64dSVadim Pasternak 6288*8c03f64dSVadim Pasternak static void mlxplat_pci_fpga_devices_exit(void) 6289*8c03f64dSVadim Pasternak { 6290*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(jtag_bridge, jtag_bridge_addr); 6291*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(i2c_bridge, i2c_bridge_addr); 6292*8c03f64dSVadim Pasternak mlxplat_pci_fpga_device_exit(lpc_bridge, mlxplat_mlxcpld_regmap_ctx.base); 6293*8c03f64dSVadim Pasternak } 6294*8c03f64dSVadim Pasternak 6295*8c03f64dSVadim Pasternak static int 6296*8c03f64dSVadim Pasternak mlxplat_logicdev_init(struct resource **hotplug_resources, unsigned int *hotplug_resources_size) 6297*8c03f64dSVadim Pasternak { 6298*8c03f64dSVadim Pasternak int err; 6299*8c03f64dSVadim Pasternak 6300*8c03f64dSVadim Pasternak err = mlxplat_pci_fpga_devices_init(hotplug_resources, hotplug_resources_size); 6301*8c03f64dSVadim Pasternak if (err == -ENODEV) 6302*8c03f64dSVadim Pasternak return mlxplat_lpc_cpld_device_init(hotplug_resources, hotplug_resources_size); 6303*8c03f64dSVadim Pasternak 6304*8c03f64dSVadim Pasternak return err; 6305*8c03f64dSVadim Pasternak } 6306*8c03f64dSVadim Pasternak 6307*8c03f64dSVadim Pasternak static void mlxplat_logicdev_exit(void) 6308*8c03f64dSVadim Pasternak { 6309*8c03f64dSVadim Pasternak if (lpc_bridge) 6310*8c03f64dSVadim Pasternak mlxplat_pci_fpga_devices_exit(); 6311*8c03f64dSVadim Pasternak else 6312*8c03f64dSVadim Pasternak mlxplat_lpc_cpld_device_exit(); 6313*8c03f64dSVadim Pasternak } 6314*8c03f64dSVadim Pasternak 6315*8c03f64dSVadim Pasternak static int mlxplat_platdevs_init(struct mlxplat_priv *priv) 6316*8c03f64dSVadim Pasternak { 6317*8c03f64dSVadim Pasternak int i = 0, err; 6318*8c03f64dSVadim Pasternak 6319*8c03f64dSVadim Pasternak /* Add hotplug driver */ 6320*8c03f64dSVadim Pasternak if (mlxplat_hotplug) { 6321*8c03f64dSVadim Pasternak mlxplat_hotplug->regmap = priv->regmap; 6322*8c03f64dSVadim Pasternak if (priv->irq_fpga) 6323*8c03f64dSVadim Pasternak mlxplat_hotplug->irq = priv->irq_fpga; 6324*8c03f64dSVadim Pasternak priv->pdev_hotplug = 6325*8c03f64dSVadim Pasternak platform_device_register_resndata(&mlxplat_dev->dev, 6326*8c03f64dSVadim Pasternak "mlxreg-hotplug", PLATFORM_DEVID_NONE, 6327*8c03f64dSVadim Pasternak priv->hotplug_resources, 6328*8c03f64dSVadim Pasternak priv->hotplug_resources_size, 6329*8c03f64dSVadim Pasternak mlxplat_hotplug, sizeof(*mlxplat_hotplug)); 6330*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_hotplug)) { 6331*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_hotplug); 6332*8c03f64dSVadim Pasternak goto fail_platform_hotplug_register; 6333*8c03f64dSVadim Pasternak } 6334*8c03f64dSVadim Pasternak } 6335*8c03f64dSVadim Pasternak 6336*8c03f64dSVadim Pasternak /* Add LED driver. */ 6337*8c03f64dSVadim Pasternak if (mlxplat_led) { 6338*8c03f64dSVadim Pasternak mlxplat_led->regmap = priv->regmap; 6339*8c03f64dSVadim Pasternak priv->pdev_led = 6340*8c03f64dSVadim Pasternak platform_device_register_resndata(&mlxplat_dev->dev, "leds-mlxreg", 6341*8c03f64dSVadim Pasternak PLATFORM_DEVID_NONE, NULL, 0, mlxplat_led, 6342*8c03f64dSVadim Pasternak sizeof(*mlxplat_led)); 6343*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_led)) { 6344*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_led); 6345*8c03f64dSVadim Pasternak goto fail_platform_leds_register; 6346*8c03f64dSVadim Pasternak } 6347*8c03f64dSVadim Pasternak } 6348*8c03f64dSVadim Pasternak 6349*8c03f64dSVadim Pasternak /* Add registers io access driver. */ 6350*8c03f64dSVadim Pasternak if (mlxplat_regs_io) { 6351*8c03f64dSVadim Pasternak mlxplat_regs_io->regmap = priv->regmap; 6352*8c03f64dSVadim Pasternak priv->pdev_io_regs = platform_device_register_resndata(&mlxplat_dev->dev, 6353*8c03f64dSVadim Pasternak "mlxreg-io", 6354*8c03f64dSVadim Pasternak PLATFORM_DEVID_NONE, NULL, 6355*8c03f64dSVadim Pasternak 0, mlxplat_regs_io, 6356*8c03f64dSVadim Pasternak sizeof(*mlxplat_regs_io)); 6357*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_io_regs)) { 6358*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_io_regs); 6359*8c03f64dSVadim Pasternak goto fail_platform_io_register; 6360*8c03f64dSVadim Pasternak } 6361*8c03f64dSVadim Pasternak } 6362*8c03f64dSVadim Pasternak 6363*8c03f64dSVadim Pasternak /* Add FAN driver. */ 6364*8c03f64dSVadim Pasternak if (mlxplat_fan) { 6365*8c03f64dSVadim Pasternak mlxplat_fan->regmap = priv->regmap; 6366*8c03f64dSVadim Pasternak priv->pdev_fan = platform_device_register_resndata(&mlxplat_dev->dev, "mlxreg-fan", 6367*8c03f64dSVadim Pasternak PLATFORM_DEVID_NONE, NULL, 0, 6368*8c03f64dSVadim Pasternak mlxplat_fan, 6369*8c03f64dSVadim Pasternak sizeof(*mlxplat_fan)); 6370*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_fan)) { 6371*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_fan); 6372*8c03f64dSVadim Pasternak goto fail_platform_fan_register; 6373*8c03f64dSVadim Pasternak } 6374*8c03f64dSVadim Pasternak } 6375*8c03f64dSVadim Pasternak 6376*8c03f64dSVadim Pasternak /* Add WD drivers. */ 6377*8c03f64dSVadim Pasternak err = mlxplat_mlxcpld_check_wd_capability(priv->regmap); 6378*8c03f64dSVadim Pasternak if (err) 6379*8c03f64dSVadim Pasternak goto fail_platform_wd_register; 6380*8c03f64dSVadim Pasternak for (i = 0; i < MLXPLAT_CPLD_WD_MAX_DEVS; i++) { 6381*8c03f64dSVadim Pasternak if (mlxplat_wd_data[i]) { 6382*8c03f64dSVadim Pasternak mlxplat_wd_data[i]->regmap = priv->regmap; 6383*8c03f64dSVadim Pasternak priv->pdev_wd[i] = 6384*8c03f64dSVadim Pasternak platform_device_register_resndata(&mlxplat_dev->dev, "mlx-wdt", i, 6385*8c03f64dSVadim Pasternak NULL, 0, mlxplat_wd_data[i], 6386*8c03f64dSVadim Pasternak sizeof(*mlxplat_wd_data[i])); 6387*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_wd[i])) { 6388*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_wd[i]); 6389*8c03f64dSVadim Pasternak goto fail_platform_wd_register; 6390*8c03f64dSVadim Pasternak } 6391*8c03f64dSVadim Pasternak } 6392*8c03f64dSVadim Pasternak } 6393*8c03f64dSVadim Pasternak 6394*8c03f64dSVadim Pasternak return 0; 6395*8c03f64dSVadim Pasternak 6396*8c03f64dSVadim Pasternak fail_platform_wd_register: 6397*8c03f64dSVadim Pasternak while (--i >= 0) 6398*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_wd[i]); 6399*8c03f64dSVadim Pasternak fail_platform_fan_register: 6400*8c03f64dSVadim Pasternak if (mlxplat_regs_io) 6401*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_io_regs); 6402*8c03f64dSVadim Pasternak fail_platform_io_register: 6403*8c03f64dSVadim Pasternak if (mlxplat_led) 6404*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_led); 6405*8c03f64dSVadim Pasternak fail_platform_leds_register: 6406*8c03f64dSVadim Pasternak if (mlxplat_hotplug) 6407*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_hotplug); 6408*8c03f64dSVadim Pasternak fail_platform_hotplug_register: 6409*8c03f64dSVadim Pasternak return err; 6410*8c03f64dSVadim Pasternak } 6411*8c03f64dSVadim Pasternak 6412*8c03f64dSVadim Pasternak static void mlxplat_platdevs_exit(struct mlxplat_priv *priv) 6413*8c03f64dSVadim Pasternak { 6414*8c03f64dSVadim Pasternak int i; 6415*8c03f64dSVadim Pasternak 6416*8c03f64dSVadim Pasternak for (i = MLXPLAT_CPLD_WD_MAX_DEVS - 1; i >= 0 ; i--) 6417*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_wd[i]); 6418*8c03f64dSVadim Pasternak if (priv->pdev_fan) 6419*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_fan); 6420*8c03f64dSVadim Pasternak if (priv->pdev_io_regs) 6421*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_io_regs); 6422*8c03f64dSVadim Pasternak if (priv->pdev_led) 6423*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_led); 6424*8c03f64dSVadim Pasternak if (priv->pdev_hotplug) 6425*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_hotplug); 6426*8c03f64dSVadim Pasternak } 6427*8c03f64dSVadim Pasternak 6428*8c03f64dSVadim Pasternak static int 6429*8c03f64dSVadim Pasternak mlxplat_i2c_mux_complition_notify(void *handle, struct i2c_adapter *parent, 6430*8c03f64dSVadim Pasternak struct i2c_adapter *adapters[]) 6431*8c03f64dSVadim Pasternak { 6432*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = handle; 6433*8c03f64dSVadim Pasternak 6434*8c03f64dSVadim Pasternak return mlxplat_platdevs_init(priv); 6435*8c03f64dSVadim Pasternak } 6436*8c03f64dSVadim Pasternak 6437*8c03f64dSVadim Pasternak static int mlxplat_i2c_mux_topology_init(struct mlxplat_priv *priv) 6438*8c03f64dSVadim Pasternak { 6439*8c03f64dSVadim Pasternak int i, err; 6440*8c03f64dSVadim Pasternak 6441*8c03f64dSVadim Pasternak if (!priv->pdev_i2c) { 6442*8c03f64dSVadim Pasternak priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_NOTIFIED; 6443*8c03f64dSVadim Pasternak return 0; 6444*8c03f64dSVadim Pasternak } 6445*8c03f64dSVadim Pasternak 6446*8c03f64dSVadim Pasternak priv->i2c_main_init_status = MLXPLAT_I2C_MAIN_BUS_HANDLE_CREATED; 6447*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_mux_num; i++) { 6448*8c03f64dSVadim Pasternak priv->pdev_mux[i] = platform_device_register_resndata(&priv->pdev_i2c->dev, 6449*8c03f64dSVadim Pasternak "i2c-mux-reg", i, NULL, 0, 6450*8c03f64dSVadim Pasternak &mlxplat_mux_data[i], 6451*8c03f64dSVadim Pasternak sizeof(mlxplat_mux_data[i])); 6452*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_mux[i])) { 6453*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_mux[i]); 6454*8c03f64dSVadim Pasternak goto fail_platform_mux_register; 6455*8c03f64dSVadim Pasternak } 6456*8c03f64dSVadim Pasternak } 6457*8c03f64dSVadim Pasternak 6458*8c03f64dSVadim Pasternak return mlxplat_i2c_mux_complition_notify(priv, NULL, NULL); 6459*8c03f64dSVadim Pasternak 6460*8c03f64dSVadim Pasternak fail_platform_mux_register: 6461*8c03f64dSVadim Pasternak while (--i >= 0) 6462*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_mux[i]); 6463*8c03f64dSVadim Pasternak return err; 6464*8c03f64dSVadim Pasternak } 6465*8c03f64dSVadim Pasternak 6466*8c03f64dSVadim Pasternak static void mlxplat_i2c_mux_topology_exit(struct mlxplat_priv *priv) 6467*8c03f64dSVadim Pasternak { 6468*8c03f64dSVadim Pasternak int i; 6469*8c03f64dSVadim Pasternak 6470*8c03f64dSVadim Pasternak for (i = mlxplat_mux_num - 1; i >= 0 ; i--) { 6471*8c03f64dSVadim Pasternak if (priv->pdev_mux[i]) 6472*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_mux[i]); 6473*8c03f64dSVadim Pasternak } 6474*8c03f64dSVadim Pasternak } 6475*8c03f64dSVadim Pasternak 6476*8c03f64dSVadim Pasternak static int mlxplat_i2c_main_completion_notify(void *handle, int id) 6477*8c03f64dSVadim Pasternak { 6478*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = handle; 6479*8c03f64dSVadim Pasternak 6480*8c03f64dSVadim Pasternak return mlxplat_i2c_mux_topology_init(priv); 6481*8c03f64dSVadim Pasternak } 6482*8c03f64dSVadim Pasternak 6483*8c03f64dSVadim Pasternak static int mlxplat_i2c_main_init(struct mlxplat_priv *priv) 6484*8c03f64dSVadim Pasternak { 6485*8c03f64dSVadim Pasternak int nr, err; 6486*8c03f64dSVadim Pasternak 6487*8c03f64dSVadim Pasternak if (!mlxplat_i2c) 6488*8c03f64dSVadim Pasternak return 0; 6489*8c03f64dSVadim Pasternak 6490*8c03f64dSVadim Pasternak err = mlxplat_mlxcpld_verify_bus_topology(&nr); 6491*8c03f64dSVadim Pasternak if (nr < 0) 6492*8c03f64dSVadim Pasternak goto fail_mlxplat_mlxcpld_verify_bus_topology; 6493*8c03f64dSVadim Pasternak 6494*8c03f64dSVadim Pasternak nr = (nr == mlxplat_max_adap_num) ? -1 : nr; 6495*8c03f64dSVadim Pasternak mlxplat_i2c->regmap = priv->regmap; 6496*8c03f64dSVadim Pasternak mlxplat_i2c->handle = priv; 6497*8c03f64dSVadim Pasternak 6498*8c03f64dSVadim Pasternak /* Set mapped base address of I2C-LPC bridge over PCIe */ 6499*8c03f64dSVadim Pasternak if (lpc_bridge) 6500*8c03f64dSVadim Pasternak mlxplat_i2c->addr = i2c_bridge_addr; 6501*8c03f64dSVadim Pasternak priv->pdev_i2c = platform_device_register_resndata(&mlxplat_dev->dev, "i2c_mlxcpld", 6502*8c03f64dSVadim Pasternak nr, priv->hotplug_resources, 6503*8c03f64dSVadim Pasternak priv->hotplug_resources_size, 6504*8c03f64dSVadim Pasternak mlxplat_i2c, sizeof(*mlxplat_i2c)); 6505*8c03f64dSVadim Pasternak if (IS_ERR(priv->pdev_i2c)) { 6506*8c03f64dSVadim Pasternak err = PTR_ERR(priv->pdev_i2c); 6507*8c03f64dSVadim Pasternak goto fail_platform_i2c_register; 6508*8c03f64dSVadim Pasternak } 6509*8c03f64dSVadim Pasternak 6510*8c03f64dSVadim Pasternak if (priv->i2c_main_init_status == MLXPLAT_I2C_MAIN_BUS_NOTIFIED) { 6511*8c03f64dSVadim Pasternak err = mlxplat_i2c_mux_topology_init(priv); 6512*8c03f64dSVadim Pasternak if (err) 6513*8c03f64dSVadim Pasternak goto fail_mlxplat_i2c_mux_topology_init; 6514*8c03f64dSVadim Pasternak } 6515*8c03f64dSVadim Pasternak 6516*8c03f64dSVadim Pasternak return 0; 6517*8c03f64dSVadim Pasternak 6518*8c03f64dSVadim Pasternak fail_mlxplat_i2c_mux_topology_init: 6519*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_i2c); 6520*8c03f64dSVadim Pasternak fail_platform_i2c_register: 6521*8c03f64dSVadim Pasternak fail_mlxplat_mlxcpld_verify_bus_topology: 6522*8c03f64dSVadim Pasternak return err; 6523*8c03f64dSVadim Pasternak } 6524*8c03f64dSVadim Pasternak 6525*8c03f64dSVadim Pasternak static void mlxplat_i2c_main_exit(struct mlxplat_priv *priv) 6526*8c03f64dSVadim Pasternak { 6527*8c03f64dSVadim Pasternak mlxplat_platdevs_exit(priv); 6528*8c03f64dSVadim Pasternak mlxplat_i2c_mux_topology_exit(priv); 6529*8c03f64dSVadim Pasternak if (priv->pdev_i2c) 6530*8c03f64dSVadim Pasternak platform_device_unregister(priv->pdev_i2c); 6531*8c03f64dSVadim Pasternak } 6532*8c03f64dSVadim Pasternak 6533*8c03f64dSVadim Pasternak static int mlxplat_probe(struct platform_device *pdev) 6534*8c03f64dSVadim Pasternak { 6535*8c03f64dSVadim Pasternak unsigned int hotplug_resources_size = 0; 6536*8c03f64dSVadim Pasternak struct resource *hotplug_resources = NULL; 6537*8c03f64dSVadim Pasternak struct acpi_device *acpi_dev; 6538*8c03f64dSVadim Pasternak struct mlxplat_priv *priv; 6539*8c03f64dSVadim Pasternak int irq_fpga = 0, i, err; 6540*8c03f64dSVadim Pasternak 6541*8c03f64dSVadim Pasternak acpi_dev = ACPI_COMPANION(&pdev->dev); 6542*8c03f64dSVadim Pasternak if (acpi_dev) { 6543*8c03f64dSVadim Pasternak irq_fpga = acpi_dev_gpio_irq_get(acpi_dev, 0); 6544*8c03f64dSVadim Pasternak if (irq_fpga < 0) 6545*8c03f64dSVadim Pasternak return -ENODEV; 6546*8c03f64dSVadim Pasternak mlxplat_dev = pdev; 6547*8c03f64dSVadim Pasternak } 6548*8c03f64dSVadim Pasternak 6549*8c03f64dSVadim Pasternak err = mlxplat_logicdev_init(&hotplug_resources, &hotplug_resources_size); 6550*8c03f64dSVadim Pasternak if (err) 6551*8c03f64dSVadim Pasternak return err; 6552*8c03f64dSVadim Pasternak 6553*8c03f64dSVadim Pasternak priv = devm_kzalloc(&mlxplat_dev->dev, sizeof(struct mlxplat_priv), 6554*8c03f64dSVadim Pasternak GFP_KERNEL); 6555*8c03f64dSVadim Pasternak if (!priv) { 6556*8c03f64dSVadim Pasternak err = -ENOMEM; 6557*8c03f64dSVadim Pasternak goto fail_alloc; 6558*8c03f64dSVadim Pasternak } 6559*8c03f64dSVadim Pasternak platform_set_drvdata(mlxplat_dev, priv); 6560*8c03f64dSVadim Pasternak priv->hotplug_resources = hotplug_resources; 6561*8c03f64dSVadim Pasternak priv->hotplug_resources_size = hotplug_resources_size; 6562*8c03f64dSVadim Pasternak priv->irq_fpga = irq_fpga; 6563*8c03f64dSVadim Pasternak 6564*8c03f64dSVadim Pasternak if (!mlxplat_regmap_config) 6565*8c03f64dSVadim Pasternak mlxplat_regmap_config = &mlxplat_mlxcpld_regmap_config; 6566*8c03f64dSVadim Pasternak 6567*8c03f64dSVadim Pasternak priv->regmap = devm_regmap_init(&mlxplat_dev->dev, NULL, 6568*8c03f64dSVadim Pasternak &mlxplat_mlxcpld_regmap_ctx, 6569*8c03f64dSVadim Pasternak mlxplat_regmap_config); 6570*8c03f64dSVadim Pasternak if (IS_ERR(priv->regmap)) { 6571*8c03f64dSVadim Pasternak err = PTR_ERR(priv->regmap); 6572*8c03f64dSVadim Pasternak goto fail_alloc; 6573*8c03f64dSVadim Pasternak } 6574*8c03f64dSVadim Pasternak 6575*8c03f64dSVadim Pasternak /* Set default registers. */ 6576*8c03f64dSVadim Pasternak for (i = 0; i < mlxplat_regmap_config->num_reg_defaults; i++) { 6577*8c03f64dSVadim Pasternak err = regmap_write(priv->regmap, 6578*8c03f64dSVadim Pasternak mlxplat_regmap_config->reg_defaults[i].reg, 6579*8c03f64dSVadim Pasternak mlxplat_regmap_config->reg_defaults[i].def); 6580*8c03f64dSVadim Pasternak if (err) 6581*8c03f64dSVadim Pasternak goto fail_regmap_write; 6582*8c03f64dSVadim Pasternak } 6583*8c03f64dSVadim Pasternak 6584*8c03f64dSVadim Pasternak err = mlxplat_i2c_main_init(priv); 6585*8c03f64dSVadim Pasternak if (err) 6586*8c03f64dSVadim Pasternak goto fail_mlxplat_i2c_main_init; 6587*8c03f64dSVadim Pasternak 6588*8c03f64dSVadim Pasternak /* Sync registers with hardware. */ 6589*8c03f64dSVadim Pasternak regcache_mark_dirty(priv->regmap); 6590*8c03f64dSVadim Pasternak err = regcache_sync(priv->regmap); 6591*8c03f64dSVadim Pasternak if (err) 6592*8c03f64dSVadim Pasternak goto fail_regcache_sync; 6593*8c03f64dSVadim Pasternak 6594*8c03f64dSVadim Pasternak if (mlxplat_reboot_nb) { 6595*8c03f64dSVadim Pasternak err = register_reboot_notifier(mlxplat_reboot_nb); 6596*8c03f64dSVadim Pasternak if (err) 6597*8c03f64dSVadim Pasternak goto fail_register_reboot_notifier; 6598*8c03f64dSVadim Pasternak } 6599*8c03f64dSVadim Pasternak 6600*8c03f64dSVadim Pasternak return 0; 6601*8c03f64dSVadim Pasternak 6602*8c03f64dSVadim Pasternak fail_register_reboot_notifier: 6603*8c03f64dSVadim Pasternak fail_regcache_sync: 6604*8c03f64dSVadim Pasternak mlxplat_i2c_main_exit(priv); 6605*8c03f64dSVadim Pasternak fail_mlxplat_i2c_main_init: 6606*8c03f64dSVadim Pasternak fail_regmap_write: 6607*8c03f64dSVadim Pasternak fail_alloc: 6608*8c03f64dSVadim Pasternak mlxplat_logicdev_exit(); 6609*8c03f64dSVadim Pasternak 6610*8c03f64dSVadim Pasternak return err; 6611*8c03f64dSVadim Pasternak } 6612*8c03f64dSVadim Pasternak 6613*8c03f64dSVadim Pasternak static void mlxplat_remove(struct platform_device *pdev) 6614*8c03f64dSVadim Pasternak { 6615*8c03f64dSVadim Pasternak struct mlxplat_priv *priv = platform_get_drvdata(mlxplat_dev); 6616*8c03f64dSVadim Pasternak 6617*8c03f64dSVadim Pasternak if (pm_power_off) 6618*8c03f64dSVadim Pasternak pm_power_off = NULL; 6619*8c03f64dSVadim Pasternak if (mlxplat_reboot_nb) 6620*8c03f64dSVadim Pasternak unregister_reboot_notifier(mlxplat_reboot_nb); 6621*8c03f64dSVadim Pasternak mlxplat_i2c_main_exit(priv); 6622*8c03f64dSVadim Pasternak mlxplat_logicdev_exit(); 6623*8c03f64dSVadim Pasternak } 6624*8c03f64dSVadim Pasternak 6625*8c03f64dSVadim Pasternak static const struct acpi_device_id mlxplat_acpi_table[] = { 6626*8c03f64dSVadim Pasternak { "MLNXBF49", 0 }, 6627*8c03f64dSVadim Pasternak {} 6628*8c03f64dSVadim Pasternak }; 6629*8c03f64dSVadim Pasternak MODULE_DEVICE_TABLE(acpi, mlxplat_acpi_table); 6630*8c03f64dSVadim Pasternak 6631*8c03f64dSVadim Pasternak static struct platform_driver mlxplat_driver = { 6632*8c03f64dSVadim Pasternak .driver = { 6633*8c03f64dSVadim Pasternak .name = "mlxplat", 6634*8c03f64dSVadim Pasternak .acpi_match_table = mlxplat_acpi_table, 6635*8c03f64dSVadim Pasternak .probe_type = PROBE_FORCE_SYNCHRONOUS, 6636*8c03f64dSVadim Pasternak }, 6637*8c03f64dSVadim Pasternak .probe = mlxplat_probe, 6638*8c03f64dSVadim Pasternak .remove = mlxplat_remove, 6639*8c03f64dSVadim Pasternak }; 6640*8c03f64dSVadim Pasternak 6641*8c03f64dSVadim Pasternak static int __init mlxplat_init(void) 6642*8c03f64dSVadim Pasternak { 6643*8c03f64dSVadim Pasternak int err; 6644*8c03f64dSVadim Pasternak 6645*8c03f64dSVadim Pasternak if (!dmi_check_system(mlxplat_dmi_table)) 6646*8c03f64dSVadim Pasternak return -ENODEV; 6647*8c03f64dSVadim Pasternak 6648*8c03f64dSVadim Pasternak err = platform_driver_register(&mlxplat_driver); 6649*8c03f64dSVadim Pasternak if (err) 6650*8c03f64dSVadim Pasternak return err; 6651*8c03f64dSVadim Pasternak return 0; 6652*8c03f64dSVadim Pasternak } 6653*8c03f64dSVadim Pasternak module_init(mlxplat_init); 6654*8c03f64dSVadim Pasternak 6655*8c03f64dSVadim Pasternak static void __exit mlxplat_exit(void) 6656*8c03f64dSVadim Pasternak { 6657*8c03f64dSVadim Pasternak if (mlxplat_dev) 6658*8c03f64dSVadim Pasternak platform_device_unregister(mlxplat_dev); 6659*8c03f64dSVadim Pasternak 6660*8c03f64dSVadim Pasternak platform_driver_unregister(&mlxplat_driver); 6661*8c03f64dSVadim Pasternak } 6662*8c03f64dSVadim Pasternak module_exit(mlxplat_exit); 6663*8c03f64dSVadim Pasternak 6664*8c03f64dSVadim Pasternak MODULE_AUTHOR("Vadim Pasternak <vadimp@mellanox.com>"); 6665*8c03f64dSVadim Pasternak MODULE_DESCRIPTION("Mellanox platform driver"); 6666*8c03f64dSVadim Pasternak MODULE_LICENSE("Dual BSD/GPL"); 6667