diff --git a/ixr7250x4/modules/Makefile b/ixr7250x4/modules/Makefile index 8feec61..6609b21 100644 --- a/ixr7250x4/modules/Makefile +++ b/ixr7250x4/modules/Makefile @@ -1 +1 @@ -obj-m := psu_x3b.o psu_eeprom.o fan_eeprom.o fan_led.o max31790_wd.o +obj-m := psu_verm.o psu_verm_eeprom.o fan_verm_eeprom.o fan_verm_led.o max31790_wd.o diff --git a/ixr7250x4/modules/fan_eeprom.c b/ixr7250x4/modules/fan_verm_eeprom.c similarity index 90% rename from ixr7250x4/modules/fan_eeprom.c rename to ixr7250x4/modules/fan_verm_eeprom.c index ca6066f..6e3e4fe 100644 --- a/ixr7250x4/modules/fan_eeprom.c +++ b/ixr7250x4/modules/fan_verm_eeprom.c @@ -15,7 +15,7 @@ #include #include -#define EEPROM_NAME "fan_eeprom" +#define EEPROM_NAME "fan_verm_eeprom" #define EEPROM_LEN 128 #define FIELD_LEN_MAX 16 @@ -74,64 +74,64 @@ static int decode_eeprom(struct i2c_client *client) { struct menuee_data *ee_data = i2c_get_clientdata(client); int i = 0; - int len; - int cpylen; + u8 len = 0; + int cpylen = 0; while (i < EEPROM_LEN) { switch (ee_data->eeprom[i]) { case kEeCleiCode: i++; len = ee_data->eeprom[i++]; - if (len <= FIELD_LEN_MAX) + if (len < FIELD_LEN_MAX) cpylen = len; - else - cpylen = FIELD_LEN_MAX; + else + cpylen = FIELD_LEN_MAX - 1; memcpy(&ee_data->clei[0], &ee_data->eeprom[i], cpylen); - ee_data->clei[len] = 0; + ee_data->clei[cpylen] = 0; i += len; break; case kMfgDate: i++; len = ee_data->eeprom[i++]; - if (len <= FIELD_LEN_MAX) + if (len < FIELD_LEN_MAX) cpylen = len; - else - cpylen = FIELD_LEN_MAX; + else + cpylen = FIELD_LEN_MAX - 1; memcpy(&ee_data->mfg_date[0], &ee_data->eeprom[i], cpylen); - ee_data->mfg_date[len] = 0; + ee_data->mfg_date[cpylen] = 0; i += len; break; case kMfgSerialNum: i++; len = ee_data->eeprom[i++]; - if (len <= FIELD_LEN_MAX) + if (len < FIELD_LEN_MAX) cpylen = len; - else - cpylen = FIELD_LEN_MAX; + else + cpylen = FIELD_LEN_MAX - 1; memcpy(&ee_data->serial_number[0], &ee_data->eeprom[i], cpylen); - ee_data->serial_number[len] = 0; + ee_data->serial_number[cpylen] = 0; i += len; break; case kMfgPartNum: i++; len = ee_data->eeprom[i++]; - if (len <= FIELD_LEN_MAX) + if (len < FIELD_LEN_MAX) cpylen = len; - else - cpylen = FIELD_LEN_MAX; + else + cpylen = FIELD_LEN_MAX - 1; memcpy(&ee_data->part_number[0], &ee_data->eeprom[i], cpylen); - ee_data->part_number[len] = 0; + ee_data->part_number[cpylen] = 0; i += len; break; case kMfgAssemblyNum: i++; len = ee_data->eeprom[i++]; - if (len <= FIELD_LEN_MAX) + if (len < FIELD_LEN_MAX) cpylen = len; - else - cpylen = FIELD_LEN_MAX; + else + cpylen = FIELD_LEN_MAX - 1; memcpy(&ee_data->assembly_num[0], &ee_data->eeprom[i], cpylen); - ee_data->assembly_num[len] = 0; + ee_data->assembly_num[cpylen] = 0; i += len; break; case kHwDirectives: @@ -171,7 +171,7 @@ static ssize_t eeprom_show(struct device *dev, struct device_attribute *devattr, { struct menuee_data *data = dev_get_drvdata(dev); int i = 0; - int len; + int len = 0; for (i = 0; i < EEPROM_LEN; i++) { if (data->eeprom[i] == 0) len += sprintf(buf + len, "."); @@ -272,7 +272,6 @@ static int eeprom_probe(struct i2c_client *client) return -ENOMEM; } - //data->client = client; i2c_set_clientdata(client, data); mutex_init(&data->lock); @@ -314,12 +313,12 @@ static struct i2c_driver eeprom_driver = { .address_list = normal_i2c, }; -static int __init fan_eeprom_init(void) +static int __init fan_verm_eeprom_init(void) { return i2c_add_driver(&eeprom_driver); } -static void __exit fan_eeprom_exit(void) +static void __exit fan_verm_eeprom_exit(void) { i2c_del_driver(&eeprom_driver); } @@ -328,5 +327,5 @@ MODULE_DESCRIPTION("FAN eeprom sysfs driver"); MODULE_AUTHOR("Nokia"); MODULE_LICENSE("GPL"); -module_init(fan_eeprom_init); -module_exit(fan_eeprom_exit); \ No newline at end of file +module_init(fan_verm_eeprom_init); +module_exit(fan_verm_eeprom_exit); \ No newline at end of file diff --git a/ixr7250x4/modules/fan_led.c b/ixr7250x4/modules/fan_verm_led.c similarity index 93% rename from ixr7250x4/modules/fan_led.c rename to ixr7250x4/modules/fan_verm_led.c index 5bdf9dd..b124ec5 100644 --- a/ixr7250x4/modules/fan_led.c +++ b/ixr7250x4/modules/fan_verm_led.c @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Nokia 7250-IXR X Fan LED Driver -* -* Copyright (C) 2024 Nokia -* -*/ + * + * Copyright (C) 2024 Nokia + * + */ #include #include @@ -14,7 +14,7 @@ #include #include -#define DRIVER_NAME "fan_led" +#define DRIVER_NAME "fan_verm_led" // REGISTERS ADDRESS MAP #define REG_MODE1 0x0 @@ -127,7 +127,7 @@ static int fan_led_probe(struct i2c_client *client) if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { dev_err(&client->dev, "Fan_LED PROBE ERROR: i2c_check_functionality failed (0x%x)\n", client->addr); status = -EIO; - goto exit; + goto exit; } dev_info(&client->dev, "Nokia Fan_LED driver found.\n"); @@ -146,7 +146,7 @@ static int fan_led_probe(struct i2c_client *client) status = sysfs_create_group(&client->dev.kobj, &fan_led_group); if (status) { dev_err(&client->dev, "Fan_LED INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } set_mode(data); @@ -160,6 +160,8 @@ static int fan_led_probe(struct i2c_client *client) return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } @@ -187,12 +189,12 @@ static struct i2c_driver fan_led_driver = { .address_list = led_address_list, }; -static int __init fan_led_init(void) +static int __init fan_verm_led_init(void) { return i2c_add_driver(&fan_led_driver); } -static void __exit fan_led_exit(void) +static void __exit fan_verm_led_exit(void) { i2c_del_driver(&fan_led_driver); } @@ -201,5 +203,5 @@ MODULE_AUTHOR("Nokia"); MODULE_DESCRIPTION("NOKIA Fan LED driver"); MODULE_LICENSE("GPL"); -module_init(fan_led_init); -module_exit(fan_led_exit); \ No newline at end of file +module_init(fan_verm_led_init); +module_exit(fan_verm_led_exit); \ No newline at end of file diff --git a/ixr7250x4/modules/psu_x3b.c b/ixr7250x4/modules/psu_verm.c similarity index 80% rename from ixr7250x4/modules/psu_x3b.c rename to ixr7250x4/modules/psu_verm.c index d26ff09..0c96eb1 100644 --- a/ixr7250x4/modules/psu_x3b.c +++ b/ixr7250x4/modules/psu_verm.c @@ -16,16 +16,16 @@ #include #include #include -#include #include +#include #define MAX_FAN_DUTY_CYCLE 100 #define PMBUS_CODE_STATUS_WORD 0x79 -#define PSU_DRIVER_NAME "psu_x3b" +#define PSU_DRIVER_NAME "psu_verm" static const unsigned short normal_i2c[] = { 0x5b, I2C_CLIENT_END }; -struct x3b_psu_data { +struct psu_verm_data { struct device *hwmon_dev; struct mutex update_lock; char valid; @@ -54,13 +54,13 @@ static ssize_t for_fan_target(struct device *dev, struct device_attribute \ *dev_attr, char *buf); static ssize_t for_vout_data(struct device *dev, struct device_attribute \ *dev_attr, char *buf); -static int x3b_psu_read_byte(struct i2c_client *client, u8 reg); -static int x3b_psu_read_word(struct i2c_client *client, u8 reg); -static int x3b_psu_write_word(struct i2c_client *client, u8 reg, \ +static int psu_verm_read_byte(struct i2c_client *client, u8 reg); +static int psu_verm_read_word(struct i2c_client *client, u8 reg); +static int psu_verm_write_word(struct i2c_client *client, u8 reg, \ u16 value); -static struct x3b_psu_data *x3b_psu_update_device(struct device *dev); +static struct psu_verm_data *psu_verm_update_device(struct device *dev); -enum x3b_psu_sysfs_attributes { +enum psu_verm_sysfs_attributes { PSU_V_IN, PSU_V_OUT, PSU_I_IN, @@ -86,7 +86,7 @@ static ssize_t set_fan_duty_cycle_input(struct device *dev, struct device_attrib { struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); struct i2c_client *client = to_i2c_client(dev); - struct x3b_psu_data *data = i2c_get_clientdata(client); + struct psu_verm_data *data = i2c_get_clientdata(client); int nr = (attr->index == PSU_FAN1_DUTY_CYCLE) ? 0 : 1; long speed; int error; @@ -100,7 +100,7 @@ static ssize_t set_fan_duty_cycle_input(struct device *dev, struct device_attrib mutex_lock(&data->update_lock); data->fan_duty_cycle_input[nr] = speed; - x3b_psu_write_word(client, 0x3B + nr, data->fan_duty_cycle_input[nr]); + psu_verm_write_word(client, 0x3B + nr, data->fan_duty_cycle_input[nr]); mutex_unlock(&data->update_lock); return count; @@ -110,7 +110,7 @@ static ssize_t for_linear_data(struct device *dev, struct device_attribute \ *dev_attr, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); - struct x3b_psu_data *data = x3b_psu_update_device(dev); + struct psu_verm_data *data = psu_verm_update_device(dev); u16 value = 0; int exponent, mantissa; @@ -164,7 +164,7 @@ static ssize_t for_fan_target(struct device *dev, struct device_attribute \ *dev_attr, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(dev_attr); - struct x3b_psu_data *data = x3b_psu_update_device(dev); + struct psu_verm_data *data = psu_verm_update_device(dev); u8 shift = (attr->index == PSU_FAN1_FAULT) ? 7 : 6; @@ -174,7 +174,7 @@ static ssize_t for_fan_target(struct device *dev, struct device_attribute \ static ssize_t for_vout_data(struct device *dev, struct device_attribute \ *dev_attr, char *buf) { - struct x3b_psu_data *data = x3b_psu_update_device(dev); + struct psu_verm_data *data = psu_verm_update_device(dev); int exponent = 0; int mantissa = 0; int multiplier = 1000; @@ -187,23 +187,23 @@ static ssize_t for_vout_data(struct device *dev, struct device_attribute \ sprintf(buf, "%d\n", (mantissa * multiplier) / (1 << -exponent)); } -static int x3b_psu_read_byte(struct i2c_client *client, u8 reg) +static int psu_verm_read_byte(struct i2c_client *client, u8 reg) { return i2c_smbus_read_byte_data(client, reg); } -static int x3b_psu_read_word(struct i2c_client *client, u8 reg) +static int psu_verm_read_word(struct i2c_client *client, u8 reg) { return i2c_smbus_read_word_data(client, reg); } -static int x3b_psu_write_word(struct i2c_client *client, u8 reg, \ +static int psu_verm_write_word(struct i2c_client *client, u8 reg, \ u16 value) { union i2c_smbus_data data; data.word = value; return i2c_smbus_xfer(client->adapter, client->addr, - client->flags |= I2C_CLIENT_PEC, + client->flags | I2C_CLIENT_PEC, I2C_SMBUS_WRITE, reg, I2C_SMBUS_WORD_DATA, &data); } @@ -218,11 +218,11 @@ struct reg_data_word { u16 *value; }; -static struct x3b_psu_data *x3b_psu_update_device( \ +static struct psu_verm_data *psu_verm_update_device( \ struct device *dev) { struct i2c_client *client = to_i2c_client(dev); - struct x3b_psu_data *data = i2c_get_clientdata(client); + struct psu_verm_data *data = i2c_get_clientdata(client); mutex_lock(&data->update_lock); @@ -251,7 +251,7 @@ static struct x3b_psu_data *x3b_psu_update_device( \ data->last_updated = jiffies + HZ / 1000; for (i = 0; i < ARRAY_SIZE(regs_byte); i++) { - status = x3b_psu_read_byte(client, + status = psu_verm_read_byte(client, regs_byte[i].reg); if (status < 0) { dev_dbg(&client->dev, "reg %d, err %d\n", @@ -263,7 +263,7 @@ static struct x3b_psu_data *x3b_psu_update_device( \ } for (i = 0; i < ARRAY_SIZE(regs_word); i++) { - status = x3b_psu_read_word(client, + status = psu_verm_read_word(client, regs_word[i].reg); if (status < 0) { dev_dbg(&client->dev, "reg %d, err %d\n", @@ -288,8 +288,8 @@ static ssize_t psu_status_show(struct device *dev, struct device_attribute \ struct i2c_client *client = to_i2c_client(dev); int retval; - retval = x3b_psu_read_word(client, PMBUS_CODE_STATUS_WORD); - + retval = psu_verm_read_word(client, PMBUS_CODE_STATUS_WORD); + return sprintf(buf, "%d\n", retval); } @@ -307,7 +307,7 @@ static SENSOR_DEVICE_ATTR(fan1_set_percentage, S_IWUSR | S_IRUGO, \ static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, for_linear_data, NULL, PSU_FAN1_SPEED); static SENSOR_DEVICE_ATTR(psu_status, S_IRUGO, psu_status_show, NULL, 0); -static struct attribute *x3b_psu_attributes[] = { +static struct attribute *psu_verm_attributes[] = { &sensor_dev_attr_in1_input.dev_attr.attr, &sensor_dev_attr_in2_input.dev_attr.attr, &sensor_dev_attr_curr1_input.dev_attr.attr, @@ -322,13 +322,13 @@ static struct attribute *x3b_psu_attributes[] = { NULL }; -static const struct attribute_group x3b_psu_group = { - .attrs = x3b_psu_attributes, +static const struct attribute_group psu_verm_group = { + .attrs = psu_verm_attributes, }; -static int x3b_psu_probe(struct i2c_client *client) +static int psu_verm_probe(struct i2c_client *client) { - struct x3b_psu_data *data; + struct psu_verm_data *data; int status; if (!i2c_check_functionality(client->adapter, @@ -349,7 +349,7 @@ static int x3b_psu_probe(struct i2c_client *client) data->valid = 0; mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &x3b_psu_group); + status = sysfs_create_group(&client->dev.kobj, &psu_verm_group); if (status) goto exit_sysfs_create_group; @@ -362,51 +362,51 @@ static int x3b_psu_probe(struct i2c_client *client) return 0; exit_hwmon_device_register: - sysfs_remove_group(&client->dev.kobj, &x3b_psu_group); + sysfs_remove_group(&client->dev.kobj, &psu_verm_group); exit_sysfs_create_group: kfree(data); exit: return status; } -static void x3b_psu_remove(struct i2c_client *client) +static void psu_verm_remove(struct i2c_client *client) { - struct x3b_psu_data *data = i2c_get_clientdata(client); + struct psu_verm_data *data = i2c_get_clientdata(client); hwmon_device_unregister(data->hwmon_dev); - sysfs_remove_group(&client->dev.kobj, &x3b_psu_group); + sysfs_remove_group(&client->dev.kobj, &psu_verm_group); kfree(data); } -static const struct i2c_device_id x3b_psu_id[] = { +static const struct i2c_device_id psu_verm_id[] = { { PSU_DRIVER_NAME, 0 }, {} }; -MODULE_DEVICE_TABLE(i2c, x3b_psu_id); +MODULE_DEVICE_TABLE(i2c, psu_verm_id); -static struct i2c_driver x3b_psu_driver = { +static struct i2c_driver psu_verm_driver = { .class = I2C_CLASS_HWMON, .driver = { .name = PSU_DRIVER_NAME, }, - .probe = x3b_psu_probe, - .remove = x3b_psu_remove, - .id_table = x3b_psu_id, + .probe = psu_verm_probe, + .remove = psu_verm_remove, + .id_table = psu_verm_id, .address_list = normal_i2c, }; -static int __init x3b_psu_init(void) +static int __init psu_verm_init(void) { - return i2c_add_driver(&x3b_psu_driver); + return i2c_add_driver(&psu_verm_driver); } -static void __exit x3b_psu_exit(void) +static void __exit psu_verm_exit(void) { - i2c_del_driver(&x3b_psu_driver); + i2c_del_driver(&psu_verm_driver); } MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("PSU Driver"); MODULE_AUTHOR("Nokia"); -module_init(x3b_psu_init); -module_exit(x3b_psu_exit); +module_init(psu_verm_init); +module_exit(psu_verm_exit); diff --git a/ixr7250x4/modules/psu_eeprom.c b/ixr7250x4/modules/psu_verm_eeprom.c similarity index 80% rename from ixr7250x4/modules/psu_eeprom.c rename to ixr7250x4/modules/psu_verm_eeprom.c index b8b557d..1c78857 100644 --- a/ixr7250x4/modules/psu_eeprom.c +++ b/ixr7250x4/modules/psu_verm_eeprom.c @@ -15,7 +15,7 @@ #include #include -#define EEPROM_NAME "psu_eeprom" +#define EEPROM_NAME "psu_verm_eeprom" #define EEPROM_LEN 128 #define FIELD_LEN_MAX 16 @@ -67,41 +67,57 @@ static int decode_eeprom(struct i2c_client *client) { struct menuee_data *ee_data = i2c_get_clientdata(client); int i = 0; - u8 len; + u8 len, cpylen; while (i < EEPROM_LEN) { + if (i + 1 >= EEPROM_LEN) + break; switch (ee_data->eeprom[i]) { case kEeCleiCode: i++; len = ee_data->eeprom[i++]; - memcpy(&ee_data->clei[0], &ee_data->eeprom[i], len); - ee_data->clei[len] = 0; + if (i + len > EEPROM_LEN) + return 0; + cpylen = min_t(u8, len, FIELD_LEN_MAX - 1); + memcpy(ee_data->clei, &ee_data->eeprom[i], cpylen); + ee_data->clei[cpylen] = 0; i += len; break; case kMfgDate: i++; len = ee_data->eeprom[i++]; - memcpy(&ee_data->mfg_date[0], &ee_data->eeprom[i], len); - ee_data->mfg_date[len] = 0; + if (i + len > EEPROM_LEN) + return 0; + cpylen = min_t(u8, len, FIELD_LEN_MAX - 1); + memcpy(ee_data->mfg_date, &ee_data->eeprom[i], cpylen); + ee_data->mfg_date[cpylen] = 0; i += len; break; case kMfgSerialNum: i++; len = ee_data->eeprom[i++]; - memcpy(&ee_data->serial_number[0], &ee_data->eeprom[i], len); - ee_data->serial_number[len] = 0; + if (i + len > EEPROM_LEN) + return 0; + cpylen = min_t(u8, len, FIELD_LEN_MAX - 1); + memcpy(ee_data->serial_number, &ee_data->eeprom[i], cpylen); + ee_data->serial_number[cpylen] = 0; i += len; break; case kMfgPartNum: i++; len = ee_data->eeprom[i++]; - memcpy(&ee_data->part_number[0], &ee_data->eeprom[i], len); - ee_data->part_number[len] = 0; + if (i + len > EEPROM_LEN) + return 0; + cpylen = min_t(u8, len, FIELD_LEN_MAX - 1); + memcpy(ee_data->part_number, &ee_data->eeprom[i], cpylen); + ee_data->part_number[cpylen] = 0; i += len; break; case kHwDirectives: i++; len = ee_data->eeprom[i++]; + if (i + len > EEPROM_LEN || len > sizeof(ee_data->hw_directives)) + return 0; memcpy(&ee_data->hw_directives, &ee_data->eeprom[i], len); ee_data->hw_directives = swab32(ee_data->hw_directives); i += len; @@ -109,12 +125,16 @@ static int decode_eeprom(struct i2c_client *client) case kHwType: i++; len = ee_data->eeprom[i++]; + if (i + len > EEPROM_LEN || len > sizeof(ee_data->hw_type)) + return 0; memcpy(&ee_data->hw_type, &ee_data->eeprom[i], len); i += len; break; case kCSumRec: i++; len = ee_data->eeprom[i++]; + if (i + len > EEPROM_LEN || len > sizeof(ee_data->checksum)) + return 0; memcpy(&ee_data->checksum, &ee_data->eeprom[i], len); i += len; break; @@ -129,7 +149,15 @@ static int decode_eeprom(struct i2c_client *client) static ssize_t eeprom_show(struct device *dev, struct device_attribute *devattr, char *buf) { struct menuee_data *data = dev_get_drvdata(dev); - return sprintf(buf, "%s\n", data->eeprom); + int i = 0; + int len = 0; + for (i = 0; i < EEPROM_LEN; i++) { + if (data->eeprom[i] == 0) + len += sprintf(buf + len, "."); + else + len += sprintf(buf + len, "%c", data->eeprom[i]); + } + return len; } static ssize_t part_number_show(struct device *dev, struct device_attribute *devattr, char *buf) @@ -206,7 +234,6 @@ static int eeprom_probe(struct i2c_client *client) return -ENOMEM; } - //data->client = client; mutex_init(&data->lock); i2c_set_clientdata(client, data); @@ -248,12 +275,12 @@ static struct i2c_driver eeprom_driver = { .address_list = normal_i2c, }; -static int __init psu_eeprom_init(void) +static int __init psu_verm_eeprom_init(void) { return i2c_add_driver(&eeprom_driver); } -static void __exit psu_eeprom_exit(void) +static void __exit psu_verm_eeprom_exit(void) { i2c_del_driver(&eeprom_driver); } @@ -262,5 +289,5 @@ MODULE_DESCRIPTION("PSU eeprom sysfs driver"); MODULE_AUTHOR("Nokia"); MODULE_LICENSE("GPL"); -module_init(psu_eeprom_init); -module_exit(psu_eeprom_exit); \ No newline at end of file +module_init(psu_verm_eeprom_init); +module_exit(psu_verm_eeprom_exit); \ No newline at end of file diff --git a/ixr7250x4/scripts/ixr7250x4_platform_init.sh b/ixr7250x4/scripts/ixr7250x4_platform_init.sh index b9e4cc0..e4e116f 100755 --- a/ixr7250x4/scripts/ixr7250x4_platform_init.sh +++ b/ixr7250x4/scripts/ixr7250x4_platform_init.sh @@ -21,12 +21,6 @@ load_kernel_drivers() { modprobe rtc_ds1307 modprobe optoe modprobe at24 - modprobe max31790_wd - modprobe jc42 - modprobe psu_x3b - modprobe fan_eeprom - modprobe psu_eeprom - modprobe fan_led modprobe pcon } @@ -54,7 +48,7 @@ file_exists() { dev_conf_init() { CONF_FILE=/var/run/sonic-platform-nokia/devices.conf mkdir -p /var/run/sonic-platform-nokia/ - cat /dev/null > CONF_FILE + cat /dev/null > $CONF_FILE echo board=x4 >> $CONF_FILE @@ -119,18 +113,18 @@ do prs=$(cat /sys/bus/pci/devices/0000:01:00.0/fandraw_${idx}_prs) if [ "$prs" == "0" ]; then echo max31790_wd 0x20 > /sys/bus/i2c/devices/i2c-$((${idx}+10))/new_device - echo fan_led 0x60 > /sys/bus/i2c/devices/i2c-$((${idx}+10))/new_device - echo fan_eeprom 0x54 > /sys/bus/i2c/devices/i2c-$((${idx}+10))/new_device + echo fan_verm_led 0x60 > /sys/bus/i2c/devices/i2c-$((${idx}+10))/new_device + echo fan_verm_eeprom 0x54 > /sys/bus/i2c/devices/i2c-$((${idx}+10))/new_device fi done # PSU -echo psu_x3b 0x5b > /sys/bus/i2c/devices/i2c-14/new_device -echo psu_x3b 0x5b > /sys/bus/i2c/devices/i2c-15/new_device -echo psu_eeprom 0x53 > /sys/bus/i2c/devices/i2c-14/new_device -echo psu_eeprom 0x53 > /sys/bus/i2c/devices/i2c-15/new_device +echo psu_verm 0x5b > /sys/bus/i2c/devices/i2c-14/new_device +echo psu_verm 0x5b > /sys/bus/i2c/devices/i2c-15/new_device +echo psu_verm_eeprom 0x53 > /sys/bus/i2c/devices/i2c-14/new_device +echo psu_verm_eeprom 0x53 > /sys/bus/i2c/devices/i2c-15/new_device -for num in {27..62}; do +for num in {27..58}; do echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-${num}/new_device done @@ -144,7 +138,7 @@ if [ "$status" == "1" ]; then chmod 644 /sys/bus/i2c/devices/1-0054/eeprom x4_profile else - echo "SYSEEPROM file not foud" + echo "SYSEEPROM file not found" fi if type pcon_cmds &> /dev/null ; then diff --git a/ixr7250x4/sonic_platform/fan.py b/ixr7250x4/sonic_platform/fan.py index 890f031..4493850 100644 --- a/ixr7250x4/sonic_platform/fan.py +++ b/ixr7250x4/sonic_platform/fan.py @@ -323,7 +323,7 @@ def get_target_speed(self): """ if not self.fan_inited: if not self.get_presence(): - return False + return 0 fan_duty = read_sysfs_file(self.set_fan_speed_reg) if fan_duty != 'ERR': diff --git a/ixr7250x4/sonic_platform/fan_drawer.py b/ixr7250x4/sonic_platform/fan_drawer.py index 4cf8627..8e210ca 100644 --- a/ixr7250x4/sonic_platform/fan_drawer.py +++ b/ixr7250x4/sonic_platform/fan_drawer.py @@ -16,9 +16,9 @@ FANS_PER_DRAWER = 4 I2C_BUS = [11, 12, 13] FAN_INDEX_IN_DRAWER = [1, 2, 4, 5] -EEPROM_INFO = ['54', 'fan_eeprom'] +EEPROM_INFO = ['54', 'fan_verm_eeprom'] DRIVER_INFO = ['20', 'max31790_wd'] -LED_INFO = ['60', 'fan_led'] +LED_INFO = ['60', 'fan_verm_led'] REG_DIR = "/sys/bus/pci/devices/0000:01:00.0/" sonic_logger = logger.Logger('fan_drawer') diff --git a/ixr7250x4/sonic_platform/psu.py b/ixr7250x4/sonic_platform/psu.py index 3a95be9..b494966 100644 --- a/ixr7250x4/sonic_platform/psu.py +++ b/ixr7250x4/sonic_platform/psu.py @@ -32,7 +32,7 @@ def __init__(self, psu_index): self._fan_list = [] self.psu_dir = f"/sys/bus/i2c/devices/{I2C_BUS[psu_index]}-00{PSU_ADDR}/" self.eeprom_dir = f"/sys/bus/i2c/devices/{I2C_BUS[psu_index]}-00{PSU_EEPROM_ADDR}/" - self.new_cmd = f"echo psu_eeprom 0x{PSU_EEPROM_ADDR} > /sys/bus/i2c/devices/i2c-{I2C_BUS[psu_index]}/new_device" + self.new_cmd = f"echo psu_verm_eeprom 0x{PSU_EEPROM_ADDR} > /sys/bus/i2c/devices/i2c-{I2C_BUS[psu_index]}/new_device" self.del_cmd = f"echo 0x{PSU_EEPROM_ADDR} > /sys/bus/i2c/devices/i2c-{I2C_BUS[psu_index]}/delete_device" self.psu_led_color = ['off', 'green', 'amber'] self._master_psu_led = 'off' @@ -48,7 +48,9 @@ def _get_active_psus(self): """ active_psus = 0 for i in range(PSU_NUM): - if self.get_status(): + psu_dir = f"/sys/bus/i2c/devices/{I2C_BUS[i]}-00{PSU_ADDR}/" + result = read_sysfs_file(psu_dir + "psu_status") + if (int(result, 10) & 0x800) >> 11 == 0: active_psus = active_psus + 1 return active_psus diff --git a/ixr7250x4/sonic_platform/sfp.py b/ixr7250x4/sonic_platform/sfp.py index 087be31..04ae1b4 100644 --- a/ixr7250x4/sonic_platform/sfp.py +++ b/ixr7250x4/sonic_platform/sfp.py @@ -27,7 +27,7 @@ class Sfp(SfpOptoeBase): """ - Nokia IXR-7220 X4 Platform-specific Sfp refactor class + Nokia IXR-7250 X4 Platform-specific Sfp refactor class """ instances = [] @@ -145,7 +145,7 @@ def get_status(self): """ Retrieves the operational status of the device """ - status = True + status = False reset = self.get_reset_status() if self.get_presence(): if not reset: diff --git a/ixr7250x4/sonic_platform/sfp_event.py b/ixr7250x4/sonic_platform/sfp_event.py index 01f0f7f..9c9f495 100644 --- a/ixr7250x4/sonic_platform/sfp_event.py +++ b/ixr7250x4/sonic_platform/sfp_event.py @@ -1,4 +1,4 @@ -"""" +""" NOKIA 7250 IXR-X4 listen for the SFP change event and return to chassis. diff --git a/ixr7250x4/sonic_platform/thermal_actions.py b/ixr7250x4/sonic_platform/thermal_actions.py index 7047154..2a1f483 100644 --- a/ixr7250x4/sonic_platform/thermal_actions.py +++ b/ixr7250x4/sonic_platform/thermal_actions.py @@ -177,7 +177,7 @@ def execute(self, thermal_info_dict): sonic_logger.log_warning(f"{psu_obj.get_name()}: {psu_obj.get_voltage()}V, " f"{psu_obj.get_current()}A, {psu_obj.get_power()}W.") else: - sonic_logger.log_warning(f"{fan_obj.get_name()} not presence.") + sonic_logger.log_warning(f"{psu_obj.get_name()} not presence.") except Exception as e: sonic_logger.log_warning(" Fail to save fan and psu info {}".format(repr(e))) diff --git a/ixr7250x4/sonic_platform/thermal_infos.py b/ixr7250x4/sonic_platform/thermal_infos.py index dd065b1..921ebbf 100644 --- a/ixr7250x4/sonic_platform/thermal_infos.py +++ b/ixr7250x4/sonic_platform/thermal_infos.py @@ -71,7 +71,7 @@ class ThermalInfo(ThermalPolicyInfoBase): """ # Fan information name INFO_NAME = 'thermal_info' - WARNING_THRESHHOLD = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 95.0, 95.0, 95.0, 95.0, 105.0, 105.0, 0.0] + WARNING_THRESHHOLD = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 95.0, 95.0, 105.0, 0.0] def __init__(self): self._old_threshold_level = -1 @@ -180,7 +180,7 @@ def fc(self, t, f): return round(result) def get_fanctl_speed(self): - if (self.fanctl_speed >= self.nc or self.fanctl_speed <= self.mc): + if (self.fanctl_speed >= self.nc and self.fanctl_speed <= self.mc): return self.fanctl_speed else: return 0