From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Roese Date: Tue, 3 May 2016 14:48:39 +0200 Subject: [U-Boot] [PATCH 16/26] x86: acpi: Adjust orders in acpi_table.c In-Reply-To: <1462174426-3470-17-git-send-email-bmeng.cn@gmail.com> References: <1462174426-3470-1-git-send-email-bmeng.cn@gmail.com> <1462174426-3470-17-git-send-email-bmeng.cn@gmail.com> Message-ID: <57289E27.5080600@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > > 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 > + * Copyright (C) 2016, Bin Meng > * > * 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