mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
spl: Convert spl_fit to work with sandbox
At present this casts addresses to pointers so cannot work with sandbox. Update the code to use map_sysmem() instead. As part of this change, the existing load_ptr is renamed to src_ptr since it is not a pointer to load_addr. It is confusing to use a similar name for something that is not actually related. For the alignment code, ALIGN() is used instead of open-coded alignment. Add a comment to the line that casts away a const. Use a (new) load_ptr variable to access memory at address load_addr. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
01ad9f75c5
commit
891d9e84a7
|
@ -16,6 +16,7 @@
|
||||||
#include <init.h>
|
#include <init.h>
|
||||||
#include <irq_func.h>
|
#include <irq_func.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
|
#include <mapmem.h>
|
||||||
#include <serial.h>
|
#include <serial.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
|
@ -168,7 +169,7 @@ __weak void spl_board_prepare_for_boot(void)
|
||||||
|
|
||||||
__weak struct image_header *spl_get_load_buffer(ssize_t offset, size_t size)
|
__weak struct image_header *spl_get_load_buffer(ssize_t offset, size_t size)
|
||||||
{
|
{
|
||||||
return (struct image_header *)(CONFIG_SYS_TEXT_BASE + offset);
|
return map_sysmem(CONFIG_SYS_TEXT_BASE + offset, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
|
void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <image.h>
|
#include <image.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <mapmem.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
#include <sysinfo.h>
|
#include <sysinfo.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
|
@ -235,11 +236,11 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
|
||||||
size_t length;
|
size_t length;
|
||||||
int len;
|
int len;
|
||||||
ulong size;
|
ulong size;
|
||||||
ulong load_addr, load_ptr;
|
ulong load_addr;
|
||||||
|
void *load_ptr;
|
||||||
void *src;
|
void *src;
|
||||||
ulong overhead;
|
ulong overhead;
|
||||||
int nr_sectors;
|
int nr_sectors;
|
||||||
int align_len = ARCH_DMA_MINALIGN - 1;
|
|
||||||
uint8_t image_comp = -1, type = -1;
|
uint8_t image_comp = -1, type = -1;
|
||||||
const void *data;
|
const void *data;
|
||||||
const void *fit = ctx->fit;
|
const void *fit = ctx->fit;
|
||||||
|
@ -269,11 +270,13 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (external_data) {
|
if (external_data) {
|
||||||
|
void *src_ptr;
|
||||||
|
|
||||||
/* External data */
|
/* External data */
|
||||||
if (fit_image_get_data_size(fit, node, &len))
|
if (fit_image_get_data_size(fit, node, &len))
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
|
||||||
load_ptr = (load_addr + align_len) & ~align_len;
|
src_ptr = map_sysmem(ALIGN(load_addr, ARCH_DMA_MINALIGN), len);
|
||||||
length = len;
|
length = len;
|
||||||
|
|
||||||
overhead = get_aligned_image_overhead(info, offset);
|
overhead = get_aligned_image_overhead(info, offset);
|
||||||
|
@ -281,12 +284,12 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
|
||||||
|
|
||||||
if (info->read(info,
|
if (info->read(info,
|
||||||
sector + get_aligned_image_offset(info, offset),
|
sector + get_aligned_image_offset(info, offset),
|
||||||
nr_sectors, (void *)load_ptr) != nr_sectors)
|
nr_sectors, src_ptr) != nr_sectors)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
debug("External data: dst=%lx, offset=%x, size=%lx\n",
|
debug("External data: dst=%p, offset=%x, size=%lx\n",
|
||||||
load_ptr, offset, (unsigned long)length);
|
src_ptr, offset, (unsigned long)length);
|
||||||
src = (void *)load_ptr + overhead;
|
src = src_ptr + overhead;
|
||||||
} else {
|
} else {
|
||||||
/* Embedded data */
|
/* Embedded data */
|
||||||
if (fit_image_get_data(fit, node, &data, &length)) {
|
if (fit_image_get_data(fit, node, &data, &length)) {
|
||||||
|
@ -295,7 +298,7 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
|
||||||
}
|
}
|
||||||
debug("Embedded data: dst=%lx, size=%lx\n", load_addr,
|
debug("Embedded data: dst=%lx, size=%lx\n", load_addr,
|
||||||
(unsigned long)length);
|
(unsigned long)length);
|
||||||
src = (void *)data;
|
src = (void *)data; /* cast away const */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONFIG_IS_ENABLED(FIT_SIGNATURE)) {
|
if (CONFIG_IS_ENABLED(FIT_SIGNATURE)) {
|
||||||
|
@ -309,16 +312,16 @@ static int spl_load_fit_image(struct spl_load_info *info, ulong sector,
|
||||||
if (CONFIG_IS_ENABLED(FIT_IMAGE_POST_PROCESS))
|
if (CONFIG_IS_ENABLED(FIT_IMAGE_POST_PROCESS))
|
||||||
board_fit_image_post_process(&src, &length);
|
board_fit_image_post_process(&src, &length);
|
||||||
|
|
||||||
|
load_ptr = map_sysmem(load_addr, length);
|
||||||
if (IS_ENABLED(CONFIG_SPL_GZIP) && image_comp == IH_COMP_GZIP) {
|
if (IS_ENABLED(CONFIG_SPL_GZIP) && image_comp == IH_COMP_GZIP) {
|
||||||
size = length;
|
size = length;
|
||||||
if (gunzip((void *)load_addr, CONFIG_SYS_BOOTM_LEN,
|
if (gunzip(load_ptr, CONFIG_SYS_BOOTM_LEN, src, &size)) {
|
||||||
src, &size)) {
|
|
||||||
puts("Uncompressing error\n");
|
puts("Uncompressing error\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
length = size;
|
length = size;
|
||||||
} else {
|
} else {
|
||||||
memcpy((void *)load_addr, src, length);
|
memcpy(load_ptr, src, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image_info) {
|
if (image_info) {
|
||||||
|
@ -383,7 +386,7 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make the load-address of the FDT available for the SPL framework */
|
/* Make the load-address of the FDT available for the SPL framework */
|
||||||
spl_image->fdt_addr = (void *)image_info.load_addr;
|
spl_image->fdt_addr = map_sysmem(image_info.load_addr, 0);
|
||||||
if (CONFIG_IS_ENABLED(FIT_IMAGE_TINY))
|
if (CONFIG_IS_ENABLED(FIT_IMAGE_TINY))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user