On Mon, Apr 30, 2018 at 3:32 AM, Alex Kiernan <alex.kier...@gmail.com> wrote: > Merge USB and UDP boot code. The USB implementation stays the same, but > UDP no longer passes an fdt. We introduce a new environment variable > 'fastbootcmd' which if set overrides the hardcoded boot command, setting > this then allows the UDP implementation to remain the same. If after > running 'fastbootcmd' the board has not booted, control is returned > to U-Boot and the fastboot process ends. > > Signed-off-by: Alex Kiernan <alex.kier...@gmail.com>
Nit below... Acked-by: Joe Hershberger <joe.hershber...@ni.com> > --- > > Changes in v2: None > > drivers/fastboot/fb_common.c | 27 +++++++++++++++++++++++++++ > drivers/usb/gadget/f_fastboot.c | 22 +++++++--------------- > include/fastboot.h | 1 + > net/fastboot.c | 16 ++-------------- > 4 files changed, 37 insertions(+), 29 deletions(-) > > diff --git a/drivers/fastboot/fb_common.c b/drivers/fastboot/fb_common.c > index 36ef669..73d8f94 100644 > --- a/drivers/fastboot/fb_common.c > +++ b/drivers/fastboot/fb_common.c > @@ -107,3 +107,30 @@ int __weak fb_set_reboot_flag(void) > { > return -1; > } > + > +void fastboot_boot(void *addr) > +{ > + char *s; > + > + s = env_get("fastbootcmd"); > + if (s) { > + run_command(s, CMD_FLAG_ENV); > + } else { > + static char boot_addr_start[12]; > + static char *const bootm_args[] = { > + "bootm", boot_addr_start, NULL > + }; > + > + snprintf(boot_addr_start, sizeof(boot_addr_start) - 1, > + "0x%lx", (long)addr); > + printf("Booting kernel at %s...\n\n\n", boot_addr_start); > + > + do_bootm(NULL, 0, 2, bootm_args); > + > + /* This only happens if image is somehow faulty so we start Use multi-line comment format. '/*' gets its own line. > + * over. We deliberately leave this policy to the invocation > + * of fastbootcmd if that's what's being run > + */ > + do_reset(NULL, 0, 0, NULL); > + } > +} > diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c > index 84515da..1dca4dd 100644 > --- a/drivers/usb/gadget/f_fastboot.c > +++ b/drivers/usb/gadget/f_fastboot.c > @@ -480,18 +480,15 @@ static void cb_download(struct usb_ep *ep, struct > usb_request *req) > fastboot_tx_write_str(response); > } > > -static void do_bootm_on_complete(struct usb_ep *ep, struct usb_request *req) > +static void do_exit_on_complete(struct usb_ep *ep, struct usb_request *req) > { > - char boot_addr_start[12]; > - char *bootm_args[] = { "bootm", boot_addr_start, NULL }; > - > - puts("Booting kernel..\n"); > - > - sprintf(boot_addr_start, "0x%lx", (long)CONFIG_FASTBOOT_BUF_ADDR); > - do_bootm(NULL, 0, 2, bootm_args); > + g_dnl_trigger_detach(); > +} > > - /* This only happens if image is somehow faulty so we start over */ > - do_reset(NULL, 0, 0, NULL); > +static void do_bootm_on_complete(struct usb_ep *ep, struct usb_request *req) > +{ > + fastboot_boot((void *)CONFIG_FASTBOOT_BUF_ADDR); > + do_exit_on_complete(ep, req); > } > > static void cb_boot(struct usb_ep *ep, struct usb_request *req) > @@ -500,11 +497,6 @@ static void cb_boot(struct usb_ep *ep, struct > usb_request *req) > fastboot_tx_write_str("OKAY"); > } > > -static void do_exit_on_complete(struct usb_ep *ep, struct usb_request *req) > -{ > - g_dnl_trigger_detach(); > -} > - > static void cb_continue(struct usb_ep *ep, struct usb_request *req) > { > fastboot_func->in_req->complete = do_exit_on_complete; > diff --git a/include/fastboot.h b/include/fastboot.h > index 9767065..64f9939 100644 > --- a/include/fastboot.h > +++ b/include/fastboot.h > @@ -76,4 +76,5 @@ int strcmp_l1(const char *s1, const char *s2); > > int fastboot_lookup_command(const char *cmd_string); > int fb_set_reboot_flag(void); > +void fastboot_boot(void *addr); > #endif /* _FASTBOOT_H_ */ > diff --git a/net/fastboot.c b/net/fastboot.c > index ad8c101..119011c 100644 > --- a/net/fastboot.c > +++ b/net/fastboot.c > @@ -383,20 +383,8 @@ static void cb_reboot_bootloader(char *cmd_parameter, > char *fastboot_data, > */ > static void boot_downloaded_image(void) > { > - char kernel_addr[12]; > - char *fdt_addr = env_get("fdt_addr_r"); > - char *const bootm_args[] = { > - "bootm", kernel_addr, "-", fdt_addr, NULL > - }; > - > - sprintf(kernel_addr, "0x%lx", (long)CONFIG_FASTBOOT_BUF_ADDR); > - > - printf("\nBooting kernel at %s with fdt at %s...\n\n\n", > - kernel_addr, fdt_addr); > - do_bootm(NULL, 0, 4, bootm_args); > - > - /* This only happens if image is faulty so we start over. */ > - do_reset(NULL, 0, 0, NULL); > + fastboot_boot((void *)CONFIG_FASTBOOT_BUF_ADDR); > + net_set_state(NETLOOP_SUCCESS); > } > > /** > -- > 2.7.4 > > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot