From deef916d9c6dfe0a1c88312b8f59943b109d5208 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Fri, 23 Sep 2011 11:00:51 +0200 Subject: ARM: switch to generic memory banks Signed-off-by: Sascha Hauer --- arch/arm/cpu/cpu.c | 13 ------------- arch/arm/cpu/mmu.c | 23 ++++++++++++----------- arch/arm/include/asm/armlinux.h | 3 --- arch/arm/include/asm/memory.h | 17 ++++++----------- arch/arm/lib/armlinux.c | 10 +++++----- arch/arm/lib/bootz.c | 13 +++++++------ drivers/base/resource.c | 15 --------------- 7 files changed, 30 insertions(+), 64 deletions(-) diff --git a/arch/arm/cpu/cpu.c b/arch/arm/cpu/cpu.c index 3df0c0f647..d4a3b14819 100644 --- a/arch/arm/cpu/cpu.c +++ b/arch/arm/cpu/cpu.c @@ -90,19 +90,6 @@ void arch_shutdown(void) #endif } -LIST_HEAD(memory_list); - -void armlinux_add_dram(struct device_d *dev) -{ - struct arm_memory *mem = xzalloc(sizeof(*mem)); - - mem->dev = dev; - mem->start = dev->resource[0].start; - mem->size = dev->resource[0].size; - - list_add_tail(&mem->list, &memory_list); -} - /** * @page arm_boot_preparation Linux Preparation on ARM * diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index 6fa600ff84..4446813d0a 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -5,6 +5,7 @@ #include #include #include +#include static unsigned long *ttb; @@ -114,23 +115,23 @@ static void remap_range(void *_start, size_t size, uint32_t flags) * remap the memory bank described by mem cachable and * bufferable */ -static int arm_mmu_remap_sdram(struct arm_memory *mem) +static int arm_mmu_remap_sdram(struct memory_bank *bank) { - unsigned long phys = (unsigned long)mem->start; + unsigned long phys = (unsigned long)bank->start; unsigned long ttb_start = phys >> 20; - unsigned long ttb_end = (phys + mem->size) >> 20; - unsigned long num_ptes = mem->size >> 10; + unsigned long ttb_end = (phys + bank->size) >> 20; + unsigned long num_ptes = bank->size >> 10; int i, pte; u32 *ptes; debug("remapping SDRAM from 0x%08lx (size 0x%08lx)\n", - phys, mem->size); + phys, bank->size); /* * We replace each 1MiB section in this range with second level page * tables, therefore we must have 1Mib aligment here. */ - if ((phys & (SZ_1M - 1)) || (mem->size & (SZ_1M - 1))) + if ((phys & (SZ_1M - 1)) || (bank->size & (SZ_1M - 1))) return -EINVAL; ptes = memalign(0x400, num_ptes * sizeof(u32)); @@ -210,7 +211,7 @@ static void vectors_init(void) */ static int mmu_init(void) { - struct arm_memory *mem; + struct memory_bank *bank; int i; ttb = memalign(0x10000, 0x4000); @@ -235,8 +236,8 @@ static int mmu_init(void) * This is to speed up the generation of 2nd level page tables * below */ - for_each_sdram_bank(mem) - create_section(mem->start, mem->start, mem->size >> 20, + for_each_memory_bank(bank) + create_section(bank->start, bank->start, bank->size >> 20, PMD_SECT_DEF_CACHED); asm volatile ( @@ -250,8 +251,8 @@ static int mmu_init(void) * Now that we have the MMU and caches on remap sdram again using * page tables */ - for_each_sdram_bank(mem) - arm_mmu_remap_sdram(mem); + for_each_memory_bank(bank) + arm_mmu_remap_sdram(bank); return 0; } diff --git a/arch/arm/include/asm/armlinux.h b/arch/arm/include/asm/armlinux.h index bb25f9a87d..ba3a424e26 100644 --- a/arch/arm/include/asm/armlinux.h +++ b/arch/arm/include/asm/armlinux.h @@ -31,7 +31,4 @@ struct image_data; void start_linux(void *adr, int swap, struct image_data *data); -struct device_d *arm_add_mem_device(const char* name, resource_size_t start, - resource_size_t size); - #endif /* __ARCH_ARMLINUX_H */ diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index 0729886b82..28afaa39e4 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h @@ -1,17 +1,12 @@ #ifndef __ASM_ARM_MEMORY_H #define __ASM_ARM_MEMORY_H -struct arm_memory { - struct list_head list; - struct device_d *dev; - unsigned long start; - unsigned long size; -}; +#include -extern struct list_head memory_list; - -void armlinux_add_dram(struct device_d *dev); - -#define for_each_sdram_bank(mem) list_for_each_entry(mem, &memory_list, list) +static inline void arm_add_mem_device(const char* name, resource_size_t start, + resource_size_t size) +{ + barebox_add_memory_bank(name, start, size); +} #endif /* __ASM_ARM_MEMORY_H */ diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c index 25b0f2afa4..e3a74f4ffb 100644 --- a/arch/arm/lib/armlinux.c +++ b/arch/arm/lib/armlinux.c @@ -35,13 +35,13 @@ #include #include #include +#include #include #include #include #include #include -#include static struct tag *params; static int armlinux_architecture = 0; @@ -66,14 +66,14 @@ static void setup_start_tag(void) static void setup_memory_tags(void) { - struct arm_memory *mem; + struct memory_bank *bank; - for_each_sdram_bank(mem) { + for_each_memory_bank(bank) { params->hdr.tag = ATAG_MEM; params->hdr.size = tag_size(tag_mem32); - params->u.mem.start = mem->dev->resource[0].start; - params->u.mem.size = mem->dev->resource[0].size; + params->u.mem.start = bank->start; + params->u.mem.size = bank->size; params = tag_next(params); } diff --git a/arch/arm/lib/bootz.c b/arch/arm/lib/bootz.c index 13bed25aeb..fc14487bfa 100644 --- a/arch/arm/lib/bootz.c +++ b/arch/arm/lib/bootz.c @@ -9,6 +9,7 @@ #include #include #include +#include struct zimage_header { u32 unused[9]; @@ -26,7 +27,7 @@ static int do_bootz(struct command *cmdtp, int argc, char *argv[]) void *zimage; u32 end; int usemap = 0; - struct arm_memory *mem = list_first_entry(&memory_list, struct arm_memory, list); + struct memory_bank *bank = list_first_entry(&memory_banks, struct memory_bank, list); if (argc != 2) { barebox_cmd_usage(cmdtp); @@ -44,8 +45,8 @@ static int do_bootz(struct command *cmdtp, int argc, char *argv[]) * the first 128MB of SDRAM. */ zimage = memmap(fd, PROT_READ); - if (zimage && (unsigned long)zimage >= mem->start && - (unsigned long)zimage < mem->start + SZ_128M) { + if (zimage && (unsigned long)zimage >= bank->start && + (unsigned long)zimage < bank->start + SZ_128M) { usemap = 1; header = zimage; } @@ -78,11 +79,11 @@ static int do_bootz(struct command *cmdtp, int argc, char *argv[]) end = swab32(end); if (!usemap) { - if (mem->size <= SZ_128M) { + if (bank->size <= SZ_128M) { zimage = xmalloc(end); } else { - zimage = (void *)mem->start + SZ_8M; - if (mem->start + SZ_8M + end >= MALLOC_BASE) { + zimage = (void *)bank->start + SZ_8M; + if (bank->start + SZ_8M + end >= MALLOC_BASE) { printf("won't overwrite malloc space with image\n"); goto err_out1; } diff --git a/drivers/base/resource.c b/drivers/base/resource.c index 0da16800e5..5c9c16c591 100644 --- a/drivers/base/resource.c +++ b/drivers/base/resource.c @@ -121,18 +121,3 @@ struct device_d *add_usb_ehci_device(int id, resource_size_t hccr, } EXPORT_SYMBOL(add_usb_ehci_device); #endif - -#ifdef CONFIG_ARM -#include - -struct device_d *arm_add_mem_device(const char* name, resource_size_t start, - resource_size_t size) -{ - struct device_d *dev; - - dev = add_mem_device(name, start, size, IORESOURCE_MEM_WRITEABLE); - armlinux_add_dram(dev); - - return dev; -} -#endif -- cgit v1.2.3