|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v5 20/22] arm/acpi: Initialize serial port from ACPI SPCR table
From: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
Parse ACPI SPCR (Serial Port Console Redirection table) table and
initialize the serial port pl011.
Signed-off-by: Parth Dixit <parth.dixit@xxxxxxxxxx>
Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
Reviewed-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
Cc: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/drivers/char/pl011.c | 37 +++++++++++++++++++++++++++++++++++++
xen/include/acpi/actbl2.h | 5 +++++
2 files changed, 42 insertions(+)
diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c
index 7e16294..30a8551 100644
--- a/xen/drivers/char/pl011.c
+++ b/xen/drivers/char/pl011.c
@@ -27,6 +27,7 @@
#include <asm/device.h>
#include <xen/mm.h>
#include <xen/vmap.h>
+#include <xen/acpi.h>
#include <asm/pl011-uart.h>
#include <asm/io.h>
@@ -308,6 +309,42 @@ DT_DEVICE_START(pl011, "PL011 UART", DEVICE_SERIAL)
.init = pl011_dt_uart_init,
DT_DEVICE_END
+#ifdef CONFIG_ACPI
+static int __init pl011_acpi_uart_init(const void *data)
+{
+ acpi_status status;
+ struct acpi_table_spcr *spcr = NULL;
+ int res;
+
+ status = acpi_get_table(ACPI_SIG_SPCR, 0,
+ (struct acpi_table_header **)&spcr);
+
+ if ( ACPI_FAILURE(status) )
+ {
+ printk("pl011: Failed to get SPCR table\n");
+ return -EINVAL;
+ }
+
+ /* trigger/polarity information is not available in spcr */
+ irq_set_type(spcr->interrupt, IRQ_TYPE_EDGE_BOTH);
+
+ res = pl011_uart_init(spcr->interrupt, spcr->serial_port.address,
+ PAGE_SIZE);
+ if ( res < 0 )
+ {
+ printk("pl011: Unable to initialize\n");
+ return res;
+ }
+
+ return 0;
+}
+
+ACPI_DEVICE_START(apl011, "PL011 UART", DEVICE_SERIAL)
+ .class_type = ACPI_DBG2_PL011,
+ .init = pl011_acpi_uart_init,
+ACPI_DEVICE_END
+#endif
+
/*
* Local variables:
* mode: C
diff --git a/xen/include/acpi/actbl2.h b/xen/include/acpi/actbl2.h
index 1ad67f8..4341a30 100644
--- a/xen/include/acpi/actbl2.h
+++ b/xen/include/acpi/actbl2.h
@@ -281,6 +281,11 @@ struct acpi_dbg2_device {
#define ACPI_DBG2_16550_COMPATIBLE 0x0000
#define ACPI_DBG2_16550_SUBSET 0x0001
+#define ACPI_DBG2_PL011 0x0003
+#define ACPI_DBG2_SBSA_32 0x000d
+#define ACPI_DBG2_SBSA 0x000e
+#define ACPI_DBG2_DCC 0x000f
+#define ACPI_DBG2_BCM2835 0x0010
#define ACPI_DBG2_1394_STANDARD 0x0000
--
2.0.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |