From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Thu, 18 Dec 2014 10:00:17 +0100 Subject: [U-Boot] [U-Boot, resend, 1/2] config_distro_bootcmd.h: Allow user to indicate that usb is inited in preboot In-Reply-To: <1418406612-3243-2-git-send-email-hdegoede@redhat.com> References: <1418406612-3243-2-git-send-email-hdegoede@redhat.com> Message-ID: <549297A1.1070202@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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