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

Commit 15154c57 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

i7300_edac: Properly detect the type of error correction

parent bb81a216
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -450,14 +450,24 @@ static int decode_mtr(struct i7300_pvt *pvt,
	p_csrow->mtype = MEM_FB_DDR2;

	/*
	 * FIXME: the type of error detection actually depends of the
	 * The type of error detection actually depends of the
	 * mode of operation. When it is just one single memory chip, at
	 * socket 0, channel 0, it uses 8-byte-over-32-byte SECDED+ code.
	 * In normal or mirrored mode, it uses Single Device Data correction,
	 * In normal or mirrored mode, it uses Lockstep mode,
	 * with the possibility of using an extended algorithm for x8 memories
	 * See datasheet Sections 7.3.6 to 7.3.8
	 */

	if (IS_SINGLE_MODE(pvt->mc_settings_a)) {
		p_csrow->edac_mode = EDAC_SECDED;
		debugf0("ECC code is 8-byte-over-32-byte SECDED+ code\n");
	} else {
		debugf0("ECC code is on Lockstep mode\n");
		if (MTR_DRAM_WIDTH(mtr))
			p_csrow->edac_mode = EDAC_S8ECD8ED;
		else
			p_csrow->edac_mode = EDAC_S4ECD4ED;
	}

	/* ask what device type on this row */
	if (MTR_DRAM_WIDTH(mtr)) {