2014-06-29 17:23:12

by John Talbut

[permalink] [raw]
Subject: Firmware loading with static kernel and initramfs

There seems to be a general problem when using a static kernel and
initramfs in that the wireless drivers try to load firmware before the
disks are mounted and the /lib/firmware folder is available. Various
people seem to have come across problems with firmware not loading, some
of which seem to relate to this problem, which they have approached as
if it is a problem with their particular driver. However it seems to be
a general problem and I have had it with three different drivers.

There seems to be a number of possible approaches to this: loading the
firmware in an initramfs; changing the sequence in which wireless
drivers start so that they wait until the disks are mounted; compiling
the firmware into the kernel and loading the firmware as part of ifup.
I see that the latter has been done for one driver
(http://thread.gmane.org/gmane.linux.kernel.wireless.general/3390).

What is the current situation with this problem and what needs doing?


2014-06-30 09:08:44

by John Talbut

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs



On 30/06/14 09:22, Arend van Spriel wrote:
> On 30-06-14 07:09, John Talbut wrote:
>> On 29/06/14 23:11, Larry Finger wrote:
>>> On 06/29/2014 02:19 PM, John Talbut wrote:
>>>> I originally had the problem with a Broadcom BCM43225 wireless. This
>>>> was with a
>>>> 3.8 kernel. This was solved by a patch to the kernel brcmsmac driver
>>>> and this
>>>> is still working with a 3.14 kernel.
>>>
>>> What sort of patch was that? Driver brcmsmac is still using
>>> request_firmware().
>>
>> I believe it was this patch:
>> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c?id=25b5632fb35ca61b8ae3eee235edcdc2883f7a5e
>
> Correct. IFF_UP was recommended event to consider user-space ready to
> handle request_firmware. However, this may not work for drivers that
> initialize the wiphy information based on info retrieved from firmware.
>
> Regards,
> Arend
>
The command, based on your suggestion, Arend, for the Broadcom wireless,:
echo 0000:01:00.1 > /sys/bus/pci/drivers/iwlwifi/bind
brings up the Intel wireless.

Regards
John

>>>
>>>> Currently I have the problem with an Intel Centrino Wireless-N 130.
>>>> The problem
>>>> was present with a 3.11 kernel and currently with a 3.14 kernel. udev
>>>> version
>>>> 204-5linuxmint.
>>>
>>> The current Intel drivers all use request_firmware_nowait(), but I'm not
>>> sure when they were changed.
>>>
>>>> A friend seems to have the problem with a Realtek 8129se wireless but
>>>> we are
>>>> still checking out that this is the problem.
>>>
>>> To my knowledge, there is no Realtek 8129se driver. Do you mean
>>> rtl8192se? If so, that one has used request_firmware_nowait() for some
>>> time.
>>
>> Yes, the rtl8192se driver.
>>
>> John
>> --
>> To unsubscribe from this list: send the line "unsubscribe
>> linux-wireless" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>

2014-06-30 05:16:07

by John Talbut

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs

On 29/06/14 23:11, Larry Finger wrote:
> On 06/29/2014 02:19 PM, John Talbut wrote:
>> I originally had the problem with a Broadcom BCM43225 wireless. This
>> was with a
>> 3.8 kernel. This was solved by a patch to the kernel brcmsmac driver
>> and this
>> is still working with a 3.14 kernel.
>
> What sort of patch was that? Driver brcmsmac is still using
> request_firmware().

I believe it was this patch:
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c?id=25b5632fb35ca61b8ae3eee235edcdc2883f7a5e
>
>> Currently I have the problem with an Intel Centrino Wireless-N 130.
>> The problem
>> was present with a 3.11 kernel and currently with a 3.14 kernel. udev
>> version
>> 204-5linuxmint.
>
> The current Intel drivers all use request_firmware_nowait(), but I'm not
> sure when they were changed.
>
>> A friend seems to have the problem with a Realtek 8129se wireless but
>> we are
>> still checking out that this is the problem.
>
> To my knowledge, there is no Realtek 8129se driver. Do you mean
> rtl8192se? If so, that one has used request_firmware_nowait() for some
> time.

Yes, the rtl8192se driver.

John

2014-06-30 08:22:15

by Arend van Spriel

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs

On 30-06-14 07:09, John Talbut wrote:
> On 29/06/14 23:11, Larry Finger wrote:
>> On 06/29/2014 02:19 PM, John Talbut wrote:
>>> I originally had the problem with a Broadcom BCM43225 wireless. This
>>> was with a
>>> 3.8 kernel. This was solved by a patch to the kernel brcmsmac driver
>>> and this
>>> is still working with a 3.14 kernel.
>>
>> What sort of patch was that? Driver brcmsmac is still using
>> request_firmware().
>
> I believe it was this patch:
> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c?id=25b5632fb35ca61b8ae3eee235edcdc2883f7a5e

Correct. IFF_UP was recommended event to consider user-space ready to
handle request_firmware. However, this may not work for drivers that
initialize the wiphy information based on info retrieved from firmware.

Regards,
Arend

>>
>>> Currently I have the problem with an Intel Centrino Wireless-N 130.
>>> The problem
>>> was present with a 3.11 kernel and currently with a 3.14 kernel. udev
>>> version
>>> 204-5linuxmint.
>>
>> The current Intel drivers all use request_firmware_nowait(), but I'm not
>> sure when they were changed.
>>
>>> A friend seems to have the problem with a Realtek 8129se wireless but
>>> we are
>>> still checking out that this is the problem.
>>
>> To my knowledge, there is no Realtek 8129se driver. Do you mean
>> rtl8192se? If so, that one has used request_firmware_nowait() for some
>> time.
>
> Yes, the rtl8192se driver.
>
> John
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html


2014-06-29 19:19:05

by John Talbut

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs



On 29/06/14 19:31, Larry Finger wrote:
> On 06/29/2014 12:15 PM, John Talbut wrote:
>> There seems to be a general problem when using a static kernel and
>> initramfs in
>> that the wireless drivers try to load firmware before the disks are
>> mounted and
>> the /lib/firmware folder is available. Various people seem to have
>> come across
>> problems with firmware not loading, some of which seem to relate to this
>> problem, which they have approached as if it is a problem with their
>> particular
>> driver. However it seems to be a general problem and I have had it
>> with three
>> different drivers.
>>
>> There seems to be a number of possible approaches to this: loading the
>> firmware
>> in an initramfs; changing the sequence in which wireless drivers start
>> so that
>> they wait until the disks are mounted; compiling the firmware into the
>> kernel
>> and loading the firmware as part of ifup. I see that the latter has
>> been done
>> for one driver
>> (http://thread.gmane.org/gmane.linux.kernel.wireless.general/3390).
>>
>> What is the current situation with this problem and what needs doing?
>> --
>> To unsubscribe from this list: send the line "unsubscribe
>> linux-wireless" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
> What kernel version, and what wireless drivers have this problem?
>
> At one point, there was a timeout of 30 seconds for request_firmware()
> calls, and that led to problems even when the drivers were built as
> modules. That situation was handled in a number of wireless drivers by
> using request_firmware_nowait(); however, my understanding was that user
> space was fixed to avoid the timeout. I think udev was the component
> that changed. What version of that are you using?
>
> Larry
>
I originally had the problem with a Broadcom BCM43225 wireless. This
was with a 3.8 kernel. This was solved by a patch to the kernel
brcmsmac driver and this is still working with a 3.14 kernel.

Currently I have the problem with an Intel Centrino Wireless-N 130. The
problem was present with a 3.11 kernel and currently with a 3.14 kernel.
udev version 204-5linuxmint.

A friend seems to have the problem with a Realtek 8129se wireless but we
are still checking out that this is the problem.

John

2014-06-29 22:11:17

by Larry Finger

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs

On 06/29/2014 02:19 PM, John Talbut wrote:
> I originally had the problem with a Broadcom BCM43225 wireless. This was with a
> 3.8 kernel. This was solved by a patch to the kernel brcmsmac driver and this
> is still working with a 3.14 kernel.

What sort of patch was that? Driver brcmsmac is still using request_firmware().

> Currently I have the problem with an Intel Centrino Wireless-N 130. The problem
> was present with a 3.11 kernel and currently with a 3.14 kernel. udev version
> 204-5linuxmint.

The current Intel drivers all use request_firmware_nowait(), but I'm not sure
when they were changed.

> A friend seems to have the problem with a Realtek 8129se wireless but we are
> still checking out that this is the problem.

To my knowledge, there is no Realtek 8129se driver. Do you mean rtl8192se? If
so, that one has used request_firmware_nowait() for some time.

Larry


2014-06-29 18:31:11

by Larry Finger

[permalink] [raw]
Subject: Re: Firmware loading with static kernel and initramfs

On 06/29/2014 12:15 PM, John Talbut wrote:
> There seems to be a general problem when using a static kernel and initramfs in
> that the wireless drivers try to load firmware before the disks are mounted and
> the /lib/firmware folder is available. Various people seem to have come across
> problems with firmware not loading, some of which seem to relate to this
> problem, which they have approached as if it is a problem with their particular
> driver. However it seems to be a general problem and I have had it with three
> different drivers.
>
> There seems to be a number of possible approaches to this: loading the firmware
> in an initramfs; changing the sequence in which wireless drivers start so that
> they wait until the disks are mounted; compiling the firmware into the kernel
> and loading the firmware as part of ifup. I see that the latter has been done
> for one driver (http://thread.gmane.org/gmane.linux.kernel.wireless.general/3390).
>
> What is the current situation with this problem and what needs doing?
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

What kernel version, and what wireless drivers have this problem?

At one point, there was a timeout of 30 seconds for request_firmware() calls,
and that led to problems even when the drivers were built as modules. That
situation was handled in a number of wireless drivers by using
request_firmware_nowait(); however, my understanding was that user space was
fixed to avoid the timeout. I think udev was the component that changed. What
version of that are you using?

Larry