public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Olof Johansson <olof@lixom.net>
Cc: Mark Brown <broonie@linaro.org>,
	Catalin Marinas <Catalin.Marinas@arm.com>,
	Will Deacon <Will.Deacon@arm.com>, Lv Zheng <lv.zheng@intel.com>,
	Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Robert Moore <robert.moore@intel.com>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"grant.likely@linaro.org" <grant.likely@linaro.org>,
	Charles Garcia-Tobin <Charles.Garcia-Tobin@arm.com>,
	Robert Richter <rric@kernel.org>,
	Jason Cooper <jason@lakedaemon.net>,
	Arnd Bergmann <arnd@arndb.de>,
	Marc Zyngier <Marc.Zyngier@arm.com>,
	Liviu Dudau <Liviu.Dudau@arm.com>,
	"linaro-acpi-private@linaro.org" <linaro-acpi-private@linaro.org>,
	Bjorn Helgaas <bhelgaas@google.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"graeme.gregory@linaro.org" <graeme.gregory@linaro.org>,
	Randy Dunlap <rdunlap@infradea>
Subject: Re: [PATCH 19/19] Documentation: ACPI for ARM64
Date: Mon, 28 Jul 2014 18:00:41 +0100	[thread overview]
Message-ID: <20140728170041.GB2576@leverpostej> (raw)
In-Reply-To: <20140728162750.GB32359@quad.lixom.net>

On Mon, Jul 28, 2014 at 05:27:50PM +0100, Olof Johansson wrote:
> On Mon, Jul 28, 2014 at 11:07:50AM +0200, Arnd Bergmann wrote:
> > On Saturday 26 July 2014 19:34:48 Olof Johansson wrote:
> > > On Thu, Jul 24, 2014 at 6:00 AM, Hanjun Guo <hanjun.guo@linaro.org> wrote:
> > > > +Relationship with Device Tree
> > > > +-----------------------------
> > > > +
> > > > +ACPI support in drivers and subsystems for ARMv8 should never be mutually
> > > > +exclusive with DT support at compile time.
> > > > +
> > > > +At boot time the kernel will only use one description method depending on
> > > > +parameters passed from the bootloader.
> > > 
> > > Possibly overriden by kernel bootargs. And as debated for quite a
> > > while earlier this year, acpi should still default to off -- if a DT
> > > and ACPI are both passed in, DT should at this time be given priority.
> > 
> > I think this would be harder to do with the way that ACPI is passed in
> > to the kernel. IIRC, you always have a minimal DT information based on
> > the ARM64 boot protocol, but in the case of ACPI, this contains pointers
> > to the ACPI tables, which are then used for populating the Linux platform
> > devices (unless acpi=disabled is set), while the other contents of the
> > DTB may be present but we skip the of_platform_populate state.
> 
> How can it be harder to do? If you support acpi=off, then you should support
> acpi=on.
> 
> Another alternative would be to have an early fixup that stubs out
> the acpi properties from the DTB unless there's an 'acpi' or 'acpi=on'
> argument on the cmdline. Not quite as tidy a solution, though.

I don't follow:

If you want to disable ACPI, you can pass acpi=off. This is your
workaround for broken ACPI (and only if you happen to have wrirten your
own DTB, because many/most ACPI systems WILL NOT have a DTB to begin
with).

If you have ACPI, for what technical reason would you not attempt to use
it by default?

There will be systems which _DO NOT_ have any sort of DTB to begin with.
For VMs, both may be provided. By the necessity of a DTB being present
for bootargs, ACPI _MUST_ take precedence. If you don't want it, you
pass acpi=off, or configure your VM software to not pass an ACPI
configuration table.

Why avoid ACPI by default? So that we can later enable it and discover
it's completely broken? Then we need short-sighted hacks to work around
short-sighted decisions.

The best thing to do is to try and use things, be as strict as possible,
stress the implementation, and blow up early and loudly so that said
systems must be fixed.

People are using Linux for bringup; it is the closest thing to a
validation suite. Being lazy and hacking around things for now will only
make things worse in the long run.

We _CANNOT_ place our fingers in our ears and blind ourselves with the
DT banner. ACPI is ugly, sure, but so is DT. Neither is fundamentally
better than the other. The best thing we can do is make it as easy as
possible to highlight bugs in ACPI implementations and barf such that
people are forced to fix their ACPI implementations.

