2023-11-19 15:56:14

by Christophe JAILLET

[permalink] [raw]
Subject: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

dma_request_slave_channel() is deprecated. dma_request_chan() should
be used directly instead.

Switch to the preferred function and update the error handling accordingly.

Signed-off-by: Christophe JAILLET <[email protected]>
---
v2: Also update atmel_prepare_rx_dma()
---
drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index 1946fafc3f3e..6aeb4648843b 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port *port)
struct device *mfd_dev = port->dev->parent;
dma_cap_mask_t mask;
struct dma_slave_config config;
+ struct dma_chan *chan;
int ret, nent;

dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask);

- atmel_port->chan_tx = dma_request_slave_channel(mfd_dev, "tx");
- if (atmel_port->chan_tx == NULL)
+ chan = dma_request_chan(mfd_dev, "tx");
+ if (IS_ERR(chan)) {
+ atmel_port->chan_tx = NULL;
goto chan_err;
+ }
+ atmel_port->chan_tx = chan;
dev_info(port->dev, "using %s for tx DMA transfers\n",
dma_chan_name(atmel_port->chan_tx));

@@ -1188,6 +1192,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
dma_cap_mask_t mask;
struct dma_slave_config config;
struct circ_buf *ring;
+ struct dma_chan *chan;
int ret, nent;

ring = &atmel_port->rx_ring;
@@ -1195,9 +1200,12 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
dma_cap_zero(mask);
dma_cap_set(DMA_CYCLIC, mask);

- atmel_port->chan_rx = dma_request_slave_channel(mfd_dev, "rx");
- if (atmel_port->chan_rx == NULL)
+ chan = dma_request_chan(mfd_dev, "rx");
+ if (IS_ERR(chan)) {
+ atmel_port->chan_rx = NULL;
goto chan_err;
+ }
+ atmel_port->chan_rx = chan;
dev_info(port->dev, "using %s for rx DMA transfers\n",
dma_chan_name(atmel_port->chan_rx));

--
2.34.1


2023-11-20 06:16:06

by claudiu beznea

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

Hi, Christophe,

On 19.11.2023 17:55, Christophe JAILLET wrote:
> dma_request_slave_channel() is deprecated. dma_request_chan() should
> be used directly instead.
>
> Switch to the preferred function and update the error handling accordingly.
>
> Signed-off-by: Christophe JAILLET <[email protected]>
> ---
> v2: Also update atmel_prepare_rx_dma()
> ---
> drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
> index 1946fafc3f3e..6aeb4648843b 100644
> --- a/drivers/tty/serial/atmel_serial.c
> +++ b/drivers/tty/serial/atmel_serial.c
> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port *port)
> struct device *mfd_dev = port->dev->parent;
> dma_cap_mask_t mask;
> struct dma_slave_config config;
> + struct dma_chan *chan;

There is no need for this.

> int ret, nent;
>
> dma_cap_zero(mask);
> dma_cap_set(DMA_SLAVE, mask);
>
> - atmel_port->chan_tx = dma_request_slave_channel(mfd_dev, "tx");
> - if (atmel_port->chan_tx == NULL)
> + chan = dma_request_chan(mfd_dev, "tx");
> + if (IS_ERR(chan)) {
> + atmel_port->chan_tx = NULL;
> goto chan_err;
> + }
> + atmel_port->chan_tx = chan;
> dev_info(port->dev, "using %s for tx DMA transfers\n",
> dma_chan_name(atmel_port->chan_tx));
>
> @@ -1188,6 +1192,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
> dma_cap_mask_t mask;
> struct dma_slave_config config;
> struct circ_buf *ring;
> + struct dma_chan *chan;

Ditto

> int ret, nent;
>
> ring = &atmel_port->rx_ring;
> @@ -1195,9 +1200,12 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
> dma_cap_zero(mask);
> dma_cap_set(DMA_CYCLIC, mask);
>
> - atmel_port->chan_rx = dma_request_slave_channel(mfd_dev, "rx");
> - if (atmel_port->chan_rx == NULL)
> + chan = dma_request_chan(mfd_dev, "rx");
> + if (IS_ERR(chan)) {
> + atmel_port->chan_rx = NULL;
> goto chan_err;
> + }
> + atmel_port->chan_rx = chan;
> dev_info(port->dev, "using %s for rx DMA transfers\n",
> dma_chan_name(atmel_port->chan_rx));
>

2023-11-20 07:04:55

by Jiri Slaby

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

