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 INT6300Bootloader incorrectly identifies the chipset as an INT6000™ chipset in the MDEVICEID field of the VS_SW_VER message.

  2. The AR7400Bootloader 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.