All of lore.kernel.org
 help / color / mirror / Atom feed
* 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
@ 2009-01-07 14:24 Alessandro Suardi
  2009-01-08  4:03 ` Alessandro Suardi
  2009-01-08  6:12 ` Jaswinder Singh Rajput
  0 siblings, 2 replies; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-07 14:24 UTC (permalink / raw)
  To: LKML

>From dmesg:

[asuardi@sandman src]$ dmesg | grep tg3
tg3.c:v3.97 (December 10, 2008)
tg3 0000:02:00.0: PCI INT A -> Link[LNKA] -> GSI 11 (level, low) -> IRQ 11
tg3 0000:02:00.0: setting latency timer to 64
tg3 0000:02:00.0: wake-up capability disabled by ACPI
tg3 0000:02:00.0: PME# disabled
tg3 0000:02:00.0: firmware: requesting tigon/tg3_tso.bin
tg3: Failed to load firmware "tigon/tg3_tso.bin"
tg3 0000:02:00.0: PCI INT A disabled
tg3: probe of 0000:02:00.0 failed with error -2


But /lib/firmware/tigon/tg3_tso.bin is actually present:

[asuardi@sandman src]$ ls -l /lib/firmware/tigon/tg3_tso.bin
-rw-r--r-- 1 root root 7004 2009-01-06 22:58 /lib/firmware/tigon/tg3_tso.bin



Diffing the .configs one can see CONFIG_KMOD disappeared; and
 the output of the kernel build in -git8 also has the IHEX parts about
 tg3 firmware which are new (I don't recall seeing those in the last
 1000 builds or so ;)

[asuardi@sandman src]$ diff .config-2.6.28-git[78]
3,4c3,4
< # Linux kernel version: 2.6.28-git7
< # Mon Jan  5 17:34:11 2009
---
> # Linux kernel version: 2.6.28-git8
> # Tue Jan  6 22:06:19 2009
133d132
< CONFIG_KMOD=y
1324a1324
> # CONFIG_TWL4030_CORE is not set
1591d1590
< CONFIG_HID_BRIGHT=y
1595d1593
< CONFIG_HID_DELL=y
1602a1601
> CONFIG_HID_NTRIG=y
1608a1608,1609
> # CONFIG_GREENASIA_FF is not set
> CONFIG_HID_TOPSEED=y
1821c1822
< # CONFIG_OCFS2_COMPAT_JBD is not set
---
> CONFIG_OCFS2_FS_POSIX_ACL=y
1825c1826,1832
< # CONFIG_QUOTA is not set
---
> CONFIG_QUOTA=y
> CONFIG_QUOTA_NETLINK_INTERFACE=y
> # CONFIG_PRINT_QUOTA_WARNING is not set
> CONFIG_QUOTA_TREE=y
> # CONFIG_QFMT_V1 is not set
> CONFIG_QFMT_V2=y
> CONFIG_QUOTACTL=y



[asuardi@sandman src]$ diff /tmp/make-kernel-2.6.28-git[78].out
669a670
>   CC [M]  fs/ocfs2/blockcheck.o
692a694,695
>   CC [M]  fs/ocfs2/quota_local.o
>   CC [M]  fs/ocfs2/quota_global.o
693a697
>   CC [M]  fs/ocfs2/acl.o
810a815,818
>   CC      fs/dquot.o
>   CC      fs/quota_v2.o
>   CC      fs/quota_tree.o
>   CC      fs/quota.o
1045c1053
< /share/src/linux-2.6.28-git7/arch/x86/include/asm/string_32.h:75:
warning: array subscript is above array bounds
---
> /share/src/linux-2.6.28-git8/arch/x86/include/asm/string_32.h:75: warning: array subscript is above array bounds
1286d1293
<   CC      drivers/hid/hid-bright.o
1290d1296
<   CC      drivers/hid/hid-dell.o
1295a1302
>   CC      drivers/hid/hid-ntrig.o
1300a1308
>   CC      drivers/hid/hid-topseed.o
1521c1529
< /share/src/linux-2.6.28-git7/arch/x86/include/asm/string_32.h:75:
warning: array subscript is above array bounds
---
> /share/src/linux-2.6.28-git8/arch/x86/include/asm/string_32.h:75: warning: array subscript is above array bounds
1983d1990
< net/rfkill/rfkill.c:59: warning: 'rfkill_led_trigger' defined but not used
2234,2235c2241,2242
< System is 2000 kB
< CRC 8dd05de2
---
> System is 2013 kB
> CRC 37411210
2646a2654,2656
>   IHEX    firmware/tigon/tg3.bin
>   IHEX    firmware/tigon/tg3_tso.bin
>   IHEX    firmware/tigon/tg3_tso5.bin


So which is it, whatever the IHEX part did or the disappearance of
 CONFIG_KMOD (which is in the -git8 patch, indeed) to cause
 this issue ?

Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
 the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.


thanks in advance, ciao,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-07 14:24 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok) Alessandro Suardi
@ 2009-01-08  4:03 ` Alessandro Suardi
  2009-01-08  6:12 ` Jaswinder Singh Rajput
  1 sibling, 0 replies; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-08  4:03 UTC (permalink / raw)
  To: LKML; +Cc: Netdev

On Wed, Jan 7, 2009 at 3:24 PM, Alessandro Suardi
<alessandro.suardi@gmail.com> wrote:
> From dmesg:
>
> [asuardi@sandman src]$ dmesg | grep tg3
> tg3.c:v3.97 (December 10, 2008)
> tg3 0000:02:00.0: PCI INT A -> Link[LNKA] -> GSI 11 (level, low) -> IRQ 11
> tg3 0000:02:00.0: setting latency timer to 64
> tg3 0000:02:00.0: wake-up capability disabled by ACPI
> tg3 0000:02:00.0: PME# disabled
> tg3 0000:02:00.0: firmware: requesting tigon/tg3_tso.bin
> tg3: Failed to load firmware "tigon/tg3_tso.bin"
> tg3 0000:02:00.0: PCI INT A disabled
> tg3: probe of 0000:02:00.0 failed with error -2
>
>
> But /lib/firmware/tigon/tg3_tso.bin is actually present:
>
> [asuardi@sandman src]$ ls -l /lib/firmware/tigon/tg3_tso.bin
> -rw-r--r-- 1 root root 7004 2009-01-06 22:58 /lib/firmware/tigon/tg3_tso.bin
>
>
>
> Diffing the .configs one can see CONFIG_KMOD disappeared; and
>  the output of the kernel build in -git8 also has the IHEX parts about
>  tg3 firmware which are new (I don't recall seeing those in the last
>  1000 builds or so ;)
>
> [asuardi@sandman src]$ diff .config-2.6.28-git[78]
> 3,4c3,4
> < # Linux kernel version: 2.6.28-git7
> < # Mon Jan  5 17:34:11 2009
> ---
>> # Linux kernel version: 2.6.28-git8
>> # Tue Jan  6 22:06:19 2009
> 133d132
> < CONFIG_KMOD=y
> 1324a1324
>> # CONFIG_TWL4030_CORE is not set
> 1591d1590
> < CONFIG_HID_BRIGHT=y
> 1595d1593
> < CONFIG_HID_DELL=y
> 1602a1601
>> CONFIG_HID_NTRIG=y
> 1608a1608,1609
>> # CONFIG_GREENASIA_FF is not set
>> CONFIG_HID_TOPSEED=y
> 1821c1822
> < # CONFIG_OCFS2_COMPAT_JBD is not set
> ---
>> CONFIG_OCFS2_FS_POSIX_ACL=y
> 1825c1826,1832
> < # CONFIG_QUOTA is not set
> ---
>> CONFIG_QUOTA=y
>> CONFIG_QUOTA_NETLINK_INTERFACE=y
>> # CONFIG_PRINT_QUOTA_WARNING is not set
>> CONFIG_QUOTA_TREE=y
>> # CONFIG_QFMT_V1 is not set
>> CONFIG_QFMT_V2=y
>> CONFIG_QUOTACTL=y
>
>
>
> [asuardi@sandman src]$ diff /tmp/make-kernel-2.6.28-git[78].out
> 669a670
>>   CC [M]  fs/ocfs2/blockcheck.o
> 692a694,695
>>   CC [M]  fs/ocfs2/quota_local.o
>>   CC [M]  fs/ocfs2/quota_global.o
> 693a697
>>   CC [M]  fs/ocfs2/acl.o
> 810a815,818
>>   CC      fs/dquot.o
>>   CC      fs/quota_v2.o
>>   CC      fs/quota_tree.o
>>   CC      fs/quota.o
> 1045c1053
> < /share/src/linux-2.6.28-git7/arch/x86/include/asm/string_32.h:75:
> warning: array subscript is above array bounds
> ---
>> /share/src/linux-2.6.28-git8/arch/x86/include/asm/string_32.h:75: warning: array subscript is above array bounds
> 1286d1293
> <   CC      drivers/hid/hid-bright.o
> 1290d1296
> <   CC      drivers/hid/hid-dell.o
> 1295a1302
>>   CC      drivers/hid/hid-ntrig.o
> 1300a1308
>>   CC      drivers/hid/hid-topseed.o
> 1521c1529
> < /share/src/linux-2.6.28-git7/arch/x86/include/asm/string_32.h:75:
> warning: array subscript is above array bounds
> ---
>> /share/src/linux-2.6.28-git8/arch/x86/include/asm/string_32.h:75: warning: array subscript is above array bounds
> 1983d1990
> < net/rfkill/rfkill.c:59: warning: 'rfkill_led_trigger' defined but not used
> 2234,2235c2241,2242
> < System is 2000 kB
> < CRC 8dd05de2
> ---
>> System is 2013 kB
>> CRC 37411210
> 2646a2654,2656
>>   IHEX    firmware/tigon/tg3.bin
>>   IHEX    firmware/tigon/tg3_tso.bin
>>   IHEX    firmware/tigon/tg3_tso5.bin
>
>
> So which is it, whatever the IHEX part did or the disappearance of
>  CONFIG_KMOD (which is in the -git8 patch, indeed) to cause
>  this issue ?
>
> Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
>  the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.
>
>
> thanks in advance, ciao,

