From: lorenzo.pieralisi@arm.com (Lorenzo Pieralisi)
To: linux-arm-kernel@lists.infradead.org
Subject: [Linaro-acpi] [PATCH v8 11/21] ARM64 / ACPI: Get PSCI flags in FADT for PSCI init
Date: Fri, 6 Feb 2015 16:21:20 +0000 [thread overview]
Message-ID: <20150206162120.GA32566@red-moon> (raw)
In-Reply-To: <54D47397.8020904@linaro.org>
On Fri, Feb 06, 2015 at 07:56:07AM +0000, Hanjun Guo wrote:
> Hi Lorenzo, Al,
>
> On 2015?02?06? 03:03, Al Stone wrote:
> > On 02/05/2015 10:49 AM, Lorenzo Pieralisi wrote:
> >> Hi Al,
> >
> > Howdy, Lorenzo.
> >
> >> On Thu, Feb 05, 2015 at 05:11:31PM +0000, Al Stone wrote:
> >>> On 02/04/2015 09:43 AM, Lorenzo Pieralisi wrote:
> >>>> On Mon, Feb 02, 2015 at 12:45:39PM +0000, Hanjun Guo wrote:
> >>>>> From: Graeme Gregory <graeme.gregory@linaro.org>
> >>>>>
> >>>>> There are two flags: PSCI_COMPLIANT and PSCI_USE_HVC. When set,
> >>>>> the former signals to the OS that the firmware is PSCI compliant.
> >>>>> The latter selects the appropriate conduit for PSCI calls by
> >>>>> toggling between Hypervisor Calls (HVC) and Secure Monitor Calls
> >>>>> (SMC).
> >>>>>
> >>>>> FADT table contains such information in ACPI 5.1, FADT table was
> >>>>> parsed in ACPI table init and copy to struct acpi_gbl_FADT, so
> >>>>> use the flags in struct acpi_gbl_FADT for PSCI init.
> >>>>
> >>>> So you do rely on a global FADT being available, if you use it for PSCI
> >>>> detection you can use it for ACPI revision detection too, right ?
> >>>>
> >>>> Point is, either we should not use the global FADT table, or we use
> >>>> it consistently, or there is something I am unaware of that prevents
> >>>> you from using in some code paths and I would like to understand
> >>>> why.
> >>>
> >>> The FADT is a required table for arm64, as noted in the documentation
> >>> and the SBBR. While unfortunately the spec does not say it is mandatory,
> >>> even x86 systems are pretty useless without it. So yes, we rely on it
> >>> being available, not only for the PSCI info, but other flags such as
> >>> HW_REDUCED_ACPI.
> >>>
> >>> I suppose it does not have to be globally scoped. However, the FADT is
> >>> frequently used, especially on x86, so it makes sense to me from an
> >>> efficiency standpoint to have a global reference to it.
> >>>
> >>> I'm not sure I understand what is meant by using FADT for ACPI revision
> >>> detection; there are fields in the FADT that provide a major and minor
> >>> number for the FADT itself, but I don't believe there's any guarantee
> >>> those will be the same as the level of the specification that is being
> >>> supported by the kernel (chances are they will, but it's not mandatory).
> >>>
> >>> I've probably just missed a part of a thread somewhere; could you point
> >>> me to where the inconsistency lies? I'm just not understanding right this
> >>> second....
> >>
> >> Yes, it is my fault, I was referring to another thread/patch (9), where you
> >> need to check the FADT revision to "validate it" (ie >= 5.1) for the arm64
> >> kernel. What I am saying is: if the global FADT is there to parse PSCI
> >> info, it is there to check the FADT revision too, I do not necessarily
> >> see the need for calling acpi_table_parse() again to do it, the FADT
> >> revision checking can be carried out as for PSCI, that's all I wanted
> >> to say.
> >
> > Aha. I understand now. Another colleague was also trying to explain this
> > to me and I think I just hadn't had enough coffee yet. The underlying ACPI
> > code maps tables into the kernel in two phases; it may be that when the code
> > in patch 9 is run, the global table is not yet available, while here it is;
> > I don't recall off-hand.
> >
> > I'll take a look at this and talk it over with Hanjun. If the global table
> > is available, it would indeed make sense to be consistent.
>
> I had dig into the code and found out that struct acpi_gbl_FADT will be
> available with correct value only if FADT is presented by firmware.
>
> acpi_table_init() will be called before parsing FADT for PSCI flag in
> this patch set.
>
> In acpi_table_init()
> acpi_initialize_tables()
> acpi_tb_parse_root_table()
>
> In acpi_tb_parse_root_table()
>
> if (ACPI_SUCCESS(status) &&
> ACPI_COMPARE_NAME(&acpi_gbl_root_table_list.
> tables[table_index].signature,
> ACPI_SIG_FADT)) {
> acpi_tb_parse_fadt(table_index);
> }
>
> And acpi_tb_parse_fadt(table_index) will copy the
> fadt table to global struct acpi_gbl_FADT.
>
> so it seems that we can use global struct acpi_gbl_FADT directly to
> check the FADT revision, but it is only available with firmware
> presented the FADT table, so check for the FADT table is still needed
> for some bad firmware without FADT.
>
> Why PSCI flag can be used without any check for the availability
> of FADT? because we already disable ACPI if
> (acpi_table_parse(ACPI_SIG_FADT, acpi_parse_fadt))
> failed (no FADT tabled found), and PSCI flag will not be used
> later.
>
> So I think we can keep the code as it is for now, and I think
> it is the safest way to do it, does it make sense?
Understood. Basically, given current ACPI code, you have to call
acpi_table_parse() to make sure FADT is there, even if the handler
to parse it can be left to a void empty function, and while at it
within the handler passed to acpi_table_parse() you check the
revision; it makes sense but we end up having disable_acpi() scattered
all over the place.
You can leave your code as it is, or we check with Rafael if
acpi_table_parse() can be made to propagate the handler return value,
my fear is that the acpi_table_parse() is not expected to return
failure if the handler fails, only if table is not found, I will have
a look into this.
Thanks,
Lorenzo
next prev parent reply other threads:[~2015-02-06 16:21 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-02 12:45 [PATCH v8 00/21] Introduce ACPI for ARM64 based on ACPI 5.1 Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 01/21] acpi: add arm64 to the platforms that use ioremap Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 02/21] acpi: fix acpi_os_ioremap for arm64 Hanjun Guo
2015-02-02 22:14 ` Rafael J. Wysocki
2015-02-03 9:08 ` Hanjun Guo
2015-02-03 11:37 ` Catalin Marinas
2015-02-03 11:41 ` Ard Biesheuvel
2015-02-03 17:29 ` Mark Salter
2015-02-03 22:04 ` Rafael J. Wysocki
2015-02-04 10:48 ` Russell King - ARM Linux
2015-02-04 13:22 ` Rafael J. Wysocki
2015-02-04 15:53 ` Bjorn Helgaas
2015-02-04 16:25 ` Russell King - ARM Linux
2015-02-04 16:38 ` David Woodhouse
2015-02-04 16:41 ` Bjorn Helgaas
2015-02-04 11:25 ` Catalin Marinas
2015-02-04 16:08 ` Mark Salter
2015-02-04 16:16 ` Timur Tabi
2015-02-04 17:52 ` Catalin Marinas
2015-02-04 17:57 ` Catalin Marinas
2015-02-04 18:58 ` Mark Salter
2015-02-05 10:41 ` Catalin Marinas
2015-02-05 10:47 ` Ard Biesheuvel
2015-02-05 10:59 ` Catalin Marinas
2015-02-05 11:14 ` Graeme Gregory
2015-02-05 12:07 ` Catalin Marinas
2015-02-05 12:52 ` Graeme Gregory
2015-02-05 14:50 ` Catalin Marinas
2015-02-05 12:55 ` Ard Biesheuvel
2015-02-05 13:54 ` Mark Salter
2015-02-05 16:42 ` [Linaro-acpi] " Al Stone
2015-02-05 17:48 ` Catalin Marinas
2015-02-05 22:16 ` Ard Biesheuvel
2015-02-06 10:36 ` Catalin Marinas
2015-02-06 11:08 ` Ard Biesheuvel
2015-02-06 14:16 ` Catalin Marinas
2015-02-07 1:44 ` Ard Biesheuvel
2015-02-05 1:24 ` Rafael J. Wysocki
2015-02-02 12:45 ` [PATCH v8 03/21] arm64: allow late use of early_ioremap Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 04/21] ARM64 / ACPI: Get RSDP and ACPI boot-time tables Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 05/21] ACPI / sleep: Introduce sleep_arm.c Hanjun Guo
2015-02-02 22:18 ` Rafael J. Wysocki
2015-02-03 16:18 ` Graeme Gregory
2015-02-02 12:45 ` [PATCH v8 06/21] ARM64 / ACPI: Introduce PCI stub functions for ACPI Hanjun Guo
2015-02-03 12:15 ` Catalin Marinas
2015-02-03 13:30 ` Hanjun Guo
2015-02-03 14:55 ` Rafael J. Wysocki
2015-02-04 9:06 ` Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 07/21] ARM64 / ACPI: Introduce early_param for "acpi" and pass acpi=force to enable ACPI Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 08/21] dt / chosen: Add linux, uefi-stub-generated-dtb property Hanjun Guo
2015-02-02 13:40 ` [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Leif Lindholm
2015-02-02 13:50 ` Graeme Gregory
2015-02-02 16:32 ` Mark Rutland
2015-02-06 10:34 ` [PATCH v8 08/21] dt / chosen: Add linux, uefi-stub-generated-dtb property G Gregory
2015-02-07 3:36 ` [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Hanjun Guo
2015-02-07 5:03 ` [PATCH v8 08/21] dt / chosen: Add linux, uefi-stub-generated-dtb property Ard Biesheuvel
2015-02-07 6:51 ` [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Hanjun Guo
2015-02-09 11:46 ` Mark Rutland
2015-02-11 2:44 ` [PATCH v8 08/21] dt / chosen: Add linux, uefi-stub-generated-dtb property Ard Biesheuvel
2015-02-11 6:33 ` [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Stefano Stabellini
2015-02-11 6:53 ` [PATCH v8 08/21] dt / chosen: Add linux, uefi-stub-generated-dtb property Ard Biesheuvel
2015-02-11 7:07 ` [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Stefano Stabellini
2015-02-02 12:45 ` [PATCH v8 09/21] ARM64 / ACPI: Disable ACPI if FADT revision is less than 5.1 Hanjun Guo
2015-02-03 17:20 ` Catalin Marinas
2015-02-04 9:38 ` Hanjun Guo
2015-02-04 13:06 ` Lorenzo Pieralisi
2015-02-05 9:45 ` Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 10/21] ARM64 / ACPI: If we chose to boot from acpi then disable FDT Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 11/21] ARM64 / ACPI: Get PSCI flags in FADT for PSCI init Hanjun Guo
2015-02-04 16:43 ` Lorenzo Pieralisi
2015-02-05 9:48 ` Hanjun Guo
2015-02-05 17:11 ` [Linaro-acpi] " Al Stone
2015-02-05 17:49 ` Lorenzo Pieralisi
2015-02-05 19:03 ` Al Stone
2015-02-06 7:56 ` Hanjun Guo
2015-02-06 16:21 ` Lorenzo Pieralisi [this message]
2015-02-02 12:45 ` [PATCH v8 12/21] ACPI / table: Print GIC information when MADT is parsed Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 13/21] ARM64 / ACPI: Parse MADT for SMP initialization Hanjun Guo
2015-02-03 13:53 ` Mark Rutland
2015-02-04 9:05 ` Hanjun Guo
2015-02-04 10:30 ` Mark Rutland
2015-02-05 9:20 ` Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 14/21] ACPI / processor: Make it possible to get CPU hardware ID via GICC Hanjun Guo
2015-02-03 14:17 ` Mark Rutland
2015-02-03 20:09 ` Catalin Marinas
2015-02-04 9:48 ` Hanjun Guo
2015-02-04 11:21 ` Catalin Marinas
2015-02-05 9:27 ` Hanjun Guo
2015-02-05 10:52 ` Catalin Marinas
2015-02-09 6:55 ` Will Deacon
2015-02-09 9:52 ` Catalin Marinas
2015-02-02 12:45 ` [PATCH v8 15/21] ARM64 / ACPI: Introduce ACPI_IRQ_MODEL_GIC and register device's gsi Hanjun Guo
2015-02-09 6:34 ` Will Deacon
2015-02-09 6:53 ` Hanjun Guo
2015-02-09 7:07 ` Will Deacon
2015-02-02 12:45 ` [PATCH v8 16/21] irqchip: Add GICv2 specific ACPI boot support Hanjun Guo
2015-02-02 22:23 ` Rafael J. Wysocki
2015-02-03 15:38 ` Tomasz Nowicki
2015-02-02 12:45 ` [PATCH v8 17/21] clocksource / arch_timer: Parse GTDT to initialize arch timer Hanjun Guo
2015-02-02 22:23 ` Rafael J. Wysocki
2015-02-03 13:28 ` Hanjun Guo
2015-02-04 18:59 ` Lorenzo Pieralisi
2015-02-05 10:11 ` Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 18/21] ARM64 / ACPI: Select ACPI_REDUCED_HARDWARE_ONLY if ACPI is enabled on ARM64 Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 19/21] ARM64 / ACPI: Enable ARM64 in Kconfig Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 20/21] Documentation: ACPI for ARM64 Hanjun Guo
2015-02-02 19:01 ` Timur Tabi
2015-02-03 8:44 ` Hanjun Guo
2015-02-02 12:45 ` [PATCH v8 21/21] arm64: ACPI: additions of ACPI documentation for arm64 Hanjun Guo
2015-02-04 0:40 ` Al Stone
2015-02-04 18:12 ` Mark Brown
2015-02-04 19:06 ` Al Stone
2015-02-05 2:02 ` Mark Brown
2015-02-03 16:47 ` [PATCH v8 00/21] Introduce ACPI for ARM64 based on ACPI 5.1 Mark Rutland
2015-02-03 17:43 ` [Linaro-acpi] " Al Stone
2015-02-04 9:41 ` Hanjun Guo
2015-02-04 20:29 ` Timur Tabi
2015-02-05 10:16 ` Hanjun Guo
2015-02-12 10:02 ` Robert Richter
2015-02-13 2:48 ` Hanjun Guo
2015-02-19 16:10 ` Robert Richter
[not found] ` <a314cdbbefb349acbb8f47d6e806989f@NASANEXM01D.na.qualcomm.com>
2015-02-13 0:50 ` Jonathan (Zhixiong) Zhang
2015-02-13 7:50 ` 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=20150206162120.GA32566@red-moon \
--to=lorenzo.pieralisi@arm.com \
--cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).