mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 13:22:55 +00:00
ARM: Move platform memory reservations out of generic code
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>
This commit is contained in:
parent
b65b4781fb
commit
98c672cf1f
@ -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 */
|
||||
|
@ -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>
|
||||
|
||||
@ -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)
|
||||
@ -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
arch/arm/mach-integrator/common.h
Normal file
1
arch/arm/mach-integrator/common.h
Normal file
@ -0,0 +1 @@
|
||||
void integrator_reserve(void);
|
@ -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>
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
@ -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).
|
||||
@ -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,
|
||||
|
@ -43,6 +43,8 @@
|
||||
|
||||
#include <plat/timer-sp.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define INTCP_PA_FLASH_BASE 0x24000000
|
||||
#define INTCP_FLASH_SIZE SZ_32M
|
||||
|
||||
@ -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,
|
||||
|
@ -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>
|
||||
@ -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));
|
||||
@ -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
|
||||
|
@ -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>
|
||||
@ -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);
|
||||
@ -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,
|
||||
@ -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,
|
||||
|
@ -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>
|
||||
@ -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();
|
||||
@ -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,
|
||||
|
@ -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>
|
||||
@ -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,
|
||||
|
@ -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>
|
||||
@ -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();
|
||||
@ -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,
|
||||
|
@ -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>
|
||||
@ -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();
|
||||
@ -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,
|
||||
|
@ -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;
|
||||
@ -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.
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/sort.h>
|
||||
|
||||
#include <asm/cputype.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/cachetype.h>
|
||||
#include <asm/setup.h>
|
||||
@ -831,8 +830,6 @@ static inline void prepare_page_table(void)
|
||||
*/
|
||||
void __init reserve_special_regions(void)
|
||||
{
|
||||
unsigned long res_size = 0;
|
||||
|
||||
/*
|
||||
* Register the kernel text and data with bootmem.
|
||||
* Note that this can only be in node 0.
|
||||
@ -850,68 +847,14 @@ void __init reserve_special_regions(void)
|
||||
reserve_bootmem(__pa(swapper_pg_dir),
|
||||
PTRS_PER_PGD * sizeof(pgd_t), BOOTMEM_DEFAULT);
|
||||
|
||||
/*
|
||||
* Hmm... This should go elsewhere, but we really really 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.
|
||||
*/
|
||||
if (machine_is_integrator() || machine_is_cintegrator())
|
||||
res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
|
||||
|
||||
/*
|
||||
* These should likewise go elsewhere. They pre-reserve the
|
||||
* screen memory region at the start of main system memory.
|
||||
*/
|
||||
if (machine_is_edb7211())
|
||||
res_size = 0x00020000;
|
||||
if (machine_is_p720t())
|
||||
res_size = 0x00014000;
|
||||
|
||||
/* H1940, RX3715 and RX1950 need to reserve this for suspend */
|
||||
|
||||
if (machine_is_h1940() || machine_is_rx3715()
|
||||
|| machine_is_rx1950()) {
|
||||
reserve_bootmem(0x30003000, 0x1000, BOOTMEM_DEFAULT);
|
||||
reserve_bootmem(0x30081000, 0x1000, BOOTMEM_DEFAULT);
|
||||
}
|
||||
|
||||
if (machine_is_palmld() || machine_is_palmtx()) {
|
||||
reserve_bootmem(0xa0000000, 0x1000, BOOTMEM_EXCLUSIVE);
|
||||
reserve_bootmem(0xa0200000, 0x1000, BOOTMEM_EXCLUSIVE);
|
||||
}
|
||||
|
||||
if (machine_is_treo680() || machine_is_centro()) {
|
||||
reserve_bootmem(0xa0000000, 0x1000, BOOTMEM_EXCLUSIVE);
|
||||
reserve_bootmem(0xa2000000, 0x1000, BOOTMEM_EXCLUSIVE);
|
||||
}
|
||||
|
||||
if (machine_is_palmt5())
|
||||
reserve_bootmem(0xa0200000, 0x1000, BOOTMEM_EXCLUSIVE);
|
||||
|
||||
/*
|
||||
* U300 - This platform family can share physical memory
|
||||
* between two ARM cpus, one running Linux and the other
|
||||
* running another OS.
|
||||
*/
|
||||
if (machine_is_u300()) {
|
||||
#ifdef CONFIG_MACH_U300_SINGLE_RAM
|
||||
#if ((CONFIG_MACH_U300_ACCESS_MEM_SIZE & 1) == 1) && \
|
||||
CONFIG_MACH_U300_2MB_ALIGNMENT_FIX
|
||||
res_size = 0x00100000;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SA1111
|
||||
/*
|
||||
* Because of the SA1111 DMA bug, we want to preserve our
|
||||
* precious DMA-able memory...
|
||||
*/
|
||||
res_size = __pa(swapper_pg_dir) - PHYS_OFFSET;
|
||||
reserve_bootmem(PHYS_OFFSET, __pa(swapper_pg_dir) - PHYS_OFFSET,
|
||||
BOOTMEM_DEFAULT);
|
||||
#endif
|
||||
if (res_size)
|
||||
reserve_bootmem(PHYS_OFFSET, res_size, BOOTMEM_DEFAULT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1056,7 +999,7 @@ void __init paging_init(struct machine_desc *mdesc)
|
||||
sanity_check_meminfo();
|
||||
prepare_page_table();
|
||||
map_lowmem();
|
||||
bootmem_init();
|
||||
bootmem_init(mdesc);
|
||||
devicemaps_init(mdesc);
|
||||
kmap_init();
|
||||
|
||||
|
@ -46,7 +46,7 @@ void __init reserve_special_regions(void)
|
||||
*/
|
||||
void __init paging_init(struct machine_desc *mdesc)
|
||||
{
|
||||
bootmem_init();
|
||||
bootmem_init(mdesc);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user