All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2] fix CFI flash driver for 8-bit bus support
@ 2012-02-13  1:30 Luka Perkov
  2012-02-13 10:32 ` Wolfgang Denk
  0 siblings, 1 reply; 3+ messages in thread
From: Luka Perkov @ 2012-02-13  1:30 UTC (permalink / raw)
  To: u-boot

I'm not the author of version v1 of this patch but I need it to add
support for a new board. You can see patch v1 discussion here:

http://lists.denx.de/pipermail/u-boot/2011-April/089606.html

Changes from v1:
 * fix whitespaces
 * remove udelay(1); calls because they have been merged in a90b9575f3ff71de58672295504e9ebaa8f051b4
 * remove reset call in flash_erase()

Originally it was signed of by Aaron.

Signed-off-by: Aaron Williams <aaron.williams@caviumnetworks.com>
Tested-by: Luka Perkov <uboot@lukaperkov.net>
---

diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c
index 722c3fc..55d866e 100644
--- a/drivers/mtd/cfi_flash.c
+++ b/drivers/mtd/cfi_flash.c
@@ -11,6 +11,9 @@
  * Copyright (C) 2006
  * Tolunay Orkun <listmember@orkun.us>
  *
+ * Copyright (C) 2011 Cavium Networks, Inc.
+ * Aaron Williams <aaron.williams@caviumnetworks.com>
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -210,9 +213,11 @@ unsigned long flash_sector_size(flash_info_t *info, flash_sect_t sect)
 static inline void *
 flash_map (flash_info_t * info, flash_sect_t sect, uint offset)
 {
-	unsigned int byte_offset = offset * info->portwidth;
+	unsigned int byte_offset = offset * info->portwidth / info->chipwidth;
+	unsigned int addr = (info->start[sect] + byte_offset);
+	unsigned int mask = 0xffffffff << (info->portwidth - 1);
 
-	return (void *)(info->start[sect] + byte_offset);
+	return (void *)(addr & mask);
 }
 
 static inline void flash_unmap(flash_info_t *info, flash_sect_t sect,
@@ -398,6 +403,8 @@ void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
 #endif
 		flash_write64(cword.ll, addr);
 		break;
+	default:
+		debug ("fwc: Unknown port width %d\n", info->portwidth);
 	}
 
 	/* Ensure all the instructions are fully finished */
@@ -585,7 +592,6 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
 				prompt, info->start[sector],
 				flash_read_long (info, sector, 0));
 			flash_write_cmd (info, sector, 0, info->cmd_reset);
-			udelay(1);
 			return ERR_TIMOUT;
 		}
 		udelay (1);		/* also triggers watchdog */
@@ -753,12 +759,8 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c)
 static flash_sect_t find_sector (flash_info_t * info, ulong addr)
 {
 	static flash_sect_t saved_sector = 0; /* previously found sector */
-	static flash_info_t *saved_info = 0; /* previously used flash bank */
 	flash_sect_t sector = saved_sector;
 
-	if ((info != saved_info) || (sector >= info->sector_count))
-		sector = 0;
-
 	while ((info->start[sector] < addr)
 			&& (sector < info->sector_count - 1))
 		sector++;
@@ -770,7 +772,6 @@ static flash_sect_t find_sector (flash_info_t * info, ulong addr)
 		sector--;
 
 	saved_sector = sector;
-	saved_info = info;
 	return sector;
 }
 
@@ -834,12 +835,15 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
 
 	switch (info->portwidth) {
 	case FLASH_CFI_8BIT:
+		debug("%s: 8-bit 0x%02x\n", __func__, cword.c);
 		flash_write8(cword.c, dstaddr);
 		break;
 	case FLASH_CFI_16BIT:
+		debug("%s: 16-bit 0x%04x\n", __func__, cword.w);
 		flash_write16(cword.w, dstaddr);
 		break;
 	case FLASH_CFI_32BIT:
+		debug("%s: 32-bit 0x%08lx\n", __func__, cword.l);
 		flash_write32(cword.l, dstaddr);
 		break;
 	case FLASH_CFI_64BIT:
@@ -1053,6 +1057,8 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
 	flash_sect_t sect;
 	int st;
 
+	debug("%s: erasing sectors %d to %d\n", __func__, s_first, s_last);
+
 	if (info->flash_id != FLASH_MAN_CFI) {
 		puts ("Can't erase unknown flash type - aborted\n");
 		return 1;
@@ -1130,6 +1136,8 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
 				rcode = 1;
 			else if (flash_verbose)
 				putc ('.');
+		} else {
+			debug("\nSector %d is protected.\n", sect);
 		}
 	}
 
@@ -1586,8 +1594,7 @@ static void cmdset_amd_read_jedec_ids(flash_info_t *info)
 	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 */
-
-	manuId = 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;
@@ -1741,7 +1748,7 @@ static void flash_read_cfi (flash_info_t *info, void *buf,
 	unsigned int i;
 
 	for (i = 0; i < len; i++)
-		p[i] = flash_read_uchar(info, start + i);
+		p[i] = flash_read_uchar(info, start + (i * 2));
 }
 
 void __flash_cmd_reset(flash_info_t *info)
@@ -1762,21 +1769,38 @@ static int __flash_detect_cfi (flash_info_t * info, struct cfi_qry *qry)
 {
 	int cfi_offset;
 
-	/* Issue FLASH reset command */
-	flash_cmd_reset(info);
-
 	for (cfi_offset=0;
 	     cfi_offset < sizeof(flash_offset_cfi) / sizeof(uint);
 	     cfi_offset++) {
+		/* Issue FLASH reset command */
+		flash_cmd_reset(info);
 		flash_write_cmd (info, 0, flash_offset_cfi[cfi_offset],
 				 FLASH_CMD_CFI);
 		if (flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP, 'Q')
-		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
-		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
+		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'R')
+		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 4, 'Y')) {
 			flash_read_cfi(info, qry, FLASH_OFFSET_CFI_RESP,
 					sizeof(struct cfi_qry));
+#ifdef CONFIG_SYS_FLASH_INTERFACE_WIDTH
+			info->interface = CONFIG_SYS_FLASH_INTERFACE_WIDTH;
+#else
 			info->interface	= le16_to_cpu(qry->interface_desc);
-
+			/* Some flash chips can support multiple bus widths.
+			 * In this case, override the interface width and
+			 * limit it to the port width.
+			 */
+			if ((info->interface == FLASH_CFI_X8X16) &&
+			    (info->portwidth == FLASH_CFI_8BIT)) {
+				debug("Overriding 16-bit interface width to "
+				      " 8-bit port width.\n");
+				info->interface = FLASH_CFI_X8;
+			} else if ((info->interface == FLASH_CFI_X16X32) &&
+				 (info->portwidth == FLASH_CFI_16BIT)) {
+				debug("Overriding 16-bit interface width to "
+				      " 16-bit port width.\n");
+				info->interface = FLASH_CFI_X16;
+			}
+#endif
 			info->cfi_offset = flash_offset_cfi[cfi_offset];
 			debug ("device interface is %d\n",
 			       info->interface);
@@ -1787,8 +1811,8 @@ static int __flash_detect_cfi (flash_info_t * info, struct cfi_qry *qry)
 			       info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
 
 			/* calculate command offsets as in the Linux driver */
-			info->addr_unlock1 = 0x555;
-			info->addr_unlock2 = 0x2aa;
+			info->addr_unlock1 = 0xaaa;
+			info->addr_unlock2 = 0x555;
 
 			/*
 			 * modify the unlock address if we are
@@ -1822,8 +1846,11 @@ static int flash_detect_cfi (flash_info_t * info, struct cfi_qry *qry)
 		for (info->chipwidth = FLASH_CFI_BY8;
 		     info->chipwidth <= info->portwidth;
 		     info->chipwidth <<= 1)
-			if (__flash_detect_cfi(info, qry))
+			if (__flash_detect_cfi(info, qry)) {
+				debug("Found CFI flash, portwidth %d, chipwidth %d\n",
+				      info->portwidth, info->chipwidth);
 				return 1;
+			}
 	}
 	debug ("not found\n");
 	return 0;
@@ -1842,7 +1869,7 @@ static void flash_fixup_amd(flash_info_t *info, struct cfi_qry *qry)
 			/* CFI < 1.1, try to guess from device id */
 			if ((info->device_id & 0x80) != 0)
 				cfi_reverse_geometry(qry);
-		} else if (flash_read_uchar(info, info->ext_addr + 0xf) == 3) {
+		} else if (flash_read_uchar(info, info->ext_addr + 0x1e) == 3) {
 			/* CFI >= 1.1, deduct from top/bottom flag */
 			/* note: ext_addr is valid since cfi_version > 0 */
 			cfi_reverse_geometry(qry);
@@ -1919,14 +1946,15 @@ ulong flash_get_size (phys_addr_t base, int banknum)
 
 	if (flash_detect_cfi (info, &qry)) {
 		info->vendor = le16_to_cpu(qry.p_id);
-		info->ext_addr = le16_to_cpu(qry.p_adr);
+		info->ext_addr = le16_to_cpu(qry.p_adr) * 2;
+		debug("extended address is 0x%x\n", info->ext_addr);
 		num_erase_regions = qry.num_erase_regions;
 
 		if (info->ext_addr) {
 			info->cfi_version = (ushort) flash_read_uchar (info,
-						info->ext_addr + 3) << 8;
+						info->ext_addr + 6) << 8;
 			info->cfi_version |= (ushort) flash_read_uchar (info,
-						info->ext_addr + 4);
+						info->ext_addr + 8);
 		}
 
 #ifdef DEBUG
@@ -1974,13 +2002,9 @@ ulong flash_get_size (phys_addr_t base, int banknum)
 		debug ("device id is 0x%x\n", info->device_id);
 		debug ("device id2 is 0x%x\n", info->device_id2);
 		debug ("cfi version is 0x%04x\n", info->cfi_version);
-
+		debug ("port width: %d, chipwidth: %d, interface: %d\n",
+		       info->portwidth, info->chipwidth, info->interface);
 		size_ratio = info->portwidth / info->chipwidth;
-		/* if the chip is x8/x16 reduce the ratio by half */
-		if ((info->interface == FLASH_CFI_X8X16)
-		    && (info->chipwidth == FLASH_CFI_BY8)) {
-			size_ratio >>= 1;
-		}
 		debug ("size_ratio %d port %d bits chip %d bits\n",
 		       size_ratio, info->portwidth << CFI_FLASH_SHIFT_WIDTH,
 		       info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
@@ -2052,6 +2076,8 @@ ulong flash_get_size (phys_addr_t base, int banknum)
 				sect_cnt++;
 			}
 		}
+		debug ("port width: %d, chipwidth: %d, interface: %d\n",
+		       info->portwidth, info->chipwidth, info->interface);
 
 		info->sector_count = sect_cnt;
 		info->buffer_size = 1 << le16_to_cpu(qry.max_buf_write_size);
diff --git a/include/mtd/cfi_flash.h b/include/mtd/cfi_flash.h
index 3245b44..edcf9be 100644
--- a/include/mtd/cfi_flash.h
+++ b/include/mtd/cfi_flash.h
@@ -71,29 +71,29 @@
 #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
 

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH v2] fix CFI flash driver for 8-bit bus support
  2012-02-13  1:30 [U-Boot] [PATCH v2] fix CFI flash driver for 8-bit bus support Luka Perkov
@ 2012-02-13 10:32 ` Wolfgang Denk
  2012-02-14  0:51   ` Luka Perkov
  0 siblings, 1 reply; 3+ messages in thread
From: Wolfgang Denk @ 2012-02-13 10:32 UTC (permalink / raw)
  To: u-boot

Dear Luka Perkov,

In message <20120213013045.GA25085@w500.lan> you wrote:
> I'm not the author of version v1 of this patch but I need it to add
> support for a new board. You can see patch v1 discussion here:
> 
> http://lists.denx.de/pipermail/u-boot/2011-April/089606.html
> 
> Changes from v1:
>  * fix whitespaces
>  * remove udelay(1); calls because they have been merged in a90b9575f3ff71de58672295504e9ebaa8f051b4
>  * remove reset call in flash_erase()
> 
> Originally it was signed of by Aaron.

Patch change log and your comments do not belong into the commit
message; these should co into the comment section (below the "---"
line).

Instead, please add a description of the exact problem you are trying
to fix.

> index 722c3fc..55d866e 100644
> --- a/drivers/mtd/cfi_flash.c
> +++ b/drivers/mtd/cfi_flash.c
> @@ -11,6 +11,9 @@
>   * Copyright (C) 2006
>   * Tolunay Orkun <listmember@orkun.us>
>   *
> + * Copyright (C) 2011 Cavium Networks, Inc.
> + * Aaron Williams <aaron.williams@caviumnetworks.com>

We don't add (C) entries for minor patches - your credits are
sufficiently recorded in the git commit log.

>  static inline void flash_unmap(flash_info_t *info, flash_sect_t sect,
> @@ -398,6 +403,8 @@ void flash_write_cmd (flash_info_t * info, flash_sect_t sect,
>  #endif
>  		flash_write64(cword.ll, addr);
>  		break;
> +	default:
> +		debug ("fwc: Unknown port width %d\n", info->portwidth);

This makes little sense.  If this is a possible error, it should be a
printf().  But is it?

>  	/* Ensure all the instructions are fully finished */
> @@ -585,7 +592,6 @@ static int flash_status_check (flash_info_t * info, flash_sect_t sector,
>  				prompt, info->start[sector],
>  				flash_read_long (info, sector, 0));
>  			flash_write_cmd (info, sector, 0, info->cmd_reset);
> -			udelay(1);

This is an unrelated change.  It has no place in this patch.

Please submit separately, with respective comments for why uyou are
doing this, if you really want to change this.

>  static flash_sect_t find_sector (flash_info_t * info, ulong addr)
>  {
>  	static flash_sect_t saved_sector = 0; /* previously found sector */
> -	static flash_info_t *saved_info = 0; /* previously used flash bank */
>  	flash_sect_t sector = saved_sector;
>  
> -	if ((info != saved_info) || (sector >= info->sector_count))
> -		sector = 0;

I think this is bogus.   Please clean up your patch!


>  	saved_sector = sector;
> -	saved_info = info;

Ditto.

> @@ -1586,8 +1594,7 @@ static void cmdset_amd_read_jedec_ids(flash_info_t *info)
>  	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 */
> -
> -	manuId = flash_read_uchar (info, FLASH_OFFSET_MANUFACTURER_ID);
> +	manuId = flash_read_uchar(info, FLASH_OFFSET_MANUFACTURER_ID);

Coding style cleanups should go in a separate patch.  In any case,
keep the blank line.

>  	/* JEDEC JEP106Z specifies ID codes up to bank 7 */
>  	while (manuId == FLASH_CONTINUATION_CODE && bankId < 0x800) {
>  		bankId += 0x100;
> @@ -1741,7 +1748,7 @@ static void flash_read_cfi (flash_info_t *info, void *buf,
>  	unsigned int i;
>  
>  	for (i = 0; i < len; i++)
> -		p[i] = flash_read_uchar(info, start + i);
> +		p[i] = flash_read_uchar(info, start + (i * 2));

On which systems / in which configurations has this code been tested?

>  void __flash_cmd_reset(flash_info_t *info)
> @@ -1762,21 +1769,38 @@ static int __flash_detect_cfi (flash_info_t * info, struct cfi_qry *qry)
>  {
>  	int cfi_offset;
>  
> -	/* Issue FLASH reset command */
> -	flash_cmd_reset(info);

really?


>  	for (cfi_offset=0;
>  	     cfi_offset < sizeof(flash_offset_cfi) / sizeof(uint);
>  	     cfi_offset++) {
> +		/* Issue FLASH reset command */
> +		flash_cmd_reset(info);

really??

>  		if (flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP, 'Q')
> -		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
> -		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
> +		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'R')
> +		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 4, 'Y')) {
>  			flash_read_cfi(info, qry, FLASH_OFFSET_CFI_RESP,
>  					sizeof(struct cfi_qry));

Where has this been tested?

> +			/* Some flash chips can support multiple bus widths.
> +			 * In this case, override the interface width and
> +			 * limit it to the port width.
> +			 */

Incorrect multiline comment style.

> +			if ((info->interface == FLASH_CFI_X8X16) &&
> +			    (info->portwidth == FLASH_CFI_8BIT)) {
> +				debug("Overriding 16-bit interface width to "
> +				      " 8-bit port width.\n");
> +				info->interface = FLASH_CFI_X8;
> +			} else if ((info->interface == FLASH_CFI_X16X32) &&
> +				 (info->portwidth == FLASH_CFI_16BIT)) {
> +				debug("Overriding 16-bit interface width to "
> +				      " 16-bit port width.\n");
> +				info->interface = FLASH_CFI_X16;
> +			}
> +#endif

Which configurations have been actually tested?


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
On my planet, to rest is to rest -- to cease using energy. To me,  it
is  quite  illogical to run up and down on green grass, using energy,
instead of saving it.
	-- Spock, "Shore Leave", stardate 3025.2

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] [PATCH v2] fix CFI flash driver for 8-bit bus support
  2012-02-13 10:32 ` Wolfgang Denk
