Modify ag9064 platform module and add support psutil. (#3305)
Signed-off-by: johnson <JOHNSON.LU@deltaww.com>
This commit is contained in:
parent
a46df66d05
commit
3e6e037d67
78
device/delta/x86_64-delta_ag9064-r0/plugins/psuutil.py
Normal file
78
device/delta/x86_64-delta_ag9064-r0/plugins/psuutil.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#
|
||||||
|
# Module contains an implementation of SONiC PSU Base API and
|
||||||
|
# provides the PSUs status which are available in the platform
|
||||||
|
#
|
||||||
|
|
||||||
|
import os.path
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
try:
|
||||||
|
from sonic_psu.psu_base import PsuBase
|
||||||
|
except ImportError as e:
|
||||||
|
raise ImportError (str(e) + "- required module not found")
|
||||||
|
|
||||||
|
class PsuUtil(PsuBase):
|
||||||
|
"""Platform-specific PSUutil class"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
PsuBase.__init__(self)
|
||||||
|
self.psu_presence = "cat /sys/devices/platform/delta-ag9064-cpld.0/psu{}_scan"
|
||||||
|
self.psu_status = "cat /sys/devices/platform/delta-ag9064-swpld1.0/psu{}_pwr_ok"
|
||||||
|
|
||||||
|
def get_num_psus(self):
|
||||||
|
"""
|
||||||
|
Retrieves the number of PSUs available on the device
|
||||||
|
|
||||||
|
:return: An integer, the number of PSUs available on the device
|
||||||
|
"""
|
||||||
|
return 2
|
||||||
|
|
||||||
|
def get_psu_status(self, index):
|
||||||
|
"""
|
||||||
|
Retrieves the oprational status of power supply unit (PSU) defined
|
||||||
|
by 1-based index <index>
|
||||||
|
|
||||||
|
:param index: An integer, 1-based index of the PSU of which to query status
|
||||||
|
:return: Boolean, True if PSU is operating properly, False if PSU is faulty
|
||||||
|
"""
|
||||||
|
if index is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
status = 0
|
||||||
|
try:
|
||||||
|
p = os.popen(self.psu_status.format(index))
|
||||||
|
content = p.readline().rstrip()
|
||||||
|
reg_value = int(content)
|
||||||
|
if reg_value != 0:
|
||||||
|
return False
|
||||||
|
status = 1
|
||||||
|
p.close()
|
||||||
|
except IOError:
|
||||||
|
return False
|
||||||
|
return status == 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_psu_presence(self, index):
|
||||||
|
"""
|
||||||
|
Retrieves the presence status of power supply unit (PSU) defined
|
||||||
|
by 1-based index <index>
|
||||||
|
|
||||||
|
:param index: An integer, 1-based index of the PSU of which to query status
|
||||||
|
:return: Boolean, True if PSU is plugged, False if not
|
||||||
|
"""
|
||||||
|
if index is None:
|
||||||
|
return False
|
||||||
|
status = 0
|
||||||
|
try:
|
||||||
|
p = os.popen(self.psu_presence.format(index))
|
||||||
|
content = p.readline().rstrip()
|
||||||
|
reg_value = int(content, 16)
|
||||||
|
if reg_value != 0:
|
||||||
|
return False
|
||||||
|
status = 1
|
||||||
|
p.close()
|
||||||
|
except IOError:
|
||||||
|
return False
|
||||||
|
return status == 1
|
||||||
|
|
@ -17,7 +17,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
PORT_END = 63
|
PORT_END = 63
|
||||||
PORTS_IN_BLOCK = 64
|
PORTS_IN_BLOCK = 64
|
||||||
|
|
||||||
EEPROM_OFFSET = 20
|
EEPROM_OFFSET = 1
|
||||||
|
|
||||||
_port_to_eeprom_mapping = {}
|
_port_to_eeprom_mapping = {}
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ class SfpUtil(SfpUtilBase):
|
|||||||
return self._port_to_eeprom_mapping
|
return self._port_to_eeprom_mapping
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
eeprom_path = "/sys/class/i2c-adapter/i2c-{0}/{0}-0050/eeprom"
|
eeprom_path = "/sys/kernel/sfp/eeprom_sfp_{0}"
|
||||||
|
|
||||||
for x in range(0, self.port_end + 1):
|
for x in range(0, self.port_end + 1):
|
||||||
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
self._port_to_eeprom_mapping[x] = eeprom_path.format(x + self.EEPROM_OFFSET)
|
||||||
|
@ -14,8 +14,10 @@
|
|||||||
#define IPMI_MAX_INTF (4)
|
#define IPMI_MAX_INTF (4)
|
||||||
#define DELTA_NETFN 0x38
|
#define DELTA_NETFN 0x38
|
||||||
#define BMC_BUS_5 0x04
|
#define BMC_BUS_5 0x04
|
||||||
|
#define BMC_BUS_1 0x00
|
||||||
#define CMD_SETDATA 0x03
|
#define CMD_SETDATA 0x03
|
||||||
#define CMD_GETDATA 0x02
|
#define CMD_GETDATA 0x02
|
||||||
|
#define CMD_DEVICE_SCAN 0x01
|
||||||
|
|
||||||
#define CPUPLD_ADDR 0x31
|
#define CPUPLD_ADDR 0x31
|
||||||
#define SWPLD1_ADDR 0x35
|
#define SWPLD1_ADDR 0x35
|
||||||
@ -23,19 +25,27 @@
|
|||||||
#define SWPLD3_ADDR 0x33
|
#define SWPLD3_ADDR 0x33
|
||||||
#define SWPLD4_ADDR 0x32
|
#define SWPLD4_ADDR 0x32
|
||||||
#define QSFP_PORT_MUX_REG 0x13
|
#define QSFP_PORT_MUX_REG 0x13
|
||||||
|
#define PSU1_EEPROM_ADDR 0x50
|
||||||
|
#define PSU2_EEPROM_ADDR 0x51
|
||||||
|
|
||||||
#define DEFAULT_NUM 1
|
#define DEFAULT_NUM 1
|
||||||
#define BUS9_DEV_NUM 64
|
#define BUS9_DEV_NUM 64
|
||||||
#define BUS9_BASE_NUM 20
|
#define BUS9_BASE_NUM 20
|
||||||
|
#define EEPROM_SIZE 640
|
||||||
|
#define EEPROM_ARCH_SIZE 256
|
||||||
|
#define EEPROM_MASK 20
|
||||||
|
#define ATTR_R 1
|
||||||
|
#define ATTR_W 2
|
||||||
|
|
||||||
extern int dni_bmc_cmd(char set_cmd, char *cmd_data, int cmd_data_len);
|
extern int dni_bmc_cmd(char set_cmd, char *cmd_data, int cmd_data_len);
|
||||||
extern int dni_create_user(void);
|
extern int dni_create_user(void);
|
||||||
extern unsigned char dni_log2 (unsigned char num);
|
extern unsigned char dni_log2 (unsigned char num);
|
||||||
|
|
||||||
extern void device_release(struct device *dev);
|
extern void device_release(struct device *dev);
|
||||||
extern void msg_handler(struct ipmi_recv_msg *recv_msg,void* handler_data);
|
extern void msg_handler(struct ipmi_recv_msg *recv_msg,void* handler_data);
|
||||||
extern void dummy_smi_free(struct ipmi_smi_msg *msg);
|
extern void dummy_smi_free(struct ipmi_smi_msg *msg);
|
||||||
extern void dummy_recv_free(struct ipmi_recv_msg *msg);
|
extern void dummy_recv_free(struct ipmi_recv_msg *msg);
|
||||||
|
extern void dni_klock(void);
|
||||||
|
extern void dni_kunlock(void);
|
||||||
|
|
||||||
static ipmi_user_t ipmi_mh_user = NULL;
|
static ipmi_user_t ipmi_mh_user = NULL;
|
||||||
static struct ipmi_user_hndl ipmi_hndlrs = { .ipmi_recv_hndl = msg_handler,};
|
static struct ipmi_user_hndl ipmi_hndlrs = { .ipmi_recv_hndl = msg_handler,};
|
||||||
@ -129,6 +139,8 @@ enum cpld_attributes {
|
|||||||
SWPLD3_REG_VALUE,
|
SWPLD3_REG_VALUE,
|
||||||
SWPLD4_REG_ADDR,
|
SWPLD4_REG_ADDR,
|
||||||
SWPLD4_REG_VALUE,
|
SWPLD4_REG_VALUE,
|
||||||
|
PSU1_SCAN,
|
||||||
|
PSU2_SCAN,
|
||||||
//CPLD
|
//CPLD
|
||||||
CPLD_VER,
|
CPLD_VER,
|
||||||
CPU_BOARD_VER,
|
CPU_BOARD_VER,
|
||||||
@ -203,6 +215,73 @@ enum cpld_attributes {
|
|||||||
FAN_EEPROM_WP,
|
FAN_EEPROM_WP,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum sfp_attributes{
|
||||||
|
EEPROM_SFP_1,
|
||||||
|
EEPROM_SFP_2,
|
||||||
|
EEPROM_SFP_3,
|
||||||
|
EEPROM_SFP_4,
|
||||||
|
EEPROM_SFP_5,
|
||||||
|
EEPROM_SFP_6,
|
||||||
|
EEPROM_SFP_7,
|
||||||
|
EEPROM_SFP_8,
|
||||||
|
EEPROM_SFP_9,
|
||||||
|
EEPROM_SFP_10,
|
||||||
|
EEPROM_SFP_11,
|
||||||
|
EEPROM_SFP_12,
|
||||||
|
EEPROM_SFP_13,
|
||||||
|
EEPROM_SFP_14,
|
||||||
|
EEPROM_SFP_15,
|
||||||
|
EEPROM_SFP_16,
|
||||||
|
EEPROM_SFP_17,
|
||||||
|
EEPROM_SFP_18,
|
||||||
|
EEPROM_SFP_19,
|
||||||
|
EEPROM_SFP_20,
|
||||||
|
EEPROM_SFP_21,
|
||||||
|
EEPROM_SFP_22,
|
||||||
|
EEPROM_SFP_23,
|
||||||
|
EEPROM_SFP_24,
|
||||||
|
EEPROM_SFP_25,
|
||||||
|
EEPROM_SFP_26,
|
||||||
|
EEPROM_SFP_27,
|
||||||
|
EEPROM_SFP_28,
|
||||||
|
EEPROM_SFP_29,
|
||||||
|
EEPROM_SFP_30,
|
||||||
|
EEPROM_SFP_31,
|
||||||
|
EEPROM_SFP_32,
|
||||||
|
EEPROM_SFP_33,
|
||||||
|
EEPROM_SFP_34,
|
||||||
|
EEPROM_SFP_35,
|
||||||
|
EEPROM_SFP_36,
|
||||||
|
EEPROM_SFP_37,
|
||||||
|
EEPROM_SFP_38,
|
||||||
|
EEPROM_SFP_39,
|
||||||
|
EEPROM_SFP_40,
|
||||||
|
EEPROM_SFP_41,
|
||||||
|
EEPROM_SFP_42,
|
||||||
|
EEPROM_SFP_43,
|
||||||
|
EEPROM_SFP_44,
|
||||||
|
EEPROM_SFP_45,
|
||||||
|
EEPROM_SFP_46,
|
||||||
|
EEPROM_SFP_47,
|
||||||
|
EEPROM_SFP_48,
|
||||||
|
EEPROM_SFP_49,
|
||||||
|
EEPROM_SFP_50,
|
||||||
|
EEPROM_SFP_51,
|
||||||
|
EEPROM_SFP_52,
|
||||||
|
EEPROM_SFP_53,
|
||||||
|
EEPROM_SFP_54,
|
||||||
|
EEPROM_SFP_55,
|
||||||
|
EEPROM_SFP_56,
|
||||||
|
EEPROM_SFP_57,
|
||||||
|
EEPROM_SFP_58,
|
||||||
|
EEPROM_SFP_59,
|
||||||
|
EEPROM_SFP_60,
|
||||||
|
EEPROM_SFP_61,
|
||||||
|
EEPROM_SFP_62,
|
||||||
|
EEPROM_SFP_63,
|
||||||
|
EEPROM_SFP_64,
|
||||||
|
};
|
||||||
|
|
||||||
static struct cpld_attribute_data attribute_data[] = {
|
static struct cpld_attribute_data attribute_data[] = {
|
||||||
[CPLD_REG_ADDR] = {
|
[CPLD_REG_ADDR] = {
|
||||||
},
|
},
|
||||||
@ -564,4 +643,4 @@ static struct cpld_attribute_data attribute_data[] = {
|
|||||||
.reg = 0x15, .mask = 1 << 2,
|
.reg = 0x15, .mask = 1 << 2,
|
||||||
.note = "“1” = enables the lock-down mechanism.\n“0” = overrides the lock-down function enabling blocks to be erased or programmed using software commands."
|
.note = "“1” = enables the lock-down mechanism.\n“0” = overrides the lock-down function enabling blocks to be erased or programmed using software commands."
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -65,9 +65,10 @@ static ssize_t get_present(struct device *dev, struct device_attribute \
|
|||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_GETDATA;
|
set_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -119,6 +120,7 @@ static ssize_t get_present(struct device *dev, struct device_attribute \
|
|||||||
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
data |= (u64)(ret & 0xff) << 56;
|
data |= (u64)(ret & 0xff) << 56;
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%016llx\n", data);
|
return sprintf(buf, "0x%016llx\n", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,9 +132,10 @@ static ssize_t get_lpmode(struct device *dev, struct device_attribute \
|
|||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_GETDATA;
|
set_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -184,6 +187,8 @@ static ssize_t get_lpmode(struct device *dev, struct device_attribute \
|
|||||||
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
data |= (u64)(ret & 0xff) << 56;
|
data |= (u64)(ret & 0xff) << 56;
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return sprintf(buf, "0x%016llx\n", data);
|
return sprintf(buf, "0x%016llx\n", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,9 +200,10 @@ static ssize_t get_reset(struct device *dev, struct device_attribute \
|
|||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_GETDATA;
|
set_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -249,6 +255,8 @@ static ssize_t get_reset(struct device *dev, struct device_attribute \
|
|||||||
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
data |= (u64)(ret & 0xff) << 56;
|
data |= (u64)(ret & 0xff) << 56;
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return sprintf(buf, "0x%016llx\n", data);
|
return sprintf(buf, "0x%016llx\n", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,9 +268,10 @@ static ssize_t get_response(struct device *dev, struct device_attribute \
|
|||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_GETDATA;
|
set_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -314,6 +323,8 @@ static ssize_t get_response(struct device *dev, struct device_attribute \
|
|||||||
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
data |= (u64)(ret & 0xff) << 56;
|
data |= (u64)(ret & 0xff) << 56;
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return sprintf(buf, "0x%016llx\n", data);
|
return sprintf(buf, "0x%016llx\n", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,9 +336,10 @@ static ssize_t get_interrupt(struct device *dev, struct device_attribute \
|
|||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_GETDATA;
|
set_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -379,6 +391,8 @@ static ssize_t get_interrupt(struct device *dev, struct device_attribute \
|
|||||||
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
data |= (u64)(ret & 0xff) << 56;
|
data |= (u64)(ret & 0xff) << 56;
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return sprintf(buf, "0x%016llx\n", data);
|
return sprintf(buf, "0x%016llx\n", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -386,16 +400,19 @@ static ssize_t set_lpmode(struct device *dev, struct device_attribute *devattr,
|
|||||||
{
|
{
|
||||||
unsigned long long set_data;
|
unsigned long long set_data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = kstrtoull(buf, 16, &set_data);
|
|
||||||
if (err){
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_SETDATA;
|
set_cmd = CMD_SETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
|
err = kstrtoull(buf, 16, &set_data);
|
||||||
|
if (err){
|
||||||
|
dni_kunlock();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -446,6 +463,8 @@ static ssize_t set_lpmode(struct device *dev, struct device_attribute *devattr,
|
|||||||
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
||||||
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,17 +472,19 @@ static ssize_t set_reset(struct device *dev, struct device_attribute *devattr, c
|
|||||||
{
|
{
|
||||||
unsigned long long set_data;
|
unsigned long long set_data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = kstrtoull(buf, 16, &set_data);
|
|
||||||
if (err){
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_SETDATA;
|
set_cmd = CMD_SETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
|
err = kstrtoull(buf, 16, &set_data);
|
||||||
|
if (err){
|
||||||
|
dni_kunlock();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -514,6 +535,8 @@ static ssize_t set_reset(struct device *dev, struct device_attribute *devattr, c
|
|||||||
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
||||||
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -521,17 +544,19 @@ static ssize_t set_response(struct device *dev, struct device_attribute *devattr
|
|||||||
{
|
{
|
||||||
unsigned long long set_data;
|
unsigned long long set_data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = kstrtoull(buf, 16, &set_data);
|
|
||||||
if (err){
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
uint8_t cmd_data[4]={0};
|
uint8_t cmd_data[4]={0};
|
||||||
uint8_t set_cmd;
|
uint8_t set_cmd;
|
||||||
int cmd_data_len;
|
int cmd_data_len;
|
||||||
|
|
||||||
set_cmd = CMD_SETDATA;
|
set_cmd = CMD_SETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
|
err = kstrtoull(buf, 16, &set_data);
|
||||||
|
if (err){
|
||||||
|
dni_kunlock();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/*QSFP1~8*/
|
/*QSFP1~8*/
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -581,10 +606,38 @@ static ssize_t set_response(struct device *dev, struct device_attribute *devattr
|
|||||||
cmd_data[2] = QSFP_RESPONSE_8;
|
cmd_data[2] = QSFP_RESPONSE_8;
|
||||||
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
cmd_data[3] = ((set_data >> 56 ) & 0xff);
|
||||||
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
|
||||||
|
dni_kunlock();
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t psu_scan(struct device *dev, struct device_attribute *dev_attr, char *buf)
|
||||||
|
{
|
||||||
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
||||||
|
int ret;
|
||||||
|
uint8_t cmd_data[2]={0};
|
||||||
|
uint8_t set_cmd;
|
||||||
|
int cmd_data_len;
|
||||||
|
set_cmd = CMD_DEVICE_SCAN;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
cmd_data[0] = BMC_BUS_1;
|
||||||
|
switch (attr->index)
|
||||||
|
{
|
||||||
|
case PSU1_SCAN:
|
||||||
|
cmd_data[1] = PSU1_EEPROM_ADDR;
|
||||||
|
break;
|
||||||
|
case PSU2_SCAN:
|
||||||
|
cmd_data[1] = PSU2_EEPROM_ADDR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cmd_data_len = sizeof(cmd_data);
|
||||||
|
ret = dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
dni_kunlock();
|
||||||
|
return sprintf(buf, "0x%x\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t get_cpld_reg(struct device *dev, struct device_attribute *dev_attr, char *buf)
|
static ssize_t get_cpld_reg(struct device *dev, struct device_attribute *dev_attr, char *buf)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -594,12 +647,16 @@ static ssize_t get_cpld_reg(struct device *dev, struct device_attribute *dev_att
|
|||||||
unsigned char reg;
|
unsigned char reg;
|
||||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
||||||
struct cpld_platform_data *pdata = dev->platform_data;
|
struct cpld_platform_data *pdata = dev->platform_data;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
switch (attr->index) {
|
switch (attr->index) {
|
||||||
case CPLD_REG_ADDR:
|
case CPLD_REG_ADDR:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", cpupld_reg_addr);
|
return sprintf(buf, "0x%02x\n", cpupld_reg_addr);
|
||||||
case CPLD_REG_VALUE:
|
case CPLD_REG_VALUE:
|
||||||
ret = i2c_smbus_read_byte_data(pdata[system_cpld].client, cpupld_reg_addr);
|
ret = i2c_smbus_read_byte_data(pdata[system_cpld].client, cpupld_reg_addr);
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", ret);
|
return sprintf(buf, "0x%02x\n", ret);
|
||||||
case CPLD_VER ... OP_MODULE_INT:
|
case CPLD_VER ... OP_MODULE_INT:
|
||||||
reg = attribute_data[attr->index].reg;
|
reg = attribute_data[attr->index].reg;
|
||||||
@ -609,21 +666,28 @@ static ssize_t get_cpld_reg(struct device *dev, struct device_attribute *dev_att
|
|||||||
value = (value & mask);
|
value = (value & mask);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mask) {
|
switch (mask) {
|
||||||
case 0xFF:
|
case 0xFF:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x%s", value, note);
|
return sprintf(buf, "0x%02x%s", value, note);
|
||||||
case 0x0F:
|
case 0x0F:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
case 0xF0:
|
case 0xF0:
|
||||||
value = value >> 4;
|
value = value >> 4;
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
default :
|
default :
|
||||||
value = value >> dni_log2(mask);
|
value = value >> dni_log2(mask);
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d%s", value, note);
|
return sprintf(buf, "%d%s", value, note);
|
||||||
}
|
}
|
||||||
|
dni_kunlock();
|
||||||
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t set_cpld_reg(struct device *dev, struct device_attribute *dev_attr,
|
static ssize_t set_cpld_reg(struct device *dev, struct device_attribute *dev_attr,
|
||||||
@ -636,27 +700,32 @@ static ssize_t set_cpld_reg(struct device *dev, struct device_attribute *dev_att
|
|||||||
unsigned char reg;
|
unsigned char reg;
|
||||||
unsigned char mask;
|
unsigned char mask;
|
||||||
unsigned char mask_out;
|
unsigned char mask_out;
|
||||||
|
|
||||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
||||||
struct cpld_platform_data *pdata = dev->platform_data;
|
struct cpld_platform_data *pdata = dev->platform_data;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
err = kstrtoul(buf, 0, &set_data_ul);
|
err = kstrtoul(buf, 0, &set_data_ul);
|
||||||
if (err){
|
if (err){
|
||||||
|
dni_kunlock();
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_data = (int)set_data_ul;
|
set_data = (int)set_data_ul;
|
||||||
if (set_data > 0xff){
|
if (set_data > 0xff){
|
||||||
printk(KERN_ALERT "address out of range (0x00-0xFF)\n");
|
printk(KERN_ALERT "address out of range (0x00-0xFF)\n");
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (attr->index) {
|
switch (attr->index) {
|
||||||
case CPLD_REG_ADDR:
|
case CPLD_REG_ADDR:
|
||||||
cpupld_reg_addr = set_data;
|
cpupld_reg_addr = set_data;
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
case CPLD_REG_VALUE:
|
case CPLD_REG_VALUE:
|
||||||
i2c_smbus_write_byte_data(pdata[system_cpld].client, cpupld_reg_addr, set_data);
|
i2c_smbus_write_byte_data(pdata[system_cpld].client, cpupld_reg_addr, set_data);
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
case CPLD_VER ... OP_MODULE_INT:
|
case CPLD_VER ... OP_MODULE_INT:
|
||||||
reg = attribute_data[attr->index].reg;
|
reg = attribute_data[attr->index].reg;
|
||||||
@ -665,6 +734,7 @@ static ssize_t set_cpld_reg(struct device *dev, struct device_attribute *dev_att
|
|||||||
mask_out = value & ~(mask);
|
mask_out = value & ~(mask);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,6 +754,7 @@ static ssize_t set_cpld_reg(struct device *dev, struct device_attribute *dev_att
|
|||||||
}
|
}
|
||||||
|
|
||||||
i2c_smbus_write_byte_data(pdata[system_cpld].client, reg, set_data);
|
i2c_smbus_write_byte_data(pdata[system_cpld].client, reg, set_data);
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -712,6 +783,8 @@ static SENSOR_DEVICE_ATTR(mb_pwr, S_IRUGO, get_cpld_reg, NU
|
|||||||
static SENSOR_DEVICE_ATTR(mb_rst, S_IRUGO | S_IWUSR, get_cpld_reg, set_cpld_reg, MB_RST);
|
static SENSOR_DEVICE_ATTR(mb_rst, S_IRUGO | S_IWUSR, get_cpld_reg, set_cpld_reg, MB_RST);
|
||||||
static SENSOR_DEVICE_ATTR(psu_fan_int, S_IRUGO, get_cpld_reg, NULL, PSU_FAN_INT);
|
static SENSOR_DEVICE_ATTR(psu_fan_int, S_IRUGO, get_cpld_reg, NULL, PSU_FAN_INT);
|
||||||
static SENSOR_DEVICE_ATTR(op_module_int, S_IRUGO, get_cpld_reg, NULL, OP_MODULE_INT);
|
static SENSOR_DEVICE_ATTR(op_module_int, S_IRUGO, get_cpld_reg, NULL, OP_MODULE_INT);
|
||||||
|
static SENSOR_DEVICE_ATTR(psu1_scan, S_IRUGO, psu_scan, NULL, PSU1_SCAN);
|
||||||
|
static SENSOR_DEVICE_ATTR(psu2_scan, S_IRUGO, psu_scan, NULL, PSU2_SCAN);
|
||||||
|
|
||||||
static struct attribute *ag9064_cpld_attrs[] = {
|
static struct attribute *ag9064_cpld_attrs[] = {
|
||||||
&dev_attr_qsfp_present.attr,
|
&dev_attr_qsfp_present.attr,
|
||||||
@ -738,6 +811,8 @@ static struct attribute *ag9064_cpld_attrs[] = {
|
|||||||
&sensor_dev_attr_mb_rst.dev_attr.attr,
|
&sensor_dev_attr_mb_rst.dev_attr.attr,
|
||||||
&sensor_dev_attr_psu_fan_int.dev_attr.attr,
|
&sensor_dev_attr_psu_fan_int.dev_attr.attr,
|
||||||
&sensor_dev_attr_op_module_int.dev_attr.attr,
|
&sensor_dev_attr_op_module_int.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_psu1_scan.dev_attr.attr,
|
||||||
|
&sensor_dev_attr_psu2_scan.dev_attr.attr,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -823,11 +898,6 @@ static int __init delta_ag9064_cpupld_init(void)
|
|||||||
int ret;
|
int ret;
|
||||||
printk(KERN_WARNING "ag9064_platform_cpupld module initialization\n");
|
printk(KERN_WARNING "ag9064_platform_cpupld module initialization\n");
|
||||||
|
|
||||||
ret = dni_create_user();
|
|
||||||
if (ret != 0){
|
|
||||||
printk(KERN_WARNING "Fail to create IPMI user\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// set the CPUPLD prob and remove
|
// set the CPUPLD prob and remove
|
||||||
ret = platform_driver_register(&cpld_driver);
|
ret = platform_driver_register(&cpld_driver);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -52,6 +52,7 @@ static ssize_t get_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
uint8_t get_cmd;
|
uint8_t get_cmd;
|
||||||
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr);
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
cmd_data_len = sizeof(cmd_data);
|
cmd_data_len = sizeof(cmd_data);
|
||||||
get_cmd = CMD_GETDATA;
|
get_cmd = CMD_GETDATA;
|
||||||
cmd_data[0] = BMC_BUS_5;
|
cmd_data[0] = BMC_BUS_5;
|
||||||
@ -62,12 +63,16 @@ static ssize_t get_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
if (attr->index <= SWPLD4_REG_VALUE){
|
if (attr->index <= SWPLD4_REG_VALUE){
|
||||||
switch (attr->index) {
|
switch (attr->index) {
|
||||||
case SWPLD1_REG_ADDR:
|
case SWPLD1_REG_ADDR:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", swpld1_reg_addr);
|
return sprintf(buf, "0x%02x\n", swpld1_reg_addr);
|
||||||
case SWPLD2_REG_ADDR:
|
case SWPLD2_REG_ADDR:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", swpld2_reg_addr);
|
return sprintf(buf, "0x%02x\n", swpld2_reg_addr);
|
||||||
case SWPLD3_REG_ADDR:
|
case SWPLD3_REG_ADDR:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", swpld3_reg_addr);
|
return sprintf(buf, "0x%02x\n", swpld3_reg_addr);
|
||||||
case SWPLD4_REG_ADDR:
|
case SWPLD4_REG_ADDR:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", swpld4_reg_addr);
|
return sprintf(buf, "0x%02x\n", swpld4_reg_addr);
|
||||||
case SWPLD1_REG_VALUE:
|
case SWPLD1_REG_VALUE:
|
||||||
cmd_data[1] = SWPLD1_ADDR;
|
cmd_data[1] = SWPLD1_ADDR;
|
||||||
@ -86,10 +91,12 @@ static ssize_t get_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
cmd_data[2] = swpld4_reg_addr;
|
cmd_data[2] = swpld4_reg_addr;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
ret = dni_bmc_cmd(get_cmd, cmd_data, cmd_data_len);
|
ret = dni_bmc_cmd(get_cmd, cmd_data, cmd_data_len);
|
||||||
ret = ret & 0xff;
|
ret = ret & 0xff;
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x\n", ret);
|
return sprintf(buf, "0x%02x\n", ret);
|
||||||
}else{
|
}else{
|
||||||
|
|
||||||
@ -107,6 +114,7 @@ static ssize_t get_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
cmd_data[1] = SWPLD4_ADDR;
|
cmd_data[1] = SWPLD4_ADDR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
cmd_data[2] = attribute_data[attr->index].reg;
|
cmd_data[2] = attribute_data[attr->index].reg;
|
||||||
@ -114,23 +122,31 @@ static ssize_t get_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
value = value & mask;
|
value = value & mask;
|
||||||
switch (mask) {
|
switch (mask) {
|
||||||
case 0xFF:
|
case 0xFF:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%02x%s", value, note);
|
return sprintf(buf, "0x%02x%s", value, note);
|
||||||
case 0x0F:
|
case 0x0F:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
case 0xF0:
|
case 0xF0:
|
||||||
value = value >> 4;
|
value = value >> 4;
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
case 0xC0:
|
case 0xC0:
|
||||||
value = value >> 6;
|
value = value >> 6;
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
case 0x30:
|
case 0x30:
|
||||||
value = value >> 4;
|
value = value >> 4;
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "0x%01x%s", value, note);
|
return sprintf(buf, "0x%01x%s", value, note);
|
||||||
default :
|
default :
|
||||||
value = value >> dni_log2(mask);
|
value = value >> dni_log2(mask);
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d%s", value, note);
|
return sprintf(buf, "%d%s", value, note);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dni_kunlock();
|
||||||
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_attr,
|
static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_attr,
|
||||||
@ -152,13 +168,17 @@ static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
set_cmd = CMD_SETDATA;
|
set_cmd = CMD_SETDATA;
|
||||||
get_cmd = CMD_GETDATA;
|
get_cmd = CMD_GETDATA;
|
||||||
|
|
||||||
|
dni_klock();
|
||||||
|
|
||||||
err = kstrtoul(buf, 0, &set_data_ul);
|
err = kstrtoul(buf, 0, &set_data_ul);
|
||||||
if (err){
|
if (err){
|
||||||
|
dni_kunlock();
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (set_data > 0xff){
|
if (set_data > 0xff){
|
||||||
printk(KERN_ALERT "address out of range (0x00-0xFF)\n");
|
printk(KERN_ALERT "address out of range (0x00-0xFF)\n");
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,15 +190,19 @@ static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
//reg_addr
|
//reg_addr
|
||||||
case SWPLD1_REG_ADDR:
|
case SWPLD1_REG_ADDR:
|
||||||
swpld1_reg_addr = set_data;
|
swpld1_reg_addr = set_data;
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
case SWPLD2_REG_ADDR:
|
case SWPLD2_REG_ADDR:
|
||||||
swpld2_reg_addr = set_data;
|
swpld2_reg_addr = set_data;
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
case SWPLD3_REG_ADDR:
|
case SWPLD3_REG_ADDR:
|
||||||
swpld3_reg_addr = set_data;
|
swpld3_reg_addr = set_data;
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
case SWPLD4_REG_ADDR:
|
case SWPLD4_REG_ADDR:
|
||||||
swpld4_reg_addr = set_data;
|
swpld4_reg_addr = set_data;
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
//reg_value
|
//reg_value
|
||||||
case SWPLD1_REG_VALUE:
|
case SWPLD1_REG_VALUE:
|
||||||
@ -198,9 +222,11 @@ static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
cmd_data[2] = swpld4_reg_addr;
|
cmd_data[2] = swpld4_reg_addr;
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -222,6 +248,7 @@ static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
cmd_data[1] = SWPLD4_ADDR;
|
cmd_data[1] = SWPLD4_ADDR;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
dni_kunlock();
|
||||||
return sprintf(buf, "%d not found", attr->index);
|
return sprintf(buf, "%d not found", attr->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,8 +279,11 @@ static ssize_t set_swpld_reg(struct device *dev, struct device_attribute *dev_at
|
|||||||
set_data = mask_out | (set_data << dni_log2(mask) );
|
set_data = mask_out | (set_data << dni_log2(mask) );
|
||||||
}
|
}
|
||||||
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
dni_bmc_cmd(set_cmd, cmd_data, cmd_data_len);
|
||||||
|
dni_kunlock();
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
dni_kunlock();
|
||||||
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SWPLD
|
//SWPLD
|
||||||
@ -524,11 +554,6 @@ static int __init delta_ag9064_swpld_init(void)
|
|||||||
int ret;
|
int ret;
|
||||||
printk(KERN_WARNING "ag9064_platform_swpld module initialization\n");
|
printk(KERN_WARNING "ag9064_platform_swpld module initialization\n");
|
||||||
|
|
||||||
ret = dni_create_user();
|
|
||||||
if (ret != 0){
|
|
||||||
printk(KERN_WARNING "Fail to create IPMI user\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// set the SWPLD prob and remove
|
// set the SWPLD prob and remove
|
||||||
ret = platform_driver_register(&swpld1_driver);
|
ret = platform_driver_register(&swpld1_driver);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -14,6 +14,18 @@
|
|||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
echo -n "Setting up board... "
|
echo -n "Setting up board... "
|
||||||
|
if [ `grep -c usemsi /etc/init.d/opennsl-modules` = "0" ]; then
|
||||||
|
sed -i "s/debug=4 dma_debug=1/debug=4 dma_debug=1 usemsi=1/g" /etc/init.d/opennsl-modules
|
||||||
|
rmmod linux_knet_cb
|
||||||
|
rmmod linux_bcm_knet
|
||||||
|
rmmod linux_user_bde
|
||||||
|
rmmod linux_kernel_bde
|
||||||
|
/etc/init.d/opennsl-modules start
|
||||||
|
modprobe linux_kernel_bde
|
||||||
|
modprobe linux_user_bde
|
||||||
|
modprobe linux_bcm_knet
|
||||||
|
modprobe linux_knet_cb
|
||||||
|
fi
|
||||||
depmod -a
|
depmod -a
|
||||||
rmmod i2c-i801
|
rmmod i2c-i801
|
||||||
rmmod i2c-ismt
|
rmmod i2c-ismt
|
||||||
|
Reference in New Issue
Block a user