2015-05-26 13:25:58

by Peter Ujfalusi

[permalink] [raw]
Subject: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

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 <[email protected]>
CC: Greg Kroah-Hartman <[email protected]>
---
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);
--
2.3.5


2015-05-26 14:44:32

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

On Tue, May 26, 2015 at 04:25:58PM +0300, Peter Ujfalusi wrote:
> 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

I think you typed the function name wrong here :(

2015-05-26 15:08:53

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

* Peter Ujfalusi <[email protected]> [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 <[email protected]>
> CC: Greg Kroah-Hartman <[email protected]>
> ---
> 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?

Regards,

Tony

2015-05-27 10:41:03

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

On 05/26/2015 05:44 PM, Greg Kroah-Hartman wrote:
> On Tue, May 26, 2015 at 04:25:58PM +0300, Peter Ujfalusi wrote:
>> 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
>
> I think you typed the function name wrong here :(

Oops. Also in other drivers :(
I will fix up the messages for the v2 series, which will not going to include
the patch against 8250_dma.

If I understand things right around the 8250_* is that the
serial8250_request_dma() which is called from serial8250_do_startup() is not
called at module probe time, so it can not be used to handle deferred probing.

Thus this patch can be dropped IMO.

--
P?ter

2015-05-27 10:41:41

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

On 05/27/2015 01:41 PM, Peter Ujfalusi wrote:
> On 05/26/2015 05:44 PM, Greg Kroah-Hartman wrote:
>> On Tue, May 26, 2015 at 04:25:58PM +0300, Peter Ujfalusi wrote:
>>> 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
>>
>> I think you typed the function name wrong here :(
>
> Oops. Also in other drivers :(

I mean in other patches ;)

> I will fix up the messages for the v2 series, which will not going to include
> the patch against 8250_dma.
>
> If I understand things right around the 8250_* is that the
> serial8250_request_dma() which is called from serial8250_do_startup() is not
> called at module probe time, so it can not be used to handle deferred probing.
>
> Thus this patch can be dropped IMO.
>


--
P?ter

2015-05-27 10:58:36

by Peter Ujfalusi

[permalink] [raw]
Subject: Re: [PATCH 03/13] serial: 8250_dma: Support for deferred probing when requesting DMA channels

On 05/26/2015 06:08 PM, Tony Lindgren wrote:
> * Peter Ujfalusi <[email protected]> [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 <[email protected]>
>> CC: Greg Kroah-Hartman <[email protected]>
>> ---
>> 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.

--
P?ter