From 2894bfa77c5bc2bf1d74b104236fd8b3e6729d11 Mon Sep 17 00:00:00 2001 From: Prateek Sood Date: Mon, 21 Sep 2020 13:13:27 +0530 Subject: [PATCH] edac: improve gold CPU cache way parsing Improve gold CPU cache way parsing. Gold cores uses bit[31:28] of ERR0MISC0. Change-Id: I24bd9f1e78829fc37eceb1a09871dab38ec8eacb Signed-off-by: Prateek Sood --- drivers/edac/kryo_arm64_edac.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/drivers/edac/kryo_arm64_edac.c b/drivers/edac/kryo_arm64_edac.c index 6515c712a591..5d26e7821e60 100644 --- a/drivers/edac/kryo_arm64_edac.c +++ b/drivers/edac/kryo_arm64_edac.c @@ -217,6 +217,9 @@ out: static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, struct edac_device_ctl_info *edev_ctl) { + u32 part_num; + int way; + edac_printk(KERN_CRIT, EDAC_CPU, "ERRXSTATUS_EL1: %llx\n", errxstatus); edac_printk(KERN_CRIT, EDAC_CPU, "ERRXMISC_EL1: %llx\n", errxmisc); edac_printk(KERN_CRIT, EDAC_CPU, "Cache level: L%d\n", level + 1); @@ -247,12 +250,29 @@ static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, break; } - if (level == L3) - edac_printk(KERN_CRIT, EDAC_CPU, - "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc)); - else - edac_printk(KERN_CRIT, EDAC_CPU, - "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc) >> 2); + if (level == L3) { + way = (int) KRYO_ERRXMISC_WAY(errxmisc); + } else { + part_num = read_cpuid_part_number(); + switch (part_num) { + case QCOM_CPU_PART_KRYO4XX_SILVER_V1: + case QCOM_CPU_PART_KRYO4XX_SILVER_V2: + case QCOM_CPU_PART_KRYO6XX_SILVER_V1: + way = (int) KRYO_ERRXMISC_WAY(errxmisc) >> 2; + break; + case QCOM_CPU_PART_KRYO4XX_GOLD: + case QCOM_CPU_PART_KRYO5XX_GOLD: + case QCOM_CPU_PART_KRYO6XX_GOLDPLUS: + way = (int) KRYO_ERRXMISC_WAY(errxmisc); + break; + default: + edac_printk(KERN_CRIT, EDAC_CPU, + "Error in matching part num:%u\n", part_num); + return; + } + } + + edac_printk(KERN_CRIT, EDAC_CPU, "Way: %d\n", way); errors[errorcode].func(edev_ctl, smp_processor_id(), level, errors[errorcode].msg); }