atmel usart and dma tx

Tudor.Ambarus at microchip.com Tudor.Ambarus at microchip.com
Thu Jul 14 00:13:09 PDT 2022


Hi, Jiří,

On 4/28/22 12:08, Jiří Prchal wrote:
> [Some people who received this message don't often get email from jiri.prchal at aksignal.cz. Learn why this is important at http://aka.ms/LearnAboutSenderIdentification.]
> 
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi everybody,
> with kernel 5.17, at91sam9g25 running at 400MHz I discovered drop outs
> while I write data (64 to 128B) to ttyS by one call of write(). At speed
> 230400 or 115200 Baud. It is not transmitted at once, there are random
> spaces long 200us to 1ms. It should use DMA so I think it could be
> transmitted at once.
> Is there everything OK with DMA or some special setting needed?

There are some concurrency problems with at-hdmac that happen at high
loads (check [1]), but I don't think it's related to your problem.
Can you do a flame graph to verify where in the code is the stall? Why
do you assume it's at the DMA level? Have you tried using usart without
DMA and verify if the stalling is still there?

> 
> dmesg:
> [    1.636666] bus: 'platform': __driver_probe_device: matched device
> f801c000.serial with driver at91_usart_mode
> [    1.636666] bus: 'platform': really_probe: probing driver
> at91_usart_mode with device f801c000.serial
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: usart0-0: 2 0:0
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: maps: function
> usart0 group usart0-0 num 3
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: usart0_rts-0: 1 0:2
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: maps: function
> usart0 group usart0_rts-0 num 2
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: found group
> selector 4 for usart0-0
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: found group
> selector 5 for usart0_rts-0
> [    1.636666] at91_usart_mode f801c000.serial: no init pinctrl state
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: enable function
> usart0 group usart0-0
> [    1.636666] pinctrl-at91 ahb:apb:pinctrl at fffff400: enable function
> usart0 group usart0_rts-0
> [    1.639999] at91_usart_mode f801c000.serial: no sleep pinctrl state
> [    1.643333] at91_usart_mode f801c000.serial: no idle pinctrl state
> [    1.643333] Registering platform device 'atmel_usart_serial.1.auto'.
> Parent at f801c000.serial
> [    1.643333] device: 'atmel_usart_serial.1.auto': device_add
> [    1.643333] bus: 'platform': add device atmel_usart_serial.1.auto
> [    1.643333] bus: 'platform': __driver_probe_device: matched device
> atmel_usart_serial.1.auto with driver atmel_usart_serial
> [    1.643333] bus: 'platform': really_probe: probing driver
> atmel_usart_serial with device atmel_usart_serial.1.auto
> [    1.643333] atmel_usart_serial atmel_usart_serial.1.auto: no of_node;
> not parsing pinctrl DT
> [    1.643333] atmel_usart_serial atmel_usart_serial.1.auto: no default
> pinctrl state
> [    1.643333] atmel_usart_serial atmel_usart_serial.1.auto: GPIO lookup
> for consumer rs485-term
> [    1.643333] atmel_usart_serial atmel_usart_serial.1.auto: using
> device tree for GPIO lookup
> [    1.646666] atmel_usart_serial atmel_usart_serial.1.auto: using
> lookup tables for GPIO lookup
> [    1.646666] atmel_usart_serial atmel_usart_serial.1.auto: No GPIO
> consumer rs485-term found
> [    1.649999] atmel_usart_serial.1.auto: ttyS2 at MMIO 0xf801c000 (irq
> = 24, base_baud = 8333333) is a ATMEL_SERIAL
> [    1.656666] driver: 'atmel_usart_serial': driver_bound: bound to
> device 'atmel_usart_serial.1.auto'
> [    1.656666] bus: 'platform': really_probe: bound device
> atmel_usart_serial.1.auto to driver atmel_usart_serial
> [    1.656666] driver: 'at91_usart_mode': driver_bound: bound to device
> 'f801c000.serial'
> [    1.656666] bus: 'platform': really_probe: bound device
> f801c000.serial to driver at91_usart_mode
> 
> [   41.606666] atmel_usart_serial atmel_usart_serial.1.auto: using
> dma0chan6 for rx DMA transfers
> [   41.613333] atmel_usart_serial atmel_usart_serial.1.auto: using
> dma0chan7 for tx DMA transfers
> 

What should I see in this log?

Thanks,
ta

[1] https://lore.kernel.org/lkml/13c6c9a2-6db5-c3bf-349b-4c127ad3496a@axentia.se/

> With kernel 4.5 spaces are there too, but shorter and less frequent.
> Thanks for any help,
> Jiri



More information about the linux-arm-kernel mailing list