Looking for the latest SDMA firmware for the IMX6UL. I have 3.3
That´s is the latest version of SDMA.
Unless I am mistaken, page https://community.nxp.com/docs/DOC-343277 tells us i.MX 6UltraLite EVK is supported by L4.14.98_2.0.0_ga_images_MX6UL7D.zip and downloading https://www.nxp.com/webapp/Download?colCode=L4.14.98_2.0.0_MX6UL7D leads to file L4.14.98_2.0.0_ga_images_MX6UL7D.zip which contains fsl-image-validation-imx-imx6ul7d.tar.bz2 which contains ./lib/firmware/imx/sdma/sdma-imx6q.bin
That sdma-imx6q.bin begins with:
0000000 4453 414d 0003 0000 0004 0000 001c 0000
which means the magic "SDMA" and version 3.4Where can I find sdma-imx6q.bin.ihex for such version, i.e. imx6ul "validated" for L4.14.98?
The latest RAM firmware for SDMA is available here:
sdma\imx - kernel/git/firmware/linux-firmware.git - Repository of firmware blobs for use with the Linux kernel
If you really need an Intel hex file (at least for modern kernels, the binary version is required), you may try objcopy:
objcopy -I binary -O ihex sdma-imx6q.bin sdma-imx6q.bin.ihex
I've never tried this, so there's no guarantee.
On i.MX6UL/ULL, the ROM firmware is quite up to date. Usually there's no reason, to use the RAM firmware. Additionally there was at least one bug related to SDMA firmware loading (), so you may prefer using the ROM firmware unless you need support for peripherals which are only implemented in the RAM firmware.
 kernel/git/torvalds/linux.git - Linux kernel source tree
The problem is that sdma-imx6q.bin\sdma\imx - kernel/git/firmware/linux-firmware.git - Repository of firmware blobs for use with the Linux k… begins with the hexadecimal: 53 44 4d 41 03 00 00 00 05 00 00 00so it is clearly version 3.5 - while the version 3.4 has been used in image-validation-imx-imx6ul , so officially validated.
Considering the big amount of differences in between https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/drivers/dma/imx-sdma.c and the file imx-sdma.c provided by NXP in imx_4.14.98_2.0.0_ga (at https://coral.googlesource.com/linux-imx/+/refs/heads/imx_4.14.98_2.0.0_ga/drivers/dma/imx-sdma.c ) , it is difficult to know what is the best version (not knowing what has changed).
Considering that when booting the imx_4.14.98_2.0.0_ga kernel without loading sdma-imx6q.bin, it displays:
[ 3.243530] imx-sdma 20ec000.sdma: Falling back to user helper
[ 64.503169] imx-sdma 20ec000.sdma: external firmware not found, using ROM firmware
and then a simple:stty 115200 < /dev/ttymxc2
[ 211.006328] imx-sdma 20ec000.sdma: sdma firmware not ready![ 211.015445] imx-uart 21ec000.serial: Prepare for the RX slave dma failed![ 211.022319] [ 211.022343] ======================================================[ 211.022359] WARNING: possible circular locking dependency detected[ 211.022370] 4.14.98 #2 Not tainted[ 211.022385] ------------------------------------------------------
It looks like sdma-imx6q.bin is needed on that NXP Linux version even for iMX61ul - if you at least want another serial port...
Loading sdma-imx6q.bin version 3.4 seem to at least solve that locking detection.
in contrast to what NXP officially supports, I have not interest in using ancient kernels. I simply see no value to develop a new product based on software which is several years old. Additionally I had to develop several own drivers for USB-C, PTP, sensors, ... Using an antique kernel would cost much more effort because many things are missing there.
Currently I use linux-5.4 on a i.MX6ULL which works fine even without a RAM firmware. The ROM firmware is fine for UART and mostly for SPI. The RAM firmware contains additional code for SPDIF, (Q)SPI and (E)SAI. In case of SPI code I query whether the fixes in the RAM routines introduce new bugs not present in the ROM code.
Retrieving data ...