]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/cfi_flash.c
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
[u-boot] / drivers / mtd / cfi_flash.c
index 81ac5d318a108b28150c14d8f2b56d3ae914bb54..6eea49a11ea752c1b77ccade8447ea8b9a601984 100644 (file)
 #define ATM_CMD_SOFTLOCK_START         0x80
 #define ATM_CMD_LOCK_SECT              0x40
 
+#define FLASH_CONTINUATION_CODE                0x7F
+
 #define FLASH_OFFSET_MANUFACTURER_ID   0x00
 #define FLASH_OFFSET_DEVICE_ID         0x01
 #define FLASH_OFFSET_DEVICE_ID2                0x0E
@@ -1001,7 +1003,7 @@ static int flash_write_cfibuffer (flash_info_t * info, ulong dest, uchar * cp,
 #endif
                flash_write_cmd(info, sector, offset, AMD_CMD_WRITE_TO_BUFFER);
                cnt = len >> shift;
-               flash_write_cmd(info, sector, offset, (uchar)cnt - 1);
+               flash_write_cmd(info, sector, offset, cnt - 1);
 
                switch (info->portwidth) {
                case FLASH_CFI_8BIT:
@@ -1541,13 +1543,22 @@ static int cmdset_intel_init(flash_info_t *info, struct cfi_qry *qry)
 
 static void cmdset_amd_read_jedec_ids(flash_info_t *info)
 {
+       ushort bankId = 0;
+       uchar  manuId;
+
        flash_write_cmd(info, 0, 0, AMD_CMD_RESET);
        flash_unlock_seq(info, 0);
        flash_write_cmd(info, 0, info->addr_unlock1, FLASH_CMD_READ_ID);
        udelay(1000); /* some flash are slow to respond */
 
-       info->manufacturer_id = flash_read_uchar (info,
-                                       FLASH_OFFSET_MANUFACTURER_ID);
+       manuId = flash_read_uchar (info, FLASH_OFFSET_MANUFACTURER_ID);
+       /* JEDEC JEP106Z specifies ID codes up to bank 7 */
+       while (manuId == FLASH_CONTINUATION_CODE && bankId < 0x800) {
+               bankId += 0x100;
+               manuId = flash_read_uchar (info,
+                       bankId | FLASH_OFFSET_MANUFACTURER_ID);
+       }
+       info->manufacturer_id = manuId;
 
        switch (info->chipwidth){
        case FLASH_CFI_8BIT: