public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 05/28] x86: irq: Enable SCI on IRQ9
Date: Sat,  7 May 2016 07:46:14 -0700	[thread overview]
Message-ID: <1462632397-11224-6-git-send-email-bmeng.cn@gmail.com> (raw)
In-Reply-To: <1462632397-11224-1-git-send-email-bmeng.cn@gmail.com>

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 <bmeng.cn@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Tested-by: Stefan Roese <sr@denx.de>
---

Changes in v2: None

 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(+)

diff --git a/arch/x86/cpu/irq.c b/arch/x86/cpu/irq.c
index 7586fc2..bd7bd66 100644
--- a/arch/x86/cpu/irq.c
+++ b/arch/x86/cpu/irq.c
@@ -147,6 +147,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;
@@ -216,6 +219,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;
@@ -229,6 +250,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;
 }
 
diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h
index 5b9e673..ddb529e 100644
--- a/arch/x86/include/asm/irq.h
+++ b/arch/x86/include/asm/irq.h
@@ -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 {
diff --git a/doc/device-tree-bindings/misc/intel,irq-router.txt b/doc/device-tree-bindings/misc/intel,irq-router.txt
index e4d8ead..04ad346 100644
--- a/doc/device-tree-bindings/misc/intel,irq-router.txt
+++ b/doc/device-tree-bindings/misc/intel,irq-router.txt
@@ -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.
-- 
1.8.2.1

  parent reply	other threads:[~2016-05-07 14:46 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-07 14:46 [U-Boot] [PATCH v2 00/28] x86: Initial ACPI support for Intel BayTrail Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 01/28] x86: Drop asm/acpi.h Bin Meng
2016-05-07 18:45   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 02/28] x86: Fix build warning in tables.c when CONFIG_SEABIOS Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 03/28] x86: acpi: Fix compiler warnings in write_acpi_tables() Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 04/28] x86: irq: Reserve IRQ9 for ACPI in PIC mode Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` Bin Meng [this message]
2016-05-08  8:17   ` [U-Boot] [PATCH v2 05/28] x86: irq: Enable SCI on IRQ9 Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 06/28] x86: dts: Update to include ACTL register details Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 07/28] acpi: Change build log for ASL files Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:17     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 08/28] acpi: Explicitly spell out dsdt.c in the make rule Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 09/28] acpi: Specify U-Boot include path for ASL files Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 10/28] acpi: Output all errors/warnings/remarks when compiling ASL Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 11/28] x86: acpi: Remove unused codes Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 12/28] x86: acpi: Various changes to acpi_table.h Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 13/28] x86: acpi: Reorder code in acpi_table.h Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 14/28] x86: acpi: Remove acpi_create_ssdt_generator() Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 15/28] x86: acpi: Change fill_header() Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 16/28] x86: acpi: Adjust order in acpi_table.c Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 17/28] x86: acpi: Use u32 in table write routines Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  4:26     ` Bin Meng
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 18/28] x86: acpi: Align FACS table to a 64 byte boundary Bin Meng
2016-05-07 18:46   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 19/28] x86: acpi: Clean up table header revisions Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 20/28] x86: acpi: Add some generic ASL libraries Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:18     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 21/28] x86: acpi: Return table length in acpi_create_madt_lapics() Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 22/28] x86: baytrail: Add platform ASL files Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 23/28] x86: baytrail: Generate ACPI FADT/MADT tables Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 24/28] x86: baytrail: Enable ACPI table generation for all boards Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 25/28] x86: baytrail: Add .gitignore for ACPI enabled boards Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 26/28] x86: Remove acpi=off boot parameter when ACPI is on Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 27/28] x86: doc: Minor update for accuracy Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 14:46 ` [U-Boot] [PATCH v2 28/28] x86: doc: Document ACPI support Bin Meng
2016-05-07 18:47   ` Simon Glass
2016-05-08  8:19     ` Bin Meng
2016-05-07 18:45 ` [U-Boot] [PATCH v2 00/28] x86: Initial ACPI support for Intel BayTrail Simon Glass
2016-05-08  1:27   ` Bin Meng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1462632397-11224-6-git-send-email-bmeng.cn@gmail.com \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox