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

Commit 19d8f84f authored by Paul Mundt's avatar Paul Mundt
Browse files

sh: enable LMB region setup via machvec.



This plugs in a memory init callback in the machvec to permit boards to
wire up various bits of memory directly in to LMB. A generic machvec
implementation is provided that simply wraps around the normal
Kconfig-derived memory start/size.

Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 080e71e1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -38,5 +38,6 @@ void IO_CONCAT(__IO_PREFIX,iounmap)(void *addr);

void __iomem *IO_CONCAT(__IO_PREFIX,ioport_map)(unsigned long addr, unsigned int size);
void IO_CONCAT(__IO_PREFIX,ioport_unmap)(void __iomem *addr);
void IO_CONCAT(__IO_PREFIX,mem_init)(void);

#undef __IO_PREFIX
+2 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ struct sh_machine_vector {

	int (*mv_clk_init)(void);
	int (*mv_mode_pins)(void);

	void (*mv_mem_init)(void);
};

extern struct sh_machine_vector sh_mv;
+0 −1
Original line number Diff line number Diff line
@@ -42,7 +42,6 @@ setup_bootmem_node(int nid, unsigned long start, unsigned long end)
void __init plat_mem_setup(void);

/* arch/sh/kernel/setup.c */
void __init setup_bootmem_allocator(unsigned long start_pfn);
void __init __add_active_range(unsigned int nid, unsigned long start_pfn,
			       unsigned long end_pfn);

+1 −0
Original line number Diff line number Diff line
@@ -131,6 +131,7 @@ void __init sh_mv_setup(void)
	mv_set(ioport_unmap);
	mv_set(irq_demux);
	mv_set(mode_pins);
	mv_set(mem_init);

	if (!sh_mv.mv_nr_irqs)
		sh_mv.mv_nr_irqs = NR_IRQS;
+13 −13
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
 * This file handles the architecture-dependent parts of initialization
 *
 *  Copyright (C) 1999  Niibe Yutaka
 *  Copyright (C) 2002 - 2007 Paul Mundt
 *  Copyright (C) 2002 - 2010 Paul Mundt
 */
#include <linux/screen_info.h>
#include <linux/ioport.h>
@@ -41,6 +41,7 @@
#include <asm/clock.h>
#include <asm/smp.h>
#include <asm/mmu_context.h>
#include <asm/mmzone.h>

/*
 * Initialize loops_per_jiffy as 10000000 (1000MIPS).
@@ -247,7 +248,7 @@ void __init __add_active_range(unsigned int nid, unsigned long start_pfn,
	add_active_range(nid, start_pfn, end_pfn);
}

void __init setup_bootmem_allocator(unsigned long free_pfn)
void __init do_init_bootmem(void)
{
	unsigned long bootmap_size;
	unsigned long bootmap_pages, bootmem_paddr;
@@ -298,12 +299,9 @@ void __init setup_bootmem_allocator(unsigned long free_pfn)
	sparse_memory_present_with_active_regions(0);
}

#ifndef CONFIG_NEED_MULTIPLE_NODES
static void __init setup_memory(void)
{
	unsigned long start_pfn;
	u64 base = min_low_pfn << PAGE_SHIFT;
	u64 size = (max_low_pfn << PAGE_SHIFT) - base;

	/*
	 * Partially used pages are not usable - thus
@@ -311,8 +309,6 @@ static void __init setup_memory(void)
	 */
	start_pfn = PFN_UP(__pa(_end));

	lmb_add(base, size);

	/*
	 * Reserve the kernel text and
	 * Reserve the bootmem bitmap. We do this in two steps (first step
@@ -333,11 +329,9 @@ static void __init setup_memory(void)
	lmb_analyze();
	lmb_dump_all();

	setup_bootmem_allocator(start_pfn);
	do_init_bootmem();
	plat_mem_setup();
}
#else
extern void __init setup_memory(void);
#endif

/*
 * Note: elfcorehdr_addr is not just limited to vmcore. It is also used by
@@ -358,7 +352,11 @@ static int __init parse_elfcorehdr(char *arg)
early_param("elfcorehdr", parse_elfcorehdr);
#endif

void __init __attribute__ ((weak)) plat_early_device_setup(void)
void __init __weak plat_early_device_setup(void)
{
}

void __init __weak plat_mem_setup(void)
{
}

@@ -426,7 +424,10 @@ void __init setup_arch(char **cmdline_p)
	/* Let earlyprintk output early console messages */
	early_platform_driver_probe("earlyprintk", 1, 1);

	lmb_init();

	sh_mv_setup();
	sh_mv.mv_mem_init();

	/*
	 * Find the highest page frame number we have available
@@ -442,7 +443,6 @@ void __init setup_arch(char **cmdline_p)
	nodes_clear(node_online_map);

	pmb_init();
	lmb_init();
	setup_memory();
	sparse_init();

Loading