diff options
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 \ + " + |