[U-Boot] [RFC PATCH v2 15/20] fastboot: Merge boot common across USB and UDP

Joe Hershberger joe.hershberger at ni.com
Thu May 3 21:21:18 UTC 2018


On Mon, Apr 30, 2018 at 3:32 AM, Alex Kiernan <alex.kiernan at 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.kiernan at gmail.com>

Nit below...

Acked-by: Joe Hershberger <joe.hershberger at 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 at lists.denx.de
> https://lists.denx.de/listinfo/u-boot


More information about the U-Boot mailing list