Still broken in -git10, cc'ing netdev... h/w is the onboard
 Gigabit ethernet on my Dell Latitude D610, that is

02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751
Gigabit Ethernet PCI Express (rev 01)

thanks,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-07 14:24 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok) Alessandro Suardi
  2009-01-08  4:03 ` Alessandro Suardi
@ 2009-01-08  6:12 ` Jaswinder Singh Rajput
  2009-01-08 20:33   ` Alessandro Suardi
  1 sibling, 1 reply; 36+ messages in thread
From: Jaswinder Singh Rajput @ 2009-01-08  6:12 UTC (permalink / raw)
  To: Alessandro Suardi; +Cc: LKML, netdev, David Woodhouse

Hello alessandro,

On Wed, Jan 7, 2009 at 7:54 PM, Alessandro Suardi
<alessandro.suardi@gmail.com> wrote:
>
> Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
>  the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.
>

Please try with CONFIG_FIRMWARE_IN_KERNEL , is this makes some difference.

--
JSR

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-08  6:12 ` Jaswinder Singh Rajput
@ 2009-01-08 20:33   ` Alessandro Suardi
  2009-01-08 20:53     ` David Miller
  0 siblings, 1 reply; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-08 20:33 UTC (permalink / raw)
  To: Jaswinder Singh Rajput; +Cc: LKML, netdev, David Woodhouse

On Thu, Jan 8, 2009 at 7:12 AM, Jaswinder Singh Rajput
<jaswinderlinux@gmail.com> wrote:
> Hello alessandro,
>
> On Wed, Jan 7, 2009 at 7:54 PM, Alessandro Suardi
> <alessandro.suardi@gmail.com> wrote:
>>
>> Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
>>  the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.
>>
>
> Please try with CONFIG_FIRMWARE_IN_KERNEL , is this makes some difference.

Yes it does, thank you - 2.6.28-git11 with CONFIG_FIRMWARE_IN_KERNEL
 gets my tg3 back to work on boot. Must be a requirement since -git8 then ?

Thanks again, ciao,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-08 20:33   ` Alessandro Suardi
@ 2009-01-08 20:53     ` David Miller
  2009-01-09 17:30       ` Alessandro Suardi
  0 siblings, 1 reply; 36+ messages in thread
From: David Miller @ 2009-01-08 20:53 UTC (permalink / raw)
  To: alessandro.suardi; +Cc: jaswinderlinux, linux-kernel, netdev, dwmw2

From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
Date: Thu, 8 Jan 2009 21:33:35 +0100

> On Thu, Jan 8, 2009 at 7:12 AM, Jaswinder Singh Rajput
> <jaswinderlinux@gmail.com> wrote:
> > Hello alessandro,
> >
> > On Wed, Jan 7, 2009 at 7:54 PM, Alessandro Suardi
> > <alessandro.suardi@gmail.com> wrote:
> >>
> >> Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
> >>  the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.
> >>
> >
> > Please try with CONFIG_FIRMWARE_IN_KERNEL , is this makes some difference.
> 
> Yes it does, thank you - 2.6.28-git11 with CONFIG_FIRMWARE_IN_KERNEL
>  gets my tg3 back to work on boot. Must be a requirement since -git8 then ?

It is if you don't have the tg3 firmware files in your filesystem
already.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-08 20:53     ` David Miller
@ 2009-01-09 17:30       ` Alessandro Suardi
  2009-01-09 22:04         ` David Miller
  0 siblings, 1 reply; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-09 17:30 UTC (permalink / raw)
  To: David Miller; +Cc: jaswinderlinux, linux-kernel, netdev, dwmw2

On Thu, Jan 8, 2009 at 9:53 PM, David Miller <davem@davemloft.net> wrote:
> From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
> Date: Thu, 8 Jan 2009 21:33:35 +0100
>
>> On Thu, Jan 8, 2009 at 7:12 AM, Jaswinder Singh Rajput
>> <jaswinderlinux@gmail.com> wrote:
>> > Hello alessandro,
>> >
>> > On Wed, Jan 7, 2009 at 7:54 PM, Alessandro Suardi
>> > <alessandro.suardi@gmail.com> wrote:
>> >>
>> >> Note that I don't have CONFIG_FIRMWARE_IN_KERNEL, but on
>> >>  the other hand I didn't earlier, either... and yes, CONFIG_MODULES=y.
>> >>
>> >
>> > Please try with CONFIG_FIRMWARE_IN_KERNEL , is this makes some difference.
>>
>> Yes it does, thank you - 2.6.28-git11 with CONFIG_FIRMWARE_IN_KERNEL
>>  gets my tg3 back to work on boot. Must be a requirement since -git8 then ?
>
> It is if you don't have the tg3 firmware files in your filesystem
> already.

As I mentioned in the original email to LKML about -git8, and in
 the first CC to netdev about -git10, I appear to have these files
 in /lib/firmware/tigon. I save every single .config file I used in the
 last, what, four years ?

.config-2.6.28-git10:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git11:CONFIG_FIRMWARE_IN_KERNEL=y
.config-2.6.28-git2:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git3:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git4:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git5:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git6:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git7:# CONFIG_FIRMWARE_IN_KERNEL is not set
.config-2.6.28-git8:# CONFIG_FIRMWARE_IN_KERNEL is not set

-git-2 through -git-7 work
-git8 and -git10 don't work
-git11 works

Clearly the requirement changed in -git8, AFAICS.

thanks,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-09 17:30       ` Alessandro Suardi
@ 2009-01-09 22:04         ` David Miller
  2009-01-09 22:29           ` Alessandro Suardi
  2009-01-11 11:10           ` Valdis.Kletnieks
  0 siblings, 2 replies; 36+ messages in thread
From: David Miller @ 2009-01-09 22:04 UTC (permalink / raw)
  To: alessandro.suardi; +Cc: jaswinderlinux, linux-kernel, netdev, dwmw2

From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
Date: Fri, 9 Jan 2009 18:30:40 +0100

> Clearly the requirement changed in -git8, AFAICS.

Because -git8 is where the firmware requirement got added.

If you build the TG3 driver statically into your kernel,
the only way to get the firmware properly loaded is to
enable that CONFIG_FIRMWARE_IN_KERNEL option.

