From: Stefan Roese <sr@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 16/26] x86: acpi: Adjust orders in acpi_table.c
Date: Tue, 3 May 2016 14:48:39 +0200 [thread overview]
Message-ID: <57289E27.5080600@denx.de> (raw)
In-Reply-To: <1462174426-3470-17-git-send-email-bmeng.cn@gmail.com>
Hi Bin,
Nitpicking:
x86: acpi: Adjust order in acpi_table.c
(s/orders/order)
On 02.05.2016 09:33, Bin Meng wrote:
> Rearrange the routine order a little bit, to follow the order
> in which ACPI table is defined in acpi_table.h.
>
> Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>
> arch/x86/include/asm/acpi_table.h | 14 +--
> arch/x86/lib/acpi_table.c | 227 +++++++++++++++++++-------------------
> 2 files changed, 121 insertions(+), 120 deletions(-)
>
> diff --git a/arch/x86/include/asm/acpi_table.h b/arch/x86/include/asm/acpi_table.h
> index 5a829de..ad39902 100644
> --- a/arch/x86/include/asm/acpi_table.h
> +++ b/arch/x86/include/asm/acpi_table.h
> @@ -305,14 +305,14 @@ struct acpi_mcfg_mmconfig {
> /* These can be used by the target port */
>
> void acpi_fill_header(struct acpi_table_header *header, char *signature);
> +void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
> + void *dsdt);
> unsigned long acpi_create_madt_lapics(unsigned long current);
> -int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id, u32 addr,
> - u32 gsi_base);
> +int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id,
> + u32 addr, u32 gsi_base);
> int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride,
> - u8 bus, u8 source, u32 gsirq, u16 flags);
> + u8 bus, u8 source, u32 gsirq, u16 flags);
> +int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
> + u8 cpu, u16 flags, u8 lint);
> unsigned long acpi_fill_madt(unsigned long current);
> -void acpi_create_fadt(struct acpi_fadt *fadt, struct acpi_facs *facs,
> - void *dsdt);
> -int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi, u8 cpu,
> - u16 flags, u8 lint);
> u32 write_acpi_tables(u32 start);
> diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c
> index 97d90f7..4891f20 100644
> --- a/arch/x86/lib/acpi_table.c
> +++ b/arch/x86/lib/acpi_table.c
> @@ -2,6 +2,7 @@
> * Based on acpi.c from coreboot
> *
> * Copyright (C) 2015, Saket Sinha <saket.sinha89@gmail.com>
> + * Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
> *
> * SPDX-License-Identifier: GPL-2.0+
> */
> @@ -20,10 +21,85 @@
> */
> extern const unsigned char AmlCode[];
>
> +static void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
> + struct acpi_xsdt *xsdt)
> +{
> + memset(rsdp, 0, sizeof(struct acpi_rsdp));
> +
> + memcpy(rsdp->signature, RSDP_SIG, 8);
> + memcpy(rsdp->oem_id, OEM_ID, 6);
> +
> + rsdp->length = sizeof(struct acpi_rsdp);
> + rsdp->rsdt_address = (u32)rsdt;
> +
> + /*
> + * Revision: ACPI 1.0: 0, ACPI 2.0/3.0/4.0: 2
> + *
> + * Some OSes expect an XSDT to be present for RSD PTR revisions >= 2.
> + * If we don't have an ACPI XSDT, force ACPI 1.0 (and thus RSD PTR
> + * revision 0)
> + */
> + if (xsdt == NULL) {
> + rsdp->revision = ACPI_RSDP_REV_ACPI_1_0;
> + } else {
> + rsdp->xsdt_address = (u64)(u32)xsdt;
> + rsdp->revision = ACPI_RSDP_REV_ACPI_2_0;
> + }
> +
> + /* Calculate checksums */
> + rsdp->checksum = table_compute_checksum((void *)rsdp, 20);
> + rsdp->ext_checksum = table_compute_checksum((void *)rsdp,
> + sizeof(struct acpi_rsdp));
> +}
> +
> +void acpi_fill_header(struct acpi_table_header *header, char *signature)
> +{
> + memcpy(header->signature, signature, 4);
> + memcpy(header->oem_id, OEM_ID, 6);
> + memcpy(header->oem_table_id, OEM_TABLE_ID, 8);
> + memcpy(header->aslc_id, ASLC_ID, 4);
> +}
> +
> +static void acpi_write_rsdt(struct acpi_rsdt *rsdt)
> +{
> + struct acpi_table_header *header = &(rsdt->header);
> +
> + /* Fill out header fields */
> + acpi_fill_header(header, "RSDT");
> + header->length = sizeof(struct acpi_rsdt);
> +
> + /* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
> + header->revision = ACPI_REV_ACPI_2_0;
> +
> + /* Entries are filled in later, we come with an empty set */
> +
> + /* Fix checksum */
> + header->checksum = table_compute_checksum((void *)rsdt,
> + sizeof(struct acpi_rsdt));
> +}
> +
> +static void acpi_write_xsdt(struct acpi_xsdt *xsdt)
> +{
> + struct acpi_table_header *header = &(xsdt->header);
> +
> + /* Fill out header fields */
> + acpi_fill_header(header, "XSDT");
> + header->length = sizeof(struct acpi_xsdt);
> +
> + /* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
> + header->revision = ACPI_REV_ACPI_2_0;
> +
> + /* Entries are filled in later, we come with an empty set */
> +
> + /* Fix checksum */
> + header->checksum = table_compute_checksum((void *)xsdt,
> + sizeof(struct acpi_xsdt));
> +}
> +
> /**
> -* Add an ACPI table to the RSDT (and XSDT) structure, recalculate length
> -* and checksum.
> -*/
> + * Add an ACPI table to the RSDT (and XSDT) structure, recalculate length
> + * and checksum.
> + */
> static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
> {
> int i, entries_num;
> @@ -54,12 +130,12 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
>
> /* Fix RSDT length or the kernel will assume invalid entries */
> rsdt->header.length = sizeof(struct acpi_table_header) +
> - (sizeof(u32) * (i + 1));
> + (sizeof(u32) * (i + 1));
>
> /* Re-calculate checksum */
> rsdt->header.checksum = 0;
> rsdt->header.checksum = table_compute_checksum((u8 *)rsdt,
> - rsdt->header.length);
> + rsdt->header.length);
>
> /*
> * And now the same thing for the XSDT. We use the same index as for
> @@ -71,7 +147,7 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
>
> /* Fix XSDT length */
> xsdt->header.length = sizeof(struct acpi_table_header) +
> - (sizeof(u64) * (i + 1));
> + (sizeof(u64) * (i + 1));
>
> /* Re-calculate checksum */
> xsdt->header.checksum = 0;
> @@ -80,12 +156,27 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table)
> }
> }
>
> +static void acpi_create_facs(struct acpi_facs *facs)
> +{
> + memset((void *)facs, 0, sizeof(struct acpi_facs));
> +
> + memcpy(facs->signature, "FACS", 4);
> + facs->length = sizeof(struct acpi_facs);
> + facs->hardware_signature = 0;
> + facs->firmware_waking_vector = 0;
> + facs->global_lock = 0;
> + facs->flags = 0;
> + facs->x_firmware_waking_vector_l = 0;
> + facs->x_firmware_waking_vector_h = 0;
> + facs->version = 1;
> +}
> +
> static int acpi_create_madt_lapic(struct acpi_madt_lapic *lapic,
> u8 cpu, u8 apic)
> {
> - lapic->type = ACPI_APIC_LAPIC; /* Local APIC structure */
> + lapic->type = ACPI_APIC_LAPIC;
> lapic->length = sizeof(struct acpi_madt_lapic);
> - lapic->flags = LOCAL_APIC_FLAG_ENABLED; /* Processor/LAPIC enabled */
> + lapic->flags = LOCAL_APIC_FLAG_ENABLED;
> lapic->processor_id = cpu;
> lapic->apic_id = apic;
>
> @@ -108,8 +199,8 @@ unsigned long acpi_create_madt_lapics(unsigned long current)
> return current;
> }
>
> -int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id, u32 addr,
> - u32 gsi_base)
> +int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id,
> + u32 addr, u32 gsi_base)
> {
> ioapic->type = ACPI_APIC_IOAPIC;
> ioapic->length = sizeof(struct acpi_madt_ioapic);
> @@ -122,7 +213,7 @@ int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id, u32 addr,
> }
>
> int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride,
> - u8 bus, u8 source, u32 gsirq, u16 flags)
> + u8 bus, u8 source, u32 gsirq, u16 flags)
> {
> irqoverride->type = ACPI_APIC_IRQ_SRC_OVERRIDE;
> irqoverride->length = sizeof(struct acpi_madt_irqoverride);
> @@ -135,7 +226,7 @@ int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride,
> }
>
> int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
> - u8 cpu, u16 flags, u8 lint)
> + u8 cpu, u16 flags, u8 lint)
> {
> lapic_nmi->type = ACPI_APIC_LAPIC_NMI;
> lapic_nmi->length = sizeof(struct acpi_madt_lapic_nmi);
> @@ -146,14 +237,6 @@ int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,
> return lapic_nmi->length;
> }
>
> -void acpi_fill_header(struct acpi_table_header *header, char *signature)
> -{
> - memcpy(header->signature, signature, 4);
> - memcpy(header->oem_id, OEM_ID, 6);
> - memcpy(header->oem_table_id, OEM_TABLE_ID, 8);
> - memcpy(header->aslc_id, ASLC_ID, 4);
> -}
> -
> static void acpi_create_madt(struct acpi_madt *madt)
> {
> struct acpi_table_header *header = &(madt->header);
> @@ -180,7 +263,7 @@ static void acpi_create_madt(struct acpi_madt *madt)
> }
>
> static int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig,
> - u32 base, u16 seg_nr, u8 start, u8 end)
> + u32 base, u16 seg_nr, u8 start, u8 end)
> {
> memset(mmconfig, 0, sizeof(*mmconfig));
> mmconfig->base_address_l = base;
> @@ -196,7 +279,7 @@ static unsigned long acpi_fill_mcfg(unsigned long current)
> {
> current += acpi_create_mcfg_mmconfig
> ((struct acpi_mcfg_mmconfig *)current,
> - CONFIG_PCIE_ECAM_BASE, 0x0, 0x0, 255);
> + CONFIG_PCIE_ECAM_BASE, 0x0, 0x0, 255);
>
> return current;
> }
> @@ -223,88 +306,6 @@ static void acpi_create_mcfg(struct acpi_mcfg *mcfg)
> header->checksum = table_compute_checksum((void *)mcfg, header->length);
> }
>
> -static void acpi_create_facs(struct acpi_facs *facs)
> -{
> - memset((void *)facs, 0, sizeof(struct acpi_facs));
> -
> - memcpy(facs->signature, "FACS", 4);
> - facs->length = sizeof(struct acpi_facs);
> - facs->hardware_signature = 0;
> - facs->firmware_waking_vector = 0;
> - facs->global_lock = 0;
> - facs->flags = 0;
> - facs->x_firmware_waking_vector_l = 0;
> - facs->x_firmware_waking_vector_h = 0;
> - facs->version = 1; /* ACPI 1.0: 0, ACPI 2.0/3.0: 1, ACPI 4.0: 2 */
> -}
> -
> -static void acpi_write_rsdt(struct acpi_rsdt *rsdt)
> -{
> - struct acpi_table_header *header = &(rsdt->header);
> -
> - /* Fill out header fields */
> - acpi_fill_header(header, "RSDT");
> - header->length = sizeof(struct acpi_rsdt);
> -
> - /* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
> - header->revision = ACPI_REV_ACPI_2_0;
> -
> - /* Entries are filled in later, we come with an empty set */
> -
> - /* Fix checksum */
> - header->checksum = table_compute_checksum((void *)rsdt,
> - sizeof(struct acpi_rsdt));
> -}
> -
> -static void acpi_write_xsdt(struct acpi_xsdt *xsdt)
> -{
> - struct acpi_table_header *header = &(xsdt->header);
> -
> - /* Fill out header fields */
> - acpi_fill_header(header, "XSDT");
> - header->length = sizeof(struct acpi_xsdt);
> -
> - /* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
> - header->revision = ACPI_REV_ACPI_2_0;
> -
> - /* Entries are filled in later, we come with an empty set */
> -
> - /* Fix checksum */
> - header->checksum = table_compute_checksum((void *)xsdt,
> - sizeof(struct acpi_xsdt));
> -}
> -
> -static void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
> - struct acpi_xsdt *xsdt)
> -{
> - memset(rsdp, 0, sizeof(struct acpi_rsdp));
> -
> - memcpy(rsdp->signature, RSDP_SIG, 8);
> - memcpy(rsdp->oem_id, OEM_ID, 6);
> -
> - rsdp->length = sizeof(struct acpi_rsdp);
> - rsdp->rsdt_address = (u32)rsdt;
> -
> - /*
> - * Revision: ACPI 1.0: 0, ACPI 2.0/3.0/4.0: 2
> - *
> - * Some OSes expect an XSDT to be present for RSD PTR revisions >= 2.
> - * If we don't have an ACPI XSDT, force ACPI 1.0 (and thus RSD PTR
> - * revision 0)
> - */
> - if (xsdt == NULL) {
> - rsdp->revision = ACPI_RSDP_REV_ACPI_1_0;
> - } else {
> - rsdp->xsdt_address = (u64)(u32)xsdt;
> - rsdp->revision = ACPI_RSDP_REV_ACPI_2_0;
> - }
> -
> - /* Calculate checksums */
> - rsdp->checksum = table_compute_checksum((void *)rsdp, 20);
> - rsdp->ext_checksum = table_compute_checksum((void *)rsdp,
> - sizeof(struct acpi_rsdp));
> -}
> -
> /*
> * QEMU's version of write_acpi_tables is defined in
> * arch/x86/cpu/qemu/fw_cfg.c
> @@ -378,15 +379,6 @@ u32 write_acpi_tables(u32 start)
> acpi_create_fadt(fadt, facs, dsdt);
> acpi_add_table(rsdp, fadt);
>
> - debug("ACPI: * MCFG\n");
> - mcfg = (struct acpi_mcfg *)current;
> - acpi_create_mcfg(mcfg);
> - if (mcfg->header.length > sizeof(struct acpi_mcfg)) {
> - current += mcfg->header.length;
> - current = ALIGN(current, 16);
> - acpi_add_table(rsdp, mcfg);
> - }
> -
> debug("ACPI: * MADT\n");
> madt = (struct acpi_madt *)current;
> acpi_create_madt(madt);
> @@ -396,6 +388,15 @@ u32 write_acpi_tables(u32 start)
> }
> current = ALIGN(current, 16);
>
> + debug("ACPI: * MCFG\n");
> + mcfg = (struct acpi_mcfg *)current;
> + acpi_create_mcfg(mcfg);
> + if (mcfg->header.length > sizeof(struct acpi_mcfg)) {
> + current += mcfg->header.length;
> + current = ALIGN(current, 16);
> + acpi_add_table(rsdp, mcfg);
> + }
> +
> debug("current = %x\n", current);
>
> debug("ACPI: done.\n");
>
Thanks,
Stefan
next prev parent reply other threads:[~2016-05-03 12:48 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-02 7:33 [U-Boot] [PATCH 00/26] x86: Initial ACPI support for Intel BayTrail Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 01/26] x86: Drop asm/acpi.h Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 02/26] x86: Fix build warning in tables.c when CONFIG_SEABIOS Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 03/26] x86: acpi: Fix compiler warnings in write_acpi_tables() Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 04/26] x86: irq: Reserve IRQ9 for ACPI in PIC mode Bin Meng
2016-05-03 12:29 ` Stefan Roese
2016-05-03 12:46 ` Bin Meng
2016-05-03 13:04 ` Stefan Roese
2016-05-02 7:33 ` [U-Boot] [PATCH 05/26] x86: irq: Enable SCI on IRQ9 Bin Meng
2016-05-03 12:31 ` Stefan Roese
2016-05-07 14:06 ` Bin Meng
2016-05-07 15:42 ` Stefan Roese
2016-05-07 15:46 ` Bin Meng
2016-05-07 15:51 ` Stefan Roese
2016-05-07 18:46 ` Simon Glass
2016-05-02 7:33 ` [U-Boot] [PATCH 06/26] x86: dts: Update to include ACTL register details Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 07/26] acpi: Change build log for ASL files Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 08/26] acpi: Explicitly spell out dsdt.c in the make rule Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 09/26] acpi: Specify U-Boot include path for ASL files Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 10/26] acpi: Do not disable all errors/warnings/remarks when compiling ASL Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 11/26] x86: acpi: Remove unneeded codes Bin Meng
2016-05-03 12:33 ` Stefan Roese
2016-05-02 7:33 ` [U-Boot] [PATCH 12/26] x86: acpi: Various changes to acpi_table.h Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 13/26] x86: acpi: Reorder codes in acpi_table.h Bin Meng
2016-05-03 12:45 ` Stefan Roese
2016-05-02 7:33 ` [U-Boot] [PATCH 14/26] x86: acpi: Remove acpi_create_ssdt_generator() Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 15/26] x86: acpi: Change fill_header() Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 16/26] x86: acpi: Adjust orders in acpi_table.c Bin Meng
2016-05-03 12:48 ` Stefan Roese [this message]
2016-05-02 7:33 ` [U-Boot] [PATCH 17/26] x86: acpi: Change table write routine signature to use u32 Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 18/26] x86: acpi: Align FACS table to a 64 byte boundary Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 19/26] x86: acpi: Add some generic ASL libraries Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 20/26] x86: baytrail: Add platform ASL files Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 21/26] x86: baytrail: Generate ACPI FADT/MADT tables Bin Meng
2016-05-03 12:52 ` Stefan Roese
2016-05-07 5:48 ` Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 22/26] x86: baytrail: Enable ACPI table generation for all boards Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 23/26] x86: baytrail: Add .gitignore for ACPI enabled boards Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 24/26] x86: Remove acpi=off boot parameter when ACPI is on Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 25/26] x86: doc: Minor update for accuracy Bin Meng
2016-05-02 7:33 ` [U-Boot] [PATCH 26/26] x86: doc: Document ACPI support Bin Meng
2016-05-03 13:01 ` [U-Boot] [PATCH 00/26] x86: Initial ACPI support for Intel BayTrail Stefan Roese
2016-05-06 1:14 ` Bin Meng
2016-05-06 13:16 ` Simon Glass
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=57289E27.5080600@denx.de \
--to=sr@denx.de \
--cc=u-boot@lists.denx.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.