From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Shevchenko Date: Wed, 10 Jan 2018 19:40:15 +0200 Subject: [U-Boot] [PATCH v1 2/2] x86: zImage: Propagate acpi_rsdp_addr to kernel via boot parameters In-Reply-To: <20180110174015.79799-1-andriy.shevchenko@linux.intel.com> References: <20180110174015.79799-1-andriy.shevchenko@linux.intel.com> Message-ID: <20180110174015.79799-2-andriy.shevchenko@linux.intel.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de New field acpi_rsdp_addr, which has been introduced in boot protocol v2.14 [1], in boot parameters tells kernel the exact address of RDSP ACPI table. Knowing it increases robustness of the kernel by avoiding in some cases traversal through a part of physical memory. It will slightly reduce boot time by the same reason. [1] See Linux kernel commit 2f74cbf947f4 ("x86/boot: Add the ACPI RSDP address to struct setup_header::acpi_rdsp_addr") for the details. Signed-off-by: Andy Shevchenko --- arch/x86/include/asm/bootparam.h | 1 + arch/x86/lib/acpi_table.c | 7 +++++++ arch/x86/lib/acpi_table.h | 10 ++++++++++ arch/x86/lib/zimage.c | 6 ++++++ 4 files changed, 24 insertions(+) create mode 100644 arch/x86/lib/acpi_table.h diff --git a/arch/x86/include/asm/bootparam.h b/arch/x86/include/asm/bootparam.h index 48b138c6b0..90768a99ce 100644 --- a/arch/x86/include/asm/bootparam.h +++ b/arch/x86/include/asm/bootparam.h @@ -66,6 +66,7 @@ struct setup_header { __u64 pref_address; __u32 init_size; __u32 handover_offset; + __u64 acpi_rsdp_addr; } __attribute__((packed)); struct sys_desc_table { diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 7b33cd371e..45bfc111ef 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -20,6 +20,7 @@ #include #include #include +#include "acpi_table.h" /* * IASL compiles the dsdt entries and writes the hex values @@ -27,6 +28,11 @@ */ extern const unsigned char AmlCode[]; +/* + * ACPI RSDP address to be used in boot parameters. + */ +unsigned long acpi_rsdp_addr; + static void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, struct acpi_xsdt *xsdt) { @@ -460,6 +466,7 @@ ulong write_acpi_tables(ulong start) debug("current = %x\n", current); + acpi_rsdp_addr = (unsigned long)rsdp; debug("ACPI: done\n"); /* Don't touch ACPI hardware on HW reduced platforms */ diff --git a/arch/x86/lib/acpi_table.h b/arch/x86/lib/acpi_table.h new file mode 100644 index 0000000000..cece5d1420 --- /dev/null +++ b/arch/x86/lib/acpi_table.h @@ -0,0 +1,10 @@ +/* + * SPDX-License-Identifier: GPL-2.0 + */ + +#ifndef _X86_LIB_ACPI_TABLES_H +#define _X86_LIB_ACPI_TABLES_H + +extern unsigned long acpi_rsdp_addr; + +#endif diff --git a/arch/x86/lib/zimage.c b/arch/x86/lib/zimage.c index d224db4e07..eae26635b1 100644 --- a/arch/x86/lib/zimage.c +++ b/arch/x86/lib/zimage.c @@ -24,6 +24,7 @@ #include #endif #include +#include "acpi_table.h" DECLARE_GLOBAL_DATA_PTR; @@ -255,6 +256,11 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot, hdr->hardware_subarch = X86_SUBARCH_INTEL_MID; #endif +#ifdef CONFIG_GENERATE_ACPI_TABLE + if (bootproto >= 0x020e) + hdr->acpi_rsdp_addr = acpi_rsdp_addr; +#endif + setup_video(&setup_base->screen_info); return 0; -- 2.15.1