meta-facebook/meta-wedge400/recipes-wedge400/platform-lib/files/pal/pal.h (575 lines of code) (raw):

/* * * Copyright 2019-present Facebook. All Rights Reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef __PAL_H__ #define __PAL_H__ #include <openbmc/obmc-pal.h> #include <openbmc/kv.h> #ifdef __cplusplus extern "C" { #endif #include <openbmc/ipmi.h> #include <openbmc/obmc-pal.h> #include <stdbool.h> #include <math.h> #include <facebook/bic.h> #define PLATFORM_NAME "wedge400" #define READ_UNIT_SENSOR_TIMEOUT 5 #define SYS_PLATFROM_DIR(dev) "/sys/devices/platform/"#dev"/" #define I2C_DRIVER_DIR(name, bus, addr) "/sys/bus/i2c/drivers/"#name"/"#bus"-00"#addr"/" #define I2C_DEV_DIR(bus, addr) "/sys/bus/i2c/devices/i2c-"#bus"/"#bus"-00"#addr"/" #define HW_MON_DIR "hwmon/hwmon*" #define SCM_CPLD "scmcpld" #define SMB_CPLD "smbcpld" #define FCM_CPLD "fcmcpld" #define PWR_CPLD "pwrcpld" #define DOM_FPGA1 "domfpga1" #define DOM_FPGA2 "domfpga2" #define GPIO_VAL "/sys/class/gpio/gpio%d/value" #define GPIO_DIR "/sys/class/gpio/gpio%d/direction" #define SCM_SYSFS I2C_DEV_DIR(2, 3e)"%s" #define SMB_SYSFS I2C_DEV_DIR(12, 3e)"%s" #define PWR_SYSFS I2C_DEV_DIR(31, 3e)"%s" #define FCM_SYSFS I2C_DEV_DIR(32, 3e)"%s" #define DOMFPGA1_SYSFS I2C_DEV_DIR(13, 60)"%s" #define DOMFPGA2_SYSFS I2C_DEV_DIR(5, 60)"%s" #define SENSORD_FILE_SMB "/tmp/cache_store/smb_sensor%d" #define SENSORD_FILE_PSU "/tmp/cache_store/psu%d_sensor%d" #define SENSORD_FILE_PEM "/tmp/cache_store/pem%d_sensor%d" #define KV_PATH "/mnt/data/kv_store/%s" #define WEDGE400_SDR_PATH "/tmp/sdr_%s.bin" #define COM_PWR_BTN_N "come_pwr_btn_n" #define SYS_LED_COLOR "sys_led_color" #define SCM_COM_RST_BTN "iso_com_rst_n" #define GB_POWER "gb_turn_on" #define TH3_POWER "th3_turn_on" #define TH3_RESET_BTN "mac_reset_n" #define SMB_CPLD_TH3_ROV "th3_rov%d" #define SMB_CPLD_TH3_ROV_NUM 8 #define SMB_CPLD_GB_ROV "gb_rov%d" #define SMB_CPLD_GB_ROV_NUM SMB_CPLD_TH3_ROV_NUM #define SCM_PRSNT_STATUS "scm_present_int_status" #define SCM_SUS_S3_STATUS "iso_com_sus_s3_n" #define SCM_SUS_S4_STATUS "iso_com_sus_s4_n" #define SCM_SUS_S5_STATUS "iso_com_sus_s5_n" #define SCM_SUS_STAT_STATUS "iso_com_sus_stat_n" #define FAN_PRSNT_STATUS "fan%d_present" #define PSU_PRSNT_STATUS "psu_present_%d_N_int_status" #define PEM_PRSNT_STATUS PSU_PRSNT_STATUS #define CRASHDUMP_BIN "/usr/local/bin/autodump.sh" #define LAST_KEY "last_key" // SCM Sensor Devices #define SCM_HSC_ADM1278_DIR I2C_DRIVER_DIR(adm1275, 16, 10) #define SCM_HSC_LM25066_DIR I2C_DRIVER_DIR(lm25066, 16, 44) #define SCM_HSC_ADM1278_DEVICE I2C_DEV_DIR(16, 10)HW_MON_DIR #define SCM_HSC_LM25066_DEVICE I2C_DEV_DIR(16, 44)HW_MON_DIR #define SCM_OUTLET_TEMP_DEVICE I2C_DEV_DIR(17, 4d)HW_MON_DIR #define SCM_INLET_TEMP_DEVICE I2C_DEV_DIR(17, 4c)HW_MON_DIR // SMB Sensor Devices #define SMB_FCM_HSC_ADM1278_DIR I2C_DRIVER_DIR(adm1275, 35, 10) #define SMB_FCM_HSC_LM25066_DIR I2C_DRIVER_DIR(lm25066, 35, 44) #define SMB_PXE1211_DEVICE I2C_DEV_DIR(1, 0e)HW_MON_DIR #define SMB_SW_SERDES_PVDD_DEVICE I2C_DEV_DIR(1, 4d)HW_MON_DIR #define SMB_SW_SERDES_TRVDD_DEVICE I2C_DEV_DIR(1, 47)HW_MON_DIR #define SMB_IR_HMB_DEVICE I2C_DEV_DIR(1, 43)HW_MON_DIR #define SMB_ISL_DEVICE I2C_DEV_DIR(1, 60)HW_MON_DIR #define SMB_XPDE_DEVICE I2C_DEV_DIR(1, 40)HW_MON_DIR #define SMB_1220_DEVICE I2C_DEV_DIR(1, 3a)HW_MON_DIR #define SMB_LM75B_U28_DEVICE I2C_DEV_DIR(3, 48)HW_MON_DIR #define SMB_LM75B_U25_DEVICE I2C_DEV_DIR(3, 49)HW_MON_DIR #define SMB_LM75B_U56_DEVICE I2C_DEV_DIR(3, 4a)HW_MON_DIR #define SMB_LM75B_U55_DEVICE I2C_DEV_DIR(3, 4b)HW_MON_DIR #define SMB_TMP421_U62_DEVICE I2C_DEV_DIR(3, 4c)HW_MON_DIR #define SMB_TMP421_U63_DEVICE I2C_DEV_DIR(3, 4e)HW_MON_DIR #define SMB_SW_TEMP_DEVICE I2C_DEV_DIR(3, 4f)HW_MON_DIR #define SMB_GB_TEMP_DEVICE I2C_DEV_DIR(3, 2a)HW_MON_DIR #define SMB_DOM1_DEVICE I2C_DEV_DIR(13, 60) #define SMB_DOM2_DEVICE I2C_DEV_DIR(5, 60) #define SMB_FCM_TACH_DEVICE I2C_DEV_DIR(32, 3e) #define SMB_FCM_LM75B_U1_DEVICE I2C_DEV_DIR(34, 48)HW_MON_DIR #define SMB_FCM_LM75B_U2_DEVICE I2C_DEV_DIR(34, 49)HW_MON_DIR #define SMB_FCM_HSC_ADM1278_DEVICE I2C_DEV_DIR(35, 10)HW_MON_DIR #define SMB_FCM_HSC_LM25066_DEVICE I2C_DEV_DIR(35, 44)HW_MON_DIR //BMC Sensor Devices #define AST_ADC_DEVICE SYS_PLATFROM_DIR("ast-adc-hwmon")HW_MON_DIR // PSU Sensor Devices #define PSU_DRIVER "psu_driver" #define PSU1_DEVICE I2C_DEV_DIR(24, 58) #define PSU2_DEVICE I2C_DEV_DIR(25, 58) #define PEM1_LTC4282_DIR I2C_DRIVER_DIR(ltc4282, 24, 58) #define PEM2_LTC4282_DIR I2C_DRIVER_DIR(ltc4282, 25, 58) #define PEM1_MAX6615_DIR I2C_DRIVER_DIR(max6615, 24, 18) #define PEM2_MAX6615_DIR I2C_DRIVER_DIR(max6615, 25, 18) #define PEM_LTC4282_DRIVER "ltc4282" #define PEM_MAX6615_DRIVER "max6615" #define PEM1_DEVICE I2C_DEV_DIR(24, 58)HW_MON_DIR #define PEM2_DEVICE I2C_DEV_DIR(25, 58)HW_MON_DIR #define PEM1_DEVICE_EXT I2C_DEV_DIR(24, 18)HW_MON_DIR #define PEM2_DEVICE_EXT I2C_DEV_DIR(25, 18)HW_MON_DIR #define SMB_TMP421_1_DEVICE I2C_DEV_DIR(30, 4d)HW_MON_DIR #define SMB_TMP421_2_DEVICE I2C_DEV_DIR(28, 4d)HW_MON_DIR #define SMB_TMP421_3_DEVICE I2C_DEV_DIR(27, 4d)HW_MON_DIR #define SMB_TMP421_4_DEVICE I2C_DEV_DIR(26, 4d)HW_MON_DIR #define SMB_TMP421_1_DIR I2C_DRIVER_DIR(tmp421, 30, 4d) #define SMB_TMP421_2_DIR I2C_DRIVER_DIR(tmp421, 28, 4d) #define SMB_TMP421_3_DIR I2C_DRIVER_DIR(tmp421, 27, 4d) #define SMB_TMP421_4_DIR I2C_DRIVER_DIR(tmp421, 26, 4d) #define SMB_ADM1032_1_DEVICE I2C_DEV_DIR(30, 4c)HW_MON_DIR #define SMB_ADM1032_2_DEVICE I2C_DEV_DIR(28, 4c)HW_MON_DIR #define SMB_ADM1032_3_DEVICE I2C_DEV_DIR(27, 4c)HW_MON_DIR #define SMB_ADM1032_4_DEVICE I2C_DEV_DIR(26, 4c)HW_MON_DIR #define SMB_ADM1032_1_DIR I2C_DRIVER_DIR(lm90, 30, 4c) #define SMB_ADM1032_2_DIR I2C_DRIVER_DIR(lm90, 28, 4c) #define SMB_ADM1032_3_DIR I2C_DRIVER_DIR(lm90, 27, 4c) #define SMB_ADM1032_4_DIR I2C_DRIVER_DIR(lm90, 26, 4c) #define TEMP(x) "temp"#x"_input" #define VOLT(x) "in"#x"_input" #define VOLT_SET(x) "vo"#x"_input" #define CURR(x) "curr"#x"_input" #define POWER(x) "power"#x"_input" #define GPIO_SMB_REV_ID_0 "/tmp/gpionames/BMC_CPLD_BOARD_REV_ID0/%s" #define GPIO_SMB_REV_ID_1 "/tmp/gpionames/BMC_CPLD_BOARD_REV_ID1/%s" #define GPIO_SMB_REV_ID_2 "/tmp/gpionames/BMC_CPLD_BOARD_REV_ID2/%s" #define GPIO_BMC_BRD_TYPE_0 "/tmp/gpionames/BMC_CPLD_BOARD_TYPE_0/%s" #define GPIO_BMC_BRD_TYPE_1 "/tmp/gpionames/BMC_CPLD_BOARD_TYPE_1/%s" #define GPIO_BMC_BRD_TYPE_2 "/tmp/gpionames/BMC_CPLD_BOARD_TYPE_2/%s" #define GPIO_POSTCODE_0 "/tmp/gpionames/GPIO_H0/%s" #define GPIO_POSTCODE_1 "/tmp/gpionames/GPIO_H1/%s" #define GPIO_POSTCODE_2 "/tmp/gpionames/GPIO_H2/%s" #define GPIO_POSTCODE_3 "/tmp/gpionames/GPIO_H3/%s" #define GPIO_POSTCODE_4 "/tmp/gpionames/GPIO_H4/%s" #define GPIO_POSTCODE_5 "/tmp/gpionames/GPIO_H5/%s" #define GPIO_POSTCODE_6 "/tmp/gpionames/GPIO_H6/%s" #define GPIO_POSTCODE_7 "/tmp/gpionames/GPIO_H7/%s" #define GPIO_DEBUG_PRSNT_N "/tmp/gpionames/DEBUG_PRESENT_N/%s" #define GPIO_COME_PWRGD "/tmp/gpionames/PWRGD_PCH_PWROK/%s" /* Add button function for Debug Card */ #define BMC_UART_SEL I2C_DEV_DIR(12, 3e)"uart_selection" #define MAX_NUM_SCM 1 #define MAX_NUM_FAN 4 #define MAX_RETRIES_SDR_INIT 30 #define MAX_READ_RETRY 3 #define DELAY_POWER_BTN 2 #define DELAY_POWER_CYCLE 5 #define MAX_POS_READING_MARGIN 127 #define LARGEST_DEVICE_NAME 128 #define WEDGE400_MAX_NUM_SLOTS 1 #define UNIT_DIV 1000 #define READING_SKIP 1 #define READING_NA -2 #define SCM_RSENSE 1 #define IPMB_BUS 0 #define BMC_READY_N 28 #define BIC_SENSOR_READ_NA 0x20 #define THERMAL_CONSTANT 256 #define ERR_NOT_READY -2 #define MAX_NODES 1 // #define MAX_NUM_FRUS 6 #define MAX_SENSOR_NUM 0xFF #define MAX_SENSOR_THRESHOLD 8 #define MAX_SDR_LEN 64 #define TH3_VOL_MAX 927 #define TH3_VOL_MIN 750 #define FRU_STATUS_GOOD 1 #define FRU_STATUS_BAD 0 #define LED_DEV "/dev/i2c-6" #define I2C_ADDR_SIM_LED 0x20 #define FPGA_STS_LED_REG 0x82 #define FPGA_STS_CLR_BLUE 0x01 #define FPGA_STS_CLR_YELLOW 0x05 extern const char pal_fru_list[]; enum { BRD_TYPE_WEDGE400 = 0x00, BRD_TYPE_WEDGE400C = 0x01, }; enum { BOARD_WEDGE400_EVT_EVT3 = 0x00, BOARD_WEDGE400_DVT = 0x02, BOARD_WEDGE400_DVT2_PVT_PVT2 = 0x03, BOARD_WEDGE400_PVT3 = 0x04, BOARD_WEDGE400_MP = 0x05, BOARD_WEDGE400_MP_RESPIN = 0x06, BOARD_WEDGE400C_EVT = 0x10, BOARD_WEDGE400C_EVT2 = 0x11, BOARD_WEDGE400C_DVT = 0x12, BOARD_WEDGE400C_DVT2 = 0x13, BOARD_WEDGE400C_MP_RESPIN = 0x14, BOARD_UNDEFINED = 0xFF, }; enum { BIC_MODE_NORMAL = 0x01, BIC_MODE_UPDATE = 0x0F, }; enum { TH3_POWER_ON, TH3_POWER_OFF, TH3_RESET, }; enum { PEM_ON, PEM_REBOOT, PEM_OFF, }; enum { FRU_ALL = 0, FRU_SCM, FRU_SMB, //To avoid CIT test failure caused by index mismatch FRU_PEM1 = 4, FRU_PEM2, FRU_PSU1, FRU_PSU2, FRU_FAN1, FRU_FAN2, FRU_FAN3, FRU_FAN4, MAX_NUM_FRUS = FRU_FAN4, // virtual FRU ID for fw-util 0.2, make sure they are bigger than MAX_NUM_FRUS FRU_BMC, FRU_CPLD, FRU_FPGA, }; enum { HSC_FCM = 0, }; /* Sensors on SCM */ enum { SCM_SENSOR_OUTLET_TEMP = 0x02, SCM_SENSOR_INLET_TEMP = 0x04, SCM_SENSOR_HSC_VOLT = 0x0a, SCM_SENSOR_HSC_CURR = 0x0b, /* Threshold Sensors on COM-e */ BIC_SENSOR_MB_OUTLET_TEMP = 0x01, BIC_SENSOR_MB_INLET_TEMP = 0x07, BIC_SENSOR_PCH_TEMP = 0x08, BIC_SENSOR_VCCIN_VR_TEMP = 0x80, BIC_SENSOR_1V05COMB_VR_TEMP = 0x81, BIC_SENSOR_SOC_TEMP = 0x05, BIC_SENSOR_SOC_THERM_MARGIN = 0x09, BIC_SENSOR_VDDR_VR_TEMP = 0x82, BIC_SENSOR_SOC_DIMMA_TEMP = 0xB4, BIC_SENSOR_SOC_DIMMB_TEMP = 0xB6, BIC_SENSOR_SOC_PACKAGE_PWR = 0x2C, BIC_SENSOR_VCCIN_VR_POUT = 0x8B, BIC_SENSOR_VDDR_VR_POUT = 0x8D, BIC_SENSOR_SOC_TJMAX = 0x30, BIC_SENSOR_P3V3_MB = 0xD0, BIC_SENSOR_P12V_MB = 0xD2, BIC_SENSOR_P1V05_PCH = 0xD3, BIC_SENSOR_P3V3_STBY_MB = 0xD5, BIC_SENSOR_P5V_STBY_MB = 0xD6, BIC_SENSOR_PV_BAT = 0xD7, BIC_SENSOR_PVDDR = 0xD8, BIC_SENSOR_P1V05_COMB = 0x8E, BIC_SENSOR_1V05COMB_VR_CURR = 0x84, BIC_SENSOR_VDDR_VR_CURR = 0x85, BIC_SENSOR_VCCIN_VR_CURR = 0x83, BIC_SENSOR_VCCIN_VR_VOL = 0x88, BIC_SENSOR_VDDR_VR_VOL = 0x8A, BIC_SENSOR_P1V05COMB_VR_VOL = 0x89, BIC_SENSOR_P1V05COMB_VR_POUT = 0x8C, BIC_SENSOR_INA230_POWER = 0x29, BIC_SENSOR_INA230_VOL = 0x2A, /* Discrete sensors on COM-e*/ BIC_SENSOR_SYSTEM_STATUS = 0x10, //Discrete BIC_SENSOR_PROC_FAIL = 0x65, //Discrete BIC_SENSOR_SYS_BOOT_STAT = 0x7E, //Discrete BIC_SENSOR_VR_HOT = 0xB2, //Discrete BIC_SENSOR_CPU_DIMM_HOT = 0xB3, //Discrete None in Spec /* Event-only sensors on COM-e */ BIC_SENSOR_SPS_FW_HLTH = 0x17, //Event-only BIC_SENSOR_POST_ERR = 0x2B, //Event-only BIC_SENSOR_POWER_THRESH_EVENT = 0x3B, //Event-only BIC_SENSOR_MACHINE_CHK_ERR = 0x40, //Event-only BIC_SENSOR_PCIE_ERR = 0x41, //Event-only BIC_SENSOR_OTHER_IIO_ERR = 0x43, //Event-only BIC_SENSOR_PROC_HOT_EXT = 0x51, //Event-only None in Spec BIC_SENSOR_POWER_ERR = 0x56, //Event-only BIC_SENSOR_MEM_ECC_ERR = 0x63, //Event-only BIC_SENSOR_CAT_ERR = 0xEB, //Event-only }; /* Sensors on FAN */ enum { FAN_SENSOR_FAN1_FRONT_TACH = 0x40, FAN_SENSOR_FAN1_REAR_TACH, FAN_SENSOR_FAN2_FRONT_TACH, FAN_SENSOR_FAN2_REAR_TACH, FAN_SENSOR_FAN3_FRONT_TACH, FAN_SENSOR_FAN3_REAR_TACH, FAN_SENSOR_FAN4_FRONT_TACH, FAN_SENSOR_FAN4_REAR_TACH, }; /* Sensors on SMB */ enum { SMB_SENSOR_1220_VMON1 = 0x01, SMB_SENSOR_1220_VMON2, SMB_SENSOR_1220_VMON3, SMB_SENSOR_1220_VMON4, SMB_SENSOR_1220_VMON5, SMB_SENSOR_1220_VMON6, SMB_SENSOR_1220_VMON7, SMB_SENSOR_1220_VMON8, SMB_SENSOR_1220_VMON9, SMB_SENSOR_1220_VMON10, SMB_SENSOR_1220_VMON11, SMB_SENSOR_1220_VMON12, SMB_SENSOR_1220_VCCA, SMB_SENSOR_1220_VCCINP, SMB_SENSOR_SW_SERDES_PVDD_IN_VOLT, SMB_SENSOR_SW_SERDES_PVDD_IN_CURR, SMB_SENSOR_SW_SERDES_PVDD_IN_POWER, SMB_SENSOR_SW_SERDES_PVDD_OUT_VOLT, SMB_SENSOR_SW_SERDES_PVDD_OUT_CURR, SMB_SENSOR_SW_SERDES_PVDD_OUT_POWER, SMB_SENSOR_SW_SERDES_PVDD_TEMP1, SMB_SENSOR_SW_SERDES_TRVDD_IN_VOLT, SMB_SENSOR_SW_SERDES_TRVDD_IN_CURR, SMB_SENSOR_SW_SERDES_TRVDD_IN_POWER, SMB_SENSOR_SW_SERDES_TRVDD_OUT_VOLT, SMB_SENSOR_SW_SERDES_TRVDD_OUT_CURR, SMB_SENSOR_SW_SERDES_TRVDD_OUT_POWER, SMB_SENSOR_SW_SERDES_TRVDD_TEMP1, SMB_SENSOR_IR3R3V_LEFT_IN_VOLT, SMB_SENSOR_IR3R3V_LEFT_IN_CURR, SMB_SENSOR_IR3R3V_LEFT_IN_POWER, SMB_SENSOR_IR3R3V_LEFT_OUT_VOLT, SMB_SENSOR_IR3R3V_LEFT_OUT_CURR, SMB_SENSOR_IR3R3V_LEFT_OUT_POWER, SMB_SENSOR_IR3R3V_LEFT_TEMP, SMB_SENSOR_IR3R3V_RIGHT_IN_VOLT, SMB_SENSOR_IR3R3V_RIGHT_IN_CURR, SMB_SENSOR_IR3R3V_RIGHT_IN_POWER, SMB_SENSOR_IR3R3V_RIGHT_OUT_VOLT, SMB_SENSOR_IR3R3V_RIGHT_OUT_CURR, SMB_SENSOR_IR3R3V_RIGHT_OUT_POWER, SMB_SENSOR_IR3R3V_RIGHT_TEMP, SMB_SENSOR_SW_CORE_VOLT, SMB_SENSOR_SW_CORE_CURR, SMB_SENSOR_SW_CORE_POWER, SMB_SENSOR_SW_CORE_TEMP1, SMB_SENSOR_LM75B_U28_TEMP, SMB_SENSOR_LM75B_U25_TEMP, SMB_SENSOR_LM75B_U56_TEMP, SMB_SENSOR_LM75B_U55_TEMP, SMB_SENSOR_TMP421_U62_TEMP, SMB_SENSOR_TMP421_Q9_TEMP, SMB_SENSOR_TMP421_U63_TEMP, SMB_SENSOR_TMP421_Q10_TEMP, SMB_SENSOR_TMP422_U20_TEMP, SMB_SENSOR_SW_DIE_TEMP1, SMB_SENSOR_SW_DIE_TEMP2, SMB_DOM1_MAX_TEMP, SMB_DOM2_MAX_TEMP, /* Sensors on FCM */ SMB_SENSOR_FCM_LM75B_U1_TEMP, SMB_SENSOR_FCM_LM75B_U2_TEMP, SMB_SENSOR_FCM_HSC_VOLT, SMB_SENSOR_FCM_HSC_CURR, /* Sensors on BMC*/ SMB_BMC_ADC0_VSEN = 0x48, SMB_BMC_ADC1_VSEN, SMB_BMC_ADC2_VSEN, SMB_BMC_ADC3_VSEN, SMB_BMC_ADC4_VSEN, /* PXE1211C only on Wedge400C EVT2 or later */ SMB_SENSOR_HBM_IN_VOLT, SMB_SENSOR_HBM_OUT_VOLT, SMB_SENSOR_HBM_IN_CURR, SMB_SENSOR_HBM_OUT_CURR, SMB_SENSOR_HBM_IN_POWER, SMB_SENSOR_HBM_OUT_POWER, SMB_SENSOR_HBM_TEMP, SMB_SENSOR_VDDCK_0_IN_VOLT, SMB_SENSOR_VDDCK_0_OUT_VOLT, SMB_SENSOR_VDDCK_0_IN_CURR, SMB_SENSOR_VDDCK_0_OUT_CURR, SMB_SENSOR_VDDCK_0_IN_POWER, SMB_SENSOR_VDDCK_0_OUT_POWER, SMB_SENSOR_VDDCK_0_TEMP, SMB_SENSOR_VDDCK_1_IN_VOLT, SMB_SENSOR_VDDCK_1_OUT_VOLT, SMB_SENSOR_VDDCK_1_OUT_CURR, SMB_SENSOR_VDDCK_1_OUT_POWER, SMB_SENSOR_VDDCK_1_TEMP, /* Wedge400C only: 10 internal temp sensors within GB switch */ SMB_SENSOR_GB_TEMP1, SMB_SENSOR_GB_TEMP2, SMB_SENSOR_GB_TEMP3, SMB_SENSOR_GB_TEMP4, SMB_SENSOR_GB_TEMP5, SMB_SENSOR_GB_TEMP6, SMB_SENSOR_GB_TEMP7, SMB_SENSOR_GB_TEMP8, SMB_SENSOR_GB_TEMP9, SMB_SENSOR_GB_TEMP10, }; /* Sensors on PEM */ enum { /* Threshold Sensors on PEM1 */ PEM1_SENSOR_IN_VOLT = 0x01, PEM1_SENSOR_OUT_VOLT, PEM1_SENSOR_FET_BAD, PEM1_SENSOR_FET_SHORT, PEM1_SENSOR_CURR, PEM1_SENSOR_POWER, PEM1_SENSOR_FAN1_TACH, PEM1_SENSOR_FAN2_TACH, PEM1_SENSOR_TEMP1, PEM1_SENSOR_TEMP2, PEM1_SENSOR_TEMP3, /* Discrete fault sensors on PEM1 */ PEM1_SENSOR_FAULT_OV, PEM1_SENSOR_FAULT_UV, PEM1_SENSOR_FAULT_OC, PEM1_SENSOR_FAULT_POWER, PEM1_SENSOR_ON_FAULT, PEM1_SENSOR_FAULT_FET_SHORT, PEM1_SENSOR_FAULT_FET_BAD, PEM1_SENSOR_EEPROM_DONE, /* Discrete ADC alert sensors on PEM1 */ PEM1_SENSOR_POWER_ALARM_HIGH, PEM1_SENSOR_POWER_ALARM_LOW, PEM1_SENSOR_VSENSE_ALARM_HIGH, PEM1_SENSOR_VSENSE_ALARM_LOW, PEM1_SENSOR_VSOURCE_ALARM_HIGH, PEM1_SENSOR_VSOURCE_ALARM_LOW, PEM1_SENSOR_GPIO_ALARM_HIGH, PEM1_SENSOR_GPIO_ALARM_LOW, /* Discrete status sensors on PEM1 */ PEM1_SENSOR_ON_STATUS, PEM1_SENSOR_STATUS_FET_BAD, PEM1_SENSOR_STATUS_FET_SHORT, PEM1_SENSOR_STATUS_ON_PIN, PEM1_SENSOR_STATUS_POWER_GOOD, PEM1_SENSOR_STATUS_OC, PEM1_SENSOR_STATUS_UV, PEM1_SENSOR_STATUS_OV, PEM1_SENSOR_STATUS_GPIO3, PEM1_SENSOR_STATUS_GPIO2, PEM1_SENSOR_STATUS_GPIO1, PEM1_SENSOR_STATUS_ALERT, PEM1_SENSOR_STATUS_EEPROM_BUSY, PEM1_SENSOR_STATUS_ADC_IDLE, PEM1_SENSOR_STATUS_TICKER_OVERFLOW, PEM1_SENSOR_STATUS_METER_OVERFLOW, PEM1_SENSOR_CNT = PEM1_SENSOR_STATUS_METER_OVERFLOW, /* Threshold Sensors on PEM2 */ PEM2_SENSOR_IN_VOLT, PEM2_SENSOR_OUT_VOLT, PEM2_SENSOR_FET_BAD, PEM2_SENSOR_FET_SHORT, PEM2_SENSOR_CURR, PEM2_SENSOR_POWER, PEM2_SENSOR_FAN1_TACH, PEM2_SENSOR_FAN2_TACH, PEM2_SENSOR_TEMP1, PEM2_SENSOR_TEMP2, PEM2_SENSOR_TEMP3, /* Discrete fault sensors on PEM2 */ PEM2_SENSOR_FAULT_OV, PEM2_SENSOR_FAULT_UV, PEM2_SENSOR_FAULT_OC, PEM2_SENSOR_FAULT_POWER, PEM2_SENSOR_ON_FAULT, PEM2_SENSOR_FAULT_FET_SHORT, PEM2_SENSOR_FAULT_FET_BAD, PEM2_SENSOR_EEPROM_DONE, /* Discrete ADC alert sensors on PEM2 */ PEM2_SENSOR_POWER_ALARM_HIGH, PEM2_SENSOR_POWER_ALARM_LOW, PEM2_SENSOR_VSENSE_ALARM_HIGH, PEM2_SENSOR_VSENSE_ALARM_LOW, PEM2_SENSOR_VSOURCE_ALARM_HIGH, PEM2_SENSOR_VSOURCE_ALARM_LOW, PEM2_SENSOR_GPIO_ALARM_HIGH, PEM2_SENSOR_GPIO_ALARM_LOW, /* Discrete status sensors on PEM2 */ PEM2_SENSOR_ON_STATUS, PEM2_SENSOR_STATUS_FET_BAD, PEM2_SENSOR_STATUS_FET_SHORT, PEM2_SENSOR_STATUS_ON_PIN, PEM2_SENSOR_STATUS_POWER_GOOD, PEM2_SENSOR_STATUS_OC, PEM2_SENSOR_STATUS_UV, PEM2_SENSOR_STATUS_OV, PEM2_SENSOR_STATUS_GPIO3, PEM2_SENSOR_STATUS_GPIO2, PEM2_SENSOR_STATUS_GPIO1, PEM2_SENSOR_STATUS_ALERT, PEM2_SENSOR_STATUS_EEPROM_BUSY, PEM2_SENSOR_STATUS_ADC_IDLE, PEM2_SENSOR_STATUS_TICKER_OVERFLOW, PEM2_SENSOR_STATUS_METER_OVERFLOW, }; /* Sensors on PSU */ enum { PSU1_SENSOR_IN_VOLT = 0x01, PSU1_SENSOR_12V_VOLT, PSU1_SENSOR_STBY_VOLT, PSU1_SENSOR_IN_CURR, PSU1_SENSOR_12V_CURR, PSU1_SENSOR_STBY_CURR, PSU1_SENSOR_IN_POWER, PSU1_SENSOR_12V_POWER, PSU1_SENSOR_STBY_POWER, PSU1_SENSOR_FAN_TACH, PSU1_SENSOR_TEMP1, PSU1_SENSOR_TEMP2, PSU1_SENSOR_TEMP3, PSU1_SENSOR_FAN2_TACH, PSU1_SENSOR_CNT = PSU1_SENSOR_FAN2_TACH, PSU2_SENSOR_IN_VOLT, PSU2_SENSOR_12V_VOLT, PSU2_SENSOR_STBY_VOLT, PSU2_SENSOR_IN_CURR, PSU2_SENSOR_12V_CURR, PSU2_SENSOR_STBY_CURR, PSU2_SENSOR_IN_POWER, PSU2_SENSOR_12V_POWER, PSU2_SENSOR_STBY_POWER, PSU2_SENSOR_FAN_TACH, PSU2_SENSOR_TEMP1, PSU2_SENSOR_TEMP2, PSU2_SENSOR_TEMP3, PSU2_SENSOR_FAN2_TACH, }; enum { SLED_CLR_BLUE = 0x3, SLED_CLR_YELLOW = 0x4, SLED_CLR_GREEN = 0x5, SLED_CLR_RED = 0x6, SLED_CLR_OFF = 0x7, }; enum { SLED_SYS = 1, SLED_FAN = 2, SLED_PSU = 3, SLED_SMB = 4, }; // LED positon at front-panel // for all version except Wedge400 MP Respin enum { SLED_1 = 1, SLED_2 = 2, SLED_3 = 3, SLED_4 = 4, }; enum { SCM_LED_BLUE = 0x01, SCM_LED_AMBER = 0x05, }; // userver state use for set_scm_led() enum { USERVER_STATE_NONE = 0, USERVER_STATE_NORMAL, USERVER_STATE_POWER_OFF, USERVER_STATE_PING_DOWN, }; /* Add button function for Debug Card */ enum { HAND_SW_SERVER = 0, HAND_SW_BMC = 1 }; int pal_is_debug_card_prsnt(uint8_t *status); int pal_post_enable(uint8_t slot); int pal_post_get_last(uint8_t slot, uint8_t *status); int pal_post_get_last_and_len(uint8_t slot, uint8_t *data, uint8_t *len); int pal_set_com_pwr_btn_n(char *status); int pal_set_th3_power(int option); int pal_get_cpld_fpga_fw_ver(uint8_t fru, const char *device, uint8_t* ver); int pal_get_board_rev(int *rev); int pal_get_board_type(uint8_t *brd_type); int pal_get_full_board_type(uint8_t *full_brd_type); int pal_get_board_type_rev(uint8_t *brd_type_rev); int pal_get_board_id(uint8_t slot, uint8_t *req_data, uint8_t req_len, uint8_t *res_data, uint8_t *res_len); int pal_sensor_discrete_read_raw(uint8_t fru, uint8_t sensor_num, void *value); void *generate_dump(void *arg); void set_sys_led(int brd_rev); void set_fan_led(int brd_rev); void set_psu_led(int brd_rev); void set_scm_led(int brd_rev); int set_sled(int brd_rev, uint8_t color, int led_name); void init_led(void); int pal_light_scm_led(uint8_t led_color); int wedge400_sensor_name(uint8_t fru, uint8_t sensor_num, char *name); bool pal_is_mcu_working(void); int pal_get_hand_sw_physically(uint8_t *pos); int pal_get_hand_sw(uint8_t *pos); int pal_get_dbg_pwr_btn(uint8_t *status); int pal_get_dbg_rst_btn(uint8_t *status); int pal_get_dbg_uart_btn(uint8_t *status); int pal_clr_dbg_uart_btn(); int pal_switch_uart_mux(); #ifdef __cplusplus } // extern "C" #endif #endif /* __PAL_H__ */