Loading drivers/edac/kryo_arm64_edac.c +26 −6 Original line number Original line Diff line number Diff line Loading @@ -217,6 +217,9 @@ static int request_erp_irq(struct platform_device *pdev, const char *propname, static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, struct edac_device_ctl_info *edev_ctl) 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, "ERRXSTATUS_EL1: %llx\n", errxstatus); edac_printk(KERN_CRIT, EDAC_CPU, "ERRXMISC_EL1: %llx\n", errxmisc); edac_printk(KERN_CRIT, EDAC_CPU, "ERRXMISC_EL1: %llx\n", errxmisc); edac_printk(KERN_CRIT, EDAC_CPU, "Cache level: L%d\n", level + 1); edac_printk(KERN_CRIT, EDAC_CPU, "Cache level: L%d\n", level + 1); Loading Loading @@ -247,12 +250,29 @@ static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, break; break; } } if (level == L3) if (level == L3) { edac_printk(KERN_CRIT, EDAC_CPU, way = (int) KRYO_ERRXMISC_WAY(errxmisc); "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc)); } else { 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, edac_printk(KERN_CRIT, EDAC_CPU, "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc) >> 2); "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(), errors[errorcode].func(edev_ctl, smp_processor_id(), level, errors[errorcode].msg); level, errors[errorcode].msg); } } Loading Loading
drivers/edac/kryo_arm64_edac.c +26 −6 Original line number Original line Diff line number Diff line Loading @@ -217,6 +217,9 @@ static int request_erp_irq(struct platform_device *pdev, const char *propname, static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, struct edac_device_ctl_info *edev_ctl) 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, "ERRXSTATUS_EL1: %llx\n", errxstatus); edac_printk(KERN_CRIT, EDAC_CPU, "ERRXMISC_EL1: %llx\n", errxmisc); edac_printk(KERN_CRIT, EDAC_CPU, "ERRXMISC_EL1: %llx\n", errxmisc); edac_printk(KERN_CRIT, EDAC_CPU, "Cache level: L%d\n", level + 1); edac_printk(KERN_CRIT, EDAC_CPU, "Cache level: L%d\n", level + 1); Loading Loading @@ -247,12 +250,29 @@ static void dump_err_reg(int errorcode, int level, u64 errxstatus, u64 errxmisc, break; break; } } if (level == L3) if (level == L3) { edac_printk(KERN_CRIT, EDAC_CPU, way = (int) KRYO_ERRXMISC_WAY(errxmisc); "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc)); } else { 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, edac_printk(KERN_CRIT, EDAC_CPU, "Way: %d\n", (int) KRYO_ERRXMISC_WAY(errxmisc) >> 2); "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(), errors[errorcode].func(edev_ctl, smp_processor_id(), level, errors[errorcode].msg); level, errors[errorcode].msg); } } Loading