[U-Boot] [PATCH] env: ti: boot: Handle reboot reason from BCB

Sam Protsenko semen.protsenko at linaro.org
Fri Jul 12 13:18:20 UTC 2019


Hi Eugeniu,

On Fri, Jul 12, 2019 at 12:39 AM Eugeniu Rosca <roscaeugeniu at gmail.com> wrote:
>
> Hi Sam,
>
> On Tue, Jul 09, 2019 at 05:45:43PM +0300, Sam Protsenko wrote:
> >       "emmc_android_boot=" \
> > +     "if bcb load " __stringify(CONFIG_FASTBOOT_FLASH_MMC_DEV) " misc; " \
> > +     "then " \
> > +             "if bcb test command = bootonce-bootloader; then " \
> > +                     "echo BCB: Bootloader boot...; " \
> > +                     "bcb clear command; bcb store; " \
>
> Assuming there are multiple reboot reasons of type "bootonce/oneshot"
> (i.e. assumed to be cleared once detected/handled), 'bcb test' could
> implement the '-c' (clear) flag. This would allow removing the
> "bcb clear command; bcb store;" line, w/o altering the behavior.
>
> It could be done in phase 2 (optimization/refinement).
>
> > +                     FASTBOOT_CMD \
> > +             "elif bcb test command = boot-recovery; then " \
> > +                     "echo BCB: Recovery boot...; " \
> > +                     "echo Warning: recovery boot is not implemented; " \
> > +                     "echo Performing normal boot for now...; " \
> > +                     "run emmc_android_normal_boot; " \
> > +             "else " \
> > +                     "echo BCB: Normal boot requested...; " \
> > +                     "run emmc_android_normal_boot; " \
> > +             "fi; " \
> > +     "else " \
> > +             "echo Warning: BCB is corrupted or does not exist; " \
> > +             "echo Performing normal boot...; " \
> > +             "run emmc_android_normal_boot; " \
> > +     "fi;\0" \
>
> As a general comment, yes, arguments can be brought that this scripted
> handling is getting hairy and could be replaced by a command like
> boot{a,_android} (you name it).
>
> In my opinion, the main downside of "boot{a,_android}" wrapper is that
> it implies sprinkling U-Boot with special-purpose variables like
> ${fastbootcmd} [1], ${recoverycmd}, ${my_usecase_cmd}, etc (the number
> of those would likely match the number of if/else branches in this
> patch). Decentralized usage of those variables (i.e. set at point A and
> read/used at point B) would IMHO:
>  - complicate the boot flow and its understanding, hence would
>  - require to write and maintain additional documentation
>  - open doors for creative issues
>
> I contrast to the above, the approach taken in this patch:
>  - avoids any special-purpose global variables
>  - avoids spawning yet another boot{*} command
>  - centralizes/limits the boot flow handling to one file
>  - doesn't require much documentation (the code is self-explanatory)
>  - in case of bugs, would require coming back to the same place
>  - makes debugging easier
>

Let's finalize modern Android boot flow via scripting (as we need all
those commands anyway), then we can think if we need to wrap the whole
thing into boot_android command. There is a lot of stuff happening
during the Android boot, not only reboot reason check, e.g.
  - AVB
  - A/B slotting
  - partitions reading
  - preparing the cmdline

So once we implement Android-Q requirements for Android boot flow, we
can experiment with separate command. But let's postpone that at least
for next merge window. Then we can decide together which way is
better.

> > +     "emmc_android_normal_boot=" \
> >               "echo Trying to boot Android from eMMC ...; " \
> >               "run update_to_fit; " \
> >               "setenv eval_bootargs setenv bootargs $bootargs; " \
> > @@ -176,8 +201,7 @@
> >       "if test ${dofastboot} -eq 1; then " \
> >               "echo Boot fastboot requested, resetting dofastboot ...;" \
> >               "setenv dofastboot 0; saveenv;" \
> > -             "echo Booting into fastboot ...; " \
> > -             "fastboot " __stringify(CONFIG_FASTBOOT_USB_DEV) "; " \
> > +             FASTBOOT_CMD \
> >       "fi;" \
> >       "if test ${boot_fit} -eq 1; then "      \
> >               "run update_to_fit;"    \
>
> That said, I still admit that my statements could be highly subjective
> and that the best of our collective experience (as users, developers and
> maintainers) would be achieved in a different way than described.
>
> Below is based on code review only (can't test due to lack of HW):
>
> Reviewed-by: Eugeniu Rosca <erosca at de.adit-jv.com>
>
> [1] https://android.googlesource.com/platform/external/u-boot/+/7d8d87584d7c/cmd/boot_android.c#67
>
> --
> Best Regards,
> Eugeniu.


More information about the U-Boot mailing list