Your filesystem isn't mounted when the driver initializes
in that case, therefore there is no way to get at the
firwware that might be present there.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-09 22:04         ` David Miller
@ 2009-01-09 22:29           ` Alessandro Suardi
  2009-01-11 11:10           ` Valdis.Kletnieks
  1 sibling, 0 replies; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-09 22:29 UTC (permalink / raw)
  To: David Miller; +Cc: jaswinderlinux, linux-kernel, netdev, dwmw2

On Fri, Jan 9, 2009 at 11:04 PM, David Miller <davem@davemloft.net> wrote:
> From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
> Date: Fri, 9 Jan 2009 18:30:40 +0100
>
>> Clearly the requirement changed in -git8, AFAICS.
>
> Because -git8 is where the firmware requirement got added.

OK, thanks.

> If you build the TG3 driver statically into your kernel,
> the only way to get the firmware properly loaded is to
> enable that CONFIG_FIRMWARE_IN_KERNEL option.
>
> Your filesystem isn't mounted when the driver initializes
> in that case, therefore there is no way to get at the
> firwware that might be present there.

And indeed I do build tg3 in-kernel. But since the config
 option was present previously, perhaps it would have
 been the case to change the help text for tg3 explaining
 that now a non-modular build requires an extra step ?

Or maybe kbuild allows to select FIRMWARE_IN_KERNEL
 if tg3 is built non-modular ?

My only observation is that a make oldconfig shouldn't
 change a working setup to a non-working one (though
 it already happened once to me in a couple of weeks,
 the other being I915 DRM being silently skipped as a
 consequence of becoming dependent on CONFIG_FB)
 with a new kernel patch.

Clearly, if there is no easy way to avoid such a situation,
 it's okay - LKML and the other Linux-related lists are
 always helpful.

Thanks again, ciao,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-09 22:04         ` David Miller
  2009-01-09 22:29           ` Alessandro Suardi
@ 2009-01-11 11:10           ` Valdis.Kletnieks
  2009-01-11 12:08             ` David Miller
  1 sibling, 1 reply; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-11 11:10 UTC (permalink / raw)
  To: David Miller
  Cc: alessandro.suardi, jaswinderlinux, linux-kernel, netdev, dwmw2

[-- Attachment #1: Type: text/plain, Size: 561 bytes --]

On Fri, 09 Jan 2009 14:04:22 PST, David Miller said:
> From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
> Date: Fri, 9 Jan 2009 18:30:40 +0100
> 
> > Clearly the requirement changed in -git8, AFAICS.
> 
> Because -git8 is where the firmware requirement got added.
> 
> If you build the TG3 driver statically into your kernel,
> the only way to get the firmware properly loaded is to
> enable that CONFIG_FIRMWARE_IN_KERNEL option.

Maybe this is one of those cases where we actually do want a SELECT?

	select FIRMWARE_IN_KERNEL if TIGON3=y

or similar?

[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 11:10           ` Valdis.Kletnieks
@ 2009-01-11 12:08             ` David Miller
  2009-01-11 12:24               ` David Woodhouse
  0 siblings, 1 reply; 36+ messages in thread
From: David Miller @ 2009-01-11 12:08 UTC (permalink / raw)
  To: Valdis.Kletnieks
  Cc: alessandro.suardi, jaswinderlinux, linux-kernel, netdev, dwmw2

From: Valdis.Kletnieks@vt.edu
Date: Sun, 11 Jan 2009 06:10:58 -0500

> On Fri, 09 Jan 2009 14:04:22 PST, David Miller said:
> > From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
> > Date: Fri, 9 Jan 2009 18:30:40 +0100
> > 
> > > Clearly the requirement changed in -git8, AFAICS.
> > 
> > Because -git8 is where the firmware requirement got added.
> > 
> > If you build the TG3 driver statically into your kernel,
> > the only way to get the firmware properly loaded is to
> > enable that CONFIG_FIRMWARE_IN_KERNEL option.
> 
> Maybe this is one of those cases where we actually do want a SELECT?
> 
> 	select FIRMWARE_IN_KERNEL if TIGON3=y
> 
> or similar?

I have no idea how this is intended to work, David will
know.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:08             ` David Miller
@ 2009-01-11 12:24               ` David Woodhouse
  2009-01-11 12:59                 ` David Woodhouse
  2009-01-11 21:39                 ` David Miller
  0 siblings, 2 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 12:24 UTC (permalink / raw)
  To: David Miller
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, 2009-01-11 at 04:08 -0800, David Miller wrote:
> From: Valdis.Kletnieks@vt.edu
> Date: Sun, 11 Jan 2009 06:10:58 -0500
> 
> > On Fri, 09 Jan 2009 14:04:22 PST, David Miller said:
> > > From: "Alessandro Suardi" <alessandro.suardi@gmail.com>
> > > Date: Fri, 9 Jan 2009 18:30:40 +0100
> > > 
> > > > Clearly the requirement changed in -git8, AFAICS.
> > > 
> > > Because -git8 is where the firmware requirement got added.
> > > 
> > > If you build the TG3 driver statically into your kernel,
> > > the only way to get the firmware properly loaded is to
> > > enable that CONFIG_FIRMWARE_IN_KERNEL option.
> > 
> > Maybe this is one of those cases where we actually do want a SELECT?
> > 
> > 	select FIRMWARE_IN_KERNEL if TIGON3=y
> > 
> > or similar?
> 
> I have no idea how this is intended to work, David will know.

Actually, I think the real issue here might be that the tg3 driver is
now behaving _differently_ to how other modern drivers work. It tries to
obtain the firmware once at initialisation time and if that fails it
doesn't register the device.

Other drivers will load the firmware later, at the time the device is
brought up. This means that even if you build the driver into the kernel
without its firmware, it can still request the firmware later, when you
try to start _using_ it. And when the file system is available.

I'll take a look and see if I can remedy that. Then we wouldn't _need_
the FIRMWARE_IN_KERNEL option.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:24               ` David Woodhouse
@ 2009-01-11 12:59                 ` David Woodhouse
  2009-01-11 16:42                   ` Alessandro Suardi
                                     ` (3 more replies)
  2009-01-11 21:39                 ` David Miller
  1 sibling, 4 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 12:59 UTC (permalink / raw)
  To: David Miller
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, 2009-01-11 at 12:25 +0000, David Woodhouse wrote:
> I'll take a look and see if I can remedy that. Then we wouldn't _need_
> the FIRMWARE_IN_KERNEL option.

How about this? If it fails to load the firmware from userspace during
the initialisation, it'll try again later in tg3_open(). 

I _think_ that's fine, because we don't do anything else in the early
initialisation which requires the firmware to be loaded.

So if you build with CONFIG_TIGON3=y, CONFIG_FIRMWARE_IN_KERNEL=n, you
should see it fail to load the firmware at boot, but then it should load
it successfully when you bring the device up.

Untested-but-otherwise-Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 5e2dbae..f99218c 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -7535,11 +7535,45 @@ static int tg3_test_msi(struct tg3 *tp)
 	return err;
 }
 
+static int tg3_request_firmware(struct tg3 *tp)
+{
+	const __be32 *fw_data;
+
+	if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
+		printk(KERN_ERR "tg3: Failed to load firmware \"%s\"\n",
+		       tp->fw_needed);
+		return -ENOENT;
+	}
+
+	fw_data = (void *)tp->fw->data;
+
+	/* Firmware blob starts with version numbers, followed by
+	   start address and _full_ length including BSS sections
+	   (which must be longer than the actual data, of course */
+
+	tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
+	if (tp->fw_len < (tp->fw->size - 12)) {
+		printk(KERN_ERR "tg3: bogus length %d in \"%s\"\n",
+		       tp->fw_len, tp->fw_needed);
+		return -EINVAL;
+	}
+
+	/* We no longer need firmware; we have it. */
+	tp->fw_needed = NULL;
+	return 0;
+}
+
 static int tg3_open(struct net_device *dev)
 {
 	struct tg3 *tp = netdev_priv(dev);
 	int err;
 
+	if (tp->fw_needed) {
+		err = tg3_request_firmware(tp);
+		if (err)
+			return err;
+	}
+
 	netif_carrier_off(tp->dev);
 
 	err = tg3_set_power_state(tp, PCI_D0);
@@ -12934,7 +12968,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
 	struct net_device *dev;
 	struct tg3 *tp;
 	int err, pm_cap;
-	const char *fw_name = NULL;
 	char str[40];
 	u64 dma_mask, persist_dma_mask;
 
@@ -13091,7 +13124,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
 	tg3_init_bufmgr_config(tp);
 
 	if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
-		fw_name = FIRMWARE_TG3;
+		tp->fw_needed = FIRMWARE_TG3;
 
 	if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
 		tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
@@ -13107,34 +13140,19 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
 	}
 	if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
 		if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
-			fw_name = FIRMWARE_TG3TSO5;
+			tp->fw_needed = FIRMWARE_TG3TSO5;
 		else
-			fw_name = FIRMWARE_TG3TSO;
+			tp->fw_needed = FIRMWARE_TG3TSO;
 	}
 
-	if (fw_name) {
-		const __be32 *fw_data;
-
-		err = request_firmware(&tp->fw, fw_name, &tp->pdev->dev);
-		if (err) {
-			printk(KERN_ERR "tg3: Failed to load firmware \"%s\"\n",
-			       fw_name);
-			goto err_out_iounmap;
-		}
-
-		fw_data = (void *)tp->fw->data;
-
-		/* Firmware blob starts with version numbers, followed by
-		   start address and _full_ length including BSS sections
-		   (which must be longer than the actual data, of course */
-
-		tp->fw_len = be32_to_cpu(fw_data[2]);	/* includes bss */
-		if (tp->fw_len < (tp->fw->size - 12)) {
-			printk(KERN_ERR "tg3: bogus length %d in \"%s\"\n",
-			       tp->fw_len, fw_name);
-			err = -EINVAL;
+	if (tp->fw_needed) {
+		err = tg3_request_firmware(tp);
+		/* Failure to load firmware at this stage is not fatal; we'll
+		   try again in tg3_open(). So if you have the driver built
+		   into the kernel, you can still get the firmware loaded
+		   after userspace is running, when the device comes up. */
+		if (err != -ENOENT)
 			goto err_out_fw;
-		}
 	}
 
 	/* TSO is on by default on chips that support hardware TSO.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:59                 ` David Woodhouse
