Skip to contentSkip to conversation

serial: 8250: fix regression in 8250 uart driver

RFC In review Dinh Nguyen 2 participants 2 messages Jun 13, 2016 TTY layer and serial drivers

lore
Share & tools
lore
#0 lore raw

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;
#1 lore raw
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 DMA

Reverting the commit ec5a11a91eec removes 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
index 7f33d1c..847a203 100644
@@ -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;