2011-04-10 15:56:08

by Ben Hutchings

[permalink] [raw]
Subject: Firmware files for Ralink RT28x0

I notice that rt2800{pci,usb} each specify only one firmware image,
regardless of the controller version.

This is inconsistent with rt28{6,7}0sta and with the firmware images in
linux-firmware.

If you think that a single image per bus type can cover all controllers,
please identify those firmware images, test them on each hardware
generation, and get them into linux-firmware.

Ben.

--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2011-04-10 18:12:43

by Xose Vazquez Perez

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

On 04/10/2011 07:35 PM, Ivo Van Doorn wrote:

> True, but the rt2860 and rt2870 firmware file are outdated in the
> linux-firmware,
> and probably don't support the rt3090 or other more recent chipsets. So before
> they can be removed, those files must be updated.

Larry Finger sent a patch to remove the rt28{6,7}0 staging drivers.
So the rt3070.bin rt3071.bin rt3090.bin files in linux-firmware
also can be removed, because they are included _only_ in the rt28{6,7}0
staging drivers.

2011-04-10 16:18:14

by Larry Finger

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

On 04/10/2011 10:56 AM, Ben Hutchings wrote:
> I notice that rt2800{pci,usb} each specify only one firmware image,
> regardless of the controller version.
>
> This is inconsistent with rt28{6,7}0sta and with the firmware images in
> linux-firmware.
>
> If you think that a single image per bus type can cover all controllers,
> please identify those firmware images, test them on each hardware
> generation, and get them into linux-firmware.

With rt2800pci, my rt3090 works with rt2860.bin, which is already in linux-firmware.

Larry

2011-04-10 19:04:08

by Ben Hutchings

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

On Sun, 2011-04-10 at 20:06 +0200, Ivo Van Doorn wrote:
> Hi,
>
> >> On Sun, Apr 10, 2011 at 5:56 PM, Ben Hutchings <[email protected]> wrote:
> >> > I notice that rt2800{pci,usb} each specify only one firmware image,
> >> > regardless of the controller version.
> >> >
> >> > This is inconsistent with rt28{6,7}0sta and with the firmware images in
> >> > linux-firmware.
> >>
> >> Well the rt2800pci/usb firmware behavior is consistent with the original
> >> Ralink drivers (Not sure about the staging drivers, I only look to the drivers
> >> on the Ralink website).
> >
> > Are you referring to the #ifdef BIN_IN_FILE code? This code is not
> > enabled, so you should assume it is broken. I suspect that it was
> > intended to ease firmware development.
>
> Not only BIN_IN_FILE, but the .bin files provided in the Ralink package
> itself. At some point I grabbed all .bin files from all Ralink packages,
> and compared them.

But this proves nothing, because the Ralink drivers don't use those
files!

[...]
> > The firmware blobs in RT2870 version 2009-08-20 and RT3070 version
> > 2009-05-25 are all marked as version 17 (or 0.17), but *they all have
> > different contents*.
>
> How do you determine this version? I usually check the last couple
> of bytes of the firmware file. (The last 2 bytes of the firmware is the CRC,
> but the 2 bytes before that is the version).

That's exactly what I'm looking at, in the file include/firmware.h.
There are 256 lines * 16 bytes for each image, so the images end with:

RT2870 image 1: 0x00, 0x11, 0xc2, 0x7a
RT2870 image 2: 0x00, 0x11, 0x77, 0x81
RT3070 image 1: 0x00, 0x11, 0x7b, 0xc4
RT3070 image 2: 0x00, 0x11, 0x65, 0xd3

By the way, there is a comment in common/rtmp_mcu.c which says the
version number for these chips is only 1 byte.

[...]
> > linux-firmware is supposed to have all firmware files referenced by any
--- ---
> > version of Linux; therefore these files must not be removed.
>
> I agree that the firmware should be in linux-firmware, but only if they
> are the latest version (and it is possible to keep them up-to-date). Having
> outdated firmware in the linux-firmware tree only causes more problems.
>
> > If just two files are sufficient then the other files could be replaced
> > by symlinks to them.
>
> Why? The patch to remove the staging drivers has been sent out a few
> days ago. After that we only have rt2800pci and rt2800usb drivers,
> so we can get rid of the rt30xx files completely. ;)

No. Read what I said again.

Ben.

--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2011-04-10 16:35:29

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

Hi,

On Sun, Apr 10, 2011 at 5:56 PM, Ben Hutchings <[email protected]> wrote:
> I notice that rt2800{pci,usb} each specify only one firmware image,
> regardless of the controller version.
>
> This is inconsistent with rt28{6,7}0sta and with the firmware images in
> linux-firmware.

