All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot-Users] [PATCH] ARM Versatile PB926EJ-S, Rev.D: Added support for flash 28F256L30B
@ 2007-05-25  5:55 Josef Meser
  2007-05-25  6:03 ` Stefan Roese
  2007-05-25  6:56 ` Peter Pearse
  0 siblings, 2 replies; 6+ messages in thread
From: Josef Meser @ 2007-05-25  5:55 UTC (permalink / raw)
  To: u-boot

Current u-boot works with ARM Versatile PB926EJ-S, HW- Rev.C 
(NOR flash 28F256K3).
This patch adds support for 28F256L30B (asymmetrical sectors: 
4 small sectors at bottom) used on HW-Rev.D.

Signed-off-by: Josef Meser <josef.meser@odm.at>
---
 board/versatile/flash.c     |   84
+++++++++++++++++++++++++++++++++++--------
 include/configs/versatile.h |    2 +-
 include/flash.h             |   10 ++++--
 3 files changed, 77 insertions(+), 19 deletions(-)

diff --git a/board/versatile/flash.c b/board/versatile/flash.c
index 7153371..b79761f 100644
--- a/board/versatile/flash.c
+++ b/board/versatile/flash.c
@@ -31,7 +31,9 @@
 #include <common.h>
 #include <linux/byteorder/swab.h>
 
-#define PHYS_FLASH_SECT_SIZE	0x00020000	/* 256 KB sectors (x2)
*/
+#define PHYS_FLASH_SECT_SIZE		0x00020000 /* *2 = 256 KB
sectors */
+#define PHYS_FLASH_MAIN_SECT_SIZE	0x00020000 /* *2 = 256 KB
sectors */
+#define PHYS_FLASH_PARAM_SECT_SIZE	0x00008000 /* *2 =  64 KB
sectors */
 flash_info_t flash_info[CFG_MAX_FLASH_BANKS];	/* info for FLASH chips
*/
 
 /* Board support for 1 or 2 flash devices */
@@ -62,10 +64,19 @@ typedef struct OrgDef {
 
 
 /* Flash Organizations */
-OrgDef OrgIntel_28F256K3[] = {
+OrgDef OrgIntel_28F256K3[] = {		/* for Hw-Rev. C */
 	{256, 128 * 1024},		/* 256 * 128kBytes sectors */
 };
 
+OrgDef OrgIntel_28F256L18T[] = {
+	{255, 128 * 1024},		/* 255 * 128kBytes sectors */
+	{  4,  32 * 1024},		/*   4 *  32kBytes sectors */
+};
+
+OrgDef OrgIntel_28F256L30B[] = {	/* for Hw-Rev. D */
+	{  4,  32 * 1024},		/*   4 *  32kBytes sectors */
+	{255, 128 * 1024},		/* 255 * 128kBytes sectors */
+};
 
 
/*----------------------------------------------------------------------
-
  * Functions
@@ -132,23 +143,55 @@ static void flash_get_offsets (ulong base,
flash_info_t * info)
 	int i;
 	OrgDef *pOrgDef;
 
-	pOrgDef = OrgIntel_28F256K3;
-	if (info->flash_id == FLASH_UNKNOWN) {
+	switch (info->flash_id & FLASH_VENDMASK) {
+	case FLASH_MAN_INTEL:
+		break;
+	default:
 		return;
 	}
 
-	if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) {
+	switch (info->flash_id & FLASH_TYPEMASK) {
+	case FLASH_28F256K3:
+		pOrgDef = OrgIntel_28F256K3;
 		for (i = 0; i < info->sector_count; i++) {
+			info->start[i] = base + (i *
PHYS_FLASH_SECT_SIZE);
+			info->protect[i] = 0;
+		}
+		break;
+	case FLASH_28F256L18T:
+		pOrgDef = OrgIntel_28F256L18T;
+		for (i = 0; i < info->sector_count; i++) {
+			/* top param block type */
 			if (i > 255) {
-				info->start[i] = base + (i * 0x8000);
-				info->protect[i] = 0;
+				info->start[i] = base +
+					(255     *
PHYS_FLASH_MAIN_SECT_SIZE) +
+					((i -255)*
PHYS_FLASH_PARAM_SECT_SIZE);
+			} else {
+				info->start[i] = base +
+					(i       *
PHYS_FLASH_MAIN_SECT_SIZE);
+			}
+			info->protect[i] = 0;
+		}
+		break;
+	case FLASH_28F256L30B:
+		pOrgDef = OrgIntel_28F256L30B;
+		for (i = 0; i < info->sector_count; i++) {
+			/* bottom param block type */
+			if (i < 4) {
+				info->start[i] = base + 
+					(i       *
PHYS_FLASH_PARAM_SECT_SIZE);
 			} else {
 				info->start[i] = base +
-						(i *
PHYS_FLASH_SECT_SIZE);
-				info->protect[i] = 0;
+					((i - 3) *
PHYS_FLASH_MAIN_SECT_SIZE);
 			}
+			info->protect[i] = 0;
 		}
+		break;
+	default:
+		return;
 	}