On 20. 11. 23, 7:14, claudiu beznea wrote:
> Hi, Christophe,
>
> On 19.11.2023 17:55, Christophe JAILLET wrote:
>> dma_request_slave_channel() is deprecated. dma_request_chan() should
>> be used directly instead.
>>
>> Switch to the preferred function and update the error handling accordingly.
>>
>> Signed-off-by: Christophe JAILLET <[email protected]>
>> ---
>> v2: Also update atmel_prepare_rx_dma()
>> ---
>> drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
>> 1 file changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
>> index 1946fafc3f3e..6aeb4648843b 100644
>> --- a/drivers/tty/serial/atmel_serial.c
>> +++ b/drivers/tty/serial/atmel_serial.c
>> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port *port)
>> struct device *mfd_dev = port->dev->parent;
>> dma_cap_mask_t mask;
>> struct dma_slave_config config;
>> + struct dma_chan *chan;
>
> There is no need for this.

How'd you avoid crash in here then:
if (atmel_port->chan_tx)
atmel_release_tx_dma(port);
?

thanks,
--
js
suse labs

2023-11-20 07:07:34

by Jiri Slaby

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

On 20. 11. 23, 8:04, Jiri Slaby wrote:
> On 20. 11. 23, 7:14, claudiu beznea wrote:
>> Hi, Christophe,
>>
>> On 19.11.2023 17:55, Christophe JAILLET wrote:
>>> dma_request_slave_channel() is deprecated. dma_request_chan() should
>>> be used directly instead.
>>>
>>> Switch to the preferred function and update the error handling
>>> accordingly.
>>>
>>> Signed-off-by: Christophe JAILLET <[email protected]>
>>> ---
>>> v2: Also update atmel_prepare_rx_dma()
>>> ---
>>>   drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
>>>   1 file changed, 12 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/tty/serial/atmel_serial.c
>>> b/drivers/tty/serial/atmel_serial.c
>>> index 1946fafc3f3e..6aeb4648843b 100644
>>> --- a/drivers/tty/serial/atmel_serial.c
>>> +++ b/drivers/tty/serial/atmel_serial.c
>>> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct
>>> uart_port *port)
>>>       struct device *mfd_dev = port->dev->parent;
>>>       dma_cap_mask_t        mask;
>>>       struct dma_slave_config config;
>>> +    struct dma_chan *chan;
>>
>> There is no need for this.
>
> How'd you avoid crash in here then:
>         if (atmel_port->chan_tx)
>                 atmel_release_tx_dma(port);
> ?

I will answer myself: easily. As there is
atmel_port->chan_tx = NULL;
which I overlooked at first.


> thanks,

--
js
suse labs

2023-11-20 16:52:45

by Hugo Villeneuve

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

On Sun, 19 Nov 2023 16:55:15 +0100
Christophe JAILLET <[email protected]> wrote:

Hi,
change the subject to:

"... replace deprecated dma_request_slave_channel()"

Hugo.


> dma_request_slave_channel() is deprecated. dma_request_chan() should
> be used directly instead.
>
> Switch to the preferred function and update the error handling accordingly.
>
> Signed-off-by: Christophe JAILLET <[email protected]>
> ---
> v2: Also update atmel_prepare_rx_dma()
> ---
> drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
> index 1946fafc3f3e..6aeb4648843b 100644
> --- a/drivers/tty/serial/atmel_serial.c
> +++ b/drivers/tty/serial/atmel_serial.c
> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port *port)
> struct device *mfd_dev = port->dev->parent;
> dma_cap_mask_t mask;
> struct dma_slave_config config;
> + struct dma_chan *chan;
> int ret, nent;
>
> dma_cap_zero(mask);
> dma_cap_set(DMA_SLAVE, mask);
>
> - atmel_port->chan_tx = dma_request_slave_channel(mfd_dev, "tx");
> - if (atmel_port->chan_tx == NULL)
> + chan = dma_request_chan(mfd_dev, "tx");
> + if (IS_ERR(chan)) {
> + atmel_port->chan_tx = NULL;
> goto chan_err;
> + }
> + atmel_port->chan_tx = chan;
> dev_info(port->dev, "using %s for tx DMA transfers\n",
> dma_chan_name(atmel_port->chan_tx));
>
> @@ -1188,6 +1192,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
> dma_cap_mask_t mask;
> struct dma_slave_config config;
> struct circ_buf *ring;
> + struct dma_chan *chan;
> int ret, nent;
>
> ring = &atmel_port->rx_ring;
> @@ -1195,9 +1200,12 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
> dma_cap_zero(mask);
> dma_cap_set(DMA_CYCLIC, mask);
>
> - atmel_port->chan_rx = dma_request_slave_channel(mfd_dev, "rx");
> - if (atmel_port->chan_rx == NULL)
> + chan = dma_request_chan(mfd_dev, "rx");
> + if (IS_ERR(chan)) {
> + atmel_port->chan_rx = NULL;
> goto chan_err;
> + }
> + atmel_port->chan_rx = chan;
> dev_info(port->dev, "using %s for rx DMA transfers\n",
> dma_chan_name(atmel_port->chan_rx));
>
> --
> 2.34.1
>