No other OS supports ACPI on 64-bit arm systems. Being strict should
force implementors to try harder.

> > If this is correct, then replacing the firmware-generated dtb with a
> > user-provided on would implicitly remove the ACPI tables from visibility,
> > which is exactly what we want.
> 
> I was of the impression that firmware patches in the ACPI entries into either
> device-tree before launching the kernel. Is that not the case?

1) The ACPI tables will be registered as UEFI configuration tables,
   within platform-specific UEFI code. Nothing outside of UEFI is
   involved.

1a) A loader (e.g. GRUB, the EFI stub) COULD override the loaded tables.
   This is a workaround, and should never be the standard way of doing
   things. It defeats the point, much like appended DTB.

2) The EFI stub will patch UEFI memory map properties into the DTB. The
   firmware is not involved.

3) The kernel will detect whether EFI is present by the presence of the
   memory map, and try to use it if so. The memory map comes from UEFI,
   and memory nodes (and memreserves) are ignored. Only select
   properties under /chosen (e.g. bootargs) will be used.

4) If booted via EFI, the kernel will look for known UEFI configuration
   tables by (G|U)UID, and set up some pointers.

5) The ACPI code will go and look to see if the ACPI table pointers have
   been initialised. If so, the kernel will attempt to use the ACPI
   tables unlesss instructed otherwise. If using ACPI, the DTB will be
   ignored outside of /chosen.

The ACPI tables or pointers to them are not directly patched into the
DTB at any stage. The choice of using ACPI is left with the kernel.

> And what if some bootloader chooses to do it that way in the future?
> It's better to not assume that they get it right.

For the firmware/loader to do so it would have to work around the kernel
version parameter the stub places in the DTB and the kernel verifies. If
it does so, I would argue said firmware is actively malicious.

> > It's possible that I'm misremembering it though, and it should be
> > documented better.
> 
> Yes, definitely needs to be documented to not leave room for random
> interpretation later on.

We should definitely make the documentation as strict as possible on
what's allowed, and have the kernel barf early on if requirements are
not met.

Thanks,
Mark.

  reply	other threads:[~2014-07-28 17:00 UTC|newest]

