On 12/12/2014 Stephen Warren wrote:

> On 12-12-14 10:50 AM, Hans de Goede wrote:
> When using usb-keyboard support, typically usb will already get started from
> preboot. In this case doing it again in the bootcmd is undesirable.
>
> Allow the user of config_distro_bootcmd to indicate that usb is inited in
> preboot through the user setting BOOTENV_PREBOOT_INITS_USB.

Sorry, I don't recall seeing this whenever it was posted before.
>
> Conceptually this seems fine. One issue it has is with the following
> sequence:
>
> PREBOOT inits USB, no USB drive found (not plugged in)
> User CTRL-Cs boot sequence
> User plugs in USB drive
> User runs "boot" or "run bootcmd"
> -> USB not re-detected, so system doesn't boot from USB.
>
> Perhaps the best way to solve this is to have a flag controlling whether
> BOOTENV_SET_USB_NEED_INIT sets $usb_need_init?
>
> preboot:
> setenv usb_do_set_usb_need_init false
>
> BOOTENV_SET_USB_NEED_INIT:
> # Normally unset -> true
> # In your case, preboot sets this to false
> if ${usb_do_set_usb_need_init}; then
>      setenv usb_need_init
> else
>      # Next time $boot is run, this will be unset -> true
>      # so we will re-init USB
>      setenv usb_do_set_usb_need_init
>      # This time through, we skip USB init
>      setenv usb_need_init false
> endif
>
> Of course, that doesn't solve the problem of the user aborting auto-boot
> before it's ever run once. Perhaps better would be a flag that
> BOOTENV_SET_USB_NEED_INIT can use to distinguish auto-boot and manual
> invocation, i.e.:
>
> preboot:
> setenv usb_do_set_usb_need_init false
>
> BOOTENV_SET_USB_NEED_INIT:
> # U-Boot C code sets this appropriatelyL
> if ${auto_boot}; then
>      # Auto case: Init USB unless preboot set a flag
>      if ${usb_do_set_usb_need_init}; then
>          setenv usb_need_init
>      else
>          # Next time $boot is run, this will be unset -> true
>          # so we will re-init USB
>          setenv usb_do_set_usb_need_init
>          # This time through, we skip USB init
>          setenv usb_need_init false
>      endif
> else
>      # Manual case: Always init USB
>      setenv usb_need_init
> endif
>
> Or do we just assume that if the user plugs in a new USB device after
> boot, they must manually run USB initialization? If so, we cam simplify
> the existing $usb_need_init a bit...

Looking at all the extra code (and possible bugs / problems that code may
introduce), I think that it makes sense to just expect the user to run
"usb reset" after plugging in a new device.

Regards,

Hans
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to