Skip to content

Commit

Permalink
ARM: Move platform memory reservations out of generic code
Browse files Browse the repository at this point in the history
Move the platform specific bootmem memory reservations out of
arch/arm/mm/mmu.c into their respective platform files.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed Jul 16, 2010
1 parent b65b478 commit 98c672c
Show file tree
Hide file tree
Showing 16 changed files with 98 additions and 63 deletions.
1 change: 1 addition & 0 deletions arch/arm/include/asm/mach/arch.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ struct machine_desc {
void (*fixup)(struct machine_desc *,
struct tag *, char **,
struct meminfo *);
void (*reserve)(void);/* reserve mem blocks */
void (*map_io)(void);/* IO mapping function */
void (*init_irq)(void);
struct sys_timer *timer; /* system tick timer */
Expand Down
8 changes: 8 additions & 0 deletions arch/arm/mach-clps711x/edb7211-arch.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/init.h>
#include <linux/bootmem.h>
#include <linux/types.h>
#include <linux/string.h>

Expand All @@ -29,6 +30,12 @@

extern void edb7211_map_io(void);

/* Reserve screen memory region at the start of main system memory. */
static void __init edb7211_reserve(void)
{
reserve_bootmem(PHYS_OFFSET, 0x00020000, BOOTMEM_DEFAULT);
}

static void __init
fixup_edb7211(struct machine_desc *desc, struct tag *tags,
char **cmdline, struct meminfo *mi)
Expand All @@ -55,6 +62,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
.boot_params = 0xc0020100, /* 0xc0000000 - 0xc001ffff can be video RAM */
.fixup = fixup_edb7211,
.map_io = edb7211_map_io,
.reserve = edb7211_reserve,
.init_irq = clps711x_init_irq,
.timer = &clps711x_timer,
MACHINE_END
1 change: 1 addition & 0 deletions arch/arm/mach-integrator/common.h
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
void integrator_reserve(void);
12 changes: 12 additions & 0 deletions arch/arm/mach-integrator/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/bootmem.h>
#include <linux/sched.h>
#include <linux/smp.h>
#include <linux/termios.h>
Expand All @@ -30,6 +31,7 @@
#include <asm/system.h>
#include <asm/leds.h>
#include <asm/mach/time.h>
#include <asm/pgtable.h>

static struct amba_pl010_data integrator_uart_data;

Expand Down Expand Up @@ -215,3 +217,13 @@ void cm_control(u32 mask, u32 set)
}

EXPORT_SYMBOL(cm_control);

/*
* We need to stop things allocating the low memory; ideally we need a
* better implementation of GFP_DMA which does not assume that DMA-able
* memory starts at zero.
*/
void __init integrator_reserve(void)
{
reserve_bootmem(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET, BOOTMEM_DEFAULT);
}
3 changes: 3 additions & 0 deletions arch/arm/mach-integrator/integrator_ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@
#include <asm/mach/map.h>
#include <asm/mach/time.h>

#include "common.h"