+
+	return;
 }
 
 
/*----------------------------------------------------------------------
-
@@ -172,11 +215,14 @@ void flash_print_info (flash_info_t * info)
 	}
 
 	switch (info->flash_id & FLASH_TYPEMASK) {
+	case FLASH_28F256K3:
+		printf ("FLASH 28F256K3\n");
+		break;
 	case FLASH_28F256L18T:
 		printf ("FLASH 28F256L18T\n");
 		break;
-	case FLASH_28F256K3:
-		printf ("FLASH 28F256K3\n");
+	case FLASH_28F256L30B:
+		printf ("FLASH 28F256L30B\n");
 		break;
 	default:
 		printf ("Unknown Chip Type\n");
@@ -221,6 +267,7 @@ static ulong flash_get_size (FPW * addr,
flash_info_t * info)
 		info->flash_id = FLASH_UNKNOWN;
 		info->sector_count = 0;
 		info->size = 0;
+		printf ("Unknown flash vendor %0x\n", value);
 		addr[0] = (FPW) 0x00FF00FF;	/* restore read mode */
 		return (0);		/* no or unknown flash  */
 	}
@@ -229,20 +276,27 @@ static ulong flash_get_size (FPW * addr,
flash_info_t * info)
 	value = addr[1];	/* device ID        */
 	switch (value) {
 
+	case (FPW)(INTEL_ID_28F256K3):
+		info->flash_id += FLASH_28F256K3;
+		info->sector_count = 256;
+		info->size = 0x02000000;
+		break;
+
 	case (FPW) (INTEL_ID_28F256L18T):
 		info->flash_id += FLASH_28F256L18T;
 		info->sector_count = 259;
 		info->size = 0x02000000;
 		break;			/* => 32 MB     */
 
-	case (FPW)(INTEL_ID_28F256K3):
-		info->flash_id += FLASH_28F256K3;
-		info->sector_count = 256;
-		info->size = 0x02000000;
+	case (FPW)(INTEL_ID_28F256L30B):
+		info->flash_id += FLASH_28F256L30B;
+		info->sector_count = 259;
+		info->size = 0x02000000;	/* 32 MB */
 		break;
 
 	default:
 		info->flash_id = FLASH_UNKNOWN;
+		printf ("Unknown chip type %0x\n", value);
 		break;
 	}
 
diff --git a/include/configs/versatile.h b/include/configs/versatile.h
index 16db43b..fe26c42 100644
--- a/include/configs/versatile.h
+++ b/include/configs/versatile.h
@@ -166,7 +166,7 @@
 /* timeout values are in ticks */
 #define CFG_FLASH_ERASE_TOUT	(20*CFG_HZ)	/* Timeout for Flash
Erase */
 #define CFG_FLASH_WRITE_TOUT	(20*CFG_HZ)	/* Timeout for Flash
Write */
-#define CFG_MAX_FLASH_SECT	(256)
+#define CFG_MAX_FLASH_SECT	(259)
 
 #define PHYS_FLASH_1		(CFG_FLASH_BASE)
 