@ 2009-01-11 16:42                   ` Alessandro Suardi
  2009-01-11 16:53                     ` David Woodhouse
  2009-01-11 16:48                   ` Valdis.Kletnieks
                                     ` (2 subsequent siblings)
  3 siblings, 1 reply; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-11 16:42 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, Valdis.Kletnieks, jaswinderlinux, linux-kernel, netdev

On Sun, Jan 11, 2009 at 1:59 PM, David Woodhouse <dwmw2@infradead.org> wrote:
> On Sun, 2009-01-11 at 12:25 +0000, David Woodhouse wrote:
>> I'll take a look and see if I can remedy that. Then we wouldn't _need_
>> the FIRMWARE_IN_KERNEL option.
>
> How about this? If it fails to load the firmware from userspace during
> the initialisation, it'll try again later in tg3_open().
>
> I _think_ that's fine, because we don't do anything else in the early
> initialisation which requires the firmware to be loaded.
>
> So if you build with CONFIG_TIGON3=y, CONFIG_FIRMWARE_IN_KERNEL=n, you
> should see it fail to load the firmware at boot, but then it should load
> it successfully when you bring the device up.
>
> Untested-but-otherwise-Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
>
> diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
> index 5e2dbae..f99218c 100644
> --- a/drivers/net/tg3.c
> +++ b/drivers/net/tg3.c
> @@ -7535,11 +7535,45 @@ static int tg3_test_msi(struct tg3 *tp)
>        return err;
>  }
>
> +static int tg3_request_firmware(struct tg3 *tp)
> +{
> +       const __be32 *fw_data;
> +
> +       if (request_firmware(&tp->fw, tp->fw_needed, &tp->pdev->dev)) {
> +               printk(KERN_ERR "tg3: Failed to load firmware \"%s\"\n",
> +                      tp->fw_needed);
> +               return -ENOENT;
> +       }
> +
> +       fw_data = (void *)tp->fw->data;
> +
> +       /* Firmware blob starts with version numbers, followed by
> +          start address and _full_ length including BSS sections
> +          (which must be longer than the actual data, of course */
> +
> +       tp->fw_len = be32_to_cpu(fw_data[2]);   /* includes bss */
> +       if (tp->fw_len < (tp->fw->size - 12)) {
> +               printk(KERN_ERR "tg3: bogus length %d in \"%s\"\n",
> +                      tp->fw_len, tp->fw_needed);
> +               return -EINVAL;
> +       }
> +
> +       /* We no longer need firmware; we have it. */
> +       tp->fw_needed = NULL;
> +       return 0;
> +}
> +
>  static int tg3_open(struct net_device *dev)
>  {
>        struct tg3 *tp = netdev_priv(dev);
>        int err;
>
> +       if (tp->fw_needed) {
> +               err = tg3_request_firmware(tp);
> +               if (err)
> +                       return err;
> +       }
> +
>        netif_carrier_off(tp->dev);
>
>        err = tg3_set_power_state(tp, PCI_D0);
> @@ -12934,7 +12968,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
>        struct net_device *dev;
>        struct tg3 *tp;
>        int err, pm_cap;
> -       const char *fw_name = NULL;
>        char str[40];
>        u64 dma_mask, persist_dma_mask;
>
> @@ -13091,7 +13124,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
>        tg3_init_bufmgr_config(tp);
>
>        if (tp->pci_chip_rev_id == CHIPREV_ID_5701_A0)
> -               fw_name = FIRMWARE_TG3;
> +               tp->fw_needed = FIRMWARE_TG3;
>
>        if (tp->tg3_flags2 & TG3_FLG2_HW_TSO) {
>                tp->tg3_flags2 |= TG3_FLG2_TSO_CAPABLE;
> @@ -13107,34 +13140,19 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
>        }
>        if (tp->tg3_flags2 & TG3_FLG2_TSO_CAPABLE) {
>                if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705)
> -                       fw_name = FIRMWARE_TG3TSO5;
> +                       tp->fw_needed = FIRMWARE_TG3TSO5;
>                else
> -                       fw_name = FIRMWARE_TG3TSO;
> +                       tp->fw_needed = FIRMWARE_TG3TSO;
>        }
>
> -       if (fw_name) {
> -               const __be32 *fw_data;
> -
> -               err = request_firmware(&tp->fw, fw_name, &tp->pdev->dev);
> -               if (err) {
> -                       printk(KERN_ERR "tg3: Failed to load firmware \"%s\"\n",
> -                              fw_name);
> -                       goto err_out_iounmap;
> -               }
> -
> -               fw_data = (void *)tp->fw->data;
> -
> -               /* Firmware blob starts with version numbers, followed by
> -                  start address and _full_ length including BSS sections
> -                  (which must be longer than the actual data, of course */
> -
> -               tp->fw_len = be32_to_cpu(fw_data[2]);   /* includes bss */
> -               if (tp->fw_len < (tp->fw->size - 12)) {
> -                       printk(KERN_ERR "tg3: bogus length %d in \"%s\"\n",
> -                              tp->fw_len, fw_name);
> -                       err = -EINVAL;
> +       if (tp->fw_needed) {
> +               err = tg3_request_firmware(tp);
> +               /* Failure to load firmware at this stage is not fatal; we'll
> +                  try again in tg3_open(). So if you have the driver built
> +                  into the kernel, you can still get the firmware loaded
> +                  after userspace is running, when the device comes up. */
> +               if (err != -ENOENT)
>                        goto err_out_fw;
> -               }
>        }
>
>        /* TSO is on by default on chips that support hardware TSO.

Patches cleanly but doesn't build in 2.6.29-rc1:

  CC      drivers/leds/led-core.o
  CC      drivers/leds/led-class.o
  LD      drivers/leds/built-in.o
  CC      drivers/net/tg3.o
drivers/net/tg3.c: In function 'tg3_request_firmware':
drivers/net/tg3.c:7542: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:7544: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:7557: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:7562: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c: In function 'tg3_open':
drivers/net/tg3.c:7571: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c: In function 'tg3_init_one':
drivers/net/tg3.c:13127: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:13143: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:13145: error: 'struct tg3' has no member named 'fw_needed'
drivers/net/tg3.c:13148: error: 'struct tg3' has no member named 'fw_needed'
make[2]: *** [drivers/net/tg3.o] Error 1
make[1]: *** [drivers/net] Error 2
make: *** [drivers] Error 2
[asuardi@sandman linux-2.6.29-rc1]$


Indeed, struct tg3 in tg3.h doesn't have fw_needed here...


--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:59                 ` David Woodhouse
  2009-01-11 16:42                   ` Alessandro Suardi
@ 2009-01-11 16:48                   ` Valdis.Kletnieks
  2009-01-11 16:56                     ` David Woodhouse
  2009-01-11 21:49                     ` David Miller
  2009-01-11 21:41                   ` David Miller
  2009-01-12  0:10                   ` Valdis.Kletnieks
  3 siblings, 2 replies; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-11 16:48 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 1326 bytes --]

On Sun, 11 Jan 2009 12:59:59 GMT, David Woodhouse said:
> On Sun, 2009-01-11 at 12:25 +0000, David Woodhouse wrote:
> > I'll take a look and see if I can remedy that. Then we wouldn't _need_
> > the FIRMWARE_IN_KERNEL option.
> 
> How about this? If it fails to load the firmware from userspace during
> the initialisation, it'll try again later in tg3_open(). 
> 
> I _think_ that's fine, because we don't do anything else in the early
> initialisation which requires the firmware to be loaded.
> 
> So if you build with CONFIG_TIGON3=y, CONFIG_FIRMWARE_IN_KERNEL=n, you
> should see it fail to load the firmware at boot, but then it should load
> it successfully when you bring the device up.
> 
> Untested-but-otherwise-Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

I'll see if I can give it a test drive sometime in the next 24 hours or so.

One unanswered question:  What do we expect the system to do if they have this
patch, TIGON3=y, FIRMWARE_IN_KERNEL=n, and configure a netconsole for boot
messages?  I'm *hoping* the answer is "the netconsole doesn't come up at boot,
but can be re-enabled via the /sys/kernel/config/netconsole interface after
you've done an 'ifconfig eth0 up' or similar, or do a 'modprobe netconsole'.

Those seem like reasonable semantics to me - anybody got a different opinion?


[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 16:42                   ` Alessandro Suardi
@ 2009-01-11 16:53                     ` David Woodhouse
  2009-01-11 19:24                       ` Alessandro Suardi
  0 siblings, 1 reply; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 16:53 UTC (permalink / raw)
  To: Alessandro Suardi
  Cc: David Miller, Valdis.Kletnieks, jaswinderlinux, linux-kernel, netdev

On Sun, 2009-01-11 at 17:42 +0100, Alessandro Suardi wrote:
> Patches cleanly but doesn't build in 2.6.29-rc1:

Pants; sorry, I omitted this bit...

diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
index ae5da60..508def3 100644
--- a/drivers/net/tg3.h
+++ b/drivers/net/tg3.h
@@ -2764,6 +2764,7 @@ struct tg3 {
 	struct ethtool_coalesce		coal;
 
 	/* firmware info */
+	const char			*fw_needed;
 	const struct firmware		*fw;
 	u32				fw_len; /* includes BSS */
 };

