aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Rossi <nathan.rossi@xilinx.com>2014-11-24 16:41:09 +1000
committerNathan Rossi <nathan.rossi@xilinx.com>2014-11-26 14:10:39 +1000
commit18fdd1ff7ddc3c8839e565916c25eefde9181b6d (patch)
treef0c8e7c28ee2c53f4397130b613aaad7dc54b404
parent359c044b146bfacefcee5f5a9a9ba7aed4453800 (diff)
downloadmeta-xilinx-18fdd1ff7ddc3c8839e565916c25eefde9181b6d.tar.gz
meta-xilinx-18fdd1ff7ddc3c8839e565916c25eefde9181b6d.tar.bz2
meta-xilinx-18fdd1ff7ddc3c8839e565916c25eefde9181b6d.zip
linux-*: Add patch to resolve Zynq UART lockup issue
* The xuartps/cdns_uart driver has a hang condition during the boot of the kernel. The lock-up itself occurs during the set_termios call when there is data received in the RX FIFO before the first setup of the console device. Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
-rw-r--r--recipes-kernel/linux/linux-xlnx/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch33
-rw-r--r--recipes-kernel/linux/linux-xlnx/3.14/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch32
-rw-r--r--recipes-kernel/linux/linux-xlnx/3.17/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch34
-rw-r--r--recipes-kernel/linux/linux-xlnx_3.10.bb5
-rw-r--r--recipes-kernel/linux/linux-xlnx_3.14.bb2
-rw-r--r--recipes-kernel/linux/linux-yocto/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch34
-rw-r--r--recipes-kernel/linux/linux-yocto_3.10.bbappend4
-rw-r--r--recipes-kernel/linux/linux-yocto_3.14.bbappend5
-rw-r--r--recipes-kernel/linux/linux-yocto_3.17.bbappend5
9 files changed, 154 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-xlnx/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch b/recipes-kernel/linux/linux-xlnx/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
new file mode 100644
index 00000000..4ecd4e48
--- /dev/null
+++ b/recipes-kernel/linux/linux-xlnx/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
@@ -0,0 +1,33 @@
+From c2a532266240230c5b49e56f1035e9ba27a61d96 Mon Sep 17 00:00:00 2001
+From: Nathan Rossi <nathan.rossi@xilinx.com>
+Date: Mon, 24 Nov 2014 15:11:43 +1000
+Subject: [PATCH] tty: xuartps: Fix RX hang, and TX corruption in set_termios
+
+Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
+---
+ drivers/tty/serial/xilinx_uartps.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
+index faf2d90..7c842f2 100644
+--- a/drivers/tty/serial/xilinx_uartps.c
++++ b/drivers/tty/serial/xilinx_uartps.c
+@@ -642,10 +642,11 @@ static void xuartps_set_termios(struct uart_port *port,
+
+ spin_lock_irqsave(&port->lock, flags);
+
+- /* Empty the receive FIFO 1st before making changes */
+- while ((xuartps_readl(XUARTPS_SR_OFFSET) &
+- XUARTPS_SR_RXEMPTY) != XUARTPS_SR_RXEMPTY)
+- xuartps_readl(XUARTPS_FIFO_OFFSET);
++ /* Wait for the transmit FIFO to empty before making changes */
++ if (!(xuartps_readl(XUARTPS_CR_OFFSET) & XUARTPS_CR_TX_DIS)) {
++ while (!(xuartps_readl(XUARTPS_SR_OFFSET) & XUARTPS_SR_TXEMPTY))
++ cpu_relax();
++ }
+
+ /* Disable the TX and RX to set baud rate */
+ xuartps_writel(xuartps_readl(XUARTPS_CR_OFFSET) |
+--
+2.1.1
+
diff --git a/recipes-kernel/linux/linux-xlnx/3.14/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch b/recipes-kernel/linux/linux-xlnx/3.14/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
new file mode 100644
index 00000000..bafd4332
--- /dev/null
+++ b/recipes-kernel/linux/linux-xlnx/3.14/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
@@ -0,0 +1,32 @@
+From 397b08fb903994ccaa2d4d7f4cf578c9d3028463 Mon Sep 17 00:00:00 2001
+From: Nathan Rossi <nathan.rossi@xilinx.com>
+Date: Mon, 24 Nov 2014 15:11:43 +1000
+Subject: [PATCH] tty: xuartps: Fix RX hang, and TX corruption in set_termios
+
+Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
+---
+ drivers/tty/serial/xilinx_uartps.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
+index dbbc195..fcb1c50 100644
+--- a/drivers/tty/serial/xilinx_uartps.c
++++ b/drivers/tty/serial/xilinx_uartps.c
+@@ -648,10 +648,10 @@ static void xuartps_set_termios(struct uart_port *port,
+
+ spin_lock_irqsave(&port->lock, flags);
+
+- /* Empty the receive FIFO 1st before making changes */
+- while ((xuartps_readl(XUARTPS_SR_OFFSET) &
+- XUARTPS_SR_RXEMPTY) != XUARTPS_SR_RXEMPTY) {
+- xuartps_readl(XUARTPS_FIFO_OFFSET);
++ /* Wait for the transmit FIFO to empty before making changes */
++ if (!(xuartps_readl(XUARTPS_CR_OFFSET) & XUARTPS_CR_TX_DIS)) {
++ while (!(xuartps_readl(XUARTPS_SR_OFFSET) & XUARTPS_SR_TXEMPTY))
++ cpu_relax();
+ }
+
+ /* Disable the TX and RX to set baud rate */
+--
+2.1.1
+
diff --git a/recipes-kernel/linux/linux-xlnx/3.17/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch b/recipes-kernel/linux/linux-xlnx/3.17/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
new file mode 100644
index 00000000..4ac6624d
--- /dev/null
+++ b/recipes-kernel/linux/linux-xlnx/3.17/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
@@ -0,0 +1,34 @@
+From c3181f01d21953bff9971e141a193c445099e90f Mon Sep 17 00:00:00 2001
+From: Nathan Rossi <nathan.rossi@xilinx.com>
+Date: Mon, 24 Nov 2014 15:11:43 +1000
+Subject: [PATCH] tty: xuartps: Fix RX hang, and TX corruption in set_termios
+
+Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
+---
+ drivers/tty/serial/xilinx_uartps.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
+index 7f8027f..74dd5c9 100644
+--- a/drivers/tty/serial/xilinx_uartps.c
++++ b/drivers/tty/serial/xilinx_uartps.c
+@@ -628,10 +628,12 @@ static void cdns_uart_set_termios(struct uart_port *port,
+
+ spin_lock_irqsave(&port->lock, flags);
+
+- /* Empty the receive FIFO 1st before making changes */
+- while ((cdns_uart_readl(CDNS_UART_SR_OFFSET) &
+- CDNS_UART_SR_RXEMPTY) != CDNS_UART_SR_RXEMPTY) {
+- cdns_uart_readl(CDNS_UART_FIFO_OFFSET);
++ /* Wait for the transmit FIFO to empty before making changes */
++ if (!(cdns_uart_readl(CDNS_UART_CR_OFFSET) & CDNS_UART_CR_TX_DIS)) {
++ while (!(cdns_uart_readl(CDNS_UART_SR_OFFSET) &
++ CDNS_UART_SR_TXEMPTY)) {
++ cpu_relax();
++ }
+ }
+
+ /* Disable the TX and RX to set baud rate */
+--
+2.1.1
+
diff --git a/recipes-kernel/linux/linux-xlnx_3.10.bb b/recipes-kernel/linux/linux-xlnx_3.10.bb
index 8edd4d71..d32c4241 100644
--- a/recipes-kernel/linux/linux-xlnx_3.10.bb
+++ b/recipes-kernel/linux/linux-xlnx_3.10.bb
@@ -9,3 +9,8 @@ include linux-xlnx.inc
# The MACB driver is non-functional in the 3.10 kernel
KERNEL_FEATURES_append_zynq += "features/xilinx/disable-macb.scc"
+FILESEXTRAPATHS_prepend := "${THISDIR}/linux-xlnx/3.10:"
+SRC_URI_append += " \
+ file://tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch \
+ "
+
diff --git a/recipes-kernel/linux/linux-xlnx_3.14.bb b/recipes-kernel/linux/linux-xlnx_3.14.bb
index d33b3a58..4a31ccff 100644
--- a/recipes-kernel/linux/linux-xlnx_3.14.bb
+++ b/recipes-kernel/linux/linux-xlnx_3.14.bb
@@ -8,4 +8,6 @@ include linux-xlnx.inc
FILESEXTRAPATHS_prepend := "${THISDIR}/linux-xlnx/3.14:"
SRC_URI_append += " \
file://usb-host-zynq-dr-of-PHY-reset-during-probe.patch \
+ file://tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch \
"
+
diff --git a/recipes-kernel/linux/linux-yocto/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch b/recipes-kernel/linux/linux-yocto/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
new file mode 100644
index 00000000..ea6bbe6b
--- /dev/null
+++ b/recipes-kernel/linux/linux-yocto/3.10/tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch
@@ -0,0 +1,34 @@
+From 4cbf3473ca25ac47d2d1e43113afce961d057b87 Mon Sep 17 00:00:00 2001
+From: Nathan Rossi <nathan.rossi@xilinx.com>
+Date: Mon, 24 Nov 2014 15:11:43 +1000
+Subject: [PATCH] tty: xuartps: Fix RX hang, and TX corruption in set_termios
+
+Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
+---
+ drivers/tty/serial/xilinx_uartps.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
+index e46e9f3..eb00754 100644
+--- a/drivers/tty/serial/xilinx_uartps.c
++++ b/drivers/tty/serial/xilinx_uartps.c
+@@ -646,10 +646,12 @@ static void xuartps_set_termios(struct uart_port *port,
+
+ spin_lock_irqsave(&port->lock, flags);
+
+- /* Empty the receive FIFO 1st before making changes */
+- while ((xuartps_readl(XUARTPS_SR_OFFSET) &
+- XUARTPS_SR_RXEMPTY) != XUARTPS_SR_RXEMPTY) {
+- xuartps_readl(XUARTPS_FIFO_OFFSET);
++ /* Wait for the transmit FIFO to empty before making changes */
++ if (!(xuartps_readl(XUARTPS_CR_OFFSET) & XUARTPS_CR_TX_DIS)) {
++ while (!(xuartps_readl(XUARTPS_SR_OFFSET) &
++ XUARTPS_SR_TXEMPTY)) {
++ cpu_relax();
++ }
+ }
+
+ /* Disable the TX and RX to set baud rate */
+--
+2.1.1
+
diff --git a/recipes-kernel/linux/linux-yocto_3.10.bbappend b/recipes-kernel/linux/linux-yocto_3.10.bbappend
index 5bc61056..1ddb2978 100644
--- a/recipes-kernel/linux/linux-yocto_3.10.bbappend
+++ b/recipes-kernel/linux/linux-yocto_3.10.bbappend
@@ -12,3 +12,7 @@ SRC_URI_append_microblaze += " \
file://7f15a256b556bf26780d7a0bd03c88914a852022.patch \
file://99399545d62533b4ae742190b5c6b11f7a5826d9.patch \
"
+SRC_URI_append_zynq += " \
+ file://tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch \
+ "
+
diff --git a/recipes-kernel/linux/linux-yocto_3.14.bbappend b/recipes-kernel/linux/linux-yocto_3.14.bbappend
index 651e0d72..944ff63b 100644
--- a/recipes-kernel/linux/linux-yocto_3.14.bbappend
+++ b/recipes-kernel/linux/linux-yocto_3.14.bbappend
@@ -2,3 +2,8 @@
require linux-xilinx-configs.inc
require linux-xilinx-machines.inc
+FILESEXTRAPATHS_prepend := "${THISDIR}/linux-xlnx/3.14:"
+SRC_URI_append_zynq += " \
+ file://tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch \
+ "
+
diff --git a/recipes-kernel/linux/linux-yocto_3.17.bbappend b/recipes-kernel/linux/linux-yocto_3.17.bbappend
index 651e0d72..f62d2ddc 100644
--- a/recipes-kernel/linux/linux-yocto_3.17.bbappend
+++ b/recipes-kernel/linux/linux-yocto_3.17.bbappend
@@ -2,3 +2,8 @@
require linux-xilinx-configs.inc
require linux-xilinx-machines.inc
+FILESEXTRAPATHS_prepend := "${THISDIR}/linux-xlnx/3.17:"
+SRC_URI_append_zynq += " \
+ file://tty-xuartps-Fix-RX-hang-and-TX-corruption-in-set_termios.patch \
+ "
+