diff --git a/ixr7220h6-128/modules/Makefile b/ixr7220h6-128/modules/Makefile index 327463c..a2f8bbb 100644 --- a/ixr7220h6-128/modules/Makefile +++ b/ixr7220h6-128/modules/Makefile @@ -1,12 +1,12 @@ obj-m += i2c-ocores.o obj-m += h6_i2c_oc.o obj-m += sys_mux.o -obj-m += sys_cpld.o -obj-m += port_cpld0.o -obj-m += port_cpld1.o -obj-m += port_cpld2.o +obj-m += cb_pld.o +obj-m += mb_pld.o +obj-m += port_pld0.o +obj-m += port_pld1.o +obj-m += port_pld2.o obj-m += eeprom_fru.o obj-m += h6_fan_cpld.o -obj-m += sys_fpga.o obj-m += embd_ctrl.o obj-m += pmbus_psu.o diff --git a/ixr7220h6-128/modules/sys_fpga.c b/ixr7220h6-128/modules/cb_pld.c similarity index 72% rename from ixr7220h6-128/modules/sys_fpga.c rename to ixr7220h6-128/modules/cb_pld.c index c39ed95..1cf4183 100644 --- a/ixr7220h6-128/modules/sys_fpga.c +++ b/ixr7220h6-128/modules/cb_pld.c @@ -1,4 +1,4 @@ -// * CPLD driver for Nokia-7220-IXR-H6-128 Router +// * PLD driver for Nokia-7220-IXR-H6-128 Router // * // * Copyright (C) 2026 Nokia Corporation. // * @@ -26,7 +26,7 @@ #include #include -#define DRIVER_NAME "sys_fpga" +#define DRIVER_NAME "cb_pld" // REGISTERS ADDRESS MAP #define HW_BOARD_VER_REG 0x00 @@ -34,6 +34,7 @@ #define VER_MINOR_REG 0x02 #define PSU_PRESENT_REG 0x07 #define SSD_PRESENT_REG 0x08 +#define MUX_SEL_REG 0x0F #define PSU_POWERGOOD_REG 0x51 static const unsigned short cpld_address_list[] = {0x60, I2C_CLIENT_END}; @@ -51,7 +52,7 @@ static int cpld_i2c_read(struct cpld_data *data, u8 reg) val = i2c_smbus_read_byte_data(client, reg); if (val < 0) { - dev_warn(&client->dev, "SYS_FPGA READ ERROR: reg(0x%02x) err %d\n", reg, val); + dev_warn(&client->dev, "CB_PLD READ ERROR: reg(0x%02x) err %d\n", reg, val); } return val; @@ -65,7 +66,7 @@ static void cpld_i2c_write(struct cpld_data *data, u8 reg, u8 value) mutex_lock(&data->update_lock); res = i2c_smbus_write_byte_data(client, reg, value); if (res < 0) { - dev_warn(&client->dev, "SYS_FPGA WRITE ERROR: reg(0x%02x) err %d\n", reg, res); + dev_warn(&client->dev, "CB_PLD WRITE ERROR: reg(0x%02x) err %d\n", reg, res); } mutex_unlock(&data->update_lock); } @@ -120,21 +121,32 @@ static ssize_t show_ssd_present(struct device *dev, struct device_attribute *dev return sprintf(buf, "%d\n", (val>>sda->index) & 0x1 ? 1:0); } +static ssize_t show_mux_sel(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct cpld_data *data = dev_get_drvdata(dev); + struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); + u8 val = 0; + + val = cpld_i2c_read(data, MUX_SEL_REG); + return sprintf(buf, "%d\n", (val>>sda->index) & 0x1 ? 1:0); +} + // sysfs attributes static SENSOR_DEVICE_ATTR(hw_board_version, S_IRUGO, show_hw_board_ver, NULL, 0); static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_ver, NULL, 0); -static SENSOR_DEVICE_ATTR(psu1_ok, S_IRUGO, show_psu_ok, NULL, 0); -static SENSOR_DEVICE_ATTR(psu2_ok, S_IRUGO, show_psu_ok, NULL, 1); -static SENSOR_DEVICE_ATTR(psu3_ok, S_IRUGO, show_psu_ok, NULL, 2); -static SENSOR_DEVICE_ATTR(psu4_ok, S_IRUGO, show_psu_ok, NULL, 3); +static SENSOR_DEVICE_ATTR(psu1_ok, S_IRUGO, show_psu_ok, NULL, 4); +static SENSOR_DEVICE_ATTR(psu2_ok, S_IRUGO, show_psu_ok, NULL, 5); +static SENSOR_DEVICE_ATTR(psu3_ok, S_IRUGO, show_psu_ok, NULL, 6); +static SENSOR_DEVICE_ATTR(psu4_ok, S_IRUGO, show_psu_ok, NULL, 7); static SENSOR_DEVICE_ATTR(psu1_pres, S_IRUGO, show_psu_present, NULL, 3); static SENSOR_DEVICE_ATTR(psu2_pres, S_IRUGO, show_psu_present, NULL, 2); static SENSOR_DEVICE_ATTR(psu3_pres, S_IRUGO, show_psu_present, NULL, 1); static SENSOR_DEVICE_ATTR(psu4_pres, S_IRUGO, show_psu_present, NULL, 0); static SENSOR_DEVICE_ATTR(ssd1_pres, S_IRUGO, show_ssd_present, NULL, 1); static SENSOR_DEVICE_ATTR(ssd2_pres, S_IRUGO, show_ssd_present, NULL, 0); +static SENSOR_DEVICE_ATTR(mux_sel, S_IRUGO, show_mux_sel, NULL, 0); -static struct attribute *sys_fpga_attributes[] = { +static struct attribute *cb_pld_attributes[] = { &sensor_dev_attr_hw_board_version.dev_attr.attr, &sensor_dev_attr_version.dev_attr.attr, &sensor_dev_attr_psu1_ok.dev_attr.attr, @@ -147,14 +159,15 @@ static struct attribute *sys_fpga_attributes[] = { &sensor_dev_attr_psu4_pres.dev_attr.attr, &sensor_dev_attr_ssd1_pres.dev_attr.attr, &sensor_dev_attr_ssd2_pres.dev_attr.attr, + &sensor_dev_attr_mux_sel.dev_attr.attr, NULL }; -static const struct attribute_group sys_fpga_group = { - .attrs = sys_fpga_attributes, +static const struct attribute_group cb_pld_group = { + .attrs = cb_pld_attributes, }; -static int sys_fpga_probe(struct i2c_client *client) +static int cb_pld_probe(struct i2c_client *client) { int status; struct cpld_data *data = NULL; @@ -165,7 +178,7 @@ static int sys_fpga_probe(struct i2c_client *client) goto exit; } - dev_info(&client->dev, "Nokia SYS_FPGA chip found.\n"); + dev_info(&client->dev, "Nokia CB_PLD chip found.\n"); data = kzalloc(sizeof(struct cpld_data), GFP_KERNEL); if (!data) { @@ -178,64 +191,66 @@ static int sys_fpga_probe(struct i2c_client *client) i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &sys_fpga_group); + status = sysfs_create_group(&client->dev.kobj, &cb_pld_group); if (status) { dev_err(&client->dev, "CPLD INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } -static void sys_fpga_remove(struct i2c_client *client) +static void cb_pld_remove(struct i2c_client *client) { struct cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &sys_fpga_group); + sysfs_remove_group(&client->dev.kobj, &cb_pld_group); kfree(data); } -static const struct of_device_id sys_fpga_of_ids[] = { +static const struct of_device_id cb_pld_of_ids[] = { { - .compatible = "sys_fpga", + .compatible = "cb_pld", .data = (void *) 0, }, { }, }; -MODULE_DEVICE_TABLE(of, sys_fpga_of_ids); +MODULE_DEVICE_TABLE(of, cb_pld_of_ids); -static const struct i2c_device_id sys_fpga_ids[] = { +static const struct i2c_device_id cb_pld_ids[] = { { DRIVER_NAME, 0 }, { } }; -MODULE_DEVICE_TABLE(i2c, sys_fpga_ids); +MODULE_DEVICE_TABLE(i2c, cb_pld_ids); -static struct i2c_driver sys_fpga_driver = { +static struct i2c_driver cb_pld_driver = { .driver = { .name = DRIVER_NAME, - .of_match_table = of_match_ptr(sys_fpga_of_ids), + .of_match_table = of_match_ptr(cb_pld_of_ids), }, - .probe = sys_fpga_probe, - .remove = sys_fpga_remove, - .id_table = sys_fpga_ids, + .probe = cb_pld_probe, + .remove = cb_pld_remove, + .id_table = cb_pld_ids, .address_list = cpld_address_list, }; -static int __init sys_fpga_init(void) +static int __init cb_pld_init(void) { - return i2c_add_driver(&sys_fpga_driver); + return i2c_add_driver(&cb_pld_driver); } -static void __exit sys_fpga_exit(void) +static void __exit cb_pld_exit(void) { - i2c_del_driver(&sys_fpga_driver); + i2c_del_driver(&cb_pld_driver); } MODULE_AUTHOR("Nokia"); -MODULE_DESCRIPTION("NOKIA H6-128 SYS_FPGA driver"); +MODULE_DESCRIPTION("NOKIA H6-128 CB_PLD driver"); MODULE_LICENSE("GPL"); -module_init(sys_fpga_init); -module_exit(sys_fpga_exit); +module_init(cb_pld_init); +module_exit(cb_pld_exit); diff --git a/ixr7220h6-128/modules/embd_ctrl.c b/ixr7220h6-128/modules/embd_ctrl.c index 8a6a588..e704910 100644 --- a/ixr7220h6-128/modules/embd_ctrl.c +++ b/ixr7220h6-128/modules/embd_ctrl.c @@ -32,6 +32,11 @@ #define CPU_TEMP_REG 0x10 #define MEM0_TEMP_REG 0x12 #define MEM1_TEMP_REG 0x13 +#define DATE_YEAR_REG 0xFB +#define DATE_MONTH_REG 0xFC +#define DATE_DAY_REG 0xFD +#define VER_MAJOR_REG 0xFE +#define VER_MINOR_REG 0xFF static const unsigned short ec_address_list[] = {0x21, I2C_CLIENT_END}; @@ -92,15 +97,41 @@ static ssize_t show_mem1_temperature(struct device *dev, struct device_attribute return sprintf(buf, "%d\n", (s8)val * 1000); } +static ssize_t show_ec_date(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct ec_data *data = dev_get_drvdata(dev); + u8 year = 0; + u8 month = 0; + u8 day = 0; + year = ec_i2c_read(data, DATE_YEAR_REG); + month = ec_i2c_read(data, DATE_MONTH_REG); + day = ec_i2c_read(data, DATE_DAY_REG); + return sprintf(buf, "%d/%d/%d\n", day, month, year); +} + +static ssize_t show_ec_ver(struct device *dev, struct device_attribute *devattr, char *buf) +{ + struct ec_data *data = dev_get_drvdata(dev); + u8 ver_major = 0; + u8 ver_minor = 0; + ver_major = ec_i2c_read(data, DATE_YEAR_REG); + ver_major = ec_i2c_read(data, DATE_MONTH_REG); + return sprintf(buf, "%02x.%02x\n", ver_major, ver_minor); +} + // sysfs attributes static SENSOR_DEVICE_ATTR(cpu_temperature, S_IRUGO, show_cpu_temperature, NULL, 0); static SENSOR_DEVICE_ATTR(mem0_temperature, S_IRUGO, show_mem0_temperature, NULL, 0); static SENSOR_DEVICE_ATTR(mem1_temperature, S_IRUGO, show_mem1_temperature, NULL, 0); +static SENSOR_DEVICE_ATTR(ec_date, S_IRUGO, show_ec_date, NULL, 0); +static SENSOR_DEVICE_ATTR(ec_ver, S_IRUGO, show_ec_ver, NULL, 0); static struct attribute *embd_ctrl_attributes[] = { &sensor_dev_attr_cpu_temperature.dev_attr.attr, &sensor_dev_attr_mem0_temperature.dev_attr.attr, &sensor_dev_attr_mem1_temperature.dev_attr.attr, + &sensor_dev_attr_ec_date.dev_attr.attr, + &sensor_dev_attr_ec_ver.dev_attr.attr, NULL }; @@ -135,11 +166,13 @@ static int embd_ctrl_probe(struct i2c_client *client) status = sysfs_create_group(&client->dev.kobj, &embd_ctrl_group); if (status) { dev_warn(&client->dev, "EC INIT WARN: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } @@ -153,7 +186,7 @@ static void embd_ctrl_remove(struct i2c_client *client) static const struct of_device_id embd_ctrl_of_ids[] = { { - .compatible = "Nokia,embd_ctrl", + .compatible = "embd_ctrl", .data = (void *) 0, }, { }, diff --git a/ixr7220h6-128/modules/h6_i2c_oc.c b/ixr7220h6-128/modules/h6_i2c_oc.c index c742853..35d8688 100644 --- a/ixr7220h6-128/modules/h6_i2c_oc.c +++ b/ixr7220h6-128/modules/h6_i2c_oc.c @@ -30,7 +30,7 @@ #include #include -#define PORT_NUM (128 + 2) /*128 OSFPs + 2 SFP28s*/ +#define PORT_NUM (128 + 3) /*128 OSFPs + 1 QSFP28 + SFP + redriver*/ /* * PCIE BAR0 address @@ -55,139 +55,141 @@ MODULE_PARM_DESC(param_i2c_khz, "Target clock speed of i2c bus, in KHz."); static struct pci_dev *g_pcidev = NULL; static const uint adapt_offset[PORT_NUM]= { -0x2100,// MESS_TOP_L_CPLD I2C Master OSFP Port1 - 0x2120,// MESS_TOP_L_CPLD I2C Master OSFP Port2 - 0x2140,// MESS_TOP_L_CPLD I2C Master OSFP Port3 - 0x2160,// MESS_TOP_L_CPLD I2C Master OSFP Port4 - 0x2180,// MESS_TOP_L_CPLD I2C Master OSFP Port5 - 0x21A0,// MESS_TOP_L_CPLD I2C Master OSFP Port6 - 0x21C0,// MESS_TOP_L_CPLD I2C Master OSFP Port7 - 0x21E0,// MESS_TOP_L_CPLD I2C Master OSFP Port8 - 0x2200,// MESS_TOP_L_CPLD I2C Master OSFP Port9 - 0x2220,// MESS_TOP_L_CPLD I2C Master OSFP Port10 - 0x2240,// MESS_TOP_L_CPLD I2C Master OSFP Port11 - 0x2260,// MESS_TOP_L_CPLD I2C Master OSFP Port12 - 0x2280,// MESS_TOP_L_CPLD I2C Master OSFP Port13 - 0x22A0,// MESS_TOP_L_CPLD I2C Master OSFP Port14 - 0x22C0,// MESS_TOP_L_CPLD I2C Master OSFP Port15 - 0x22E0,// MESS_TOP_L_CPLD I2C Master OSFP Port16 - 0x2100,// MESS_TOP_R_CPLD I2C Master OSFP Port17 - 0x2120,// MESS_TOP_R_CPLD I2C Master OSFP Port18 - 0x2140,// MESS_TOP_R_CPLD I2C Master OSFP Port19 - 0x2160,// MESS_TOP_R_CPLD I2C Master OSFP Port20 - 0x2180,// MESS_TOP_R_CPLD I2C Master OSFP Port21 - 0x21A0,// MESS_TOP_R_CPLD I2C Master OSFP Port22 - 0x21C0,// MESS_TOP_R_CPLD I2C Master OSFP Port23 - 0x21E0,// MESS_TOP_R_CPLD I2C Master OSFP Port24 - 0x2200,// MESS_TOP_R_CPLD I2C Master OSFP Port25 - 0x2220,// MESS_TOP_R_CPLD I2C Master OSFP Port26 - 0x2240,// MESS_TOP_R_CPLD I2C Master OSFP Port27 - 0x2260,// MESS_TOP_R_CPLD I2C Master OSFP Port28 - 0x2280,// MESS_TOP_R_CPLD I2C Master OSFP Port29 - 0x22A0,// MESS_TOP_R_CPLD I2C Master OSFP Port30 - 0x22C0,// MESS_TOP_R_CPLD I2C Master OSFP Port31 - 0x22E0,// MESS_TOP_R_CPLD I2C Master OSFP Port32 -////////////////////////////////////////////////////// - 0x2100,// PORTCPLD0 I2C Master OSFP Port33 - 0x2120,// PORTCPLD0 I2C Master OSFP Port34 - 0x2180,// PORTCPLD0 I2C Master OSFP Port35 - 0x21A0,// PORTCPLD0 I2C Master OSFP Port36 - 0x2200,// PORTCPLD0 I2C Master OSFP Port37 - 0x2220,// PORTCPLD0 I2C Master OSFP Port38 - 0x2280,// PORTCPLD0 I2C Master OSFP Port39 - 0x22A0,// PORTCPLD0 I2C Master OSFP Port40 - 0x2300,// PORTCPLD0 I2C Master OSFP Port41 - 0x2320,// PORTCPLD0 I2C Master OSFP Port42 - 0x2380,// PORTCPLD0 I2C Master OSFP Port43 - 0x23A0,// PORTCPLD0 I2C Master OSFP Port44 - 0x2400,// PORTCPLD0 I2C Master OSFP Port45 - 0x2420,// PORTCPLD0 I2C Master OSFP Port46 - 0x2480,// PORTCPLD0 I2C Master OSFP Port47 - 0x24A0,// PORTCPLD0 I2C Master OSFP Port48 - 0x2100,// PORTCPLD1 I2C Master OSFP Port49 - 0x2120,// PORTCPLD1 I2C Master OSFP Port50 - 0x2180,// PORTCPLD1 I2C Master OSFP Port51 - 0x21A0,// PORTCPLD1 I2C Master OSFP Port52 - 0x2200,// PORTCPLD1 I2C Master OSFP Port53 - 0x2220,// PORTCPLD1 I2C Master OSFP Port54 - 0x2280,// PORTCPLD1 I2C Master OSFP Port55 - 0x22A0,// PORTCPLD1 I2C Master OSFP Port56 - 0x2300,// PORTCPLD1 I2C Master OSFP Port57 - 0x2320,// PORTCPLD1 I2C Master OSFP Port58 - 0x2380,// PORTCPLD1 I2C Master OSFP Port59 - 0x23A0,// PORTCPLD1 I2C Master OSFP Port60 - 0x2400,// PORTCPLD1 I2C Master OSFP Port61 - 0x2420,// PORTCPLD1 I2C Master OSFP Port62 - 0x2480,// PORTCPLD1 I2C Master OSFP Port63 - 0x24A0,// PORTCPLD1 I2C Master OSFP Port64 -////////////////////////////////////////////////////// - 0x2140,// PORTCPLD0 I2C Master OSFP Port65 - 0x2160,// PORTCPLD0 I2C Master OSFP Port66 - 0x21C0,// PORTCPLD0 I2C Master OSFP Port67 - 0x21E0,// PORTCPLD0 I2C Master OSFP Port68 - 0x2240,// PORTCPLD0 I2C Master OSFP Port69 - 0x2260,// PORTCPLD0 I2C Master OSFP Port70 - 0x22C0,// PORTCPLD0 I2C Master OSFP Port71 - 0x22E0,// PORTCPLD0 I2C Master OSFP Port72 - 0x2340,// PORTCPLD0 I2C Master OSFP Port73 - 0x2360,// PORTCPLD0 I2C Master OSFP Port74 - 0x23C0,// PORTCPLD0 I2C Master OSFP Port75 - 0x23E0,// PORTCPLD0 I2C Master OSFP Port76 - 0x2440,// PORTCPLD0 I2C Master OSFP Port77 - 0x2460,// PORTCPLD0 I2C Master OSFP Port78 - 0x24C0,// PORTCPLD0 I2C Master OSFP Port79 - 0x24E0,// PORTCPLD0 I2C Master OSFP Port80 - 0x2140,// PORTCPLD1 I2C Master OSFP Port81 - 0x2160,// PORTCPLD1 I2C Master OSFP Port82 - 0x21C0,// PORTCPLD1 I2C Master OSFP Port83 - 0x21E0,// PORTCPLD1 I2C Master OSFP Port84 - 0x2240,// PORTCPLD1 I2C Master OSFP Port85 - 0x2260,// PORTCPLD1 I2C Master OSFP Port86 - 0x22C0,// PORTCPLD1 I2C Master OSFP Port87 - 0x22E0,// PORTCPLD1 I2C Master OSFP Port88 - 0x2340,// PORTCPLD1 I2C Master OSFP Port89 - 0x2360,// PORTCPLD1 I2C Master OSFP Port90 - 0x23C0,// PORTCPLD1 I2C Master OSFP Port91 - 0x23E0,// PORTCPLD1 I2C Master OSFP Port92 - 0x2440,// PORTCPLD1 I2C Master OSFP Port93 - 0x2460,// PORTCPLD1 I2C Master OSFP Port94 - 0x24C0,// PORTCPLD1 I2C Master OSFP Port95 - 0x24E0,// PORTCPLD1 I2C Master OSFP Port96 -////////////////////////////////////////////////////// - 0x2100,// MESS_BOT_L_CPLD I2C Master OSFP Port97 - 0x2120,// MESS_BOT_L_CPLD I2C Master OSFP Port98 - 0x2140,// MESS_BOT_L_CPLD I2C Master OSFP Port99 - 0x2160,// MESS_BOT_L_CPLD I2C Master OSFP Port100 - 0x2180,// MESS_BOT_L_CPLD I2C Master OSFP Port101 - 0x21A0,// MESS_BOT_L_CPLD I2C Master OSFP Port102 - 0x21C0,// MESS_BOT_L_CPLD I2C Master OSFP Port103 - 0x21E0,// MESS_BOT_L_CPLD I2C Master OSFP Port104 - 0x2200,// MESS_BOT_L_CPLD I2C Master OSFP Port105 - 0x2220,// MESS_BOT_L_CPLD I2C Master OSFP Port106 - 0x2240,// MESS_BOT_L_CPLD I2C Master OSFP Port107 - 0x2260,// MESS_BOT_L_CPLD I2C Master OSFP Port108 - 0x2280,// MESS_BOT_L_CPLD I2C Master OSFP Port109 - 0x22A0,// MESS_BOT_L_CPLD I2C Master OSFP Port110 - 0x22C0,// MESS_BOT_L_CPLD I2C Master OSFP Port111 - 0x22E0,// MESS_BOT_L_CPLD I2C Master OSFP Port112 - 0x2100,// MESS_BOT_R_CPLD I2C Master OSFP Port113 - 0x2120,// MESS_BOT_R_CPLD I2C Master OSFP Port114 - 0x2140,// MESS_BOT_R_CPLD I2C Master OSFP Port115 - 0x2160,// MESS_BOT_R_CPLD I2C Master OSFP Port116 - 0x2180,// MESS_BOT_R_CPLD I2C Master OSFP Port117 - 0x21A0,// MESS_BOT_R_CPLD I2C Master OSFP Port118 - 0x21C0,// MESS_BOT_R_CPLD I2C Master OSFP Port119 - 0x21E0,// MESS_BOT_R_CPLD I2C Master OSFP Port120 - 0x2200,// MESS_BOT_R_CPLD I2C Master OSFP Port121 - 0x2220,// MESS_BOT_R_CPLD I2C Master OSFP Port122 - 0x2240,// MESS_BOT_R_CPLD I2C Master OSFP Port123 - 0x2260,// MESS_BOT_R_CPLD I2C Master OSFP Port124 - 0x2280,// MESS_BOT_R_CPLD I2C Master OSFP Port125 - 0x22A0,// MESS_BOT_R_CPLD I2C Master OSFP Port126 - 0x22C0,// MESS_BOT_R_CPLD I2C Master OSFP Port127 - 0x22E0,// MESS_BOT_R_CPLD I2C Master OSFP Port128 - 0x2500,// MESS_BOT_R_CPLD I2C Master SFP Port1 - 0x2520,// MESS_BOT_R_CPLD I2C Master SFP Port2 + 0x22100,// MESS_TOP_L_CPLD I2C Master OSFP Port1 + 0x22120,// MESS_TOP_L_CPLD I2C Master OSFP Port2 + 0x22140,// MESS_TOP_L_CPLD I2C Master OSFP Port3 + 0x22160,// MESS_TOP_L_CPLD I2C Master OSFP Port4 + 0x22180,// MESS_TOP_L_CPLD I2C Master OSFP Port5 + 0x221A0,// MESS_TOP_L_CPLD I2C Master OSFP Port6 + 0x221C0,// MESS_TOP_L_CPLD I2C Master OSFP Port7 + 0x221E0,// MESS_TOP_L_CPLD I2C Master OSFP Port8 + 0x22200,// MESS_TOP_L_CPLD I2C Master OSFP Port9 + 0x22220,// MESS_TOP_L_CPLD I2C Master OSFP Port10 + 0x22240,// MESS_TOP_L_CPLD I2C Master OSFP Port11 + 0x22260,// MESS_TOP_L_CPLD I2C Master OSFP Port12 + 0x22280,// MESS_TOP_L_CPLD I2C Master OSFP Port13 + 0x222A0,// MESS_TOP_L_CPLD I2C Master OSFP Port14 + 0x222C0,// MESS_TOP_L_CPLD I2C Master OSFP Port15 + 0x222E0,// MESS_TOP_L_CPLD I2C Master OSFP Port16 + 0x32100,// MESS_TOP_R_CPLD I2C Master OSFP Port17 + 0x32120,// MESS_TOP_R_CPLD I2C Master OSFP Port18 + 0x32140,// MESS_TOP_R_CPLD I2C Master OSFP Port19 + 0x32160,// MESS_TOP_R_CPLD I2C Master OSFP Port20 + 0x32180,// MESS_TOP_R_CPLD I2C Master OSFP Port21 + 0x321A0,// MESS_TOP_R_CPLD I2C Master OSFP Port22 + 0x321C0,// MESS_TOP_R_CPLD I2C Master OSFP Port23 + 0x321E0,// MESS_TOP_R_CPLD I2C Master OSFP Port24 + 0x32200,// MESS_TOP_R_CPLD I2C Master OSFP Port25 + 0x32220,// MESS_TOP_R_CPLD I2C Master OSFP Port26 + 0x32240,// MESS_TOP_R_CPLD I2C Master OSFP Port27 + 0x32260,// MESS_TOP_R_CPLD I2C Master OSFP Port28 + 0x32280,// MESS_TOP_R_CPLD I2C Master OSFP Port29 + 0x322A0,// MESS_TOP_R_CPLD I2C Master OSFP Port30 + 0x322C0,// MESS_TOP_R_CPLD I2C Master OSFP Port31 + 0x322E0,// MESS_TOP_R_CPLD I2C Master OSFP Port32 +////////////////////////////////////////////////////// + 0x02100,// PORTCPLD0 I2C Master OSFP Port33 + 0x02120,// PORTCPLD0 I2C Master OSFP Port34 + 0x02180,// PORTCPLD0 I2C Master OSFP Port35 + 0x021A0,// PORTCPLD0 I2C Master OSFP Port36 + 0x02200,// PORTCPLD0 I2C Master OSFP Port37 + 0x02220,// PORTCPLD0 I2C Master OSFP Port38 + 0x02280,// PORTCPLD0 I2C Master OSFP Port39 + 0x022A0,// PORTCPLD0 I2C Master OSFP Port40 + 0x02300,// PORTCPLD0 I2C Master OSFP Port41 + 0x02320,// PORTCPLD0 I2C Master OSFP Port42 + 0x02380,// PORTCPLD0 I2C Master OSFP Port43 + 0x023A0,// PORTCPLD0 I2C Master OSFP Port44 + 0x02400,// PORTCPLD0 I2C Master OSFP Port45 + 0x02420,// PORTCPLD0 I2C Master OSFP Port46 + 0x02480,// PORTCPLD0 I2C Master OSFP Port47 + 0x024A0,// PORTCPLD0 I2C Master OSFP Port48 + 0x12100,// PORTCPLD1 I2C Master OSFP Port49 + 0x12120,// PORTCPLD1 I2C Master OSFP Port50 + 0x12180,// PORTCPLD1 I2C Master OSFP Port51 + 0x121A0,// PORTCPLD1 I2C Master OSFP Port52 + 0x12200,// PORTCPLD1 I2C Master OSFP Port53 + 0x12220,// PORTCPLD1 I2C Master OSFP Port54 + 0x12280,// PORTCPLD1 I2C Master OSFP Port55 + 0x122A0,// PORTCPLD1 I2C Master OSFP Port56 + 0x12300,// PORTCPLD1 I2C Master OSFP Port57 + 0x12320,// PORTCPLD1 I2C Master OSFP Port58 + 0x12380,// PORTCPLD1 I2C Master OSFP Port59 + 0x123A0,// PORTCPLD1 I2C Master OSFP Port60 + 0x12400,// PORTCPLD1 I2C Master OSFP Port61 + 0x12420,// PORTCPLD1 I2C Master OSFP Port62 + 0x12480,// PORTCPLD1 I2C Master OSFP Port63 + 0x124A0,// PORTCPLD1 I2C Master OSFP Port64 +////////////////////////////////////////////////////// + 0x02140,// PORTCPLD0 I2C Master OSFP Port65 + 0x02160,// PORTCPLD0 I2C Master OSFP Port66 + 0x021C0,// PORTCPLD0 I2C Master OSFP Port67 + 0x021E0,// PORTCPLD0 I2C Master OSFP Port68 + 0x02240,// PORTCPLD0 I2C Master OSFP Port69 + 0x02260,// PORTCPLD0 I2C Master OSFP Port70 + 0x022C0,// PORTCPLD0 I2C Master OSFP Port71 + 0x022E0,// PORTCPLD0 I2C Master OSFP Port72 + 0x02340,// PORTCPLD0 I2C Master OSFP Port73 + 0x02360,// PORTCPLD0 I2C Master OSFP Port74 + 0x023C0,// PORTCPLD0 I2C Master OSFP Port75 + 0x023E0,// PORTCPLD0 I2C Master OSFP Port76 + 0x02440,// PORTCPLD0 I2C Master OSFP Port77 + 0x02460,// PORTCPLD0 I2C Master OSFP Port78 + 0x024C0,// PORTCPLD0 I2C Master OSFP Port79 + 0x024E0,// PORTCPLD0 I2C Master OSFP Port80 + 0x12140,// PORTCPLD1 I2C Master OSFP Port81 + 0x12160,// PORTCPLD1 I2C Master OSFP Port82 + 0x121C0,// PORTCPLD1 I2C Master OSFP Port83 + 0x121E0,// PORTCPLD1 I2C Master OSFP Port84 + 0x12240,// PORTCPLD1 I2C Master OSFP Port85 + 0x12260,// PORTCPLD1 I2C Master OSFP Port86 + 0x122C0,// PORTCPLD1 I2C Master OSFP Port87 + 0x122E0,// PORTCPLD1 I2C Master OSFP Port88 + 0x12340,// PORTCPLD1 I2C Master OSFP Port89 + 0x12360,// PORTCPLD1 I2C Master OSFP Port90 + 0x123C0,// PORTCPLD1 I2C Master OSFP Port91 + 0x123E0,// PORTCPLD1 I2C Master OSFP Port92 + 0x12440,// PORTCPLD1 I2C Master OSFP Port93 + 0x12460,// PORTCPLD1 I2C Master OSFP Port94 + 0x124C0,// PORTCPLD1 I2C Master OSFP Port95 + 0x124E0,// PORTCPLD1 I2C Master OSFP Port96 +////////////////////////////////////////////////////// + 0x42100,// MESS_BOT_L_CPLD I2C Master OSFP Port97 + 0x42120,// MESS_BOT_L_CPLD I2C Master OSFP Port98 + 0x42140,// MESS_BOT_L_CPLD I2C Master OSFP Port99 + 0x42160,// MESS_BOT_L_CPLD I2C Master OSFP Port100 + 0x42180,// MESS_BOT_L_CPLD I2C Master OSFP Port101 + 0x421A0,// MESS_BOT_L_CPLD I2C Master OSFP Port102 + 0x421C0,// MESS_BOT_L_CPLD I2C Master OSFP Port103 + 0x421E0,// MESS_BOT_L_CPLD I2C Master OSFP Port104 + 0x42200,// MESS_BOT_L_CPLD I2C Master OSFP Port105 + 0x42220,// MESS_BOT_L_CPLD I2C Master OSFP Port106 + 0x42240,// MESS_BOT_L_CPLD I2C Master OSFP Port107 + 0x42260,// MESS_BOT_L_CPLD I2C Master OSFP Port108 + 0x42280,// MESS_BOT_L_CPLD I2C Master OSFP Port109 + 0x422A0,// MESS_BOT_L_CPLD I2C Master OSFP Port110 + 0x422C0,// MESS_BOT_L_CPLD I2C Master OSFP Port111 + 0x422E0,// MESS_BOT_L_CPLD I2C Master OSFP Port112 + 0x52100,// MESS_BOT_R_CPLD I2C Master OSFP Port113 + 0x52120,// MESS_BOT_R_CPLD I2C Master OSFP Port114 + 0x52140,// MESS_BOT_R_CPLD I2C Master OSFP Port115 + 0x52160,// MESS_BOT_R_CPLD I2C Master OSFP Port116 + 0x52180,// MESS_BOT_R_CPLD I2C Master OSFP Port117 + 0x521A0,// MESS_BOT_R_CPLD I2C Master OSFP Port118 + 0x521C0,// MESS_BOT_R_CPLD I2C Master OSFP Port119 + 0x521E0,// MESS_BOT_R_CPLD I2C Master OSFP Port120 + 0x52200,// MESS_BOT_R_CPLD I2C Master OSFP Port121 + 0x52220,// MESS_BOT_R_CPLD I2C Master OSFP Port122 + 0x52240,// MESS_BOT_R_CPLD I2C Master OSFP Port123 + 0x52260,// MESS_BOT_R_CPLD I2C Master OSFP Port124 + 0x52280,// MESS_BOT_R_CPLD I2C Master OSFP Port125 + 0x522A0,// MESS_BOT_R_CPLD I2C Master OSFP Port126 + 0x522C0,// MESS_BOT_R_CPLD I2C Master OSFP Port127 + 0x522E0,// MESS_BOT_R_CPLD I2C Master OSFP Port128 +////////////////////////////////////////////////////// + 0x12500,// QSFP28 port 129 + 0x2500,// SFP+ port 130 + 0x2520,// redriver }; static struct ocores_i2c_platform_data i2c_data = { @@ -250,7 +252,7 @@ static int __init h6_ocore_i2c_init(void) res = &ocores_resources[i]; switch (i) { - case 0 ... 129: + case 0 ... PORT_NUM: bar_base = pci_resource_start(pcidev, BAR0_NUM); break; default: diff --git a/ixr7220h6-128/modules/i2c-ocores.c b/ixr7220h6-128/modules/i2c-ocores.c index a6c87b8..e756457 100644 --- a/ixr7220h6-128/modules/i2c-ocores.c +++ b/ixr7220h6-128/modules/i2c-ocores.c @@ -25,9 +25,8 @@ #include #include #include -#include -#define OCORE_DRIVER_VERSION "2.0.0" +#define OCORE_DRIVER_VERSION "5.0.0-ChipSel" enum _print_level {PL_ERR, PL_WARN, PL_INFO, PL_DEBUG}; @@ -35,178 +34,10 @@ static uint param_verbose = PL_WARN; module_param(param_verbose, uint, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(param_verbose, "Print more information for debugging. It can be 0,1 2, or 3."); -static uint param_timeout = 1; +//static uint param_timeout = 1; +static uint param_timeout = 2; module_param(param_timeout, uint, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(param_timeout, "for debugging. 1 ms should be enough"); - -// spi mux mapping table -// ex : arr_spi_mux [0] = port 1 = dev_id 0 = spi mux 0x04 -// ex : arr_spi_mux [32] = port 33 = dev_id 32 = spi mux 0x0 -static uint8_t arr_spi_mux[] = { - // top part 64 port - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - - // bottom part 64 port - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, - - // SFP - 0x01, 0x01 -}; - -#define PORT_NUM (128 + 2) /*128 OSFPs + 2 SFP28s*/ -static const uint arr_pcie_offset[PORT_NUM]= { - 0x2100,// MESS_TOP_L_CPLD I2C Master OSFP Port1 - 0x2120,// MESS_TOP_L_CPLD I2C Master OSFP Port2 - 0x2140,// MESS_TOP_L_CPLD I2C Master OSFP Port3 - 0x2160,// MESS_TOP_L_CPLD I2C Master OSFP Port4 - 0x2180,// MESS_TOP_L_CPLD I2C Master OSFP Port5 - 0x21A0,// MESS_TOP_L_CPLD I2C Master OSFP Port6 - 0x21C0,// MESS_TOP_L_CPLD I2C Master OSFP Port7 - 0x21E0,// MESS_TOP_L_CPLD I2C Master OSFP Port8 - 0x2200,// MESS_TOP_L_CPLD I2C Master OSFP Port9 - 0x2220,// MESS_TOP_L_CPLD I2C Master OSFP Port10 - 0x2240,// MESS_TOP_L_CPLD I2C Master OSFP Port11 - 0x2260,// MESS_TOP_L_CPLD I2C Master OSFP Port12 - 0x2280,// MESS_TOP_L_CPLD I2C Master OSFP Port13 - 0x22A0,// MESS_TOP_L_CPLD I2C Master OSFP Port14 - 0x22C0,// MESS_TOP_L_CPLD I2C Master OSFP Port15 - 0x22E0,// MESS_TOP_L_CPLD I2C Master OSFP Port16 - 0x2100,// MESS_TOP_R_CPLD I2C Master OSFP Port17 - 0x2120,// MESS_TOP_R_CPLD I2C Master OSFP Port18 - 0x2140,// MESS_TOP_R_CPLD I2C Master OSFP Port19 - 0x2160,// MESS_TOP_R_CPLD I2C Master OSFP Port20 - 0x2180,// MESS_TOP_R_CPLD I2C Master OSFP Port21 - 0x21A0,// MESS_TOP_R_CPLD I2C Master OSFP Port22 - 0x21C0,// MESS_TOP_R_CPLD I2C Master OSFP Port23 - 0x21E0,// MESS_TOP_R_CPLD I2C Master OSFP Port24 - 0x2200,// MESS_TOP_R_CPLD I2C Master OSFP Port25 - 0x2220,// MESS_TOP_R_CPLD I2C Master OSFP Port26 - 0x2240,// MESS_TOP_R_CPLD I2C Master OSFP Port27 - 0x2260,// MESS_TOP_R_CPLD I2C Master OSFP Port28 - 0x2280,// MESS_TOP_R_CPLD I2C Master OSFP Port29 - 0x22A0,// MESS_TOP_R_CPLD I2C Master OSFP Port30 - 0x22C0,// MESS_TOP_R_CPLD I2C Master OSFP Port31 - 0x22E0,// MESS_TOP_R_CPLD I2C Master OSFP Port32 -////////////////////////////////////////////////////// - 0x2100,// PORTCPLD0 I2C Master OSFP Port33 - 0x2120,// PORTCPLD0 I2C Master OSFP Port34 - 0x2180,// PORTCPLD0 I2C Master OSFP Port35 - 0x21A0,// PORTCPLD0 I2C Master OSFP Port36 - 0x2200,// PORTCPLD0 I2C Master OSFP Port37 - 0x2220,// PORTCPLD0 I2C Master OSFP Port38 - 0x2280,// PORTCPLD0 I2C Master OSFP Port39 - 0x22A0,// PORTCPLD0 I2C Master OSFP Port40 - 0x2300,// PORTCPLD0 I2C Master OSFP Port41 - 0x2320,// PORTCPLD0 I2C Master OSFP Port42 - 0x2380,// PORTCPLD0 I2C Master OSFP Port43 - 0x23A0,// PORTCPLD0 I2C Master OSFP Port44 - 0x2400,// PORTCPLD0 I2C Master OSFP Port45 - 0x2420,// PORTCPLD0 I2C Master OSFP Port46 - 0x2480,// PORTCPLD0 I2C Master OSFP Port47 - 0x24A0,// PORTCPLD0 I2C Master OSFP Port48 - 0x2100,// PORTCPLD1 I2C Master OSFP Port49 - 0x2120,// PORTCPLD1 I2C Master OSFP Port50 - 0x2180,// PORTCPLD1 I2C Master OSFP Port51 - 0x21A0,// PORTCPLD1 I2C Master OSFP Port52 - 0x2200,// PORTCPLD1 I2C Master OSFP Port53 - 0x2220,// PORTCPLD1 I2C Master OSFP Port54 - 0x2280,// PORTCPLD1 I2C Master OSFP Port55 - 0x22A0,// PORTCPLD1 I2C Master OSFP Port56 - 0x2300,// PORTCPLD1 I2C Master OSFP Port57 - 0x2320,// PORTCPLD1 I2C Master OSFP Port58 - 0x2380,// PORTCPLD1 I2C Master OSFP Port59 - 0x23A0,// PORTCPLD1 I2C Master OSFP Port60 - 0x2400,// PORTCPLD1 I2C Master OSFP Port61 - 0x2420,// PORTCPLD1 I2C Master OSFP Port62 - 0x2480,// PORTCPLD1 I2C Master OSFP Port63 - 0x24A0,// PORTCPLD1 I2C Master OSFP Port64 -////////////////////////////////////////////////////// - 0x2140,// PORTCPLD0 I2C Master OSFP Port65 - 0x2160,// PORTCPLD0 I2C Master OSFP Port66 - 0x21C0,// PORTCPLD0 I2C Master OSFP Port67 - 0x21E0,// PORTCPLD0 I2C Master OSFP Port68 - 0x2240,// PORTCPLD0 I2C Master OSFP Port69 - 0x2260,// PORTCPLD0 I2C Master OSFP Port70 - 0x22C0,// PORTCPLD0 I2C Master OSFP Port71 - 0x22E0,// PORTCPLD0 I2C Master OSFP Port72 - 0x2340,// PORTCPLD0 I2C Master OSFP Port73 - 0x2360,// PORTCPLD0 I2C Master OSFP Port74 - 0x23C0,// PORTCPLD0 I2C Master OSFP Port75 - 0x23E0,// PORTCPLD0 I2C Master OSFP Port76 - 0x2440,// PORTCPLD0 I2C Master OSFP Port77 - 0x2460,// PORTCPLD0 I2C Master OSFP Port78 - 0x24C0,// PORTCPLD0 I2C Master OSFP Port79 - 0x24E0,// PORTCPLD0 I2C Master OSFP Port80 - 0x2140,// PORTCPLD1 I2C Master OSFP Port81 - 0x2160,// PORTCPLD1 I2C Master OSFP Port82 - 0x21C0,// PORTCPLD1 I2C Master OSFP Port83 - 0x21E0,// PORTCPLD1 I2C Master OSFP Port84 - 0x2240,// PORTCPLD1 I2C Master OSFP Port85 - 0x2260,// PORTCPLD1 I2C Master OSFP Port86 - 0x22C0,// PORTCPLD1 I2C Master OSFP Port87 - 0x22E0,// PORTCPLD1 I2C Master OSFP Port88 - 0x2340,// PORTCPLD1 I2C Master OSFP Port89 - 0x2360,// PORTCPLD1 I2C Master OSFP Port90 - 0x23C0,// PORTCPLD1 I2C Master OSFP Port91 - 0x23E0,// PORTCPLD1 I2C Master OSFP Port92 - 0x2440,// PORTCPLD1 I2C Master OSFP Port93 - 0x2460,// PORTCPLD1 I2C Master OSFP Port94 - 0x24C0,// PORTCPLD1 I2C Master OSFP Port95 - 0x24E0,// PORTCPLD1 I2C Master OSFP Port96 -////////////////////////////////////////////////////// - 0x2100,// MESS_BOT_L_CPLD I2C Master OSFP Port97 - 0x2120,// MESS_BOT_L_CPLD I2C Master OSFP Port98 - 0x2140,// MESS_BOT_L_CPLD I2C Master OSFP Port99 - 0x2160,// MESS_BOT_L_CPLD I2C Master OSFP Port100 - 0x2180,// MESS_BOT_L_CPLD I2C Master OSFP Port101 - 0x21A0,// MESS_BOT_L_CPLD I2C Master OSFP Port102 - 0x21C0,// MESS_BOT_L_CPLD I2C Master OSFP Port103 - 0x21E0,// MESS_BOT_L_CPLD I2C Master OSFP Port104 - 0x2200,// MESS_BOT_L_CPLD I2C Master OSFP Port105 - 0x2220,// MESS_BOT_L_CPLD I2C Master OSFP Port106 - 0x2240,// MESS_BOT_L_CPLD I2C Master OSFP Port107 - 0x2260,// MESS_BOT_L_CPLD I2C Master OSFP Port108 - 0x2280,// MESS_BOT_L_CPLD I2C Master OSFP Port109 - 0x22A0,// MESS_BOT_L_CPLD I2C Master OSFP Port110 - 0x22C0,// MESS_BOT_L_CPLD I2C Master OSFP Port111 - 0x22E0,// MESS_BOT_L_CPLD I2C Master OSFP Port112 - 0x2100,// MESS_BOT_R_CPLD I2C Master OSFP Port113 - 0x2120,// MESS_BOT_R_CPLD I2C Master OSFP Port114 - 0x2140,// MESS_BOT_R_CPLD I2C Master OSFP Port115 - 0x2160,// MESS_BOT_R_CPLD I2C Master OSFP Port116 - 0x2180,// MESS_BOT_R_CPLD I2C Master OSFP Port117 - 0x21A0,// MESS_BOT_R_CPLD I2C Master OSFP Port118 - 0x21C0,// MESS_BOT_R_CPLD I2C Master OSFP Port119 - 0x21E0,// MESS_BOT_R_CPLD I2C Master OSFP Port120 - 0x2200,// MESS_BOT_R_CPLD I2C Master OSFP Port121 - 0x2220,// MESS_BOT_R_CPLD I2C Master OSFP Port122 - 0x2240,// MESS_BOT_R_CPLD I2C Master OSFP Port123 - 0x2260,// MESS_BOT_R_CPLD I2C Master OSFP Port124 - 0x2280,// MESS_BOT_R_CPLD I2C Master OSFP Port125 - 0x22A0,// MESS_BOT_R_CPLD I2C Master OSFP Port126 - 0x22C0,// MESS_BOT_R_CPLD I2C Master OSFP Port127 - 0x22E0,// MESS_BOT_R_CPLD I2C Master OSFP Port128 - 0x2500,// MESS_BOT_R_CPLD I2C Master SFP Port1 - 0x2520,// MESS_BOT_R_CPLD I2C Master SFP Port2 -}; - -#define PCIE_SPI_MUX_OFFSET 0x2f00 -static phys_addr_t pcie_bar0_phys_addr = 0; -static void __iomem *spi_mux_virt_base= NULL; /* * 'process_lock' exists because ocores_process() and ocores_process_timeout() * can't run in parallel. @@ -229,7 +60,6 @@ struct ocores_i2c { int bus_clock_khz; void (*setreg)(struct ocores_i2c *i2c, int reg, u8 value); u8 (*getreg)(struct ocores_i2c *i2c, int reg); - u8 cached_pdev_id; }; /* registers */ @@ -579,29 +409,12 @@ static void ocores_process_polling(struct ocores_i2c *i2c) } } -// spinlock_t pcie_mux_lock; -static DEFINE_MUTEX(pcie_mux_lock); -static volatile int last_id = -1; static int ocores_xfer_core(struct ocores_i2c *i2c, struct i2c_msg *msgs, int num, bool polling) { int ret; u8 ctrl; - - if (i2c->cached_pdev_id >= ARRAY_SIZE(arr_spi_mux)) { - return -EINVAL; - } - - mutex_lock(&pcie_mux_lock); - - if (last_id != i2c->cached_pdev_id) - { - INFO("switch mux to %u i2c->cached_pdev_id =%u \n", arr_spi_mux[i2c->cached_pdev_id], i2c->cached_pdev_id); - iowrite8(arr_spi_mux[i2c->cached_pdev_id], spi_mux_virt_base); - last_id = i2c->cached_pdev_id; - (void)ioread8(spi_mux_virt_base); - } ctrl = oc_getreg(i2c, OCI2C_CONTROL); if (polling) @@ -620,21 +433,16 @@ static int ocores_xfer_core(struct ocores_i2c *i2c, if (polling) { ocores_process_polling(i2c); } else { - INFO("going to wait_event_timeout"); ret = wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || (i2c->state == STATE_DONE), HZ); if (ret == 0) { ocores_process_timeout(i2c); - mutex_unlock(&pcie_mux_lock); return -ETIMEDOUT; } } - ret = (i2c->state == STATE_DONE) ? num : -EIO; - mutex_unlock(&pcie_mux_lock); - - return ret; + return (i2c->state == STATE_DONE) ? num : -EIO; } static int ocores_xfer_polling(struct i2c_adapter *adap, @@ -670,9 +478,6 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c) return -EINVAL; } - oc_setreg(i2c, OCI2C_PRELOW, prescale & 0xff); - oc_setreg(i2c, OCI2C_PREHIGH, prescale >> 8); - /* Init the device */ oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_EN); @@ -876,42 +681,6 @@ static int ocores_i2c_probe(struct platform_device *pdev) if (res) { i2c->base = ocores_devm_ioremap(&pdev->dev, res); dev_info(&pdev->dev, "Resouce start:0x%llx, end:0x%llx", res->start, res->end); - dev_info(&pdev->dev,"dev id=%u \n", pdev->id); - - i2c->cached_pdev_id = pdev->id; - - mutex_lock(&pcie_mux_lock); - - if (spi_mux_virt_base == NULL) - { - if (i2c->cached_pdev_id >= 0 && i2c->cached_pdev_id < ARRAY_SIZE(arr_pcie_offset)) - { - pcie_bar0_phys_addr = res->start - arr_pcie_offset[i2c->cached_pdev_id]; - spi_mux_virt_base = ioremap(pcie_bar0_phys_addr + PCIE_SPI_MUX_OFFSET, 4); - if (!spi_mux_virt_base) - { - mutex_unlock(&pcie_mux_lock); - printk(KERN_ERR "ioremap failed\n"); - return -ENOMEM; - } - last_id = -1; - pr_info("Device %d: BAR0=0x%08llx, offset=0x%08x, mapped=0x%08llx,spi_mux_virt_base=0x%p\n", - i2c->cached_pdev_id, - pcie_bar0_phys_addr, - arr_pcie_offset[i2c->cached_pdev_id], - res->start, - spi_mux_virt_base); - } - } - - if (spi_mux_virt_base != NULL) { - iowrite8(arr_spi_mux[i2c->cached_pdev_id], spi_mux_virt_base); - last_id = i2c->cached_pdev_id; - dev_info(&pdev->dev,"switch mux to %d \n", arr_spi_mux[i2c->cached_pdev_id]); - (void)ioread8(spi_mux_virt_base); - } - mutex_unlock(&pcie_mux_lock); - if (IS_ERR(i2c->base)) return PTR_ERR(i2c->base); } else { @@ -1056,11 +825,6 @@ static int ocores_i2c_resume(struct device *dev) { struct ocores_i2c *i2c = dev_get_drvdata(dev); - pr_info("ocores_i2c_resume\n"); - mutex_lock(&pcie_mux_lock); - last_id = -1; - mutex_unlock(&pcie_mux_lock); - if (!IS_ERR(i2c->clk)) { unsigned long rate; int ret = clk_prepare_enable(i2c->clk); @@ -1107,10 +871,7 @@ static int __init ocores_i2c_init(void) static void __exit ocores_i2c_exit(void) { platform_driver_unregister(&ocores_i2c_driver); - if (spi_mux_virt_base) { - iounmap(spi_mux_virt_base); - spi_mux_virt_base= NULL; - } + } module_init(ocores_i2c_init); diff --git a/ixr7220h6-128/modules/sys_cpld.c b/ixr7220h6-128/modules/mb_pld.c similarity index 76% rename from ixr7220h6-128/modules/sys_cpld.c rename to ixr7220h6-128/modules/mb_pld.c index 1c28a9f..e24e4ea 100644 --- a/ixr7220h6-128/modules/sys_cpld.c +++ b/ixr7220h6-128/modules/mb_pld.c @@ -1,4 +1,4 @@ -// * CPLD driver for Nokia-7220-IXR-H6-128 Router +// * PLD driver for Nokia-7220-IXR-H6-128 Router // * // * Copyright (C) 2026 Nokia Corporation. // * @@ -26,15 +26,15 @@ #include #include -#define DRIVER_NAME "sys_cpld" +#define DRIVER_NAME "mb_pld" // REGISTERS ADDRESS MAP #define VER_MAJOR_REG 0x00 #define VER_MINOR_REG 0x01 #define SCRATCH_REG 0x04 -#define SYS_LED_REG2 0x8 -#define SYS_LED_REG3 0x9 #define OSFP_EFUSE_REG0 0x10 +#define SYS_LED_REG0 0x80 +#define SYS_LED_REG1 0x81 static const unsigned short cpld_address_list[] = {0x71, I2C_CLIENT_END}; @@ -110,20 +110,20 @@ static ssize_t set_scratch(struct device *dev, struct device_attribute *devattr, return count; } -static ssize_t show_led2(struct device *dev, struct device_attribute *devattr, char *buf) +static ssize_t show_led0(struct device *dev, struct device_attribute *devattr, char *buf) { struct cpld_data *data = dev_get_drvdata(dev); struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val = 0; u8 mask = 0xF; - val = cpld_i2c_read(data, SYS_LED_REG2); + val = cpld_i2c_read(data, SYS_LED_REG0); if (sda->index == 0) mask = 0xF; else mask = 0x3; return sprintf(buf, "0x%x\n", (val>>sda->index) & mask); } -static ssize_t set_led2(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) +static ssize_t set_led0(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) { struct cpld_data *data = dev_get_drvdata(dev); struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); @@ -142,28 +142,28 @@ static ssize_t set_led2(struct device *dev, struct device_attribute *devattr, co return -EINVAL; } reg_mask = (~(mask << sda->index)) & 0xFF; - reg_val = cpld_i2c_read(data, SYS_LED_REG2); + reg_val = cpld_i2c_read(data, SYS_LED_REG0); reg_val = reg_val & reg_mask; usr_val = usr_val << sda->index; - cpld_i2c_write(data, SYS_LED_REG2, (reg_val | usr_val)); + cpld_i2c_write(data, SYS_LED_REG0, (reg_val | usr_val)); return count; } -static ssize_t show_led3(struct device *dev, struct device_attribute *devattr, char *buf) +static ssize_t show_led1(struct device *dev, struct device_attribute *devattr, char *buf) { struct cpld_data *data = dev_get_drvdata(dev); struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val = 0; u8 mask = 0xF; - val = cpld_i2c_read(data, SYS_LED_REG3); + val = cpld_i2c_read(data, SYS_LED_REG1); if (sda->index == 0) mask = 0xF; else mask = 0x3; return sprintf(buf, "0x%x\n", (val>>sda->index) & mask); } -static ssize_t set_led3(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) +static ssize_t set_led1(struct device *dev, struct device_attribute *devattr, const char *buf, size_t count) { struct cpld_data *data = dev_get_drvdata(dev); struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); @@ -182,10 +182,10 @@ static ssize_t set_led3(struct device *dev, struct device_attribute *devattr, co return -EINVAL; } reg_mask = (~(mask << sda->index)) & 0xFF; - reg_val = cpld_i2c_read(data, SYS_LED_REG3); + reg_val = cpld_i2c_read(data, SYS_LED_REG1); reg_val = reg_val & reg_mask; usr_val = usr_val << sda->index; - cpld_i2c_write(data, SYS_LED_REG3, (reg_val | usr_val)); + cpld_i2c_write(data, SYS_LED_REG1, (reg_val | usr_val)); return count; } @@ -222,20 +222,20 @@ static ssize_t set_osfp_efuse(struct device *dev, struct device_attribute *devat static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_ver, NULL, 0); static SENSOR_DEVICE_ATTR(scratch, S_IRUGO | S_IWUSR, show_scratch, set_scratch, 0); -//static SENSOR_DEVICE_ATTR(led_sys, S_IRUGO | S_IWUSR, show_led0, set_led0, 0); -static SENSOR_DEVICE_ATTR(led_psu, S_IRUGO, show_led3, NULL, 0); -//static SENSOR_DEVICE_ATTR(led_loc, S_IRUGO | S_IWUSR, show_led2, set_led2, 0); -static SENSOR_DEVICE_ATTR(led_fan, S_IRUGO | S_IWUSR, show_led2, set_led2, 4); +static SENSOR_DEVICE_ATTR(led_sys, S_IRUGO | S_IWUSR, show_led0, set_led0, 0); +static SENSOR_DEVICE_ATTR(led_psu, S_IRUGO, show_led0, NULL, 4); +static SENSOR_DEVICE_ATTR(led_loc, S_IRUGO | S_IWUSR, show_led1, set_led1, 0); +static SENSOR_DEVICE_ATTR(led_fan, S_IRUGO | S_IWUSR, show_led1, set_led1, 4); static SENSOR_DEVICE_ATTR(osfp_efuse, S_IRUGO | S_IWUSR, show_osfp_efuse, set_osfp_efuse, 0); -static struct attribute *sys_cpld_attributes[] = { +static struct attribute *mb_pld_attributes[] = { &sensor_dev_attr_version.dev_attr.attr, &sensor_dev_attr_scratch.dev_attr.attr, - //&sensor_dev_attr_led_sys.dev_attr.attr, + &sensor_dev_attr_led_sys.dev_attr.attr, &sensor_dev_attr_led_psu.dev_attr.attr, - //&sensor_dev_attr_led_loc.dev_attr.attr, + &sensor_dev_attr_led_loc.dev_attr.attr, &sensor_dev_attr_led_fan.dev_attr.attr, &sensor_dev_attr_osfp_efuse.dev_attr.attr, @@ -243,11 +243,11 @@ static struct attribute *sys_cpld_attributes[] = { NULL }; -static const struct attribute_group sys_cpld_group = { - .attrs = sys_cpld_attributes, +static const struct attribute_group mb_pld_group = { + .attrs = mb_pld_attributes, }; -static int sys_cpld_probe(struct i2c_client *client) +static int mb_pld_probe(struct i2c_client *client) { int status; struct cpld_data *data = NULL; @@ -258,7 +258,7 @@ static int sys_cpld_probe(struct i2c_client *client) goto exit; } - dev_info(&client->dev, "Nokia SYS_CPLD chip found.\n"); + dev_info(&client->dev, "Nokia MB_PLD chip found.\n"); data = kzalloc(sizeof(struct cpld_data), GFP_KERNEL); if (!data) { @@ -271,10 +271,10 @@ static int sys_cpld_probe(struct i2c_client *client) i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &sys_cpld_group); + status = sysfs_create_group(&client->dev.kobj, &mb_pld_group); if (status) { dev_err(&client->dev, "CPLD INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } int i; @@ -283,56 +283,58 @@ static int sys_cpld_probe(struct i2c_client *client) return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } -static void sys_cpld_remove(struct i2c_client *client) +static void mb_pld_remove(struct i2c_client *client) { struct cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &sys_cpld_group); + sysfs_remove_group(&client->dev.kobj, &mb_pld_group); kfree(data); } -static const struct of_device_id sys_cpld_of_ids[] = { +static const struct of_device_id mb_pld_of_ids[] = { { - .compatible = "sys_cpld", + .compatible = "mb_pld", .data = (void *) 0, }, { }, }; -MODULE_DEVICE_TABLE(of, sys_cpld_of_ids); +MODULE_DEVICE_TABLE(of, mb_pld_of_ids); -static const struct i2c_device_id sys_cpld_ids[] = { +static const struct i2c_device_id mb_pld_ids[] = { { DRIVER_NAME, 0 }, { } }; -MODULE_DEVICE_TABLE(i2c, sys_cpld_ids); +MODULE_DEVICE_TABLE(i2c, mb_pld_ids); -static struct i2c_driver sys_cpld_driver = { +static struct i2c_driver mb_pld_driver = { .driver = { .name = DRIVER_NAME, - .of_match_table = of_match_ptr(sys_cpld_of_ids), + .of_match_table = of_match_ptr(mb_pld_of_ids), }, - .probe = sys_cpld_probe, - .remove = sys_cpld_remove, - .id_table = sys_cpld_ids, + .probe = mb_pld_probe, + .remove = mb_pld_remove, + .id_table = mb_pld_ids, .address_list = cpld_address_list, }; -static int __init sys_cpld_init(void) +static int __init mb_pld_init(void) { - return i2c_add_driver(&sys_cpld_driver); + return i2c_add_driver(&mb_pld_driver); } -static void __exit sys_cpld_exit(void) +static void __exit mb_pld_exit(void) { - i2c_del_driver(&sys_cpld_driver); + i2c_del_driver(&mb_pld_driver); } MODULE_AUTHOR("Nokia"); -MODULE_DESCRIPTION("NOKIA H6-128 SYS_CPLD driver"); +MODULE_DESCRIPTION("NOKIA H6-128 MB_PLD driver"); MODULE_LICENSE("GPL"); -module_init(sys_cpld_init); -module_exit(sys_cpld_exit); +module_init(mb_pld_init); +module_exit(mb_pld_exit); diff --git a/ixr7220h6-128/modules/pmbus_psu.c b/ixr7220h6-128/modules/pmbus_psu.c index 5f4d92e..c669d2f 100644 --- a/ixr7220h6-128/modules/pmbus_psu.c +++ b/ixr7220h6-128/modules/pmbus_psu.c @@ -266,22 +266,22 @@ static int psu_read_word(struct i2c_client *client, u8 reg) return i2c_smbus_read_word_data(client, reg); } -static int psu_write_byte_pec(struct i2c_client *client, u8 reg, \ - u8 value) +static int psu_write_byte_pec(struct i2c_client *client, u8 reg, u8 value) { - union i2c_smbus_data data; - data.byte = value; + union i2c_smbus_data data; + + data.byte = value; return i2c_smbus_xfer(client->adapter, client->addr, - client->flags |= I2C_CLIENT_PEC, - I2C_SMBUS_WRITE, reg, - I2C_SMBUS_BYTE_DATA, &data); + client->flags | I2C_CLIENT_PEC, + I2C_SMBUS_WRITE, reg, + I2C_SMBUS_BYTE_DATA, &data); } static int psu_read_block(struct i2c_client *client, u8 command, u8 *data) { - int result = i2c_smbus_read_block_data(client, command, data); - if (unlikely(result < 0)) - goto abort; + int result = i2c_smbus_read_block_data(client, command, data); + if (unlikely(result < 0)) + goto abort; result = 0; abort: @@ -393,16 +393,19 @@ static ssize_t set_psu_rst(struct device *dev, struct device_attribute *dev_attr const char *str_in = "Reset\n"; int res = 0; - if (strcmp(buf, str_in) == 0) { - dev_warn(&client->dev, "Reg(0x%02x) written to cycle this PSU\n", PSU_REG_OPERATION); - res = psu_write_byte_pec(client, PSU_REG_OPERATION, 0x60); - if (res < 0) { - dev_warn(&client->dev, "%s WRITE ERROR: reg(0x%02x) err %d\n", PSU_DRIVER_NAME, PSU_REG_OPERATION, res); - } - } - else + if (!sysfs_streq(buf, "Reset")) return -EINVAL; + dev_warn(&client->dev, "Reg(0x%02x) written to cycle this PSU\n", + PSU_REG_OPERATION); + + res = psu_write_byte_pec(client, PSU_REG_OPERATION, 0x60); + if (res < 0) { + dev_warn(&client->dev, "%s WRITE ERROR: reg(0x%02x) err %d\n", + PSU_DRIVER_NAME, PSU_REG_OPERATION, res); + return res; + } + return count; } diff --git a/ixr7220h6-128/modules/port_cpld1.c b/ixr7220h6-128/modules/port_pld0.c similarity index 85% rename from ixr7220h6-128/modules/port_cpld1.c rename to ixr7220h6-128/modules/port_pld0.c index 81b94ff..4eb1d25 100644 --- a/ixr7220h6-128/modules/port_cpld1.c +++ b/ixr7220h6-128/modules/port_pld0.c @@ -1,4 +1,4 @@ -// * CPLD driver for Nokia-7220-IXR-H6-128 Router +// * PLD driver for Nokia-7220-IXR-H6-128 Router // * // * Copyright (C) 2026 Nokia Corporation. // * @@ -26,14 +26,12 @@ #include #include -#define DRIVER_NAME "port_cpld1" +#define DRIVER_NAME "port_pld0" // REGISTERS ADDRESS MAP #define VER_MAJOR_REG 0x00 #define VER_MINOR_REG 0x01 -//#define SFP_CTRL_REG 0x03 #define SCRATCH_REG 0x04 -//#define SFP_MISC_REG 0x05 #define SFP_TXFAULT_REG 0x10 #define SFP_TXDIS_REG 0x18 #define SFP_RXLOSS_REG 0x20 @@ -44,7 +42,7 @@ #define PORT_PWGOOD_REG0 0x90 #define PORT_ENABLE_REG0 0x98 -static const unsigned short cpld_address_list[] = {0x75, I2C_CLIENT_END}; +static const unsigned short cpld_address_list[] = {0x74, I2C_CLIENT_END}; struct cpld_data { struct i2c_client *client; @@ -89,19 +87,19 @@ static void dump_reg(struct cpld_data *data) val1 = cpld_i2c_read(data, PORT_RST_REG0 + 1); val2 = cpld_i2c_read(data, PORT_RST_REG0 + 2); val3 = cpld_i2c_read(data, PORT_RST_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD1]PORT_RESET_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD0]PORT_RESET_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); val0 = cpld_i2c_read(data, PORT_LPMODE_REG0); val1 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 1); val2 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 2); val3 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD1]PORT_LPMODE_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD0]PORT_LPMODE_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); val0 = cpld_i2c_read(data, PORT_MODPRS_REG0); val1 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 1); val2 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 2); val3 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD1]PORT_MODPRES_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD0]PORT_MODPRES_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); } @@ -314,7 +312,6 @@ static ssize_t show_port_en(struct device *dev, struct device_attribute *devattr struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val = 0; - return sprintf(buf, "na\n"); val = cpld_i2c_read(data, PORT_ENABLE_REG0 + (sda->index / 8)); return sprintf(buf, "%d\n", (val>>(sda->index % 8)) & 0x1 ? 1:0); @@ -328,7 +325,6 @@ static ssize_t set_port_en(struct device *dev, struct device_attribute *devattr, u8 usr_val = 0; u8 mask; - return 0; int ret = kstrtou8(buf, 10, &usr_val); if (ret != 0) { return ret; @@ -350,13 +346,9 @@ static ssize_t set_port_en(struct device *dev, struct device_attribute *devattr, static SENSOR_DEVICE_ATTR(version, S_IRUGO, show_ver, NULL, 0); static SENSOR_DEVICE_ATTR(scratch, S_IRUGO | S_IWUSR, show_scratch, set_scratch, 0); -static SENSOR_DEVICE_ATTR(port_33_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, 0); static SENSOR_DEVICE_ATTR(port_34_tx_fault, S_IRUGO, show_sfp_tx_fault, NULL, 1); -static SENSOR_DEVICE_ATTR(port_33_tx_en, S_IRUGO | S_IWUSR, show_sfp_tx_en, set_sfp_tx_en, 0); static SENSOR_DEVICE_ATTR(port_34_tx_en, S_IRUGO | S_IWUSR, show_sfp_tx_en, set_sfp_tx_en, 1); -static SENSOR_DEVICE_ATTR(port_33_rx_los, S_IRUGO, show_sfp_rx_los, NULL, 0); static SENSOR_DEVICE_ATTR(port_34_rx_los, S_IRUGO, show_sfp_rx_los, NULL, 1); -static SENSOR_DEVICE_ATTR(port_33_prs, S_IRUGO, show_sfp_prs, NULL, 0); static SENSOR_DEVICE_ATTR(port_34_prs, S_IRUGO, show_sfp_prs, NULL, 1); static SENSOR_DEVICE_ATTR(port_1_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, set_port_lpmode, 0); @@ -463,50 +455,46 @@ static SENSOR_DEVICE_ATTR(modprs_reg2, S_IRUGO, show_modprs_reg, NULL, 1); static SENSOR_DEVICE_ATTR(modprs_reg3, S_IRUGO, show_modprs_reg, NULL, 2); static SENSOR_DEVICE_ATTR(modprs_reg4, S_IRUGO, show_modprs_reg, NULL, 3); -static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO, show_port_en, set_port_en, 0); -static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO, show_port_en, set_port_en, 1); -static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO, show_port_en, set_port_en, 2); -static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO, show_port_en, set_port_en, 3); -static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO, show_port_en, set_port_en, 4); -static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO, show_port_en, set_port_en, 5); -static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO, show_port_en, set_port_en, 6); -static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO, show_port_en, set_port_en, 7); -static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO, show_port_en, set_port_en, 8); -static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO, show_port_en, set_port_en, 9); -static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO, show_port_en, set_port_en, 10); -static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO, show_port_en, set_port_en, 11); -static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO, show_port_en, set_port_en, 12); -static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO, show_port_en, set_port_en, 13); -static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO, show_port_en, set_port_en, 14); -static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO, show_port_en, set_port_en, 15); -static SENSOR_DEVICE_ATTR(port_17_en, S_IRUGO, show_port_en, set_port_en, 16); -static SENSOR_DEVICE_ATTR(port_18_en, S_IRUGO, show_port_en, set_port_en, 17); -static SENSOR_DEVICE_ATTR(port_19_en, S_IRUGO, show_port_en, set_port_en, 18); -static SENSOR_DEVICE_ATTR(port_20_en, S_IRUGO, show_port_en, set_port_en, 19); -static SENSOR_DEVICE_ATTR(port_21_en, S_IRUGO, show_port_en, set_port_en, 20); -static SENSOR_DEVICE_ATTR(port_22_en, S_IRUGO, show_port_en, set_port_en, 21); -static SENSOR_DEVICE_ATTR(port_23_en, S_IRUGO, show_port_en, set_port_en, 22); -static SENSOR_DEVICE_ATTR(port_24_en, S_IRUGO, show_port_en, set_port_en, 23); -static SENSOR_DEVICE_ATTR(port_25_en, S_IRUGO, show_port_en, set_port_en, 24); -static SENSOR_DEVICE_ATTR(port_26_en, S_IRUGO, show_port_en, set_port_en, 25); -static SENSOR_DEVICE_ATTR(port_27_en, S_IRUGO, show_port_en, set_port_en, 26); -static SENSOR_DEVICE_ATTR(port_28_en, S_IRUGO, show_port_en, set_port_en, 27); -static SENSOR_DEVICE_ATTR(port_29_en, S_IRUGO, show_port_en, set_port_en, 28); -static SENSOR_DEVICE_ATTR(port_30_en, S_IRUGO, show_port_en, set_port_en, 29); -static SENSOR_DEVICE_ATTR(port_31_en, S_IRUGO, show_port_en, set_port_en, 30); -static SENSOR_DEVICE_ATTR(port_32_en, S_IRUGO, show_port_en, set_port_en, 31); - -static struct attribute *port_cpld1_attributes[] = { +static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 0); +static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 1); +static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 2); +static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 3); +static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 4); +static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 5); +static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 6); +static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 7); +static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 8); +static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 9); +static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 10); +static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 11); +static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 12); +static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 13); +static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 14); +static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 15); +static SENSOR_DEVICE_ATTR(port_17_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 16); +static SENSOR_DEVICE_ATTR(port_18_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 17); +static SENSOR_DEVICE_ATTR(port_19_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 18); +static SENSOR_DEVICE_ATTR(port_20_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 19); +static SENSOR_DEVICE_ATTR(port_21_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 20); +static SENSOR_DEVICE_ATTR(port_22_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 21); +static SENSOR_DEVICE_ATTR(port_23_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 22); +static SENSOR_DEVICE_ATTR(port_24_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 23); +static SENSOR_DEVICE_ATTR(port_25_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 24); +static SENSOR_DEVICE_ATTR(port_26_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 25); +static SENSOR_DEVICE_ATTR(port_27_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 26); +static SENSOR_DEVICE_ATTR(port_28_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 27); +static SENSOR_DEVICE_ATTR(port_29_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 28); +static SENSOR_DEVICE_ATTR(port_30_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 29); +static SENSOR_DEVICE_ATTR(port_31_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 30); +static SENSOR_DEVICE_ATTR(port_32_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 31); + +static struct attribute *port_pld0_attributes[] = { &sensor_dev_attr_version.dev_attr.attr, &sensor_dev_attr_scratch.dev_attr.attr, - &sensor_dev_attr_port_33_tx_fault.dev_attr.attr, &sensor_dev_attr_port_34_tx_fault.dev_attr.attr, - &sensor_dev_attr_port_33_tx_en.dev_attr.attr, &sensor_dev_attr_port_34_tx_en.dev_attr.attr, - &sensor_dev_attr_port_33_rx_los.dev_attr.attr, &sensor_dev_attr_port_34_rx_los.dev_attr.attr, - &sensor_dev_attr_port_33_prs.dev_attr.attr, &sensor_dev_attr_port_34_prs.dev_attr.attr, &sensor_dev_attr_port_1_lpmod.dev_attr.attr, @@ -649,11 +637,11 @@ static struct attribute *port_cpld1_attributes[] = { NULL }; -static const struct attribute_group port_cpld1_group = { - .attrs = port_cpld1_attributes, +static const struct attribute_group port_pld0_group = { + .attrs = port_pld0_attributes, }; -static int port_cpld1_probe(struct i2c_client *client) +static int port_pld0_probe(struct i2c_client *client) { int status; struct cpld_data *data = NULL; @@ -664,7 +652,7 @@ static int port_cpld1_probe(struct i2c_client *client) goto exit; } - dev_info(&client->dev, "Nokia PORT_CPLD1 chip found.\n"); + dev_info(&client->dev, "Nokia PORT_PLD0 chip found.\n"); data = kzalloc(sizeof(struct cpld_data), GFP_KERNEL); if (!data) { @@ -677,14 +665,14 @@ static int port_cpld1_probe(struct i2c_client *client) i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &port_cpld1_group); + status = sysfs_create_group(&client->dev.kobj, &port_pld0_group); if (status) { dev_err(&client->dev, "CPLD INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } dump_reg(data); - dev_info(&client->dev, "[PORT_CPLD1]Reseting PORTs ...\n"); + dev_info(&client->dev, "[PORT_PLD0]Reseting PORTs ...\n"); cpld_i2c_write(data, PORT_LPMODE_REG0, 0x0); cpld_i2c_write(data, PORT_LPMODE_REG0+1, 0x0); cpld_i2c_write(data, PORT_LPMODE_REG0+2, 0x0); @@ -698,61 +686,63 @@ static int port_cpld1_probe(struct i2c_client *client) cpld_i2c_write(data, PORT_RST_REG0+1, 0xFF); cpld_i2c_write(data, PORT_RST_REG0+2, 0xFF); cpld_i2c_write(data, PORT_RST_REG0+3, 0xFF); - dev_info(&client->dev, "[PORT_CPLD1]PORTs reset done.\n"); + dev_info(&client->dev, "[PORT_PLD0]PORTs reset done.\n"); dump_reg(data); return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } -static void port_cpld1_remove(struct i2c_client *client) +static void port_pld0_remove(struct i2c_client *client) { struct cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &port_cpld1_group); + sysfs_remove_group(&client->dev.kobj, &port_pld0_group); kfree(data); } -static const struct of_device_id port_cpld1_of_ids[] = { +static const struct of_device_id port_pld0_of_ids[] = { { - .compatible = "port_cpld1", + .compatible = "port_pld0", .data = (void *) 0, }, { }, }; -MODULE_DEVICE_TABLE(of, port_cpld1_of_ids); +MODULE_DEVICE_TABLE(of, port_pld0_of_ids); -static const struct i2c_device_id port_cpld1_ids[] = { +static const struct i2c_device_id port_pld0_ids[] = { { DRIVER_NAME, 0 }, { } }; -MODULE_DEVICE_TABLE(i2c, port_cpld1_ids); +MODULE_DEVICE_TABLE(i2c, port_pld0_ids); -static struct i2c_driver port_cpld1_driver = { +static struct i2c_driver port_pld0_driver = { .driver = { .name = DRIVER_NAME, - .of_match_table = of_match_ptr(port_cpld1_of_ids), + .of_match_table = of_match_ptr(port_pld0_of_ids), }, - .probe = port_cpld1_probe, - .remove = port_cpld1_remove, - .id_table = port_cpld1_ids, + .probe = port_pld0_probe, + .remove = port_pld0_remove, + .id_table = port_pld0_ids, .address_list = cpld_address_list, }; -static int __init port_cpld1_init(void) +static int __init port_pld0_init(void) { - return i2c_add_driver(&port_cpld1_driver); + return i2c_add_driver(&port_pld0_driver); } -static void __exit port_cpld1_exit(void) +static void __exit port_pld0_exit(void) { - i2c_del_driver(&port_cpld1_driver); + i2c_del_driver(&port_pld0_driver); } MODULE_AUTHOR("Nokia"); -MODULE_DESCRIPTION("NOKIA H6-128 PORT_CPLD1 driver"); +MODULE_DESCRIPTION("NOKIA H6-128 PORT_PLD0 driver"); MODULE_LICENSE("GPL"); -module_init(port_cpld1_init); -module_exit(port_cpld1_exit); +module_init(port_pld0_init); +module_exit(port_pld0_exit); diff --git a/ixr7220h6-128/modules/port_cpld0.c b/ixr7220h6-128/modules/port_pld1.c similarity index 83% rename from ixr7220h6-128/modules/port_cpld0.c rename to ixr7220h6-128/modules/port_pld1.c index 2518f1b..7a7b6b6 100644 --- a/ixr7220h6-128/modules/port_cpld0.c +++ b/ixr7220h6-128/modules/port_pld1.c @@ -1,4 +1,4 @@ -// * CPLD driver for Nokia-7220-IXR-H6-128 Router +// * PLD driver for Nokia-7220-IXR-H6-128 Router // * // * Copyright (C) 2026 Nokia Corporation. // * @@ -26,7 +26,7 @@ #include #include -#define DRIVER_NAME "port_cpld0" +#define DRIVER_NAME "port_pld1" // REGISTERS ADDRESS MAP #define VER_MAJOR_REG 0x00 @@ -38,7 +38,7 @@ #define PORT_PWGOOD_REG0 0x90 #define PORT_ENABLE_REG0 0x98 -static const unsigned short cpld_address_list[] = {0x74, I2C_CLIENT_END}; +static const unsigned short cpld_address_list[] = {0x75, I2C_CLIENT_END}; struct cpld_data { struct i2c_client *client; @@ -83,19 +83,19 @@ static void dump_reg(struct cpld_data *data) val1 = cpld_i2c_read(data, PORT_RST_REG0 + 1); val2 = cpld_i2c_read(data, PORT_RST_REG0 + 2); val3 = cpld_i2c_read(data, PORT_RST_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD0]PORT_RESET_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD1]PORT_RESET_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); val0 = cpld_i2c_read(data, PORT_LPMODE_REG0); val1 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 1); val2 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 2); val3 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD0]PORT_LPMODE_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD1]PORT_LPMODE_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); val0 = cpld_i2c_read(data, PORT_MODPRS_REG0); val1 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 1); val2 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 2); val3 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 3); - dev_info(&client->dev, "[PORT_CPLD0]PORT_MODPRES_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); + dev_info(&client->dev, "[PORT_PLD1]PORT_MODPRES_REG: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", val0, val1, val2, val3); } @@ -239,7 +239,6 @@ static ssize_t show_port_en(struct device *dev, struct device_attribute *devattr struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val = 0; - return sprintf(buf, "na\n"); val = cpld_i2c_read(data, PORT_ENABLE_REG0 + (sda->index / 8)); return sprintf(buf, "%d\n", (val>>(sda->index % 8)) & 0x1 ? 1:0); @@ -253,7 +252,6 @@ static ssize_t set_port_en(struct device *dev, struct device_attribute *devattr, u8 usr_val = 0; u8 mask; - return 0; int ret = kstrtou8(buf, 10, &usr_val); if (ret != 0) { return ret; @@ -307,6 +305,7 @@ static SENSOR_DEVICE_ATTR(port_29_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, se static SENSOR_DEVICE_ATTR(port_30_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, set_port_lpmode, 29); static SENSOR_DEVICE_ATTR(port_31_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, set_port_lpmode, 30); static SENSOR_DEVICE_ATTR(port_32_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, set_port_lpmode, 31); +static SENSOR_DEVICE_ATTR(port_33_lpmod, S_IRUGO | S_IWUSR, show_port_lpmode, set_port_lpmode, 32); static SENSOR_DEVICE_ATTR(port_1_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 0); static SENSOR_DEVICE_ATTR(port_2_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 1); @@ -340,6 +339,7 @@ static SENSOR_DEVICE_ATTR(port_29_rst, S_IRUGO | S_IWUSR, show_port_rst, set_por static SENSOR_DEVICE_ATTR(port_30_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 29); static SENSOR_DEVICE_ATTR(port_31_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 30); static SENSOR_DEVICE_ATTR(port_32_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 31); +static SENSOR_DEVICE_ATTR(port_33_rst, S_IRUGO | S_IWUSR, show_port_rst, set_port_rst, 32); static SENSOR_DEVICE_ATTR(port_1_prs, S_IRUGO, show_port_prs, NULL, 0); static SENSOR_DEVICE_ATTR(port_2_prs, S_IRUGO, show_port_prs, NULL, 1); @@ -373,46 +373,47 @@ static SENSOR_DEVICE_ATTR(port_29_prs, S_IRUGO, show_port_prs, NULL, 28); static SENSOR_DEVICE_ATTR(port_30_prs, S_IRUGO, show_port_prs, NULL, 29); static SENSOR_DEVICE_ATTR(port_31_prs, S_IRUGO, show_port_prs, NULL, 30); static SENSOR_DEVICE_ATTR(port_32_prs, S_IRUGO, show_port_prs, NULL, 31); +static SENSOR_DEVICE_ATTR(port_33_prs, S_IRUGO, show_port_prs, NULL, 32); static SENSOR_DEVICE_ATTR(modprs_reg1, S_IRUGO, show_modprs_reg, NULL, 0); static SENSOR_DEVICE_ATTR(modprs_reg2, S_IRUGO, show_modprs_reg, NULL, 1); static SENSOR_DEVICE_ATTR(modprs_reg3, S_IRUGO, show_modprs_reg, NULL, 2); static SENSOR_DEVICE_ATTR(modprs_reg4, S_IRUGO, show_modprs_reg, NULL, 3); -static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO, show_port_en, set_port_en, 0); -static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO, show_port_en, set_port_en, 1); -static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO, show_port_en, set_port_en, 2); -static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO, show_port_en, set_port_en, 3); -static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO, show_port_en, set_port_en, 4); -static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO, show_port_en, set_port_en, 5); -static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO, show_port_en, set_port_en, 6); -static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO, show_port_en, set_port_en, 7); -static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO, show_port_en, set_port_en, 8); -static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO, show_port_en, set_port_en, 9); -static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO, show_port_en, set_port_en, 10); -static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO, show_port_en, set_port_en, 11); -static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO, show_port_en, set_port_en, 12); -static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO, show_port_en, set_port_en, 13); -static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO, show_port_en, set_port_en, 14); -static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO, show_port_en, set_port_en, 15); -static SENSOR_DEVICE_ATTR(port_17_en, S_IRUGO, show_port_en, set_port_en, 16); -static SENSOR_DEVICE_ATTR(port_18_en, S_IRUGO, show_port_en, set_port_en, 17); -static SENSOR_DEVICE_ATTR(port_19_en, S_IRUGO, show_port_en, set_port_en, 18); -static SENSOR_DEVICE_ATTR(port_20_en, S_IRUGO, show_port_en, set_port_en, 19); -static SENSOR_DEVICE_ATTR(port_21_en, S_IRUGO, show_port_en, set_port_en, 20); -static SENSOR_DEVICE_ATTR(port_22_en, S_IRUGO, show_port_en, set_port_en, 21); -static SENSOR_DEVICE_ATTR(port_23_en, S_IRUGO, show_port_en, set_port_en, 22); -static SENSOR_DEVICE_ATTR(port_24_en, S_IRUGO, show_port_en, set_port_en, 23); -static SENSOR_DEVICE_ATTR(port_25_en, S_IRUGO, show_port_en, set_port_en, 24); -static SENSOR_DEVICE_ATTR(port_26_en, S_IRUGO, show_port_en, set_port_en, 25); -static SENSOR_DEVICE_ATTR(port_27_en, S_IRUGO, show_port_en, set_port_en, 26); -static SENSOR_DEVICE_ATTR(port_28_en, S_IRUGO, show_port_en, set_port_en, 27); -static SENSOR_DEVICE_ATTR(port_29_en, S_IRUGO, show_port_en, set_port_en, 28); -static SENSOR_DEVICE_ATTR(port_30_en, S_IRUGO, show_port_en, set_port_en, 29); -static SENSOR_DEVICE_ATTR(port_31_en, S_IRUGO, show_port_en, set_port_en, 30); -static SENSOR_DEVICE_ATTR(port_32_en, S_IRUGO, show_port_en, set_port_en, 31); - -static struct attribute *port_cpld0_attributes[] = { +static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 0); +static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 1); +static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 2); +static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 3); +static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 4); +static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 5); +static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 6); +static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 7); +static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 8); +static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 9); +static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 10); +static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 11); +static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 12); +static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 13); +static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 14); +static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 15); +static SENSOR_DEVICE_ATTR(port_17_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 16); +static SENSOR_DEVICE_ATTR(port_18_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 17); +static SENSOR_DEVICE_ATTR(port_19_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 18); +static SENSOR_DEVICE_ATTR(port_20_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 19); +static SENSOR_DEVICE_ATTR(port_21_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 20); +static SENSOR_DEVICE_ATTR(port_22_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 21); +static SENSOR_DEVICE_ATTR(port_23_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 22); +static SENSOR_DEVICE_ATTR(port_24_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 23); +static SENSOR_DEVICE_ATTR(port_25_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 24); +static SENSOR_DEVICE_ATTR(port_26_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 25); +static SENSOR_DEVICE_ATTR(port_27_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 26); +static SENSOR_DEVICE_ATTR(port_28_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 27); +static SENSOR_DEVICE_ATTR(port_29_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 28); +static SENSOR_DEVICE_ATTR(port_30_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 29); +static SENSOR_DEVICE_ATTR(port_31_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 30); +static SENSOR_DEVICE_ATTR(port_32_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 31); + +static struct attribute *port_pld1_attributes[] = { &sensor_dev_attr_version.dev_attr.attr, &sensor_dev_attr_scratch.dev_attr.attr, @@ -448,6 +449,7 @@ static struct attribute *port_cpld0_attributes[] = { &sensor_dev_attr_port_30_lpmod.dev_attr.attr, &sensor_dev_attr_port_31_lpmod.dev_attr.attr, &sensor_dev_attr_port_32_lpmod.dev_attr.attr, + &sensor_dev_attr_port_33_lpmod.dev_attr.attr, &sensor_dev_attr_port_1_rst.dev_attr.attr, &sensor_dev_attr_port_2_rst.dev_attr.attr, @@ -481,6 +483,7 @@ static struct attribute *port_cpld0_attributes[] = { &sensor_dev_attr_port_30_rst.dev_attr.attr, &sensor_dev_attr_port_31_rst.dev_attr.attr, &sensor_dev_attr_port_32_rst.dev_attr.attr, + &sensor_dev_attr_port_33_rst.dev_attr.attr, &sensor_dev_attr_port_1_prs.dev_attr.attr, &sensor_dev_attr_port_2_prs.dev_attr.attr, @@ -514,6 +517,7 @@ static struct attribute *port_cpld0_attributes[] = { &sensor_dev_attr_port_30_prs.dev_attr.attr, &sensor_dev_attr_port_31_prs.dev_attr.attr, &sensor_dev_attr_port_32_prs.dev_attr.attr, + &sensor_dev_attr_port_33_prs.dev_attr.attr, &sensor_dev_attr_modprs_reg1.dev_attr.attr, &sensor_dev_attr_modprs_reg2.dev_attr.attr, @@ -556,11 +560,11 @@ static struct attribute *port_cpld0_attributes[] = { NULL }; -static const struct attribute_group port_cpld0_group = { - .attrs = port_cpld0_attributes, +static const struct attribute_group port_pld1_group = { + .attrs = port_pld1_attributes, }; -static int port_cpld0_probe(struct i2c_client *client) +static int port_pld1_probe(struct i2c_client *client) { int status; struct cpld_data *data = NULL; @@ -571,7 +575,7 @@ static int port_cpld0_probe(struct i2c_client *client) goto exit; } - dev_info(&client->dev, "Nokia PORT_CPLD0 chip found.\n"); + dev_info(&client->dev, "Nokia PORT_PLD1 chip found.\n"); data = kzalloc(sizeof(struct cpld_data), GFP_KERNEL); if (!data) { @@ -584,14 +588,14 @@ static int port_cpld0_probe(struct i2c_client *client) i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &port_cpld0_group); + status = sysfs_create_group(&client->dev.kobj, &port_pld1_group); if (status) { dev_err(&client->dev, "CPLD INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } dump_reg(data); - dev_info(&client->dev, "[PORT_CPLD0]Reseting PORTs ...\n"); + dev_info(&client->dev, "[PORT_PLD1]Reseting PORTs ...\n"); cpld_i2c_write(data, PORT_LPMODE_REG0, 0x0); cpld_i2c_write(data, PORT_LPMODE_REG0+1, 0x0); cpld_i2c_write(data, PORT_LPMODE_REG0+2, 0x0); @@ -605,61 +609,63 @@ static int port_cpld0_probe(struct i2c_client *client) cpld_i2c_write(data, PORT_RST_REG0+1, 0xFF); cpld_i2c_write(data, PORT_RST_REG0+2, 0xFF); cpld_i2c_write(data, PORT_RST_REG0+3, 0xFF); - dev_info(&client->dev, "[PORT_CPLD0]PORTs reset done.\n"); + dev_info(&client->dev, "[PORT_PLD1]PORTs reset done.\n"); dump_reg(data); return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } -static void port_cpld0_remove(struct i2c_client *client) +static void port_pld1_remove(struct i2c_client *client) { struct cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &port_cpld0_group); + sysfs_remove_group(&client->dev.kobj, &port_pld1_group); kfree(data); } -static const struct of_device_id port_cpld0_of_ids[] = { +static const struct of_device_id port_pld1_of_ids[] = { { - .compatible = "port_cpld0", + .compatible = "port_pld1", .data = (void *) 0, }, { }, }; -MODULE_DEVICE_TABLE(of, port_cpld0_of_ids); +MODULE_DEVICE_TABLE(of, port_pld1_of_ids); -static const struct i2c_device_id port_cpld0_ids[] = { +static const struct i2c_device_id port_pld1_ids[] = { { DRIVER_NAME, 0 }, { } }; -MODULE_DEVICE_TABLE(i2c, port_cpld0_ids); +MODULE_DEVICE_TABLE(i2c, port_pld1_ids); -static struct i2c_driver port_cpld0_driver = { +static struct i2c_driver port_pld1_driver = { .driver = { .name = DRIVER_NAME, - .of_match_table = of_match_ptr(port_cpld0_of_ids), + .of_match_table = of_match_ptr(port_pld1_of_ids), }, - .probe = port_cpld0_probe, - .remove = port_cpld0_remove, - .id_table = port_cpld0_ids, + .probe = port_pld1_probe, + .remove = port_pld1_remove, + .id_table = port_pld1_ids, .address_list = cpld_address_list, }; -static int __init port_cpld0_init(void) +static int __init port_pld1_init(void) { - return i2c_add_driver(&port_cpld0_driver); + return i2c_add_driver(&port_pld1_driver); } -static void __exit port_cpld0_exit(void) +static void __exit port_pld1_exit(void) { - i2c_del_driver(&port_cpld0_driver); + i2c_del_driver(&port_pld1_driver); } MODULE_AUTHOR("Nokia"); -MODULE_DESCRIPTION("NOKIA H6-128 PORT_CPLD0 driver"); +MODULE_DESCRIPTION("NOKIA H6-128 PORT_PLD1 driver"); MODULE_LICENSE("GPL"); -module_init(port_cpld0_init); -module_exit(port_cpld0_exit); +module_init(port_pld1_init); +module_exit(port_pld1_exit); diff --git a/ixr7220h6-128/modules/port_cpld2.c b/ixr7220h6-128/modules/port_pld2.c similarity index 85% rename from ixr7220h6-128/modules/port_cpld2.c rename to ixr7220h6-128/modules/port_pld2.c index 8d1c3ae..595f16c 100644 --- a/ixr7220h6-128/modules/port_cpld2.c +++ b/ixr7220h6-128/modules/port_pld2.c @@ -1,4 +1,4 @@ -// * CPLD driver for Nokia-7220-IXR-H6-128 Router +// * PLD driver for Nokia-7220-IXR-H6-128 Router // * // * Copyright (C) 2026 Nokia Corporation. // * @@ -26,7 +26,7 @@ #include #include -#define DRIVER_NAME "port_cpld2" +#define DRIVER_NAME "port_pld2" // REGISTERS ADDRESS MAP #define VER_MAJOR_REG 0x00 @@ -81,15 +81,15 @@ static void dump_reg(struct cpld_data *data) val0 = cpld_i2c_read(data, PORT_RST_REG0); val1 = cpld_i2c_read(data, PORT_RST_REG0 + 1); - dev_info(&client->dev, "[PORT_CPLD2]PORT_RESET_REG: 0x%02x, 0x%02x\n", val0, val1); + dev_info(&client->dev, "[PORT_PLD2]PORT_RESET_REG: 0x%02x, 0x%02x\n", val0, val1); val0 = cpld_i2c_read(data, PORT_LPMODE_REG0); val1 = cpld_i2c_read(data, PORT_LPMODE_REG0 + 1); - dev_info(&client->dev, "[PORT_CPLD2]PORT_LPMODE_REG: 0x%02x, 0x%02x\n", val0, val1); + dev_info(&client->dev, "[PORT_PLD2]PORT_LPMODE_REG: 0x%02x, 0x%02x\n", val0, val1); val0 = cpld_i2c_read(data, PORT_MODPRS_REG0); val1 = cpld_i2c_read(data, PORT_MODPRS_REG0 + 1); - dev_info(&client->dev, "[PORT_CPLD2]PORT_MODPRES_REG: 0x%02x, 0x%02x\n", val0, val1); + dev_info(&client->dev, "[PORT_PLD2]PORT_MODPRES_REG: 0x%02x, 0x%02x\n", val0, val1); } @@ -262,7 +262,6 @@ static ssize_t show_port_en(struct device *dev, struct device_attribute *devattr struct sensor_device_attribute *sda = to_sensor_dev_attr(devattr); u8 val = 0; - return sprintf(buf, "na\n"); val = cpld_i2c_read(data, PORT_ENABLE_REG0 + (sda->index / 8)); return sprintf(buf, "%d\n", (val>>(sda->index % 8)) & 0x1 ? 1:0); @@ -276,7 +275,6 @@ static ssize_t set_port_en(struct device *dev, struct device_attribute *devattr, u8 usr_val = 0; u8 mask; - return 0; int ret = kstrtou8(buf, 10, &usr_val); if (ret != 0) { return ret; @@ -352,26 +350,26 @@ static SENSOR_DEVICE_ATTR(port_16_prs, S_IRUGO, show_port_prs, NULL, 15); static SENSOR_DEVICE_ATTR(modprs_reg1, S_IRUGO, show_modprs_reg, NULL, 0); static SENSOR_DEVICE_ATTR(modprs_reg2, S_IRUGO, show_modprs_reg, NULL, 1); -static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO, show_port_en, set_port_en, 0); -static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO, show_port_en, set_port_en, 1); -static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO, show_port_en, set_port_en, 2); -static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO, show_port_en, set_port_en, 3); -static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO, show_port_en, set_port_en, 4); -static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO, show_port_en, set_port_en, 5); -static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO, show_port_en, set_port_en, 6); -static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO, show_port_en, set_port_en, 7); -static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO, show_port_en, set_port_en, 8); -static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO, show_port_en, set_port_en, 9); -static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO, show_port_en, set_port_en, 10); -static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO, show_port_en, set_port_en, 11); -static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO, show_port_en, set_port_en, 12); -static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO, show_port_en, set_port_en, 13); -static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO, show_port_en, set_port_en, 14); -static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO, show_port_en, set_port_en, 15); +static SENSOR_DEVICE_ATTR(port_1_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 0); +static SENSOR_DEVICE_ATTR(port_2_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 1); +static SENSOR_DEVICE_ATTR(port_3_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 2); +static SENSOR_DEVICE_ATTR(port_4_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 3); +static SENSOR_DEVICE_ATTR(port_5_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 4); +static SENSOR_DEVICE_ATTR(port_6_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 5); +static SENSOR_DEVICE_ATTR(port_7_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 6); +static SENSOR_DEVICE_ATTR(port_8_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 7); +static SENSOR_DEVICE_ATTR(port_9_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 8); +static SENSOR_DEVICE_ATTR(port_10_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 9); +static SENSOR_DEVICE_ATTR(port_11_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 10); +static SENSOR_DEVICE_ATTR(port_12_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 11); +static SENSOR_DEVICE_ATTR(port_13_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 12); +static SENSOR_DEVICE_ATTR(port_14_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 13); +static SENSOR_DEVICE_ATTR(port_15_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 14); +static SENSOR_DEVICE_ATTR(port_16_en, S_IRUGO | S_IWUSR, show_port_en, set_port_en, 15); static SENSOR_DEVICE_ATTR(port_efuse, S_IRUGO | S_IWUSR, show_port_efuse, set_port_efuse, 0); -static struct attribute *port_cpld2_attributes[] = { +static struct attribute *port_pld2_attributes[] = { &sensor_dev_attr_version.dev_attr.attr, &sensor_dev_attr_scratch.dev_attr.attr, @@ -451,11 +449,11 @@ static struct attribute *port_cpld2_attributes[] = { NULL }; -static const struct attribute_group port_cpld2_group = { - .attrs = port_cpld2_attributes, +static const struct attribute_group port_pld2_group = { + .attrs = port_pld2_attributes, }; -static int port_cpld2_probe(struct i2c_client *client) +static int port_pld2_probe(struct i2c_client *client) { int status; struct cpld_data *data = NULL; @@ -466,7 +464,7 @@ static int port_cpld2_probe(struct i2c_client *client) goto exit; } - dev_info(&client->dev, "Nokia PORT_CPLD2 chip found.\n"); + dev_info(&client->dev, "Nokia PORT_PLD2 chip found.\n"); data = kzalloc(sizeof(struct cpld_data), GFP_KERNEL); if (!data) { @@ -479,16 +477,16 @@ static int port_cpld2_probe(struct i2c_client *client) i2c_set_clientdata(client, data); mutex_init(&data->update_lock); - status = sysfs_create_group(&client->dev.kobj, &port_cpld2_group); + status = sysfs_create_group(&client->dev.kobj, &port_pld2_group); if (status) { dev_err(&client->dev, "CPLD INIT ERROR: Cannot create sysfs\n"); - goto exit; + goto exit_sysfs_create_group; } dump_reg(data); cpld_i2c_write(data, PORT_EFUSE_REG0, 0xFF); cpld_i2c_write(data, PORT_EFUSE_REG0+1, 0xFF); - dev_info(&client->dev, "[PORT_CPLD2]Reseting PORTs ...\n"); + dev_info(&client->dev, "[PORT_PLD2]Reseting PORTs ...\n"); cpld_i2c_write(data, PORT_LPMODE_REG0, 0x0); cpld_i2c_write(data, PORT_LPMODE_REG0+1, 0x0); cpld_i2c_write(data, PORT_RST_REG0, 0x0); @@ -496,61 +494,63 @@ static int port_cpld2_probe(struct i2c_client *client) msleep(500); cpld_i2c_write(data, PORT_RST_REG0, 0xFF); cpld_i2c_write(data, PORT_RST_REG0+1, 0xFF); - dev_info(&client->dev, "[PORT_CPLD2]PORTs reset done.\n"); + dev_info(&client->dev, "[PORT_PLD2]PORTs reset done.\n"); dump_reg(data); return 0; +exit_sysfs_create_group: + kfree(data); exit: return status; } -static void port_cpld2_remove(struct i2c_client *client) +static void port_pld2_remove(struct i2c_client *client) { struct cpld_data *data = i2c_get_clientdata(client); - sysfs_remove_group(&client->dev.kobj, &port_cpld2_group); + sysfs_remove_group(&client->dev.kobj, &port_pld2_group); kfree(data); } -static const struct of_device_id port_cpld2_of_ids[] = { +static const struct of_device_id port_pld2_of_ids[] = { { - .compatible = "port_cpld2", + .compatible = "port_pld2", .data = (void *) 0, }, { }, }; -MODULE_DEVICE_TABLE(of, port_cpld2_of_ids); +MODULE_DEVICE_TABLE(of, port_pld2_of_ids); -static const struct i2c_device_id port_cpld2_ids[] = { +static const struct i2c_device_id port_pld2_ids[] = { { DRIVER_NAME, 0 }, { } }; -MODULE_DEVICE_TABLE(i2c, port_cpld2_ids); +MODULE_DEVICE_TABLE(i2c, port_pld2_ids); -static struct i2c_driver port_cpld2_driver = { +static struct i2c_driver port_pld2_driver = { .driver = { .name = DRIVER_NAME, - .of_match_table = of_match_ptr(port_cpld2_of_ids), + .of_match_table = of_match_ptr(port_pld2_of_ids), }, - .probe = port_cpld2_probe, - .remove = port_cpld2_remove, - .id_table = port_cpld2_ids, + .probe = port_pld2_probe, + .remove = port_pld2_remove, + .id_table = port_pld2_ids, .address_list = cpld_address_list, }; -static int __init port_cpld2_init(void) +static int __init port_pld2_init(void) { - return i2c_add_driver(&port_cpld2_driver); + return i2c_add_driver(&port_pld2_driver); } -static void __exit port_cpld2_exit(void) +static void __exit port_pld2_exit(void) { - i2c_del_driver(&port_cpld2_driver); + i2c_del_driver(&port_pld2_driver); } MODULE_AUTHOR("Nokia"); -MODULE_DESCRIPTION("NOKIA H6-128 PORT_CPLD2 driver"); +MODULE_DESCRIPTION("NOKIA H6-128 PORT_PLD2 driver"); MODULE_LICENSE("GPL"); -module_init(port_cpld2_init); -module_exit(port_cpld2_exit); +module_init(port_pld2_init); +module_exit(port_pld2_exit); diff --git a/ixr7220h6-128/modules/sys_mux.c b/ixr7220h6-128/modules/sys_mux.c index ad0884e..76eb7c9 100644 --- a/ixr7220h6-128/modules/sys_mux.c +++ b/ixr7220h6-128/modules/sys_mux.c @@ -7,7 +7,7 @@ * Based on: * sys_mux.c Brandon Chuang * Copyright (C) 2025 - # + * * Based on: * pca954x.c from Kumar Gala * Copyright (C) 2006 @@ -47,10 +47,10 @@ #define SYS_MUX_DESELECT_VAL 0x0 enum mux_type { - mux_fpga, - mux_sys_cpld, + mux_cb, + mux_mb, mux_fcm, - mux_mezz + mux_db }; struct chip_desc { @@ -70,13 +70,13 @@ struct sys_mux_data { }; static const struct chip_desc chips[] = { - [mux_fpga] = { + [mux_cb] = { .nchans = 14, .select_reg = SYS_MUX_SELECT_REG, .deselect_val = SYS_MUX_DESELECT_VAL, .muxtype = is_mux }, - [mux_sys_cpld] = { + [mux_mb] = { .nchans = 15, .select_reg = SYS_MUX_SELECT_REG, .deselect_val = SYS_MUX_DESELECT_VAL, @@ -88,7 +88,7 @@ static const struct chip_desc chips[] = { .deselect_val = SYS_MUX_DESELECT_VAL, .muxtype = isswi }, - [mux_mezz] = { + [mux_db] = { .nchans = 3, .select_reg = SYS_MUX_SELECT_REG, .deselect_val = SYS_MUX_DESELECT_VAL, @@ -97,20 +97,20 @@ static const struct chip_desc chips[] = { }; static const struct i2c_device_id sys_mux_id[] = { - {"mux_fpga", mux_fpga}, - {"mux_sys_cpld", mux_sys_cpld}, + {"mux_cb", mux_cb}, + {"mux_mb", mux_mb}, {"mux_fcm", mux_fcm}, - {"mux_mezz", mux_mezz}, + {"mux_db", mux_db}, {} }; MODULE_DEVICE_TABLE(i2c, sys_mux_id); static const struct of_device_id sys_mux_of_match[] = { - {.compatible = "mux_fpga",.data = &chips[mux_fpga]}, - {.compatible = "mux_sys_cpld",.data = &chips[mux_sys_cpld]}, + {.compatible = "mux_cb",.data = &chips[mux_cb]}, + {.compatible = "mux_mb",.data = &chips[mux_mb]}, {.compatible = "mux_fcm",.data = &chips[mux_fcm]}, - {.compatible = "mux_mezz",.data = &chips[mux_mezz]}, + {.compatible = "mux_db",.data = &chips[mux_db]}, {} }; @@ -136,9 +136,9 @@ static int sys_mux_select_chan(struct i2c_mux_core *muxc, u32 chan) int ret = 0; mutex_lock(&data->update_lock); switch (data->type) { - case mux_fpga: - case mux_sys_cpld: - case mux_mezz: + case mux_cb: + case mux_mb: + case mux_db: ret = sys_mux_write(muxc->parent, client, chips[data->type].select_reg, chan + 1); @@ -185,7 +185,7 @@ static int sys_mux_probe(struct i2c_client *client) int ret = -ENODEV; int i = 0; - if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_BYTE)) + if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_BYTE_DATA)) return -ENODEV; muxc = i2c_mux_alloc(adap, dev, SYS_MUX_NCHANS, sizeof(*data), 0, @@ -223,7 +223,6 @@ static void sys_mux_remove(struct i2c_client *client) static struct i2c_driver sys_mux_driver = { .driver = { .name = DRVNAME, - .owner = THIS_MODULE, .of_match_table = sys_mux_of_match, }, .probe = sys_mux_probe, diff --git a/ixr7220h6-128/scripts/h6_128_platform_init.sh b/ixr7220h6-128/scripts/h6_128_platform_init.sh index 83fa720..c195516 100644 --- a/ixr7220h6-128/scripts/h6_128_platform_init.sh +++ b/ixr7220h6-128/scripts/h6_128_platform_init.sh @@ -5,30 +5,22 @@ load_kernel_drivers() { echo "Loading Kernel Drivers" depmod -a - rmmod amd-xgbe + rmmod bnxt_en rmmod igb rmmod i2c-piix4 rmmod i2c_designware_platform modprobe igb -# modprobe amd-xgbe +# modprobe bnxt_en modprobe i2c_designware_platform modprobe i2c-i801 modprobe i2c-dev - modprobe i2c-mux modprobe i2c-smbus modprobe i2c-ismt modprobe i2c-ocores modprobe h6_i2c_oc } -h6-128_profile() -{ - MAC_ADDR=$(sudo decode-syseeprom -m) - sed -i "s/switchMacAddress=.*/switchMacAddress=$MAC_ADDR/g" /usr/share/sonic/device/x86_64-nokia_ixr7220_h6_128-r0/Nokia-IXR7220-H6-P128/profile.ini - echo "Nokia-IXR7220-H6-P128: Updated switch mac address ${MAC_ADDR}" -} - file_exists() { # Wait 10 seconds max till file exists for((i=0; i<10; i++)); @@ -48,54 +40,54 @@ i2cset -y 1 0x60 0xf 0x1 sleep 1 i2cset -y 1 0x77 0x0 0x03 sleep 2 -i2cset -y 1 0x71 0xc 0x3f +i2cset -y 1 0x71 0xc 0xff sleep 1 -echo sys_fpga 0x60 > /sys/bus/i2c/devices/i2c-1/new_device +echo cb_pld 0x60 > /sys/bus/i2c/devices/i2c-1/new_device -echo mux_fpga 0x77 > /sys/bus/i2c/devices/i2c-1/new_device +echo mux_cb 0x77 > /sys/bus/i2c/devices/i2c-1/new_device sleep 1 -echo mux_sys_cpld 0x72 > /sys/bus/i2c/devices/i2c-134/new_device +echo mux_mb 0x72 > /sys/bus/i2c/devices/i2c-135/new_device -echo sys_cpld 0x71 > /sys/bus/i2c/devices/i2c-134/new_device +echo mb_pld 0x71 > /sys/bus/i2c/devices/i2c-135/new_device -echo mux_fcm 0x75 > /sys/bus/i2c/devices/i2c-144/new_device -echo mux_fcm 0x76 > /sys/bus/i2c/devices/i2c-145/new_device +echo mux_fcm 0x75 > /sys/bus/i2c/devices/i2c-145/new_device +echo mux_fcm 0x76 > /sys/bus/i2c/devices/i2c-146/new_device sleep 1 -echo mux_mezz 0x75 > /sys/bus/i2c/devices/i2c-150/new_device -echo mux_mezz 0x75 > /sys/bus/i2c/devices/i2c-151/new_device -echo mux_mezz 0x75 > /sys/bus/i2c/devices/i2c-152/new_device -echo mux_mezz 0x75 > /sys/bus/i2c/devices/i2c-153/new_device +echo mux_db 0x75 > /sys/bus/i2c/devices/i2c-151/new_device +echo mux_db 0x75 > /sys/bus/i2c/devices/i2c-152/new_device +echo mux_db 0x75 > /sys/bus/i2c/devices/i2c-153/new_device +echo mux_db 0x75 > /sys/bus/i2c/devices/i2c-154/new_device -echo port_cpld0 0x74 > /sys/bus/i2c/devices/i2c-148/new_device -echo port_cpld1 0x75 > /sys/bus/i2c/devices/i2c-149/new_device -echo port_cpld2 0x73 > /sys/bus/i2c/devices/i2c-150/new_device -echo port_cpld2 0x73 > /sys/bus/i2c/devices/i2c-151/new_device -echo port_cpld2 0x76 > /sys/bus/i2c/devices/i2c-152/new_device -echo port_cpld2 0x76 > /sys/bus/i2c/devices/i2c-153/new_device +echo port_pld0 0x74 > /sys/bus/i2c/devices/i2c-149/new_device +echo port_pld1 0x75 > /sys/bus/i2c/devices/i2c-150/new_device +echo port_pld2 0x73 > /sys/bus/i2c/devices/i2c-151/new_device +echo port_pld2 0x73 > /sys/bus/i2c/devices/i2c-152/new_device +echo port_pld2 0x76 > /sys/bus/i2c/devices/i2c-153/new_device +echo port_pld2 0x76 > /sys/bus/i2c/devices/i2c-154/new_device -echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-173/new_device -echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-176/new_device -echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-179/new_device -echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-182/new_device +echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-174/new_device +echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-177/new_device +echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-180/new_device +echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-183/new_device -echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-158/new_device +echo 24c04 0x56 > /sys/bus/i2c/devices/i2c-159/new_device -echo h6_fan 0x32 > /sys/bus/i2c/devices/i2c-144/new_device -echo h6_fan 0x33 > /sys/bus/i2c/devices/i2c-145/new_device +echo h6_fan 0x32 > /sys/bus/i2c/devices/i2c-145/new_device +echo h6_fan 0x33 > /sys/bus/i2c/devices/i2c-146/new_device -echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-163/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-164/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-165/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-166/new_device -echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-169/new_device +echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-167/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-170/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-171/new_device echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-172/new_device +echo 24c64 0x50 > /sys/bus/i2c/devices/i2c-173/new_device for i in {0..3}; do pres="/sys/bus/i2c/devices/1-0060/psu$((i+1))_pres" - bus_path="/sys/bus/i2c/devices/i2c-$((136+i))/new_device" + bus_path="/sys/bus/i2c/devices/i2c-$((137+i))/new_device" pmbus_addr=$((0x58 + i)) eeprom_addr=$((0x50 + i)) @@ -106,45 +98,46 @@ for i in {0..3}; do done echo embd_ctrl 0x21 > /sys/bus/i2c/devices/i2c-0/new_device -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-143/new_device -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-154/new_device -echo lm75 0x49 > /sys/bus/i2c/devices/i2c-154/new_device -echo lm75 0x4A > /sys/bus/i2c/devices/i2c-154/new_device -echo lm75 0x4B > /sys/bus/i2c/devices/i2c-154/new_device -echo lm75 0x4C > /sys/bus/i2c/devices/i2c-154/new_device -echo lm75 0x4D > /sys/bus/i2c/devices/i2c-154/new_device - -echo tmp75 0x4D > /sys/bus/i2c/devices/i2c-161/new_device -echo tmp75 0x4E > /sys/bus/i2c/devices/i2c-162/new_device -echo tmp75 0x4D > /sys/bus/i2c/devices/i2c-167/new_device -echo tmp75 0x4E > /sys/bus/i2c/devices/i2c-168/new_device - -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-174/new_device -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-177/new_device -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-180/new_device -echo lm75 0x48 > /sys/bus/i2c/devices/i2c-183/new_device - -file_exists /sys/bus/i2c/devices/158-0056/eeprom +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-144/new_device +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-155/new_device +echo lm75 0x49 > /sys/bus/i2c/devices/i2c-155/new_device +echo lm75 0x4A > /sys/bus/i2c/devices/i2c-155/new_device +echo lm75 0x4B > /sys/bus/i2c/devices/i2c-155/new_device +echo lm75 0x4C > /sys/bus/i2c/devices/i2c-155/new_device +echo lm75 0x4D > /sys/bus/i2c/devices/i2c-155/new_device + +echo tmp75 0x4D > /sys/bus/i2c/devices/i2c-162/new_device +echo tmp75 0x4E > /sys/bus/i2c/devices/i2c-163/new_device +echo tmp75 0x4D > /sys/bus/i2c/devices/i2c-168/new_device +echo tmp75 0x4E > /sys/bus/i2c/devices/i2c-169/new_device + +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-175/new_device +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-178/new_device +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-181/new_device +echo lm75 0x48 > /sys/bus/i2c/devices/i2c-184/new_device + +file_exists /sys/bus/i2c/devices/159-0056/eeprom status=$? if [ "$status" == "1" ]; then - chmod 644 /sys/bus/i2c/devices/158-0056/eeprom + chmod 644 /sys/bus/i2c/devices/159-0056/eeprom else echo "SYSEEPROM file not found" fi for index in {2..129}; do - echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-${index}/new_device + echo optoe3 0x50 > /sys/bus/i2c/devices/i2c-${index}/new_device done -echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-130/new_device -echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-131/new_device - -h6-128_profile +echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-130/new_device +echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-131/new_device for ch in {1..8}; do - echo 60 > /sys/bus/i2c/devices/144-0032/hwmon/hwmon*/fan${ch}_pwm - echo 60 > /sys/bus/i2c/devices/145-0033/hwmon/hwmon*/fan${ch}_pwm + echo 60 > /sys/bus/i2c/devices/145-0032/hwmon/hwmon*/fan${ch}_pwm + echo 60 > /sys/bus/i2c/devices/146-0033/hwmon/hwmon*/fan${ch}_pwm done +SN=$(decode-syseeprom -s) +logger -t h6_128_platform_init "Nokia-IXR7220-H6-128: SN = ${SN}" + exit diff --git a/ixr7220h6-128/scripts/ports_notify.py b/ixr7220h6-128/scripts/ports_notify.py index d52e490..f82c97d 100644 --- a/ixr7220h6-128/scripts/ports_notify.py +++ b/ixr7220h6-128/scripts/ports_notify.py @@ -15,17 +15,17 @@ SELECT_TIMEOUT_MSECS = 1000 -PORT_NUM = 130 +PORT_END = 128 SYSFS_DIR = "/sys/bus/i2c/devices/{}/" -PORTPLD_ADDR = ["152-0076", "153-0076", "148-0074", "149-0075", "150-0073", "151-0073"] +PORTPLD_ADDR = ["153-0076", "154-0076", "149-0074", "150-0075", "151-0073", "152-0073"] ADDR_IDX = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3] + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3] PORT_IDX = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30, 3,4,7,8,11,12,15,16,19,20,23,24,27,28,31,32,3,4,7,8,11,12,15,16,19,20,23,24,27,28,31,32, - 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,33,34] + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,33] # Global logger class instance sonic_logger = logger.Logger(SYSLOG_IDENTIFIER) @@ -84,7 +84,7 @@ def handle_port_config_change(sel, port_config, logger): if 'admin_status' in fvp: if 'index' in fvp: port_index = int(fvp['index']) - if port_index in range(1, PORT_NUM+1): + if port_index in range(1, PORT_END+1): pld_path = SYSFS_DIR.format(PORTPLD_ADDR[ADDR_IDX[port_index-1]]) pld_port_idx = PORT_IDX[port_index-1] file_name = pld_path + f"port_{pld_port_idx}_en" diff --git a/ixr7220h6-128/service/h6_128_platform_init.service b/ixr7220h6-128/service/h6_128_platform_init.service index 69837ce..7ee8d66 100644 --- a/ixr7220h6-128/service/h6_128_platform_init.service +++ b/ixr7220h6-128/service/h6_128_platform_init.service @@ -6,7 +6,7 @@ Before=database.service determine-reboot-cause.service [Service] Type=oneshot ExecStart=/usr/local/bin/h6_128_platform_init.sh -StandardOutput=tty +StandardOutput=journal+console [Install] WantedBy=multi-user.target diff --git a/ixr7220h6-128/sonic_platform/chassis.py b/ixr7220h6-128/sonic_platform/chassis.py index 7d70381..3af60dd 100644 --- a/ixr7220h6-128/sonic_platform/chassis.py +++ b/ixr7220h6-128/sonic_platform/chassis.py @@ -23,7 +23,7 @@ # Port numbers for SFP List Initialization PORT_START = 1 PORT_NUM = 128 -PORT_END = 130 +PORT_END = 129 PORT_I2C_START = 2 MAX_SELECT_DELAY = 10 @@ -34,7 +34,7 @@ THERMAL_NUM = 20 COMPONENT_NUM = 11 -CPLD_DIR = "/sys/bus/i2c/devices/134-0071/" +PLD_DIR = "/sys/bus/i2c/devices/135-0071/" SYSFPGA_DIR = "/sys/bus/i2c/devices/1-0060/" SYSLOG_IDENTIFIER = "chassis" @@ -62,7 +62,7 @@ def __init__(self): if index <= PORT_NUM: sfp_node = Sfp(index, 'OSFP', port_eeprom_path, port_i2c_map) elif index > PORT_NUM and index <= PORT_END: - sfp_node = Sfp(index, 'SFP56', port_eeprom_path, port_i2c_map) + sfp_node = Sfp(index, 'QSFP28', port_eeprom_path, port_i2c_map) self._sfp_list.append(sfp_node) self.sfp_event_initialized = False @@ -359,7 +359,6 @@ def set_status_led(self, color): Returns: bool: True if system LED state is set successfully, False if not """ - return False color_to_value = { 'blue': '0x3', 'green': '0x5', @@ -375,7 +374,7 @@ def set_status_led(self, color): if value is None: return False - write_sysfs_file(CPLD_DIR + 'led_sys', value) + write_sysfs_file(PLD_DIR + 'led_sys', value) return True def get_status_led(self): @@ -386,8 +385,7 @@ def get_status_led(self): A string, one of the valid LED color strings which could be vendor specified. """ - return 'N/A' - result = read_sysfs_file(CPLD_DIR + 'led_sys') + result = read_sysfs_file(PLD_DIR + 'led_sys') val = int(result, 16) if (val & 0x8) == 0x8: return self.system_led_supported_color[2] diff --git a/ixr7220h6-128/sonic_platform/component.py b/ixr7220h6-128/sonic_platform/component.py index fd87349..4885a3d 100644 --- a/ixr7220h6-128/sonic_platform/component.py +++ b/ixr7220h6-128/sonic_platform/component.py @@ -9,78 +9,59 @@ try: import os import subprocess - import ntpath import time import glob from sonic_platform_base.component_base import ComponentBase from sonic_platform.sysfs import read_sysfs_file, write_sysfs_file except ImportError as e: - raise ImportError(str(e) + "- required module not found") + raise ImportError(str(e) + "- required module not found") from e SYSFS_DIR = ["/sys/class/dmi/id/", "/sys/bus/i2c/devices/1-0060/", - "/sys/bus/i2c/devices/134-0071/", - "/sys/bus/i2c/devices/148-0074/", - "/sys/bus/i2c/devices/149-0075/", - "/sys/bus/i2c/devices/152-0076/", + "/sys/bus/i2c/devices/135-0071/", + "/sys/bus/i2c/devices/149-0074/", + "/sys/bus/i2c/devices/150-0075/", "/sys/bus/i2c/devices/153-0076/", - "/sys/bus/i2c/devices/150-0073/", + "/sys/bus/i2c/devices/154-0076/", "/sys/bus/i2c/devices/151-0073/", - "/sys/bus/i2c/devices/144-0032/hwmon/hwmon*/", - "/sys/bus/i2c/devices/145-0033/hwmon/hwmon*/"] + "/sys/bus/i2c/devices/152-0073/", + "/sys/bus/i2c/devices/145-0032/hwmon/hwmon*/", + "/sys/bus/i2c/devices/146-0033/hwmon/hwmon*/"] class Component(ComponentBase): """Nokia platform-specific Component class""" CHASSIS_COMPONENTS = [ ["BIOS", "Basic Input/Output System"], - ["SYS_FPGA", "Used for managing CPU board"], - ["SYS_CPLD", "Used for managing BCM chip, PSUs and LEDs"], - ["PORT_CPLD0", "Used for managing PORT 33-48, 65-80"], - ["PORT_CPLD1", "Used for managing PORT 49-64, 81-96, SFP28"], - ["PORT_CPLD_TL", "Used for managing PORT 1-16"], - ["PORT_CPLD_TR", "Used for managing PORT 17-32"], - ["PORT_CPLD_BL", "Used for managing PORT 97-112"], - ["PORT_CPLD_BR", "Used for managing PORT 113-128"], + ["CB_FPGA", "Used for managing CPU board"], + ["MB_FPGA", "Used for managing BCM chip, PSUs and LEDs"], + ["MB_PORT_FPGA_0", "Used for managing PORT 33-48, 65-80"], + ["MB_PORT_FPGA_1", "Used for managing PORT 49-64, 81-96, 129"], + ["UDB_LPORT_FPGA", "Used for managing PORT 1-16"], + ["UDB_RPORT_FPGA", "Used for managing PORT 17-32"], + ["LDB_LPORT_FPGA", "Used for managing PORT 97-112"], + ["LDB_RPORT_FPGA", "Used for managing PORT 113-128"], ["FCM0_CPLD", "Used for managing upper fan drawers"], ["FCM1_CPLD", "Used for managing lower fan drawers"] ] - DEV_NAME = [" ", " ", "MAIN_CPLD", "MAIN_CPLD", "MAIN_CPLD", "MAIN_CPLD", - "MAIN_CPLD", "MAIN_CPLD","MAIN_CPLD", "FAN0_CPLD", "FAN1_CPLD"] - TFR_NAME = [" ", " ", "h6_64_sys_cpld_tfr.vme", "h6_64_port_cpld0_tfr.vme", - "h6_64_port_cpld1_tfr.vme", "h6_64_port_cpld_tl_tfr.vme", - "h6_64_port_cpld_tr_tfr.vme", "h6_64_port_cpld_bl_tfr.vme", - "h6_64_port_cpld_br_tfr.vme", "h6_64_fan_cpld_tfr.vme", - "h6_64_fan_cpld_tfr.vme"] - - BIOS_UPDATE_COMMAND = ['./afulnx_64', '', '/B', '/P', '/N', '/K'] - FPGA_CHECK_COMMAND = ['./fpga_spi_flash.sh', '-rid'] - FPGA_UPDATE_COMMAND = ['./fpga_spi_flash.sh', '-upd', '', '-all'] - CPLD_CHECK_COMMAND = ['./cpldupd', '-s', ''] - CPLD_UPDATE_COMMAND = ['./cpldupd', '-u', '', ''] + DEV_NAME = ["", "", "MAIN_FPGA", "MAIN_FPGA", "MAIN_FPGA", "MAIN_FPGA", + "MAIN_FPGA", "MAIN_FPGA", "MAIN_FPGA", "FAN0_CPLD", "FAN1_CPLD"] + + BIOS_UPDATE_COMMAND = ('./afulnx_64', '/B', '/P', '/N', '/K') + FPGA_CHECK_COMMAND = ('./fpga_spi_flash.sh', '-rid') + FPGA_UPDATE_COMMAND = ('./fpga_spi_flash.sh', '-upd', '-all') + CPLD_CHECK_COMMAND = ('./cpldupd', '-s') + CPLD_UPDATE_COMMAND = ('./cpldupd', '-u') def __init__(self, component_index): self.index = component_index self.name = self.CHASSIS_COMPONENTS[self.index][0] self.description = self.CHASSIS_COMPONENTS[self.index][1] - if self.name == "FCM0_CPLD" or self.name == "FCM1_CPLD": + if self.name in ("FCM0_CPLD", "FCM1_CPLD"): hwmon_dir = glob.glob(SYSFS_DIR[self.index]) self.sysfs_dir = hwmon_dir[0] else: self.sysfs_dir = SYSFS_DIR[self.index] self.dev_name = self.DEV_NAME[self.index] - self.tfr_name = self.TFR_NAME[self.index] - - def _get_command_result(self, cmdline): - try: - proc = subprocess.Popen(cmdline.split(), stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - stdout = proc.communicate()[0] - proc.wait() - result = stdout.rstrip('\n') - except OSError: - result = None - - return result def get_name(self): """ @@ -171,10 +152,10 @@ def install_firmware(self, image_path): Returns: A boolean, True if install was successful, False if not """ - image_name = ntpath.basename(image_path) + image_name = os.path.basename(image_path) + image_full_path = os.path.join("/tmp", image_name) - os.chdir("/tmp") - if not os.path.isfile(image_name): + if not os.path.isfile(image_full_path): print(f"ERROR: the image {image_name} doesn't exist in /tmp") return False @@ -182,70 +163,66 @@ def install_firmware(self, image_path): if not os.path.isfile('/tmp/afulnx_64'): print("ERROR: the BIOS upgrade tool /tmp/afulnx_64 doesn't exist ") return False - self.BIOS_UPDATE_COMMAND[1] = image_name + os.chmod('/tmp/afulnx_64', 0o755) + cmd = [self.BIOS_UPDATE_COMMAND[0], image_full_path, *self.BIOS_UPDATE_COMMAND[1:]] try: - subprocess.run(self.BIOS_UPDATE_COMMAND, stderr=subprocess.STDOUT) + subprocess.run(cmd, stderr=subprocess.STDOUT, check=True, cwd="/tmp") except subprocess.CalledProcessError as e: print(f"ERROR: Failed to upgrade BIOS: rc={e.returncode}") return False print("\nBIOS update has ended\n") - - elif self.name == "SYS_FPGA": + + elif self.name == "CB_FPGA": if not os.path.isfile('/tmp/fpga_spi_flash.sh'): print("ERROR: the fpga upgrade tool /tmp/fpga_spi_flash.sh doesn't exist ") return False if not os.path.isfile('/tmp/fpga_upd2'): print("ERROR: the fpga upgrade tool /tmp/fpga_upd2 doesn't exist ") return False + os.chmod('/tmp/fpga_spi_flash.sh', 0o755) + os.chmod('/tmp/fpga_upd2', 0o755) + check_cmd = list(self.FPGA_CHECK_COMMAND) try: - result = subprocess.check_output(self.FPGA_CHECK_COMMAND) - result = subprocess.check_output(self.FPGA_CHECK_COMMAND) + subprocess.run(check_cmd, cwd="/tmp") + result = subprocess.check_output(check_cmd, cwd="/tmp") text = result.decode('utf-8') print(text) except subprocess.CalledProcessError as e: print(f"ERROR: Failed to check SYS_FPGA RDID: rc={e.returncode}") + return False last = text.splitlines() if last[-1].strip() != "RDID: c2 20 18": print("FPGA RDID check failed!") return False - self.FPGA_UPDATE_COMMAND[2] = image_name + update_cmd = [self.FPGA_UPDATE_COMMAND[0], self.FPGA_UPDATE_COMMAND[1], image_full_path, self.FPGA_UPDATE_COMMAND[2]] try: - subprocess.run(self.FPGA_UPDATE_COMMAND, stderr=subprocess.STDOUT) + subprocess.run(update_cmd, stderr=subprocess.STDOUT, check=True, cwd="/tmp") except subprocess.CalledProcessError as e: print(f"ERROR: Failed to upgrade SYS_FPGA: rc={e.returncode}") return False - print("\nSYS_FPGA firmware update has ended\n") - print("!!!The system will power cycle in 10 sec!!!") - time.sleep(7) - self._power_cycle() + print("\nCB_FPGA firmware update has ended\n") else: if not os.path.isfile('/tmp/cpldupd'): print("ERROR: the cpld upgrade tool /tmp/cpldupd doesn't exist ") return False - self.CPLD_CHECK_COMMAND[2] = self.dev_name + os.chmod('/tmp/cpldupd', 0o755) + check_cmd = [*self.CPLD_CHECK_COMMAND, self.dev_name] try: - subprocess.run(self.CPLD_CHECK_COMMAND, stderr=subprocess.STDOUT) + subprocess.run(check_cmd, stderr=subprocess.STDOUT, check=True, cwd="/tmp") except subprocess.CalledProcessError as e: print(f"ERROR: Failed to Scan Jtag chain for {self.name}: rc={e.returncode}") return False - self.CPLD_UPDATE_COMMAND[2] = self.dev_name - self.CPLD_UPDATE_COMMAND[3] = image_name + update_cmd = [*self.CPLD_UPDATE_COMMAND, self.dev_name, image_full_path] try: - subprocess.run(self.CPLD_UPDATE_COMMAND, stderr=subprocess.STDOUT) - except subprocess.CalledProcessError as e: - print(f"ERROR: Failed to upgrade {self.name}: rc={e.returncode}") - return False - self.CPLD_UPDATE_COMMAND[3] = self.tfr_name - try: - subprocess.run(self.CPLD_UPDATE_COMMAND, stderr=subprocess.STDOUT) + subprocess.run(update_cmd, stderr=subprocess.STDOUT, check=True, cwd="/tmp") except subprocess.CalledProcessError as e: print(f"ERROR: Failed to upgrade {self.name}: rc={e.returncode}") return False print(f"\n{self.name} firmware update has ended\n") - + return True - + def update_firmware(self, image_path): """ Updates firmware of the component @@ -279,16 +256,8 @@ def get_available_firmware_version(self, image_path): A string containing the available firmware version of the component """ if image_path: - image_name = ntpath.basename(image_path) + image_name = os.path.basename(image_path) return image_name return 'NA' - - def _power_cycle(self): - os.system('sync') - os.system('sync') - time.sleep(3) - for i in range(4): - file_path = f"/sys/bus/i2c/devices/{i+136}-00{hex(0x58+i)[2:]}/psu_rst" - if os.path.exists(file_path): - write_sysfs_file(file_path, "Reset\n") + diff --git a/ixr7220h6-128/sonic_platform/eeprom.py b/ixr7220h6-128/sonic_platform/eeprom.py index 069fe58..ef7d04e 100644 --- a/ixr7220h6-128/sonic_platform/eeprom.py +++ b/ixr7220h6-128/sonic_platform/eeprom.py @@ -16,10 +16,10 @@ except ImportError as e: raise ImportError(str(e) + ' - required module not found') from e -I2C_FAN_EEPROM = ["163-0050", "164-0050", - "165-0050", "166-0050", - "169-0050", "170-0050", - "171-0050", "172-0050"] +I2C_FAN_EEPROM = ["164-0050", "165-0050", + "166-0050", "167-0050", + "170-0050", "171-0050", + "172-0050", "173-0050"] sonic_logger = logger.Logger('eeprom') @@ -30,13 +30,13 @@ class Eeprom(TlvInfoDecoder): def __init__(self, is_psu, psu_index, is_fan, drawer_index): self.is_psu_eeprom = is_psu self.is_fan_eeprom = is_fan - self.is_sys_eeprom = not (is_psu | is_fan) + self.is_sys_eeprom = not (is_psu or is_fan) self.service_tag = 'NA' self.part_number = 'NA' if self.is_sys_eeprom: self.start_offset = 0 - self.eeprom_path = self.I2C_DIR + "158-0056/eeprom" + self.eeprom_path = self.I2C_DIR + "159-0056/eeprom" # System EEPROM is in ONIE TlvInfo EEPROM format super(Eeprom, self).__init__(self.eeprom_path, self.start_offset, '', True) self.base_mac = '' @@ -73,7 +73,7 @@ def _load_system_eeprom(self): # Read System EEPROM as per ONIE TlvInfo EEPROM format. self.eeprom_data = self.read_eeprom() except Exception as e: - sonic_logger.log_warning("Unable to read system eeprom") + sonic_logger.log_warning(f"Unable to read system eeprom: {e}") self.base_mac = 'NA' self.serial_number = 'NA' self.part_number = 'NA' @@ -161,16 +161,6 @@ def part_number_str(self): return self.part_number - def airflow_fan_type(self): - """ - Returns the airflow fan type. - """ - if self.is_psu_eeprom: - return int(self.psu_type.encode('hex'), 16) - if self.is_fan_eeprom: - return int(self.fan_type.encode('hex'), 16) - return None - # System EEPROM specific methods def base_mac_addr(self): """ @@ -201,7 +191,7 @@ def service_tag_str(self): def manuf_date_str(self): """ - Returns the servicetag number. + Returns the manufacturing date. """ if not self.manuf_date: self._load_system_eeprom() diff --git a/ixr7220h6-128/sonic_platform/fan.py b/ixr7220h6-128/sonic_platform/fan.py index ad1ea0a..ded310e 100644 --- a/ixr7220h6-128/sonic_platform/fan.py +++ b/ixr7220h6-128/sonic_platform/fan.py @@ -20,7 +20,7 @@ WORKING_FAN_SPEED = 2000 HWMON_DIR = "/sys/bus/i2c/devices/{}/hwmon/hwmon*/" -I2C_DEV_LIST = ["144-0032", "145-0033"] +I2C_DEV_LIST = ["145-0032", "146-0033"] FAN_INDEX_IN_DRAWER = [(1, 2), (1, 2), diff --git a/ixr7220h6-128/sonic_platform/fan_drawer.py b/ixr7220h6-128/sonic_platform/fan_drawer.py index e508186..dc1c882 100644 --- a/ixr7220h6-128/sonic_platform/fan_drawer.py +++ b/ixr7220h6-128/sonic_platform/fan_drawer.py @@ -17,9 +17,9 @@ FANS_PER_DRAWER = 2 HWMON_DIR = "/sys/bus/i2c/devices/{}/hwmon/hwmon*/" -I2C_DEV_LIST = ["144-0032", "145-0033"] -EEPROM_ADDR = ['163', '169', '164', '170', - '165', '171', '166', '172'] +I2C_DEV_LIST = ["145-0032", "146-0033"] +EEPROM_ADDR = ['164', '170', '165', '171', + '166', '172', '167', '173'] sonic_logger = logger.Logger('fan_drawer') class NokiaFanDrawer(FanDrawerBase): @@ -32,7 +32,7 @@ def __init__(self, index): self.fan_led_color = ['off', 'green', 'amber', 'green_blink'] self.fan_direction_intake = "intake" - i2c_dev = I2C_DEV_LIST[self._index%2] + i2c_dev = I2C_DEV_LIST[(self._index-1)%2] hwmon_path = glob.glob(HWMON_DIR.format(i2c_dev)) self.get_fan_presence_reg = hwmon_path[0] + f"fan{(index//2)+1}_present" self.fan_led_reg = hwmon_path[0] + f"fan{(index//2)+1}_led" @@ -83,7 +83,7 @@ def get_serial(self): """ Retrieves the serial number of the Fan Drawer Returns: - string: Serial number of Fan + string: Serial number of the Fan Drawer """ if not self.get_presence(): return 'N/A' @@ -94,7 +94,7 @@ def get_part_number(self): Retrieves the part number of the Fan Drawer Returns: - string: Part number of Fan + string: Part number of the Fan Drawer """ if not self.get_presence(): return 'N/A' @@ -105,7 +105,7 @@ def get_service_tag(self): Retrieves the servicetag number of the Fan Drawer Returns: - string: servicetag number of Fan + string: servicetag number of the Fan Drawer """ if not self.get_presence(): return 'N/A' @@ -113,10 +113,10 @@ def get_service_tag(self): def get_manuf_date(self): """ - Retrieves the servicetag number of the Fan Drawer + Retrieves the manufacturing date of the Fan Drawer Returns: - string: servicetag number of Fan + string: manufacturing date of the Fan Drawer """ if not self.get_presence(): return 'N/A' diff --git a/ixr7220h6-128/sonic_platform/psu.py b/ixr7220h6-128/sonic_platform/psu.py index 23d21e1..b5118d2 100644 --- a/ixr7220h6-128/sonic_platform/psu.py +++ b/ixr7220h6-128/sonic_platform/psu.py @@ -15,9 +15,10 @@ PSU_NUM = 4 REG_DIR = "/sys/bus/i2c/devices/1-0060/" +LED_REG_DIR = "/sys/bus/i2c/devices/135-0071/" MAX_VOLTAGE = 264 MIN_VOLTAGE = 180 -I2C_BUS = [136, 137, 138, 139] +I2C_BUS = [137, 138, 139, 140] PSU_ADDR = ["58", "59", "5a", "5b"] EEPROM_ADDR = ['50', '51', '52', '53'] @@ -264,7 +265,7 @@ def get_status_master_led(self): Returns: A string, one of the predefined STATUS_LED_COLOR_* strings. """ - result = read_sysfs_file(REG_DIR+"led_psu") + result = read_sysfs_file(LED_REG_DIR+"led_psu") if result == '1': return 'green' else: diff --git a/ixr7220h6-128/sonic_platform/sfp.py b/ixr7220h6-128/sonic_platform/sfp.py index c734132..6b2d499 100644 --- a/ixr7220h6-128/sonic_platform/sfp.py +++ b/ixr7220h6-128/sonic_platform/sfp.py @@ -19,15 +19,15 @@ PORT_NUM = 128 SYSFS_DIR = "/sys/bus/i2c/devices/{}/" -PORTPLD_ADDR = ["152-0076", "153-0076", "148-0074", "149-0075", "150-0073", "151-0073"] +PORTPLD_ADDR = ["153-0076", "154-0076", "149-0074", "150-0075", "151-0073", "152-0073"] ADDR_IDX = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3] + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3] PORT_IDX = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30,1,2,5,6,9,10,13,14,17,18,21,22,25,26,29,30, 3,4,7,8,11,12,15,16,19,20,23,24,27,28,31,32,3,4,7,8,11,12,15,16,19,20,23,24,27,28,31,32, - 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,33,34] + 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,33] SYSLOG_IDENTIFIER = "sfp" sonic_logger = logger.Logger(SYSLOG_IDENTIFIER) @@ -144,11 +144,10 @@ def get_reset_status(self): Returns: A Boolean, True if reset enabled, False if disabled """ - if self.index <= PORT_NUM: - result = read_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_rst") - if result == '0': - return True - return False + result = read_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_rst") + if result == '0': + return True + return False def get_status(self): @@ -172,7 +171,7 @@ def reset(self): if not self.get_presence(): sys.stderr.write(f"Error: Port {self.index} not inserted, could not reset it.\n\n") return False - sonic_logger.log_info(f"Reseting port #{self.index}.") + sonic_logger.log_info(f"Resetting port #{self.index}.") result1 = 'ERR' result2 = 'ERR' @@ -197,11 +196,10 @@ def set_lpmode(self, lpmode): """ result = 'ERR' - if self.index <= PORT_NUM: - if lpmode: - result = write_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod", '0') - else: - result = write_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod", '1') + if lpmode: + result = write_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod", '0') + else: + result = write_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod", '1') if result != 'ERR': return True @@ -216,8 +214,7 @@ def get_lpmode(self): """ result = 'ERR' - if self.index <= PORT_NUM: - result = read_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod") + result = read_sysfs_file(self.pld_path+f"port_{self.pld_port_idx}_lpmod") if result == '0': return True diff --git a/ixr7220h6-128/sonic_platform/sfp_event.py b/ixr7220h6-128/sonic_platform/sfp_event.py index abf3e70..75c3c2b 100644 --- a/ixr7220h6-128/sonic_platform/sfp_event.py +++ b/ixr7220h6-128/sonic_platform/sfp_event.py @@ -1,4 +1,4 @@ -"""" +""" listen for the SFP change event and return to chassis. """ @@ -17,10 +17,10 @@ # SFP PORT numbers PORT_START = 1 -PORT_END = 130 +PORT_END = 129 SYSFS_DIR = "/sys/bus/i2c/devices/{}/" -PORTPLD_ADDR = ["152-0076", "153-0076", "148-0074", "149-0075", "150-0073", "151-0073"] +PORTPLD_ADDR = ["153-0076", "154-0076", "149-0074", "150-0075", "151-0073", "152-0073"] _BOOL_LOOKUP_LSB = [tuple((i >> s) & 1 for s in range(8)) for i in range(256)] _BOOL_TABLE_A = [((i >> 0) & 1, (i >> 1) & 1, (i >> 4) & 1, (i >> 5) & 1) @@ -38,15 +38,10 @@ def __init__(self): self.handle = None self.modprs_list = [] - def initialize(self): # Get Transceiver status time.sleep(5) self.modprs_list = self._get_transceiver_status() - if self.modprs_list[PORT_END-2]: - write_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+"port_33_tx_en", '0') - if self.modprs_list[PORT_END-1]: - write_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+"port_34_tx_en", '0') def deinitialize(self): if self.handle is None: @@ -70,12 +65,11 @@ def _get_transceiver_status(self): port_status.extend(self._reorder(reg_value[4:12])) port_status.extend([bit for h in reg_value[-4:] for bit in lookup[int(h, 16)]]) - for i in range (33, 35): - status = read_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+f"port_{i}_prs") - if status == '0': - port_status.append(0) - else: - port_status.append(1) + status = read_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+f"port_33_prs") + if status == '0': + port_status.append(0) + else: + port_status.append(1) return port_status @@ -109,12 +103,6 @@ def check_sfp_status(self, port_change, timeout): else: port_change[i+1] = '0' - if (i == PORT_END -2) or (i == PORT_END -1): - if port_status[i] == 0: - write_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+f"port_{i-95}_tx_en", '0') - else: - write_sysfs_file(SYSFS_DIR.format(PORTPLD_ADDR[3])+f"port_{i-95}_tx_en", '1') - # Update reg value self.modprs_list = port_status return True, port_change diff --git a/ixr7220h6-128/sonic_platform/test/test-sfp.py b/ixr7220h6-128/sonic_platform/test/test-sfp.py index f76c2e7..800c1d0 100644 --- a/ixr7220h6-128/sonic_platform/test/test-sfp.py +++ b/ixr7220h6-128/sonic_platform/test/test-sfp.py @@ -14,7 +14,7 @@ def main(): chassis = Chassis() PORT_START = 1 - PORT_END = 66 + PORT_END = 129 for physical_port in range(PORT_START, PORT_START + PORT_END): diff --git a/ixr7220h6-128/sonic_platform/thermal.py b/ixr7220h6-128/sonic_platform/thermal.py index aa11b60..b3fe9bf 100644 --- a/ixr7220h6-128/sonic_platform/thermal.py +++ b/ixr7220h6-128/sonic_platform/thermal.py @@ -21,22 +21,22 @@ class Thermal(ThermalBase): """Nokia platform-specific Thermal class""" HWMON_DIR = "/sys/bus/i2c/devices/{}/hwmon/hwmon*/" - I2C_DEV_LIST = ["143-0048", "154-004b", "154-004c", "154-004d", - "154-0049", "154-0048", "154-004a", "174-0048", "177-0048", - "180-0048", "183-0048", "167-004d","168-004e", "161-004d", - "162-004e", "0-0021", "0-0021"] + I2C_DEV_LIST = ["144-0048", "155-004b", "155-004c", "155-004d", + "155-0049", "155-0048", "155-004a", "175-0048", "178-0048", + "181-0048", "184-0048", "168-004d","169-004e", "162-004d", + "163-004e", "0-0021", "0-0021"] THERMAL_NAME = ["Carrier Board", "MB Top U34", "MB Top U178", "MB Bottom U196", "MB Bottom U183", "MB Top U3", "MB Top U15", "LDB Left", "LDB Right", "UDB Left", "UDB Right", "Top FCM 1", "Top FCM 2", "Bottom FCM 1", "Bottom FCM 2", "CPU", "DDR", "Max Port Temp.", "SSD", "ASIC TH6"] - THRESHHOLD = [62.0, 75.0, 75.0, 75.0, + THRESHOLD = [62.0, 75.0, 75.0, 75.0, 75.0, 75.0, 75.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 62.0, 62.0, 95.0, 70.0, 75.0, 70.0, 95.0] - CRITICAL_THRESHHOLD = [70.0, 85.0, 85.0, 85.0, + CRITICAL_THRESHOLD = [70.0, 85.0, 85.0, 85.0, 85.0, 85.0, 85.0, 70.0, 70.0, 70.0, 70.0, 70.0, 70.0, 72.0, 72.0, 99.0, 80.0, 77.0, 80.0, @@ -55,7 +55,9 @@ def __init__(self, thermal_index, sfps): self.thermal_temperature_file = None if self.index == THERMAL_NUM - 1: #SSD - self.thermal_temperature_file = "/sys/class/hwmon/hwmon1/temp1_input" + self.device_path = glob.glob("/sys/class/nvme/nvme0/hwmon*/") + if len(self.device_path) > 0: + self.thermal_temperature_file = self.device_path[0] + "temp1_input" elif self.index == THERMAL_NUM - 2: self.sfps = sfps elif self.index == THERMAL_NUM - 3: @@ -168,9 +170,9 @@ def get_high_threshold(self): Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ - return self.THRESHHOLD[self.index-1] + return self.THRESHOLD[self.index-1] - def set_high_threshold(self, _temperature): + def set_high_threshold(self, temperature): """ Sets the high threshold temperature of thermal @@ -192,9 +194,9 @@ def get_high_critical_threshold(self): A float number, the high critical threshold temperature of thermal in Celsius up to nearest thousandth of one degree Celsius, e.g. 30.125 """ - return self.CRITICAL_THRESHHOLD[self.index - 1] + return self.CRITICAL_THRESHOLD[self.index - 1] - def set_high_critical_threshold(self): + def set_high_critical_threshold(self, temperature): """ Sets the high_critical threshold temperature of thermal @@ -217,7 +219,7 @@ def get_low_threshold(self): """ return 0.0 - def set_low_threshold(self, _temperature): + def set_low_threshold(self, temperature): """ Sets the low threshold temperature of thermal diff --git a/ixr7220h6-128/sonic_platform/thermal_actions.py b/ixr7220h6-128/sonic_platform/thermal_actions.py index c98a85b..c482d07 100644 --- a/ixr7220h6-128/sonic_platform/thermal_actions.py +++ b/ixr7220h6-128/sonic_platform/thermal_actions.py @@ -1,4 +1,6 @@ try: + import os + import time from sonic_platform_base.sonic_thermal_control.thermal_action_base import ThermalPolicyActionBase from sonic_platform_base.sonic_thermal_control.thermal_json_object import thermal_json_object from sonic_py_common import logger @@ -163,27 +165,29 @@ def execute(self, thermal_info_dict): :return: """ try: - import os - from sonic_platform.chassis import Chassis + from .thermal_infos import ChassisInfo + chassis = thermal_info_dict[ChassisInfo.INFO_NAME].get_chassis() for i in range(8): - fan_obj = Chassis().get_fan_drawer(i) + fan_obj = chassis.get_fan_drawer(i) if fan_obj.get_presence(): sonic_logger.log_warning(f"Fan {fan_obj.get_name()} speed: " f"{fan_obj.get_fan(0).get_speed()}%, {fan_obj.get_fan(1).get_speed()}%.") else: - sonic_logger.log_warning(f"Fan {fan_obj.get_name()} not presence.") + sonic_logger.log_warning(f"Fan {fan_obj.get_name()} not present.") for i in range(4): - psu_obj = Chassis().get_psu(i) + psu_obj = chassis.get_psu(i) if psu_obj.get_presence(): 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 present.") except Exception as e: - sonic_logger.log_warning(" Fail to save fan and psu info {}".format(repr(e))) + sonic_logger.log_warning(f"Failed to save fan and psu info: {e!r}") sonic_logger.log_error("Alarm for temperature critical is detected, reboot Device") - os.system('reboot') + os.system('sync') + time.sleep(1) + os.system('echo b > /proc/sysrq-trigger') @thermal_json_object('thermal_control.control') class ControlThermalAlgoAction(ThermalPolicyActionBase): @@ -213,7 +217,7 @@ def load_from_json(self, json_obj): elif status_str == 'false': self.status = False else: - raise ValueError('Invalid {} field value, please specify true of false'. + raise ValueError('Invalid {} field value, please specify true or false'. format(ControlThermalAlgoAction.JSON_FIELD_STATUS)) else: raise ValueError('ControlThermalAlgoAction ' diff --git a/ixr7220h6-128/sonic_platform/thermal_infos.py b/ixr7220h6-128/sonic_platform/thermal_infos.py index 27b6d4a..3c760c2 100644 --- a/ixr7220h6-128/sonic_platform/thermal_infos.py +++ b/ixr7220h6-128/sonic_platform/thermal_infos.py @@ -98,7 +98,7 @@ def collect(self, chassis): for index in range(num_of_thermals): self._temps.insert(index, chassis.get_thermal(index).get_temperature()) - # Find current required threshold level + # Find current required threshold level max_level =0 min_level = [self._num_fan_levels for i in range(num_of_thermals)] for index in range(num_of_thermals): @@ -112,18 +112,18 @@ def collect(self, chassis): max_of_min_level=max(min_level) - #compare with running threshold level + # Compare with running threshold level if max_of_min_level > self._old_threshold_level: max_of_min_level=self._old_threshold_level self._current_threshold_level = max(max_of_min_level,max_level) - #set fan to max speed if one fan is down + # Set fan to max speed if one fan is down for fan in chassis.get_all_fans(): if not fan.get_status() : self._current_threshold_level = 3 - # Decide fan speed based on threshold level + # Decide fan speed based on threshold level if self._current_threshold_level != self._old_threshold_level: if self._current_threshold_level == 0: self._set_fan_default_speed = True diff --git a/ixr7220h6-128/sonic_platform/watchdog.py b/ixr7220h6-128/sonic_platform/watchdog.py index 5bb2e00..53a36c0 100644 --- a/ixr7220h6-128/sonic_platform/watchdog.py +++ b/ixr7220h6-128/sonic_platform/watchdog.py @@ -95,8 +95,8 @@ def _gettimeout(self): Get watchdog timeout @return watchdog timeout """ - timeout=0 - timeout=read_sysfs_file(self.wd_timeout_reg) + timeout = 0 + timeout = int(read_sysfs_file(self.wd_timeout_reg)) return timeout