-- 
dwmw2


^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 16:48                   ` Valdis.Kletnieks
@ 2009-01-11 16:56                     ` David Woodhouse
  2009-01-11 21:49                     ` David Miller
  1 sibling, 0 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 16:56 UTC (permalink / raw)
  To: Valdis.Kletnieks
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

On Sun, 2009-01-11 at 11:48 -0500, Valdis.Kletnieks@vt.edu wrote:
> One unanswered question:  What do we expect the system to do if they have this
> patch, TIGON3=y, FIRMWARE_IN_KERNEL=n, and configure a netconsole for boot
> messages?  I'm *hoping* the answer is "the netconsole doesn't come up at boot,
> but can be re-enabled via the /sys/kernel/config/netconsole interface after
> you've done an 'ifconfig eth0 up' or similar, or do a 'modprobe netconsole'.
> 
> Those seem like reasonable semantics to me - anybody got a different opinion?

If netconsole follows the normal ->open() path, that sounds like what'll
happen.

-- 
dwmw2


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 16:53                     ` David Woodhouse
@ 2009-01-11 19:24                       ` Alessandro Suardi
  2009-01-11 19:26                         ` David Woodhouse
  0 siblings, 1 reply; 36+ messages in thread
From: Alessandro Suardi @ 2009-01-11 19:24 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, Valdis.Kletnieks, jaswinderlinux, linux-kernel, netdev

On Sun, Jan 11, 2009 at 5:53 PM, David Woodhouse <dwmw2@infradead.org> wrote:
> On Sun, 2009-01-11 at 17:42 +0100, Alessandro Suardi wrote:
>> Patches cleanly but doesn't build in 2.6.29-rc1:
>
> Pants; sorry, I omitted this bit...
>
> diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h
> index ae5da60..508def3 100644
> --- a/drivers/net/tg3.h
> +++ b/drivers/net/tg3.h
> @@ -2764,6 +2764,7 @@ struct tg3 {
>        struct ethtool_coalesce         coal;
>
>        /* firmware info */
> +       const char                      *fw_needed;
>        const struct firmware           *fw;
>        u32                             fw_len; /* includes BSS */
>  };
>

This one works, thank you.

However, with the combination of in-kernel tg3 and
 CONFIG_IN_KERNEL_FIRMWARE=n there is at least a 30" delay
 during boot while waiting for the firmware request (which will fail).

Such wait didn't use to be there, and stuff worked. Could the wait
 be removed, to behave as it used to - as well ?

Thanks again, ciao,

--alessandro

 "Sun keeps rising in the west / I keep on waking fully confused"

   (The Replacements, "Within Your Reach")

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 19:24                       ` Alessandro Suardi
@ 2009-01-11 19:26                         ` David Woodhouse
  0 siblings, 0 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 19:26 UTC (permalink / raw)
  To: Alessandro Suardi
  Cc: David Miller, Valdis.Kletnieks, jaswinderlinux, linux-kernel, netdev

On Sun, 2009-01-11 at 20:24 +0100, Alessandro Suardi wrote:
> However, with the combination of in-kernel tg3 and
>  CONFIG_IN_KERNEL_FIRMWARE=n there is at least a 30" delay
>  during boot while waiting for the firmware request (which will fail).

Hm, ideally it should fail fast if the root file system isn't yet
mounted. I thought we'd seen and fixed a 'long delay' problem already.

I'll take another look.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:24               ` David Woodhouse
  2009-01-11 12:59                 ` David Woodhouse
@ 2009-01-11 21:39                 ` David Miller
  2009-01-11 22:02                   ` David Woodhouse
                                     ` (2 more replies)
  1 sibling, 3 replies; 36+ messages in thread
From: David Miller @ 2009-01-11 21:39 UTC (permalink / raw)
  To: dwmw2
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

From: David Woodhouse <dwmw2@infradead.org>
Date: Sun, 11 Jan 2009 12:24:58 +0000

> Other drivers will load the firmware later, at the time the device is
> brought up. This means that even if you build the driver into the kernel
> without its firmware, it can still request the firmware later, when you
> try to start _using_ it. And when the file system is available.

For example, for mounting an NFS root using that device.... Oh, will I
need an initramfs for that once you pull the firmware-in-kernel
option?

To me, device probe is in fact the place to fail firmware discovery
for networking devices.  Because such a failure can mean you can't
mount your root filesystem.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:59                 ` David Woodhouse
  2009-01-11 16:42                   ` Alessandro Suardi
  2009-01-11 16:48                   ` Valdis.Kletnieks
@ 2009-01-11 21:41                   ` David Miller
  2009-01-12  0:10                   ` Valdis.Kletnieks
  3 siblings, 0 replies; 36+ messages in thread
From: David Miller @ 2009-01-11 21:41 UTC (permalink / raw)
  To: dwmw2
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

From: David Woodhouse <dwmw2@infradead.org>
Date: Sun, 11 Jan 2009 12:59:59 +0000

> So if you build with CONFIG_TIGON3=y, CONFIG_FIRMWARE_IN_KERNEL=n, you
> should see it fail to load the firmware at boot, but then it should load
> it successfully when you bring the device up.

And you won't be able to mount an NFS root filesystem.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 16:48                   ` Valdis.Kletnieks
  2009-01-11 16:56                     ` David Woodhouse
@ 2009-01-11 21:49                     ` David Miller
  2009-01-11 22:29                       ` Valdis.Kletnieks
  1 sibling, 1 reply; 36+ messages in thread
From: David Miller @ 2009-01-11 21:49 UTC (permalink / raw)
  To: Valdis.Kletnieks
  Cc: dwmw2, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

From: Valdis.Kletnieks@vt.edu
Date: Sun, 11 Jan 2009 11:48:22 -0500

> One unanswered question:  What do we expect the system to do if they have this
> patch, TIGON3=y, FIRMWARE_IN_KERNEL=n, and configure a netconsole for boot
> messages?  I'm *hoping* the answer is "the netconsole doesn't come up at boot,
> but can be re-enabled via the /sys/kernel/config/netconsole interface after
> you've done an 'ifconfig eth0 up' or similar, or do a 'modprobe netconsole'.
> 
> Those seem like reasonable semantics to me - anybody got a different opinion?

Even better, how about nfsroot?  There is no "later", either you
can mount to root filesystem or you fail.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 21:39                 ` David Miller
@ 2009-01-11 22:02                   ` David Woodhouse
  2009-01-11 22:05                     ` David Miller
  2009-01-11 22:15                   ` David Woodhouse
  2009-01-13 18:39                   ` Matt Carlson
  2 siblings, 1 reply; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 22:02 UTC (permalink / raw)
  To: David Miller
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, 2009-01-11 at 13:39 -0800, David Miller wrote:
> For example, for mounting an NFS root using that device.... Oh, will I
> need an initramfs for that once you pull the firmware-in-kernel
> option?

The option to build arbitrary firmware into your kernel is never going
to be pulled. You can do nfsroot on your myri10ge today, without initrd,
even though the firmware is distributed separately from the kernel. That
doesn't prevent you from building it _in_ to your kernel, if you choose
to.