@ 2012-02-14  0:51   ` Luka Perkov
  0 siblings, 0 replies; 3+ messages in thread
From: Luka Perkov @ 2012-02-14  0:51 UTC (permalink / raw)
  To: u-boot

Hi Wolfgang,

thank you for your pointers. Like I have said I'm not the one that
submited v1 and in v2 I only changed what was pointed after v1.

On Mon, Feb 13, 2012 at 11:32:30AM +0100, Wolfgang Denk wrote:
> > -			udelay(1);
> 
> This is an unrelated change.  It has no place in this patch.

Yes, you are right. I'll leave this alone for now.

> Please submit separately, with respective comments for why uyou are
> doing this, if you really want to change this.
> 
> >  static flash_sect_t find_sector (flash_info_t * info, ulong addr)
> >  {
> >  	static flash_sect_t saved_sector = 0; /* previously found sector */
> > -	static flash_info_t *saved_info = 0; /* previously used flash bank */
> >  	flash_sect_t sector = saved_sector;
> >  
> > -	if ((info != saved_info) || (sector >= info->sector_count))
> > -		sector = 0;
> 
> I think this is bogus.   Please clean up your patch!

Yes, this probably is not needed.
 
> > -		p[i] = flash_read_uchar(info, start + i);
> > +		p[i] = flash_read_uchar(info, start + (i * 2));
> 
> On which systems / in which configurations has this code been tested?

Answer at the end of this mail.

> > -	/* Issue FLASH reset command */
> > -	flash_cmd_reset(info);
> 
> really?
> 
> >  	for (cfi_offset=0;
> >  	     cfi_offset < sizeof(flash_offset_cfi) / sizeof(uint);
> >  	     cfi_offset++) {
> > +		/* Issue FLASH reset command */
> > +		flash_cmd_reset(info);
> 
> really??

Nobody commented this in v1. I'll test without this change.

> >  		if (flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP, 'Q')
> > -		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
> > -		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
> > +		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'R')
> > +		    && flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 4, 'Y')) {
> >  			flash_read_cfi(info, qry, FLASH_OFFSET_CFI_RESP,
> >  					sizeof(struct cfi_qry));

...

> Which configurations have been actually tested?

DLink DNS323, board that I'm working on (orion5x, arm926ejs). Also it
was tested in v1:

http://lists.denx.de/pipermail/u-boot/2011-April/089611.html

I will test this also on a MIPS board that I have in the next few days.
I did not have time to do it today.

I'll resend v3 after more testing and code reading.

Regards,
Luka

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-02-14  0:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-13  1:30 [U-Boot] [PATCH v2] fix CFI flash driver for 8-bit bus support Luka Perkov
2012-02-13 10:32 ` Wolfgang Denk
2012-02-14  0:51   ` Luka Perkov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.