/*
* All IO addresses are mapped onto VA 0xFFFx.xxxx, where x.xxxx
* is the (PA >> 12).
Expand Down Expand Up @@ -502,6 +504,7 @@ MACHINE_START(INTEGRATOR, "ARM-Integrator")
.io_pg_offst = ((0xf1600000) >> 18) & 0xfffc,
.boot_params = 0x00000100,
.map_io = ap_map_io,
.reserve = integrator_reserve,
.init_irq = ap_init_irq,
.timer = &ap_timer,
.init_machine = ap_init,
Expand Down
3 changes: 3 additions & 0 deletions arch/arm/mach-integrator/integrator_cp.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@

#include <plat/timer-sp.h>

#include "common.h"

#define INTCP_PA_FLASH_BASE 0x24000000
#define INTCP_FLASH_SIZE SZ_32M

Expand Down Expand Up @@ -601,6 +603,7 @@ MACHINE_START(CINTEGRATOR, "ARM-IntegratorCP")
.io_pg_offst = ((0xf1600000) >> 18) & 0xfffc,
.boot_params = 0x00000100,
.map_io = intcp_map_io,
.reserve = integrator_reserve,
.init_irq = intcp_init_irq,
.timer = &cp_timer,
.init_machine = intcp_init,
Expand Down
7 changes: 7 additions & 0 deletions arch/arm/mach-pxa/palmt5.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <linux/irq.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/bootmem.h>
#include <linux/pda_power.h>
#include <linux/pwm_backlight.h>
#include <linux/gpio.h>
Expand Down Expand Up @@ -396,6 +397,11 @@ static void __init palmt5_udc_init(void)
}
}

static void __init palmt5_reserve(void)
{
reserve_bootmem(0xa0200000, 0x1000, BOOTMEM_EXCLUSIVE);
}

static void __init palmt5_init(void)
{
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
Expand All @@ -421,6 +427,7 @@ MACHINE_START(PALMT5, "Palm Tungsten|T5")
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
.boot_params = 0xa0000100,
.map_io = pxa_map_io,
.reserve = palmt5_reserve,
.init_irq = pxa27x_init_irq,
.timer = &pxa_timer,
.init_machine = palmt5_init
Expand Down
9 changes: 9 additions & 0 deletions arch/arm/mach-pxa/palmtreo.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <linux/irq.h>
#include <linux/gpio_keys.h>
#include <linux/input.h>
#include <linux/bootmem.h>
#include <linux/pda_power.h>
#include <linux/pwm_backlight.h>
#include <linux/gpio.h>
Expand Down Expand Up @@ -633,6 +634,12 @@ static void __init treo_lcd_power_init(void)
treo_lcd_screen.pxafb_lcd_power = treo_lcd_power;
}

static void __init treo_reserve(void)
{
reserve_bootmem(0xa0000000, 0x1000, BOOTMEM_EXCLUSIVE);
reserve_bootmem(0xa2000000, 0x1000, BOOTMEM_EXCLUSIVE);
}

static void __init treo_init(void)
{
pxa_set_ffuart_info(NULL);
Expand Down Expand Up @@ -668,6 +675,7 @@ MACHINE_START(TREO680, "Palm Treo 680")
.io_pg_offst = io_p2v(0x40000000),
.boot_params = 0xa0000100,
.map_io = pxa_map_io,
.reserve = treo_reserve,
.init_irq = pxa27x_init_irq,
.timer = &pxa_timer,
.init_machine = treo680_init,
Expand All @@ -691,6 +699,7 @@ MACHINE_START(CENTRO, "Palm Centro 685")
.io_pg_offst = io_p2v(0x40000000),
.boot_params = 0xa0000100,
.map_io = pxa_map_io,
.reserve = treo_reserve,
.init_irq = pxa27x_init_irq,
.timer = &pxa_timer,
.init_machine = centro_init,
Expand Down
9 changes: 9 additions & 0 deletions arch/arm/mach-s3c2410/mach-h1940.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/bootmem.h>
#include <linux/timer.h>
#include <linux/init.h>
#include <linux/sysdev.h>
Expand Down Expand Up @@ -304,6 +305,13 @@ static void __init h1940_map_io(void)
s3c_pm_init();
}

/* H1940 and RX3715 need to reserve this for suspend */
static void __init h1940_reserve(void)
{
reserve_bootmem(0x30003000, 0x1000, BOOTMEM_DEFAULT);
reserve_bootmem(0x30081000, 0x1000, BOOTMEM_DEFAULT);
}

static void __init h1940_init_irq(void)
{
s3c24xx_init_irq();
Expand Down Expand Up @@ -346,6 +354,7 @@ MACHINE_START(H1940, "IPAQ-H1940")
.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.map_io = h1940_map_io,
.reserve = h1940_reserve,
.init_irq = h1940_init_irq,
.init_machine = h1940_init,
.timer = &s3c24xx_timer,
Expand Down
9 changes: 9 additions & 0 deletions arch/arm/mach-s3c2440/mach-rx1950.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/bootmem.h>
#include <linux/delay.h>
#include <linux/timer.h>
#include <linux/init.h>
Expand Down Expand Up @@ -570,12 +571,20 @@ static void __init rx1950_init_machine(void)
platform_add_devices(rx1950_devices, ARRAY_SIZE(rx1950_devices));
}

