Fix printing & reading of 16-bit CFI device identifiers
authorPhilippe De Muyter <phdm@macqel.be>
Tue, 10 Aug 2010 14:54:52 +0000 (16:54 +0200)
committerStefan Roese <sr@denx.de>
Wed, 18 Aug 2010 07:09:00 +0000 (09:09 +0200)
Fix reading and printing of CFI flashes 16-bit devices identifiers

Nowadays CFI flashes have a 16-bit device identifier.  U-boot still
print them and read them as if they were only 8-bit wide.  Fix that.
Before:
  Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x1B
After:
  Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x881B

Signed-off-by: Philippe De Muyter <phdm@macqel.be>
Signed-off-by: Stefan Roese <sr@denx.de>
drivers/mtd/cfi_flash.c

index 1c736868afff2a6341d4aee554815f908525c849..2157c027823d948693d9624e38e2d883c5abb4bc 100644 (file)
@@ -1142,8 +1142,10 @@ void flash_print_info (flash_info_t * info)
                        printf ("Unknown (%d)", info->vendor);
                        break;
        }
-       printf (" command set, Manufacturer ID: 0x%02X, Device ID: 0x%02X",
-               info->manufacturer_id, info->device_id);
+       printf (" command set, Manufacturer ID: 0x%02X, Device ID: 0x",
+               info->manufacturer_id);
+       printf (info->chipwidth == FLASH_CFI_16BIT ? "%04X" : "%02X",
+               info->device_id);
        if (info->device_id == 0x7E) {
                printf("%04X", info->device_id2);
        }
@@ -1479,8 +1481,9 @@ static void cmdset_intel_read_jedec_ids(flash_info_t *info)
        udelay(1000); /* some flash are slow to respond */
        info->manufacturer_id = flash_read_uchar (info,
                                        FLASH_OFFSET_MANUFACTURER_ID);
-       info->device_id = flash_read_uchar (info,
-                                       FLASH_OFFSET_DEVICE_ID);
+       info->device_id = (info->chipwidth == FLASH_CFI_16BIT) ?
+                       flash_read_word (info, FLASH_OFFSET_DEVICE_ID) :
+                       flash_read_uchar (info, FLASH_OFFSET_DEVICE_ID);
        flash_write_cmd(info, 0, 0, FLASH_CMD_RESET);
 }