serial: mxs-auart: add RTS/CTS check for DMA support
v3 cover serial: mxs-auart: add RTS/CTS check for DMA support
The original DMA support works only when RTS/CTS is enabled. (see the "e800163 serial: mxs-auart: add the DMA support for mx28") But after several patches, DMA support has lost this limit. (see the "bcc20f9 serial: mxs-auart: move to use generic DMA helper")
So a UART without the RTS/CTS lines may also enables the DMA support for it, but it may does not work or works abnormally (since without the RTS/CTS signals, the TX/RX may not works)
This patch set remove the unnecessary macro MXS_AUART_DMA_CONFIG, and adds an optional property "fsl,uart-has-rtscts" for the UART DT node which indicates the UART has RTS and CTS lines.
This patch set also adds a macro MXS_AUART_RTSCTS, and uses it to check RTS/CTS before we enable the DMA for the UART.
At last, enable the DMA support for auart0 in the imx28-evk boards.
v2 --> v3:
[0] make the patch 2 as the first patch.
[1] add more comments.
v1 --> v2:
[0] changed the comments.
[1] fix the typos.
Huang Shijie (3):
serial: mxs: enable the DMA only when the RTS/CTS is valid
serial: mxs: remove the MXS_AUART_DMA_CONFIG
ARM: dts: imx28-evk: add the RTS/CTS property for auart0
.../bindings/tty/serial/fsl-mxs-auart.txt | 4 ++++ arch/arm/boot/dts/imx28-evk.dts | 1 + drivers/tty/serial/mxs-auart.c | 8 +++++--- 3 files changed, 10 insertions(+), 3 deletions(-)
Signature · 1 line
1.7.4.4
PATCH v3 1/3 serial: mxs: enable the DMA only when the RTS/CTS is valid
From: Huang Shijie <[email protected]>
The original DMA support works only when RTS/CTS is enabled. (see the "e800163 serial: mxs-auart: add the DMA support for mx28") But after several patches, DMA support has lost this limit. (see the "bcc20f9 serial: mxs-auart: move to use generic DMA helper")
So an UART without the RTS/CTS lines may also enables the DMA support, in which case the UART may gets unpredictable results.
This patch adds an optional property for the UART DT node which indicates the UART has RTS and CTS lines, and it also means you enable the DMA support for this UART.
This patch also adds a macro MXS_AUART_RTSCTS, and uses it to check RTS/CTS before we enable the DMA for the UART.
--- .../bindings/tty/serial/fsl-mxs-auart.txt | 4 ++++ drivers/tty/serial/mxs-auart.c | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletions(-)
Documentation/devicetree/bindings/tty/serial/fsl-mxs-auart.txt +4 -0
@@ -10,6 +10,10 @@ Required properties: Refer to dma.txt and fsl-mxs-dma.txt for details. - dma-names: "rx" for RX channel, "tx" for TX channel. +Optional properties: +- fsl,uart-has-rtscts : Indicate the UART has RTS and CTS lines, + it also means you enable the DMA support for this UART. + Example: auart0: serial at 8006a000 { compatible = "fsl,imx28-auart", "fsl,imx23-auart";
drivers/tty/serial/mxs-auart.c +6 -1
@@ -137,6 +137,7 @@ struct mxs_auart_port {#define MXS_AUART_DMA_ENABLED 0x2#define MXS_AUART_DMA_TX_SYNC 2/* bit 2 */ #define MXS_AUART_DMA_RX_READY 3/* bit 3 */ +#define MXS_AUART_RTSCTS 4/* bit 4 */ unsigned long flags;unsigned int ctrl;enum mxs_auart_type devtype;
@@ -639,7 +640,8 @@ static void mxs_auart_settermios(struct uart_port *u,* we can only implement the DMA support for auart * in mx28. */ -if (is_imx28_auart (s) && (s->flags &MXS_AUART_DMA_CONFIG )) { +if (is_imx28_auart (s) && (s->flags &MXS_AUART_DMA_CONFIG ) + &&test_bit (MXS_AUART_RTSCTS , &s->flags)) {if (!mxs_auart_dma_init (s))/* enable DMA tranfer */ ctrl2 |=AUART_CTRL2_TXDMAE |AUART_CTRL2_RXDMAE
@@ -1009,6 +1011,9 @@ static int serial_mxs_probe_dt(struct mxs_auart_port *s, s->flags |=MXS_AUART_DMA_CONFIG ; +if (of_get_property (np,"fsl,uart-has-rtscts" ,NULL )) +set_bit (MXS_AUART_RTSCTS , &s->flags); +return 0 ; }
Signature · 1 line
1.7.4.4
Greg KH
maintainerPATCH v3 1/3 serial: mxs: enable the DMA only when the RTS/CTS is valid
Quoted 17 lines · Huang Shijie
From: Huang Shijie <[email protected]>
The original DMA support works only when RTS/CTS is enabled. (see the "e800163 serial: mxs-auart: add the DMA support for mx28") But after several patches, DMA support has lost this limit. (see the "bcc20f9 serial: mxs-auart: move to use generic DMA helper")
So an UART without the RTS/CTS lines may also enables the DMA support, in which case the UART may gets unpredictable results.
This patch adds an optional property for the UART DT node which indicates the UART has RTS and CTS lines, and it also means you enable the DMA support for this UART.
This patch also adds a macro
MXS_AUART_RTSCTS, and uses it to check RTS/CTS before we enable the DMA for the UART.
Quoted 7 lines
Signed-off-by Huang Shijie <[email protected]>Signed-off-by Huang Shijie <[email protected]>--- .../bindings/tty/serial/fsl-mxs-auart.txt | 4 ++++ drivers/tty/serial/mxs-auart.c | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletions(-)
I don't see how this patch follows the stable kernel guidelines, so I'll take the marking of it off, and queue it up for 3.12.
thanks,
greg k-h
PATCH v3 2/3 serial: mxs: remove the MXS_AUART_DMA_CONFIG
In reply to Huang ShijieThe MXS_AUART_DMA_CONFIG is originally used to check if the DT node is configured with the DMA property.
But now, the MXS_AUART_DMA_CONFIG is set unconditionally in the serial_mxs_probe_dt(), so the check in the mxs_auart_settermios() is not necessary anymore. This patch removes this macro.
--- drivers/tty/serial/mxs-auart.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-)
drivers/tty/serial/mxs-auart.c +1 -4
@@ -133,7 +133,6 @@ enum mxs_auart_type {struct mxs_auart_port {struct uart_port port; -#define MXS_AUART_DMA_CONFIG 0x1#define MXS_AUART_DMA_ENABLED 0x2#define MXS_AUART_DMA_TX_SYNC 2/* bit 2 */ #define MXS_AUART_DMA_RX_READY 3/* bit 3 */
@@ -640,7 +639,7 @@ static void mxs_auart_settermios(struct uart_port *u,* we can only implement the DMA support for auart * in mx28. */ -if (is_imx28_auart (s) && (s->flags &MXS_AUART_DMA_CONFIG ) +if (is_imx28_auart (s) &&test_bit (MXS_AUART_RTSCTS , &s->flags)) {if (!mxs_auart_dma_init (s))/* enable DMA tranfer */
@@ -1009,8 +1008,6 @@ static int serial_mxs_probe_dt(struct mxs_auart_port *s, } s->port.line = ret; - s->flags |=MXS_AUART_DMA_CONFIG ; -if (of_get_property (np,"fsl,uart-has-rtscts" ,NULL ))set_bit (MXS_AUART_RTSCTS , &s->flags);
Signature · 1 line
1.7.4.4
PATCH v3 3/3 ARM: dts: imx28-evk: add the RTS/CTS property for auart0
In reply to Huang ShijieFrom: Huang Shijie <[email protected]>
Add the RTS/CTS property for auart0 which means we enable the DMA support for it.
--- arch/arm/boot/dts/imx28-evk.dts | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
arch/arm/boot/dts/imx28-evk.dts +1 -0
@@ -220,6 +220,7 @@ auart0: serial@8006a000 { pinctrl-names = "default"; pinctrl-0 = <&auart0_pins_a>; + fsl,uart-has-rtscts; status = "okay"; };
Signature · 1 line
1.7.4.4
v3 cover serial: mxs-auart: add RTS/CTS check for DMA support
In reply to Huang ShijieQuoted 4 lines · Huang Shijie
Huang Shijie (3):
serial: mxs: enable the DMA only when the RTS/CTS is valid
serial: mxs: remove theMXS_AUART_DMA_CONFIG
ARM: dts: imx28-evk: add the RTS/CTS property for auart0
For the series,