-- 
dwmw2


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 22:02                   ` David Woodhouse
@ 2009-01-11 22:05                     ` David Miller
  2009-01-11 22:41                       ` David Woodhouse
  0 siblings, 1 reply; 36+ messages in thread
From: David Miller @ 2009-01-11 22:05 UTC (permalink / raw)
  To: dwmw2
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

From: David Woodhouse <dwmw2@infradead.org>
Date: Sun, 11 Jan 2009 22:02:27 +0000

> On Sun, 2009-01-11 at 13:39 -0800, David Miller wrote:
> > For example, for mounting an NFS root using that device.... Oh, will I
> > need an initramfs for that once you pull the firmware-in-kernel
> > option?
> 
> The option to build arbitrary firmware into your kernel is never going
> to be pulled. You can do nfsroot on your myri10ge today, without initrd,
> even though the firmware is distributed separately from the kernel. That
> doesn't prevent you from building it _in_ to your kernel, if you choose
> to.

So what used to work out of the box by typing make now
will have all kinds of strange depencies, right?

This is a regression, no matter how you spin it, in my
book.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 21:39                 ` David Miller
  2009-01-11 22:02                   ` David Woodhouse
@ 2009-01-11 22:15                   ` David Woodhouse
  2009-01-11 22:19                     ` David Miller
  2009-01-13 18:39                   ` Matt Carlson
  2 siblings, 1 reply; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 22:15 UTC (permalink / raw)
  To: David Miller
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, 2009-01-11 at 13:39 -0800, David Miller wrote:
> 
> For example, for mounting an NFS root using that device.... Oh, will I
> need an initramfs for that once you pull the firmware-in-kernel
> option?

Of course, we've been talking for ages about pulling the dhcp and
nfsroot hacks from the kernel and requiring an initrd for that _anyway_,
but that's a different issue...

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 22:15                   ` David Woodhouse
@ 2009-01-11 22:19                     ` David Miller
  0 siblings, 0 replies; 36+ messages in thread
From: David Miller @ 2009-01-11 22:19 UTC (permalink / raw)
  To: dwmw2
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

From: David Woodhouse <dwmw2@infradead.org>
Date: Sun, 11 Jan 2009 22:15:54 +0000

> On Sun, 2009-01-11 at 13:39 -0800, David Miller wrote:
> > 
> > For example, for mounting an NFS root using that device.... Oh, will I
> > need an initramfs for that once you pull the firmware-in-kernel
> > option?
> 
> Of course, we've been talking for ages about pulling the dhcp and
> nfsroot hacks from the kernel and requiring an initrd for that _anyway_,
> but that's a different issue...

It's not there now, so in the mean time....

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 21:49                     ` David Miller
@ 2009-01-11 22:29                       ` Valdis.Kletnieks
  2009-01-11 22:46                         ` David Woodhouse
  0 siblings, 1 reply; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-11 22:29 UTC (permalink / raw)
  To: David Miller
  Cc: dwmw2, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 1574 bytes --]

On Sun, 11 Jan 2009 13:49:37 PST, David Miller said:
> From: Valdis.Kletnieks@vt.edu
> Date: Sun, 11 Jan 2009 11:48:22 -0500
> 
> > One unanswered question:  What do we expect the system to do if they have this
> > patch, TIGON3=y, FIRMWARE_IN_KERNEL=n, and configure a netconsole for boot
> > messages?  I'm *hoping* the answer is "the netconsole doesn't come up at boot,
> > but can be re-enabled via the /sys/kernel/config/netconsole interface after
> > you've done an 'ifconfig eth0 up' or similar, or do a 'modprobe netconsole'.
> > 
> > Those seem like reasonable semantics to me - anybody got a different opinion?
> 
> Even better, how about nfsroot?  There is no "later", either you
> can mount to root filesystem or you fail.

I don't see any sane way for an nfsroot to work unless you've built the kernel
with TIGON3=y, and FIRMWARE=y.  Anything else is just crazy talk.  For that
case, I'd suggest we just do this:

Signed-off-by: Valdis Kletnieks <valdis.kletnieks@vt.edu>

--- linux-2.6.28-mmotm0109/Documentation/filesystems/nfsroot.txt.dist	2008-12-24 18:26:37.000000000 -0500
+++ linux-2.6.28-mmotm0109/Documentation/filesystems/nfsroot.txt	2009-01-11 17:27:31.000000000 -0500
@@ -30,6 +30,9 @@ In the networking options, kernel level 
 along with the types of autoconfiguration to support. Selecting all of
 DHCP, BOOTP and RARP is safe.
 
+In addition, your network interface driver must be selected as built-in,
+and if the card is a Tigon3 or other card that requires a firmware load
+to become functional, you need to select FIRMWARE_IN_KERNEL.
 
 
 



[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 22:05                     ` David Miller
@ 2009-01-11 22:41                       ` David Woodhouse
  2009-01-13  6:13                         ` Willy Tarreau
  0 siblings, 1 reply; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 22:41 UTC (permalink / raw)
  To: David Miller
  Cc: Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, 2009-01-11 at 14:05 -0800, David Miller wrote:
> So what used to work out of the box by typing make now
> will have all kinds of strange depencies, right?
> 
> This is a regression, no matter how you spin it, in my
> book.

I know you think that, but I disagree. Yes, it's slightly less
convenient for a small handful of older drivers, but in the general case
it's a massive improvement -- because now we can have a single canonical
location to collect _all_ the firmware that is redistributable, for use
with the kernel. And we've already started adding a whole bunch of new
firmwares to that repository.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 22:29                       ` Valdis.Kletnieks
@ 2009-01-11 22:46                         ` David Woodhouse
  0 siblings, 0 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-11 22:46 UTC (permalink / raw)
  To: Valdis.Kletnieks
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

On Sun, 2009-01-11 at 17:29 -0500, Valdis.Kletnieks@vt.edu wrote:
> On Sun, 11 Jan 2009 13:49:37 PST, David Miller said:
> > From: Valdis.Kletnieks@vt.edu
> > Date: Sun, 11 Jan 2009 11:48:22 -0500
> > 
> > > One unanswered question:  What do we expect the system to do if they have this
> > > patch, TIGON3=y, FIRMWARE_IN_KERNEL=n, and configure a netconsole for boot
> > > messages?  I'm *hoping* the answer is "the netconsole doesn't come up at boot,
> > > but can be re-enabled via the /sys/kernel/config/netconsole interface after
> > > you've done an 'ifconfig eth0 up' or similar, or do a 'modprobe netconsole'.
> > > 
> > > Those seem like reasonable semantics to me - anybody got a different opinion?
> > 
> > Even better, how about nfsroot?  There is no "later", either you
> > can mount to root filesystem or you fail.
> 
> I don't see any sane way for an nfsroot to work unless you've built the kernel
> with TIGON3=y, and FIRMWARE=y.  Anything else is just crazy talk.  For that
> case, I'd suggest we just do this:
> 
> Signed-off-by: Valdis Kletnieks <valdis.kletnieks@vt.edu>
> 
> --- linux-2.6.28-mmotm0109/Documentation/filesystems/nfsroot.txt.dist	2008-12-24 18:26:37.000000000 -0500
> +++ linux-2.6.28-mmotm0109/Documentation/filesystems/nfsroot.txt	2009-01-11 17:27:31.000000000 -0500
> @@ -30,6 +30,9 @@ In the networking options, kernel level 
>  along with the types of autoconfiguration to support. Selecting all of
>  DHCP, BOOTP and RARP is safe.
>  
> +In addition, your network interface driver must be selected as built-in,
> +and if the card is a Tigon3 or other card that requires a firmware load
> +to become functional, you need to select FIRMWARE_IN_KERNEL.

Yeah, but it's not FIRMWARE_IN_KERNEL in the general case -- that's just
for a handful of 'speshul' legacy drivers. In the general case it's the
CONFIG_EXTRA_FIRMWARE option which needs to be set to include the
required firmware.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 12:59                 ` David Woodhouse
                                     ` (2 preceding siblings ...)
  2009-01-11 21:41                   ` David Miller
@ 2009-01-12  0:10                   ` Valdis.Kletnieks
  2009-01-12  1:39                     ` Valdis.Kletnieks
  2009-01-12  8:13                     ` David Woodhouse
  3 siblings, 2 replies; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-12  0:10 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 3010 bytes --]

On Sun, 11 Jan 2009 12:59:59 GMT, David Woodhouse said:
> On Sun, 2009-01-11 at 12:25 +0000, David Woodhouse wrote:
> > I'll take a look and see if I can remedy that. Then we wouldn't _need_
> > the FIRMWARE_IN_KERNEL option.
> 
> How about this? If it fails to load the firmware from userspace during
> the initialisation, it'll try again later in tg3_open(). 
> 
> I _think_ that's fine, because we don't do anything else in the early
> initialisation which requires the firmware to be loaded.
> 
> So if you build with CONFIG_TIGON3=y, CONFIG_FIRMWARE_IN_KERNEL=n, you
> should see it fail to load the firmware at boot, but then it should load
> it successfully when you bring the device up.
> 
> Untested-but-otherwise-Signed-off-by: David Woodhouse <David.Woodhouse@intel.
com>
> 
> diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c

