|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v8 15/17] arm/acpi: Add a new ACPI initialized function for UART
From: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
This adds a new function to initialize UART for ACPI on ARM.
Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
Reviewed-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
xen/arch/arm/setup.c | 2 +-
xen/drivers/char/arm-uart.c | 37 +++++++++++++++++++++++++++++++++++--
xen/include/xen/serial.h | 2 +-
3 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index d4261e8..6d205a9 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -768,7 +768,7 @@ void __init start_xen(unsigned long boot_phys_offset,
gic_preinit();
- dt_uart_init();
+ arm_uart_init();
console_init_preirq();
console_init_ring();
diff --git a/xen/drivers/char/arm-uart.c b/xen/drivers/char/arm-uart.c
index 883e615..627746b 100644
--- a/xen/drivers/char/arm-uart.c
+++ b/xen/drivers/char/arm-uart.c
@@ -1,7 +1,7 @@
/*
* xen/drivers/char/arm-uart.c
*
- * Generic uart retrieved via the device tree
+ * Generic uart retrieved via the device tree or ACPI
*
* Julien Grall <julien.grall@xxxxxxxxxx>
* Copyright (c) 2013 Linaro Limited.
@@ -23,6 +23,7 @@
#include <xen/device_tree.h>
#include <xen/serial.h>
#include <xen/errno.h>
+#include <xen/acpi.h>
/*
* Configure UART port with a string:
@@ -35,7 +36,7 @@
static char __initdata opt_dtuart[256] = "";
string_param("dtuart", opt_dtuart);
-void __init dt_uart_init(void)
+static void __init dt_uart_init(void)
{
struct dt_device_node *dev;
int ret;
@@ -96,6 +97,38 @@ void __init dt_uart_init(void)
printk("Unable to initialize dtuart: %d\n", ret);
}
+#ifdef CONFIG_ACPI
+static void __init acpi_uart_init(void)
+{
+ struct acpi_table_spcr *spcr = NULL;
+ int ret;
+
+ acpi_get_table(ACPI_SIG_SPCR, 0, (struct acpi_table_header **)&spcr);
+
+ if ( spcr == NULL )
+ {
+ printk("Unable to get spcr table\n");
+ }
+ else
+ {
+ ret = acpi_device_init(DEVICE_SERIAL, NULL, spcr->interface_type);
+
+ if ( ret )
+ printk("Unable to initialize acpi uart: %d\n", ret);
+ }
+}
+#else
+static void __init acpi_uart_init(void) { }
+#endif
+
+void __init arm_uart_init(void)
+{
+ if ( acpi_disabled )
+ dt_uart_init();
+ else
+ acpi_uart_init();
+}
+
/*
* Local variables:
* mode: C
diff --git a/xen/include/xen/serial.h b/xen/include/xen/serial.h
index 71e6ade..1212a12 100644
--- a/xen/include/xen/serial.h
+++ b/xen/include/xen/serial.h
@@ -170,7 +170,7 @@ struct ns16550_defaults {
void ns16550_init(int index, struct ns16550_defaults *defaults);
void ehci_dbgp_init(void);
-void __init dt_uart_init(void);
+void arm_uart_init(void);
struct physdev_dbgp_op;
int dbgp_op(const struct physdev_dbgp_op *);
--
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 |