Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6ed8b3e authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "edac: improve gold CPU cache way parsing"

parents b362348e 2894bfa7
Loading
Loading
Loading
Loading
+26 −6
Original line number Original line Diff line number Diff line
@@ -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);
@@ -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);
}
}