Well the rt2800pci/usb firmware behavior is consistent with the original
Ralink drivers (Not sure about the staging drivers, I only look to the drivers
on the Ralink website).

As for the linux-firmware that contains some firmware files for rt30** chipsets,
but that are not used by rt2800pci/usb for the simple reason that the latest
version of the rt2860.bin and rt2870.bin files contain support for
those chipsets
as well.

> If you think that a single image per bus type can cover all controllers,
> please identify those firmware images, test them on each hardware
> generation, and get them into linux-firmware.

Updating the firmware files in the linux-firmware tree seems to be
close to impossible. Multiple attempts have been made to update the
firmware files for rt73usb, rt61pci, rt2800pci and rt2800usb, and every
attempt has been ignored.
Even when Ralink sent the update directly, and it seemed that the patches
were accepted, they were still not applied.
So honestly, I think it might be easier to simply remove the Ralink firmware
files from the linux-firmware tree, as then at least the users won't accidently
use the outdated firmware files from that tree.

Ivo

2011-04-10 17:49:27

by Ben Hutchings

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

On Sun, 2011-04-10 at 18:35 +0200, Ivo Van Doorn wrote:
> Hi,
>
> On Sun, Apr 10, 2011 at 5:56 PM, Ben Hutchings <[email protected]> wrote:
> > I notice that rt2800{pci,usb} each specify only one firmware image,
> > regardless of the controller version.
> >
> > This is inconsistent with rt28{6,7}0sta and with the firmware images in
> > linux-firmware.
>
> Well the rt2800pci/usb firmware behavior is consistent with the original
> Ralink drivers (Not sure about the staging drivers, I only look to the drivers
> on the Ralink website).

Are you referring to the #ifdef BIN_IN_FILE code? This code is not
enabled, so you should assume it is broken. I suspect that it was
intended to ease firmware development.

Ralink provides multiple drivers per bus type for RT28xx and later
chips. For PCI devices they split between RT2860 and RT309x; for USB
devices they split between RT2870 and RT307x (I think - the chip model
numbers don't seem to be stated consistently).

In addition, the USB drivers have two separate images packed together
and they can select different images based on the controller version:

#ifdef RTMP_MAC_USB
if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070))
{ // Use Firmware V2.
//printk("KH:Use New Version,part2\n");
pFirmwareImage = (PUCHAR)&FirmwareImage[FIRMWAREIMAGEV1_LENGTH];
FileLength = FIRMWAREIMAGEV2_LENGTH;
}
else
{
//printk("KH:Use New Version,part1\n");
pFirmwareImage = FirmwareImage;
FileLength = FIRMWAREIMAGEV1_LENGTH;
}
#endif // RTMP_MAC_USB //

The firmware blobs in RT2870 version 2009-08-20 and RT3070 version
2009-05-25 are all marked as version 17 (or 0.17), but *they all have
different contents*.

I attempted to maintain the same version selection logic when converting
the staging drivers to use the firmware loader, since I assumed there
was a good reason for it.

> As for the linux-firmware that contains some firmware files for rt30** chipsets,
> but that are not used by rt2800pci/usb for the simple reason that the latest
> version of the rt2860.bin and rt2870.bin files contain support for
> those chipsets
> as well.

So I have heard. But do they still support the original chips
correctly?

> > If you think that a single image per bus type can cover all controllers,
> > please identify those firmware images, test them on each hardware
> > generation, and get them into linux-firmware.
>
> Updating the firmware files in the linux-firmware tree seems to be
> close to impossible. Multiple attempts have been made to update the
> firmware files for rt73usb, rt61pci, rt2800pci and rt2800usb, and every
> attempt has been ignored.
> Even when Ralink sent the update directly, and it seemed that the patches
> were accepted, they were still not applied.

This roughly matches my experience, except that I have been persistent
enough to get my changes applied eventually.

> So honestly, I think it might be easier to simply remove the Ralink firmware
> files from the linux-firmware tree, as then at least the users won't accidently
> use the outdated firmware files from that tree.

linux-firmware is supposed to have all firmware files referenced by any
version of Linux; therefore these files must not be removed.

If just two files are sufficient then the other files could be replaced
by symlinks to them.

Ben.

--
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.


Attachments:
signature.asc (828.00 B)
This is a digitally signed message part

2011-04-10 18:26:38

by Larry Finger

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

