Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp372116imm; Thu, 13 Sep 2018 23:06:51 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaDPsyj4hOEDOO9EIQah3RJcksHrT+tY7c3qBvR2krDDL9i8Xls/LkkdLW7FM6Vouz9ufko X-Received: by 2002:a63:2c8e:: with SMTP id s136-v6mr10415669pgs.390.1536905211015; Thu, 13 Sep 2018 23:06:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536905210; cv=none; d=google.com; s=arc-20160816; b=WS/SWMGxDLWV6aEu1WQ2xBe01PXnA82BCUcYF0lqhwQ4zFvRDn8ctX/nlXERTCjl4v LCD1OKnArZ1mH7ujH+xOwDTv3MwU9HETpvBGGO8Ml3j20x0Zos74qnBpxXYryq64s2Yr QsC1M03mzo2XfdE+xJClLB8Ekb2fgSvuQJfJqBhlxTWemCM2BoaqKs7lVBSLGghpwIEB wVBoPd44ExIGA34SRt6xVyJeIJxuwwjzghkVbiIVgSREcb9ozbuV5t38XUjSsIOJLFch YCaoELmMmwvz+42xtK+fLkLlUFWny3ylg68lKG59AnXuDlANbnm7uTgaN2XvfS64greS CZSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature; bh=6PEXrdB+bkTt5iBdGDhJBjbMSZvnH2ICoskjcEDa2fs=; b=TuXAKMHWwNpz2nowhSjjqhtJQgFaFvawNbc+cAeMxsOIRNLL9AUVKGP0fovIJQHS24 /3xtFIJemF4+Evf1bIkxPcaJ8fjigQ4t3+ZIbS3yGwt4lF1L58PtpExD0EDup/w9JDJL vyfM4BYDbxebVWOqNEUBDw4Wzt7GJlzb8hPOBbKL4oIzOU/L0Llz9nFZ941ofX8xQ7rU BOHJDMqHcN0Ul4RC8pKHWEdm+2KYSnWxQZcnl0u535uMaFlfG2aH9e1512i4efRivGO9 8INkkT89zlaUej7sUyOvBP4DXiW57EWyEZU+ENqw2tYSOPol74iN+BhSnulDYWtn7V3z KpiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ekdblj+u; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d9-v6si6538217pfk.166.2018.09.13.23.06.35; Thu, 13 Sep 2018 23:06:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Ekdblj+u; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727670AbeINLTO (ORCPT + 99 others); Fri, 14 Sep 2018 07:19:14 -0400 Received: from mail-io1-f68.google.com ([209.85.166.68]:42282 "EHLO mail-io1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726891AbeINLTO (ORCPT ); Fri, 14 Sep 2018 07:19:14 -0400 Received: by mail-io1-f68.google.com with SMTP id n18-v6so5100554ioa.9 for ; Thu, 13 Sep 2018 23:06:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=6PEXrdB+bkTt5iBdGDhJBjbMSZvnH2ICoskjcEDa2fs=; b=Ekdblj+uki3AMwv5JhASQlukP+bwRJ11W8ncxg5x5jbmtEigyj7S0tzkS1Lm8UFB1y L1ElBMsUEjVmjezU1k3PP6jziglmRbXGkZFZnN5WAMec5vaKPrj3a++zZVPltK4HZm8u X7qA9EDl5M3fE3URVfxrUlJPE+IJH4mYfXKFA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=6PEXrdB+bkTt5iBdGDhJBjbMSZvnH2ICoskjcEDa2fs=; b=OKa6CHm63CvAoQvHqjsmK66dNOmhn6N5dsTqIRkmF3u7TeYEReQXZ8uU25hqlAyNuN Jg0PmQ07BMlwJ2CFBnbZ/m6IurQW1RYKuema5oZkTYK50opGxtUq+61IG1TTxhhj71zw 1KOjkpgEyVoXo3owN4lDsOI9K0581sQOvEZhpF3KOB4W7EB/Cc8CiCtzcVPS4xWgGRgT XByumS7BGSVxPhdl8kY+7zdY6vk7FxfwJYn+xqDHU6apQr8Zalo8aqdYeqAZolMyLVzj Ww3F3alSAPkye/4mkW9gyWDYiNBdKjggR/4bl3cfevY7JGKSRcsvXWHzSqY0neITyLu8 40xQ== X-Gm-Message-State: APzg51BHtg7o4SR/694xM6LMU95b3bRQg8gMZouyXlSp0im5v3UTyXnZ 3zRwaUnhjPmu7cIn0KxvmLFjxnYUz1jOuzwpdUAKow== X-Received: by 2002:a6b:ba86:: with SMTP id k128-v6mr8797396iof.170.1536905179571; Thu, 13 Sep 2018 23:06:19 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a6b:2848:0:0:0:0:0 with HTTP; Thu, 13 Sep 2018 23:06:18 -0700 (PDT) In-Reply-To: References: <1535563287-24803-1-git-send-email-scott.branden@broadcom.com> <1946321c-704c-f800-1007-b720d6c7f162@broadcom.com> From: Ard Biesheuvel Date: Fri, 14 Sep 2018 08:06:18 +0200 Message-ID: Subject: Re: [PATCH] arm64: defconfig: enable EFI_ARMSTUB_DTB_LOADER To: Scott Branden Cc: Olof Johansson , Grant Likely , Catalin Marinas , Will Deacon , Arnd Bergmann , Broadcom Kernel Feedback List , Linux ARM , Linux Kernel Mailing List , Leif Lindholm , Alexander Graf Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 13 September 2018 at 22:22, Scott Branden wrote: > > > On 18-09-10 11:08 AM, Ard Biesheuvel wrote: >> >> On 10 September 2018 at 20:01, Olof Johansson wrote: >>> >>> On Mon, Sep 10, 2018 at 10:53 AM, Scott Branden >>> wrote: >>>> >>>> Olof/All, >>>> >>>> >>>> On 18-09-04 03:13 AM, Grant Likely wrote: >>>>> >>>>> Hey folks. More comments below, but the short answer is I really don't >>>>> see what the problem is. Distros cannot easily support platforms that >>>>> require a dtb= parameter, and so they probably won't. They may or may >>>>> not disable 'dtb=', depending on whether they see it as valuable for >>>>> debug. >>>>> >>>>> Vertically integrated platforms are a different beast. We may strongly >>>>> recommend firmware provides the dtb for all the mentioned good >>>>> reasons, but they still get to decide their deployment methodology, >>>>> and it is not burdensome for the kernel to keep the dtb= feature that >>>>> they are using. >>>>> >>>>> On Tue, Sep 4, 2018 at 7:24 AM Ard Biesheuvel >>>>> >>>>> wrote: >>>>>> >>>>>> On 2 September 2018 at 04:54, Olof Johansson wrote: >>>>>>> >>>>>>> On Thu, Aug 30, 2018 at 9:23 AM, Ard Biesheuvel >>>>>>> wrote: >>>>>>>> >>>>>>>> On 30 August 2018 at 17:06, Olof Johansson wrote: >>>>>>>>> >>>>>>>>> On Wed, Aug 29, 2018 at 10:54 PM, Ard Biesheuvel >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> On 29 August 2018 at 20:59, Scott Branden >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> Hi Olof, >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On 18-08-29 11:44 AM, Olof Johansson wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hi, >>>>>>>>>>>> >>>>>>>>>>>> On Wed, Aug 29, 2018 at 10:21 AM, Scott Branden >>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> Enable EFI_ARMSTUB_DTB_LOADER to add support for the dtb= >>>>>>>>>>>>> command >>>>>>>>>>>>> line >>>>>>>>>>>>> parameter to function with efi loader. >>>>>>>>>>>>> >>>>>>>>>>>>> Required to boot on existing bootloaders that do not support >>>>>>>>>>>>> devicetree >>>>>>>>>>>>> provided by the platform or by the bootloader. >>>>>>>>>>>>> >>>>>>>>>>>>> Fixes: 3d7ee348aa41 ("efi/libstub/arm: Add opt-in Kconfig >>>>>>>>>>>>> option >>>>>>>>>>>>> for the >>>>>>>>>>>>> DTB loader") >>>>>>>>>>>>> Signed-off-by: Scott Branden >>>>>>>>>>>> >>>>>>>>>>>> Why did Ard create an option for this if it's just going be >>>>>>>>>>>> turned >>>>>>>>>>>> on >>>>>>>>>>>> in default configs? Doesn't make sense to me. >>>>>>>>>>>> >>>>>>>>>>>> It would help to know what firmware still is crippled and how >>>>>>>>>>>> common >>>>>>>>>>>> it is, since it's been a few years that this has been a >>>>>>>>>>>> requirement >>>>>>>>>>>> by >>>>>>>>>>>> now. >>>>>>>>>>> >>>>>>>>>>> Broadcom NS2 and Stingray in current development and production >>>>>>>>>>> need >>>>>>>>>>> this >>>>>>>>>>> option in the kernel enabled in order to boot. >>>>>>>>>> >>>>>>>>>> And these production systems run mainline kernels in a defconfig >>>>>>>>>> configuration? >>>>>>>>>> >>>>>>>>>> The simply reality is that the DTB loader has been deprecated for >>>>>>>>>> a >>>>>>>>>> good reason: it was only ever intended as a development hack >>>>>>>>>> anyway, >>>>>>>>>> and if we need to treat the EFI stub provided DTB as a first class >>>>>>>>>> citizen, there are things we need to fix to make things works as >>>>>>>>>> expected. For instance, GRUB will put a property in the /chosen >>>>>>>>>> node >>>>>>>>>> for the initramfs which will get dropped if you boot with dtb=. >>>>>>>>>> >>>>>>>>>> Don't be surprised if some future enhancements of the EFI stub >>>>>>>>>> code >>>>>>>>>> depend on !EFI_ARMSTUB_DTB_LOADER. >>>>> >>>>> That's an odd statement to make. The DTB loader code is well contained >>>>> and with defined semantics... True, the semantics are "I DON'T BELIEVE >>>>> FIRMWARE", but it is still well defined. What scenario are you >>>>> envisioning where EFI_ARMSTUB_DTB_LOADER would be explicitly excluded? >>>>> >>>>> Conversely, the dtb= argument is an invaluable debug tool during >>>>> development. As Olof has already said, there are a lot of embedded >>>>> deployments where there is no desire for grub or any other >>>>> intermediary loader. >>>>> >>>>>>>>>> On UEFI systems, DTBs [or ACPI >>>>>>>>>> tables] are used by the firmware to describe itself and the >>>>>>>>>> underlying >>>>>>>>>> platform to the OS, and the practice of booting with DTB file >>>>>>>>>> images >>>>>>>>>> (taken from the kernel build as well) conflicts with that view. >>>>>>>>>> Note >>>>>>>>>> that GRUB still permits you to load DTBs from files (and supports >>>>>>>>>> more >>>>>>>>>> sources than just the file system the kernel Image was loaded >>>>>>>>>> from). >>>>>>>>> >>>>>>>>> Ard, >>>>>>>>> >>>>>>>>> Maybe a WARN() splat would be more useful as a phasing-out method >>>>>>>>> than >>>>>>>>> removing functionality for them that needs to be reinstated through >>>>>>>>> changing the config? >>>>>>>>> >>>>>>>> We don't have any of that in the stub, and inventing new ways to >>>>>>>> pass >>>>>>>> such information between the stub and the kernel proper seems like a >>>>>>>> cart-before-horse kind of thing to me. The EFI stub diagnostic >>>>>>>> messages you get on the serial console are not recorded in the >>>>>>>> kernel >>>>>>>> log buffer, so they only appear if you actually look at the serial >>>>>>>> output. >>>>> >>>>> As an aside, they probably should be recorded. That is probably a >>>>> question for the UEFI USWG. Grub and the ARMSTUB could probably bodge >>>>> something together, but that would be non-standard. >>>>> >>>>>>> Ah yeah. I suppose you could do it in the kernel later if you detect >>>>>>> you've booted through EFI with dtb= on the command line though. >>>>>>> >>>>>>>>> Once the stub and the boot method is there, it's hard to undo as we >>>>>>>>> can see here. Being loud and warn might be more useful, and set a >>>>>>>>> timeline for hard removal (12 months?). >>>>>>>>> >>>>>>>> The dtb= handling is still there, it is just not enabled by default. >>>>>>>> We can keep it around if people are still using it. But as I pointed >>>>>>>> out, we may decide to make new functionality available only if it is >>>>>>>> disabled, and at that point, we'll have to choose between one or the >>>>>>>> other in defconfig, which is annoying. >>>>>>>> >>>>>>>>> Scott; an alternative for you is to do a boot wrapper that bundles >>>>>>>>> a >>>>>>>>> DT and kernel, and boot that instead of the kernel image (outside >>>>>>>>> of >>>>>>>>> the kernel tree). Some 32-bit platforms from Marvell use that. That >>>>>>>>> way the kernel will just see it as a normally passed in DT. >>>>>>>>> >>>>>>>> Or use GRUB. It comes wired up in all the distros, and let's you >>>>>>>> load >>>>>>>> a DT binary from anywhere you can imagine, as opposed to the EFI >>>>>>>> stub >>>>>>>> which can only load it if it happens to reside in the same file >>>>>>>> system >>>>>>>> (or even directory - I can't remember) as the kernel image. Note >>>>>>>> that >>>>>>>> the same reservations apply to doing that - the firmware is no >>>>>>>> longer >>>>>>>> able to describe itself to the OS via the DT, which is really the >>>>>>>> only >>>>>>>> conduit it has available on an arm64 system.. >>>>>>> >>>>>>> So, I've looked at the history here a bit, and dtb= support was >>>>>>> introduced in 2014. Nowhere does it say that it isn't a recommended >>>>>>> way of booting. >>>>>>> >>>>>>> There are some firmware stacks today that modify and provide a >>>>>>> runtime-updated devicetree to the kernel, but there are also a bunch >>>>>>> who don't. Most "real" products will want a firmware that knows how >>>>>>> to >>>>>>> pass in things such as firmware environment variables, or MAC >>>>>>> addresses, etc, to the kernel, but not all of them need it. >>>>>>> >>>>>>> In particular, in a world where you want EFI to be used on embedded >>>>>>> platforms, requiring another bootloader step such as GRUB to be able >>>>>>> to reasonably boot said platforms seems like a significant and >>>>>>> unfortunate new limitation. Documentation/efi-stub.txt has absolutely >>>>>>> no indication that it is a second-class option that isn't expected to >>>>>>> be available everywhere. It doesn't really matter what _your_ >>>>>>> intention was around it, if those who use it never found out and now >>>>>>> rely on it. >>>>>>> >>>>>>> Unfortunately the way forward here is to revert 3d7ee348aa4127a. >>>> >>>> What's the path forward? Revert, defconfig change (this patch), or >>>> Kconfig >>>> default addition? >>> >>> Revert or Kconfig select, and a Kconfig select means that the option >>> is a dead one anyway so we might as well revert. >>> >> I disagree. Making it default y is fine by me, but please don't remove it. >> >>> Ard, do you have other fixes lined up or should we take the patch >>> through arm-soc? >>> >> I don't have any fixes but either way is fine. > > I submitted the version of the patch Ard requested here for somebody to pick > up. > https://lore.kernel.org/patchwork/patch/984521/ > Thanks Scott. I will pick it up as a EFI fix.