From 53879b17382fa4108c57128aefd9a04305607e0a Mon Sep 17 00:00:00 2001 From: Jagannadha Sutradharudu Teki Date: Fri, 26 Feb 2021 08:51:49 +0100 Subject: cfi_flash: Fix detection of 8-bit bus flash devices via address shift We had a problem detecting 8/16bit flash devices connected only via 8bits to the SoC for quite a while. Commit 239cb9d9 [mtd: cfi_flash: Fix CFI flash driver for 8-bit bus support] finally fixed this 8-bit bus support. But also broke some other boards using this cfi driver. So this patch had to be reverted. I spotted a different, simpler approach for this 8-bit bus support on the barebox mailing list posted by Oleksij Rempel : http://www.spinics.net/lists/u-boot-v2/msg14687.html Here the commit text: " Many cfi chips support 16 and 8 bit modes. Most important difference is use of so called "Q15/A-1" pin. In 16bit mode this pin is used for data IO. In 8bit mode, it is an address input which add one more least significant bit (LSB). In this case we should shift all adresses by one: For example 0xaa << 1 = 0x154 " This patch now is a port of this barebox patch to U-Boot. Along with the change w.r.t from barebox, Some flash chips can support multiple bus widths, override the interface width and limit it to the port width. Tested on 16-bit Spansion flash on sequoia. Tested 8-bit flashes like 256M29EW, 512M29EW. Signed-off-by: Stefan Roese Tested-by: Jagannadha Sutradharudu Teki Cc: Jagannadha Sutradharudu Teki Cc: Aaron Williams Cc: Chandrakala Chavva Cc: Andre Przywara Cc: Vignesh Raghavendra Cc: Simon Glass Cc: Mario Six Cc: York Sun Cc: Marek Vasut --- include/flash.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'include/flash.h') diff --git a/include/flash.h b/include/flash.h index 3bf6b22..42b18a6 100644 --- a/include/flash.h +++ b/include/flash.h @@ -24,6 +24,8 @@ typedef struct { #ifdef CONFIG_SYS_FLASH_CFI uchar portwidth; /* the width of the port */ uchar chipwidth; /* the width of the chip */ + uchar chip_lsb; /* extra Least Significant Bit in the */ + /* address of chip */ ushort buffer_size; /* # of bytes in write buffer */ ulong erase_blk_tout; /* maximum block erase timeout */ ulong write_tout; /* maximum write timeout */ -- cgit v1.1