Yocto, how to integrate FW in kernel

It would be nice to integrate SDMA FW in zImage, so that SDMA driver could be compiled as ‘y’ and not as a module ‘m’ and be available earlier at boot time than modules are loaded from rootfs. Easy to do compiling standalone kernel, but how to let Yocto see FW when it bitbakes kernel?

Just for test if it works, compiling cfg80211 as ‘y’ nees two FW files. Having firmware folder in the same folder as kernel .config, it could be as simple as this.

CONFIG_EXTRA_FIRMWARE="regulatory.db regulatory.db.p7s"
CONFIG_EXTRA_FIRMWARE_DIR="firmware"

Is there right way to let kernel recipe reusing Yocto provided firmware recipes? I’ve no idea how. Thanks

Hi @Edward !

Sorry for the delay.

Allow us some more time to research it and get back to you.

In the meantime, could you please explain a bit more about your use case? From your message, seems like it is a “nice to have”, but would be nice to know more about why you need it and what are the impacts for you.

Best regards,

Hi @henrique.tx

No, or small impacts on not having it. But if kernel allows integrating some critical FW X in kernel, then Yocto, which is assumed being nice, universal, etc etc, should be able to allow integrating X in kernel(, allowing for example to have smaller recovery initrd image), leaving all required X-licenses on rootfs and eliminating X from rootfs. I fear this would require special phyton scripts, which is quite the same like modifying Yocto. I understand I should better ask on some Yocto mailing list, but due to numerous places to participate, I’ll better ignore that question. Big thanks if someone finds answer to this question.

Regards!

Update: Looks like it is much simpler than I thought. Every Linux desktop distro comes with linux-firmware, which includes sdma*.bin files. The only risk with them is they may be of another version than kernel driver expects. But Yocto provides its own FW version, which should be intact. So it’s quite simple to fill CONFIG_EXTRA_FIRMWARE= with file paths relative to /lib/firmware, like “imx/sdma/sdma-6q.bin”, and set CONFIG_EXTRA_FIRMWARE_DIR to default “/lib/firmware”. Yocto builds well. Kernel ‘y’ drivers find FW in kernel attached blobs.
Sorry for noise.