Re: [PATCH] efi: stub: override RT_PROP table supported mask based on EFI variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 16 Mar 2021 at 08:42, Heinrich Schuchardt <xypron.glpk@xxxxxx> wrote:
>
> On 3/15/21 2:07 PM, Ard Biesheuvel wrote:
> > On Mon, 15 Mar 2021 at 04:11, Shawn Guo <shawn.guo@xxxxxxxxxx> wrote:
> >>
> >> On Tue, Mar 09, 2021 at 07:47:25PM +0100, Ard Biesheuvel wrote:
> >>> On Tue, 9 Mar 2021 at 19:10, Rob Clark <robdclark@xxxxxxxxx> wrote:
> >>>>
> > ...
> >>>> fwiw, the valid use-case for ACPI boot on these things is for distro
> >>>> installer.. it might not be the shiny accelerated experience, but you
> >>>> want to be able to get thru the installer and then install updates to
> >>>> get latest kernel/dtb/etc
> >>>>
> >>>> it is a small use-case, but kinda an important step ;-)
> >>>>
> >>>
> >>> That is a fair point. However, as I understand it, we need this to work around
> >>> - the need to pass efi=novamap
> >>> - broken poweroff on Flex5g
> >>
> >> One more: broken EFI variable runtime services on all Snapdragon laptops
> >>
> >> It's been another pain of running debian-installer (d-i) on these
> >> laptops, where EFI NV variables are just stored on UFS disk.  So after
> >> Linux takes over the control of UFS, EFI NV variable runtime services
> >> then become out of service.  Currently, we have to apply a hack [1] on
> >> d-i grub-installer to get around the issue,  and it's been the only
> >> remaining out-of-tree patch we have to carry for d-i.  With this nice
> >> `OverrideSupported` support, we will be able to drop that hack
> >> completely.
> >>
> >>>
> >>> So an installer either needs to set the EFI variable, or pass
> >>> efi=novamap on the first boot. Note that there are no arm64 EFI
> >>> systems known where efi=novamap causes problems. In fact, I would
> >>> prefer to stop using SetVirtualAddressMap() altogether, as it does not
> >>> provide any benefit whatsoever. So perhaps we should make efi=novamap
> >>> the default and be done with it.
> >>>
> >>> Broken poweroff is hardly a showstopper for an installer, given that
> >>> we cannot even install GRUB correctly.
> >>>
> >>> In summary, I am more than happy to collaborate constructively on this
> >>> (which is why I wrote the patch), but I don't think we're at a point
> >>> yet where this is the only thing standing in our way when it comes to
> >>> a smooth out-of-the-box Linux installation experience.
> >>
> >> There might be more to be done for getting a smooth Linux installation
> >> experience.  But IMHO, this `OverrideSupported` thing is definitely
> >> a big step to that.
> >>
> >
> > So the problem here seems to be that grub-install (or efibootmgr)
> > tolerates efivarfs being absent entirely, but bails out if it exists
> > but gives an error when trying to access it, right?
> >
> > This is not only a problem on Snapdragon systems afaik - most Uboot
> > based arm64 systems booting via EFI are affected by this as well.
> >
> > So it would be good if we could align with those folks, and maybe the
> > ones working on RISC-V as well, to see if we can get some consensus
> > around taking this approach.
> >
> > For the folks newly cc'ed on this thread: full version here
> > https://lore.kernel.org/linux-arm-msm/20210306113519.294287-1-ardb@xxxxxxxxxx/
> >
> > Note that I am both the author of the patch, and the maintainer
> > pushing back on it. Please chime in if you think there are reasons why
> > we want this, something like this or nothing like this.
> >
> Hello Ard,
>
> looking at this thread it is hard to understand why this patch should be
> needed.
>
> If an UEFI application does not want to consume a service, it can do so
> without having to manipulate the RT properties table.
>
> Which UEFI applications are broken? Why can't they be fixed instead of
> patching the kernel?
>
> Can we have complete descriptions of the deficiencies of the involved
> applications. I saw GRUB and the Debian installer mentioned in the
> thread. Are there others?
>

The problem is that the proprietary EDK2 / UEFI firmware on Qualcomm
Snapdragon based laptops that were built to run Windows does not
implement get/setvariable after ExitBootServices. Instead, every call
to any of the variable services returns with an EFI_UNSUPPORTED error.

The correct way to address this is a RT_PROP table that encodes this
behavior, and this is what we added in the special DtbLoader driver
that is used to boot Linux in DT mode (as the firmware only implements
ACPI support). So for systems that can/will run DtbLoader, the problem
is solved.

What remains is ACPI boot, or boot modes where DtbLoader does not
work. In those cases, it would be useful to have another way to convey
this information to the OS in a way that does not rely on the kernel
command line.

But thinking about this, perhaps we should be fixing this in
efibootmgr instead. EFI_UNSUPPORTED is a valid and documented return
code that conveys that the operation did not fail with an error, but
that efibootmgr is not supported to begin with on the platform in
question.



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux