mtd: cfi_flash: Fix CFI flash driver for 8-bit bus support
This commit is based on that patch from aaron.williams@caviumnetworks.com with same commit title. pulled the same code changes into current u-boot tree. http://patchwork.ozlabs.org/patch/140863/ http://lists.denx.de/pipermail/u-boot/2011-April/089606.html This patch corrects the addresses used when working with Spansion/AMD FLASH chips. Addressing for 8 and 16 bits is almost identical except in the 16-bit case the LSB of the address is always 0. The confusion arose because the addresses in the datasheet for 16-bit mode are word addresses but this code assumed it was byte addresses. I have only been able to test this on our Octeon boards which use either an 8-bit or 16-bit bus. I have not tested the case where there's an 8-bit part on a 16-bit bus. This patch also adds some delays as suggested by Spansion. If a part can be both 8 and 16-bits, it forces it to work in 8-bit mode if an 8-bit bus is detected. Apart from the pulled changes, fixed few minor code cleanups and tested on 256M29EW, 512M29EW flashes. Before this fix: --------------- Bank # 1: CFI conformant flash (8 x 8) Size: 64 MB in 512 Sectors AMD Standard command set, Manufacturer ID: 0xFF, Device ID: 0xFF Erase timeout: 4096 ms, write timeout: 2 ms Buffer write timeout: 5 ms, buffer size: 1024 bytes After this fix: -------------- Bank # 1: CFI conformant flash (8 x 8) Size: 64 MB in 512 Sectors AMD Standard command set, Manufacturer ID: 0x89, Device ID: 0x7E2301 Erase timeout: 4096 ms, write timeout: 2 ms Buffer write timeout: 5 ms, buffer size: 1024 bytes Signed-off-by: Aaron Williams <aaron.williams@caviumnetworks.com> Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com> Tested-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
This commit is contained in:
committed by
Stefan Roese
parent
5644369450
commit
239cb9d904
@@ -78,29 +78,30 @@
|
||||
#define FLASH_CONTINUATION_CODE 0x7F
|
||||
|
||||
#define FLASH_OFFSET_MANUFACTURER_ID 0x00
|
||||
#define FLASH_OFFSET_DEVICE_ID 0x01
|
||||
#define FLASH_OFFSET_DEVICE_ID2 0x0E
|
||||
#define FLASH_OFFSET_DEVICE_ID3 0x0F
|
||||
#define FLASH_OFFSET_CFI 0x55
|
||||
#define FLASH_OFFSET_DEVICE_ID 0x02
|
||||
#define FLASH_OFFSET_DEVICE_ID2 0x1C
|
||||
#define FLASH_OFFSET_DEVICE_ID3 0x1E
|
||||
#define FLASH_OFFSET_CFI 0xAA
|
||||
|
||||
#define FLASH_OFFSET_CFI_ALT 0x555
|
||||
#define FLASH_OFFSET_CFI_RESP 0x10
|
||||
#define FLASH_OFFSET_PRIMARY_VENDOR 0x13
|
||||
#define FLASH_OFFSET_CFI_RESP 0x20
|
||||
#define FLASH_OFFSET_PRIMARY_VENDOR 0x26
|
||||
/* extended query table primary address */
|
||||
#define FLASH_OFFSET_EXT_QUERY_T_P_ADDR 0x15
|
||||
#define FLASH_OFFSET_EXT_QUERY_T_P_ADDR 0x2A
|
||||
#define FLASH_OFFSET_WTOUT 0x1F
|
||||
#define FLASH_OFFSET_WBTOUT 0x20
|
||||
#define FLASH_OFFSET_ETOUT 0x21
|
||||
#define FLASH_OFFSET_CETOUT 0x22
|
||||
#define FLASH_OFFSET_WMAX_TOUT 0x23
|
||||
#define FLASH_OFFSET_WBMAX_TOUT 0x24
|
||||
#define FLASH_OFFSET_EMAX_TOUT 0x25
|
||||
#define FLASH_OFFSET_CEMAX_TOUT 0x26
|
||||
#define FLASH_OFFSET_SIZE 0x27
|
||||
#define FLASH_OFFSET_INTERFACE 0x28
|
||||
#define FLASH_OFFSET_BUFFER_SIZE 0x2A
|
||||
#define FLASH_OFFSET_NUM_ERASE_REGIONS 0x2C
|
||||
#define FLASH_OFFSET_ERASE_REGIONS 0x2D
|
||||
#define FLASH_OFFSET_PROTECT 0x02
|
||||
#define FLASH_OFFSET_WBTOUT 0x40
|
||||
#define FLASH_OFFSET_ETOUT 0x4A
|
||||
#define FLASH_OFFSET_CETOUT 0x44
|
||||
#define FLASH_OFFSET_WMAX_TOUT 0x46
|
||||
#define FLASH_OFFSET_WBMAX_TOUT 0x48
|
||||
#define FLASH_OFFSET_EMAX_TOUT 0x4A
|
||||
#define FLASH_OFFSET_CEMAX_TOUT 0x4C
|
||||
#define FLASH_OFFSET_SIZE 0x4E
|
||||
#define FLASH_OFFSET_INTERFACE 0x50
|
||||
#define FLASH_OFFSET_BUFFER_SIZE 0x54
|
||||
#define FLASH_OFFSET_NUM_ERASE_REGIONS 0x58
|
||||
#define FLASH_OFFSET_ERASE_REGIONS 0x5A
|
||||
#define FLASH_OFFSET_PROTECT 0x04
|
||||
#define FLASH_OFFSET_USER_PROTECTION 0x85
|
||||
#define FLASH_OFFSET_INTEL_PROTECTION 0x81
|
||||
|
||||
|
||||
Reference in New Issue
Block a user