summaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/segment.c
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2016-07-27 16:07:54 +0100
committerRalf Baechle <ralf@linux-mips.org>2016-07-28 11:44:30 +0200
commit5573f6ad3efe3a247589b5fc468d8647b16f0952 (patch)
tree80bb16b0a91c8ea0f995c8e5410b053edbf21e5a /arch/mips/kernel/segment.c
parent2f8f8c04e8c72b38a0ecdd814b02c0fddc42b932 (diff)
downloadlinux-5573f6ad3efe3a247589b5fc468d8647b16f0952.tar.gz
linux-5573f6ad3efe3a247589b5fc468d8647b16f0952.tar.bz2
linux-5573f6ad3efe3a247589b5fc468d8647b16f0952.zip
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: James Hogan <james.hogan@imgtec.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/13833/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/segment.c')
-rw-r--r--arch/mips/kernel/segment.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/mips/kernel/segment.c b/arch/mips/kernel/segment.c
index 87bc74a5a518..2703f218202e 100644
--- a/arch/mips/kernel/segment.c
+++ b/arch/mips/kernel/segment.c
@@ -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",