aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch')
-rw-r--r--target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch151
1 files changed, 151 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch b/target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch
new file mode 100644
index 0000000000..8cbb52a903
--- /dev/null
+++ b/target/linux/ipq806x/patches/0087-tty-serial-msm-Remove-direct-access-to-GSBI.patch
@@ -0,0 +1,151 @@
+From 025909cbf933cc20c2ff5ea9f87de8e17a739a08 Mon Sep 17 00:00:00 2001
+From: Andy Gross <agross@codeaurora.org>
+Date: Thu, 24 Apr 2014 11:31:22 -0500
+Subject: [PATCH 087/182] tty: serial: msm: Remove direct access to GSBI
+
+This patch removes direct access of the GSBI registers. GSBI configuration
+should be done through the GSBI driver directly.
+
+Signed-off-by: Andy Gross <agross@codeaurora.org>
+Signed-off-by: Kumar Gala <galak@codeaurora.org>
+---
+ drivers/tty/serial/msm_serial.c | 48 ++-------------------------------------
+ drivers/tty/serial/msm_serial.h | 5 ----
+ 2 files changed, 2 insertions(+), 51 deletions(-)
+
+diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
+index 053b98e..778e376 100644
+--- a/drivers/tty/serial/msm_serial.c
++++ b/drivers/tty/serial/msm_serial.c
+@@ -52,7 +52,6 @@ struct msm_port {
+ struct clk *clk;
+ struct clk *pclk;
+ unsigned int imr;
+- void __iomem *gsbi_base;
+ int is_uartdm;
+ unsigned int old_snap_state;
+ };
+@@ -599,9 +598,7 @@ static const char *msm_type(struct uart_port *port)
+ static void msm_release_port(struct uart_port *port)
+ {
+ struct platform_device *pdev = to_platform_device(port->dev);
+- struct msm_port *msm_port = UART_TO_MSM(port);
+ struct resource *uart_resource;
+- struct resource *gsbi_resource;
+ resource_size_t size;
+
+ uart_resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+@@ -612,28 +609,12 @@ static void msm_release_port(struct uart_port *port)
+ release_mem_region(port->mapbase, size);
+ iounmap(port->membase);
+ port->membase = NULL;
+-
+- if (msm_port->gsbi_base) {
+- writel_relaxed(GSBI_PROTOCOL_IDLE,
+- msm_port->gsbi_base + GSBI_CONTROL);
+-
+- gsbi_resource = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+- if (unlikely(!gsbi_resource))
+- return;
+-
+- size = resource_size(gsbi_resource);
+- release_mem_region(gsbi_resource->start, size);
+- iounmap(msm_port->gsbi_base);
+- msm_port->gsbi_base = NULL;
+- }
+ }
+
+ static int msm_request_port(struct uart_port *port)
+ {
+- struct msm_port *msm_port = UART_TO_MSM(port);
+ struct platform_device *pdev = to_platform_device(port->dev);
+ struct resource *uart_resource;
+- struct resource *gsbi_resource;
+ resource_size_t size;
+ int ret;
+
+@@ -652,30 +633,8 @@ static int msm_request_port(struct uart_port *port)
+ goto fail_release_port;
+ }
+
+- gsbi_resource = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+- /* Is this a GSBI-based port? */
+- if (gsbi_resource) {
+- size = resource_size(gsbi_resource);
+-
+- if (!request_mem_region(gsbi_resource->start, size,
+- "msm_serial")) {
+- ret = -EBUSY;
+- goto fail_release_port_membase;
+- }
+-
+- msm_port->gsbi_base = ioremap(gsbi_resource->start, size);
+- if (!msm_port->gsbi_base) {
+- ret = -EBUSY;
+- goto fail_release_gsbi;
+- }
+- }
+-
+ return 0;
+
+-fail_release_gsbi:
+- release_mem_region(gsbi_resource->start, size);
+-fail_release_port_membase:
+- iounmap(port->membase);
+ fail_release_port:
+ release_mem_region(port->mapbase, size);
+ return ret;
+@@ -683,7 +642,6 @@ fail_release_port:
+
+ static void msm_config_port(struct uart_port *port, int flags)
+ {
+- struct msm_port *msm_port = UART_TO_MSM(port);
+ int ret;
+ if (flags & UART_CONFIG_TYPE) {
+ port->type = PORT_MSM;
+@@ -691,9 +649,6 @@ static void msm_config_port(struct uart_port *port, int flags)
+ if (ret)
+ return;
+ }
+- if (msm_port->gsbi_base)
+- writel_relaxed(GSBI_PROTOCOL_UART,
+- msm_port->gsbi_base + GSBI_CONTROL);
+ }
+
+ static int msm_verify_port(struct uart_port *port, struct serial_struct *ser)
+@@ -1110,6 +1065,7 @@ static struct of_device_id msm_match_table[] = {
+
+ static struct platform_driver msm_platform_driver = {
+ .remove = msm_serial_remove,
++ .probe = msm_serial_probe,
+ .driver = {
+ .name = "msm_serial",
+ .owner = THIS_MODULE,
+@@ -1125,7 +1081,7 @@ static int __init msm_serial_init(void)
+ if (unlikely(ret))
+ return ret;
+
+- ret = platform_driver_probe(&msm_platform_driver, msm_serial_probe);
++ ret = platform_driver_register(&msm_platform_driver);
+ if (unlikely(ret))
+ uart_unregister_driver(&msm_uart_driver);
+
+diff --git a/drivers/tty/serial/msm_serial.h b/drivers/tty/serial/msm_serial.h
+index 1e9b68b..d98d45e 100644
+--- a/drivers/tty/serial/msm_serial.h
++++ b/drivers/tty/serial/msm_serial.h
+@@ -109,11 +109,6 @@
+ #define UART_ISR 0x0014
+ #define UART_ISR_TX_READY (1 << 7)
+
+-#define GSBI_CONTROL 0x0
+-#define GSBI_PROTOCOL_CODE 0x30
+-#define GSBI_PROTOCOL_UART 0x40
+-#define GSBI_PROTOCOL_IDLE 0x0
+-
+ #define UARTDM_RXFS 0x50
+ #define UARTDM_RXFS_BUF_SHIFT 0x7
+ #define UARTDM_RXFS_BUF_MASK 0x7
+--
+1.7.10.4
+