Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update sw-to3200k and 6512-32r platform driver #15210

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,23 @@
#define QSFP_DD_RX_LOS_OFFSET 0x13
#define QSFP_DD_TX_FAULT_OFFSET 0x7
#define QSFP_DD_DISABLE_OFFSET 0x2
#define QSFP_DD_POWER_MODE_OFFSET 0x1a

#define QSFP_DD_GRID_OFFSET 128
#define QSFP_DD_FREQ_OFFSET 136
#define QSFP_DD_OUTP_OFFSET 200

#define QSFP28_DOM_BULK_DATA_OFFSET 0x16
#define QSFP28_RX_LOS_OFFSET 0x3
#define QSFP28_TX_FAULT_OFFSET 0x4
#define QSFP28_DISABLE_OFFSET 0x56
#define QSFP28_POWER_MODE_OFFSET 0x5d


/* QSFP-DD: page0 (low page + high page (128+128 byte)), page 1/2/3/10/11 (high page (128 byte))*/
#define EEPROM_DATA_SIZE 256
#define EEPROM3_DATA_SIZE 384
#define EEPROM_ONE_PAGE_DATA_SIZE 128

/* Addresses scanned */
static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
Expand All @@ -60,6 +67,12 @@ enum sysfs_oom_attributes {
OOM_CHAN_RX_LOS,
OOM_CHAN_TX_FAULT,
OOM_CHAN_DISABLE,
OOM_POWER_MODE,
OOM_EEPROM_PG4,
OOM_EEPROM_PG12,
OOM_GRID,
OOM_FREQ,
OOM_OUTPUT_POWER,
OOM_ATTR_MAX
};

Expand All @@ -82,6 +95,13 @@ struct wistron_oom_data {
int rx_los;
int tx_fault;
int disable;
int power_mode;

unsigned char eeprom_pg4[EEPROM_ONE_PAGE_DATA_SIZE];
unsigned char eeprom_pg12[EEPROM_ONE_PAGE_DATA_SIZE];
int grid;
int freq;
int outp;
};

