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

Commit 3a551e25 authored by Paul Burton's avatar Paul Burton Committed by Ralf Baechle
Browse files

MIPS: Malta: initialise MAARs



Initialise the MAARs such that speculation is enabled for all physical
addresses outside of the I/O region.

Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/7333/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent ab9988a3
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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);
}