From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shannon Zhao Subject: Re: [PATCH v4 05/21] arm/acpi: Add basic ACPI initialization Date: Thu, 28 Jan 2016 19:53:10 +0800 Message-ID: <56AA0126.5040302@huawei.com> References: <1453540813-15764-1-git-send-email-zhaoshenglong@huawei.com> <1453540813-15764-6-git-send-email-zhaoshenglong@huawei.com> <56A9EE77.5050901@huawei.com> <56A9F922.4050207@huawei.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Stefano Stabellini Cc: ian.campbell@citrix.com, peter.huangpeng@huawei.com, xen-devel@lists.xen.org, julien.grall@citrix.com, stefano.stabellini@citrix.com, shannon.zhao@linaro.org List-Id: xen-devel@lists.xenproject.org On 2016/1/28 19:27, Stefano Stabellini wrote: > On Thu, 28 Jan 2016, Shannon Zhao wrote: >> On 2016/1/28 18:44, Stefano Stabellini wrote: >>> On Thu, 28 Jan 2016, Shannon Zhao wrote: >>>>> On 2016/1/27 22:54, Stefano Stabellini wrote: >>>>>>> On Sat, 23 Jan 2016, Shannon Zhao wrote: >>>>>>>>>>> From: Shannon Zhao >>>>>>>>>>> >>>>>>>>>>> acpi_boot_table_init() will be called in start_xen to get the RSDP and >>>>>>>>>>> all the table pointers. With this patch, we can get ACPI boot-time >>>>>>>>>>> tables from firmware on ARM64. >>>>>>>>>>> >>>>>>>>>>> Signed-off-by: Naresh Bhat >>>>>>>>>>> Signed-off-by: Parth Dixit >>>>>>>>>>> Signed-off-by: Shannon Zhao >>>>>>>>>>> --- >>>>>>>>>>> xen/arch/arm/acpi/Makefile | 1 + >>>>>>>>>>> xen/arch/arm/acpi/boot.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++ >>>>>>>>>>> xen/arch/arm/setup.c | 4 ++++ >>>>>>>>>>> 3 files changed, 63 insertions(+) >>>>>>>>>>> create mode 100644 xen/arch/arm/acpi/boot.c >>>>>>>>>>> >>>>>>>>>>> diff --git a/xen/arch/arm/acpi/Makefile b/xen/arch/arm/acpi/Makefile >>>>>>>>>>> index b5be22d..196c40a 100644 >>>>>>>>>>> --- a/xen/arch/arm/acpi/Makefile >>>>>>>>>>> +++ b/xen/arch/arm/acpi/Makefile >>>>>>>>>>> @@ -1 +1,2 @@ >>>>>>>>>>> obj-y += lib.o >>>>>>>>>>> +obj-y += boot.o >>>>>>>>>>> diff --git a/xen/arch/arm/acpi/boot.c b/xen/arch/arm/acpi/boot.c >>>>>>>>>>> new file mode 100644 >>>>>>>>>>> index 0000000..1570f7e >>>>>>>>>>> --- /dev/null >>>>>>>>>>> +++ b/xen/arch/arm/acpi/boot.c >>>>>>>>>>> @@ -0,0 +1,58 @@ >>>>>>>>>>> +/* >>>>>>>>>>> + * ARM Specific Low-Level ACPI Boot Support >>>>>>>>>>> + * >>>>>>>>>>> + * Copyright (C) 2001, 2002 Paul Diefenbaugh >>>>>>>>>>> + * Copyright (C) 2001 Jun Nakajima >>>>>>>>>>> + * Copyright (C) 2014, Naresh Bhat >>>>>>>>>>> + * Copyright (C) 2015, Shannon Zhao >>>>>>>>>>> + * >>>>>>>>>>> + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>>>>>>> + * >>>>>>>>>>> + * This program is free software; you can redistribute it and/or modify >>>>>>>>>>> + * it under the terms of the GNU General Public License as published by >>>>>>>>>>> + * the Free Software Foundation; either version 2 of the License, or >>>>>>>>>>> + * (at your option) any later version. >>>>>>>>>>> + * >>>>>>>>>>> + * This program is distributed in the hope that it will be useful, >>>>>>>>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>>>>>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>>>>>>>>> + * GNU General Public License for more details. >>>>>>>>>>> + * >>>>>>>>>>> + * You should have received a copy of the GNU General Public License >>>>>>>>>>> + * along with this program; if not, write to the Free Software >>>>>>>>>>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >>>>>>>>>>> + * >>>>>>>>>>> + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>>>>>>> + */ >>>>>>>>>>> + >>>>>>>>>>> +#include >>>>>>>>>>> +#include >>>>>>>>>>> + >>>>>>>>>>> +#include >>>>>>>>>>> + >>>>>>>>>>> +/* >>>>>>>>>>> + * acpi_boot_table_init() called from setup_arch(), always. >>>>>>>>>>> + * 1. find RSDP and get its address, and then find XSDT >>>>>>>>>>> + * 2. extract all tables and checksums them all >>>>>>>>>>> + * >>>>>>>>>>> + * return value: (currently ignored) >>>>>>>>>>> + * 0: success >>>>>>>>>>> + * !0: failure >>>>>>>>>>> + * >>>>>>>>>>> + * We can parse ACPI boot-time tables such as FADT, MADT after >>>>>>>>>>> + * this function is called. >>>>>>>>>>> + */ >>>>>>>>>>> +int __init acpi_boot_table_init(void) >>>>>>>>>>> +{ >>>>>>>>>>> + int error; >>>>>>>>>>> + >>>>>>>>>>> + /* Initialize the ACPI boot-time table parser. */ >>>>>>>>>>> + error = acpi_table_init(); >>>>>>>>>>> + if ( error ) >>>>>>>>>>> + { >>>>>>>>>>> + disable_acpi(); >>>>>>>>>>> + return error; >>>>>>>>>>> + } >>>>>>>>>>> + >>>>>>>>>>> + return 0; >>>>>>>>>>> +} >>>>>>>>>>> diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c >>>>>>>>>>> index 0ba601e..c15a09d 100644 >>>>>>>>>>> --- a/xen/arch/arm/setup.c >>>>>>>>>>> +++ b/xen/arch/arm/setup.c >>>>>>>>>>> @@ -36,6 +36,7 @@ >>>>>>>>>>> #include >>>>>>>>>>> #include >>>>>>>>>>> #include >>>>>>>>>>> +#include >>>>>>>>>>> #include >>>>>>>>>>> #include >>>>>>>>>>> #include >>>>>>>>>>> @@ -749,6 +750,9 @@ void __init start_xen(unsigned long boot_phys_offset, >>>>>>>>>>> >>>>>>>>>>> setup_mm(fdt_paddr, fdt_size); >>>>>>>>>>> >>>>>>>>>>> + /* Parse the ACPI tables for possible boot-time configuration */ >>>>>>>>>>> + acpi_boot_table_init(); >>>>>>> As I asked before, why do you need to call acpi_boot_table_init() before >>>>>>> vm_init? If you called acpi_boot_table_init() after vm_init(), you >>>>>>> could implement __acpi_map_table with vmap, which would be better. >>>>>>> >>>>> Yes, if we call acpi_boot_table_init() before vm_init, it needs to move >>>>> end_boot_allocator after acpi_boot_table_init because it will assert in >>>>> acpi_os_zalloc_memory. >>> Why does acpi_os_zalloc_memory assert exactly? >>> >> >> If call acpi_boot_table_init after end_boot_allocator, system_state != >> SYS_STATE_early_boot, > > Could you please point out where end_boot_allocator changes > system_state? > Oh, sorry, I see. It doesn't change the system_state. I mixed this with the patch[1] which change the system_state to SYS_STATE_boot, then will cause assert. + system_state = SYS_STATE_boot; + vm_init(); + +/* + * Parse the ACPI tables for possible boot-time configuration + */ + +#if defined(CONFIG_ACPI) && defined(CONFIG_ARM_64) + acpi_boot_table_init(); +#endif But current implementation doesn't do that so it won't cause assert. While the true reason to move acpi_boot_table_init before end_boot_allocator is NUMA support. There is a discussion about it, see [2]. [1]http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg00491.html [2]http://lists.xenproject.org/archives/html/xen-devel/2015-02/msg01157.html -- Shannon