[OpenBIOS] [PATCH 9/9] SPARC64: ensure the E (effect) bit is set for PROM TTE entries
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Sun Oct 23 16:22:44 CEST 2016
Milax (OpenSolaris) checks to see if this is the case, and panics on boot
if the E bit isn't set for PROM mappings.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
---
arch/sparc64/entry.S | 6 +++---
arch/sparc64/ofmem_sparc64.c | 2 +-
arch/sparc64/spitfire.h | 1 +
3 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/sparc64/entry.S b/arch/sparc64/entry.S
index 47d1139..224a53b 100644
--- a/arch/sparc64/entry.S
+++ b/arch/sparc64/entry.S
@@ -148,7 +148,7 @@ entry:
srlx %g5, 19, %g6 ! %g6 = # of 512k .bss pages
set 0xc0000000, %g3
sllx %g3, 32, %g3
- or %g3, 0x76, %g3
+ or %g3, 0x7e, %g3
! valid, 512k, locked, cacheable(I/E/C), priv, writable
set 48, %g7
1: stxa %g4, [%g7] ASI_DMMU ! vaddr = _data + N * 0x80000, ctx=0
@@ -173,7 +173,7 @@ entry:
1: stxa %g4, [%g7] ASI_DMMU ! vaddr = _rodata, ctx=0
set 0xc0000000, %g3
sllx %g3, 32, %g3
- or %g3, 0x74, %g3
+ or %g3, 0x7c, %g3
or %l2, %g3, %g3
! valid, 512k, locked, cacheable(I/E/C), priv
! paddr = _rodata + N * 0x10000
@@ -197,7 +197,7 @@ entry:
1: stxa %g4, [%g7] ASI_IMMU ! vaddr = _start, ctx=0
set 0xc0000000, %g3
sllx %g3, 32, %g3
- or %g3, 0x74, %g3
+ or %g3, 0x7c, %g3
or %l2, %g3, %g3
! valid, 512k, locked, cacheable(I/E/C), priv
! paddr = _start + N * 0x80000
diff --git a/arch/sparc64/ofmem_sparc64.c b/arch/sparc64/ofmem_sparc64.c
index ba4a053..06a16b1 100644
--- a/arch/sparc64/ofmem_sparc64.c
+++ b/arch/sparc64/ofmem_sparc64.c
@@ -215,7 +215,7 @@ ucell ofmem_arch_default_translation_mode( phys_addr_t phys )
ucell ofmem_arch_io_translation_mode( phys_addr_t phys )
{
/* Writable, privileged and not locked */
- return SPITFIRE_TTE_CV | SPITFIRE_TTE_WRITABLE | SPITFIRE_TTE_PRIVILEGED;
+ return SPITFIRE_TTE_CV | SPITFIRE_TTE_WRITABLE | SPITFIRE_TTE_PRIVILEGED | SPITFIRE_TTE_EFFECT;
}
/* Architecture-specific OFMEM helpers */
diff --git a/arch/sparc64/spitfire.h b/arch/sparc64/spitfire.h
index 4a951b1..15dc378 100644
--- a/arch/sparc64/spitfire.h
+++ b/arch/sparc64/spitfire.h
@@ -38,6 +38,7 @@
/* translation table entry bits */
#define SPITFIRE_TTE_WRITABLE 0x02
#define SPITFIRE_TTE_PRIVILEGED 0x04
+#define SPITFIRE_TTE_EFFECT 0x08
#define SPITFIRE_TTE_CV 0x10
#define SPITFIRE_TTE_CP 0x20
#define SPITFIRE_TTE_LOCKED 0x40
--
1.7.10.4
More information about the OpenBIOS
mailing list