Merge branch '2022-02-28-bugfixes'
- Assorted bugfixes
This commit is contained in:
@@ -265,3 +265,36 @@ u64 get_page_table_size(void)
|
||||
{
|
||||
return SZ_256K;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
unsigned long base;
|
||||
unsigned long top;
|
||||
u32 status = 0;
|
||||
|
||||
/* Reserve 4M each for scriptaddr and pxefile_addr_r at the top of RAM
|
||||
* at least 1M below the stack.
|
||||
*/
|
||||
top = gd->start_addr_sp - CONFIG_STACK_SIZE - SZ_8M - SZ_1M;
|
||||
top = ALIGN_DOWN(top, SZ_8M);
|
||||
|
||||
status |= env_set_hex("scriptaddr", top + SZ_4M);
|
||||
status |= env_set_hex("pxefile_addr_r", top);
|
||||
|
||||
/* somewhat based on the Linux Kernel boot requirements:
|
||||
* align by 2M and maximal FDT size 2M
|
||||
*/
|
||||
base = ALIGN(gd->ram_base, SZ_2M);
|
||||
|
||||
status |= env_set_hex("fdt_addr_r", base);
|
||||
status |= env_set_hex("kernel_addr_r", base + SZ_2M);
|
||||
status |= env_set_hex("ramdisk_addr_r", base + SZ_128M);
|
||||
status |= env_set_hex("loadaddr", base + SZ_2G);
|
||||
status |= env_set_hex("kernel_comp_addr_r", base + SZ_2G - SZ_128M);
|
||||
status |= env_set_hex("kernel_comp_size", SZ_128M);
|
||||
|
||||
if (status)
|
||||
log_warning("late_init: Failed to set run time variables\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -6,8 +6,4 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
ifeq ($(CONFIG_$(SPL_)SKIP_LOWLEVEL_INIT),)
|
||||
obj-y := mux.o
|
||||
endif
|
||||
|
||||
obj-y += board.o
|
||||
obj-y := board.o mux.o
|
||||
|
||||
@@ -216,6 +216,36 @@ const struct dpll_params *get_dpll_ddr_params(void)
|
||||
return &dpll_ddr;
|
||||
}
|
||||
|
||||
void set_uart_mux_conf(void)
|
||||
{
|
||||
switch (CONFIG_CONS_INDEX) {
|
||||
case 1: {
|
||||
enable_uart0_pin_mux();
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
enable_uart1_pin_mux();
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
enable_uart2_pin_mux();
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
enable_uart3_pin_mux();
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
enable_uart4_pin_mux();
|
||||
break;
|
||||
}
|
||||
case 6: {
|
||||
enable_uart5_pin_mux();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void set_mux_conf_regs(void)
|
||||
{
|
||||
/* done first by the ROM and afterwards by the pin controller driver */
|
||||
@@ -240,6 +270,8 @@ void sdram_init(void)
|
||||
#ifdef CONFIG_DEBUG_UART
|
||||
void board_debug_uart_init(void)
|
||||
{
|
||||
setup_early_clocks();
|
||||
|
||||
/* done by pin controller driver if not debugging */
|
||||
enable_uart_pin_mux(CONFIG_DEBUG_UART_BASE);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
#include <common.h>
|
||||
#include <env.h>
|
||||
#include <fdt_support.h>
|
||||
#include <init.h>
|
||||
#include <log.h>
|
||||
#include <stdlib.h>
|
||||
@@ -95,6 +96,33 @@ static void parse_serial(const struct tag_serialnr *serialnr)
|
||||
env_set("serial#", serial);
|
||||
}
|
||||
|
||||
#define SBL_BOARD "board_id="
|
||||
#define SBL_LCDTYPE "lcdtype="
|
||||
static ulong board_id = 0;
|
||||
static ulong lcdtype = 0;
|
||||
|
||||
static void parse_cmdline(const struct tag_cmdline *cmdline)
|
||||
{
|
||||
char *buf;
|
||||
|
||||
/* Export this to sbl_cmdline (secondary boot loader command line) */
|
||||
env_set("sbl_cmdline", cmdline->cmdline);
|
||||
|
||||
buf = strstr(cmdline->cmdline, SBL_BOARD);
|
||||
if (!buf)
|
||||
return;
|
||||
buf += strlen(SBL_BOARD);
|
||||
|
||||
board_id = simple_strtoul(buf, NULL, 10);
|
||||
|
||||
buf = strstr(cmdline->cmdline, SBL_LCDTYPE);
|
||||
if (!buf)
|
||||
return;
|
||||
buf += strlen(SBL_LCDTYPE);
|
||||
|
||||
lcdtype = simple_strtoul(buf, NULL, 10);
|
||||
}
|
||||
|
||||
/*
|
||||
* The downstream/vendor kernel (provided by Samsung) uses ATAGS for booting.
|
||||
* It also requires an extremely long cmdline provided by the primary bootloader
|
||||
@@ -126,6 +154,9 @@ static void copy_atags(const struct tag *tags)
|
||||
if (t->hdr.tag == ATAG_SERIAL)
|
||||
parse_serial(&t->u.serialnr);
|
||||
|
||||
if (t->hdr.tag == ATAG_CMDLINE)
|
||||
parse_cmdline(&t->u.cmdline);
|
||||
|
||||
fw_atags_size += t->hdr.size * sizeof(u32);
|
||||
}
|
||||
|
||||
@@ -165,3 +196,287 @@ void setup_board_tags(struct tag **in_params)
|
||||
memcpy(*in_params, fw_atags_copy, fw_atags_size);
|
||||
*(u8 **)in_params += fw_atags_size;
|
||||
}
|
||||
|
||||
/* These numbers are unique per product but not across all products */
|
||||
#define SAMSUNG_CODINA_LCD_LMS380KF01 4
|
||||
#define SAMSUNG_CODINA_LCD_S6D27A1 13
|
||||
#define SAMSUNG_SKOMER_LCD_HVA40WV1 10
|
||||
#define SAMSUNG_SKOMER_LCD_NT35512 12
|
||||
|
||||
static void codina_patch_display(void *fdt)
|
||||
{
|
||||
int node;
|
||||
int ret;
|
||||
|
||||
node = fdt_path_offset(fdt, "/spi-gpio-0/panel");
|
||||
if (node < 0) {
|
||||
printf("cannot find Codina panel node\n");
|
||||
return;
|
||||
}
|
||||
if (lcdtype == SAMSUNG_CODINA_LCD_LMS380KF01) {
|
||||
ret = fdt_setprop_string(fdt, node, "compatible", "samsung,lms380kf01");
|
||||
if (ret < 0)
|
||||
printf("could not set LCD compatible\n");
|
||||
else
|
||||
printf("updated LCD compatible to LMS380KF01\n");
|
||||
} else if (lcdtype == SAMSUNG_CODINA_LCD_S6D27A1) {
|
||||
ret = fdt_setprop_string(fdt, node, "compatible", "samsung,s6d27a1");
|
||||
if (ret < 0)
|
||||
printf("could not set LCD compatible\n");
|
||||
else
|
||||
printf("updated LCD compatible to S6D27A1\n");
|
||||
} else {
|
||||
printf("unknown LCD type\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void skomer_kyle_patch_display(void *fdt)
|
||||
{
|
||||
int node;
|
||||
int ret;
|
||||
|
||||
node = fdt_path_offset(fdt, "/soc/mcde/dsi/panel");
|
||||
if (node < 0) {
|
||||
printf("cannot find Skomer/Kyle panel node\n");
|
||||
return;
|
||||
}
|
||||
if (lcdtype == SAMSUNG_SKOMER_LCD_HVA40WV1) {
|
||||
ret = fdt_setprop_string(fdt, node, "compatible", "hydis,hva40wv1");
|
||||
if (ret < 0)
|
||||
printf("could not set LCD compatible\n");
|
||||
else
|
||||
printf("updated LCD compatible to Hydis HVA40WV1\n");
|
||||
} else if (lcdtype == SAMSUNG_SKOMER_LCD_NT35512) {
|
||||
/*
|
||||
* FIXME: This panel is actually a BOE product, but we don't know
|
||||
* the exact product name, so the compatible for the NT35512
|
||||
* is used for the time being. The vendor drivers also call it NT35512.
|
||||
*/
|
||||
ret = fdt_setprop_string(fdt, node, "compatible", "novatek,nt35512");
|
||||
if (ret < 0)
|
||||
printf("could not set LCD compatible\n");
|
||||
else
|
||||
printf("updated LCD compatible to Novatek NT35512\n");
|
||||
} else {
|
||||
printf("unknown LCD type\n");
|
||||
}
|
||||
}
|
||||
|
||||
int ft_board_setup(void *fdt, struct bd_info *bd)
|
||||
{
|
||||
const char *str;
|
||||
int node;
|
||||
int ret;
|
||||
|
||||
printf("stemmy patch: DTB at 0x%08lx\n", (ulong)fdt);
|
||||
|
||||
/* Inspect FDT to see what we've got here */
|
||||
ret = fdt_check_header(fdt);
|
||||
if (ret < 0) {
|
||||
printf("invalid DTB\n");
|
||||
return ret;
|
||||
}
|
||||
node = fdt_path_offset(fdt, "/");
|
||||
if (node < 0) {
|
||||
printf("cannot find root node\n");
|
||||
return node;
|
||||
}
|
||||
str = fdt_stringlist_get(fdt, node, "compatible", 0, NULL);
|
||||
if (!str) {
|
||||
printf("could not find board compatible\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!strcmp(str, "samsung,janice")) {
|
||||
switch(board_id) {
|
||||
case 7:
|
||||
printf("Janice GT-I9070 Board Rev 0.0\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("Janice GT-I9070 Board Rev 0.1\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("Janice GT-I9070 Board Rev 0.2\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("Janice GT-I9070 Board Rev 0.3\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("Janice GT-I9070 Board Rev 0.4\n");
|
||||
break;
|
||||
case 12:
|
||||
printf("Janice GT-I9070 Board Rev 0.5\n");
|
||||
break;
|
||||
case 13:
|
||||
printf("Janice GT-I9070 Board Rev 0.6\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (!strcmp(str, "samsung,gavini")) {
|
||||
switch(board_id) {
|
||||
case 7:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0A\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0B\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0A_EMUL\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0C\n");
|
||||
break;
|
||||
case 12:
|
||||
printf("Gavini GT-I8530 Board Rev 0.0D\n");
|
||||
break;
|
||||
case 13:
|
||||
printf("Gavini GT-I8530 Board Rev 0.1\n");
|
||||
break;
|
||||
case 14:
|
||||
printf("Gavini GT-I8530 Board Rev 0.3\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (!strcmp(str, "samsung,codina")) {
|
||||
switch(board_id) {
|
||||
case 7:
|
||||
printf("Codina GT-I8160 Board Rev 0.0\n");
|
||||
break;
|
||||
case 8:
|
||||
printf("Codina GT-I8160 Board Rev 0.1\n");
|
||||
break;
|
||||
case 9:
|
||||
printf("Codina GT-I8160 Board Rev 0.2\n");
|
||||
break;
|
||||
case 10:
|
||||
printf("Codina GT-I8160 Board Rev 0.3\n");
|
||||
break;
|
||||
case 11:
|
||||
printf("Codina GT-I8160 Board Rev 0.4\n");
|
||||
break;
|
||||
case 12:
|
||||
printf("Codina GT-I8160 Board Rev 0.5\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
codina_patch_display(fdt);
|
||||
} else if (!strcmp(str, "samsung,codina-tmo")) {
|
||||
switch(board_id) {
|
||||
case 0x101:
|
||||
printf("Codina SGH-T599 Board pre-Rev 0.0\n");
|
||||
break;
|
||||
case 0x102:
|
||||
printf("Codina SGH-T599 Board Rev 0.0\n");
|
||||
break;
|
||||
case 0x103:
|
||||
printf("Codina SGH-T599 Board Rev 0.1\n");
|
||||
break;
|
||||
case 0x104:
|
||||
printf("Codina SGH-T599 Board Rev 0.2\n");
|
||||
break;
|
||||
case 0x105:
|
||||
printf("Codina SGH-T599 Board Rev 0.4\n");
|
||||
break;
|
||||
case 0x106:
|
||||
printf("Codina SGH-T599 Board Rev 0.6\n");
|
||||
break;
|
||||
case 0x107:
|
||||
printf("Codina SGH-T599 Board Rev 0.7\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
codina_patch_display(fdt);
|
||||
} else if (!strcmp(str, "samsung,golden")) {
|
||||
switch(board_id) {
|
||||
case 0x102:
|
||||
printf("Golden GT-I8190 Board SW bringup\n");
|
||||
break;
|
||||
case 0x103:
|
||||
printf("Golden GT-I8190 Board Rev 0.2\n");
|
||||
break;
|
||||
case 0x104:
|
||||
printf("Golden GT-I8190 Board Rev 0.3\n");
|
||||
break;
|
||||
case 0x105:
|
||||
printf("Golden GT-I8190 Board Rev 0.4\n");
|
||||
break;
|
||||
case 0x106:
|
||||
printf("Golden GT-I8190 Board Rev 0.5\n");
|
||||
break;
|
||||
case 0x107:
|
||||
printf("Golden GT-I8190 Board Rev 0.6\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (!strcmp(str, "samsung,skomer")) {
|
||||
switch(board_id) {
|
||||
case 0x101:
|
||||
printf("Skomer GT-S7710 Board Rev 0.0\n");
|
||||
break;
|
||||
case 0x102:
|
||||
printf("Skomer GT-S7710 Board Rev 0.1\n");
|
||||
break;
|
||||
case 0x103:
|
||||
printf("Skomer GT-S7710 Board Rev 0.2\n");
|
||||
break;
|
||||
case 0x104:
|
||||
printf("Skomer GT-S7710 Board Rev 0.3\n");
|
||||
break;
|
||||
case 0x105:
|
||||
printf("Skomer GT-S7710 Board Rev 0.4\n");
|
||||
break;
|
||||
case 0x106:
|
||||
printf("Skomer GT-S7710 Board Rev 0.5\n");
|
||||
break;
|
||||
case 0x107:
|
||||
printf("Skomer GT-S7710 Board Rev 0.6\n");
|
||||
break;
|
||||
case 0x108:
|
||||
printf("Skomer GT-S7710 Board Rev 0.7\n");
|
||||
break;
|
||||
case 0x109:
|
||||
printf("Skomer GT-S7710 Board Rev 0.8\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
skomer_kyle_patch_display(fdt);
|
||||
} else if (!strcmp(str, "samsung,kyle")) {
|
||||
switch(board_id) {
|
||||
case 0x101:
|
||||
printf("Kyle SGH-I407 Board Rev 0.0\n");
|
||||
break;
|
||||
case 0x102:
|
||||
printf("Kyle SGH-I407 Board Rev 0.1\n");
|
||||
break;
|
||||
case 0x103:
|
||||
printf("Kyle SGH-I407 Board Rev 0.2\n");
|
||||
break;
|
||||
case 0x104:
|
||||
printf("Kyle SGH-I407 Board Rev 0.3\n");
|
||||
break;
|
||||
case 0x105:
|
||||
printf("Kyle SGH-I407 Board Rev 0.4\n");
|
||||
break;
|
||||
case 0x106:
|
||||
printf("Kyle SGH-I407 Board Rev 0.5\n");
|
||||
break;
|
||||
case 0x107:
|
||||
printf("Kyle SGH-I407 Board Rev 0.6\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
skomer_kyle_patch_display(fdt);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3,10 +3,11 @@ CONFIG_ARCH_APPLE=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="t8103-j274"
|
||||
CONFIG_DEBUG_UART_BASE=0x235200000
|
||||
CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x880000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x0
|
||||
CONFIG_USE_PREBOOT=y
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_BOARD_LATE_INIT=y
|
||||
# CONFIG_NET is not set
|
||||
CONFIG_APPLE_SPI_KEYB=y
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
@@ -36,3 +36,5 @@ CONFIG_DM_VIDEO=y
|
||||
CONFIG_SYS_WHITE_ON_BLACK=y
|
||||
CONFIG_VIDEO_MCDE_SIMPLE=y
|
||||
# CONFIG_EFI_LOADER is not set
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_LIBFDT=y
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
.TH MKIMAGE 1 "2010-05-16"
|
||||
.TH MKIMAGE 1 "2022-02-07"
|
||||
|
||||
.SH NAME
|
||||
mkimage \- Generate image for U-Boot
|
||||
.SH SYNOPSIS
|
||||
.B mkimage
|
||||
.RB "\-l [" "uimage file name" "]"
|
||||
.RB [ \-T " \fItype\fP] " \-l " [\fIuimage file name\fP]"
|
||||
|
||||
.B mkimage
|
||||
.RB [\fIoptions\fP] " \-f [" "image tree source file" "]" " [" "uimage file name" "]"
|
||||
@@ -47,6 +47,12 @@ supports verified boot.
|
||||
.BI "\-l [" "uimage file name" "]"
|
||||
mkimage lists the information contained in the header of an existing U-Boot image.
|
||||
|
||||
.TP
|
||||
.BI "\-T [" "image type" "]"
|
||||
Parse image file as type.
|
||||
Pass \-h as the image to see the list of supported image type.
|
||||
Without this option image type is autodetected.
|
||||
|
||||
.P
|
||||
.B Create old legacy image:
|
||||
|
||||
|
||||
@@ -9,10 +9,6 @@
|
||||
"stdout=serial,vidconsole\0" \
|
||||
"stderr=serial,vidconsole\0"
|
||||
|
||||
#define ENV_MEM_LAYOUT_SETTINGS \
|
||||
"fdt_addr_r=0x960100000\0" \
|
||||
"kernel_addr_r=0x960200000\0"
|
||||
|
||||
#if CONFIG_IS_ENABLED(CMD_NVME)
|
||||
#define BOOT_TARGET_NVME(func) func(NVME, nvme, 0)
|
||||
#else
|
||||
@@ -33,7 +29,6 @@
|
||||
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
ENV_DEVICE_SETTINGS \
|
||||
ENV_MEM_LAYOUT_SETTINGS \
|
||||
BOOTENV
|
||||
|
||||
#endif
|
||||
|
||||
@@ -12,9 +12,7 @@
|
||||
static void usage(void);
|
||||
|
||||
/* parameters initialized by core will be used by the image type code */
|
||||
static struct image_tool_params params = {
|
||||
.type = IH_TYPE_KERNEL,
|
||||
};
|
||||
static struct image_tool_params params;
|
||||
|
||||
/*
|
||||
* dumpimage_extract_subimage -
|
||||
@@ -110,7 +108,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (argc < 2)
|
||||
if (argc < 2 || (params.iflag && params.lflag))
|
||||
usage();
|
||||
|
||||
if (optind >= argc) {
|
||||
@@ -122,7 +120,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* set tparams as per input type_id */
|
||||
tparams = imagetool_get_type(params.type);
|
||||
if (tparams == NULL) {
|
||||
if (!params.lflag && tparams == NULL) {
|
||||
fprintf(stderr, "%s: unsupported type: %s\n",
|
||||
params.cmdname, genimg_get_type_name(params.type));
|
||||
exit(EXIT_FAILURE);
|
||||
@@ -132,7 +130,7 @@ int main(int argc, char **argv)
|
||||
* check the passed arguments parameters meets the requirements
|
||||
* as per image type to be generated/listed
|
||||
*/
|
||||
if (tparams->check_params) {
|
||||
if (tparams && tparams->check_params) {
|
||||
if (tparams->check_params(¶ms)) {
|
||||
fprintf(stderr, "%s: Parameter check failed\n",
|
||||
params.cmdname);
|
||||
@@ -159,7 +157,7 @@ int main(int argc, char **argv)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if ((uint32_t)sbuf.st_size < tparams->header_size) {
|
||||
if (tparams && (uint32_t)sbuf.st_size < tparams->header_size) {
|
||||
fprintf(stderr, "%s: Bad size: \"%s\" is not valid image\n",
|
||||
params.cmdname, params.imagefile);
|
||||
exit(EXIT_FAILURE);
|
||||
@@ -203,8 +201,9 @@ int main(int argc, char **argv)
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: %s -l image\n"
|
||||
" -l ==> list image header information\n",
|
||||
fprintf(stderr, "Usage: %s [-T type] -l image\n"
|
||||
" -l ==> list image header information\n"
|
||||
" -T ==> parse image file as 'type'\n",
|
||||
params.cmdname);
|
||||
fprintf(stderr,
|
||||
" %s [-T type] [-p position] [-o outfile] image\n"
|
||||
|
||||
@@ -26,6 +26,12 @@ struct image_type_params *imagetool_get_type(int type)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int imagetool_verify_print_header_by_type(
|
||||
void *ptr,
|
||||
struct stat *sbuf,
|
||||
struct image_type_params *tparams,
|
||||
struct image_tool_params *params);
|
||||
|
||||
int imagetool_verify_print_header(
|
||||
void *ptr,
|
||||
struct stat *sbuf,
|
||||
@@ -39,6 +45,9 @@ int imagetool_verify_print_header(
|
||||
struct image_type_params **start = __start_image_type;
|
||||
struct image_type_params **end = __stop_image_type;
|
||||
|
||||
if (tparams)
|
||||
return imagetool_verify_print_header_by_type(ptr, sbuf, tparams, params);
|
||||
|
||||
for (curr = start; curr != end; curr++) {
|
||||
if ((*curr)->verify_header) {
|
||||
retval = (*curr)->verify_header((unsigned char *)ptr,
|
||||
@@ -65,7 +74,7 @@ int imagetool_verify_print_header(
|
||||
return retval;
|
||||
}
|
||||
|
||||
int imagetool_verify_print_header_by_type(
|
||||
static int imagetool_verify_print_header_by_type(
|
||||
void *ptr,
|
||||
struct stat *sbuf,
|
||||
struct image_type_params *tparams,
|
||||
|
||||
@@ -178,33 +178,19 @@ struct image_type_params *imagetool_get_type(int type);
|
||||
/*
|
||||
* imagetool_verify_print_header() - verifies the image header
|
||||
*
|
||||
* Scan registered image types and verify the image_header for each
|
||||
* supported image type. If verification is successful, this prints
|
||||
* the respective header.
|
||||
*
|
||||
* Return: 0 on success, negative if input image format does not match with
|
||||
* any of supported image types
|
||||
*/
|
||||
int imagetool_verify_print_header(
|
||||
void *ptr,
|
||||
struct stat *sbuf,
|
||||
struct image_type_params *tparams,
|
||||
struct image_tool_params *params);
|
||||
|
||||
/*
|
||||
* imagetool_verify_print_header_by_type() - verifies the image header
|
||||
*
|
||||
* Verify the image_header for the image type given by tparams.
|
||||
* If tparams is NULL then scan registered image types and verify the
|
||||
* image_header for each supported image type.
|
||||
* If verification is successful, this prints the respective header.
|
||||
* @ptr: pointer the the image header
|
||||
* @sbuf: stat information about the file pointed to by ptr
|
||||
* @tparams: image type parameters
|
||||
* @tparams: image type parameters or NULL
|
||||
* @params: mkimage parameters
|
||||
*
|
||||
* Return: 0 on success, negative if input image format does not match with
|
||||
* the given image type
|
||||
*/
|
||||
int imagetool_verify_print_header_by_type(
|
||||
int imagetool_verify_print_header(
|
||||
void *ptr,
|
||||
struct stat *sbuf,
|
||||
struct image_type_params *tparams,
|
||||
|
||||
@@ -82,8 +82,9 @@ static int show_valid_options(enum ih_category category)
|
||||
static void usage(const char *msg)
|
||||
{
|
||||
fprintf(stderr, "Error: %s\n", msg);
|
||||
fprintf(stderr, "Usage: %s -l image\n"
|
||||
" -l ==> list image header information\n",
|
||||
fprintf(stderr, "Usage: %s [-T type] -l image\n"
|
||||
" -l ==> list image header information\n"
|
||||
" -T ==> parse image file as 'type'\n",
|
||||
params.cmdname);
|
||||
fprintf(stderr,
|
||||
" %s [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image\n"
|
||||
@@ -329,7 +330,7 @@ static void process_args(int argc, char **argv)
|
||||
params.datafile = datafile;
|
||||
else if (!params.datafile)
|
||||
usage("Missing data file for auto-FIT (use -d)");
|
||||
} else if (type != IH_TYPE_INVALID) {
|
||||
} else if (params.lflag || type != IH_TYPE_INVALID) {
|
||||
if (type == IH_TYPE_SCRIPT && !params.datafile)
|
||||
usage("Missing data file for script (use -d)");
|
||||
params.type = type;
|
||||
@@ -358,7 +359,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* set tparams as per input type_id */
|
||||
tparams = imagetool_get_type(params.type);
|
||||
if (tparams == NULL) {
|
||||
if (tparams == NULL && !params.lflag) {
|
||||
fprintf (stderr, "%s: unsupported type %s\n",
|
||||
params.cmdname, genimg_get_type_name(params.type));
|
||||
exit (EXIT_FAILURE);
|
||||
@@ -368,14 +369,14 @@ int main(int argc, char **argv)
|
||||
* check the passed arguments parameters meets the requirements
|
||||
* as per image type to be generated/listed
|
||||
*/
|
||||
if (tparams->check_params)
|
||||
if (tparams && tparams->check_params)
|
||||
if (tparams->check_params (¶ms))
|
||||
usage("Bad parameters for image type");
|
||||
|
||||
if (!params.eflag) {
|
||||
params.ep = params.addr;
|
||||
/* If XIP, entry point must be after the U-Boot header */
|
||||
if (params.xflag)
|
||||
if (params.xflag && tparams)
|
||||
params.ep += tparams->header_size;
|
||||
}
|
||||
|
||||
@@ -436,7 +437,7 @@ int main(int argc, char **argv)
|
||||
params.cmdname, params.imagefile);
|
||||
exit (EXIT_FAILURE);
|
||||
#endif
|
||||
} else if (sbuf.st_size < (off_t)tparams->header_size) {
|
||||
} else if (tparams && sbuf.st_size < (off_t)tparams->header_size) {
|
||||
fprintf (stderr,
|
||||
"%s: Bad size: \"%s\" is not valid image: size %llu < %u\n",
|
||||
params.cmdname, params.imagefile,
|
||||
@@ -455,21 +456,12 @@ int main(int argc, char **argv)
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (params.fflag) {
|
||||
/*
|
||||
* Verifies the header format based on the expected header for image
|
||||
* type in tparams
|
||||
*/
|
||||
retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
|
||||
tparams, ¶ms);
|
||||
} else {
|
||||
/**
|
||||
* When listing the image, we are not given the image type. Simply check all
|
||||
* image types to find one that matches our header
|
||||
*/
|
||||
retval = imagetool_verify_print_header(ptr, &sbuf,
|
||||
tparams, ¶ms);
|
||||
}
|
||||
/*
|
||||
* Verifies the header format based on the expected header for image
|
||||
* type in tparams. If tparams is NULL simply check all image types
|
||||
* to find one that matches our header.
|
||||
*/
|
||||
retval = imagetool_verify_print_header(ptr, &sbuf, tparams, ¶ms);
|
||||
|
||||
(void) munmap((void *)ptr, sbuf.st_size);
|
||||
(void) close (ifd);
|
||||
|
||||
Reference in New Issue
Block a user