Search Linux Wireless

Re: Firmware files for Ralink RT28x0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

>> On Sun, Apr 10, 2011 at 5:56 PM, Ben Hutchings <ben@xxxxxxxxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux