On 2020/08/10 15:33 Frieder Schrempf <frieder.schrempf@xxxxxxxxxx> wrote: > Hi Robin, > > This patch seems to break UART DMA in case the ROM firmware is used. In that > case sdma->script_number is set to SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1, so > the ROM scripts at uart_2_mcu_addr and uartsh_2_mcu_addr will never be > added in sdma_add_scripts() as they are now moved beyond the V1 max index. > > Reverting this patch fixes UART DMA with ROM firmware. > Can you please find a way to fix this or just drop this change? > Hi Frieder, Thanks for your report, could you try with the additional below patch? If that works, I'll merge it into next version. diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 5900e32..4db55b9 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -1754,6 +1754,19 @@ static void sdma_add_scripts(struct sdma_engine *sdma, for (i = 0; i < sdma->script_number; i++) if (addr_arr[i] > 0) saddr_arr[i] = addr_arr[i]; + + /* + * get uart_2_mcu_addr/uartsh_2_mcu_addr rom script specially because + * they are now replaced by uart_2_mcu_ram_addr/uartsh_2_mcu_ram_addr + * to be compatible with legacy freescal/nxp sdma firmware, and they + * are located in the bottom part of sdma_script_start_addrs which are + * beyond the SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1. + */ + if (addr->uart_2_mcu_addr) + sdma->script_addrs->uart_2_mcu_addr = addr->uart_2_mcu_addr; + if (addr->uartsh_2_mcu_addr) + sdma->script_addrs->uartsh_2_mcu_addr = addr->uartsh_2_mcu_addr; + }