diff --git a/include/flash.h b/include/flash.h
index 43b9c6b..c1e327f 100644
--- a/include/flash.h
+++ b/include/flash.h
@@ -284,10 +284,12 @@ extern void flash_read_factory_serial(flash_info_t
* info, void * buffer, int of
 #define INTEL_ID_28F640J3A  0x00170017	/*  64M = 128K x  64	*/
 #define INTEL_ID_28F128J3A  0x00180018	/* 128M = 128K x 128	*/
 #define INTEL_ID_28F256J3A  0x001D001D	/* 256M = 128K x 256	*/
+#define INTEL_ID_28F64K3    0x88018801	/*  64M =  32K x 256 */
+#define INTEL_ID_28F128K3   0x88028802	/* 128M =  64K x 256 */
+#define INTEL_ID_28F256K3   0x88038803	/* 256M = 128K x 256 */
 #define INTEL_ID_28F256L18T 0x880D880D	/* 256M = 128K x 255 + 32k x 4
*/
-#define INTEL_ID_28F64K3    0x88018801	/*  64M =  32K x 255 + 32k x 4
*/
-#define INTEL_ID_28F128K3   0x88028802	/* 128M =  64K x 255 + 32k x 4
*/
-#define INTEL_ID_28F256K3   0x88038803	/* 256M = 128K x 255 + 32k x 4
*/
+#define INTEL_ID_28F256L30T 0x88138813	/* 256M = 128K x 255 + 32k x 4
*/
+#define INTEL_ID_28F256L30B 0x88168816	/* 256M = 128K x 255 + 32k x 4
*/
 #define INTEL_ID_28F64P30T  0x88178817	/*  64M =  32K x 255 + 32k x 4
*/
 #define INTEL_ID_28F64P30B  0x881A881A	/*  64M =  32K x 255 + 32k x 4
*/
 #define INTEL_ID_28F128P30T 0x88188818	/* 128M =  64K x 255 + 32k x 4
*/
@@ -420,6 +422,8 @@ extern void flash_read_factory_serial(flash_info_t *
info, void * buffer, int of
 #define FLASH_28F64K3	0x00B4		/* Intel 28F64K3   (  64M)
*/
 #define FLASH_28F128K3	0x00B6		/* Intel 28F128K3  ( 128M = 8M x
16 )	*/
 #define FLASH_28F256K3	0x00B8		/* Intel 28F256K3  ( 256M = 16M
x 16 )	*/
+#define FLASH_28F256L30T 0x00B9		/* Intel 28F256L30T (
256M = 16M x 16 )	*/
+#define FLASH_28F256L30B 0x00BA		/* Intel 28F256L30B (
256M = 16M x 16 )	*/
 
 #define FLASH_28F320J3A 0x00C0		/* INTEL 28F320J3A ( 32M = 128K
x  32)	*/
 #define FLASH_28F640J3A 0x00C2		/* INTEL 28F640J3A ( 64M = 128K
x  64)	*/
-- 
1.5.0.2

^ permalink raw reply related	[flat|nested] 6+ messages in thread
* [U-Boot-Users] [PATCH] ARM Versatile PB926EJ-S, Rev.D: Added support for flash 28F256L30B
@ 2007-05-25  7:12 Josef Meser
  2007-05-25  7:29 ` Stefan Roese
  0 siblings, 1 reply; 6+ messages in thread
From: Josef Meser @ 2007-05-25  7:12 UTC (permalink / raw)
  To: u-boot

> From: Stefan Roese [mailto:sr at denx.de] 
> Sent: Friday, May 25, 2007 8:03 AM
> To: u-boot-users at lists.sourceforge.net
> Cc: Josef Meser; Peter Pearse
> Subject: Re: [U-Boot-Users] [PATCH] ARM Versatile PB926EJ-S, 
> Rev.D: Added support for flash 28F256L30B
> 
> Hi Josef,
> 
> On Friday 25 May 2007, Josef Meser wrote:
> > Current u-boot works with ARM Versatile PB926EJ-S, HW- Rev.C
> > (NOR flash 28F256K3).
> > This patch adds support for 28F256L30B (asymmetrical sectors:
> > 4 small sectors at bottom) used on HW-Rev.D.
> 
> Your patch is line wrapped. Please fix and resend.

Hi Stefan,

sorry about that. Yesterday I sent the patch to myself and it 
was not line wrapped. Now I learned that this is a feature of 
our famous M$-MUA, which does line wraps in plain text messages, 
when sending to "Internet addresses".
I will fix this by using a real MUA.

> One question: Why can't you use the common CFI driver on this board? 

I have to admit that I am not familiar with the CFI driver. I made the 
patch for u-boot-1.1.5 which we used up to now. There it makes a 

[]> make versatile_config
[]> make all

work on the new HW. Rev.D.

As i did not find the new type of flash in the current source tree, 
I submitted my changes. This changes are minimal (in terms of size 
and function) for me, which does not mean that they are optimal 
for someone who is more into u-boot.

Regards,
Josef

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

end of thread, other threads:[~2007-05-25  8:14 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-25  5:55 [U-Boot-Users] [PATCH] ARM Versatile PB926EJ-S, Rev.D: Added support for flash 28F256L30B Josef Meser
2007-05-25  6:03 ` Stefan Roese
2007-05-25  6:56 ` Peter Pearse
  -- strict thread matches above, loose matches on Subject: below --
2007-05-25  7:12 Josef Meser
2007-05-25  7:29 ` Stefan Roese
2007-05-25  8:14   ` Peter Pearse

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.