]> git.karo-electronics.de Git - linux-beck.git/commitdiff
MIPS: Malta: initialise MAARs
authorPaul Burton <paul.burton@imgtec.com>
Mon, 14 Jul 2014 11:37:39 +0000 (12:37 +0100)
committerRalf Baechle <ralf@linux-mips.org>
Fri, 1 Aug 2014 22:06:46 +0000 (00:06 +0200)
Initialise the MAARs such that speculation is enabled for all physical
addresses outside of the I/O region.

Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/7333/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/mti-malta/malta-memory.c

index 6d977309675025a01ab5d798d77bc8c3d63fd7de..0c35dee0a2150b4ca284a03dd3637cad6eb77b86 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/string.h>
 
 #include <asm/bootinfo.h>
+#include <asm/maar.h>
 #include <asm/sections.h>
 #include <asm/fw/fw.h>
 
@@ -164,3 +165,28 @@ void __init prom_free_prom_memory(void)
                                addr, addr + boot_mem_map.map[i].size);
        }
 }
+
+unsigned platform_maar_init(unsigned num_pairs)
+{
+       phys_addr_t mem_end = (physical_memsize & ~0xffffull) - 1;
+       struct maar_config cfg[] = {
+               /* DRAM preceding I/O */
+               { 0x00000000, 0x0fffffff, MIPS_MAAR_S },
+
+               /* DRAM following I/O */
+               { 0x20000000, mem_end, MIPS_MAAR_S },
+
+               /* DRAM alias in upper half of physical */
+               { 0x80000000, 0x80000000 + mem_end, MIPS_MAAR_S },
+       };
+       unsigned i, num_cfg = ARRAY_SIZE(cfg);
+
+       /* If DRAM fits before I/O, drop the region following it */
+       if (physical_memsize <= 0x10000000) {
+               num_cfg--;
+               for (i = 1; i < num_cfg; i++)
+                       cfg[i] = cfg[i + 1];
+       }
+
+       return maar_config(cfg, num_cfg, num_pairs);
+}