[PATCH v2 10/16] x86: zboot: Add an 'setup' subcommand

Bin Meng bmeng.cn at gmail.com
Tue Sep 1 11:35:32 CEST 2020


Hi Simon,

On Sun, Aug 30, 2020 at 5:42 AM Simon Glass <sjg at chromium.org> wrote:
>
> Add a subcommand that sets up the kernel ready for execution.

This commit actually adds 2 subcommands.

>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> Reviewed-by: Wolfgang Wallner <wolfgang.wallner at br-automation.com>
> ---
>
> (no changes since v1)
>
>  arch/x86/lib/zimage.c | 52 ++++++++++++++++++++++++++++++++++---------
>  1 file changed, 42 insertions(+), 10 deletions(-)
>
> diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c
> index 460282e1312..a39ef9d288f 100644
> --- a/arch/x86/lib/zimage.c
> +++ b/arch/x86/lib/zimage.c
> @@ -68,10 +68,12 @@ struct zboot_state {
>
>  enum {
>         ZBOOT_STATE_START       = BIT(0),
> -       ZBOOT_STATE_INFO        = BIT(1),
> -       ZBOOT_STATE_GO          = BIT(2),
> +       ZBOOT_STATE_LOAD        = BIT(1),
> +       ZBOOT_STATE_SETUP       = BIT(2),
> +       ZBOOT_STATE_INFO        = BIT(3),
> +       ZBOOT_STATE_GO          = BIT(4),
>
> -       ZBOOT_STATE_COUNT       = 3,
> +       ZBOOT_STATE_COUNT       = 5,
>  };
>
>  static void build_command_line(char *command_line, int auto_boot)
> @@ -342,7 +344,6 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
>  static int do_zboot_start(struct cmd_tbl *cmdtp, int flag, int argc,
>                           char *const argv[])
>  {
> -       struct boot_params *base_ptr;
>         const char *s;
>
>         memset(&state, '\0', sizeof(state));
> @@ -366,19 +367,40 @@ static int do_zboot_start(struct cmd_tbl *cmdtp, int flag, int argc,
>         if (argc >= 5)
>                 state.initrd_size = simple_strtoul(argv[4], NULL, 16);
>
> -       /* Lets look for */
> +       return 0;
> +}
> +
> +static int do_zboot_load(struct cmd_tbl *cmdtp, int flag, int argc,
> +                        char *const argv[])
> +{
> +       struct boot_params *base_ptr;
> +
>         base_ptr = load_zimage((void *)state.bzimage_addr, state.bzimage_size,
>                                &state.load_address);
>         if (!base_ptr) {
>                 puts("## Kernel loading failed ...\n");
> -               return -1;
> +               return CMD_RET_FAILURE;
>         }
>         state.base_ptr = base_ptr;
>
> -       if (setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET, 0,
> -                        state.initrd_addr, state.initrd_size)) {
> +       return 0;
> +}
> +
> +static int do_zboot_setup(struct cmd_tbl *cmdtp, int flag, int argc,
> +                         char *const argv[])
> +{
> +       struct boot_params *base_ptr = state.base_ptr;
> +       int ret;
> +
> +       if (!base_ptr) {
> +               printf("base is not set: use 'zboot load' first\n");
> +               return CMD_RET_FAILURE;
> +       }
> +       ret = setup_zimage(base_ptr, (char *)base_ptr + COMMAND_LINE_OFFSET,
> +                          0, state.initrd_addr, state.initrd_size);
> +       if (ret) {
>                 puts("Setting up boot parameters failed ...\n");
> -               return -1;
> +               return CMD_RET_FAILURE;
>         }
>
>         return 0;
> @@ -410,6 +432,8 @@ static int do_zboot_go(struct cmd_tbl *cmdtp, int flag, int argc,
>
>  U_BOOT_SUBCMDS(zboot,
>         U_BOOT_CMD_MKENT(start, 8, 1, do_zboot_start, "", ""),
> +       U_BOOT_CMD_MKENT(load, 1, 1, do_zboot_load, "", ""),
> +       U_BOOT_CMD_MKENT(setup, 1, 1, do_zboot_setup, "", ""),
>         U_BOOT_CMD_MKENT(info, 1, 1, do_zboot_info, "", ""),
>         U_BOOT_CMD_MKENT(go, 1, 1, do_zboot_go, "", ""),
>  )
> @@ -451,6 +475,7 @@ int do_zboot_parent(struct cmd_tbl *cmdtp, int flag, int argc,
>         }
>
>         do_zboot_states(cmdtp, flag, argc, argv, ZBOOT_STATE_START |
> +                       ZBOOT_STATE_LOAD | ZBOOT_STATE_SETUP |
>                         ZBOOT_STATE_INFO | ZBOOT_STATE_GO);
>
>         return CMD_RET_FAILURE;
> @@ -465,6 +490,13 @@ U_BOOT_CMDREP_COMPLETE(
>         "      size -        The optional size of the bzimage. Defaults to\n"
>         "                    zero.\n"
>         "      initrd addr - The address of the initrd image to use, if any.\n"
> -       "      initrd size - The size of the initrd image to use, if any.\n",
> +       "      initrd size - The size of the initrd image to use, if any.\n"
> +       "\n"
> +       "Sub-commands to do part of the zboot sequence:\n"
> +       "\tstart [addr [arg ...]] - specify arguments\n"
> +       "\tload   - load OS image\n"
> +       "\tsetup  - set up table\n"
> +       "\tinfo   - show sumary info\n"

typo: summary

Previous commits should be adjusted to include their description in
their commit, not here

> +       "\tgo     - start OS\n",
>         complete_zboot
>  );
> --

Regards,
Bin


More information about the U-Boot mailing list