From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964964AbbBBNu4 (ORCPT ); Mon, 2 Feb 2015 08:50:56 -0500 Received: from mail-wg0-f48.google.com ([74.125.82.48]:50980 "EHLO mail-wg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932380AbbBBNuv (ORCPT ); Mon, 2 Feb 2015 08:50:51 -0500 Date: Mon, 2 Feb 2015 13:50:52 +0000 From: Graeme Gregory To: Leif Lindholm Cc: Hanjun Guo , Catalin Marinas , "Rafael J. Wysocki" , Olof Johansson , Arnd Bergmann , Mark Rutland , Grant Likely , Will Deacon , Lorenzo Pieralisi , Sudeep Holla , Jon Masters , Jason Cooper , Marc Zyngier , Bjorn Helgaas , Daniel Lezcano , Mark Brown , Rob Herring , Robert Richter , Randy Dunlap , Charles.Garcia-Tobin@arm.com, phoenix.liyi@huawei.com, Timur Tabi , Ashwin Chaugule , suravee.suthikulpanit@amd.com, Mark Langsdorf , wangyijing@huawei.com, linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linaro-acpi@lists.linaro.org, Jonathan Corbet , Matt Fleming Subject: Re: [PATCH v8 08/21] dt / chosen: Add linux,uefi-stub-generated-dtb property Message-ID: <20150202135051.GA3825@xora-haswell.xora.org.uk> References: <1422881149-8177-1-git-send-email-hanjun.guo@linaro.org> <1422881149-8177-9-git-send-email-hanjun.guo@linaro.org> <20150202134033.GR4278@bivouac.eciton.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20150202134033.GR4278@bivouac.eciton.net> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 02, 2015 at 01:40:33PM +0000, Leif Lindholm wrote: > On Mon, Feb 02, 2015 at 08:45:36PM +0800, Hanjun Guo wrote: > > When system supporting both DT and ACPI but firmware providing > > no dtb, we can use this linux,uefi-stub-generated-dtb property > > to let kernel know that we can try ACPI configuration data even > > if no "acpi=force" is passed in early parameters. > > > > CC: Mark Rutland > > CC: Jonathan Corbet > > CC: Catalin Marinas > > CC: Will Deacon > > CC: Leif Lindholm > > CC: Grant Likely > > CC: Matt Fleming > > Signed-off-by: Hanjun Guo > > --- > > Documentation/arm/uefi.txt | 3 +++ > > arch/arm64/include/asm/acpi.h | 1 + > > arch/arm64/kernel/setup.c | 30 ++++++++++++++++++++++++++++++ > > drivers/firmware/efi/libstub/fdt.c | 8 ++++++++ > > 4 files changed, 42 insertions(+) > > > > diff --git a/Documentation/arm/uefi.txt b/Documentation/arm/uefi.txt > > index d60030a..5f86eae 100644 > > --- a/Documentation/arm/uefi.txt > > +++ b/Documentation/arm/uefi.txt > > @@ -60,5 +60,8 @@ linux,uefi-mmap-desc-ver | 32-bit | Version of the mmap descriptor format. > > -------------------------------------------------------------------------------- > > linux,uefi-stub-kern-ver | string | Copy of linux_banner from build. > > -------------------------------------------------------------------------------- > > +linux,uefi-stub-generated-dtb | bool | Indication for no DTB provided by > > + | | firmware. > > +-------------------------------------------------------------------------------- > > Apologies for the late bikeshedding, but the discussion on this topic > previsously was lively enough that I thought I'd let it die down a bit > before seeing if I had anything to add. > > That, and I just realised something: > One alternative to this added DT entry is that we could treat the > absence of a registered UEFI configuration table as the indication > that no HW description was provided from firmware, since the stub does > not call InstallConfigurationTable() on the DT it generates. This does > move the ability to detect to after efi_init(), but this should be > fine for ACPI-purposes. > That would not work as expected in the kexec/Xen use case though as they may genuinely boot with DT from an ACPI host without UEFI. > If that is deemed undesirable, I would still prefer Catalin's > suggested name ("linux,bare-dtb"), which describes the state rather > than the route we took to get there. > I agree. Graeme > > For verbose debug messages, specify 'uefi_debug' on the kernel command line. > > diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h > > index 496c33b..9fcf632 100644 > > --- a/arch/arm64/include/asm/acpi.h > > +++ b/arch/arm64/include/asm/acpi.h > > @@ -49,6 +49,7 @@ static inline void arch_fix_phys_package_id(int num, u32 slot) { } > > > > #else > > static inline void disable_acpi(void) { } > > +static inline void enable_acpi(void) { } > > #endif /* CONFIG_ACPI */ > > > > #endif /*_ASM_ACPI_H*/ > > diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c > > index fc4fb7b..510a681 100644 > > --- a/arch/arm64/kernel/setup.c > > +++ b/arch/arm64/kernel/setup.c > > @@ -371,6 +371,29 @@ static void __init request_standard_resources(void) > > } > > } > > > > +static int __init dt_scan_chosen(unsigned long node, const char *uname, > > + int depth, void *data) > > +{ > > + const char *p; > > + > > + if (depth != 1 || !data || (strcmp(uname, "chosen") != 0)) > > + return 0; > > + > > + p = of_get_flat_dt_prop(node, "linux,uefi-stub-generated-dtb", NULL); > > + *(bool *)data = p ? true : false; > > + > > + return 1; > > +} > > + > > +static bool __init is_uefi_stub_generated_dtb(void) > > +{ > > + bool flag = false; > > + > > + of_scan_flat_dt(dt_scan_chosen, &flag); > > + > > + return flag; > > +} > > + > > u64 __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = INVALID_HWID }; > > > > void __init setup_arch(char **cmdline_p) > > @@ -399,6 +422,13 @@ void __init setup_arch(char **cmdline_p) > > parse_early_param(); > > > > /* > > + * If no dtb provided by firmware, enable ACPI and give system a > > + * chance to boot with ACPI configuration data > > + */ > > + if (is_uefi_stub_generated_dtb() && acpi_disabled) > > + enable_acpi(); > > + > > + /* > > * Unmask asynchronous aborts after bringing up possible earlycon. > > * (Report possible System Errors once we can report this occurred) > > */ > > diff --git a/drivers/firmware/efi/libstub/fdt.c b/drivers/firmware/efi/libstub/fdt.c > > index c846a96..3777d50 100644 > > --- a/drivers/firmware/efi/libstub/fdt.c > > +++ b/drivers/firmware/efi/libstub/fdt.c > > @@ -154,6 +154,14 @@ efi_status_t update_fdt(efi_system_table_t *sys_table, void *orig_fdt, > > if (status) > > goto fdt_set_fail; > > > > + /* Add a property to show the dtb is generated by uefi stub */ > > + if (!orig_fdt) { > > + status = fdt_setprop(fdt, node, > > + "linux,uefi-stub-generated-dtb", NULL, 0); > > + if (status) > > + goto fdt_set_fail; > > + } > > + > > return EFI_SUCCESS; > > > > fdt_set_fail: > > -- > > 1.9.1 > >