2023-11-20 21:19:46

by Christophe JAILLET

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()

Le 20/11/2023 à 08:12, claudiu beznea a écrit :
>
>
> On 20.11.2023 09:04, Jiri Slaby wrote:
>> On 20. 11. 23, 7:14, claudiu beznea wrote:
>>> Hi, Christophe,
>>>
>>> On 19.11.2023 17:55, Christophe JAILLET wrote:
>>>> dma_request_slave_channel() is deprecated. dma_request_chan() should
>>>> be used directly instead.
>>>>
>>>> Switch to the preferred function and update the error handling accordingly.
>>>>
>>>> Signed-off-by: Christophe JAILLET <[email protected]>
>>>> ---
>>>> v2: Also update atmel_prepare_rx_dma()
>>>> ---
>>>>   drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
>>>>   1 file changed, 12 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/drivers/tty/serial/atmel_serial.c
>>>> b/drivers/tty/serial/atmel_serial.c
>>>> index 1946fafc3f3e..6aeb4648843b 100644
>>>> --- a/drivers/tty/serial/atmel_serial.c
>>>> +++ b/drivers/tty/serial/atmel_serial.c
>>>> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port
>>>> *port)
>>>>       struct device *mfd_dev = port->dev->parent;
>>>>       dma_cap_mask_t        mask;
>>>>       struct dma_slave_config config;
>>>> +    struct dma_chan *chan;
>>>
>>> There is no need for this.
>>
>> How'd you avoid crash in here then:
>>         if (atmel_port->chan_tx)
>>                 atmel_release_tx_dma(port);
>> ?
>
> I wanted to say that instead of adding the chan variable the
> atmel_port->chan_tx would be used instead.

You mean something like:

- atmel_port->chan_tx = dma_request_slave_channel(mfd_dev, "tx");
- if (atmel_port->chan_tx == NULL)
+ atmel_port->chan_tx = dma_request_chan(mfd_dev, "tx");
+ if (IS_ERR(atmel_port->chan_tx)) {
+ atmel_port->chan_tx = NULL;

?

Mostly a mater of taste. I can send a v3 with that if it is the
preferred style.

CJ

>
>>
>> thanks,
>

2023-11-23 17:00:38

by claudiu beznea

[permalink] [raw]
Subject: Re: [PATCH v2] serial: atmel: convert not to use dma_request_slave_channel()



On 20.11.2023 09:04, Jiri Slaby wrote:
> On 20. 11. 23, 7:14, claudiu beznea wrote:
>> Hi, Christophe,
>>
>> On 19.11.2023 17:55, Christophe JAILLET wrote:
>>> dma_request_slave_channel() is deprecated. dma_request_chan() should
>>> be used directly instead.
>>>
>>> Switch to the preferred function and update the error handling accordingly.
>>>
>>> Signed-off-by: Christophe JAILLET <[email protected]>
>>> ---
>>> v2: Also update atmel_prepare_rx_dma()
>>> ---
>>>   drivers/tty/serial/atmel_serial.c | 16 ++++++++++++----
>>>   1 file changed, 12 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/drivers/tty/serial/atmel_serial.c
>>> b/drivers/tty/serial/atmel_serial.c
>>> index 1946fafc3f3e..6aeb4648843b 100644
>>> --- a/drivers/tty/serial/atmel_serial.c
>>> +++ b/drivers/tty/serial/atmel_serial.c
>>> @@ -1013,14 +1013,18 @@ static int atmel_prepare_tx_dma(struct uart_port
>>> *port)
>>>       struct device *mfd_dev = port->dev->parent;
>>>       dma_cap_mask_t        mask;
>>>       struct dma_slave_config config;
>>> +    struct dma_chan *chan;
>>
>> There is no need for this.
>
> How'd you avoid crash in here then:
>         if (atmel_port->chan_tx)
>                 atmel_release_tx_dma(port);
> ?

I wanted to say that instead of adding the chan variable the
atmel_port->chan_tx would be used instead.

>
> thanks,