On 04/10/2011 12:35 PM, Ivo Van Doorn wrote:
> Hi.
>
>>> I notice that rt2800{pci,usb} each specify only one firmware image,
>>> regardless of the controller version.
>>>
>>> This is inconsistent with rt28{6,7}0sta and with the firmware images in
>>> linux-firmware.
>>>
>>> If you think that a single image per bus type can cover all controllers,
>>> please identify those firmware images, test them on each hardware
>>> generation, and get them into linux-firmware.
>>
>> querida:/datos/kernel/linux-2.6/drivers/net/wireless/rt2x00 $ grep "\.bin" *
>> rt2800pci.h:#define FIRMWARE_RT2860 "rt2860.bin"
>> rt2800usb.h:#define FIRMWARE_RT2870 "rt2870.bin"
>> rt61pci.h:#define FIRMWARE_RT2561 "rt2561.bin"
>> rt61pci.h:#define FIRMWARE_RT2561s "rt2561s.bin"
>> rt61pci.h:#define FIRMWARE_RT2661 "rt2661.bin"
>> rt73usb.h:#define FIRMWARE_RT2571 "rt73.bin"
>>
>> rt3070.bin rt3071.bin rt3090.bin should be deleted from linux-firmware.
>> They were only need by staging drivers.
>
> True, but the rt2860 and rt2870 firmware file are outdated in the
> linux-firmware,
> and probably don't support the rt3090 or other more recent chipsets. So before
> they can be removed, those files must be updated.

As I wrote earlier, my RT3090 is supported by rt2860.bin. I haven't tested
everything, but is functioned in STA and ad-hoc modes.

Larry

2011-04-10 17:35:53

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

Hi.

>> I notice that rt2800{pci,usb} each specify only one firmware image,
>> regardless of the controller version.
>>
>> This is inconsistent with rt28{6,7}0sta and with the firmware images in
>> linux-firmware.
>>
>> If you think that a single image per bus type can cover all controllers,
>> please identify those firmware images, test them on each hardware
>> generation, and get them into linux-firmware.
>
> querida:/datos/kernel/linux-2.6/drivers/net/wireless/rt2x00 $ grep "\.bin" *
> rt2800pci.h:#define FIRMWARE_RT2860 ? ? ? ? ? ? ? ? ? ? "rt2860.bin"
> rt2800usb.h:#define FIRMWARE_RT2870 ? ? ? ? ? ? ? ? ? ? "rt2870.bin"
> rt61pci.h:#define FIRMWARE_RT2561 ? ? ? ? ? ? ? ? ? ? ? "rt2561.bin"
> rt61pci.h:#define FIRMWARE_RT2561s ? ? ? ? ? ? ? ? ? ? ?"rt2561s.bin"
> rt61pci.h:#define FIRMWARE_RT2661 ? ? ? ? ? ? ? ? ? ? ? "rt2661.bin"
> rt73usb.h:#define FIRMWARE_RT2571 ? ? ? ? ? ? ? ? ? ? ? "rt73.bin"
>
> rt3070.bin rt3071.bin rt3090.bin should be deleted from linux-firmware.
> They were only need by staging drivers.

True, but the rt2860 and rt2870 firmware file are outdated in the
linux-firmware,
and probably don't support the rt3090 or other more recent chipsets. So before
they can be removed, those files must be updated.

Ivo

2011-04-10 17:29:52

by Xose Vazquez Perez

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

Ben Hutchings wrote:

> I notice that rt2800{pci,usb} each specify only one firmware image,
> regardless of the controller version.
>
> This is inconsistent with rt28{6,7}0sta and with the firmware images in
> linux-firmware.
>
> If you think that a single image per bus type can cover all controllers,
> please identify those firmware images, test them on each hardware
> generation, and get them into linux-firmware.

querida:/datos/kernel/linux-2.6/drivers/net/wireless/rt2x00 $ grep "\.bin" *
rt2800pci.h:#define FIRMWARE_RT2860 "rt2860.bin"
rt2800usb.h:#define FIRMWARE_RT2870 "rt2870.bin"
rt61pci.h:#define FIRMWARE_RT2561 "rt2561.bin"
rt61pci.h:#define FIRMWARE_RT2561s "rt2561s.bin"
rt61pci.h:#define FIRMWARE_RT2661 "rt2661.bin"
rt73usb.h:#define FIRMWARE_RT2571 "rt73.bin"

rt3070.bin rt3071.bin rt3090.bin should be deleted from linux-firmware.
They were only need by staging drivers.

--
?All? muevan feroz guerra, ciegos reyes por un palmo m?s de tierra;
que yo aqu? tengo por m?o cuanto abarca el mar brav?o, a quien nadie
impuso leyes. Y no hay playa, sea cualquiera, ni bandera de esplendor,
que no sienta mi derecho y d? pecho a mi valor.?

2011-04-10 18:06:34

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: Firmware files for Ralink RT28x0

Hi,

