Fix cfi failure with Spansion Flash (Spansion Flash Devices have a different offset...
authorStefano Babic <sbabic@denx.de>
Mon, 11 Dec 2006 23:22:42 +0000 (00:22 +0100)
committerWolfgang Denk <wd@denx.de>
Sun, 24 Dec 2006 00:27:41 +0000 (01:27 +0100)
drivers/cfi_flash.c
include/flash.h

index 9b10220fc74520e48befc9a4d2b8664f1337494d..68a2c71bb9b3ada072f17f452634cac1acec626a 100644 (file)
@@ -1149,6 +1149,7 @@ static int flash_detect_cfi (flash_info_t * info)
                            && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
                            && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
                                info->interface = flash_read_ushort (info, 0, FLASH_OFFSET_INTERFACE);
+                               info->cfi_offset=flash_offset_cfi[cfi_offset];
                                debug ("device interface is %d\n",
                                       info->interface);
                                debug ("found port %d chip %d ",
@@ -1193,7 +1194,7 @@ ulong flash_get_size (ulong base, int banknum)
                info->vendor = flash_read_ushort (info, 0,
                                        FLASH_OFFSET_PRIMARY_VENDOR);
                flash_read_jedec_ids (info);
-               flash_write_cmd (info, 0, FLASH_OFFSET_CFI, FLASH_CMD_CFI);
+               flash_write_cmd (info, 0, info->cfi_offset, FLASH_CMD_CFI);
                num_erase_regions = flash_read_uchar (info,
                                        FLASH_OFFSET_NUM_ERASE_REGIONS);
                info->ext_addr = flash_read_ushort (info, 0,
index 9c57cbc427c90bd9c0a68ea80df251ae0f2cc6cb..8b7e824cca08d495379b7b528a15738ee3e9e7ec 100644 (file)
@@ -51,6 +51,7 @@ typedef struct {
        ushort  device_id2;             /* extended device id                   */
        ushort  ext_addr;               /* extended query table address         */
        ushort  cfi_version;            /* cfi version                          */
+       ushort  cfi_offset;             /* offset for cfi query                 */
 #endif
 } flash_info_t;