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

Commit 5573f6ad authored by James Hogan's avatar James Hogan Committed by Ralf Baechle
Browse files

MIPS: Print segment physical address when EU=1



Currently the debugfs interface to print the segment configuration
refuses to print the physical address of mapped segments. However if the
EU bit is set these become unmapped at error level (when
CP0_Status.ERL=1), so the physical address is still relevant.

Update the logic to print the physical address of mapped segments when
the EU bit is set, while still hiding the Cache Coherency Attribute
(since EU overrides that to uncached when ERL=1 too).

Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/13833/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 2f8f8c04
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -26,17 +26,20 @@ static void build_segment_config(char *str, unsigned int cfg)

	/*
	 * Access modes MK, MSK and MUSK are mapped segments. Therefore
	 * there is no direct physical address mapping.
	 * there is no direct physical address mapping unless it becomes
	 * unmapped uncached at error level due to EU.
	 */
	if ((am == 0) || (am > 3)) {
	if ((am == 0) || (am > 3) || (cfg & MIPS_SEGCFG_EU))
		str += sprintf(str, "         %03lx",
			((cfg & MIPS_SEGCFG_PA) >> MIPS_SEGCFG_PA_SHIFT));
	else
		str += sprintf(str, "         UND");

	if ((am == 0) || (am > 3))
		str += sprintf(str, "         %01ld",
			((cfg & MIPS_SEGCFG_C) >> MIPS_SEGCFG_C_SHIFT));
	} else {
		str += sprintf(str, "         UND");
	else
		str += sprintf(str, "         U");
	}

	/* Exception configuration. */
	str += sprintf(str, "       %01ld\n",