/* H1940 and RX3715 need to reserve this for suspend */
static void __init rx1950_reserve(void)
{
reserve_bootmem(0x30003000, 0x1000, BOOTMEM_DEFAULT);
reserve_bootmem(0x30081000, 0x1000, BOOTMEM_DEFAULT);
}

MACHINE_START(RX1950, "HP iPAQ RX1950")
/* Maintainers: Vasily Khoruzhick */
.phys_io = S3C2410_PA_UART,
.io_pg_offst = (((u32) S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.map_io = rx1950_map_io,
.reserve = rx1950_reserve,
.init_irq = s3c24xx_init_irq,
.init_machine = rx1950_init_machine,
.timer = &s3c24xx_timer,
Expand Down
9 changes: 9 additions & 0 deletions arch/arm/mach-s3c2440/mach-rx3715.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/bootmem.h>
#include <linux/timer.h>
#include <linux/init.h>
#include <linux/tty.h>
Expand Down Expand Up @@ -191,6 +192,13 @@ static void __init rx3715_map_io(void)
s3c24xx_init_uarts(rx3715_uartcfgs, ARRAY_SIZE(rx3715_uartcfgs));
}

/* H1940 and RX3715 need to reserve this for suspend */
static void __init rx3715_reserve(void)
{
reserve_bootmem(0x30003000, 0x1000, BOOTMEM_DEFAULT);
reserve_bootmem(0x30081000, 0x1000, BOOTMEM_DEFAULT);
}

static void __init rx3715_init_irq(void)
{
s3c24xx_init_irq();
Expand All @@ -214,6 +222,7 @@ MACHINE_START(RX3715, "IPAQ-RX3715")
.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
.boot_params = S3C2410_SDRAM_PA + 0x100,
.map_io = rx3715_map_io,
.reserve = rx3715_reserve,
.init_irq = rx3715_init_irq,
.init_machine = rx3715_init_machine,
.timer = &s3c24xx_timer,
Expand Down
17 changes: 17 additions & 0 deletions arch/arm/mach-u300/u300.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/bootmem.h>
#include <linux/platform_device.h>
#include <linux/io.h>
#include <mach/hardware.h>
Expand All @@ -22,6 +23,21 @@
#include <asm/mach-types.h>
#include <asm/mach/arch.h>

static void __init u300_reserve(void)
{
/*
* U300 - This platform family can share physical memory
* between two ARM cpus, one running Linux and the other
* running another OS.
*/
#ifdef CONFIG_MACH_U300_SINGLE_RAM
#if ((CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1) == 1) && \
CONFIG_MACH_U300_2MB_ALIGNMENT_FIX
reserve_bootmem(PHYS_OFFSET, 0x00100000, BOOTMEM_DEFAULT);
#endif
#endif
}

static void __init u300_init_machine(void)
{
u300_init_devices();
Expand Down Expand Up @@ -49,6 +65,7 @@ MACHINE_START(U300, MACH_U300_STRING)
.io_pg_offst = ((U300_AHB_PER_VIRT_BASE) >> 18) & 0xfffc,
.boot_params = BOOT_PARAMS_OFFSET,
.map_io = u300_map_io,
.reserve = u300_reserve,
.init_irq = u300_init_irq,
.timer = &u300_timer,
.init_machine = u300_init_machine,
Expand Down
5 changes: 4 additions & 1 deletion arch/arm/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ static void arm_memory_present(struct meminfo *mi)
}
#endif

void __init bootmem_init(void)
void __init bootmem_init(struct machine_desc *mdesc)
{
struct meminfo *mi = &meminfo;
unsigned long min, max_low, max_high;
Expand All @@ -380,6 +380,9 @@ void __init bootmem_init(void)
*/
reserve_special_regions();

if (mdesc->reserve)
mdesc->reserve();

/*
* If the initrd is present, reserve its memory.
*/
Expand Down
3 changes: 2 additions & 1 deletion arch/arm/mm/mm.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,6 @@ extern void __flush_dcache_page(struct address_space *mapping, struct page *page

#endif

void __init bootmem_init(void);
struct machine_desc;
void __init bootmem_init(struct machine_desc *);
void reserve_special_regions(void);
Loading

0 comments on commit 98c672c

Please sign in to comment.