So I took it for a test drive, using my currently-working .config, which has

CONFIG_TIGON3=y
CONFIG_FIRMWARE_IN_KERNEL=y

In the dmesg I see during early bootup:

[    0.694230] loop: module loaded
[    0.694249] tg3.c:v3.97 (December 10, 2008)
[    0.694261] vendor=8086 device=27d4
[    0.694265] tg3 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.694274] tg3 0000:09:00.0: setting latency timer to 64
[    0.696087] tg3 0000:09:00.0: wake-up capability disabled by ACPI
[    0.696094] tg3 0000:09:00.0: PME# disabled
[    0.702276] tg3 0000:09:00.0: firmware: using built-in firmware tigon/tg3_tso.bin
[    0.702287] vendor=8086 device=27d4
[    0.702288] tg3 0000:09:00.0: PCI INT A disabled
[    0.702512] console [netcon0] enabled
[    0.702515] netconsole: network logging started
[    0.702575] Driver 'sd' needs updating - please use bus_type methods

but once we get to userspace, 'ifconfig' or 'ip link show' have *zero*
about an eth0 device.

For comparison, the dmesg if I revert your patch:

[    0.696638] loop: module loaded
[    0.696658] tg3.c:v3.97 (December 10, 2008)
[    0.696670] vendor=8086 device=27d4
[    0.696674] tg3 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.696683] tg3 0000:09:00.0: setting latency timer to 64
[    0.698063] tg3 0000:09:00.0: wake-up capability disabled by ACPI
[    0.698070] tg3 0000:09:00.0: PME# disabled
[    0.704276] tg3 0000:09:00.0: firmware: using built-in firmware tigon/tg3_tso.bin
[    0.704445] eth0: Tigon3 [partno(BCM5752KFBG) rev 6002] (PCI Express) MAC address 00:15:c5:c8:33:4e
[    0.704448] eth0: attached PHY is 5752 (10/100/1000Base-T Ethernet) (WireSpeed[1])
[    0.704451] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
[    0.704453] eth0: dma_rwctrl[76180000] dma_mask[64-bit]
[    0.704653] console [netcon0] enabled
[    0.704656] netconsole: network logging started
[    0.704718] Driver 'sd' needs updating - please use bus_type methods

So it looks like the patch is failing to finish initialization of the card.
Damned if *I* can see what's breaking it, the conversion to use a helper
function tg3_request_firmware seems sane enough....


