x86: Initial ACPI support for Intel BayTrail
cover x86: Initial ACPI support for Intel BayTrail
This series introduces initial ACPI support for Intel BayTrail.
Advanced Configuration and Power Interface (ACPI) aims to establish industry-standard interfaces enabling OS-directed configuration, power management, and thermal management of mobile, desktop, and server platforms.
Linux can boot without ACPI with "acpi=off" command line parameter, but with ACPI the kernel gains the capabilities to handle power management. For Windows, ACPI is a must-have firmware feature since Windows Vista. CONFIG_GENERATE_ACPI_TABLE is the config option to turn on ACPI support in U-Boot. This requires Intel ACPI compiler to be installed on your host to compile ACPI DSDT table written in ASL format to AML format. You can get the compiler via "apt-get install iasl" if you are on Ubuntu or download the source from acpica website to compile one by yourself.
Current ACPI support in U-Boot is not complete. More features will be added in the future. The status as of today is:
* Support generating RSDT, XSDT, FACS, FADT, MADT, MCFG tables.
* Support one static DSDT table only, compiled by Intel ACPI compiler.
* Support S0/S5 only, no S3/S4 boot path support yet.
* No ACPI global NVS support (this can be optional, but we may need it in the future to simplify ASL code logic when utilizing NVS variables).
* No dynamic AML bytecodes insertion at run-time (this is optional as we can always describe the board in the static way).
* All ACPI interrupts are routed to SCI for OS to handle. No legacy SMI implementation within U-Boot.
* Install Ubuntu from U-Boot plus SeaBIOS does not work.
* Install Windows 8.1/10 from U-Boot plus SeaBIOS does not work.
So far ACPI is enabled on BayTrail based boards. Testing was done by booting a pre-installed Ubuntu 14.04 from a SATA drive. Most devices seem to work correctly and the board can respond a reboot/shutdown command from Ubuntu.
This series is available at u-boot-x86/acpi-working.
Bin Meng (26):
x86: Drop asm/acpi.h
x86: Fix build warning in tables.c when CONFIG_SEABIOS
x86: acpi: Fix compiler warnings in write_acpi_tables()
x86: irq: Reserve IRQ9 for ACPI in PIC mode
x86: irq: Enable SCI on IRQ9
x86: dts: Update to include ACTL register details
acpi: Change build log for ASL files
acpi: Explicitly spell out dsdt.c in the make rule
acpi: Specify U-Boot include path for ASL files
acpi: Do not disable all errors/warnings/remarks when compiling ASL
x86: acpi: Remove unneeded codes
x86: acpi: Various changes to acpi_table.h
x86: acpi: Reorder codes in acpi_table.h
x86: acpi: Remove acpi_create_ssdt_generator()
x86: acpi: Change fill_header()
x86: acpi: Adjust orders in acpi_table.c
x86: acpi: Change table write routine signature to use u32
x86: acpi: Align FACS table to a 64 byte boundary
x86: acpi: Add some generic ASL libraries
x86: baytrail: Add platform ASL files
x86: baytrail: Generate ACPI FADT/MADT tables
x86: baytrail: Enable ACPI table generation for all boards
x86: baytrail: Add .gitignore for ACPI enabled boards
x86: Remove acpi=off boot parameter when ACPI is on
x86: doc: Minor update for accuracy
x86: doc: Document ACPI support
arch/x86/cpu/baytrail/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 162 +++++++ arch/x86/cpu/irq.c | 29 ++ arch/x86/cpu/ivybridge/lpc.c | 1 - arch/x86/cpu/ivybridge/model_206ax.c | 1 - arch/x86/cpu/ivybridge/northbridge.c | 1 - arch/x86/dts/bayleybay.dts | 1 + arch/x86/dts/conga-qeval20-qa3-e3845.dts | 1 + arch/x86/dts/crownbay.dts | 1 + arch/x86/dts/galileo.dts | 1 + arch/x86/dts/minnowmax.dts | 1 + arch/x86/dts/qemu-x86_q35.dts | 2 + arch/x86/include/asm/acpi.h | 24 - arch/x86/include/asm/acpi/debug.asl | 136 ++++++ arch/x86/include/asm/acpi/globutil.asl | 113 +++++ arch/x86/include/asm/acpi/statdef.asl | 82 ++++ arch/x86/include/asm/acpi_table.h | 447 ++++++++----------- .../include/asm/arch-baytrail/acpi/irq_helper.h | 111 +++++ .../include/asm/arch-baytrail/acpi/irqlinks.asl | 489 +++++++++++++++++++++ .../include/asm/arch-baytrail/acpi/irqroute.asl | 48 ++ arch/x86/include/asm/arch-baytrail/acpi/irqroute.h | 27 ++ arch/x86/include/asm/arch-baytrail/acpi/lpc.asl | 121 +++++ .../include/asm/arch-baytrail/acpi/platform.asl | 34 ++ .../include/asm/arch-baytrail/acpi/sleepstates.asl | 13 + .../asm/arch-baytrail/acpi/southcluster.asl | 211 +++++++++ arch/x86/include/asm/arch-baytrail/acpi/usb.asl | 34 ++ arch/x86/include/asm/arch-baytrail/acpi/xhci.asl | 31 ++ arch/x86/include/asm/arch-baytrail/device.h | 74 ++++ arch/x86/include/asm/arch-baytrail/iomap.h | 70 +++ arch/x86/include/asm/arch-baytrail/irq.h | 86 ++++ arch/x86/include/asm/irq.h | 4 + arch/x86/lib/acpi_table.c | 311 ++++++------- arch/x86/lib/tables.c | 1 + board/congatec/conga-qeval20-qa3-e3845/.gitignore | 3 + board/congatec/conga-qeval20-qa3-e3845/Makefile | 1 + .../conga-qeval20-qa3-e3845/acpi/mainboard.asl | 13 + board/congatec/conga-qeval20-qa3-e3845/dsdt.asl | 14 + board/intel/bayleybay/.gitignore | 3 + board/intel/bayleybay/Makefile | 1 + board/intel/bayleybay/acpi/mainboard.asl | 11 + board/intel/bayleybay/dsdt.asl | 14 + board/intel/minnowmax/.gitignore | 3 + board/intel/minnowmax/Makefile | 1 + board/intel/minnowmax/acpi/mainboard.asl | 11 + board/intel/minnowmax/dsdt.asl | 14 + configs/bayleybay_defconfig | 1 + configs/conga-qeval20-qa3-e3845_defconfig | 1 + configs/minnowmax_defconfig | 1 + doc/README.x86 | 76 +++- doc/device-tree-bindings/misc/intel,irq-router.txt | 5 + include/configs/x86-common.h | 9 +- scripts/Makefile.lib | 8 +- 52 files changed, 2368 insertions(+), 491 deletions(-) create mode 100644 arch/x86/cpu/baytrail/acpi.c delete mode 100644 arch/x86/include/asm/acpi.h create mode 100644 arch/x86/include/asm/acpi/debug.asl create mode 100644 arch/x86/include/asm/acpi/globutil.asl create mode 100644 arch/x86/include/asm/acpi/statdef.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irq_helper.h create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqlinks.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqroute.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqroute.h create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/lpc.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/platform.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/sleepstates.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/southcluster.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/usb.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/xhci.asl create mode 100644 arch/x86/include/asm/arch-baytrail/device.h create mode 100644 arch/x86/include/asm/arch-baytrail/iomap.h create mode 100644 arch/x86/include/asm/arch-baytrail/irq.h create mode 100644 board/congatec/conga-qeval20-qa3-e3845/.gitignore create mode 100644 board/congatec/conga-qeval20-qa3-e3845/acpi/mainboard.asl create mode 100644 board/congatec/conga-qeval20-qa3-e3845/dsdt.asl create mode 100644 board/intel/bayleybay/.gitignore create mode 100644 board/intel/bayleybay/acpi/mainboard.asl create mode 100644 board/intel/bayleybay/dsdt.asl create mode 100644 board/intel/minnowmax/.gitignore create mode 100644 board/intel/minnowmax/acpi/mainboard.asl create mode 100644 board/intel/minnowmax/dsdt.asl
Signature · 1 line
1.8.2.1
PATCH 1/26 x86: Drop asm/acpi.h
Remove asm/acpi.h which is never used.
---
arch/x86/cpu/ivybridge/lpc.c | 1 - arch/x86/cpu/ivybridge/model_206ax.c | 1 - arch/x86/cpu/ivybridge/northbridge.c | 1 - arch/x86/include/asm/acpi.h | 24 ------------------------ 4 files changed, 27 deletions(-) delete mode 100644 arch/x86/include/asm/acpi.h
arch/x86/cpu/ivybridge/lpc.c +0 -1
@@ -12,7 +12,6 @@#include <fdtdec.h> #include <rtc.h> #include <pci.h> -#include <asm/acpi.h> #include <asm/intel_regs.h> #include <asm/interrupt.h> #include <asm/io.h>
arch/x86/cpu/ivybridge/model_206ax.c +0 -1
@@ -12,7 +12,6 @@#include <dm.h> #include <fdtdec.h> #include <malloc.h> -#include <asm/acpi.h> #include <asm/cpu.h> #include <asm/cpu_x86.h> #include <asm/lapic.h>
arch/x86/cpu/ivybridge/northbridge.c +0 -1
@@ -10,7 +10,6 @@#include <common.h> #include <dm.h> #include <asm/msr.h> -#include <asm/acpi.h> #include <asm/cpu.h> #include <asm/intel_regs.h> #include <asm/io.h>
arch/x86/include/asm/acpi.h deleted +0 -24
@@ -1,24 +0,0 @@ -/* -* From coreboot -* -* Copyright (C) 2004 SUSE LINUX AG -* Copyright (C) 2004 Nick Barker -* Copyright (C) 2008-2009 coresystems GmbH -* (Written by Stefan Reinauer <[email protected]>) -* -* SPDX-License-Identifier: GPL-2.0 -*/ - -#ifndef __ASM_ACPI_H -#define __ASM_ACPI_H - -#define RSDP_SIG "RSD PTR "/* RSDT pointer signature */ -#define ACPI_TABLE_CREATOR "U-BootAC"/* Must be exactly 8 bytes long! */ -#define OEM_ID "U-Boot"/* Must be exactly 6 bytes long! */ -#define ASLC "U-Bo"/* Must be exactly 4 bytes long! */ - -/* 0 = S0, 1 = S1 ...*/ -int acpi_get_slp_type (void ); -void apci_set_slp_type (int type); - -#endif
Signature · 1 line
1.8.2.1
PATCH 2/26 x86: Fix build warning in tables.c when CONFIG_SEABIOS
In reply to Bin MengThe following build warning is seen in tables.c:
warning: implicit declaration of function 'memalign'
Add the missing header file to fix it.
---
arch/x86/lib/tables.c | 1 + 1 file changed, 1 insertion(+)
arch/x86/lib/tables.c +1 -0
@@ -5,6 +5,7 @@*/ #include <common.h> +#include <malloc.h> #include <asm/sfi.h> #include <asm/mpspec.h> #include <asm/smbios.h>
Signature · 1 line
1.8.2.1
PATCH 3/26 x86: acpi: Fix compiler warnings in write_acpi_tables()
In reply to Bin MengFix the following two build warnings in function 'write_acpi_tables':
warning: format '%lx' expects argument of type 'long unsigned int', but argument 2 has type 'u32' [-Wformat=]
---
arch/x86/lib/acpi_table.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/lib/acpi_table.c +2 -2
@@ -353,7 +353,7 @@ u32 write_acpi_tables(u32 start)/* Align ACPI tables to 16byte */ current =ALIGN (current,16 ); -debug ("ACPI: Writing ACPI tables at %lx.\n" , start); +debug ("ACPI: Writing ACPI tables at %x.\n" , start);/* We need at least an RSDP and an RSDT Table */ rsdp = (struct acpi_rsdp *)current;
@@ -432,7 +432,7 @@ u32 write_acpi_tables(u32 start) current =ALIGN (current,16 ); } -debug ("current = %lx\n" , current); +debug ("current = %x\n" , current);debug ("ACPI: done.\n" );
Signature · 1 line
1.8.2.1
PATCH 4/26 x86: irq: Reserve IRQ9 for ACPI in PIC mode
In reply to Bin MengReserve IRQ9 which is to be used as SCI interrupt number for ACPI in PIC mode.
---
arch/x86/cpu/irq.c | 4 ++++ 1 file changed, 4 insertions(+)
arch/x86/cpu/irq.c +4 -0
@@ -120,6 +120,10 @@ static int create_pirq_routing_table(struct udevice *dev) priv->irq_mask =fdtdec_get_int (blob, node,"intel,pirq-mask" ,PIRQ_BITMAP ); +#ifdef CONFIG_GENERATE_ACPI_TABLE +/* Reserve IRQ9 for SCI */ + priv->irq_mask &= ~(1 <<9 ); +#endif if (priv->config ==PIRQ_VIA_IBASE ) {int ibase_off;
Signature · 1 line
1.8.2.1
PATCH 4/26 x86: irq: Reserve IRQ9 for ACPI in PIC mode
Hi Bin,
Quoted 14 lines · Bin Meng
Reserve IRQ9 which is to be used as SCI interrupt number for ACPI in PIC mode.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 4 ++++ 1 file changed, 4 insertions(+)arch/x86/cpu/irq.c +0
-0
arch/x86/cpu/irq.c static int create_pirq_routing_table(struct udevice *dev) · line 126
Quoted 7 lines
arch/x86/cpu/irq.c +4
-0@@ -120,6 +120,10 @@ static int create_pirq_routing_table(struct udevice *dev) priv->irq_mask =fdtdec_get_int (blob, node,"intel,pirq-mask" ,PIRQ_BITMAP ); +#ifdef CONFIG_GENERATE_ACPI_TABLE +/* Reserve IRQ9 for SCI */ + priv->irq_mask &= ~(1 <<9 ); +#endif
Does it make sense to change this into using IS_ENABLED()?
if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) {
/* Reserve IRQ9 for SCI */
priv->irq_mask &= ~(1 << 9);
}To drop the #ifdef here?
Thanks,
Stefan
PATCH 4/26 x86: irq: Reserve IRQ9 for ACPI in PIC mode
Hi Stefan,
Quoted 30 lines · Stefan Roese
Hi Bin,
Quoted 15 lines · Bin Meng
Reserve IRQ9 which is to be used as SCI interrupt number for ACPI in PIC mode.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 4 ++++ 1 file changed, 4 insertions(+)arch/x86/cpu/irq.c +0
-0arch/x86/cpu/irq.c static int create_pirq_routing_table(struct udevice · line 127
Quoted 8 lines
arch/x86/cpu/irq.c +4
-0@@ -120,6 +120,10 @@ static int create_pirq_routing_table(struct udevice *dev) priv->irq_mask =fdtdec_get_int (blob, node,"intel,pirq-mask" ,PIRQ_BITMAP ); +#ifdef CONFIG_GENERATE_ACPI_TABLE +/* Reserve IRQ9 for SCI */ + priv->irq_mask &= ~(1 <<9 ); +#endif Does it make sense to change this into using
IS_ENABLED()?
Quoted 7 lines
if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) { /* Reserve IRQ9 for SCI */ priv->irq_mask &= ~(1 << 9); }To drop the #ifdef here?
Ah, this bothers me sometimes. I see some places in U-Boot uses #ifdef but IS_ENABLED somewhere else. I am not sure what the recommended guideline of U-Boot with regard to this?
Regards,
Bin
PATCH 4/26 x86: irq: Reserve IRQ9 for ACPI in PIC mode
Hi Bin,
Quoted 36 lines · Bin Meng
Quoted 35 lines · Stefan Roese
Hi Bin,
Quoted 15 lines · Bin Meng
Reserve IRQ9 which is to be used as SCI interrupt number for ACPI in PIC mode.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 4 ++++ 1 file changed, 4 insertions(+)arch/x86/cpu/irq.c +0
-0arch/x86/cpu/irq.c static int create_pirq_routing_table(struct udevice · line 127
Quoted 8 lines
arch/x86/cpu/irq.c +4
-0@@ -120,6 +120,10 @@ static int create_pirq_routing_table(struct udevice *dev) priv->irq_mask =fdtdec_get_int (blob, node,"intel,pirq-mask" ,PIRQ_BITMAP ); +#ifdef CONFIG_GENERATE_ACPI_TABLE +/* Reserve IRQ9 for SCI */ + priv->irq_mask &= ~(1 <<9 ); +#endif Does it make sense to change this into using
IS_ENABLED()?if (IS_ENABLED(CONFIG_GENERATE_ACPI_TABLE)) { /* Reserve IRQ9 for SCI */ priv->irq_mask &= ~(1 << 9); }
Quoted 6 lines
Quoted 2 lines
To drop the #ifdef here?
Ah, this bothers me sometimes. I see some places in U-Boot uses #ifdef but
IS_ENABLEDsomewhere else. I am not sure what the recommended guideline of U-Boot with regard to this?
We definitely strive to remove (or at least not add new) #ifdef's from the U-Boot code base. And IS_ENABLED() is a good way to achieve this. But it can only be used with config options available via Kconfig. And since CONFIG_GENERATE_ACPI_TABLE is a Kconfig symbol, my recommendation is to use it.
Thanks,
Stefan
PATCH 5/26 x86: irq: Enable SCI on IRQ9
In reply to Bin MengBy default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)
arch/x86/cpu/irq.c +25 -0
@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); + cell =fdt_getprop (blob, node,"intel,pirq-routing" , &len);if (!cell || len %sizeof (struct pirq_routing ))return -EINVAL ;
@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init (struct udevice *dev) {int ret;
@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table)); +#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif +return 0 ; }
arch/x86/include/asm/irq.h +4 -0
@@ -34,6 +34,8 @@ enum pirq_config {* IRQ N is available to be routed * @lb_bdf: irq router's PCI bus/device/function number encoding * @ibase: IBASE register block base address +* @actl_8bit: ACTL register width is 8-bit (for ICH series chipset) +* @actl_addr: ACTL register offset */ struct irq_router {int config;
@@ -41,6 +43,8 @@ struct irq_router {u16 irq_mask;u32 bdf;u32 ibase; +bool actl_8bit; +int actl_addr; };struct pirq_routing {
doc/device-tree-bindings/misc/intel,irq-router.txt +5 -0
@@ -14,6 +14,11 @@ Required properties : "ibase": IRQ routing is in the memory-mapped IBASE register block - intel,ibase-offset : IBASE register offset in the interrupt router's PCI configuration space, required only if intel,pirq-config = "ibase". +- intel,actl-8bit : If ACTL (ACPI control) register width is 8-bit, this must + be specified. The 8-bit ACTL register is seen on ICH series chipset, like + ICH9/Panther Point/etc. On Atom chipset it is a 32-bit register. +- intel,actl-addr : ACTL (ACPI control) register offset. ACTL can be either + in the interrupt router's PCI configuration space, or IBASE. - intel,pirq-link : Specifies the PIRQ link information with two cells. The first cell is the register offset that controls the first PIRQ link routing. The second cell is the total number of PIRQ links the router supports.
Signature · 1 line
1.8.2.1
PATCH 5/26 x86: irq: Enable SCI on IRQ9
Hi Bin,
Quoted 52 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)arch/x86/cpu/irq.c +21
-0@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); + cell =fdt_getprop (blob, node,"intel,pirq-routing" , &len);if (!cell || len %sizeof (struct pirq_routing ))return -EINVAL ;@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init (struct udevice *dev) {int ret;
arch/x86/cpu/irq.c int irq_router_common_init(struct udevice *dev) · line 254
Quoted 6 lines
arch/x86/cpu/irq.c +3
-0@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table)); +#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif
Again, this could also use IS_ENABLED.
Thanks,
Stefan
PATCH 5/26 x86: irq: Enable SCI on IRQ9
Hi Stefan,
Quoted 65 lines · Stefan Roese
Hi Bin,
Quoted 61 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)arch/x86/cpu/irq.c +3
-0@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); + cell =fdt_getprop (blob, node,"intel,pirq-routing" , &len);if (!cell || len % sizeof(struct pirq_routing)) return -EINVAL;arch/x86/cpu/irq.c +18
-0@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init (struct udevice *dev){ int ret;arch/x86/cpu/irq.c +0
-0@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table));
Quoted 7 lines
arch/x86/cpu/irq.c int irq_router_common_init(struct udevice *dev) · line 254
Quoted 3 lines
arch/x86/cpu/irq.c +3
-0+#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif Again, this could also use
IS_ENABLED.
If changing to use IS_ENABLED here, buildman reports:
05: x86: irq: Enable SCI on IRQ9
x86: + coreboot-x86 cougarcanyon2 minnowmaxchromebox_panther chromebook_samus crownbay conga-qeval20-qa3-e3845 efi-x86 bayleybay galileo chromebook_link
+ irq_enable_sci(dev);
+ ^w+../arch/x86/cpu/irq.c: In function 'irq_router_common_init':w+../arch/x86/cpu/irq.c:254:3: warning: implicit declaration of function 'irq_enable_sci' [-Wimplicit-function-declaration]
This is due to irq_enable_sci() is wrapped by #ifdef CONFIG_GENERATE_ACPI_TABLE and I don't think IS_ENABLED can be used there.
Regards,
Bin
PATCH 5/26 x86: irq: Enable SCI on IRQ9
Hi Bin,
Quoted 86 lines · Bin Meng
Quoted 65 lines · Stefan Roese
Hi Bin,
Quoted 61 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)arch/x86/cpu/irq.c +3
-0@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); + cell =fdt_getprop (blob, node,"intel,pirq-routing" , &len);if (!cell || len % sizeof(struct pirq_routing)) return -EINVAL;arch/x86/cpu/irq.c +18
-0@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init (struct udevice *dev){ int ret;arch/x86/cpu/irq.c +0
-0@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table));Quoted 7 lines
arch/x86/cpu/irq.c int irq_router_common_init(struct udevice *dev) · line 254
Quoted 3 lines
arch/x86/cpu/irq.c +3
-0+#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif Again, this could also use
IS_ENABLED.If changing to use
IS_ENABLEDhere, buildman reports:05: x86: irq: Enable SCI on IRQ9
x86: + coreboot-x86 cougarcanyon2 minnowmaxchromebox_pantherchromebook_samuscrownbay conga-qeval20-qa3-e3845 efi-x86 bayleybay galileochromebook_link(quoted diff) +2
-0+ irq_enable_sci(dev); + ^
w+../arch/x86/cpu/irq.c: In function 'irq_router_common_init':w+../arch/x86/cpu/irq.c:254:3: warning: implicit declaration of function 'irq_enable_sci' [-Wimplicit-function-declaration]
Quoted 3 lines
This is due to
irq_enable_sci()is wrapped by #ifdefCONFIG_GENERATE_ACPI_TABLEand I don't thinkIS_ENABLEDcan be used there.
Right. This only works in functions. I think the general rule is, that the #ifdef in the code itself are much worse than "just" around a whole function body. Thats why its okay (I think) to do it this way.
Thanks,
Stefan
PATCH 5/26 x86: irq: Enable SCI on IRQ9
Hi Stefan,
Quoted 101 lines · Stefan Roese
Hi Bin,
Quoted 92 lines · Bin Meng
Quoted 69 lines · Stefan Roese
Hi Bin,
Quoted 64 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)arch/x86/cpu/irq.c +3
-0@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); +cell = fdt_getprop(blob, node, "intel,pirq-routing", &len); if (!cell || len % sizeof(struct pirq_routing)) return -EINVAL;arch/x86/cpu/irq.c +18
-0@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init(struct udevice *dev) { int ret;arch/x86/cpu/irq.c +0
-0@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table));Quoted 8 lines
arch/x86/cpu/irq.c int irq_router_common_init(struct udevice *dev) · line 254
Quoted 3 lines
arch/x86/cpu/irq.c +3
-0+#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif Again, this could also use
IS_ENABLED.If changing to use
IS_ENABLEDhere, buildman reports:05: x86: irq: Enable SCI on IRQ9
x86: + coreboot-x86 cougarcanyon2 minnowmaxchromebox_pantherchromebook_samuscrownbay conga-qeval20-qa3-e3845 efi-x86 bayleybay galileochromebook_link(quoted diff) +2
-0+ irq_enable_sci(dev); + ^
w+../arch/x86/cpu/irq.c: In function 'irq_router_common_init':w+../arch/x86/cpu/irq.c:254:3: warning: implicit declaration of function 'irq_enable_sci' [-Wimplicit-function-declaration]Quoted 3 lines
This is due to
irq_enable_sci()is wrapped by #ifdefCONFIG_GENERATE_ACPI_TABLEand I don't thinkIS_ENABLEDcan be used there.
Quoted 5 lines
Right. This only works in functions. I think the general rule is, that the #ifdef in the code itself are much worse than "just" around a whole function body. Thats why its okay (I think) to do it this way.
So for this commit, leave it as it was?
Regards,
Bin
PATCH 5/26 x86: irq: Enable SCI on IRQ9
Hi Bin,
Quoted 102 lines · Bin Meng
Quoted 101 lines · Stefan Roese
Hi Bin,
Quoted 95 lines · Bin Meng
Quoted 69 lines · Stefan Roese
Hi Bin,
Quoted 64 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)arch/x86/cpu/irq.c +3
-0@@ -146,6 +146,9 @@ static int create_pirq_routing_table(struct udevice *dev) priv->ibase &= ~0xf ; } + priv->actl_8bit =fdtdec_get_bool (blob, node,"intel,actl-8bit" ); + priv->actl_addr =fdtdec_get_int (blob, node,"intel,actl-addr" ,0 ); +cell = fdt_getprop(blob, node, "intel,pirq-routing", &len); if (!cell || len % sizeof(struct pirq_routing)) return -EINVAL;arch/x86/cpu/irq.c +18
-0@@ -215,6 +218,24 @@ static int create_pirq_routing_table(struct udevice *dev)return 0 ; } +#ifdef CONFIG_GENERATE_ACPI_TABLE +static void irq_enable_sci (struct udevice *dev) +{ +struct irq_router *priv =dev_get_priv (dev); + +if (priv->actl_8bit) { +/* Bit7 must be turned on to enable ACPI */ +dm_pci_write_config8 (dev->parent, priv->actl_addr,0x80 ); + }else { +/* Write 0 to enable SCI on IRQ9 */ +if (priv->config ==PIRQ_VIA_PCI ) +dm_pci_write_config32 (dev->parent, priv->actl_addr,0 ); +else +writel (0 , priv->ibase + priv->actl_addr); + } +} +#endif +int irq_router_common_init(struct udevice *dev) { int ret;arch/x86/cpu/irq.c +0
-0@@ -228,6 +249,10 @@ int irq_router_common_init(struct udevice *dev)pirq_route_irqs (dev, pirq_routing_table->slots,get_irq_slot_count (pirq_routing_table));Quoted 8 lines
arch/x86/cpu/irq.c int irq_router_common_init(struct udevice *dev) · line 254
Quoted 3 lines
arch/x86/cpu/irq.c +3
-0+#ifdef CONFIG_GENERATE_ACPI_TABLE +irq_enable_sci (dev); +#endif Again, this could also use
IS_ENABLED.If changing to use
IS_ENABLEDhere, buildman reports:05: x86: irq: Enable SCI on IRQ9
x86: + coreboot-x86 cougarcanyon2 minnowmaxchromebox_pantherchromebook_samuscrownbay conga-qeval20-qa3-e3845 efi-x86 bayleybay galileochromebook_link(quoted diff) +2
-0+ irq_enable_sci(dev); + ^
w+../arch/x86/cpu/irq.c: In function 'irq_router_common_init':w+../arch/x86/cpu/irq.c:254:3: warning: implicit declaration of function 'irq_enable_sci' [-Wimplicit-function-declaration]This is due to
irq_enable_sci()is wrapped by #ifdefCONFIG_GENERATE_ACPI_TABLEand I don't thinkIS_ENABLEDcan be used there.
Quoted 7 lines
Quoted 5 lines
Right. This only works in functions. I think the general rule is, that the #ifdef in the code itself are much worse than "just" around a whole function body. Thats why its okay (I think) to do it this way.
So for this commit, leave it as it was?
What does the compiler generate when you remove the #ifdef around the function body?
Thanks,
Stefan
PATCH 5/26 x86: irq: Enable SCI on IRQ9
In reply to Bin MengQuoted 11 lines · Bin Meng
By default SCI is disabled after power on. ACTL is the register to enable SCI and route it to PIC/APIC. To support both ACPI in PIC mode and APIC mode, configure SCI to use IRQ9.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/irq.c | 25 ++++++++++++++++++++++ arch/x86/include/asm/irq.h | 4 ++++ doc/device-tree-bindings/misc/intel,irq-router.txt | 5 +++++ 3 files changed, 34 insertions(+)
PATCH 6/26 x86: dts: Update to include ACTL register details
In reply to Bin MengThis updates all x86 boards that currently have IRQ router in the dts files to include ACTL register details.
---
arch/x86/dts/bayleybay.dts | 1 + arch/x86/dts/conga-qeval20-qa3-e3845.dts | 1 + arch/x86/dts/crownbay.dts | 1 + arch/x86/dts/galileo.dts | 1 + arch/x86/dts/minnowmax.dts | 1 + arch/x86/dts/qemu-x86_q35.dts | 2 ++ 6 files changed, 7 insertions(+)
arch/x86/dts/bayleybay.dts +1 -0
@@ -84,6 +84,7 @@ compatible = "intel,irq-router"; intel,pirq-config = "ibase"; intel,ibase-offset = <0x50>; + intel,actl-addr = <0>; intel,pirq-link = <8 8>; intel,pirq-mask = <0xdee0>; intel,pirq-routing = <
arch/x86/dts/conga-qeval20-qa3-e3845.dts +1 -0
@@ -88,6 +88,7 @@ compatible = "intel,irq-router"; intel,pirq-config = "ibase"; intel,ibase-offset = <0x50>; + intel,actl-addr = <0>; intel,pirq-link = <8 8>; intel,pirq-mask = <0xdee0>; intel,pirq-routing = <
arch/x86/dts/crownbay.dts +1 -0
@@ -154,6 +154,7 @@ irq-router { compatible = "intel,queensbay-irq-router"; intel,pirq-config = "pci"; + intel,actl-addr = <0x58>; intel,pirq-link = <0x60 8>; intel,pirq-mask = <0xcee0>; intel,pirq-routing = <
arch/x86/dts/galileo.dts +1 -0
@@ -88,6 +88,7 @@ irq-router { compatible = "intel,quark-irq-router"; intel,pirq-config = "pci"; + intel,actl-addr = <0x58>; intel,pirq-link = <0x60 8>; intel,pirq-mask = <0xdef8>; intel,pirq-routing = <
arch/x86/dts/minnowmax.dts +1 -0
@@ -117,6 +117,7 @@ compatible = "intel,irq-router"; intel,pirq-config = "ibase"; intel,ibase-offset = <0x50>; + intel,actl-addr = <0>; intel,pirq-link = <8 8>; intel,pirq-mask = <0xdee0>; intel,pirq-routing = <
arch/x86/dts/qemu-x86_q35.dts +2 -0
@@ -69,6 +69,8 @@ irq-router { compatible = "intel,irq-router"; intel,pirq-config = "pci"; + intel,actl-8bit; + intel,actl-addr = <0x44>; intel,pirq-link = <0x60 8>; intel,pirq-mask = <0x0e40>; intel,pirq-routing = <
Signature · 1 line
1.8.2.1
PATCH 7/26 acpi: Change build log for ASL files
In reply to Bin MengCurrently when compiling U-Boot with ASL file, the build log says:
ASL board/intel/bayleybay/dsdt.c
This looks odd as ASL compiler's input is ASL file, not C file. Change the make rule to use $< instead.
---
scripts/Makefile.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/Makefile.lib +1 -1
@@ -323,7 +323,7 @@ $(obj)/%.S: $(src)/%.ttf # ACPI # --------------------------------------------------------------------------- -quiet_cmd_acpi_c_asl= ASL $@ +quiet_cmd_acpi_c_asl= ASL $< cmd_acpi_c_asl= \ $(CPP) -x assembler-with-cpp -P -o $<.tmp $<; \ iasl -p $< -tc -va $<.tmp; \
Signature · 1 line
1.8.2.1
PATCH 8/26 acpi: Explicitly spell out dsdt.c in the make rule
In reply to Bin MengCurrently the make rule for dsdt.c uses a wildcard, as below:
$(obj)/%.c: $(src)/%.asl
To avoid any side effect, explicitly mention dsdt.c as this is the file we intend to use for ACPI DSDT AML generation.
---
scripts/Makefile.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/Makefile.lib +1 -1
@@ -329,7 +329,7 @@ cmd_acpi_c_asl= \ iasl -p $< -tc -va $<.tmp; \ mv $(patsubst %.asl,%.hex,$<) $@ -$(obj)/%.c: $(src)/%.asl +$(obj)/dsdt.c: $(src)/dsdt.asl $(call cmd,acpi_c_asl) # Bzip2
Signature · 1 line
1.8.2.1
PATCH 9/26 acpi: Specify U-Boot include path for ASL files
In reply to Bin MengIt will be much easier if we split the whole dsdt.asl file into multiple smaller ASL parts and have access to U-Boot include files.
---
scripts/Makefile.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/Makefile.lib +1 -1
@@ -325,7 +325,7 @@ $(obj)/%.S: $(src)/%.ttf # --------------------------------------------------------------------------- quiet_cmd_acpi_c_asl= ASL $< cmd_acpi_c_asl= \ - $(CPP) -x assembler-with-cpp -P -o $<.tmp $<; \ + $(CPP) -x assembler-with-cpp -P $(UBOOTINCLUDE) -o $<.tmp $<; \ iasl -p $< -tc -va $<.tmp; \ mv $(patsubst %.asl,%.hex,$<) $@
Signature · 1 line
1.8.2.1
PATCH 10/26 acpi: Do not disable all errors/warnings/remarks when compiling ASL
In reply to Bin MengRemove -va option when invoking IASL compiler so that we can see errors/warnings/remarks in the build log.
---
scripts/Makefile.lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/Makefile.lib +1 -1
@@ -326,7 +326,7 @@ $(obj)/%.S: $(src)/%.ttf quiet_cmd_acpi_c_asl= ASL $< cmd_acpi_c_asl= \ $(CPP) -x assembler-with-cpp -P $(UBOOTINCLUDE) -o $<.tmp $<; \ - iasl -p $< -tc -va $<.tmp; \ + iasl -p $< -tc $<.tmp; \ mv $(patsubst %.asl,%.hex,$<) $@ $(obj)/dsdt.c: $(src)/dsdt.asl
Signature · 1 line
1.8.2.1
PATCH 11/26 x86: acpi: Remove unneeded codes
In reply to Bin Meng- Remove #include <> header files.
- Remove APM_CNT register defines, which should not be here as they are SMI related.
- Remove MP_IRQ_ defines as they are duplicates of the same ones in asm/mpspec.h.
- Remove ACTL register defines, which should not be here as they are chipset specific.
- Remove functional fixed hardware defines, which are not used.
- Remove dev_scope related defines, which are not used.
---
arch/x86/include/asm/acpi_table.h | 68 --------------------------------------- 1 file changed, 68 deletions(-)
arch/x86/include/asm/acpi_table.h +0 -68
@@ -6,11 +6,6 @@* SPDX-License-Identifier: GPL-2.0+ */ -#include <common.h> -#include <malloc.h> -#include <asm/post.h> -#include <linux/string.h> -#define RSDP_SIG "RSD PTR "/* RSDT pointer signature */ #define ACPI_TABLE_CREATOR "UBOOT "/* Must be 8 bytes long! */ #define OEM_ID "UBOOT "/* Must be 6 bytes long! */
@@ -19,42 +14,6 @@#define OEM_REVISION 42#define ASL_COMPILER_REVISION 42 -/* IO ports to generate SMIs */ -#define APM_CNT 0xb2 -#define APM_CNT_CST_CONTROL 0x85 -#define APM_CNT_PST_CONTROL 0x80 -#define APM_CNT_ACPI_DISABLE 0x1e -#define APM_CNT_ACPI_ENABLE 0xe1 -#define APM_CNT_MBI_UPDATE 0xeb -#define APM_CNT_GNVS_UPDATE 0xea -#define APM_CNT_FINALIZE 0xcb -#define APM_CNT_LEGACY 0xcc -#define APM_ST 0xb3 - -/* Multiple Processor Interrupts */ -#define MP_IRQ_POLARITY_DEFAULT 0x0 -#define MP_IRQ_POLARITY_HIGH 0x1 -#define MP_IRQ_POLARITY_LOW 0x3 -#define MP_IRQ_POLARITY_MASK 0x3 -#define MP_IRQ_TRIGGER_DEFAULT 0x0 -#define MP_IRQ_TRIGGER_EDGE 0x4 -#define MP_IRQ_TRIGGER_LEVEL 0xc -#define MP_IRQ_TRIGGER_MASK 0xc - -/* -* Interrupt assigned for SCI in order to -* create the ACPI MADT IRQ override entry -*/ -#define ACTL 0x00 -#define SCIS_MASK 0x07 -#define SCIS_IRQ9 0x00 -#define SCIS_IRQ10 0x01 -#define SCIS_IRQ11 0x02 -#define SCIS_IRQ20 0x04 -#define SCIS_IRQ21 0x05 -#define SCIS_IRQ22 0x06 -#define SCIS_IRQ23 0x07 -#define ACPI_REV_ACPI_1_0 1#define ACPI_REV_ACPI_2_0 1#define ACPI_REV_ACPI_3_0 2
@@ -105,14 +64,6 @@ enum acpi_address_space_type {ACPI_ADDRESS_SPACE_FIXED =0x7f /* Functional fixed hardware */ }; -/* functional fixed hardware */ -#define ACPI_FFIXEDHW_VENDOR_INTEL 1/* Intel */ -#define ACPI_FFIXEDHW_CLASS_HLT 0/* C1 Halt */ -#define ACPI_FFIXEDHW_CLASS_IO_HLT 1/* C1 I/O then Halt */ -#define ACPI_FFIXEDHW_CLASS_MWAIT 2/* MWAIT Native C-state */ -#define ACPI_FFIXEDHW_FLAG_HW_COORD 1/* Hardware Coordination bit */ -#define ACPI_FFIXEDHW_FLAG_BM_STS 2/* BM_STS avoidance bit */ -/* Access size definitions for Generic address structure */ enum acpi_address_space_size {ACPI_ACCESS_SIZE_UNDEFINED =0 ,/* Undefined (legacy reasons) */
@@ -172,25 +123,6 @@ struct acpi_madt {u32 flags;/* Multiple APIC flags */ } acpi_madt_t; -enum dev_scope_type { -SCOPE_PCI_ENDPOINT =1 , -SCOPE_PCI_SUB =2 , -SCOPE_IOAPIC =3 , -SCOPE_MSI_HPET =4 -}; - -typedef struct dev_scope { -u8 type; -u8 length; -u8 reserved[2 ]; -u8 enumeration; -u8 start_bus; -struct { -u8 dev; -u8 fn; - } path[0 ]; -} __packed dev_scope_t; -/* MADT: APIC Structure Type*/ enum acpi_apic_types {LOCALAPIC =0 ,/* Processor local APIC */
Signature · 1 line
1.8.2.1
PATCH 11/26 x86: acpi: Remove unneeded codes
Hi Bin,
only a minor nitpicking comment about the patch subject. Perhaps its better to say:
x86: acpi: Remove unused code
Quoted 107 lines · Bin Meng
- Remove #include <> header files.
- RemoveAPM_CNTregister defines, which should not be here as they are SMI related.
- RemoveMP_IRQ_defines as they are duplicates of the same ones inasm/mpspec.h.
- Remove ACTL register defines, which should not be here as they are chipset specific.
- Remove functional fixed hardware defines, which are not used.
- Removedev_scoperelated defines, which are not used.Signed-off-by Bin Meng <[email protected]>---
arch/x86/include/asm/acpi_table.h | 68 --------------------------------------- 1 file changed, 68 deletions(-)arch/x86/include/asm/acpi_table.h +0
-61@@ -6,11 +6,6 @@* SPDX-License-Identifier: GPL-2.0+ */ -#include <common.h> -#include <malloc.h> -#include <asm/post.h> -#include <linux/string.h> -#define RSDP_SIG "RSD PTR "/* RSDT pointer signature */ #define ACPI_TABLE_CREATOR "UBOOT "/* Must be 8 bytes long! */ #define OEM_ID "UBOOT "/* Must be 6 bytes long! */ @@ -19,42 +14,6 @@#define OEM_REVISION 42#define ASL_COMPILER_REVISION 42 -/* IO ports to generate SMIs */ -#define APM_CNT 0xb2 -#define APM_CNT_CST_CONTROL 0x85 -#define APM_CNT_PST_CONTROL 0x80 -#define APM_CNT_ACPI_DISABLE 0x1e -#define APM_CNT_ACPI_ENABLE 0xe1 -#define APM_CNT_MBI_UPDATE 0xeb -#define APM_CNT_GNVS_UPDATE 0xea -#define APM_CNT_FINALIZE 0xcb -#define APM_CNT_LEGACY 0xcc -#define APM_ST 0xb3 - -/* Multiple Processor Interrupts */ -#define MP_IRQ_POLARITY_DEFAULT 0x0 -#define MP_IRQ_POLARITY_HIGH 0x1 -#define MP_IRQ_POLARITY_LOW 0x3 -#define MP_IRQ_POLARITY_MASK 0x3 -#define MP_IRQ_TRIGGER_DEFAULT 0x0 -#define MP_IRQ_TRIGGER_EDGE 0x4 -#define MP_IRQ_TRIGGER_LEVEL 0xc -#define MP_IRQ_TRIGGER_MASK 0xc - -/* -* Interrupt assigned for SCI in order to -* create the ACPI MADT IRQ override entry -*/ -#define ACTL 0x00 -#define SCIS_MASK 0x07 -#define SCIS_IRQ9 0x00 -#define SCIS_IRQ10 0x01 -#define SCIS_IRQ11 0x02 -#define SCIS_IRQ20 0x04 -#define SCIS_IRQ21 0x05 -#define SCIS_IRQ22 0x06 -#define SCIS_IRQ23 0x07 -#define ACPI_REV_ACPI_1_0 1#define ACPI_REV_ACPI_2_0 1#define ACPI_REV_ACPI_3_0 2@@ -105,14 +64,6 @@ enum acpi_address_space_type {ACPI_ADDRESS_SPACE_FIXED =0x7f /* Functional fixed hardware */ }; -/* functional fixed hardware */ -#define ACPI_FFIXEDHW_VENDOR_INTEL 1/* Intel */ -#define ACPI_FFIXEDHW_CLASS_HLT 0/* C1 Halt */ -#define ACPI_FFIXEDHW_CLASS_IO_HLT 1/* C1 I/O then Halt */ -#define ACPI_FFIXEDHW_CLASS_MWAIT 2/* MWAIT Native C-state */ -#define ACPI_FFIXEDHW_FLAG_HW_COORD 1/* Hardware Coordination bit */ -#define ACPI_FFIXEDHW_FLAG_BM_STS 2/* BM_STS avoidance bit */ -/* Access size definitions for Generic address structure */ enum acpi_address_space_size {ACPI_ACCESS_SIZE_UNDEFINED =0 ,/* Undefined (legacy reasons) */ @@ -172,25 +123,6 @@ struct acpi_madt {u32 flags;/* Multiple APIC flags */ } acpi_madt_t; -enum dev_scope_type { -SCOPE_PCI_ENDPOINT =1 , -SCOPE_PCI_SUB =2 , -SCOPE_IOAPIC =3 , -SCOPE_MSI_HPET =4 -}; - -typedef struct dev_scope { - u8 type; - u8 length; - u8 reserved[2]; - u8 enumeration;
arch/x86/include/asm/acpi_table.h struct acpi_madt { · line 128
Quoted 10 lines
arch/x86/include/asm/acpi_table.h +0
-7-u8 start_bus; -struct { -u8 dev; -u8 fn; - } path[0 ]; -}__packed dev_scope_t; -/* MADT: APIC Structure Type*/ enum acpi_apic_types {LOCALAPIC =0 ,/* Processor local APIC */
Thanks,
Stefan
PATCH 12/26 x86: acpi: Various changes to acpi_table.h
In reply to Bin Meng- Use "U-BOOT" and "U-BOOTBL" for the OEM ID and OEM table ID.
- Do not typedef acpi_header_t, instead use struct acpi_table_hader.
- Use a shorter name aslc_id and aslc-revision.
- Change MCFG base address to use 32-bit value pairs (_l and _h).
- Apply ACPI_APIC_ prefix to MADT APIC type macros and make their names to be more readable.
- Apply __packed to struct acpi_madt_irqoverride and struct acpi_madt_lapic_nmi tables, which are not naturally aligned by the compiler.
- Rename model to res1 as it is reserved after ACPI spec 1.0.
- Apply ACPI_ prefix to the PM profile macros and change them to enum.
- Add ospm_flags to FACS structure which is defined since ACPI 4.0.
---
arch/x86/include/asm/acpi_table.h | 72 +++++++++++++++++++++------------------ arch/x86/lib/acpi_table.c | 71 ++++++++++++++++++++------------------ 2 files changed, 75 insertions(+), 68 deletions(-)
arch/x86/include/asm/acpi_table.h +38 -34
@@ -6,10 +6,10 @@* SPDX-License-Identifier: GPL-2.0+ */ -#define RSDP_SIG "RSD PTR "/* RSDT pointer signature */ -#define ACPI_TABLE_CREATOR "UBOOT "/* Must be 8 bytes long! */ -#define OEM_ID "UBOOT "/* Must be 6 bytes long! */ -#define ASLC "INTL"/* Must be 4 bytes long! */ +#define RSDP_SIG "RSD PTR "/* RSDP pointer signature */ +#define OEM_ID "U-BOOT"/* U-Boot */ +#define OEM_TABLE_ID "U-BOOTBL"/* U-Boot Table */ +#define ASLC_ID "INTL"/* Intel ASL Compiler */ #define OEM_REVISION 42#define ASL_COMPILER_REVISION 42
@@ -74,7 +74,7 @@ enum acpi_address_space_size { };/* Generic ACPI header, provided by (almost) all tables */ -typedef struct acpi_table_header { +struct acpi_table_header {char signature[4 ];/* ACPI signature (4 ASCII characters) */ u32 length;/* Table length in bytes (incl. header) */ u8 revision;/* Table version (not ACPI version!) */
@@ -82,9 +82,9 @@ typedef struct acpi_table_header {char oem_id[6 ];/* OEM identification */ char oem_table_id[8 ];/* OEM table identification */ u32 oem_revision;/* OEM revision number */ -char asl_compiler_id[4 ];/* ASL compiler vendor ID */ -u32 asl_compiler_revision;/* ASL compiler revision number */ -} acpi_header_t; +char aslc_id[4 ];/* ASL compiler vendor ID */ +u32 aslc_revision;/* ASL compiler revision number */ +};/* A maximum number of 32 ACPI tables ought to be enough for now */ #define MAX_ACPI_TABLES 32
@@ -108,8 +108,8 @@ struct acpi_mcfg { };struct acpi_mcfg_mmconfig { -u32 base_address; -u32 base_reserved; +u32 base_address_l; +u32 base_address_h;u16 pci_segment_group_number;u8 start_bus_number;u8 end_bus_number;
@@ -125,17 +125,17 @@ struct acpi_madt {/* MADT: APIC Structure Type*/ enum acpi_apic_types { -LOCALAPIC =0 ,/* Processor local APIC */ -IOAPIC ,/* I/O APIC */ -IRQSOURCEOVERRIDE ,/* Interrupt source override */ -NMITYPE ,/* NMI source */ -LOCALNMITYPE ,/* Local APIC NMI */ -LAPICADDRESSOVERRIDE ,/* Local APIC address override */ -IOSAPIC ,/* I/O SAPIC */ -LOCALSAPIC ,/* Local SAPIC */ -PLATFORMIRQSOURCES ,/* Platform interrupt sources */ -LOCALX2SAPIC ,/* Processor local x2APIC */ -LOCALX2APICNMI ,/* Local x2APIC NMI */ +ACPI_APIC_LAPIC =0 ,/* Processor local APIC */ +ACPI_APIC_IOAPIC ,/* I/O APIC */ +ACPI_APIC_IRQ_SRC_OVERRIDE ,/* Interrupt source override */ +ACPI_APIC_NMI_SRC ,/* NMI source */ +ACPI_APIC_LAPIC_NMI ,/* Local APIC NMI */ +ACPI_APIC_LAPIC_ADDR_OVERRIDE ,/* Local APIC address override */ +ACPI_APIC_IOSAPIC ,/* I/O SAPIC */ +ACPI_APIC_LSAPIC ,/* Local SAPIC */ +ACPI_APIC_PLATFORM_IRQ_SRC ,/* Platform interrupt sources */ +ACPI_APIC_LX2APIC ,/* Processor local x2APIC */ +ACPI_APIC_LX2APIC_NMI ,/* Local x2APIC NMI */ };/* MADT: Processor Local APIC Structure */
@@ -153,7 +153,7 @@ struct acpi_madt_lapic {/* bits 1-31: reserved */ /* MADT: Local APIC NMI Structure */ -struct acpi_madt_lapic_nmi { +struct __packed acpi_madt_lapic_nmi {u8 type;/* Type (4) */ u8 length;/* Length in bytes (6) */ u8 processor_id;/* ACPI processor ID */
@@ -172,7 +172,7 @@ struct acpi_madt_ioapic { };/* MADT: Interrupt Source Override Structure */ -struct acpi_madt_irqoverride { +struct __packed acpi_madt_irqoverride {u8 type;/* Type (2) */ u8 length;/* Length in bytes (10) */ u8 bus;/* ISA (0) */
@@ -186,7 +186,7 @@ struct __packed acpi_fadt {struct acpi_table_header header;u32 firmware_ctrl;u32 dsdt; -u8 model; +u8 res1;u8 preferred_pm_profile;u16 sci_int;u32 smi_cmd;
@@ -281,15 +281,17 @@ struct __packed acpi_fadt {#define ACPI_FADT_LEGACY_FREE 0x00/* FADT Preferred Power Management Profile */ -#define PM_UNSPECIFIED 0 -#define PM_DESKTOP 1 -#define PM_MOBILE 2 -#define PM_WORKSTATION 3 -#define PM_ENTERPRISE_SERVER 4 -#define PM_SOHO_SERVER 5 -#define PM_APPLIANCE_PC 6 -#define PM_PERFORMANCE_SERVER 7 -#define PM_TABLET 8/* ACPI 5.0 */ +enum acpi_pm_profile { +ACPI_PM_UNSPECIFIED =0 , +ACPI_PM_DESKTOP , +ACPI_PM_MOBILE , +ACPI_PM_WORKSTATION , +ACPI_PM_ENTERPRISE_SERVER , +ACPI_PM_SOHO_SERVER , +ACPI_PM_APPLIANCE_PC , +ACPI_PM_PERFORMANCE_SERVER , +ACPI_PM_TABLET +};/* FACS (Firmware ACPI Control Structure) */ struct acpi_facs {
@@ -302,7 +304,9 @@ struct acpi_facs {u32 x_firmware_waking_vector_l;/* X FW waking vector, low */ u32 x_firmware_waking_vector_h;/* X FW waking vector, high */ u8 version;/* ACPI 4.0: 2 */ -u8 resv[31 ];/* FIXME: 4.0: ospm_flags */ +u8 res1[3 ]; +u32 ospm_flags;/* OSPM enabled flags */ +u8 res2[24 ]; };/* FACS flags */
arch/x86/lib/acpi_table.c +37 -34
187 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH 13/26 x86: acpi: Reorder codes in acpi_table.h
In reply to Bin MengReorder the ACPI tables appearance by following the order:
RSDP, RSDT, XSDT, FADT, FACS, MADT, MCFG. And adjust the table flags defines accordingly.
---
arch/x86/include/asm/acpi_table.h | 347 +++++++++++++++++++------------------- 1 file changed, 169 insertions(+), 178 deletions(-)
arch/x86/include/asm/acpi_table.h +169 -178
@@ -2,6 +2,7 @@* Based on acpi.c from coreboot * * Copyright (C) 2015, Saket Sinha <[email protected]> +* Copyright (C) 2016, Bin Meng <[email protected]> * * SPDX-License-Identifier: GPL-2.0+ */
@@ -11,33 +12,9 @@#define OEM_TABLE_ID "U-BOOTBL"/* U-Boot Table */ #define ASLC_ID "INTL"/* Intel ASL Compiler */ -#define OEM_REVISION 42 -#define ASL_COMPILER_REVISION 42 - -#define ACPI_REV_ACPI_1_0 1 -#define ACPI_REV_ACPI_2_0 1 -#define ACPI_REV_ACPI_3_0 2 -#define ACPI_REV_ACPI_4_0 3 -#define ACPI_REV_ACPI_5_0 5 -#define ACPI_RSDP_REV_ACPI_1_0 0#define ACPI_RSDP_REV_ACPI_2_0 2 -typedef struct acpi_gen_regaddr { -u8 space_id;/* Address space ID */ -u8 bit_width;/* Register size in bits */ -u8 bit_offset;/* Register bit offset */ -union { -/* Reserved in ACPI 2.0 - 2.0b */ -u8 resv; -/* Access size in ACPI 2.0c/3.0/4.0/5.0 */ -u8 access_size; - }; -u32 addrl;/* Register address, low 32 bits */ -u32 addrh;/* Register address, high 32 bits */ -}acpi_addr_t ; - -/* * RSDP (Root System Description Pointer) * Note: ACPI 1.0 didn't have length, xsdt_address, and ext_checksum
@@ -46,7 +23,7 @@ struct acpi_rsdp {char signature[8 ];/* RSDP signature */ u8 checksum;/* Checksum of the first 20 bytes */ char oem_id[6 ];/* OEM ID */ -u8 revision;/* 0 for ACPI 1.0, 2 for ACPI 2.0/3.0/4.0 */ +u8 revision;/* 0 for ACPI 1.0, others 2 */ u32 rsdt_address;/* Physical address of RSDT (32 bits) */ u32 length;/* Total RSDP length (incl. extended part) */ u64 xsdt_address;/* Physical address of XSDT (64 bits) */
@@ -54,24 +31,11 @@ struct acpi_rsdp {u8 reserved[3 ]; }; -enum acpi_address_space_type { -ACPI_ADDRESS_SPACE_MEMORY =0 ,/* System memory */ -ACPI_ADDRESS_SPACE_IO ,/* System I/O */ -ACPI_ADDRESS_SPACE_PCI ,/* PCI config space */ -ACPI_ADDRESS_SPACE_EC ,/* Embedded controller */ -ACPI_ADDRESS_SPACE_SMBUS ,/* SMBus */ -ACPI_ADDRESS_SPACE_PCC =0x0a ,/* Platform Comm. Channel */ -ACPI_ADDRESS_SPACE_FIXED =0x7f /* Functional fixed hardware */ -}; - -/* Access size definitions for Generic address structure */ -enum acpi_address_space_size { -ACPI_ACCESS_SIZE_UNDEFINED =0 ,/* Undefined (legacy reasons) */ -ACPI_ACCESS_SIZE_BYTE_ACCESS =1 , -ACPI_ACCESS_SIZE_WORD_ACCESS =2 , -ACPI_ACCESS_SIZE_DWORD_ACCESS =3 , -ACPI_ACCESS_SIZE_QWORD_ACCESS =4 -}; +#define ACPI_REV_ACPI_1_0 1 +#define ACPI_REV_ACPI_2_0 1 +#define ACPI_REV_ACPI_3_0 2 +#define ACPI_REV_ACPI_4_0 3 +#define ACPI_REV_ACPI_5_0 5/* Generic ACPI header, provided by (almost) all tables */ struct acpi_table_header {
@@ -87,7 +51,7 @@ struct acpi_table_header { };/* A maximum number of 32 ACPI tables ought to be enough for now */ -#define MAX_ACPI_TABLES 32 +#define MAX_ACPI_TABLES 32/* RSDT (Root System Description Table) */ struct acpi_rsdt {
@@ -101,84 +65,80 @@ struct acpi_xsdt {u64 entry[MAX_ACPI_TABLES ]; }; -/* MCFG (PCI Express MMIO config space BAR description table) */ -struct acpi_mcfg { -struct acpi_table_header header; -u8 reserved[8 ]; -}; - -struct acpi_mcfg_mmconfig { -u32 base_address_l; -u32 base_address_h; -u16 pci_segment_group_number; -u8 start_bus_number; -u8 end_bus_number; -u8 reserved[4 ]; +/* FADT Preferred Power Management Profile */ +enum acpi_pm_profile { +ACPI_PM_UNSPECIFIED =0 , +ACPI_PM_DESKTOP , +ACPI_PM_MOBILE , +ACPI_PM_WORKSTATION , +ACPI_PM_ENTERPRISE_SERVER , +ACPI_PM_SOHO_SERVER , +ACPI_PM_APPLIANCE_PC , +ACPI_PM_PERFORMANCE_SERVER , +ACPI_PM_TABLET }; -/* MADT (Multiple APIC Description Table) */ -struct acpi_madt { -struct acpi_table_header header; -u32 lapic_addr;/* Local APIC address */ -u32 flags;/* Multiple APIC flags */ -} acpi_madt_t; - -/* MADT: APIC Structure Type*/ -enum acpi_apic_types { -ACPI_APIC_LAPIC =0 ,/* Processor local APIC */ -ACPI_APIC_IOAPIC ,/* I/O APIC */ -ACPI_APIC_IRQ_SRC_OVERRIDE ,/* Interrupt source override */ -ACPI_APIC_NMI_SRC ,/* NMI source */ -ACPI_APIC_LAPIC_NMI ,/* Local APIC NMI */ -ACPI_APIC_LAPIC_ADDR_OVERRIDE ,/* Local APIC address override */ -ACPI_APIC_IOSAPIC ,/* I/O SAPIC */ -ACPI_APIC_LSAPIC ,/* Local SAPIC */ -ACPI_APIC_PLATFORM_IRQ_SRC ,/* Platform interrupt sources */ -ACPI_APIC_LX2APIC ,/* Processor local x2APIC */ -ACPI_APIC_LX2APIC_NMI ,/* Local x2APIC NMI */ -}; +/* FADT flags for p_lvl2_lat and p_lvl3_lat */ +#define ACPI_FADT_C2_NOT_SUPPORTED 101 +#define ACPI_FADT_C3_NOT_SUPPORTED 1001 -/* MADT: Processor Local APIC Structure */ -struct acpi_madt_lapic { -u8 type;/* Type (0) */ -u8 length;/* Length in bytes (8) */ -u8 processor_id;/* ACPI processor ID */ -u8 apic_id;/* Local APIC ID */ -u32 flags;/* Local APIC flags */ -}; +/* FADT Boot Architecture Flags */ +#define ACPI_FADT_LEGACY_FREE 0x00 +#define ACPI_FADT_LEGACY_DEVICES (1 << 0) +#define ACPI_FADT_8042 (1 << 1) +#define ACPI_FADT_VGA_NOT_PRESENT (1 << 2) +#define ACPI_FADT_MSI_NOT_SUPPORTED (1 << 3) +#define ACPI_FADT_NO_PCIE_ASPM_CONTROL (1 << 4) -#define LOCAL_APIC_FLAG_ENABLED (1 << 0) -/* bits 1-31: reserved */ -#define PCAT_COMPAT (1 << 0) -/* bits 1-31: reserved */ +/* FADT Feature Flags */ +#define ACPI_FADT_WBINVD (1 << 0) +#define ACPI_FADT_WBINVD_FLUSH (1 << 1) +#define ACPI_FADT_C1_SUPPORTED (1 << 2) +#define ACPI_FADT_C2_MP_SUPPORTED (1 << 3) +#define ACPI_FADT_POWER_BUTTON (1 << 4) +#define ACPI_FADT_SLEEP_BUTTON (1 << 5) +#define ACPI_FADT_FIXED_RTC (1 << 6) +#define ACPI_FADT_S4_RTC_WAKE (1 << 7) +#define ACPI_FADT_32BIT_TIMER (1 << 8) +#define ACPI_FADT_DOCKING_SUPPORTED (1 << 9) +#define ACPI_FADT_RESET_REGISTER (1 << 10) +#define ACPI_FADT_SEALED_CASE (1 << 11) +#define ACPI_FADT_HEADLESS (1 << 12) +#define ACPI_FADT_SLEEP_TYPE (1 << 13) +#define ACPI_FADT_PCI_EXPRESS_WAKE (1 << 14) +#define ACPI_FADT_PLATFORM_CLOCK (1 << 15) +#define ACPI_FADT_S4_RTC_VALID (1 << 16) +#define ACPI_FADT_REMOTE_POWER_ON (1 << 17) +#define ACPI_FADT_APIC_CLUSTER (1 << 18) +#define ACPI_FADT_APIC_PHYSICAL (1 << 19) +#define ACPI_FADT_HW_REDUCED_ACPI (1 << 20) +#define ACPI_FADT_LOW_PWR_IDLE_S0 (1 << 21) -/* MADT: Local APIC NMI Structure */ -struct __packed acpi_madt_lapic_nmi { -u8 type;/* Type (4) */ -u8 length;/* Length in bytes (6) */ -u8 processor_id;/* ACPI processor ID */ -u16 flags;/* MPS INTI flags */ -u8 lint;/* Local APIC LINT# */ +enum acpi_address_space_type { +ACPI_ADDRESS_SPACE_MEMORY =0 ,/* System memory */ +ACPI_ADDRESS_SPACE_IO ,/* System I/O */ +ACPI_ADDRESS_SPACE_PCI ,/* PCI config space */ +ACPI_ADDRESS_SPACE_EC ,/* Embedded controller */ +ACPI_ADDRESS_SPACE_SMBUS ,/* SMBus */ +ACPI_ADDRESS_SPACE_PCC =0x0a ,/* Platform Comm. Channel */ +ACPI_ADDRESS_SPACE_FIXED =0x7f /* Functional fixed hardware */ }; -/* MADT: I/O APIC Structure */ -struct acpi_madt_ioapic { -u8 type;/* Type (1) */ -u8 length;/* Length in bytes (12) */ -u8 ioapic_id;/* I/O APIC ID */ -u8 reserved; -u32 ioapic_addr;/* I/O APIC address */ -u32 gsi_base;/* Global system interrupt base */ +enum acpi_address_space_size { +ACPI_ACCESS_SIZE_UNDEFINED =0 , +ACPI_ACCESS_SIZE_BYTE_ACCESS , +ACPI_ACCESS_SIZE_WORD_ACCESS , +ACPI_ACCESS_SIZE_DWORD_ACCESS , +ACPI_ACCESS_SIZE_QWORD_ACCESS }; -/* MADT: Interrupt Source Override Structure */ -struct __packed acpi_madt_irqoverride { -u8 type;/* Type (2) */ -u8 length;/* Length in bytes (10) */ -u8 bus;/* ISA (0) */ -u8 source;/* Bus-relative int. source (IRQ) */ -u32 gsirq;/* Global system interrupt */ -u16 flags;/* MPS INTI flags */ +struct acpi_gen_regaddr { +u8 space_id;/* Address space ID */ +u8 bit_width;/* Register size in bits */ +u8 bit_offset;/* Register bit offset */ +u8 access_size;/* Access size */ +u32 addrl;/* Register address, low 32 bits */ +u32 addrh;/* Register address, high 32 bits */ };/* FADT (Fixed ACPI Description Table) */
@@ -241,78 +201,109 @@ struct __packed acpi_fadt {struct acpi_gen_regaddr x_gpe1_blk; }; -/* Flags for p_lvl2_lat and p_lvl3_lat */ -#define ACPI_FADT_C2_NOT_SUPPORTED 101 -#define ACPI_FADT_C3_NOT_SUPPORTED 1001 - -/* FADT Feature Flags */ -#define ACPI_FADT_WBINVD (1 << 0) -#define ACPI_FADT_WBINVD_FLUSH (1 << 1) -#define ACPI_FADT_C1_SUPPORTED (1 << 2) -#define ACPI_FADT_C2_MP_SUPPORTED (1 << 3) -#define ACPI_FADT_POWER_BUTTON (1 << 4) -#define ACPI_FADT_SLEEP_BUTTON (1 << 5) -#define ACPI_FADT_FIXED_RTC (1 << 6) -#define ACPI_FADT_S4_RTC_WAKE (1 << 7) -#define ACPI_FADT_32BIT_TIMER (1 << 8) -#define ACPI_FADT_DOCKING_SUPPORTED (1 << 9) -#define ACPI_FADT_RESET_REGISTER (1 << 10) -#define ACPI_FADT_SEALED_CASE (1 << 11) -#define ACPI_FADT_HEADLESS (1 << 12) -#define ACPI_FADT_SLEEP_TYPE (1 << 13) -#define ACPI_FADT_PCI_EXPRESS_WAKE (1 << 14) -#define ACPI_FADT_PLATFORM_CLOCK (1 << 15) -#define ACPI_FADT_S4_RTC_VALID (1 << 16) -#define ACPI_FADT_REMOTE_POWER_ON (1 << 17) -#define ACPI_FADT_APIC_CLUSTER (1 << 18) -#define ACPI_FADT_APIC_PHYSICAL (1 << 19) -/* Bits 20-31: reserved ACPI 3.0 & 4.0 */ -#define ACPI_FADT_HW_REDUCED_ACPI (1 << 20) -#define ACPI_FADT_LOW_PWR_IDLE_S0 (1 << 21) -/* bits 22-31: reserved ACPI 5.0 */ - -/* FADT Boot Architecture Flags */ -#define ACPI_FADT_LEGACY_DEVICES (1 << 0) -#define ACPI_FADT_8042 (1 << 1) -#define ACPI_FADT_VGA_NOT_PRESENT (1 << 2) -#define ACPI_FADT_MSI_NOT_SUPPORTED (1 << 3) -#define ACPI_FADT_NO_PCIE_ASPM_CONTROL (1 << 4) -/* No legacy devices (including 8042) */ -#define ACPI_FADT_LEGACY_FREE 0x00 - -/* FADT Preferred Power Management Profile */ -enum acpi_pm_profile { -ACPI_PM_UNSPECIFIED =0 , -ACPI_PM_DESKTOP , -ACPI_PM_MOBILE , -ACPI_PM_WORKSTATION , -ACPI_PM_ENTERPRISE_SERVER , -ACPI_PM_SOHO_SERVER , -ACPI_PM_APPLIANCE_PC , -ACPI_PM_PERFORMANCE_SERVER , -ACPI_PM_TABLET -}; +/* FACS flags */ +#define ACPI_FACS_S4BIOS_F (1 << 0) +#define ACPI_FACS_64BIT_WAKE_F (1 << 1)/* FACS (Firmware ACPI Control Structure) */ struct acpi_facs { -char signature[4 ];/* "FACS" */ -u32 length;/* Length in bytes (>= 64) */ -u32 hardware_signature;/* Hardware signature */ -u32 firmware_waking_vector;/* Firmware waking vector */ -u32 global_lock;/* Global lock */ -u32 flags;/* FACS flags */ -u32 x_firmware_waking_vector_l;/* X FW waking vector, low */ -u32 x_firmware_waking_vector_h;/* X FW waking vector, high */ -u8 version;/* ACPI 4.0: 2 */ +char signature[4 ];/* "FACS" */ +u32 length;/* Length in bytes (>= 64) */ +u32 hardware_signature;/* Hardware signature */ +u32 firmware_waking_vector;/* Firmware waking vector */ +u32 global_lock;/* Global lock */ +u32 flags;/* FACS flags */ +u32 x_firmware_waking_vector_l;/* X FW waking vector, low */ +u32 x_firmware_waking_vector_h;/* X FW waking vector, high */ +u8 version;/* Version 2 */ u8 res1[3 ]; -u32 ospm_flags;/* OSPM enabled flags */ +u32 ospm_flags;/* OSPM enabled flags */ u8 res2[24 ]; }; -/* FACS flags */ -#define ACPI_FACS_S4BIOS_F (1 << 0) -#define ACPI_FACS_64BIT_WAKE_F (1 << 1) -/* Bits 31..2: reserved */ +/* MADT flags */ +#define ACPI_MADT_PCAT_COMPAT (1 << 0) + +/* MADT (Multiple APIC Description Table) */ +struct acpi_madt { +struct acpi_table_header header; +u32 lapic_addr;/* Local APIC address */ +u32 flags;/* Multiple APIC flags */ +}; + +/* MADT: APIC Structure Type*/ +enum acpi_apic_types { +ACPI_APIC_LAPIC =0 ,/* Processor local APIC */ +ACPI_APIC_IOAPIC ,/* I/O APIC */ +ACPI_APIC_IRQ_SRC_OVERRIDE ,/* Interrupt source override */ +ACPI_APIC_NMI_SRC ,/* NMI source */ +ACPI_APIC_LAPIC_NMI ,/* Local APIC NMI */ +ACPI_APIC_LAPIC_ADDR_OVERRIDE ,/* Local APIC address override */ +ACPI_APIC_IOSAPIC ,/* I/O SAPIC */ +ACPI_APIC_LSAPIC ,/* Local SAPIC */ +ACPI_APIC_PLATFORM_IRQ_SRC ,/* Platform interrupt sources */ +ACPI_APIC_LX2APIC ,/* Processor local x2APIC */ +ACPI_APIC_LX2APIC_NMI ,/* Local x2APIC NMI */ +}; + +/* MADT: Processor Local APIC Structure */ + +#define LOCAL_APIC_FLAG_ENABLED (1 << 0) + +struct acpi_madt_lapic { +u8 type;/* Type (0) */ +u8 length;/* Length in bytes (8) */ +u8 processor_id;/* ACPI processor ID */ +u8 apic_id;/* Local APIC ID */ +u32 flags;/* Local APIC flags */ +}; + +/* MADT: I/O APIC Structure */ +struct acpi_madt_ioapic { +u8 type;/* Type (1) */ +u8 length;/* Length in bytes (12) */ +u8 ioapic_id;/* I/O APIC ID */ +u8 reserved; +u32 ioapic_addr;/* I/O APIC address */ +u32 gsi_base;/* Global system interrupt base */ +}; + +/* MADT: Interrupt Source Override Structure */ +struct __packed acpi_madt_irqoverride { +u8 type;/* Type (2) */ +u8 length;/* Length in bytes (10) */ +u8 bus;/* ISA (0) */ +u8 source;/* Bus-relative int. source (IRQ) */ +u32 gsirq;/* Global system interrupt */ +u16 flags;/* MPS INTI flags */ +}; + +/* MADT: Local APIC NMI Structure */ +struct __packed acpi_madt_lapic_nmi { +u8 type;/* Type (4) */ +u8 length;/* Length in bytes (6) */ +u8 processor_id;/* ACPI processor ID */ +u16 flags;/* MPS INTI flags */ +u8 lint;/* Local APIC LINT# */ +}; + +/* MCFG (PCI Express MMIO config space BAR description table) */ +struct acpi_mcfg { +struct acpi_table_header header; +u8 reserved[8 ]; +}; + +struct acpi_mcfg_mmconfig { +u32 base_address_l; +u32 base_address_h; +u16 pci_segment_group_number; +u8 start_bus_number; +u8 end_bus_number; +u8 reserved[4 ]; +}; + +#define OEM_REVISION 42 +#define ASL_COMPILER_REVISION 42/* These can be used by the target port */
Signature · 1 line
1.8.2.1
PATCH 13/26 x86: acpi: Reorder codes in acpi_table.h
Hi Bin,
Nitpicking comment:
x86: acpi: Reorder code in acpi_table.h
Quoted 3 lines · Bin Meng
Reorder the ACPI tables appearance by following the order:
RSDP, RSDT, XSDT, FADT, FACS, MADT, MCFG. And adjust the table flags defines accordingly.
and "adjust the table flag defines" sound more correct to my (non-native English) ears.
Thanks,
Stefan
PATCH 14/26 x86: acpi: Remove acpi_create_ssdt_generator()
In reply to Bin MengThis acpi_create_ssdt_generator() currently does nothing. Remove this for now.
---
arch/x86/include/asm/acpi_table.h | 3 --- arch/x86/lib/acpi_table.c | 33 --------------------------------- 2 files changed, 36 deletions(-)
arch/x86/include/asm/acpi_table.h +0 -3
@@ -302,9 +302,6 @@ struct acpi_mcfg_mmconfig {u8 reserved[4 ]; }; -#define OEM_REVISION 42 -#define ASL_COMPILER_REVISION 42 -/* These can be used by the target port */ unsigned long acpi_create_madt_lapics (unsigned long current);
arch/x86/lib/acpi_table.c +0 -33
@@ -311,29 +311,6 @@ static void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, sizeof(struct acpi_rsdp)); } -static void acpi_create_ssdt_generator (struct acpi_table_header *ssdt, -const char *oem_table_id) -{ -unsigned long current = (unsigned long )ssdt + -sizeof (struct acpi_table_header ); - -memset ((void *)ssdt,0 ,sizeof (struct acpi_table_header )); - -memcpy (&ssdt->signature,"SSDT" ,4 ); -/* Access size in ACPI 2.0c/3.0/4.0/5.0 */ - ssdt->revision =ACPI_REV_ACPI_3_0 ; -memcpy (&ssdt->oem_id,OEM_ID ,6 ); -memcpy (&ssdt->oem_table_id, oem_table_id,8 ); - ssdt->oem_revision =OEM_REVISION ; -memcpy (&ssdt->aslc_id,ASLC_ID ,4 ); - ssdt->aslc_revision =ASL_COMPILER_REVISION ; - ssdt->length =sizeof (struct acpi_table_header ); - -/* (Re)calculate length and checksum */ - ssdt->length = current - (unsigned long )ssdt; - ssdt->checksum =table_compute_checksum ((void *)ssdt, ssdt->length); -} -/* * QEMU's version of write_acpi_tables is defined in * arch/x86/cpu/qemu/fw_cfg.c
@@ -349,7 +326,6 @@ u32 write_acpi_tables(u32 start)struct acpi_fadt *fadt;struct acpi_mcfg *mcfg;struct acpi_madt *madt; -struct acpi_table_header *ssdt; current = start;
@@ -426,15 +402,6 @@ u32 write_acpi_tables(u32 start) } current =ALIGN (current,16 ); -debug ("ACPI: * SSDT\n" ); - ssdt = (struct acpi_table_header *)current; -acpi_create_ssdt_generator (ssdt,OEM_TABLE_ID ); -if (ssdt->length >sizeof (struct acpi_table_header )) { - current += ssdt->length; -acpi_add_table (rsdp, ssdt); - current =ALIGN (current,16 ); - } -debug ("current = %x\n" , current);debug ("ACPI: done.\n" );
Signature · 1 line
1.8.2.1
PATCH 15/26 x86: acpi: Change fill_header()
In reply to Bin MengRename fill_header() to acpi_fill_header() for consistency. Change its signature to remove the 'length' parameter and make it a public API.
Also remove the unnecessary include files, and improve the AmlCode[] comment a little bit.
---
arch/x86/include/asm/acpi_table.h | 1 + arch/x86/lib/acpi_table.c | 22 ++++++++-------------- 2 files changed, 9 insertions(+), 14 deletions(-)
arch/x86/include/asm/acpi_table.h +1 -0
@@ -304,6 +304,7 @@ struct acpi_mcfg_mmconfig {/* These can be used by the target port */ +void acpi_fill_header (struct acpi_table_header *header,char *signature);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);
arch/x86/lib/acpi_table.c +8 -14
@@ -10,18 +10,13 @@#include <cpu.h> #include <dm.h> #include <dm/uclass-internal.h> -#include <dm/lists.h> #include <asm/acpi_table.h> -#include <asm/cpu.h> -#include <asm/ioapic.h> #include <asm/lapic.h> #include <asm/tables.h> -#include <asm/pci.h> /* -* IASL compiles the dsdt entries and -* writes the hex values to AmlCode array. -* CamelCase cannot be handled here. +* IASL compiles the dsdt entries and writes the hex values +* to a C array AmlCode[] (see dsdt.c). */ extern const unsigned char AmlCode[];
@@ -151,10 +146,9 @@ int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi,return lapic_nmi->length; } -static void fill_header (struct acpi_table_header *header,char *signature, -int length) +void acpi_fill_header (struct acpi_table_header *header,char *signature) { -memcpy (header->signature, signature, length); +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 );
@@ -168,7 +162,7 @@ static void acpi_create_madt(struct acpi_madt *madt)memset ((void *)madt,0 ,sizeof (struct acpi_madt ));/* Fill out header fields */ -fill_header (header,"APIC" ,4 ); +acpi_fill_header (header,"APIC" ); header->length =sizeof (struct acpi_madt );/* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
@@ -216,7 +210,7 @@ static void acpi_create_mcfg(struct acpi_mcfg *mcfg)memset ((void *)mcfg,0 ,sizeof (struct acpi_mcfg ));/* Fill out header fields */ -fill_header (header,"MCFG" ,4 ); +acpi_fill_header (header,"MCFG" ); header->length =sizeof (struct acpi_mcfg );/* ACPI 1.0/2.0: 1, ACPI 3.0: 2, ACPI 4.0: 3 */
@@ -249,7 +243,7 @@ static void acpi_write_rsdt(struct acpi_rsdt *rsdt)struct acpi_table_header *header = &(rsdt->header);/* Fill out header fields */ -fill_header (header,"RSDT" ,4 ); +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 */
@@ -267,7 +261,7 @@ static void acpi_write_xsdt(struct acpi_xsdt *xsdt)struct acpi_table_header *header = &(xsdt->header);/* Fill out header fields */ -fill_header (header,"XSDT" ,4 ); +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 */
Signature · 1 line
1.8.2.1
PATCH 16/26 x86: acpi: Adjust orders in acpi_table.c
In reply to Bin MengRearrange the routine order a little bit, to follow the order in which ACPI table is defined in acpi_table.h.
---
arch/x86/include/asm/acpi_table.h | 14 +-- arch/x86/lib/acpi_table.c | 227 +++++++++++++++++++------------------- 2 files changed, 121 insertions(+), 120 deletions(-)
arch/x86/include/asm/acpi_table.h +7 -7
@@ -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);
arch/x86/lib/acpi_table.c +114 -113
320 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH 16/26 x86: acpi: Adjust orders in acpi_table.c
Hi Bin,
Nitpicking:
x86: acpi: Adjust order in acpi_table.c
(s/orders/order)
Quoted 365 lines · Bin Meng
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 <[email protected]>---
arch/x86/include/asm/acpi_table.h | 14 +-- arch/x86/lib/acpi_table.c | 227 +++++++++++++++++++------------------- 2 files changed, 121 insertions(+), 120 deletions(-)arch/x86/include/asm/acpi_table.h +7
-7@@ -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);arch/x86/lib/acpi_table.c +107
-113@@ -2,6 +2,7 @@* Based on acpi.c from coreboot * * Copyright (C) 2015, Saket Sinha <[email protected]> +* Copyright (C) 2016, Bin Meng <[email protected]> * * 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;
arch/x86/lib/acpi_table.c u32 write_acpi_tables(u32 start) · line 402
Quoted 10 lines
arch/x86/lib/acpi_table.c +7
-0+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
PATCH 17/26 x86: acpi: Change table write routine signature to use u32
In reply to Bin MengUse u32 instead of unsigned long in the table write routines, as other routines do.
---
arch/x86/include/asm/acpi_table.h | 4 ++-- arch/x86/lib/acpi_table.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-)
arch/x86/include/asm/acpi_table.h +2 -2
@@ -307,12 +307,12 @@ struct acpi_mcfg_mmconfig {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); +u32 acpi_create_madt_lapics (u32 current);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);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); +u32 acpi_fill_madt (u32 current);u32 write_acpi_tables (u32 start);
arch/x86/lib/acpi_table.c +2 -2
@@ -183,7 +183,7 @@ static int acpi_create_madt_lapic(struct acpi_madt_lapic *lapic,return lapic->length; } -unsigned long acpi_create_madt_lapics (unsigned long current) +u32 acpi_create_madt_lapics (u32 current) {struct udevice *dev;
@@ -275,7 +275,7 @@ static int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig,return sizeof (struct acpi_mcfg_mmconfig ); } -static unsigned long acpi_fill_mcfg (unsigned long current) +static u32 acpi_fill_mcfg (u32 current) { current += acpi_create_mcfg_mmconfig ((struct acpi_mcfg_mmconfig *)current,
Signature · 1 line
1.8.2.1
PATCH 18/26 x86: acpi: Align FACS table to a 64 byte boundary
In reply to Bin MengPer ACPI spec, the FACS table address must be aligned to a 64 byte boundary (Windows checks this, but Linux does not).
---
arch/x86/lib/acpi_table.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/lib/acpi_table.c +1 -1
@@ -338,7 +338,7 @@ u32 write_acpi_tables(u32 start) current =ALIGN (current,16 ); xsdt = (struct acpi_xsdt *)current; current +=sizeof (struct acpi_xsdt ); - current =ALIGN (current,16 ); + current =ALIGN (current,64 );/* clear all table memory */ memset ((void *)start,0 , current - start);
Signature · 1 line
1.8.2.1
PATCH 19/26 x86: acpi: Add some generic ASL libraries
In reply to Bin MengThis adds several generic ASL libraries that can be included by other ASL files, which are:
- debug.asl: for debug output using POST I/O port and legacy serial port
- globutil.asl: for string compare routines
- statdef.asl: for _STA status values
---
arch/x86/include/asm/acpi/debug.asl | 136 +++++++++++++++++++++++++++++++++ arch/x86/include/asm/acpi/globutil.asl | 113 +++++++++++++++++++++++++++ arch/x86/include/asm/acpi/statdef.asl | 82 ++++++++++++++++++++ 3 files changed, 331 insertions(+) create mode 100644 arch/x86/include/asm/acpi/debug.asl create mode 100644 arch/x86/include/asm/acpi/globutil.asl create mode 100644 arch/x86/include/asm/acpi/statdef.asl
arch/x86/include/asm/acpi/debug.asl new file +136 -0
@@ -0,0 +1,136 @@ +/* + * Copyright (C) 2008 Advanced Micro Devices, Inc. + * Copyright (C) 2016 Bin Meng <[email protected]> + * + * Modified from coreboot src/arch/x86/acpi/debug.asl + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* POST register region */ +OperationRegion(X80, SystemIO, 0x80, 1) +Field(X80, ByteAcc, NoLock, Preserve) +{ + P80, 8 +} + +/* Legacy serial port register region */ +OperationRegion(CREG, SystemIO, 0x3F8, 8) +Field(CREG, ByteAcc, NoLock, Preserve) +{ + CDAT, 8, + CDLM, 8, + , 8, + CLCR, 8, + CMCR, 8, + CLSR, 8 +} + +/* DINI - Initialize the serial port to 115200 8-N-1 */ +Method(DINI) +{ + Store(0x83, CLCR) + Store(0x01, CDAT) /* 115200 baud (low) */ + Store(0x00, CDLM) /* 115200 baud (high) */ + Store(0x03, CLCR) /* word=8 stop=1 parity=none */ + Store(0x03, CMCR) /* DTR=1 RTS=1 out1/2=Off loop=Off */ + Store(0x00, CDLM) /* turn off interrupts */ +} + +/* THRE - Wait for serial port transmitter holding register to go empty */ +Method(THRE) +{ + And(CLSR, 0x20, Local0) + While (LEqual(Local0, Zero)) { + And(CLSR, 0x20, Local0) + } +} + +/* OUTX - Send a single raw character */ +Method(OUTX, 1) +{ + THRE() + Store(Arg0, CDAT) +} + +/* OUTC - Send a single character, expanding LF into CR/LF */ +Method(OUTC, 1) +{ + If (LEqual(Arg0, 0x0a)) { + OUTX(0x0d) + } + OUTX(Arg0) +} + +/* DBGN - Send a single hex nibble */ +Method(DBGN, 1) +{ + And(Arg0, 0x0f, Local0) + If (LLess(Local0, 10)) { + Add(Local0, 0x30, Local0) + } Else { + Add(Local0, 0x37, Local0) + } + OUTC(Local0) +} + +/* DBGB - Send a hex byte */ +Method(DBGB, 1) +{ + ShiftRight(Arg0, 4, Local0) + DBGN(Local0) + DBGN(Arg0) +} + +/* DBGW - Send a hex word */ +Method(DBGW, 1) +{ + ShiftRight(Arg0, 8, Local0) + DBGB(Local0) + DBGB(Arg0) +} + +/* DBGD - Send a hex dword */ +Method(DBGD, 1) +{ + ShiftRight(Arg0, 16, Local0) + DBGW(Local0) + DBGW(Arg0) +} + +/* Get a char from a string */ +Method(GETC, 2) +{ + CreateByteField(Arg0, Arg1, DBGC) + Return (DBGC) +} + +/* DBGO - Send either a string or an integer */ +Method(DBGO, 1, Serialized) +{ + If (LEqual(ObjectType(Arg0), 1)) { + If (LGreater(Arg0, 0xffff)) { + DBGD(Arg0) + } Else { + If (LGreater(Arg0, 0xff)) { + DBGW(Arg0) + } Else { + DBGB(Arg0) + } + } + } Else { + Name(BDBG, Buffer(80) {}) + Store(Arg0, BDBG) + Store(0, Local1) + While (One) { + Store(GETC(BDBG, Local1), Local0) + If (LEqual(Local0, 0)) { + Return (Zero) + } + OUTC(Local0) + Increment(Local1) + } + } + + Return (Zero) +}
arch/x86/include/asm/acpi/globutil.asl new file +113 -0
113 lines not on this page · raw message
arch/x86/include/asm/acpi/statdef.asl new file +82 -0
82 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH 20/26 x86: baytrail: Add platform ASL files
In reply to Bin MengThis adds basic BayTrail platform ASL files. They are intended to be included in dsdt.asl of any board that is based on this platform.
Note: ACPI mode support for GPIO/LPSS/SCC/LPE are not supported for now. They will be added in the future.
---
.../include/asm/arch-baytrail/acpi/irq_helper.h | 111 +++++ .../include/asm/arch-baytrail/acpi/irqlinks.asl | 489 +++++++++++++++++++++ .../include/asm/arch-baytrail/acpi/irqroute.asl | 48 ++ arch/x86/include/asm/arch-baytrail/acpi/irqroute.h | 27 ++ arch/x86/include/asm/arch-baytrail/acpi/lpc.asl | 121 +++++ .../include/asm/arch-baytrail/acpi/platform.asl | 34 ++ .../include/asm/arch-baytrail/acpi/sleepstates.asl | 13 + .../asm/arch-baytrail/acpi/southcluster.asl | 211 +++++++++ arch/x86/include/asm/arch-baytrail/acpi/usb.asl | 34 ++ arch/x86/include/asm/arch-baytrail/acpi/xhci.asl | 31 ++ arch/x86/include/asm/arch-baytrail/device.h | 74 ++++ arch/x86/include/asm/arch-baytrail/iomap.h | 70 +++ arch/x86/include/asm/arch-baytrail/irq.h | 86 ++++ 13 files changed, 1349 insertions(+) create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irq_helper.h create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqlinks.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqroute.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/irqroute.h create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/lpc.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/platform.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/sleepstates.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/southcluster.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/usb.asl create mode 100644 arch/x86/include/asm/arch-baytrail/acpi/xhci.asl create mode 100644 arch/x86/include/asm/arch-baytrail/device.h create mode 100644 arch/x86/include/asm/arch-baytrail/iomap.h create mode 100644 arch/x86/include/asm/arch-baytrail/irq.h
arch/x86/include/asm/arch-baytrail/acpi/irq_helper.h new file +111 -0
@@ -0,0 +1,111 @@ +/* +* Copyright (C) 2013 Google Inc. +* Copyright (C) 2014 Sage Electronics Engineering, LLC. +* Copyright (C) 2016 Bin Meng <[email protected]> +* +* Modified from coreboot src/soc/intel/baytrail/include/soc/irq_helper.h +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +/* +* This file intentionally gets included multiple times, to set pic and apic +* modes, so should not have guard statements added. +*/ + +/* +* This file will use irqroute.asl and irqroute.h to generate the ACPI IRQ +* routing for the platform being compiled. +* +* This method uses #defines in irqroute.h along with the macros contained +* in this file to generate an IRQ routing for each PCI device in the system. +*/ + +#undef PCI_DEV_PIRQ_ROUTES +#undef PCI_DEV_PIRQ_ROUTE +#undef ACPI_DEV_IRQ +#undef PCIE_BRIDGE_DEV +#undef RP_IRQ_ROUTES +#undef ROOTPORT_METHODS +#undef ROOTPORT_IRQ_ROUTES +#undef RP_METHOD + +#if defined(PIC_MODE ) + +#define ACPI_DEV_IRQ (dev_, pin_, pin_name_) \ + Package() { ## dev_ ## ffff, pin_, \_SB.PCI0.LPCB.LNK ## pin_name_, 0 } + +#define RP_IRQ_ROUTES (prefix_, func_, a_, b_, c_, d_) \ +Name(prefix_ ## func_ ## P, Package() \ +{ \ + ACPI_DEV_IRQ(0x0000, 0, a_), \ + ACPI_DEV_IRQ(0x0000, 1, b_), \ + ACPI_DEV_IRQ(0x0000, 2, c_), \ + ACPI_DEV_IRQ(0x0000, 3, d_), \ +}) + +/* define as blank so ROOTPORT_METHODS only gets inserted once */ +#define ROOTPORT_METHODS (prefix_, dev_) + +#else /* defined(PIC_MODE) */ + +#define ACPI_DEV_IRQ (dev_, pin_, pin_name_) \ + Package() { ## dev_ ## ffff, pin_, 0, PIRQ ## pin_name_ ## _APIC_IRQ } + +#define RP_IRQ_ROUTES (prefix_, func_, a_, b_, c_, d_) \ +Name(prefix_ ## func_ ## A, Package() \ +{ \ + ACPI_DEV_IRQ(0x0000, 0, a_), \ + ACPI_DEV_IRQ(0x0000, 1, b_), \ + ACPI_DEV_IRQ(0x0000, 2, c_), \ + ACPI_DEV_IRQ(0x0000, 3, d_), \ +}) + +#define ROOTPORT_METHODS (prefix_, dev_) \ + RP_METHOD(prefix_, dev_, 0) \ + RP_METHOD(prefix_, dev_, 1) \ + RP_METHOD(prefix_, dev_, 2) \ + RP_METHOD(prefix_, dev_, 3) \ + RP_METHOD(prefix_, dev_, 4) \ + RP_METHOD(prefix_, dev_, 5) \ + RP_METHOD(prefix_, dev_, 6) \ + RP_METHOD(prefix_, dev_, 7) + +#endif /* defined(PIC_MODE) */ + +#define PCI_DEV_PIRQ_ROUTE (dev_, a_, b_, c_, d_) \ + ACPI_DEV_IRQ(dev_, 0, a_), \ + ACPI_DEV_IRQ(dev_, 1, b_), \ + ACPI_DEV_IRQ(dev_, 2, c_), \ + ACPI_DEV_IRQ(dev_, 3, d_) + +#define PCIE_BRIDGE_DEV (prefix_, dev_, a_, b_, c_, d_) \ + ROOTPORT_IRQ_ROUTES(prefix_, a_, b_, c_, d_) \ + ROOTPORT_METHODS(prefix_, dev_) + +#define ROOTPORT_IRQ_ROUTES (prefix_, a_, b_, c_, d_) \ + RP_IRQ_ROUTES(prefix_, 0, a_, b_, c_, d_) \ + RP_IRQ_ROUTES(prefix_, 1, b_, c_, d_, a_) \ + RP_IRQ_ROUTES(prefix_, 2, c_, d_, a_, b_) \ + RP_IRQ_ROUTES(prefix_, 3, d_, a_, b_, c_) \ + RP_IRQ_ROUTES(prefix_, 4, a_, b_, c_, d_) \ + RP_IRQ_ROUTES(prefix_, 5, b_, c_, d_, a_) \ + RP_IRQ_ROUTES(prefix_, 6, c_, d_, a_, b_) \ + RP_IRQ_ROUTES(prefix_, 7, d_, a_, b_, c_) + +#define RP_METHOD (prefix_, dev_, func_)\ +Device (prefix_ ## 0 ## func_) \ +{ \ + Name(_ADR, dev_ ## 000 ## func_) \ + Name(_PRW, Package() { 0, 0 }) \ + Method(_PRT) { \ + If (PICM) { \ + Return (prefix_ ## func_ ## A) \ + } Else { \ + Return (prefix_ ## func_ ## P) \ + } \ + } \ +} + +/* SoC specific PIRQ route configuration */ +#include "irqroute.h"
arch/x86/include/asm/arch-baytrail/acpi/irqlinks.asl new file +489 -0
489 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/acpi/irqroute.asl new file +48 -0
48 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/acpi/irqroute.h new file +27 -0
@@ -0,0 +1,27 @@ +/* +* Copyright (C) 2016, Bin Meng <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <asm/arch/device.h> + +#define PCI_DEV_PIRQ_ROUTES \ + PCI_DEV_PIRQ_ROUTE(GFX_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(EMMC_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(SDIO_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(SD_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(SATA_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(XHCI_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(LPE_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(MMC45_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(SIO1_DEV, A, C, D, B), \ + PCI_DEV_PIRQ_ROUTE(TXE_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(HDA_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(PCIE_DEV, A, B, C, D), \ + PCI_DEV_PIRQ_ROUTE(EHCI_DEV, A, A, A, A), \ + PCI_DEV_PIRQ_ROUTE(SIO2_DEV, A, D, B, C), \ + PCI_DEV_PIRQ_ROUTE(PCU_DEV, A, B, C, D) + +#define PCIE_BRIDGE_IRQ_ROUTES \ + PCIE_BRIDGE_DEV(RP, PCIE_DEV, A, B, C, D)
arch/x86/include/asm/arch-baytrail/acpi/lpc.asl new file +121 -0
121 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/acpi/platform.asl new file +34 -0
@@ -0,0 +1,34 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <asm/acpi/statdef.asl> +#include <asm/arch/iomap.h> +#include <asm/arch/irq.h> + +/* + * The _PTS method (Prepare To Sleep) is called before the OS is + * entering a sleep state. The sleep state number is passed in Arg0. + */ +Method(_PTS, 1) +{ +} + +/* The _WAK method is called on system wakeup */ +Method(_WAK, 1) +{ + Return (Package() {0, 0}) +} + +/* TODO: add CPU ASL support */ +/* #include "cpu.asl" */ + +Scope (\_SB) +{ + #include "southcluster.asl" +} + +/* Chipset specific sleep states */ +#include "sleepstates.asl"
arch/x86/include/asm/arch-baytrail/acpi/sleepstates.asl new file +13 -0
@@ -0,0 +1,13 @@ +/* + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2016 Bin Meng <[email protected]> + * + * Modified from coreboot src/soc/intel/baytrail/acpi/sleepstates.asl + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +Name(\_S0, Package() {0x0, 0x0, 0x0, 0x0}) +Name(\_S3, Package() {0x5, 0x0, 0x0, 0x0}) +Name(\_S4, Package() {0x6, 0x0, 0x0, 0x0}) +Name(\_S5, Package() {0x7, 0x0, 0x0, 0x0})
arch/x86/include/asm/arch-baytrail/acpi/southcluster.asl new file +211 -0
211 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/acpi/usb.asl new file +34 -0
@@ -0,0 +1,34 @@ +/* + * Copyright (C) 2007-2009 coresystems GmbH + * Copyright (C) 2016 Bin Meng <[email protected]> + * + * Modified from coreboot src/soc/intel/baytrail/acpi/usb.asl + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* EHCI Controller 0:1d.0 */ + +Device (EHC1) +{ + Name(_ADR, 0x001d0000) + + /* Power Resources for Wake */ + Name(_PRW, Package() { 13, 4 }) + + /* Highest D state in S3 state */ + Name(_S3D, 2) + + /* Highest D state in S4 state */ + Name(_S4D, 2) + + Device (HUB7) + { + Name(_ADR, 0x00000000) + + Device(PRT1) { Name(_ADR, 1) } /* USB Port 0 */ + Device(PRT2) { Name(_ADR, 2) } /* USB Port 1 */ + Device(PRT3) { Name(_ADR, 3) } /* USB Port 2 */ + Device(PRT4) { Name(_ADR, 4) } /* USB Port 3 */ + } +}
arch/x86/include/asm/arch-baytrail/acpi/xhci.asl new file +31 -0
@@ -0,0 +1,31 @@ +/* + * Copyright (C) 2014 Google Inc. + * Copyright (C) 2016 Bin Meng <[email protected]> + * + * Modified from coreboot src/soc/intel/baytrail/acpi/xhci.asl + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* XHCI Controller 0:14.0 */ + +Device (XHCI) +{ + Name(_ADR, 0x00140000) + + /* Power Resources for Wake */ + Name(_PRW, Package() { 13, 3 }) + + /* Highest D state in S3 state */ + Name(_S3D, 3) + + Device (RHUB) + { + Name(_ADR, 0x00000000) + + Device (PRT1) { Name(_ADR, 1) } /* USB Port 0 */ + Device (PRT2) { Name(_ADR, 2) } /* USB Port 1 */ + Device (PRT3) { Name(_ADR, 3) } /* USB Port 2 */ + Device (PRT4) { Name(_ADR, 4) } /* USB Port 3 */ + } +}
arch/x86/include/asm/arch-baytrail/device.h new file +74 -0
74 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/iomap.h new file +70 -0
70 lines not on this page · raw message
arch/x86/include/asm/arch-baytrail/irq.h new file +86 -0
86 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH 21/26 x86: baytrail: Generate ACPI FADT/MADT tables
In reply to Bin MengFADT/MADT tables are platform specific. Generate them for BayTrail.
---
arch/x86/cpu/baytrail/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 162 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 arch/x86/cpu/baytrail/acpi.c
arch/x86/cpu/baytrail/Makefile +1 -0
@@ -8,3 +8,4 @@ obj-y += cpu.o obj-y += early_uart.o obj-y += fsp_configs.o obj-y += valleyview.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi.o
arch/x86/cpu/baytrail/acpi.c new file +162 -0
162 lines not on this page · raw message
Signature · 1 line
1.8.2.1
PATCH 21/26 x86: baytrail: Generate ACPI FADT/MADT tables
Hi Bin,
Quoted 169 lines · Bin Meng
FADT/MADT tables are platform specific. Generate them for BayTrail.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/baytrail/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 162 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+)create mode 100644
arch/x86/cpu/baytrail/acpi.carch/x86/cpu/baytrail/Makefile +1
-0@@ -8,3 +8,4 @@ obj-y += cpu.o obj-y += early_uart.o obj-y += fsp_configs.o obj-y += valleyview.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi.oarch/x86/cpu/baytrail/acpi.c new file +144
-0@@ -0,0 +1,162 @@ +/* +* Copyright (C) 2016, Bin Meng <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <asm/acpi_table.h> +#include <asm/ioapic.h> +#include <asm/mpspec.h> +#include <asm/tables.h> +#include <asm/arch/iomap.h> + +void acpi_create_fadt (struct acpi_fadt *fadt,struct acpi_facs *facs, +void *dsdt) +{ +struct acpi_table_header *header = &(fadt->header); +u16 pmbase =ACPI_BASE_ADDRESS ; + +memset ((void *)fadt,0 ,sizeof (struct acpi_fadt )); + +acpi_fill_header (header,"FACP" ); + header->length =sizeof (struct acpi_fadt ); + header->revision =3 ; + + fadt->firmware_ctrl = (u32 )facs; + fadt->dsdt = (u32 )dsdt; + fadt->preferred_pm_profile =ACPI_PM_MOBILE ; + fadt->sci_int =9 ; + fadt->smi_cmd =0 ; + fadt->acpi_enable =0 ; + fadt->acpi_disable =0 ; + fadt->s4bios_req =0x0 ; + fadt->pstate_cnt =0 ; + fadt->pm1a_evt_blk = pmbase; + fadt->pm1b_evt_blk =0x0 ; + fadt->pm1a_cnt_blk = pmbase +0x4 ; + fadt->pm1b_cnt_blk =0x0 ; + fadt->pm2_cnt_blk = pmbase +0x50 ; + fadt->pm_tmr_blk = pmbase +0x8 ; + fadt->gpe0_blk = pmbase +0x20 ; + fadt->gpe1_blk =0 ; + fadt->pm1_evt_len =4 ; + fadt->pm1_cnt_len =2 ; + fadt->pm2_cnt_len =1 ; + fadt->pm_tmr_len =4 ; + fadt->gpe0_blk_len =16 ; + fadt->gpe1_blk_len =0 ; + fadt->gpe1_base =0 ; + fadt->cst_cnt =0 ; + fadt->p_lvl3_lat =87 ; + fadt->flush_size =1024 ; + fadt->flush_stride =16 ; + fadt->duty_offset =1 ; + fadt->day_alrm =0xd ; + fadt->mon_alrm =0x00 ; + fadt->century =0x00 ; + fadt->iapc_boot_arch =ACPI_FADT_LEGACY_DEVICES |ACPI_FADT_8042 ; + + fadt->flags =ACPI_FADT_WBINVD | +ACPI_FADT_C1_SUPPORTED | +ACPI_FADT_SLEEP_BUTTON | +ACPI_FADT_RESET_REGISTER | +ACPI_FADT_SEALED_CASE | +ACPI_FADT_S4_RTC_WAKE | +ACPI_FADT_PLATFORM_CLOCK ; + fadt->reset_reg.space_id =1 ; + fadt->reset_reg.bit_width =8 ; + fadt->reset_reg.bit_offset =0 ; + fadt->reset_reg.access_size =ACPI_ACCESS_SIZE_BYTE_ACCESS ; + fadt->reset_reg.addrl =0xcf9 ; + fadt->reset_reg.addrh =0 ; + fadt->reset_value =6 ; + fadt->x_firmware_ctl_l = (u32 )facs; + fadt->x_firmware_ctl_h =0 ; + fadt->x_dsdt_l = (u32 )dsdt; + fadt->x_dsdt_h =0 ; + + fadt->x_pm1a_evt_blk.space_id =1 ; + fadt->x_pm1a_evt_blk.bit_width =32 ; + fadt->x_pm1a_evt_blk.bit_offset =0 ; + fadt->x_pm1a_evt_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_pm1a_evt_blk.addrl = pmbase; + fadt->x_pm1a_evt_blk.addrh =0x0 ; + + fadt->x_pm1b_evt_blk.space_id =1 ; + fadt->x_pm1b_evt_blk.bit_width =0 ; + fadt->x_pm1b_evt_blk.bit_offset =0 ; + fadt->x_pm1b_evt_blk.access_size =0 ; + fadt->x_pm1b_evt_blk.addrl =0x0 ; + fadt->x_pm1b_evt_blk.addrh =0x0 ; + + fadt->x_pm1a_cnt_blk.space_id =1 ; + fadt->x_pm1a_cnt_blk.bit_width =16 ; + fadt->x_pm1a_cnt_blk.bit_offset =0 ; + fadt->x_pm1a_cnt_blk.access_size =ACPI_ACCESS_SIZE_WORD_ACCESS ; + fadt->x_pm1a_cnt_blk.addrl = pmbase +0x4 ; + fadt->x_pm1a_cnt_blk.addrh =0x0 ; + + fadt->x_pm1b_cnt_blk.space_id =1 ; + fadt->x_pm1b_cnt_blk.bit_width =0 ; + fadt->x_pm1b_cnt_blk.bit_offset =0 ; + fadt->x_pm1b_cnt_blk.access_size =0 ; + fadt->x_pm1b_cnt_blk.addrl =0x0 ; + fadt->x_pm1b_cnt_blk.addrh =0x0 ; + + fadt->x_pm2_cnt_blk.space_id =1 ; + fadt->x_pm2_cnt_blk.bit_width =8 ; + fadt->x_pm2_cnt_blk.bit_offset =0 ; + fadt->x_pm2_cnt_blk.access_size =ACPI_ACCESS_SIZE_BYTE_ACCESS ; + fadt->x_pm2_cnt_blk.addrl = pmbase +0x50 ; + fadt->x_pm2_cnt_blk.addrh =0x0 ; + + fadt->x_pm_tmr_blk.space_id =1 ; + fadt->x_pm_tmr_blk.bit_width =32 ; + fadt->x_pm_tmr_blk.bit_offset =0 ; + fadt->x_pm_tmr_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_pm_tmr_blk.addrl = pmbase +0x8 ; + fadt->x_pm_tmr_blk.addrh =0x0 ; + + fadt->x_gpe0_blk.space_id =1 ; + fadt->x_gpe0_blk.bit_width =128 ; + fadt->x_gpe0_blk.bit_offset =0 ; + fadt->x_gpe0_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_gpe0_blk.addrl = pmbase +0x20 ; + fadt->x_gpe0_blk.addrh =0x0 ; + + fadt->x_gpe1_blk.space_id =1 ; + fadt->x_gpe1_blk.bit_width =0 ; + fadt->x_gpe1_blk.bit_offset =0 ; + fadt->x_gpe1_blk.access_size =0 ; + fadt->x_gpe1_blk.addrl =0x0 ; + fadt->x_gpe1_blk.addrh =0x0 ; + + header->checksum =table_compute_checksum (fadt, header->length); +} + +u32 acpi_madt_irq_overrides (u32 current) +{ +struct acpi_madt_irqoverride *irqovr; +u16 sci_flags =MP_IRQ_TRIGGER_LEVEL |MP_IRQ_POLARITY_HIGH ; + + irqovr = (void *)current; + current +=acpi_create_madt_irqoverride (irqovr,0 ,0 ,2 ,0 );
arch/x86/cpu/baytrail/acpi.c line 154
Quoted 10 lines
arch/x86/cpu/baytrail/acpi.c new file +10
-0+ + irqovr = (void *)current; + current +=acpi_create_madt_irqoverride (irqovr,0 ,9 ,9 , sci_flags); + +return current; +} + +u32 acpi_fill_madt (u32 current) +{ + current =acpi_create_madt_lapics (current);
I'm not sure if you need '+=' here?
arch/x86/cpu/baytrail/acpi.c line 159
Quoted 5 lines
arch/x86/cpu/baytrail/acpi.c new file +5
-0+ + current +=acpi_create_madt_ioapic ((struct acpi_madt_ioapic *)current, +2 ,IO_APIC_ADDR ,0 ); + + current =acpi_madt_irq_overrides (current);
Here '+=' definitely seems to be necessary.
Thanks,
Stefan
PATCH 21/26 x86: baytrail: Generate ACPI FADT/MADT tables
Hi Stefan,
Quoted 182 lines · Stefan Roese
Hi Bin,
Quoted 178 lines · Bin Meng
FADT/MADT tables are platform specific. Generate them for BayTrail.
Signed-off-by Bin Meng <[email protected]>---
arch/x86/cpu/baytrail/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 162 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+)create mode 100644
arch/x86/cpu/baytrail/acpi.carch/x86/cpu/baytrail/Makefile +1
-0@@ -8,3 +8,4 @@ obj-y += cpu.o obj-y += early_uart.o obj-y += fsp_configs.o obj-y += valleyview.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi.oarch/x86/cpu/baytrail/acpi.c new file +147
-0@@ -0,0 +1,162 @@ +/* +* Copyright (C) 2016, Bin Meng <[email protected]> +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <asm/acpi_table.h> +#include <asm/ioapic.h> +#include <asm/mpspec.h> +#include <asm/tables.h> +#include <asm/arch/iomap.h> + +void acpi_create_fadt (struct acpi_fadt *fadt,struct acpi_facs *facs, +void *dsdt) +{ +struct acpi_table_header *header = &(fadt->header); +u16 pmbase =ACPI_BASE_ADDRESS ; + +memset ((void *)fadt,0 ,sizeof (struct acpi_fadt )); + +acpi_fill_header (header,"FACP" ); + header->length =sizeof (struct acpi_fadt ); + header->revision =3 ; + + fadt->firmware_ctrl = (u32 )facs; + fadt->dsdt = (u32 )dsdt; + fadt->preferred_pm_profile =ACPI_PM_MOBILE ; + fadt->sci_int =9 ; + fadt->smi_cmd =0 ; + fadt->acpi_enable =0 ; + fadt->acpi_disable =0 ; + fadt->s4bios_req =0x0 ; + fadt->pstate_cnt =0 ; + fadt->pm1a_evt_blk = pmbase; + fadt->pm1b_evt_blk =0x0 ; + fadt->pm1a_cnt_blk = pmbase +0x4 ; + fadt->pm1b_cnt_blk =0x0 ; + fadt->pm2_cnt_blk = pmbase +0x50 ; + fadt->pm_tmr_blk = pmbase +0x8 ; + fadt->gpe0_blk = pmbase +0x20 ; + fadt->gpe1_blk =0 ; + fadt->pm1_evt_len =4 ; + fadt->pm1_cnt_len =2 ; + fadt->pm2_cnt_len =1 ; + fadt->pm_tmr_len =4 ; + fadt->gpe0_blk_len =16 ; + fadt->gpe1_blk_len =0 ; + fadt->gpe1_base =0 ; + fadt->cst_cnt =0 ; + fadt->p_lvl3_lat =87 ; + fadt->flush_size =1024 ; + fadt->flush_stride =16 ; + fadt->duty_offset =1 ; + fadt->day_alrm =0xd ; + fadt->mon_alrm =0x00 ; + fadt->century =0x00 ; + fadt->iapc_boot_arch =ACPI_FADT_LEGACY_DEVICES |ACPI_FADT_8042 ; + + fadt->flags =ACPI_FADT_WBINVD | +ACPI_FADT_C1_SUPPORTED | +ACPI_FADT_SLEEP_BUTTON | +ACPI_FADT_RESET_REGISTER | +ACPI_FADT_SEALED_CASE | +ACPI_FADT_S4_RTC_WAKE | +ACPI_FADT_PLATFORM_CLOCK ; + fadt->reset_reg.space_id =1 ; + fadt->reset_reg.bit_width =8 ; + fadt->reset_reg.bit_offset =0 ; + fadt->reset_reg.access_size =ACPI_ACCESS_SIZE_BYTE_ACCESS ; + fadt->reset_reg.addrl =0xcf9 ; + fadt->reset_reg.addrh =0 ; + fadt->reset_value =6 ; + fadt->x_firmware_ctl_l = (u32 )facs; + fadt->x_firmware_ctl_h =0 ; + fadt->x_dsdt_l = (u32 )dsdt; + fadt->x_dsdt_h =0 ; + + fadt->x_pm1a_evt_blk.space_id =1 ; + fadt->x_pm1a_evt_blk.bit_width =32 ; + fadt->x_pm1a_evt_blk.bit_offset =0 ; + fadt->x_pm1a_evt_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_pm1a_evt_blk.addrl = pmbase; + fadt->x_pm1a_evt_blk.addrh =0x0 ; + + fadt->x_pm1b_evt_blk.space_id =1 ; + fadt->x_pm1b_evt_blk.bit_width =0 ; + fadt->x_pm1b_evt_blk.bit_offset =0 ; + fadt->x_pm1b_evt_blk.access_size =0 ; + fadt->x_pm1b_evt_blk.addrl =0x0 ; + fadt->x_pm1b_evt_blk.addrh =0x0 ; + + fadt->x_pm1a_cnt_blk.space_id =1 ; + fadt->x_pm1a_cnt_blk.bit_width =16 ; + fadt->x_pm1a_cnt_blk.bit_offset =0 ; + fadt->x_pm1a_cnt_blk.access_size =ACPI_ACCESS_SIZE_WORD_ACCESS ; + fadt->x_pm1a_cnt_blk.addrl = pmbase +0x4 ; + fadt->x_pm1a_cnt_blk.addrh =0x0 ; + + fadt->x_pm1b_cnt_blk.space_id =1 ; + fadt->x_pm1b_cnt_blk.bit_width =0 ; + fadt->x_pm1b_cnt_blk.bit_offset =0 ; + fadt->x_pm1b_cnt_blk.access_size =0 ; + fadt->x_pm1b_cnt_blk.addrl =0x0 ; + fadt->x_pm1b_cnt_blk.addrh =0x0 ; + + fadt->x_pm2_cnt_blk.space_id =1 ; + fadt->x_pm2_cnt_blk.bit_width =8 ; + fadt->x_pm2_cnt_blk.bit_offset =0 ; + fadt->x_pm2_cnt_blk.access_size =ACPI_ACCESS_SIZE_BYTE_ACCESS ; + fadt->x_pm2_cnt_blk.addrl = pmbase +0x50 ; + fadt->x_pm2_cnt_blk.addrh =0x0 ; + + fadt->x_pm_tmr_blk.space_id =1 ; + fadt->x_pm_tmr_blk.bit_width =32 ; + fadt->x_pm_tmr_blk.bit_offset =0 ; + fadt->x_pm_tmr_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_pm_tmr_blk.addrl = pmbase +0x8 ; + fadt->x_pm_tmr_blk.addrh =0x0 ; + + fadt->x_gpe0_blk.space_id =1 ; + fadt->x_gpe0_blk.bit_width =128 ; + fadt->x_gpe0_blk.bit_offset =0 ; + fadt->x_gpe0_blk.access_size =ACPI_ACCESS_SIZE_DWORD_ACCESS ; + fadt->x_gpe0_blk.addrl = pmbase +0x20 ; + fadt->x_gpe0_blk.addrh =0x0 ; + + fadt->x_gpe1_blk.space_id =1 ; + fadt->x_gpe1_blk.bit_width =0 ; + fadt->x_gpe1_blk.bit_offset =0 ; + fadt->x_gpe1_blk.access_size =0 ; + fadt->x_gpe1_blk.addrl =0x0 ; + fadt->x_gpe1_blk.addrh =0x0 ; + + header->checksum =table_compute_checksum (fadt, header->length); +} + +u32 acpi_madt_irq_overrides (u32 current) +{ +struct acpi_madt_irqoverride *irqovr; +u16 sci_flags =MP_IRQ_TRIGGER_LEVEL |MP_IRQ_POLARITY_HIGH ; + + irqovr = (void *)current; + current +=acpi_create_madt_irqoverride (irqovr,0 ,0 ,2 ,0 ); + + irqovr = (void *)current; + current += acpi_create_madt_irqoverride(irqovr, 0, 9, 9,
sci_flags);arch/x86/cpu/baytrail/acpi.c new file +2
-0+ +return current;
Quoted 8 lines
arch/x86/cpu/baytrail/acpi.c line 154
Quoted 5 lines
arch/x86/cpu/baytrail/acpi.c new file +5
-0+} + +u32 acpi_fill_madt (u32 current) +{ + current =acpi_create_madt_lapics (current);I'm not sure if you need '+=' here?
No, it's not needed.
Quoted 11 lines
arch/x86/cpu/baytrail/acpi.c line 159
Quoted 7 lines
arch/x86/cpu/baytrail/acpi.c new file +2
-0+ + current += acpi_create_madt_ioapic((struct acpi_madt_ioapic*)current,
arch/x86/cpu/baytrail/acpi.c new file +3
-0+ 2, IO_APIC_ADDR, 0); + + current =acpi_madt_irq_overrides (current);Here '+=' definitely seems to be necessary.
= is actually correct. But I admit these are confusing due to inconsistent return values (some are table length while some are table end address). I will create a new patch to unify them.
Regards,
Bin
PATCH 22/26 x86: baytrail: Enable ACPI table generation for all boards
In reply to Bin MengEnable ACPI table generation by creating a DSDT table for all baytrail
boards: conga-qeval20-qa3-e3845, bayleybay and minnowmax.
---
board/congatec/conga-qeval20-qa3-e3845/Makefile | 1 + board/congatec/conga-qeval20-qa3-e3845/acpi/mainboard.asl | 13 +++++++++++++ board/congatec/conga-qeval20-qa3-e3845/dsdt.asl | 14 ++++++++++++++ board/intel/bayleybay/Makefile | 1 + board/intel/bayleybay/acpi/mainboard.asl | 11 +++++++++++ board/intel/bayleybay/dsdt.asl | 14 ++++++++++++++ board/intel/minnowmax/Makefile | 1 + board/intel/minnowmax/acpi/mainboard.asl | 11 +++++++++++ board/intel/minnowmax/dsdt.asl | 14 ++++++++++++++ configs/bayleybay_defconfig | 1 + configs/conga-qeval20-qa3-e3845_defconfig | 1 + configs/minnowmax_defconfig | 1 + 12 files changed, 83 insertions(+) create mode 100644 board/congatec/conga-qeval20-qa3-e3845/acpi/mainboard.asl create mode 100644 board/congatec/conga-qeval20-qa3-e3845/dsdt.asl create mode 100644 board/intel/bayleybay/acpi/mainboard.asl create mode 100644 board/intel/bayleybay/dsdt.asl create mode 100644 board/intel/minnowmax/acpi/mainboard.asl create mode 100644 board/intel/minnowmax/dsdt.asl
board/congatec/conga-qeval20-qa3-e3845/Makefile +1 -0
@@ -5,3 +5,4 @@ # obj-y += conga-qeval20-qa3.o start.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += dsdt.o
board/congatec/conga-qeval20-qa3-e3845/acpi/mainboard.asl new file +13 -0
@@ -0,0 +1,13 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* Power Button */ +Device (PWRB) +{ + Name(_HID, EISAID("PNP0C0C")) +} + +/* TODO: Need add Winbond SuperIO chipset W83627 ASL codes */
board/congatec/conga-qeval20-qa3-e3845/dsdt.asl new file +14 -0
@@ -0,0 +1,14 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +DefinitionBlock("dsdt.aml", "DSDT", 2, "U-BOOT", "U-BOOTBL", 0x00010000) +{ + /* platform specific */ + #include <asm/arch/acpi/platform.asl> + + /* board specific */ + #include "acpi/mainboard.asl" +}
board/intel/bayleybay/Makefile +1 -0
@@ -5,3 +5,4 @@ # obj-y += bayleybay.o start.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += dsdt.o
board/intel/bayleybay/acpi/mainboard.asl new file +11 -0
@@ -0,0 +1,11 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* Power Button */ +Device (PWRB) +{ + Name(_HID, EISAID("PNP0C0C")) +}
board/intel/bayleybay/dsdt.asl new file +14 -0
@@ -0,0 +1,14 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +DefinitionBlock("dsdt.aml", "DSDT", 2, "U-BOOT", "U-BOOTBL", 0x00010000) +{ + /* platform specific */ + #include <asm/arch/acpi/platform.asl> + + /* board specific */ + #include "acpi/mainboard.asl" +}
board/intel/minnowmax/Makefile +1 -0
@@ -5,3 +5,4 @@ # obj-y += minnowmax.o start.o +obj-$(CONFIG_GENERATE_ACPI_TABLE) += dsdt.o
board/intel/minnowmax/acpi/mainboard.asl new file +11 -0
@@ -0,0 +1,11 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +/* Power Button */ +Device (PWRB) +{ + Name(_HID, EISAID("PNP0C0C")) +}
board/intel/minnowmax/dsdt.asl new file +14 -0
@@ -0,0 +1,14 @@ +/* + * Copyright (C) 2016, Bin Meng <[email protected]> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +DefinitionBlock("dsdt.aml", "DSDT", 2, "U-BOOT", "U-BOOTBL", 0x00010000) +{ + /* platform specific */ + #include <asm/arch/acpi/platform.asl> + + /* board specific */ + #include "acpi/mainboard.asl" +}
configs/bayleybay_defconfig +1 -0
@@ -9,6 +9,7 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffa0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y +CONFIG_GENERATE_ACPI_TABLE=y CONFIG_FIT=y CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y
configs/conga-qeval20-qa3-e3845_defconfig +1 -0
@@ -8,6 +8,7 @@ CONFIG_SMP=y CONFIG_HAVE_VGA_BIOS=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y +CONFIG_GENERATE_ACPI_TABLE=y CONFIG_FIT=y CONFIG_FIT_SIGNATURE=y CONFIG_BOOTSTAGE=y
configs/minnowmax_defconfig +1 -0
@@ -8,6 +8,7 @@ CONFIG_SMP=y CONFIG_HAVE_VGA_BIOS=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y +CONFIG_GENERATE_ACPI_TABLE=y CONFIG_FIT=y CONFIG_FIT_SIGNATURE=y CONFIG_BOOTSTAGE=y
Signature · 1 line
1.8.2.1
PATCH 23/26 x86: baytrail: Add .gitignore for ACPI enabled boards
In reply to Bin MengLet git ignore dsdt.aml and dsdt.asl.tmp files.
---
board/congatec/conga-qeval20-qa3-e3845/.gitignore | 3 +++ board/intel/bayleybay/.gitignore | 3 +++ board/intel/minnowmax/.gitignore | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 board/congatec/conga-qeval20-qa3-e3845/.gitignore create mode 100644 board/intel/bayleybay/.gitignore create mode 100644 board/intel/minnowmax/.gitignore
board/congatec/conga-qeval20-qa3-e3845/.gitignore new file +3 -0
@@ -0,0 +1,3 @@ +dsdt.aml +dsdt.asl.tmp +dsdt.c
board/intel/bayleybay/.gitignore new file +3 -0
@@ -0,0 +1,3 @@ +dsdt.aml +dsdt.asl.tmp +dsdt.c
board/intel/minnowmax/.gitignore new file +3 -0
@@ -0,0 +1,3 @@ +dsdt.aml +dsdt.asl.tmp +dsdt.c
Signature · 1 line
1.8.2.1
PATCH 24/26 x86: Remove acpi=off boot parameter when ACPI is on
In reply to Bin MengRemove the kernel boot parameter acpi=off so that kernel can turn on ACPI support.
---
include/configs/x86-common.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
include/configs/x86-common.h +7 -2
@@ -207,14 +207,19 @@#define CONFIG_HOSTNAME x86#define CONFIG_BOOTFILE "bzImage"#define CONFIG_LOADADDR 0x1000000 -#define CONFIG_RAMDISK_ADDR 0x4000000 +#define CONFIG_RAMDISK_ADDR 0x4000000 +#ifdef CONFIG_GENERATE_ACPI_TABLE +#define CONFIG_OTHBOOTARGS "othbootargs=\0" +#else +#define CONFIG_OTHBOOTARGS "othbootargs=acpi=off\0" +#endif #define CONFIG_EXTRA_ENV_SETTINGS \ CONFIG_STD_DEVICES_SETTINGS \ "pciconfighost=1\0" \ "netdev=eth0\0" \ "consoledev=ttyS0\0" \ - "othbootargs=acpi=off\0" \ + CONFIG_OTHBOOTARGS \ "ramdiskaddr=0x4000000\0" \ "ramdiskfile=initramfs.gz\0"
Signature · 1 line
1.8.2.1
PATCH 25/26 x86: doc: Minor update for accuracy
In reply to Bin MengThis updates the doc for the following places:
- Mention CRB for Bayley Bay
- Limit part of the QEMU paragraphs to 80 cols
- Correct some typos (drive, it's, Ubuntu)
- Add description for "console=ttyS0,115200"
- Remove CONFIG_BOOTDELAY description which is already in x86-common.h
---
doc/README.x86 | 40 +++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 23 deletions(-)
doc/README.x86 +17 -23
@@ -23,7 +23,7 @@ In this case, known as bare mode, from the fact that it runs on the 'bare metal', U-Boot acts like a BIOS replacement. The following platforms are supported: - - Bayley Bay + - Bayley Bay CRB - Cougar Canyon 2 CRB - Crown Bay CRB - Galileo
@@ -412,18 +412,19 @@ If you want to check both consoles, use '-serial stdio'. Multicore is also supported by QEMU via '-smp n' where n is the number of cores to instantiate. Note, the maximum supported CPU number in QEMU is 255. -The fw_cfg interface in QEMU also provides information about kernel data, initrd, -command-line arguments and more. U-Boot supports directly accessing these informtion -from fw_cfg interface, this saves the time of loading them from hard disk or -network again, through emulated devices. To use it , simply providing them in -QEMU command line: +The fw_cfg interface in QEMU also provides information about kernel data, +initrd, command-line arguments and more. U-Boot supports directly accessing +these informtion from fw_cfg interface, which saves the time of loading them +from hard disk or network again, through emulated devices. To use it , simply +providing them in QEMU command line: $ qemu-system-i386 -nographic -bios path/to/u-boot.rom -m 1024 -kernel /path/to/bzImage -append 'root=/dev/ram console=ttyS0' -initrd /path/to/initrd -smp 8 Note: -initrd and -smp are both optional -Then start QEMU, in U-Boot command line use the following U-Boot command to setup kernel: +Then start QEMU, in U-Boot command line use the following U-Boot command to +setup kernel: => qfw qfw - QEMU firmware interface
@@ -437,8 +438,8 @@ qfw <command> => qfw load loading kernel to address 01000000 size 5d9d30 initrd 04000000 size 1b1ab50 -Here the kernel (bzImage) is loaded to 01000000 and initrd is to 04000000. Then, 'zboot' -can be used to boot the kernel: +Here the kernel (bzImage) is loaded to 01000000 and initrd is to 04000000. Then, +'zboot' can be used to boot the kernel: => zboot 02000000 - 04000000 1b1ab50
@@ -490,8 +491,8 @@ Booting Ubuntu -------------- As an example of how to set up your boot flow with U-Boot, here are instructions for starting Ubuntu from U-Boot. These instructions have been -tested on Minnowboard MAX with a SATA driver but are equally applicable on -other platforms and other media. There are really only four steps and its a +tested on Minnowboard MAX with a SATA drive but are equally applicable on +other platforms and other media. There are really only four steps and it's a very simple script, but a more detailed explanation is provided here for completeness.
@@ -499,7 +500,7 @@ Note: It is possible to set up U-Boot to boot automatically using syslinux. It could also use the grub.cfg file (/efi/ubuntu/grub.cfg) to obtain the GUID. If you figure these out, please post patches to this README. -Firstly, you will need Ubunutu installed on an available disk. It should be +Firstly, you will need Ubuntu installed on an available disk. It should be possible to make U-Boot start a USB start-up disk but for now let's assume that you used another boot loader to install Ubuntu.
@@ -659,7 +660,7 @@ U-Boot: Loading bzImage at address 100000 (5805728 bytes) Magic signature found Initial RAM disk at linear address 0x04000000, size 19215259 bytes - Kernel command line: "console=ttyS0,115200 root=/dev/disk/by-partuuid/965c59ee-1822-4326-90d2-b02446050059 ro" + Kernel command line: "root=/dev/disk/by-partuuid/965c59ee-1822-4326-90d2-b02446050059 ro" Starting kernel ...
@@ -679,13 +680,14 @@ above commands into a script since then it will be faster. 240,329 ahci 1,422,704 vesa display -Now the kernel actually starts: +Now the kernel actually starts: (if you want to examine kernel boot up message +on the serial console, append "console=ttyS0,115200" to the kernel command line) [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.13.0-58-generic (buildd at allspice) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #97-Ubuntu SMP Wed Jul 8 02:56:15 UTC 2015 (Ubuntu 3.13.0-58.97-generic 3.13.11-ckt22) - [ 0.000000] Command line: console=ttyS0,115200 root=/dev/disk/by-partuuid/965c59ee-1822-4326-90d2-b02446050059 ro + [ 0.000000] Command line: root=/dev/disk/by-partuuid/965c59ee-1822-4326-90d2-b02446050059 ro console=ttyS0,115200 It continues for a long time. Along the way you will see it pick up your ramdisk:
@@ -736,14 +738,6 @@ If you want to put this in a script you can use something like this: The \ is to tell the shell not to evaluate ${filesize} as part of the setenv command. -You will also need to add this to your board configuration file, e.g. -include/configs/minnowmax.h: - - #define CONFIG_BOOTDELAY 2 - -Now when you reset your board it wait a few seconds (in case you want to -interrupt) and then should boot straight into Ubuntu. - You can also bake this behaviour into your build by hard-coding the environment variables if you add this to minnowmax.h:
Signature · 1 line
1.8.2.1
PATCH 26/26 x86: doc: Document ACPI support
In reply to Bin MengRemove ACPI from the TODO list and add a new section to document current ACPI support in U-Boot.
---
doc/README.x86 | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-)
doc/README.x86 +35 -1
@@ -957,12 +957,44 @@ transformations. Remember to add attribution to coreboot for new files added to U-Boot. This should go at the top of each file and list the coreboot filename where the code originated. +ACPI Support Status +------------------- +Advanced Configuration and Power Interface (ACPI) [16] aims to establish +industry-standard interfaces enabling OS-directed configuration, power +management, and thermal management of mobile, desktop, and server platforms. + +Linux can boot without ACPI with "acpi=off" command line parameter, but +with ACPI the kernel gains the capabilities to handle power management. +For Windows, ACPI is a must-have firmware feature since Windows Vista. +CONFIG_GENERATE_ACPI_TABLE is the config option to turn on ACPI support in +U-Boot. This requires Intel ACPI compiler to be installed on your host to +compile ACPI DSDT table written in ASL format to AML format. You can get +the compiler via "apt-get install iasl" if you are on Ubuntu or download +the source from [17] to compile one by yourself. + +Current ACPI support in U-Boot is not complete. More features will be added +in the future. The status as of today is: + + * Support generating RSDT, XSDT, FACS, FADT, MADT, MCFG tables. + * Support one static DSDT table only, compiled by Intel ACPI compiler. + * Support S0/S5 only, no S3/S4 boot path support yet. + * No ACPI global NVS support (this can be optional, but we may need it in + the future to simplify ASL code logic when utilizing NVS variables). + * No dynamic AML bytecodes insertion at run-time (this is optional as we + can always describe the board in the static way). + * All ACPI interrupts are routed to SCI for OS to handle. No legacy SMI + implementation within U-Boot. + * Install Ubuntu from U-Boot plus SeaBIOS does not work. + * Install Windows 8.1/10 from U-Boot plus SeaBIOS does not work. + +So far ACPI is enabled on BayTrail based boards. Testing was done by booting +a pre-installed Ubuntu 14.04 from a SATA drive. Most devices seem to work +correctly and the board can respond a reboot/shutdown command from Ubuntu. TODO List --------- - Audio - Chrome OS verified boot -- SMI and ACPI support, to provide platform info and facilities to Linux References ----------
@@ -981,3 +1013,5 @@ References [13] http://events.linuxfoundation.org/sites/events/files/slides/elce-2014.pdf [14] http://www.seabios.org/SeaBIOS [15] doc/device-tree-bindings/misc/intel,irq-router.txt +[16] http://www.acpi.info +[17] https://www.acpica.org/downloads
Signature · 1 line
1.8.2.1
cover x86: Initial ACPI support for Intel BayTrail
In reply to Bin MengHi Bin,
thank you very much for this patch series. I've given the patchset a quick review and tested it shortly on the BayTrail Congatec board. And have seen no issues so far. Shutdown and reboot also seem to work just fine. I'll definitely give it a more thorough test in the next days / weeks.
I've sent you a few minor comments to some of the patches. But please add my:
to all patches.
Thanks,
Stefan
Quoted 137 lines · Bin Meng
This series introduces initial ACPI support for Intel BayTrail.
Advanced Configuration and Power Interface (ACPI) aims to establish industry-standard interfaces enabling OS-directed configuration, power management, and thermal management of mobile, desktop, and server platforms.
Linux can boot without ACPI with "acpi=off" command line parameter, but with ACPI the kernel gains the capabilities to handle power management. For Windows, ACPI is a must-have firmware feature since Windows Vista.
CONFIG_GENERATE_ACPI_TABLEis the config option to turn on ACPI support in U-Boot. This requires Intel ACPI compiler to be installed on your host to compile ACPI DSDT table written in ASL format to AML format. You can get the compiler via "apt-get install iasl" if you are on Ubuntu or download the source from acpica website to compile one by yourself.Current ACPI support in U-Boot is not complete. More features will be added in the future. The status as of today is:
* Support generating RSDT, XSDT, FACS, FADT, MADT, MCFG tables.
* Support one static DSDT table only, compiled by Intel ACPI compiler.
* Support S0/S5 only, no S3/S4 boot path support yet.
* No ACPI global NVS support (this can be optional, but we may need it in the future to simplify ASL code logic when utilizing NVS variables).
* No dynamic AML bytecodes insertion at run-time (this is optional as we can always describe the board in the static way).
* All ACPI interrupts are routed to SCI for OS to handle. No legacy SMI implementation within U-Boot.
* Install Ubuntu from U-Boot plus SeaBIOS does not work.
* Install Windows 8.1/10 from U-Boot plus SeaBIOS does not work.So far ACPI is enabled on BayTrail based boards. Testing was done by booting a pre-installed Ubuntu 14.04 from a SATA drive. Most devices seem to work correctly and the board can respond a reboot/shutdown command from Ubuntu.
This series is available at u-boot-x86/acpi-working.
Bin Meng (26):
x86: Dropasm/acpi.h
x86: Fix build warning intables.cwhenCONFIG_SEABIOS
x86: acpi: Fix compiler warnings inwrite_acpi_tables()
x86: irq: Reserve IRQ9 for ACPI in PIC mode
x86: irq: Enable SCI on IRQ9
x86: dts: Update to include ACTL register details
acpi: Change build log for ASL files
acpi: Explicitly spell outdsdt.cin the make rule
acpi: Specify U-Boot include path for ASL files
acpi: Do not disable all errors/warnings/remarks when compiling ASL
x86: acpi: Remove unneeded codes
x86: acpi: Various changes toacpi_table.h
x86: acpi: Reorder codes inacpi_table.h
x86: acpi: Removeacpi_create_ssdt_generator()
x86: acpi: Changefill_header()
x86: acpi: Adjust orders inacpi_table.c
x86: acpi: Change table write routine signature to use u32
x86: acpi: Align FACS table to a 64 byte boundary
x86: acpi: Add some generic ASL libraries
x86: baytrail: Add platform ASL files
x86: baytrail: Generate ACPI FADT/MADT tables
x86: baytrail: Enable ACPI table generation for all boards
x86: baytrail: Add .gitignore for ACPI enabled boards
x86: Remove acpi=off boot parameter when ACPI is on
x86: doc: Minor update for accuracy
x86: doc: Document ACPI supportarch/x86/cpu/baytrail/Makefile | 1 + arch/x86/cpu/baytrail/acpi.c | 162 +++++++ arch/x86/cpu/irq.c | 29 ++ arch/x86/cpu/ivybridge/lpc.c | 1 - arch/x86/cpu/ivybridge/model_206ax.c | 1 - arch/x86/cpu/ivybridge/northbridge.c | 1 - arch/x86/dts/bayleybay.dts | 1 + arch/x86/dts/conga-qeval20-qa3-e3845.dts | 1 + arch/x86/dts/crownbay.dts | 1 + arch/x86/dts/galileo.dts | 1 + arch/x86/dts/minnowmax.dts | 1 + arch/x86/dts/qemu-x86_q35.dts | 2 + arch/x86/include/asm/acpi.h | 24 - arch/x86/include/asm/acpi/debug.asl | 136 ++++++ arch/x86/include/asm/acpi/globutil.asl | 113 +++++ arch/x86/include/asm/acpi/statdef.asl | 82 ++++ arch/x86/include/asm/acpi_table.h | 447 ++++++++----------- .../include/asm/arch-baytrail/acpi/irq_helper.h | 111 +++++ .../include/asm/arch-baytrail/acpi/irqlinks.asl | 489 +++++++++++++++++++++ .../include/asm/arch-baytrail/acpi/irqroute.asl | 48 ++ arch/x86/include/asm/arch-baytrail/acpi/irqroute.h | 27 ++ arch/x86/include/asm/arch-baytrail/acpi/lpc.asl | 121 +++++ .../include/asm/arch-baytrail/acpi/platform.asl | 34 ++ .../include/asm/arch-baytrail/acpi/sleepstates.asl | 13 + .../asm/arch-baytrail/acpi/southcluster.asl | 211 +++++++++ arch/x86/include/asm/arch-baytrail/acpi/usb.asl | 34 ++ arch/x86/include/asm/arch-baytrail/acpi/xhci.asl | 31 ++ arch/x86/include/asm/arch-baytrail/device.h | 74 ++++ arch/x86/include/asm/arch-baytrail/iomap.h | 70 +++ arch/x86/include/asm/arch-baytrail/irq.h | 86 ++++ arch/x86/include/asm/irq.h | 4 + arch/x86/lib/acpi_table.c | 311 ++++++------- arch/x86/lib/tables.c | 1 + board/congatec/conga-qeval20-qa3-e3845/.gitignore | 3 + board/congatec/conga-qeval20-qa3-e3845/Makefile | 1 + .../conga-qeval20-qa3-e3845/acpi/mainboard.asl | 13 + board/congatec/conga-qeval20-qa3-e3845/dsdt.asl | 14 + board/intel/bayleybay/.gitignore | 3 + board/intel/bayleybay/Makefile | 1 + board/intel/bayleybay/acpi/mainboard.asl | 11 + board/intel/bayleybay/dsdt.asl | 14 + board/intel/minnowmax/.gitignore | 3 + board/intel/minnowmax/Makefile | 1 + board/intel/minnowmax/acpi/mainboard.asl | 11 + board/intel/minnowmax/dsdt.asl | 14 + configs/bayleybay_defconfig | 1 + configs/conga-qeval20-qa3-e3845_defconfig | 1 + configs/minnowmax_defconfig | 1 + doc/README.x86 | 76 +++- doc/device-tree-bindings/misc/intel,irq-router.txt | 5 + include/configs/x86-common.h | 9 +- scripts/Makefile.lib | 8 +- 52 files changed, 2368 insertions(+), 491 deletions(-)create mode 100644
arch/x86/cpu/baytrail/acpi.c
delete mode 100644arch/x86/include/asm/acpi.h
create mode 100644arch/x86/include/asm/acpi/debug.asl
create mode 100644arch/x86/include/asm/acpi/globutil.aslcreate mode 100644arch/x86/include/asm/acpi/statdef.asl
create mode 100644arch/x86/include/asm/arch-baytrail/acpi/irq_helper.hcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/irqlinks.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/irqroute.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/irqroute.hcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/lpc.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/platform.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/sleepstates.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/southcluster.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/usb.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/acpi/xhci.aslcreate mode 100644arch/x86/include/asm/arch-baytrail/device.hcreate mode 100644arch/x86/include/asm/arch-baytrail/iomap.hcreate mode 100644arch/x86/include/asm/arch-baytrail/irq.hcreate mode 100644 board/congatec/conga-qeval20-qa3-e3845/.gitignore
Quoted 9 lines
create mode 100644 board/congatec/conga-qeval20-qa3-e3845/acpi/mainboard.asl create mode 100644 board/congatec/conga-qeval20-qa3-e3845/dsdt.asl create mode 100644 board/intel/bayleybay/.gitignore
create mode 100644 board/intel/bayleybay/acpi/mainboard.asl create mode 100644 board/intel/bayleybay/dsdt.asl
create mode 100644 board/intel/minnowmax/.gitignore
create mode 100644 board/intel/minnowmax/acpi/mainboard.asl create mode 100644 board/intel/minnowmax/dsdt.asl
Viele Gr??e,
Stefan
Signature · 3 lines
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
cover x86: Initial ACPI support for Intel BayTrail
Quoted 11 lines · Stefan Roese
Hi Bin,
thank you very much for this patch series. I've given the patchset a quick review and tested it shortly on the BayTrail Congatec board. And have seen no issues so far. Shutdown and reboot also seem to work just fine. I'll definitely give it a more thorough test in the next days / weeks.
I've sent you a few minor comments to some of the patches. But please add my:
Quoted 7 lines
Reviewed-by Stefan Roese <[email protected]>Tested-by Stefan Roese <[email protected]>to all patches.
Thanks,
Stefan
Thank you Stefan for the review and testing!
Hi Simon,
Do you get a chance to look at this series?
Regards,
Bin
cover x86: Initial ACPI support for Intel BayTrail
Hi Bin,
Quoted 18 lines · Bin Meng
Quoted 16 lines · Stefan Roese
Hi Bin,
thank you very much for this patch series. I've given the patchset a quick review and tested it shortly on the BayTrail Congatec board. And have seen no issues so far. Shutdown and reboot also seem to work just fine. I'll definitely give it a more thorough test in the next days / weeks.
I've sent you a few minor comments to some of the patches. But please add my:
Reviewed-by Stefan Roese <[email protected]>Tested-by Stefan Roese <[email protected]>to all patches.
Quoted 8 lines
Quoted 2 lines
Thanks,
StefanThank you Stefan for the review and testing!
Hi Simon,
Do you get a chance to look at this series?
Not yet, sorry. Hopefully in the next few days.
Regards,
Simon