>> On Sun, Apr 10, 2011 at 5:56 PM, Ben Hutchings <[email protected]> wrote:
>> > I notice that rt2800{pci,usb} each specify only one firmware image,
>> > regardless of the controller version.
>> >
>> > This is inconsistent with rt28{6,7}0sta and with the firmware images in
>> > linux-firmware.
>>
>> Well the rt2800pci/usb firmware behavior is consistent with the original
>> Ralink drivers (Not sure about the staging drivers, I only look to the drivers
>> on the Ralink website).
>
> Are you referring to the #ifdef BIN_IN_FILE code? ?This code is not
> enabled, so you should assume it is broken. ?I suspect that it was
> intended to ease firmware development.

Not only BIN_IN_FILE, but the .bin files provided in the Ralink package
itself. At some point I grabbed all .bin files from all Ralink packages,
and compared them.

I also grabbed the firmware files, which Ralink provided separately,
Basically it was very clear that the firmware provided by rt3070, was
a simple later release of the rt2860 firmware (which is still used
for rt2860 devices).

So with new versions of the firmware, support for new chipsets was
being addded.

> Ralink provides multiple drivers per bus type for RT28xx and later
> chips. ?For PCI devices they split between RT2860 and RT309x; for USB
> devices they split between RT2870 and RT307x (I think - the chip model
> numbers don't seem to be stated consistently).
>
> In addition, the USB drivers have two separate images packed together
> and they can select different images based on the controller version:
>
> #ifdef RTMP_MAC_USB
> ? ? ? ? ? ? ? ?if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070))
> ? ? ? ? ? ? ? ?{ ? ? ? // Use Firmware V2.
> ? ? ? ? ? ? ? ? ? ? ? ?//printk("KH:Use New Version,part2\n");
> ? ? ? ? ? ? ? ? ? ? ? ?pFirmwareImage = (PUCHAR)&FirmwareImage[FIRMWAREIMAGEV1_LENGTH];
> ? ? ? ? ? ? ? ? ? ? ? ?FileLength = FIRMWAREIMAGEV2_LENGTH;
> ? ? ? ? ? ? ? ?}
> ? ? ? ? ? ? ? ?else
> ? ? ? ? ? ? ? ?{
> ? ? ? ? ? ? ? ? ? ? ? ?//printk("KH:Use New Version,part1\n");
> ? ? ? ? ? ? ? ? ? ? ? ?pFirmwareImage = FirmwareImage;
> ? ? ? ? ? ? ? ? ? ? ? ?FileLength = FIRMWAREIMAGEV1_LENGTH;
> ? ? ? ? ? ? ? ?}
> #endif // RTMP_MAC_USB //
>
> The firmware blobs in RT2870 version 2009-08-20 and RT3070 version
> 2009-05-25 are all marked as version 17 (or 0.17), but *they all have
> different contents*.

How do you determine this version? I usually check the last couple
of bytes of the firmware file. (The last 2 bytes of the firmware is the CRC,
but the 2 bytes before that is the version).

> I attempted to maintain the same version selection logic when converting
> the staging drivers to use the firmware loader, since I assumed there
> was a good reason for it.
>
>> As for the linux-firmware that contains some firmware files for rt30** chipsets,
>> but that are not used by rt2800pci/usb for the simple reason that the latest
>> version of the rt2860.bin and rt2870.bin files contain support for
>> those chipsets
>> as well.
>
> So I have heard. ?But do they still support the original chips
> correctly?

Yes, I am using the latest firmware for my rt2860/2870 devices
without problems.

>> > If you think that a single image per bus type can cover all controllers,
>> > please identify those firmware images, test them on each hardware
>> > generation, and get them into linux-firmware.
>>
>> Updating the firmware files in the linux-firmware tree seems to be
>> close to impossible. Multiple attempts have been made to update the
>> firmware files for rt73usb, rt61pci, rt2800pci and rt2800usb, and every
>> attempt has been ignored.
>> Even when Ralink sent the update directly, and it seemed that the patches
>> were accepted, they were still not applied.
>
> This roughly matches my experience, except that I have been persistent
> enough to get my changes applied eventually.
>
>> So honestly, I think it might be easier to simply remove the Ralink firmware
>> files from the linux-firmware tree, as then at least the users won't accidently
>> use the outdated firmware files from that tree.
>
> linux-firmware is supposed to have all firmware files referenced by any
> version of Linux; therefore these files must not be removed.

I agree that the firmware should be in linux-firmware, but only if they
are the latest version (and it is possible to keep them up-to-date). Having
outdated firmware in the linux-firmware tree only causes more problems.

> If just two files are sufficient then the other files could be replaced
> by symlinks to them.

Why? The patch to remove the staging drivers has been sent out a few
days ago. After that we only have rt2800pci and rt2800usb drivers,
so we can get rid of the rt30xx files completely. ;)

Ivo