/* sysfs attributes for hwmon */
Expand All @@ -102,6 +122,9 @@ static ssize_t set_qsfp_dd_chan_mon(struct device *dev, struct device_attribute
static ssize_t get_qsfp_dom_bulk(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t set_qsfp_dom_bulk(struct device *dev, struct device_attribute *da, const char *buf, size_t count);

static ssize_t get_oom_info_one_page(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t set_oom_info_one_page(struct device *dev, struct device_attribute *da, const char *buf, size_t count);


static SENSOR_DEVICE_ATTR(lp_mode, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_LP_MODE);
static SENSOR_DEVICE_ATTR(temp, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_TEMP);
Expand All @@ -116,6 +139,13 @@ static SENSOR_DEVICE_ATTR(volte, S_IWUSR | S_IRUGO, get_t_v_e, set_t_v_e, OOM_VO
static SENSOR_DEVICE_ATTR(rx_los, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_CHAN_RX_LOS);
static SENSOR_DEVICE_ATTR(tx_fault, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_CHAN_TX_FAULT);
static SENSOR_DEVICE_ATTR(disable, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_CHAN_DISABLE);
static SENSOR_DEVICE_ATTR(power_mode, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_POWER_MODE);

static SENSOR_DEVICE_ATTR(eeprom_pg4, S_IWUSR | S_IRUGO, get_oom_info_one_page, set_oom_info_one_page, OOM_EEPROM_PG4);
static SENSOR_DEVICE_ATTR(eeprom_pg12, S_IWUSR | S_IRUGO, get_oom_info_one_page, set_oom_info_one_page, OOM_EEPROM_PG12);
static SENSOR_DEVICE_ATTR(grid, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_GRID);
static SENSOR_DEVICE_ATTR(freq, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_FREQ);
static SENSOR_DEVICE_ATTR(output_power, S_IWUSR | S_IRUGO, get_oom_value, set_oom_value, OOM_OUTPUT_POWER);

static struct attribute *wistron_oom_attributes[] = {
&sensor_dev_attr_lp_mode.dev_attr.attr,
Expand All @@ -131,6 +161,13 @@ static struct attribute *wistron_oom_attributes[] = {
&sensor_dev_attr_rx_los.dev_attr.attr,
&sensor_dev_attr_tx_fault.dev_attr.attr,
&sensor_dev_attr_disable.dev_attr.attr,
&sensor_dev_attr_power_mode.dev_attr.attr,

&sensor_dev_attr_eeprom_pg4.dev_attr.attr,
&sensor_dev_attr_eeprom_pg12.dev_attr.attr,
&sensor_dev_attr_grid.dev_attr.attr,
&sensor_dev_attr_freq.dev_attr.attr,
&sensor_dev_attr_output_power.dev_attr.attr,
NULL
};

Expand Down Expand Up @@ -158,6 +195,18 @@ static ssize_t get_oom_value(struct device *dev, struct device_attribute *da, ch
case OOM_CHAN_DISABLE:
value = data->disable;
break;
case OOM_POWER_MODE:
value = data->power_mode;
break;
case OOM_FREQ:
value = data->freq;
break;
case OOM_OUTPUT_POWER:
value = data->outp;
break;
case OOM_GRID:
value = data->grid;
break;
default:
value = data->temp;
break;
Expand Down Expand Up @@ -210,6 +259,33 @@ static ssize_t set_oom_value(struct device *dev, struct device_attribute *da, co
if (data->eeprom1[0] == QSFP28_TYPE)
data->eeprom1[LOWER_PAGE_OFFSET + QSFP28_DISABLE_OFFSET] = value;
break;
case OOM_POWER_MODE:
data->power_mode = value;
if (data->eeprom1[0] == QSFP_DD_TYPE)
data->eeprom1[LOWER_PAGE_OFFSET + QSFP_DD_POWER_MODE_OFFSET] = value;
if (data->eeprom1[0] == QSFP28_TYPE)
data->eeprom1[LOWER_PAGE_OFFSET + QSFP28_POWER_MODE_OFFSET] = value;
break;
case OOM_FREQ:
data->freq = value;
if (data->eeprom1[0] == QSFP_DD_TYPE) {
data->eeprom_pg12[QSFP_DD_FREQ_OFFSET - EEPROM_ONE_PAGE_DATA_SIZE] = (value & 0xff00) >> 8;
data->eeprom_pg12[QSFP_DD_FREQ_OFFSET - EEPROM_ONE_PAGE_DATA_SIZE + 1] = (value & 0xff);
}
break;
case OOM_OUTPUT_POWER:
data->outp = value;
if (data->eeprom1[0] == QSFP_DD_TYPE) {
data->eeprom_pg12[QSFP_DD_OUTP_OFFSET - EEPROM_ONE_PAGE_DATA_SIZE] = (value & 0xff00) >> 8;
data->eeprom_pg12[QSFP_DD_OUTP_OFFSET - EEPROM_ONE_PAGE_DATA_SIZE + 1] = (value & 0xff);
}
break;
case OOM_GRID:
data->grid = value;
if (data->eeprom1[0] == QSFP_DD_TYPE) {
data->eeprom_pg12[QSFP_DD_GRID_OFFSET - EEPROM_ONE_PAGE_DATA_SIZE] = value;
}
break;
default:
data->temp = value;
break;
Expand All @@ -219,6 +295,99 @@ static ssize_t set_oom_value(struct device *dev, struct device_attribute *da, co
return count;
}

static ssize_t get_oom_info_one_page(struct device *dev, struct device_attribute *da, char *buf)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct i2c_client *client = to_i2c_client(dev);
struct wistron_oom_data *data = i2c_get_clientdata(client);

mutex_lock(&data->lock);
switch (attr->index)
{
case OOM_EEPROM_PG4:
{
memcpy(buf, data->eeprom_pg4, EEPROM_ONE_PAGE_DATA_SIZE);
break;
}
case OOM_EEPROM_PG12:
{
memcpy(buf, data->eeprom_pg12, EEPROM_ONE_PAGE_DATA_SIZE);
break;
}
}
mutex_unlock(&data->lock);
return EEPROM_ONE_PAGE_DATA_SIZE;
}

static ssize_t set_oom_info_one_page(struct device *dev, struct device_attribute *da, const char *buf, size_t size)
{
struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
struct i2c_client *client = to_i2c_client(dev);
struct wistron_oom_data *data = i2c_get_clientdata(client);
int i=0, j=0, k=0;
unsigned char str[3];
unsigned int val;

k=0;
mutex_lock(&data->lock);
memzero_explicit(str, sizeof(str));
if (strlen(buf) >= EEPROM_ONE_PAGE_DATA_SIZE)
{
for (i=0; i < strlen(buf) ; i++)
{
for (j=0;j<2; j++)
{
str[j]=buf[i+j];
}
sscanf(str, "%x", &val);
i=j+i-1;
if (k>=EEPROM_ONE_PAGE_DATA_SIZE)
{
break;
}

switch (attr->index)
{
case OOM_EEPROM_PG4:
{
data->eeprom_pg4[k]=(unsigned char)val;
break;
}
case OOM_EEPROM_PG12:
{
data->eeprom_pg12[k]=(unsigned char)val;
break;
}
default:
break;
}

k++;
}
}
else
{
switch (attr->index)
{
case OOM_EEPROM_PG4:
{
memzero_explicit(&data->eeprom_pg4, sizeof(data->eeprom_pg4));
break;
}
case OOM_EEPROM_PG12:
{
memzero_explicit(&data->eeprom_pg12, sizeof(data->eeprom_pg12));
break;
}
default:
break;
}
}

mutex_unlock(&data->lock);
return size;
}

static ssize_t get_oom_info1(struct device *dev, struct device_attribute *da, char *buf)
{
struct i2c_client *client = to_i2c_client(dev);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ struct wistron_psu_data {
long p_in;
long p_out;
int temp_input;
unsigned int temp_max;
unsigned int temp_crit;
int pwm;
int fault;
u8 mfr_id[MFR_VENDOR_NAME_LENGTH];
Expand All @@ -60,6 +62,8 @@ enum wistron_psu_sysfs_attributes {
PSU_P_IN,
PSU_P_OUT,
PSU_TEMP1_INPUT,
PSU_TEMP1_MAX,
PSU_TEMP1_CRIT,
PSU_PWM,
PSU_FAULT,
PSU_MFR_ID,
Expand All @@ -78,6 +82,8 @@ static SENSOR_DEVICE_ATTR(curr2_input, S_IWUSR | S_IRUGO, get_value, set_valu
static SENSOR_DEVICE_ATTR(power1_input, S_IWUSR | S_IRUGO, get_value, set_value, PSU_P_IN);
static SENSOR_DEVICE_ATTR(power2_input, S_IWUSR | S_IRUGO, get_value, set_value, PSU_P_OUT);
static SENSOR_DEVICE_ATTR(temp1_input, S_IWUSR | S_IRUGO, get_value, set_value, PSU_TEMP1_INPUT);
static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, get_value, set_value, PSU_TEMP1_MAX);
static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, get_value, set_value, PSU_TEMP1_CRIT);
static SENSOR_DEVICE_ATTR(pwm, S_IWUSR | S_IRUGO, get_value, set_value, PSU_PWM);
static SENSOR_DEVICE_ATTR(fault, S_IWUSR | S_IRUGO, get_value, set_value, PSU_FAULT);
static SENSOR_DEVICE_ATTR(vendor, S_IWUSR | S_IRUGO, get_value, set_value, PSU_MFR_ID);
Expand All @@ -96,6 +102,8 @@ static struct attribute *wistron_psu_attributes[] = {
&sensor_dev_attr_power1_input.dev_attr.attr,
&sensor_dev_attr_power2_input.dev_attr.attr,
&sensor_dev_attr_temp1_input.dev_attr.attr,
&sensor_dev_attr_temp1_max.dev_attr.attr,
&sensor_dev_attr_temp1_crit.dev_attr.attr,
&sensor_dev_attr_pwm.dev_attr.attr,
&sensor_dev_attr_fault.dev_attr.attr,
&sensor_dev_attr_vendor.dev_attr.attr,
Expand Down Expand Up @@ -179,6 +187,12 @@ static ssize_t get_value(struct device *dev, struct device_attribute *da, char *
case PSU_TEMP1_INPUT:
ret_count = sprintf(buf, "%d", data->temp_input);
break;
case PSU_TEMP1_MAX:
ret_count = sprintf(buf, "%d", data->temp_max);
break;
case PSU_TEMP1_CRIT:
ret_count = sprintf(buf, "%d", data->temp_crit);
break;
case PSU_PWM:
ret_count = sprintf(buf, "%d", data->pwm);
break;
Expand Down Expand Up @@ -251,6 +265,16 @@ static ssize_t set_value(struct device *dev, struct device_attribute *da, const
if (error)
goto exit_err;
break;
case PSU_TEMP1_MAX:
error = kstrtoint(buf, 10, &data->temp_max);
if (error)
goto exit_err;
break;
case PSU_TEMP1_CRIT:
error = kstrtoint(buf, 10, &data->temp_crit);
if (error)
goto exit_err;
break;
case PSU_PWM:
error = kstrtoint(buf, 10, &data->pwm);
if (error)
Expand Down
Empty file.
6 changes: 3 additions & 3 deletions platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/chassis.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
NUM_FAN = 14
NUM_FANTRAY = 7
NUM_PSU = 2
NUM_THERMAL = 8
NUM_THERMAL = 12
NUM_SFP = 32
NUM_COMPONENT = 6
HOST_REBOOT_CAUSE_PATH = "/host/reboot-cause/"
Expand Down Expand Up @@ -184,9 +184,9 @@ def get_name(self):
def get_sfp(self, index):
sfp = None
try:
sfp = self._sfp_list[index]
sfp = self._sfp_list[index - 1]
except IndexError:
sys.stderr.write("SFP index {} out of range (0-{})\n".format(index, len(self._sfp_list)-1))
sys.stderr.write("SFP index {} out of range (1-{})\n".format(index, len(self._sfp_list)))

return sfp

Expand Down
6 changes: 3 additions & 3 deletions platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/component.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def __get_cpld_version(self):
try:
cpld_path = "{}{}{}".format(SYSFS_PATH, CPLD_ADDR_MAPPING[cpld_name], '/version')
cpld_version_raw= int(self.__read_txt_file(cpld_path), 10)
cpld_version[cpld_name] = "{} {}".format("MP" if (cpld_version_raw & 0x10) else "Proto", cpld_version_raw & 0xf)
cpld_version[cpld_name] = "{}.{}".format((cpld_version_raw & 0xf0) >> 4, cpld_version_raw & 0xf)
except Exception as e:
print('Get exception when read cpld')
cpld_version[cpld_name] = 'None'
Expand Down Expand Up @@ -122,13 +122,13 @@ def __get_fpga_version(self):
try:
fpga_path = "{}{}{}".format(SYSFS_PATH, FPGA_ADDR_MAPPING['MB_FPGA'], '/version')
fpga_version_raw= int(self.__read_txt_file(fpga_path), 10)
fpga_version["MB_FPGA"] = "{} {}.{}".format("Formal" if (fpga_version_raw & 0x80) else "Test", ((fpga_version_raw & 0x70) >> 4), fpga_version_raw & 0xf)
fpga_version["MB_FPGA"] = "{}.{}.{}".format((fpga_version_raw & 0x80) >> 7, ((fpga_version_raw & 0x70) >> 4), fpga_version_raw & 0xf)
except Exception as e:
print('Get exception when read fpga')
fpga_version["MB_FPGA"] = 'None'

fpga_version_raw= int(self.__get_cpu_fpga_ver(), 16)
fpga_version["CPU_FPGA"] = "{} {}.{}".format("Formal" if (fpga_version_raw & 0x80) else "Test", ((fpga_version_raw & 0x70) >> 4), fpga_version_raw & 0xf)
fpga_version["CPU_FPGA"] = "{}.{}.{}".format((fpga_version_raw & 0x80) >> 7, ((fpga_version_raw & 0x70) >> 4), fpga_version_raw & 0xf)

return fpga_version

Expand Down
Empty file.
2 changes: 1 addition & 1 deletion platform/innovium/sonic-platform-modules-wistron/6512-32r/sonic_platform/fan.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def get_direction(self):
if direction is None:
return self.FAN_DIRECTION_EXHAUST

return self.FAN_DIRECTION_EXHAUST if int(direction) == 0 else self.FAN_DIRECTION_INTAKE
return self.FAN_DIRECTION_EXHAUST if int(direction) == 1 else self.FAN_DIRECTION_INTAKE


def get_speed(self):
Expand Down
Empty file.
Empty file.