[PATCH] efi: Call bootm_disable_interrupts earlier in efi_exit_boot_services
Ilias Apalodimas
ilias.apalodimas at linaro.org
Sat Nov 20 09:20:23 CET 2021
On Sat, 20 Nov 2021 at 00:09, Tom Rini <trini at konsulko.com> wrote:
>
> On Fri, Nov 19, 2021 at 10:52:27PM +0100, Heinrich Schuchardt wrote:
> >
> >
> > Am 19. November 2021 22:33:04 MEZ schrieb Tom Rini <trini at konsulko.com>:
> > >If we look at the path that bootm/booti take when preparing to boot the
> > >OS, we see that as part of (or prior to calling do_bootm_states,
> > >explicitly) the process, bootm_disable_interrupts() is called prior to
> > >announce_and_cleanup() which is where udc_disconnect() /
> > >board_quiesce_devices() / dm_remove_devices_flags() are called from. In
> > >the EFI path, these are called afterwards. In efi_exit_boot_services()
> > >however we have been calling bootm_disable_interrupts() after the above
> > >functions, as part of ensuring that we disable interrupts as required
> > >by the spec. However, bootm_disable_interrupts() is also where we go
> > >and call usb_stop(). While this has been fine before, on the TI J721E
> > >platform this leads us to an exception. This exception seems likely to
> > >be the case that we're trying to stop devices that we have already
> > >disabled clocks for. The most direct way to handle this particular
> >
> > This patch may hide an error on your board but obviously does not address the real problem.
I don't think it 'hides' it. I think it's the other way around, this
board exposes the problem. In any case I think disabling irq's etc
make sense to run before we disable devices completely.
> >
> > If dependencies in the shut down sequence should exist, we need to consider them in the driver model.
Yes agree 100% here.
> >
> > What is your plan to analyze the problem?
>
> I'm not sure there is a different problem to solve here. It's unsafe to
> call the "shut everything down" function, which is what usb_stop() is,
> after having shut everything down. We may be able to stop calling
> usb_stop() as any sort of shutdown should already have happened via
> driver model, which is what we see now.
Linux has CONFIG_EFI_DISABLE_PCI_DMA to deal with similar problems on
PCI devices. Basically it disables busmastering until linux properly
configures the SMMU. I think disabling the devices before handing
over to the OS (when possible) is a good policy. In any case I think
this patch is reasonable since it at lest makes EFI and bootm/i behave
similarly. I'll go have a look on bootm/i and cleanup the whole thing
at some point.
Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
>
> --
> Tom
More information about the U-Boot
mailing list