diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/bootm.c | 2 | ||||
-rw-r--r-- | common/image-fdt.c | 2 | ||||
-rw-r--r-- | common/spl/spl.c | 5 | ||||
-rw-r--r-- | common/spl/spl_ext.c | 3 | ||||
-rw-r--r-- | common/spl/spl_fat.c | 3 | ||||
-rw-r--r-- | common/spl/spl_fit.c | 6 | ||||
-rw-r--r-- | common/spl/spl_mmc.c | 6 | ||||
-rw-r--r-- | common/spl/spl_nand.c | 4 | ||||
-rw-r--r-- | common/spl/spl_onenand.c | 3 | ||||
-rw-r--r-- | common/spl/spl_ram.c | 5 | ||||
-rw-r--r-- | common/spl/spl_spi.c | 3 | ||||
-rw-r--r-- | common/spl/spl_ubi.c | 3 |
12 files changed, 23 insertions, 22 deletions
diff --git a/common/bootm.c b/common/bootm.c index e517d9f118..8bf84ebcb7 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -262,7 +262,7 @@ int bootm_find_images(int flag, int argc, char * const argv[]) puts("Could not find a valid device tree\n"); return 1; } - set_working_fdt_addr((ulong)images.ft_addr); + set_working_fdt_addr(map_to_sysmem(images.ft_addr)); #endif #if IMAGE_ENABLE_FIT diff --git a/common/image-fdt.c b/common/image-fdt.c index 9b41f16248..95748f0ae1 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -193,7 +193,7 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size) *of_flat_tree = of_start; *of_size = of_len; - set_working_fdt_addr((ulong)*of_flat_tree); + set_working_fdt_addr(map_to_sysmem(*of_flat_tree)); return 0; error: diff --git a/common/spl/spl.c b/common/spl/spl.c index 19508c7168..038f2b0e83 100644 --- a/common/spl/spl.c +++ b/common/spl/spl.c @@ -127,6 +127,11 @@ __weak void spl_board_prepare_for_boot(void) /* Nothing to do! */ } +__weak struct image_header *spl_get_load_buffer(ssize_t offset, size_t size) +{ + return (struct image_header *)(CONFIG_SYS_TEXT_BASE + offset); +} + void spl_set_header_raw_uboot(struct spl_image_info *spl_image) { ulong u_boot_pos = binman_sym(ulong, u_boot_any, image_pos); diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c index fd30a61f9a..fe05223605 100644 --- a/common/spl/spl_ext.c +++ b/common/spl/spl_ext.c @@ -16,8 +16,7 @@ int spl_load_image_ext(struct spl_image_info *spl_image, loff_t filelen, actlen; disk_partition_t part_info = {}; - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - - sizeof(struct image_header)); + header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); if (part_get_info(block_dev, partition, &part_info)) { printf("spl: no partition table found\n"); diff --git a/common/spl/spl_fat.c b/common/spl/spl_fat.c index 0403016bb4..163e540622 100644 --- a/common/spl/spl_fat.c +++ b/common/spl/spl_fat.c @@ -63,8 +63,7 @@ int spl_load_image_fat(struct spl_image_info *spl_image, if (err) goto end; - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - - sizeof(struct image_header)); + header = spl_get_load_buffer(-sizeof(*header), sizeof(*header)); err = file_fat_read(filename, header, sizeof(struct image_header)); if (err <= 0) diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c index dbf5ac33a8..cb0cc5299b 100644 --- a/common/spl/spl_fit.c +++ b/common/spl/spl_fit.c @@ -354,7 +354,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, struct spl_image_info image_info; int node = -1; int images, ret; - int base_offset, align_len = ARCH_DMA_MINALIGN - 1; + int base_offset, hsize, align_len = ARCH_DMA_MINALIGN - 1; int index = 0; /* @@ -383,8 +383,8 @@ int spl_load_simple_fit(struct spl_image_info *spl_image, * For FIT with data embedded, data is loaded as part of FIT image. * For FIT with external data, data is not loaded in this step. */ - fit = (void *)((CONFIG_SYS_TEXT_BASE - size - info->bl_len - - align_len) & ~align_len); + hsize = (size + info->bl_len + align_len) & ~align_len; + fit = spl_get_load_buffer(-hsize, hsize); sectors = get_aligned_image_size(info, size, 0); count = info->read(info, sector, sectors, fit); debug("fit read sector %lx, sectors=%d, dst=%p, count=%lu\n", diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index 0b2f059570..75c41598e6 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -55,13 +55,13 @@ int mmc_load_image_raw_sector(struct spl_image_info *spl_image, { unsigned long count; struct image_header *header; + struct blk_desc *bd = mmc_get_blk_desc(mmc); int ret = 0; - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE - - sizeof(struct image_header)); + header = spl_get_load_buffer(-sizeof(*header), bd->blksz); /* read image header to find the image size & load address */ - count = blk_dread(mmc_get_blk_desc(mmc), sector, 1, header); + count = blk_dread(bd, sector, 1, header); debug("hdr read sector %lx, count=%lu\n", sector, count); if (count == 0) { ret = -EIO; diff --git a/common/spl/spl_nand.c b/common/spl/spl_nand.c index 2722fd3860..6eb190f1ea 100644 --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c @@ -83,8 +83,8 @@ static int spl_nand_load_image(struct spl_image_info *spl_image, #endif nand_init(); - /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); + header = spl_get_load_buffer(0, sizeof(*header)); + #ifdef CONFIG_SPL_OS_BOOT if (!spl_start_uboot()) { /* diff --git a/common/spl/spl_onenand.c b/common/spl/spl_onenand.c index d32333935a..ee30f328e6 100644 --- a/common/spl/spl_onenand.c +++ b/common/spl/spl_onenand.c @@ -21,8 +21,7 @@ static int spl_onenand_load_image(struct spl_image_info *spl_image, debug("spl: onenand\n"); - /*use CONFIG_SYS_TEXT_BASE as temporary storage area */ - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); + header = spl_get_load_buffer(0, CONFIG_SYS_ONENAND_PAGE_SIZE); /* Load u-boot */ onenand_spl_load_image(CONFIG_SYS_ONENAND_U_BOOT_OFFS, CONFIG_SYS_ONENAND_PAGE_SIZE, (void *)header); diff --git a/common/spl/spl_ram.c b/common/spl/spl_ram.c index e594beaeaa..619b39a537 100644 --- a/common/spl/spl_ram.c +++ b/common/spl/spl_ram.c @@ -63,8 +63,9 @@ static int spl_ram_load_image(struct spl_image_info *spl_image, * No binman support or no information. For now, fix it * to the address pointed to by U-Boot. */ - u_boot_pos = CONFIG_SYS_TEXT_BASE - - sizeof(struct image_header); + header = spl_get_load_buffer(-sizeof(*header), + sizeof(*header)); + } header = (struct image_header *)map_sysmem(u_boot_pos, 0); diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c index ba60a3a3c5..e10cf0124f 100644 --- a/common/spl/spl_spi.c +++ b/common/spl/spl_spi.c @@ -88,8 +88,7 @@ static int spl_spi_load_image(struct spl_image_info *spl_image, return -ENODEV; } - /* use CONFIG_SYS_TEXT_BASE as temporary storage area */ - header = (struct image_header *)(CONFIG_SYS_TEXT_BASE); + header = spl_get_load_buffer(-sizeof(*header), 0x40); #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) payload_offs = fdtdec_get_config_int(gd->fdt_blob, diff --git a/common/spl/spl_ubi.c b/common/spl/spl_ubi.c index a7939e9030..67e5fadd7c 100644 --- a/common/spl/spl_ubi.c +++ b/common/spl/spl_ubi.c @@ -61,8 +61,7 @@ int spl_ubi_load_image(struct spl_image_info *spl_image, puts("Loading Linux failed, falling back to U-Boot.\n"); } #endif - header = (struct image_header *) - (CONFIG_SYS_TEXT_BASE - sizeof(struct image_header)); + header = spl_get_load_buffer(-sizeof(*header), sizeof(header)); volumes[0].vol_id = CONFIG_SPL_UBI_LOAD_MONITOR_ID; volumes[0].load_addr = (void *)header; |