[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 05/21] arm/acpi: Add basic ACPI initialization
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 <shannon.zhao@xxxxxxxxxx> >>>>>>>>>>> >>>>>>>>>>> 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 <naresh.bhat@xxxxxxxxxx> >>>>>>>>>>> Signed-off-by: Parth Dixit <parth.dixit@xxxxxxxxxx> >>>>>>>>>>> Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx> >>>>>>>>>>> --- >>>>>>>>>>> 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 >>>>>>>>>>> <paul.s.diefenbaugh@xxxxxxxxx> >>>>>>>>>>> + * Copyright (C) 2001 Jun Nakajima <jun.nakajima@xxxxxxxxx> >>>>>>>>>>> + * Copyright (C) 2014, Naresh Bhat <naresh.bhat@xxxxxxxxxx> >>>>>>>>>>> + * Copyright (C) 2015, Shannon Zhao <shannon.zhao@xxxxxxxxxx> >>>>>>>>>>> + * >>>>>>>>>>> + * >>>>>>>>>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>>>>>>>>> + * >>>>>>>>>>> + * 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 <xen/init.h> >>>>>>>>>>> +#include <xen/acpi.h> >>>>>>>>>>> + >>>>>>>>>>> +#include <asm/acpi.h> >>>>>>>>>>> + >>>>>>>>>>> +/* >>>>>>>>>>> + * 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 <xen/pfn.h> >>>>>>>>>>> #include <xen/vmap.h> >>>>>>>>>>> #include <xen/libfdt/libfdt.h> >>>>>>>>>>> +#include <xen/acpi.h> >>>>>>>>>>> #include <asm/page.h> >>>>>>>>>>> #include <asm/current.h> >>>>>>>>>>> #include <asm/setup.h> >>>>>>>>>>> @@ -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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |