Hi Bernhard,
I cannot explain the difference in behavior between the two boards. But probably the problem is somehow related to the firmware loading procedure of the SDMA. I question whether the asynchronous firmware loading in sdma_get_firmware() is correct. Maybe there could be race conditions between the SDMA firmware loading and first DMA client drivers trying to request their channels (I didn't really investigate this). Your customer may try whether the following patch changes something:
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -1889,11 +1889,11 @@
static int sdma_get_firmware(struct sdma_engine *sdma,
const char *fw_name)
{
- int ret;
-
- ret = request_firmware_nowait(THIS_MODULE,
- FW_ACTION_HOTPLUG, fw_name, sdma->dev,
- GFP_KERNEL, sdma, sdma_load_firmware);
+ struct firmware const *fw;
+ int ret = request_firmware(&fw, fw_name, sdma->dev);
+ if (ret)
+ return ret;
+ sdma_load_firmware(fw, sdma);
return ret;
}
Another guess is, that the reset method may be somehow incomplete so that either the SDMA, AIPSTZ or one of the peripherals is in a non-reset state at the first reboot.
In the last lines of the log, U-Boot saya that the reset has been caused by the watchdog. Is the watchdog activated by the boot loader? Can the customer test again without a watchdog activated? I am curious whether the systems freezes or reboots anyway.
regards,
Christian