[U-Boot-Users] [PATCH] ARM Versatile PB926EJ-S, Rev.D: Added support for flash 28F256L30B
Peter Pearse
peter.pearse at arm.com
Fri May 25 08:56:47 CEST 2007
Received
> -----Original Message-----
> From: Josef Meser [mailto:Josef.Meser at odm.at]
> Sent: 25 May 2007 06:56
> To: Peter Pearse
> Cc: u-boot-users at lists.sourceforge.net
> Subject: [PATCH] ARM Versatile PB926EJ-S, Rev.D: Added
> support for flash 28F256L30B
>
> 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 at 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
>
More information about the U-Boot
mailing list