From 69b20ac14eed2ad6dc325eecf2beb4e48235ad86 Mon Sep 17 00:00:00 2001 From: Jostar Yang Date: Tue, 31 Aug 2021 16:20:24 +0800 Subject: [PATCH 1/3] [AS4630-54TE] Fix psu drv to support YM1151D PSU Signed-off-by: Jostar Yang --- .../modules/x86-64-accton-as4630-54te-psu.c | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c index 3a99f19a9c..668e3dbdde 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c @@ -91,7 +91,6 @@ static ssize_t show_status(struct device *dev, struct device_attribute *da, struct as4630_54te_psu_data *data = as4630_54te_psu_update_device(dev); u8 status = 0; - //printk("data->status=0x%x, attr->index=%d,data->index=%d \n", data->status, attr->index, data->index); if (attr->index == PSU_PRESENT) { if(data->index==0) status = !( (data->status >> 5) & 0x1); @@ -267,7 +266,7 @@ static struct as4630_54te_psu_data *as4630_54te_psu_update_device(struct device /* Read psu status */ status = as4630_54te_cpld_read(0x60, 0x22); - //printk("status=0x%x in %s\n", status, __FUNCTION__); + if (status < 0) { dev_dbg(&client->dev, "cpld reg 0x60 err %d\n", status); } @@ -278,29 +277,40 @@ static struct as4630_54te_psu_data *as4630_54te_psu_update_device(struct device /* Read model name */ memset(data->model_name, 0, sizeof(data->model_name)); memset(data->serial_number, 0, sizeof(data->serial_number)); - power_good = (data->status >> (3-data->index) & 0x1); - + if(data->index==0) + power_good = ( (data->status >> 6) & 0x1); + else + power_good = ( (data->status >> 2) & 0x1); + if (power_good) { status = as4630_54te_psu_read_block(client, 0x20, data->model_name, - ARRAY_SIZE(data->model_name)-1); + ARRAY_SIZE(data->model_name)-1); + if (status < 0) { data->model_name[0] = '\0'; dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); printk("unable to read model name from (0x%x)\n", client->addr); } - else { - data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; + else if(!strncmp(data->model_name, "YM-1151D", strlen("YM-1151D"))) + { + data->model_name[strlen("YM-1151D")]='\0'; } - /* Read from offset 0x2e ~ 0x3d (16 bytes) */ - status = as4630_54te_psu_read_block(client, 0x35,data->serial_number, MAX_SERIAL_NUMBER); + else + { + data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; + } + /* Read from offset 0x2e ~ 0x3f (16 bytes) */ + status = as4630_54te_psu_read_block(client, 0x2e,data->serial_number, MAX_SERIAL_NUMBER); if (status < 0) { data->serial_number[0] = '\0'; dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x2e)\n", client->addr); printk("unable to read model name from (0x%x) offset(0x2e)\n", client->addr); } - data->serial_number[MAX_SERIAL_NUMBER-1]='\0'; + + data->serial_number[MAX_SERIAL_NUMBER]='\0'; + } data->last_updated = jiffies; From 2786c8a8ae2d87f66f5739eae2877723b5b2cc90 Mon Sep 17 00:00:00 2001 From: Jostar Yang Date: Fri, 5 Nov 2021 10:00:13 +0800 Subject: [PATCH 2/3] Fix code bug --- .../as4630-54te/modules/x86-64-accton-as4630-54te-psu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c index 668e3dbdde..f9fec5bda5 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c @@ -309,7 +309,7 @@ static struct as4630_54te_psu_data *as4630_54te_psu_update_device(struct device printk("unable to read model name from (0x%x) offset(0x2e)\n", client->addr); } - data->serial_number[MAX_SERIAL_NUMBER]='\0'; + data->serial_number[MAX_SERIAL_NUMBER-1]='\0'; } From e4f6af0b478c900a9c771435de4a6c1137952325 Mon Sep 17 00:00:00 2001 From: Jostar Yang Date: Wed, 12 Jan 2022 14:24:49 +0800 Subject: [PATCH 3/3] Modify read serial offset for different PSU --- .../modules/x86-64-accton-as4630-54te-psu.c | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c index f9fec5bda5..e23c6193cb 100755 --- a/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c +++ b/platform/broadcom/sonic-platform-modules-accton/as4630-54te/modules/x86-64-accton-as4630-54te-psu.c @@ -260,6 +260,7 @@ static struct as4630_54te_psu_data *as4630_54te_psu_update_device(struct device if (time_after(jiffies, data->last_updated + HZ + HZ / 2) || !data->valid) { int status; + u8 serial_offset; int power_good = 0; dev_dbg(&client->dev, "Starting as4630_54te update\n"); @@ -289,24 +290,33 @@ static struct as4630_54te_psu_data *as4630_54te_psu_update_device(struct device if (status < 0) { data->model_name[0] = '\0'; dev_dbg(&client->dev, "unable to read model name from (0x%x)\n", client->addr); - printk("unable to read model name from (0x%x)\n", client->addr); } - else if(!strncmp(data->model_name, "YM-1151D", strlen("YM-1151D"))) - { - data->model_name[strlen("YM-1151D")]='\0'; - - } - else - { + else { + data->model_name[8] = '-'; data->model_name[ARRAY_SIZE(data->model_name)-1] = '\0'; } - /* Read from offset 0x2e ~ 0x3f (16 bytes) */ - status = as4630_54te_psu_read_block(client, 0x2e,data->serial_number, MAX_SERIAL_NUMBER); + if(!strncmp(data->model_name, "YM-1151D", strlen("YM-1151D"))) + { + if (!strncmp(data->model_name, "YM-1151D-A03R", strlen("YM-1151D-A03R"))) + { + data->model_name[strlen("YM-1151D-A03R")] = '\0'; + serial_offset = 0x2E; /* YM-1151D-A03R, F2B dir */ + } + else + { + data->model_name[strlen("YM-1151D-A02R")] = '\0'; + serial_offset = 0x35; /* YM-1151D-A02R, B2F dir */ + } + } + else + serial_offset = 0x2E; + + /* Read from offset 0x2e ~ 0x3f (16 bytes) */ + status = as4630_54te_psu_read_block(client, serial_offset, data->serial_number, MAX_SERIAL_NUMBER); if (status < 0) { data->serial_number[0] = '\0'; dev_dbg(&client->dev, "unable to read model name from (0x%x) offset(0x2e)\n", client->addr); - printk("unable to read model name from (0x%x) offset(0x2e)\n", client->addr); } data->serial_number[MAX_SERIAL_NUMBER-1]='\0';