On 05/26/2015 06:08 PM, Tony Lindgren wrote:
- Peter Ujfalusi peter.ujfalusi@ti.com [150526 06:28]:
Switch to use ma_request_slave_channel_compat_reason() to request the DMA channels. In case of error, return the error code we received including -EPROBE_DEFER
Signed-off-by: Peter Ujfalusi peter.ujfalusi@ti.com CC: Greg Kroah-Hartman gregkh@linuxfoundation.org
drivers/tty/serial/8250/8250_dma.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c index 21d01a491405..a617eca4e97d 100644 --- a/drivers/tty/serial/8250/8250_dma.c +++ b/drivers/tty/serial/8250/8250_dma.c @@ -182,21 +182,19 @@ int serial8250_request_dma(struct uart_8250_port *p) dma_cap_set(DMA_SLAVE, mask);
/* Get a channel for RX */
- dma->rxchan = dma_request_slave_channel_compat(mask,
dma->fn, dma->rx_param,
p->port.dev, "rx");
- if (!dma->rxchan)
return -ENODEV;
dma->rxchan = dma_request_slave_channel_compat_reason(mask, dma->fn,
dma->rx_param, p->port.dev, "rx");
if (IS_ERR(dma->rxchan))
return PTR_ERR(dma->rxchan);
dmaengine_slave_config(dma->rxchan, &dma->rxconf);
/* Get a channel for TX */
- dma->txchan = dma_request_slave_channel_compat(mask,
dma->fn, dma->tx_param,
p->port.dev, "tx");
- if (!dma->txchan) {
- dma->txchan = dma_request_slave_channel_compat_reason(mask, dma->fn,
dma->tx_param, p->port.dev, "tx");
- if (IS_ERR(dma->txchan)) { dma_release_channel(dma->rxchan);
return -ENODEV;
return PTR_ERR(dma->txchan);
}
dmaengine_slave_config(dma->txchan, &dma->txconf);
In general the drivers need to work just fine also without DMA.
Does this handle the case properly where no DMA channel is configured for the driver in the dts file?
The 8250 core will fall back to PIO mode if the DMA can not be requested. At the morning I was looking at the 8250 stack and realized that serial8250_request_dma() will not be called at driver probe time so this patch can be ignored and will be dropped from the v2 series.