A failed request_sdram_region is nearly always a problem and warrants a print out.
Introduce request_sdram_region_silent() for the few cases, where an error is tolerated and print an error message in the general case. Signed-off-by: Ahmad Fatoum <[email protected]> --- arch/arm/cpu/armv7r-mpu.c | 6 +++--- arch/arm/cpu/bootm-fip.c | 6 +++--- arch/arm/cpu/mmu_32.c | 4 ++-- common/elf.c | 4 ++-- common/memory.c | 20 +++++++++++++------- include/memory.h | 39 +++++++++++++++++++++++++++++++-------- 6 files changed, 54 insertions(+), 25 deletions(-) diff --git a/arch/arm/cpu/armv7r-mpu.c b/arch/arm/cpu/armv7r-mpu.c index 4fb867c50a42..d96411a61632 100644 --- a/arch/arm/cpu/armv7r-mpu.c +++ b/arch/arm/cpu/armv7r-mpu.c @@ -206,9 +206,9 @@ int armv7r_mpu_init_coherent(unsigned long start, enum size reg_size) static int armv7r_request_pool(void) { if (dma_coherent_start && dma_coherent_size) - request_sdram_region("DMA coherent pool", - dma_coherent_start, dma_coherent_size, - MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_RW); + request_sdram_region_silent("DMA coherent pool", + dma_coherent_start, dma_coherent_size, + MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_RW); return 0; } postmem_initcall(armv7r_request_pool); diff --git a/arch/arm/cpu/bootm-fip.c b/arch/arm/cpu/bootm-fip.c index 8d1ea3f109d1..a4da4c538abe 100644 --- a/arch/arm/cpu/bootm-fip.c +++ b/arch/arm/cpu/bootm-fip.c @@ -36,9 +36,9 @@ static int desc_to_sdram(struct fip_image_desc *loadable, ulong load_address) if (desc_get_res(loadable)) return 0; - res = request_sdram_region("fip", load_address, - loadable->image->toc_e.size, - MEMTYPE_LOADER_CODE, MEMATTRS_RW); + res = request_sdram_region_silent("fip", load_address, + loadable->image->toc_e.size, + MEMTYPE_LOADER_CODE, MEMATTRS_RW); if (!res) return -EBUSY; diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c index 912d14e8cf82..caa41e1beb3a 100644 --- a/arch/arm/cpu/mmu_32.c +++ b/arch/arm/cpu/mmu_32.c @@ -540,8 +540,8 @@ static void create_zero_page(void) * In case the zero page is in SDRAM request it to prevent others * from using it */ - request_sdram_region("zero page", 0x0, PAGE_SIZE, - MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_FAULT); + request_sdram_region_silent("zero page", 0x0, PAGE_SIZE, + MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_FAULT); zero_page_faulting(); pr_debug("Created zero page\n"); diff --git a/common/elf.c b/common/elf.c index 4f4151f722d7..330505e9a2bf 100644 --- a/common/elf.c +++ b/common/elf.c @@ -31,8 +31,8 @@ static int elf_request_region(struct elf_image *elf, resource_size_t start, if (!r) return -ENOMEM; - r_new = request_sdram_region("elf_segment", start, size, - MEMTYPE_LOADER_CODE, MEMATTRS_RWX); + r_new = request_sdram_region_silent("elf_segment", start, size, + MEMTYPE_LOADER_CODE, MEMATTRS_RWX); if (!r_new) { r_new = request_iomem_region("elf_segment", start, size); if (!r_new) { diff --git a/common/memory.c b/common/memory.c index 7dc7f40db7fc..49ff0ef619d5 100644 --- a/common/memory.c +++ b/common/memory.c @@ -67,7 +67,7 @@ void register_barebox_area(resource_size_t start, static int mem_register_barebox(void) { if (barebox_start && barebox_size) - barebox_res = request_sdram_region("barebox", barebox_start, + barebox_res = request_sdram_region_silent("barebox", barebox_start, barebox_size, MEMTYPE_BOOT_SERVICES_CODE, MEMATTRS_RWX); // FIXME @@ -108,7 +108,7 @@ struct resource *request_barebox_region(const char *name, return iores; } - return request_sdram_region(name, start, size, memtype, memattrs); + return request_sdram_region_silent(name, start, size, memtype, memattrs); } static int mem_malloc_resource(void) @@ -122,7 +122,7 @@ static int mem_malloc_resource(void) * regions are outside of sdram in which case * the following fails. */ - request_sdram_region("malloc space", + request_sdram_region_silent("malloc space", malloc_start, malloc_end - malloc_start + 1, MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_RW); @@ -179,7 +179,7 @@ static int mem_malloc_resource(void) MEMATTRS_RW); #endif #ifdef STACK_BASE - request_sdram_region("stack", STACK_BASE, STACK_SIZE, + request_sdram_region_silent("stack", STACK_BASE, STACK_SIZE, MEMTYPE_BOOT_SERVICES_DATA, MEMATTRS_RW); #endif @@ -302,19 +302,25 @@ postmem_initcall(add_mem_devices); * Request a region from the registered sdram */ struct resource *__request_sdram_region(const char *name, - resource_size_t start, resource_size_t size) + resource_size_t start, resource_size_t size, + bool verbose) { struct memory_bank *bank; + resource_size_t end = start + size - 1; for_each_memory_bank(bank) { struct resource *res; - res = __request_region(bank->res, start, start + size - 1, + res = __request_region(bank->res, start, end, name, IORESOURCE_MEM); if (!IS_ERR(res)) return res; } + if (verbose) + pr_err("unable to request SDRAM region for %s at %pa-%pa\n", + name, &start, &end); + return NULL; } @@ -339,7 +345,7 @@ struct resource *reserve_sdram_region(const char *name, resource_size_t start, * want to set the reserved flag independently of whether * CONFIG_MEMORY_ATTRIBUTES is enabled or not */ - res = __request_sdram_region(name, start, size); + res = __request_sdram_region(name, start, size, true); if (!res) return NULL; diff --git a/include/memory.h b/include/memory.h index 3475e9211b0c..6b7ada641c9d 100644 --- a/include/memory.h +++ b/include/memory.h @@ -39,7 +39,21 @@ int barebox_add_memory_bank(const char *name, resource_size_t start, for_each_resource_region_reverse((bank)->res, region) struct resource *__request_sdram_region(const char *name, - resource_size_t start, resource_size_t size); + resource_size_t start, resource_size_t size, + bool verbose); + +static inline struct resource *sdram_region_with_attrs(struct resource *res, + enum resource_memtype memtype, + unsigned memattrs) +{ + if (IS_ENABLED(CONFIG_MEMORY_ATTRIBUTES) && res) { + res->type = memtype; + res->attrs = memattrs; + res->flags |= IORESOURCE_TYPE_VALID; + } + + return res; +} static inline struct resource *request_sdram_region(const char *name, resource_size_t start, @@ -50,14 +64,23 @@ static inline struct resource *request_sdram_region(const char *name, struct resource *res; /* IORESOURCE_MEM is implicit for all SDRAM regions */ - res = __request_sdram_region(name, start, size); - if (IS_ENABLED(CONFIG_MEMORY_ATTRIBUTES) && res) { - res->type = memtype; - res->attrs = memattrs; - res->flags |= IORESOURCE_TYPE_VALID; - } + res = __request_sdram_region(name, start, size, true); - return res; + return sdram_region_with_attrs(res, memtype, memattrs); +} + +static inline struct resource *request_sdram_region_silent(const char *name, + resource_size_t start, + resource_size_t size, + enum resource_memtype memtype, + unsigned memattrs) +{ + struct resource *res; + + /* IORESOURCE_MEM is implicit for all SDRAM regions */ + res = __request_sdram_region(name, start, size, false); + + return sdram_region_with_attrs(res, memtype, memattrs); } struct resource *reserve_sdram_region(const char *name, resource_size_t start, -- 2.47.3
