Message ID | 20160916044712.21827-1-lokeshvutla@ti.com |
---|---|
State | Accepted |
Commit | 5d214065167ed4052b552a7224b9fbf807b8c107 |
Delegated to: | Tom Rini |
Headers | show |
On Fri, Sep 16, 2016 at 10:17:12AM +0530, Lokesh Vutla wrote: > Given that boot monitor image is being generated to a specific target location > depending on the SoC and U-boot relies on addr_mon env variable to be aligned > with boot monitor target location. When ever the target address gets updated in > boot monitor, it is difficult to sync between u-boot and boot monitor and also > there is no way to update user that boot monitor image is updated. > > To avoid this problem, boot monitor image is being generated with mkimage > header. Adding support in mon_install command for parsing this header. > > Signed-off-by: Suman Anna <s-anna@ti.com> > Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
On Fri, Sep 16, 2016 at 10:17:12AM +0530, Lokesh Vutla wrote: > Given that boot monitor image is being generated to a specific target location > depending on the SoC and U-boot relies on addr_mon env variable to be aligned > with boot monitor target location. When ever the target address gets updated in > boot monitor, it is difficult to sync between u-boot and boot monitor and also > there is no way to update user that boot monitor image is updated. > > To avoid this problem, boot monitor image is being generated with mkimage > header. Adding support in mon_install command for parsing this header. > > Signed-off-by: Suman Anna <s-anna@ti.com> > Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> > Reviewed-by: Tom Rini <trini@konsulko.com> Applied to u-boot/master, thanks!
diff --git a/arch/arm/mach-keystone/cmd_mon.c b/arch/arm/mach-keystone/cmd_mon.c index 6a9bdc9..591e758 100644 --- a/arch/arm/mach-keystone/cmd_mon.c +++ b/arch/arm/mach-keystone/cmd_mon.c @@ -9,14 +9,16 @@ #include <common.h> #include <command.h> +#include <image.h> #include <mach/mon.h> asm(".arch_extension sec\n\t"); static int do_mon_install(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - u32 addr, dpsc_base = 0x1E80000, freq; + u32 addr, dpsc_base = 0x1E80000, freq, load_addr, size; int rcode = 0; + struct image_header *header; if (argc < 2) return CMD_RET_USAGE; @@ -25,9 +27,21 @@ static int do_mon_install(cmd_tbl_t *cmdtp, int flag, int argc, addr = simple_strtoul(argv[1], NULL, 16); - rcode = mon_install(addr, dpsc_base, freq); - printf("## installed monitor, freq [%d], status %d\n", - freq, rcode); + header = (struct image_header *)addr; + + if (image_get_magic(header) != IH_MAGIC) { + printf("## Please update monitor image\n"); + return -EFAULT; + } + + load_addr = image_get_load(header); + size = image_get_data_size(header); + memcpy((void *)load_addr, (void *)(addr + sizeof(struct image_header)), + size); + + rcode = mon_install(load_addr, dpsc_base, freq); + printf("## installed monitor @ 0x%x, freq [%d], status %d\n", + load_addr, freq, rcode); return 0; }