Keywords: Intellon, Atheros, Qualcomm, HomePlug, powerline, communications, INT6000, INT6300, INT6400, AR7400, AR7420

Liar! Liar! Pants on Fire!
Prev | Chapter 4. Firmware | Next

## Liar! Liar! Pants on Fire!

It is important to use the right Boot from Host sequence for each type of Atheros device. This means that you should query the device using a `VS_SW_VER` message beforehand to determine or confirm the device type. Although this should be a simple operation, there have been several changes that complicate matters.

1. The INT6300™ Bootloader incorrectly identifies the chipset as an INT6000™ chipset in the `MDEVICEID` field of the `VS_SW_VER` message.

2. The AR7400™ Bootloader incorrectly identifies the chipset as an INT6400™ chipset in the `MDEVICEID` field of the `VS_SW_VER` message.

3. The Bootloader, for INT6400™ chipsets and later, returns two additional field, `IDENT` and `STEP_NUMBER` in the `VS_SW_VER` confirmation message. These fields, the hardware identifier and step number, are correct but are not returned in earlier chipsets.

The table below illustrates what is reported by various firmware, in the `DEVICEID` field of the `VS_SW_VER` message, on each type of hardware platform.

Table 4.2. Legacy Device Identification

Chipset | DEVICEID/IDENT (Bootloader) | MVERSION (Bootloader) | DEVICEID/IDENT (Firmware) | MVERSION (Firmware)
--- | --- | --- | --- | ---
INT6000 | 0x01 / 0x00000042 | BootLoader | 0x01 / na | INT6000-MAC-0-0-3213-1206-20071224-FINAL
INT6300 | 0x02 / 0x00006300 | BootLoader | 0x02 / na | INT6300-MAC-0-0-4203-00-4089-20091105-FINAL
INT6400 | 0x03 / 0x00006400 | BootLoader | 0x03 / na | INT6400-MAC-4-3-4304-01-4397-20100924-FINAL
INT7400 | 0x03 / 0x00007400 | BootLoader | 0x04 / na | INT7400-MAC-5-2-5213-01-1027-20110428-FINAL
INT7450 | 0x03 / 0x0F001D1A | BootLoader | 0x20 / 0x00001D1A | QCA7450-MAC-5-2-5213-01-1027-20110428-FINAL
INT7451 | 0x03 / 0x00007400 | BootLoader | 0x20 / 0x0E001D1A | QCA7451-MAC-5-2-5213-01-1027-20110428-FINAL
AR6405 | 0x03 / 0x00006400 | BootLoader | 0x05 / na | INT6405-MAC-4-3-4304-01-4397-20100924-FINAL
AR7420 | 0x05 / 0x001CFCFC | BootLoader | 0x20 / 0x001CFCFC | MAC-QCA7420-2.5.14.2259-23-20110621-FINAL
QCA6410 | 0x05 / 0x001B58EC | BootLoader | 0x21 / 0x001B58EC | MAC-QCA6410-2.5.14.2259-23-20110621-FINAL
QCA6411 | 0x05 / 0x001B58BC | BootLoader | 0x21 / 0x001B58BC | MAC-QCA6411-2.5.14.2259-23-20110621-FINAL
QCA7000 | 0x05 / 0x001B589C | BootLoader | 0x22 / 0x001B589C | MAC-QCA7000-1.4.13.3259-43-20110621-FINAL

To properly detect the correct chipset perform the following steps.

1. Send a `VS_SW_VER` request message from the local host to the local device using the Atheros Local Management Address.

2. Read the `VS_SW_VER` confirm message returned to the host by the device.

3. Extract and save the `MDEVICEID` field (a small integer) and the `MVERSION` field (a string).

4. If the `MVERSION` string is “SoftLoader” then the `MDEVICEID` field is valid.

5. If the `MVERSION` string is not “BootLoader” then the `MDEVICEID` field is valid unless it is `0x07`. In that case, set the stored `DEVICEID` to `0x04` to indicate an AR7400™. Do not inspect the `IDENT` field because it does not exist in the firmware version of the `VS_SW_VER` message on any platform.

6. If the `MDEVICEID` field is `1`, indicating an INT6000™, then the chipset is actually an INT6300™. Set the stored `MDEVICEID` to `2`, indicating an INT6300™. Do not inspect the `IDENT` field because it does not exist in the BootLoader version of the `VS_SW_VER` message for either of these two chipsets.

7. If the `MDEVICEID` field is `3`, indicating an INT6400™, then the chipset could be either an INT6300™ or an AR7400™. Inspect the `IDENT` field.

8. If the `IDENT` field is `0x6400`, indicating an INT6400™, then the stored `MDEVICEID` is valid.

9. If the `IDENT` field is `0x7400`, indicating an AR7400™, then set the stored `MDEVICEID` to `4`, indicating an AR7400™.

Having performed the previous conversions, the expression (`1` << (`DEVICEID` - `1`)) now indicates the proper `IGNORE` bit found in each NVM file header. Unfortunately, this only works for `DeviceID` values from `0x01` through `0x06`. After that, the device identification scheme changes.

Prev | Up | Next
Every Little Bit Hurts | Home | But wait! There's more ...