Hi Eric,
On 3/6/13 3:48 PM, Eric Bénard wrote:
Hi John,
Le Wed, 06 Mar 2013 09:06:36 -0600,
John Weber <[email protected]> a écrit :
I'm attempting to configure Linux to load firmware for a Broadcom SDIO Wifi chip
(BCM4329) onto an i.MX6-based board.
Here is my main question - How is firmware supposed to be loaded within the
paradigm of a Yocto/Poky-built system? Any insight and guidance is appreciated.
What I've done so far, and what I've discovered:
I've incorporated the driver into the kernel (backported from an upstream kernel
rev), and removed the staging drivers present in 3.0.35. It is built-in at the
moment (not a module) and this is the error that I'm getting when it times-out
loading firmware:
brcmfmac: brcmf_sdbrcm_download_code_file: Fail to request firmware -2
brcmfmac: _brcmf_sdbrcm_download_firmware: dongle image file download failed
brcmfmac: brcmf_bus_start: brcmf_sdbrcm_bus_init failed -1
The error code indicates that it cannot load firmware because it can't find the
firmware file.
I've taken care to put the firmware in /lib/firmware/brcm (2 files). The driver
hardcodes a relative path filename to the firmware files and I've made sure that
they are the same.
I've researched the firmware request process for the kernel. My understanding
is that the process looks like this:
1) driver requests firmware file
2) kernel opens up a special set of files in sysfs (/sys/class/firmware/xxx
where xxx is the device name)
3) kernel signals udev to load firmware, giving it the filename and the device
name
4) udev, through its rules, locates the firmware file for the device and writes
it to the special file in sysfs
if the driver is in the kernel it may not have the ability to require
the firmware from the file system as the file system may not yet be
mounted which can explain why you get the timeout.
You can check if you are in that case if you get the timeout log
before getting the log saying the filesystem is mounted.
To workaround that, you can integrate the firmware in the kernel image
by setting CONFIG_EXTRA_FIRMWARE="path/to/your/firmware" in the kernel
config, so that your driver can get its firmware (or you can compile
your driver as a module and load it after the file system is mounted).
Eric
Thanks for the help. I've since broken the driver out of the kernel and
modprobed it with the same results. This allows me to start udevadm to see some
debug output from udev, but it still fails. I've manually created a firmware
helper script as well, and that's not even being executed at the moment.
It just seems like this kind of thing is already being done as the i.MX6 vpu
firmware is needed (not being loaded into the filesystem now, but that is a
different issue), as well as other machines use atheros wifi modules. This
seems that I'm missing something.
John
_______________________________________________
meta-freescale mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/meta-freescale