serial: 8250: fix regression in 8250 uart driver
RFC 1/1 serial: 8250: fix regression in 8250 uart driver
Hi Andy,
I saw that you have discovered that commit ec5a11a91eec ("serial: 8250:
Validate dmaengine rx chan meets requirements") introduced a regression in the 8250 uart driver. For SoCFPGA platform, I am seeing this error:
[ 5.541751] ttyS0 - failed to request DMA
Reverting the commit ec5a11a91eec removes the error.
I saw that you started the discussion, but I didn't see that a patch was included[1].
The following patch seems to fix the error, but I'm not sure if it's the same fix that you had in mind.
Thanks,
Dinh
[1] http://marc.info/?l=linux-serial&m=146254187602862&w=2
---------------8<------------
(quoted diff) +0 -0
b/drivers/tty/serial/8250/8250_dma.c
index 7f33d1c..847a203 100644
drivers/tty/serial/8250/8250_dma.c +1 -1
@@ -176,7 +176,7 @@ int serial8250_request_dma(struct uart_8250_port *p) ret =dma_get_slave_caps (dma->rxchan, &caps);if (ret) goto release_rx; -if (!caps.cmd_pause || !caps.cmd_terminate || +if ((!caps.cmd_pause || !caps.cmd_terminate) && caps.residue_granularity ==
DMA_RESIDUE_GRANULARITY_DESCRIPTOR) {
ret = -EINVAL;
goto release_rx;Quoted 9 lines · Dinh Nguyen
Hi Andy,
I saw that you have discovered that commit
ec5a11a91eec("serial: 8250:
Validate dmaengine rx chan meets requirements") introduced a regression in the 8250 uart driver. For SoCFPGA platform, I am seeing this error:[ 5.541751] ttyS0 - failed to request DMAReverting the commit
ec5a11a91eecremoves the error.
The error is that your dmaengine driver doesn't support the functionality required by the 8250 driver.
Regards,
Peter Hurley
Quoted 28 lines
I saw that you started the discussion, but I didn't see that a patch was included[1].
The following patch seems to fix the error, but I'm not sure if it's the same fix that you had in mind.
Thanks,
Dinh[1] http://marc.info/?l=linux-serial&m=146254187602862&w=2
---------------8<------------
drivers/tty/serial/8250/8250_dma.c +1
-1@@ -176,7 +176,7 @@ int serial8250_request_dma(struct uart_8250_port *p) ret =dma_get_slave_caps (dma->rxchan, &caps);if (ret) goto release_rx; -if (!caps.cmd_pause || !caps.cmd_terminate || +if ((!caps.cmd_pause || !caps.cmd_terminate) && caps.residue_granularity ==DMA_RESIDUE_GRANULARITY_DESCRIPTOR ) { ret = -EINVAL ;goto release_rx;