mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 20:18:54 -04:00
automatic update from FIT image: add optional address parameter
Current update_tftp() flow: 1.) fetch "updatefile" from defined TFTP server 2.) check if FIT format 3.) flash contained images Add an address parameter to update_tftp(). If this address is non-zero, skip the TFTP transfer and use the image at this address. Also extend update_tftp() to return success/fail. Signed-off-by: Andreas Pretzsch <apr@cn-eng.de>
This commit is contained in:
parent
975afc34dd
commit
8d6b73202c
@ -51,7 +51,7 @@ void inline __show_boot_progress (int val) {}
|
|||||||
void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progress")));
|
void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progress")));
|
||||||
|
|
||||||
#if defined(CONFIG_UPDATE_TFTP)
|
#if defined(CONFIG_UPDATE_TFTP)
|
||||||
void update_tftp (void);
|
int update_tftp (ulong addr);
|
||||||
#endif /* CONFIG_UPDATE_TFTP */
|
#endif /* CONFIG_UPDATE_TFTP */
|
||||||
|
|
||||||
#define MAX_DELAY_STOP_STR 32
|
#define MAX_DELAY_STOP_STR 32
|
||||||
@ -341,7 +341,7 @@ void main_loop (void)
|
|||||||
#endif /* CONFIG_PREBOOT */
|
#endif /* CONFIG_PREBOOT */
|
||||||
|
|
||||||
#if defined(CONFIG_UPDATE_TFTP)
|
#if defined(CONFIG_UPDATE_TFTP)
|
||||||
update_tftp ();
|
update_tftp (0UL);
|
||||||
#endif /* CONFIG_UPDATE_TFTP */
|
#endif /* CONFIG_UPDATE_TFTP */
|
||||||
|
|
||||||
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
#if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
|
||||||
|
@ -238,13 +238,17 @@ static int update_fit_getparams(const void *fit, int noffset, ulong *addr,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_tftp(void)
|
int update_tftp(ulong addr)
|
||||||
{
|
{
|
||||||
char *filename, *env_addr;
|
char *filename, *env_addr;
|
||||||
int images_noffset, ndepth, noffset;
|
int images_noffset, ndepth, noffset;
|
||||||
ulong update_addr, update_fladdr, update_size;
|
ulong update_addr, update_fladdr, update_size;
|
||||||
ulong addr;
|
|
||||||
void *fit;
|
void *fit;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
/* use already present image */
|
||||||
|
if (addr)
|
||||||
|
goto got_update_file;
|
||||||
|
|
||||||
printf("Auto-update from TFTP: ");
|
printf("Auto-update from TFTP: ");
|
||||||
|
|
||||||
@ -253,7 +257,7 @@ void update_tftp(void)
|
|||||||
if (filename == NULL) {
|
if (filename == NULL) {
|
||||||
printf("failed, env. variable '%s' not found\n",
|
printf("failed, env. variable '%s' not found\n",
|
||||||
UPDATE_FILE_ENV);
|
UPDATE_FILE_ENV);
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("trying update file '%s'\n", filename);
|
printf("trying update file '%s'\n", filename);
|
||||||
@ -268,15 +272,16 @@ void update_tftp(void)
|
|||||||
if (update_load(filename, CONFIG_UPDATE_TFTP_MSEC_MAX,
|
if (update_load(filename, CONFIG_UPDATE_TFTP_MSEC_MAX,
|
||||||
CONFIG_UPDATE_TFTP_CNT_MAX, addr)) {
|
CONFIG_UPDATE_TFTP_CNT_MAX, addr)) {
|
||||||
printf("Can't load update file, aborting auto-update\n");
|
printf("Can't load update file, aborting auto-update\n");
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
got_update_file:
|
||||||
fit = (void *)addr;
|
fit = (void *)addr;
|
||||||
|
|
||||||
if (!fit_check_format((void *)fit)) {
|
if (!fit_check_format((void *)fit)) {
|
||||||
printf("Bad FIT format of the update file, aborting "
|
printf("Bad FIT format of the update file, aborting "
|
||||||
"auto-update\n");
|
"auto-update\n");
|
||||||
return;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* process updates */
|
/* process updates */
|
||||||
@ -293,6 +298,7 @@ void update_tftp(void)
|
|||||||
|
|
||||||
if (!fit_image_check_hashes(fit, noffset)) {
|
if (!fit_image_check_hashes(fit, noffset)) {
|
||||||
printf("Error: invalid update hash, aborting\n");
|
printf("Error: invalid update hash, aborting\n");
|
||||||
|
ret = 1;
|
||||||
goto next_node;
|
goto next_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,15 +307,17 @@ void update_tftp(void)
|
|||||||
&update_fladdr, &update_size)) {
|
&update_fladdr, &update_size)) {
|
||||||
printf("Error: can't get update parameteres, "
|
printf("Error: can't get update parameteres, "
|
||||||
"aborting\n");
|
"aborting\n");
|
||||||
|
ret = 1;
|
||||||
goto next_node;
|
goto next_node;
|
||||||
}
|
}
|
||||||
if (update_flash(update_addr, update_fladdr, update_size)) {
|
if (update_flash(update_addr, update_fladdr, update_size)) {
|
||||||
printf("Error: can't flash update, aborting\n");
|
printf("Error: can't flash update, aborting\n");
|
||||||
|
ret = 1;
|
||||||
goto next_node;
|
goto next_node;
|
||||||
}
|
}
|
||||||
next_node:
|
next_node:
|
||||||
noffset = fdt_next_node(fit, noffset, &ndepth);
|
noffset = fdt_next_node(fit, noffset, &ndepth);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user