Merge tag 'video-for-2019.07-rc3' of git://git.denx.de/u-boot-video
- update for using splashfile instead of location->name when loading the splash image from a FIT - updates for loading internal and external splash data from FIT - DM_GPIO/DM_VIDEO migration for mx53 cx9020 board - fix boot issue on mx6sabresd board after DM_VIDEO migration - increase the max preallocated framebuffer BPP to 32 in ipuv3 driver to prepare for configurations with higher color depth - allow to use vidconsole_put_string() in board code for text output on LCD displays
This commit is contained in:
@@ -303,8 +303,12 @@ static int splash_load_fit(struct splash_location *location, u32 bmp_load_addr)
|
||||
{
|
||||
int res;
|
||||
int node_offset;
|
||||
int splash_offset;
|
||||
int splash_size;
|
||||
const char *splash_file;
|
||||
const void *internal_splash_data;
|
||||
size_t internal_splash_size;
|
||||
int external_splash_addr;
|
||||
int external_splash_size;
|
||||
bool is_splash_external = false;
|
||||
struct image_header *img_header;
|
||||
const u32 *fit_header;
|
||||
u32 fit_size;
|
||||
@@ -335,36 +339,51 @@ static int splash_load_fit(struct splash_location *location, u32 bmp_load_addr)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
node_offset = fit_image_get_node(fit_header, location->name);
|
||||
/* Get the splash image node */
|
||||
splash_file = env_get("splashfile");
|
||||
if (!splash_file)
|
||||
splash_file = SPLASH_SOURCE_DEFAULT_FILE_NAME;
|
||||
|
||||
node_offset = fit_image_get_node(fit_header, splash_file);
|
||||
if (node_offset < 0) {
|
||||
debug("Could not find splash image '%s' in FIT\n",
|
||||
location->name);
|
||||
splash_file);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
res = fit_image_get_data_offset(fit_header, node_offset,
|
||||
&splash_offset);
|
||||
if (res < 0) {
|
||||
printf("Failed to load splash image (err=%d)\n", res);
|
||||
return res;
|
||||
/* Extract the splash data from FIT */
|
||||
/* 1. Test if splash is in FIT internal data. */
|
||||
if (!fit_image_get_data(fit_header, node_offset, &internal_splash_data, &internal_splash_size))
|
||||
memmove((void *)bmp_load_addr, internal_splash_data, internal_splash_size);
|
||||
/* 2. Test if splash is in FIT external data with fixed position. */
|
||||
else if (!fit_image_get_data_position(fit_header, node_offset, &external_splash_addr))
|
||||
is_splash_external = true;
|
||||
/* 3. Test if splash is in FIT external data with offset. */
|
||||
else if (!fit_image_get_data_offset(fit_header, node_offset, &external_splash_addr)) {
|
||||
/* Align data offset to 4-byte boundary */
|
||||
fit_size = ALIGN(fdt_totalsize(fit_header), 4);
|
||||
/* External splash offset means the offset by end of FIT header */
|
||||
external_splash_addr += location->offset + fit_size;
|
||||
is_splash_external = true;
|
||||
} else {
|
||||
printf("Failed to get splash image from FIT\n");
|
||||
return -ENODATA;
|
||||
}
|
||||
|
||||
res = fit_image_get_data_size(fit_header, node_offset, &splash_size);
|
||||
if (res < 0) {
|
||||
printf("Failed to load splash image (err=%d)\n", res);
|
||||
return res;
|
||||
if (is_splash_external) {
|
||||
res = fit_image_get_data_size(fit_header, node_offset, &external_splash_size);
|
||||
if (res < 0) {
|
||||
printf("Failed to get size of splash image (err=%d)\n", res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Read in the splash data */
|
||||
location->offset = external_splash_addr;
|
||||
res = splash_storage_read_raw(location, bmp_load_addr, external_splash_size);
|
||||
if (res < 0)
|
||||
return res;
|
||||
}
|
||||
|
||||
/* Align data offset to 4-byte boundrary */
|
||||
fit_size = fdt_totalsize(fit_header);
|
||||
fit_size = (fit_size + 3) & ~3;
|
||||
|
||||
/* Read in the splash data */
|
||||
location->offset = (location->offset + fit_size + splash_offset);
|
||||
res = splash_storage_read_raw(location, bmp_load_addr , splash_size);
|
||||
if (res < 0)
|
||||
return res;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_FIT */
|
||||
|
||||
Reference in New Issue
Block a user