From a72fd73912afa89876143d4d527f469a54c830b9 Mon Sep 17 00:00:00 2001 From: kfx Date: Mon, 6 Feb 2012 13:21:51 +0800 Subject: [PATCH] memory reserve: Initial Code --- arch/arm/mach-rk30/board-rk30-sdk.c | 5 +++++ arch/arm/plat-rk/Makefile | 1 + arch/arm/plat-rk/include/plat/board.h | 7 +++++++ arch/arm/plat-rk/mem_reserve.c | 30 +++++++++++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 arch/arm/plat-rk/mem_reserve.c diff --git a/arch/arm/mach-rk30/board-rk30-sdk.c b/arch/arm/mach-rk30/board-rk30-sdk.c index 7d5bf2d660fb..4a68cf2db4c2 100644 --- a/arch/arm/mach-rk30/board-rk30-sdk.c +++ b/arch/arm/mach-rk30/board-rk30-sdk.c @@ -35,10 +35,15 @@ #include #include +static void __init rk30_reserve(void) +{ + board_mem_reserved(); +} MACHINE_START(RK30, "RK30board") .boot_params = PLAT_PHYS_OFFSET + 0x800, .fixup = rk30_fixup, .map_io = rk30_map_io, .init_irq = rk30_init_irq, .timer = &rk30_timer, + .reserve = &rk30_reserve, MACHINE_END diff --git a/arch/arm/plat-rk/Makefile b/arch/arm/plat-rk/Makefile index dbbac6279b61..b7e7502ac913 100644 --- a/arch/arm/plat-rk/Makefile +++ b/arch/arm/plat-rk/Makefile @@ -1,3 +1,4 @@ obj-$(CONFIG_RK29_LAST_LOG) += last_log.o obj-$(CONFIG_USB_GADGET) += usb_detect.o obj-$(CONFIG_RK29_VPU) += vpu_service.o +obj-y += mem_reserve.o diff --git a/arch/arm/plat-rk/include/plat/board.h b/arch/arm/plat-rk/include/plat/board.h index 21014f6ecaab..8729fde11879 100644 --- a/arch/arm/plat-rk/include/plat/board.h +++ b/arch/arm/plat-rk/include/plat/board.h @@ -1,5 +1,7 @@ #ifndef __PLAT_BOARD_H #define __PLAT_BOARD_H +#include +#include #define BOOT_MODE_NORMAL 0 #define BOOT_MODE_FACTORY2 1 @@ -21,4 +23,9 @@ static int inline board_usb_detect_init(unsigned gpio) { return 0; } /* for wakeup Android */ void rk28_send_wakeup_key(void); +/* for reserved memory + * function: board_mem_reserve_add + * return value: start address of reserved memory */ +phys_addr_t __init board_mem_reserve_add(char *name, size_t size); +void __init board_mem_reserved(void); #endif diff --git a/arch/arm/plat-rk/mem_reserve.c b/arch/arm/plat-rk/mem_reserve.c new file mode 100644 index 000000000000..c022ae6afca5 --- /dev/null +++ b/arch/arm/plat-rk/mem_reserve.c @@ -0,0 +1,30 @@ +#include +#include +#include + +static size_t reserved_size = 0; +static phys_addr_t reserved_base_end = 0; + +phys_addr_t __init board_mem_reserve_add(char *name, size_t size) +{ + phys_addr_t base = 0; + + if(reserved_base_end == 0) + reserved_base_end = meminfo.bank[0].start + meminfo.bank[0].size; + + reserved_size += size; + base = reserved_base_end - reserved_size; + pr_info("memory reserve: Memory(base:0x%x size:%dM) reserved for <%s>\n", + base, size/SZ_1M, name); + return base; +} + +void __init board_mem_reserved(void) +{ + phys_addr_t base = reserved_base_end - reserved_size; + + if(reserved_size){ + memblock_remove(base, reserved_size); + pr_info("memory reserve: Total reserved %dM\n", reserved_size/SZ_1M); + } +} -- 2.34.1