[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-12  0:10                   ` Valdis.Kletnieks
@ 2009-01-12  1:39                     ` Valdis.Kletnieks
  2009-01-12  8:13                     ` David Woodhouse
  1 sibling, 0 replies; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-12  1:39 UTC (permalink / raw)
  Cc: David Woodhouse, David Miller, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 2657 bytes --]

On Sun, 11 Jan 2009 19:10:36 EST, Valdis.Kletnieks@vt.edu said:

> In the dmesg I see during early bootup:
> 
> [    0.694230] loop: module loaded
> [    0.694249] tg3.c:v3.97 (December 10, 2008)
> [    0.694261] vendor=8086 device=27d4
> [    0.694265] tg3 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
> [    0.694274] tg3 0000:09:00.0: setting latency timer to 64
> [    0.696087] tg3 0000:09:00.0: wake-up capability disabled by ACPI
> [    0.696094] tg3 0000:09:00.0: PME# disabled
> [    0.702276] tg3 0000:09:00.0: firmware: using built-in firmware tigon/tg3_tso.bin
> [    0.702287] vendor=8086 device=27d4
> [    0.702288] tg3 0000:09:00.0: PCI INT A disabled
> [    0.702512] console [netcon0] enabled
> [    0.702515] netconsole: network logging started
> [    0.702575] Driver 'sd' needs updating - please use bus_type methods
> 
> but once we get to userspace, 'ifconfig' or 'ip link show' have *zero*
> about an eth0 device.
> 
> For comparison, the dmesg if I revert your patch:
> 
> [    0.696638] loop: module loaded
> [    0.696658] tg3.c:v3.97 (December 10, 2008)
> [    0.696670] vendor=8086 device=27d4
> [    0.696674] tg3 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
> [    0.696683] tg3 0000:09:00.0: setting latency timer to 64
> [    0.698063] tg3 0000:09:00.0: wake-up capability disabled by ACPI
> [    0.698070] tg3 0000:09:00.0: PME# disabled
> [    0.704276] tg3 0000:09:00.0: firmware: using built-in firmware tigon/tg3_tso.bin
> [    0.704445] eth0: Tigon3 [partno(BCM5752KFBG) rev 6002] (PCI Express) MAC address 00:15:c5:c8:33:4e
> [    0.704448] eth0: attached PHY is 5752 (10/100/1000Base-T Ethernet) (WireSpeed[1])
> [    0.704451] eth0: RXcsums[1] LinkChgREG[0] MIirq[0] ASF[0] TSOcap[1]
> [    0.704453] eth0: dma_rwctrl[76180000] dma_mask[64-bit]
> [    0.704653] console [netcon0] enabled
> [    0.704656] netconsole: network logging started
> [    0.704718] Driver 'sd' needs updating - please use bus_type methods
> 
> So it looks like the patch is failing to finish initialization of the card.
> Damned if *I* can see what's breaking it, the conversion to use a helper
> function tg3_request_firmware seems sane enough....

Damn.  I wonder if netconsole's initialization is turning around and stomping
on everything?  This looks suspicious:

static int tg3_open(struct net_device *dev)
 {
        struct tg3 *tp = netdev_priv(dev);
        int err;
 
+       if (tp->fw_needed) {

Do we know for sure that tp-> struct is the same one we set up back in
tg3_request_firmware, *and* that tg3_open() doesn't get called before
tg3_init_one() (which would result in an uninitialized fw_needed)?

[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-12  0:10                   ` Valdis.Kletnieks
  2009-01-12  1:39                     ` Valdis.Kletnieks
@ 2009-01-12  8:13                     ` David Woodhouse
  2009-01-13  4:46                       ` Valdis.Kletnieks
  2009-01-13  5:52                       ` Valdis.Kletnieks
  1 sibling, 2 replies; 36+ messages in thread
From: David Woodhouse @ 2009-01-12  8:13 UTC (permalink / raw)
  To: Valdis.Kletnieks
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

On Sun, 2009-01-11 at 19:10 -0500, Valdis.Kletnieks@vt.edu wrote:
> So it looks like the patch is failing to finish initialization of the card.
> Damned if *I* can see what's breaking it, the conversion to use a helper
> function tg3_request_firmware seems sane enough....

Ahem...

--- drivers/net/tg3.c.stupiddwmw2	2009-01-12 08:13:05.000000000 +0000
+++ drivers/net/tg3.c	2009-01-12 08:13:09.000000000 +0000
@@ -13151,7 +13151,7 @@ static int __devinit tg3_init_one(struct
 		   try again in tg3_open(). So if you have the driver built
 		   into the kernel, you can still get the firmware loaded
 		   after userspace is running, when the device comes up. */
-		if (err != -ENOENT)
+		if (err && err != -ENOENT)
 			goto err_out_fw;
 	}
 

-- 
dwmw2


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-12  8:13                     ` David Woodhouse
@ 2009-01-13  4:46                       ` Valdis.Kletnieks
  2009-01-13  5:52                       ` Valdis.Kletnieks
  1 sibling, 0 replies; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-13  4:46 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 1069 bytes --]

On Mon, 12 Jan 2009 08:13:59 GMT, David Woodhouse said:
> On Sun, 2009-01-11 at 19:10 -0500, Valdis.Kletnieks@vt.edu wrote:
> > So it looks like the patch is failing to finish initialization of the card.
> > Damned if *I* can see what's breaking it, the conversion to use a helper
> > function tg3_request_firmware seems sane enough....
> 
> Ahem...
> 
> --- drivers/net/tg3.c.stupiddwmw2	2009-01-12 08:13:05.000000000 +0000
> +++ drivers/net/tg3.c	2009-01-12 08:13:09.000000000 +0000
> @@ -13151,7 +13151,7 @@ static int __devinit tg3_init_one(struct

OK, tested on my laptop.  Results:

CONFIG_TIGON3=y CONFIG_PREVENT_FIRMWARE_BUILD=y works - the firmware gets
loaded during early system boot and all is as expected.

CONFIG_TIGON3=y CONFIG_FIRMWARE_IN_KERNEL=n wedges up - Booted with
'ignore_loglevel initcall_debug', and the last thing we get is:

tg3 0000:09:00.0: firmware: requesting tigon/tg3_tso.bin

At which point we hang because request_firmware apparently never returns.
It's wedged up *really* good at that point - I can't even use
alt-sysrq-anything.



[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-12  8:13                     ` David Woodhouse
  2009-01-13  4:46                       ` Valdis.Kletnieks
@ 2009-01-13  5:52                       ` Valdis.Kletnieks
  1 sibling, 0 replies; 36+ messages in thread
From: Valdis.Kletnieks @ 2009-01-13  5:52 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, alessandro.suardi, jaswinderlinux, linux-kernel, netdev

[-- Attachment #1: Type: text/plain, Size: 1070 bytes --]

On Mon, 12 Jan 2009 08:13:59 GMT, David Woodhouse said:
> On Sun, 2009-01-11 at 19:10 -0500, Valdis.Kletnieks@vt.edu wrote:
> > So it looks like the patch is failing to finish initialization of the card.
> > Damned if *I* can see what's breaking it, the conversion to use a helper
> > function tg3_request_firmware seems sane enough....
> 
> Ahem...
> 
> --- drivers/net/tg3.c.stupiddwmw2	2009-01-12 08:13:05.000000000 +0000
> +++ drivers/net/tg3.c	2009-01-12 08:13:09.000000000 +0000
> @@ -13151,7 +13151,7 @@ static int __devinit tg3_init_one(struct

OK, tested on my laptop.  Results:

CONFIG_TIGON3=y CONFIG_PREVENT_FIRMWARE_BUILD=y works - the firmware gets
loaded during early system boot and all is as expected.

CONFIG_TIGON3=y CONFIG_FIRMWARE_IN_KERNEL=n wedges up - Booted with
'ignore_loglevel initcall_debug', and the last thing we get is:

tg3 0000:09:00.0: firmware: requesting tigon/tg3_tso.bin

At which point we hang because request_firmware apparently never returns.
It's wedged up *really* good at that point - I can't even use
alt-sysrq-anything.




[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 22:41                       ` David Woodhouse
@ 2009-01-13  6:13                         ` Willy Tarreau
  0 siblings, 0 replies; 36+ messages in thread
From: Willy Tarreau @ 2009-01-13  6:13 UTC (permalink / raw)
  To: David Woodhouse
  Cc: David Miller, Valdis.Kletnieks, alessandro.suardi,
	jaswinderlinux, linux-kernel, netdev

On Sun, Jan 11, 2009 at 10:41:38PM +0000, David Woodhouse wrote:
> On Sun, 2009-01-11 at 14:05 -0800, David Miller wrote:
> > So what used to work out of the box by typing make now
> > will have all kinds of strange depencies, right?
> > 
> > This is a regression, no matter how you spin it, in my
> > book.
> 
> I know you think that, but I disagree. Yes, it's slightly less
> convenient for a small handful of older drivers,

We're speaking about the driver for the on-board NIC which is present on
almost 100% of the servers built since the last 5 years. There are an
awful lot of users of this driver playing with PXE, nfsroot and other
non-legacy boot methods. So "small handful" or not, we must ensure not
to annoy a lot of users with strange bugs and awkward configurations.

> but in the general case
> it's a massive improvement -- because now we can have a single canonical
> location to collect _all_ the firmware that is redistributable, for use
> with the kernel. And we've already started adding a whole bunch of new
> firmwares to that repository.

In the past, the firmware distributed with the driver was always the
one known to work with that version of the driver. Now you'll have to
know what version of the firmware to use with what kernel version,
this is adding a new dimension to troubleshooting complexity.

I still think that these firmware hacks are a solution looking for
a problem to solve. We had something which has worked well for 15
years and now it's easy to see a machine hang at boot time for 60
seconds because a firmware file is missing or invalid.

Regression IMO, I agree with Davem.

Willy


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-11 21:39                 ` David Miller
  2009-01-11 22:02                   ` David Woodhouse
  2009-01-11 22:15                   ` David Woodhouse
@ 2009-01-13 18:39                   ` Matt Carlson
  2009-01-13 20:27                     ` David Miller
  2 siblings, 1 reply; 36+ messages in thread
From: Matt Carlson @ 2009-01-13 18:39 UTC (permalink / raw)
  To: David Miller
  Cc: dwmw2, Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

On Sun, Jan 11, 2009 at 01:39:29PM -0800, David Miller wrote:
> From: David Woodhouse <dwmw2@infradead.org>
> Date: Sun, 11 Jan 2009 12:24:58 +0000
> 
> > Other drivers will load the firmware later, at the time the device is
> > brought up. This means that even if you build the driver into the kernel
> > without its firmware, it can still request the firmware later, when you
> > try to start _using_ it. And when the file system is available.
> 
> For example, for mounting an NFS root using that device.... Oh, will I
> need an initramfs for that once you pull the firmware-in-kernel
> option?
> 
> To me, device probe is in fact the place to fail firmware discovery
> for networking devices.  Because such a failure can mean you can't
> mount your root filesystem.

David, is this the direction you want to take the fix?  I'm sitting on
a patch that elaborates on David Woodhouse's work which moves the
request_firmware call to tg3_open().  Before I posted it for comment,
I wanted to make sure the patch is moving in the right direction.


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok)
  2009-01-13 18:39                   ` Matt Carlson
@ 2009-01-13 20:27                     ` David Miller
  0 siblings, 0 replies; 36+ messages in thread
From: David Miller @ 2009-01-13 20:27 UTC (permalink / raw)
  To: mcarlson
  Cc: dwmw2, Valdis.Kletnieks, alessandro.suardi, jaswinderlinux,
	linux-kernel, netdev

From: "Matt Carlson" <mcarlson@broadcom.com>
Date: Tue, 13 Jan 2009 10:39:48 -0800

> On Sun, Jan 11, 2009 at 01:39:29PM -0800, David Miller wrote:
> > From: David Woodhouse <dwmw2@infradead.org>
> > Date: Sun, 11 Jan 2009 12:24:58 +0000
> > 
> > > Other drivers will load the firmware later, at the time the device is
> > > brought up. This means that even if you build the driver into the kernel
> > > without its firmware, it can still request the firmware later, when you
> > > try to start _using_ it. And when the file system is available.
> > 
> > For example, for mounting an NFS root using that device.... Oh, will I
> > need an initramfs for that once you pull the firmware-in-kernel
> > option?
> > 
> > To me, device probe is in fact the place to fail firmware discovery
> > for networking devices.  Because such a failure can mean you can't
> > mount your root filesystem.
> 
> David, is this the direction you want to take the fix?  I'm sitting on
> a patch that elaborates on David Woodhouse's work which moves the
> request_firmware call to tg3_open().  Before I posted it for comment,
> I wanted to make sure the patch is moving in the right direction.

You can post it, sure.

But it doesn't actually fix the nfsroot case, that will still be
broken.

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2009-01-13 20:27 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-01-07 14:24 2.6.28-git8: tg3 doesn't work due to firmware not loading (-git7 is ok) Alessandro Suardi
2009-01-08  4:03 ` Alessandro Suardi
2009-01-08  6:12 ` Jaswinder Singh Rajput
2009-01-08 20:33   ` Alessandro Suardi
2009-01-08 20:53     ` David Miller
2009-01-09 17:30       ` Alessandro Suardi
2009-01-09 22:04         ` David Miller
2009-01-09 22:29           ` Alessandro Suardi
2009-01-11 11:10           ` Valdis.Kletnieks
2009-01-11 12:08             ` David Miller
2009-01-11 12:24               ` David Woodhouse
2009-01-11 12:59                 ` David Woodhouse
2009-01-11 16:42                   ` Alessandro Suardi
2009-01-11 16:53                     ` David Woodhouse
2009-01-11 19:24                       ` Alessandro Suardi
2009-01-11 19:26                         ` David Woodhouse
2009-01-11 16:48                   ` Valdis.Kletnieks
2009-01-11 16:56                     ` David Woodhouse
2009-01-11 21:49                     ` David Miller
2009-01-11 22:29                       ` Valdis.Kletnieks
2009-01-11 22:46                         ` David Woodhouse
2009-01-11 21:41                   ` David Miller
2009-01-12  0:10                   ` Valdis.Kletnieks
2009-01-12  1:39                     ` Valdis.Kletnieks
2009-01-12  8:13                     ` David Woodhouse
2009-01-13  4:46                       ` Valdis.Kletnieks
2009-01-13  5:52                       ` Valdis.Kletnieks
2009-01-11 21:39                 ` David Miller
2009-01-11 22:02                   ` David Woodhouse
2009-01-11 22:05                     ` David Miller
2009-01-11 22:41                       ` David Woodhouse
2009-01-13  6:13                         ` Willy Tarreau
2009-01-11 22:15                   ` David Woodhouse
2009-01-11 22:19                     ` David Miller
2009-01-13 18:39                   ` Matt Carlson
2009-01-13 20:27                     ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.