Message ID | 1432646768-12532-4-git-send-email-peter.ujfalusi@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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 :(
* 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? Regards, Tony
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.
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. >
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.
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);
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(-)