On 2020/08/10 15:33 Frieder Schrempf <frieder.schrempf@xxxxxxxxxx> wrote:
Hi Robin,Hi Frieder,
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?
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;
+
}