Да, но все-таки, получается, что в драйвере ошибка - DMA в DTS есть, а в драйвере DMA не включается?
Я описывал, что ДМА включается. если заменить для AW_16550A:
// .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
.fcr = UART_FCR_DMA_SELECT | UART_FCR_ENABLE_FIFO |
Но при этом включается неправильно:
[ 199.286348] dma dma0chan5: Invalid DMA configuration
а в DTSI:
dmas = <&dma 16>, <&dma 16>;
Как это исправить - непонятно.
возможно, только что это меняет - я вам дал тест где очевидно что на скорости 4 000 000 бод достаточно fifo 256 байт без dma чтобы драйвер успевал принимать буфер 4095 байт без потерь. В Linux у вас не получится сделать как вы делали на baermetal и управлять DMA напрямую. У вас цель задачу решить средствами ОС или сделать из ОС baremetal?
Если уж рассуждать об ошибках то тут очевидно ошибка в выборе интерфейса и протокола для обмена на такой скорости.
кстати, надо ещё проверять дейтвительно ли UART работает на такой скорости, помоему там надо ещё частоту apb1 увеличить чтобы получить такую частоты UART.
явно надо повышать частоту apb1 - сделал циклическую передача-приём без вывода дампа в случае прохождения теста - видно что скорость даже ниже чем 115200. Чтобы повысить частоту UART-ов надо увеличить частоту apb1 - штатно она 24 МГц. Пример 200 МГц с ahb