summaryrefslogtreecommitdiff
path: root/os/cerf405/tlb.s
diff options
context:
space:
mode:
Diffstat (limited to 'os/cerf405/tlb.s')
-rw-r--r--os/cerf405/tlb.s30
1 files changed, 30 insertions, 0 deletions
diff --git a/os/cerf405/tlb.s b/os/cerf405/tlb.s
new file mode 100644
index 00000000..98abd3fd
--- /dev/null
+++ b/os/cerf405/tlb.s
@@ -0,0 +1,30 @@
+#include "mem.h"
+#define MB (1024*1024)
+
+/*
+ * TLB prototype entries, loaded once-for-all at startup,
+ * remaining unchanged thereafter.
+ * Limit the table size to ensure it fits in small TLBs.
+ */
+#define TLBE(hi, lo) WORD $(hi); WORD $(lo)
+
+TEXT tlbtab(SB), $-4
+
+ /* tlbhi tlblo */
+
+ /* DRAM, 32MB */
+ TLBE(KZERO|PHYSDRAM|TLB16MB|TLBVALID, PHYSDRAM|TLBZONE(0)|TLBWR|TLBEX)
+ TLBE(KZERO|(PHYSDRAM+16*MB)|TLB16MB|TLBVALID, (PHYSDRAM+16*MB)|TLBZONE(0)|TLBWR|TLBEX)
+
+ /* memory-mapped IO, 4K */
+ TLBE(PHYSMMIO|TLB4K|TLBVALID, PHYSMMIO|TLBZONE(0)|TLBWR|TLBI|TLBG)
+
+ /* NAND flash access (4K?) */
+ TLBE(PHYSNAND|TLB4K|TLBVALID, PHYSNAND|TLBZONE(0)|TLBWR|TLBI|TLBG)
+
+ /* NOR flash, 2MB */
+ TLBE(PHYSFLASH|TLB1MB|TLBVALID, PHYSFLASH|TLBZONE(0)|TLBWR|TLBEX)
+ TLBE((PHYSFLASH+MB)|TLB1MB|TLBVALID, (PHYSFLASH+MB)|TLBZONE(0)|TLBWR|TLBEX)
+
+TEXT tlbtabe(SB), $-4
+ RETURN