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

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

MIPS: mm: default platform_maar_init using bootmem data



Introduce a default weak implementation of platform_maar_init which
makes use of the data that platforms already provide to the bootmem
allocator. This should hopefully cover the most common configurations,
reduce the duplication of information provided by platforms & leaves
platforms with the option of providing a custom implementation if
required.

Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Steven J. Hill <Steven.Hill@imgtec.com>
Cc: linux-kernel@vger.kernel.org
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Patchwork: https://patchwork.linux-mips.org/patch/10676/


Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent e4aa1f15
Loading
Loading
Loading
Loading
+34 −2
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <asm/cpu.h>
#include <asm/dma.h>
#include <asm/kmap_types.h>
#include <asm/maar.h>
#include <asm/mmu_context.h>
#include <asm/sections.h>
#include <asm/pgtable.h>
@@ -333,9 +334,40 @@ static inline void mem_init_free_highmem(void)
#endif
}

unsigned __weak platform_maar_init(unsigned num_maars)
unsigned __weak platform_maar_init(unsigned num_pairs)
{
	return 0;
	struct maar_config cfg[BOOT_MEM_MAP_MAX];
	unsigned i, num_configured, num_cfg = 0;
	phys_addr_t skip;

	for (i = 0; i < boot_mem_map.nr_map; i++) {
		switch (boot_mem_map.map[i].type) {
		case BOOT_MEM_RAM:
		case BOOT_MEM_INIT_RAM:
			break;
		default:
			continue;
		}

		skip = 0x10000 - (boot_mem_map.map[i].addr & 0xffff);

		cfg[num_cfg].lower = boot_mem_map.map[i].addr;
		cfg[num_cfg].lower += skip;

		cfg[num_cfg].upper = cfg[num_cfg].lower;
		cfg[num_cfg].upper += boot_mem_map.map[i].size - 1;
		cfg[num_cfg].upper -= skip;

		cfg[num_cfg].attrs = MIPS_MAAR_S;
		num_cfg++;
	}

	num_configured = maar_config(cfg, num_cfg, num_pairs);
	if (num_configured < num_cfg)
		pr_warn("Not enough MAAR pairs (%u) for all bootmem regions (%u)\n",
			num_pairs, num_cfg);

	return num_configured;
}

static void maar_init(void)