Thread overview: 131+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-24 13:00 [PATCH 00/19] Introduce ACPI for ARM64 based on ACPI 5.1 Hanjun Guo
2014-07-24 13:00 ` [PATCH 01/19] ARM64 / ACPI: Get RSDP and ACPI boot-time tables Hanjun Guo
2014-07-28 18:29   ` Sudeep Holla
2014-07-28 22:49     ` Graeme Gregory
2014-07-29  8:49       ` Sudeep Holla
2014-07-29 13:08     ` Hanjun Guo
2014-07-29 13:50       ` Sudeep Holla
2014-07-29 14:07         ` Hanjun Guo
2014-07-28 18:30   ` Sudeep Holla
2014-07-24 13:00 ` [PATCH 02/19] ARM64 / ACPI: Introduce early_param for "acpi" Hanjun Guo
2014-07-28 18:35   ` Sudeep Holla
2014-07-29 13:10     ` Hanjun Guo
2014-07-24 13:00 ` [PATCH 03/19] ARM64 / ACPI: Introduce lowlevel suspend function Hanjun Guo
2014-07-24 15:34   ` Mark Rutland
2014-07-25 10:42     ` Hanjun Guo
2014-07-28 18:28   ` Sudeep Holla
2014-07-29 13:00     ` Hanjun Guo
2014-07-24 13:00 ` [PATCH 04/19] ARM64 / ACPI: Introduce arch_fix_phys_package_id() for cpu topology Hanjun Guo
2014-07-24 14:43   ` Mark Brown
2014-07-25 10:32     ` Hanjun Guo
2014-07-28 18:51   ` Sudeep Holla
2014-08-01  6:35     ` Hanjun Guo
2014-08-01 10:48       ` Sudeep Holla
2014-07-24 13:00 ` [PATCH 05/19] ARM64 / ACPI: Make PCI optional for ACPI on ARM64 Hanjun Guo
2014-07-24 21:57   ` Naresh Bhat
2014-07-29 16:40   ` Sudeep Holla
2014-07-24 13:00 ` [PATCH 06/19] ARM64 / ACPI: Parse FADT table to get PSCI flags for PSCI init Hanjun Guo
2014-07-29 16:40   ` Sudeep Holla
2014-07-31  3:53     ` Hanjun Guo
2014-07-31  4:22   ` Olof Johansson
2014-07-31 10:23     ` Hanjun Guo
2014-08-20 15:02       ` Grant Likely
2014-08-20 15:00   ` Grant Likely
2014-08-20 15:29     ` Catalin Marinas
2014-08-20 15:43       ` graeme.gregory
2014-07-24 13:00 ` [PATCH 07/19] ARM64 / ACPI: Parse MADT to map logical cpu to MPIDR and get cpu_possible/present_map Hanjun Guo
2014-07-24 23:06   ` Naresh Bhat
2014-07-25 11:11     ` Hanjun Guo
2014-07-30 18:20   ` Sudeep Holla
2014-07-31  8:14     ` Hanjun Guo
2014-08-20 15:14   ` Grant Likely
2014-07-24 13:00 ` [PATCH 08/19] ACPI / table: Print GIC information when MADT is parsed Hanjun Guo
2014-07-30 18:21   ` Sudeep Holla
2014-07-31  8:15     ` Hanjun Guo
2014-07-24 13:00 ` [PATCH 09/19] ARM64 / ACPI: Move the initialization of cpu_logical_map(0) before acpi_boot_init() Hanjun Guo
2014-07-24 15:21   ` Mark Rutland
2014-07-25 10:39     ` Hanjun Guo
2014-07-25 12:18       ` Mark Rutland
2014-07-24 13:00 ` [PATCH 10/19] ARM64 / ACPI: Get the enable method for SMP initialization in ACPI way Hanjun Guo
2014-07-24 15:47   ` Mark Rutland
2014-07-25 10:51     ` Hanjun Guo
2014-07-25 12:24       ` Mark Rutland
2014-07-29  8:12         ` Hanjun Guo
2014-07-31  6:54   ` Olof Johansson
2014-07-31 10:57     ` Hanjun Guo
2014-08-04  9:56       ` Hanjun Guo
2014-07-31 18:52   ` Geoff Levand
2014-08-01  6:49     ` Hanjun Guo
2014-07-24 13:00 ` [PATCH 11/19] ACPI / processor: Make it possible to get CPU hardware ID via GICC Hanjun Guo
2014-07-24 13:00 ` [PATCH 12/19] ARM64 / ACPI: Introduce ACPI_IRQ_MODEL_GIC and register device's gsi Hanjun Guo
2014-07-24 13:00 ` [PATCH 13/19] ACPI / table: Add new function to get table entries Hanjun Guo
2014-07-24 13:00 ` [PATCH 14/19] ARM64 / ACPI: Add GICv2 specific ACPI boot support Hanjun Guo
2014-07-24 13:00 ` [PATCH 15/19] ARM64 / ACPI: Parse GTDT to initialize arch timer Hanjun Guo
2014-07-24 13:00 ` [PATCH 16/19] ARM64 / ACPI: Select ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on ARM64 Hanjun Guo
2014-07-24 13:00 ` [PATCH 17/19] ARM64 / ACPI: If we chose to boot from acpi then disable FDT Hanjun Guo
2014-07-24 13:00 ` [PATCH 18/19] ARM64 / ACPI: Enable ARM64 in Kconfig Hanjun Guo
2014-07-24 13:00 ` [PATCH 19/19] Documentation: ACPI for ARM64 Hanjun Guo
2014-07-24 20:42   ` Randy Dunlap
2014-07-25 10:55     ` Hanjun Guo
     [not found]   ` <CAFoFrHaWWxRPRYM5+bWj0tGnz05SokqwVGejUCUi+U-KChFBdQ@mail.gmail.com>
2014-07-24 21:19     ` Randy Dunlap
2014-07-29 10:07       ` Christoffer Dall
2014-07-27  2:34   ` Olof Johansson
2014-07-28  8:42     ` Graeme Gregory
2014-07-28 16:23       ` Olof Johansson
2014-07-28 17:44         ` Mark Brown
2014-07-28  9:07     ` Arnd Bergmann
2014-07-28  9:23       ` Graeme Gregory
2014-07-28 10:46         ` Arnd Bergmann
2014-07-28 14:20           ` Andre Przywara
2014-07-28 15:23             ` Arnd Bergmann
2014-07-28 16:14               ` Andre Przywara
2014-07-29  9:17                 ` Graeme Gregory
2014-07-29 10:07                   ` Arnd Bergmann
2014-07-28 10:12       ` Mark Rutland
2014-07-28 16:33         ` Olof Johansson
2014-07-28 18:37           ` Mark Rutland
2014-07-28 18:44             ` Olof Johansson
2014-07-28 16:27       ` Olof Johansson
2014-07-28 17:00         ` Mark Rutland [this message]
2014-07-28 18:27           ` Olof Johansson
2014-08-12 18:23             ` Catalin Marinas
2014-08-13 23:41               ` Rafael J. Wysocki
2014-08-14  3:21                 ` Hanjun Guo
2014-08-14 10:27                   ` Catalin Marinas
2014-08-14 20:53                     ` Arnd Bergmann
2014-08-15  1:02                       ` Olof Johansson
2014-08-15 19:49                         ` Arnd Bergmann
2014-08-15 23:19                           ` Mark Brown
2014-08-16 12:51                           ` graeme.gregory
2014-08-15  9:09                     ` Hanjun Guo
2014-08-15 10:01                       ` Catalin Marinas
2014-08-18  9:29                         ` Hanjun Guo
2014-08-18 12:49                           ` Mark Rutland
2014-08-20 22:17                           ` Olof Johansson
2014-08-21  4:00                             ` Hanjun Guo
2014-07-29  9:01       ` Hanjun Guo
2014-07-28 10:06     ` Mark Rutland
2014-07-28 16:44       ` Olof Johansson
2014-07-28 17:36         ` Mark Rutland
2014-07-28 18:34           ` Olof Johansson
2014-07-29 10:29         ` Christoffer Dall
2014-07-29 10:41           ` Arnd Bergmann
2014-07-29 10:55           ` Mark Rutland
2014-07-29 11:28             ` Mark Rutland
2014-07-29 12:37               ` Christoffer Dall
2014-07-29 12:52                 ` Arnd Bergmann
2014-07-29 13:08                   ` Mark Rutland
2014-07-29 13:31                     ` Christoffer Dall
2014-07-29 14:04                       ` Mark Rutland
2014-07-29 14:41                       ` Arnd Bergmann
2014-07-29 15:01                         ` Christoffer Dall
2014-07-30  6:47                       ` Hanjun Guo
2014-07-30  7:14                         ` Christoffer Dall
2014-07-30  9:36                           ` Hanjun Guo
2014-07-29 13:33                   ` Christoffer Dall
2014-07-29  7:58     ` Hanjun Guo
2014-07-29 10:30   ` Christoffer Dall
2014-08-15 22:43   ` Len Brown
2014-08-16 12:45     ` Graeme Gregory
2014-08-20 16:42   ` Grant Likely
2014-07-25  0:46 ` [PATCH 00/19] Introduce ACPI for ARM64 based on ACPI 5.1 Hanjun Guo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140728170041.GB2576@leverpostej \
    --to=mark.rutland@arm.com \
    --cc=Catalin.Marinas@arm.com \
    --cc=Charles.Garcia-Tobin@arm.com \
    --cc=Liviu.Dudau@arm.com \
    --cc=Lorenzo.Pieralisi@arm.com \
    --cc=Marc.Zyngier@arm.com \
    --cc=Will.Deacon@arm.com \
    --cc=arnd@arndb.de \
    --cc=bhelgaas@google.com \
    --cc=broonie@linaro.org \
    --cc=daniel.lezcano@linaro.org \
    --cc=graeme.gregory@linaro.org \
    --cc=grant.likely@linaro.org \
    --cc=jason@lakedaemon.net \
    --cc=linaro-acpi-private@linaro.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=lv.zheng@intel.com \
    --cc=olof@lixom.net \
    --cc=rdunlap@infradea \
    --cc=robert.moore@intel.com \
    --cc=rric@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox