diff options
| author | wdenk <wdenk> | 2003-09-10 22:30:53 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-09-10 22:30:53 +0000 | 
| commit | 7205e4075d8b50e4dd89fe39ed03860b23cbb704 (patch) | |
| tree | 0dfa865e7087ff4ee07967a2531c91ff5645a802 /board/sixnet/flash.c | |
| parent | 149dded2b178bc0fb62cb6f61b87968d914b580a (diff) | |
| download | olio-uboot-2014.01-7205e4075d8b50e4dd89fe39ed03860b23cbb704.tar.xz olio-uboot-2014.01-7205e4075d8b50e4dd89fe39ed03860b23cbb704.zip | |
* Patches by Denis Peter, 9 Sep 2003:U-Boot-0_4_8
  add FAT support for IDE, SCSI and USB
* Patches by Gleb Natapov, 2 Sep 2003:
  - cleanup of POST code for unsupported architectures
  - MPC824x locks way0 of data cache for use as initial RAM;
    this patch unlocks it after relocation to RAM and invalidates
    the locked entries.
* Patch by Gleb Natapov, 30 Aug 2003:
  new I2C driver for mpc107 bridge. Now works from flash.
* Patch by Dave Ellis, 11 Aug 2003:
  - JFFS2: fix typo in common/cmd_jffs2.c
  - JFFS2: fix CFG_JFFS2_SORT_FRAGMENTS option
  - JFFS2: remove node version 0 warning
  - JFFS2: accept JFFS2 PADDING nodes
  - SXNI855T: add AM29LV800 support
  - SXNI855T: move environment from EEPROM to flash
  - SXNI855T: boot from JFFS2 in NOR or NAND flash
* Patch by Bill Hargen, 11 Aug 2003:
  fixes for I2C on MPC8240
  - fix i2c_write routine
  - fix iprobe command
  - eliminates use of global variables, plus dead code, cleanup.
Diffstat (limited to 'board/sixnet/flash.c')
| -rw-r--r-- | board/sixnet/flash.c | 44 | 
1 files changed, 44 insertions, 0 deletions
| diff --git a/board/sixnet/flash.c b/board/sixnet/flash.c index 225513acc..4ab6c1bdc 100644 --- a/board/sixnet/flash.c +++ b/board/sixnet/flash.c @@ -23,6 +23,10 @@  #include <common.h>  #include <mpc8xx.h> +/* environment.h defines the various CFG_ENV_... values in terms + * of whichever ones are given in the configuration file. + */ +#include <environment.h>  flash_info_t	flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips	*/ @@ -104,6 +108,19 @@ unsigned long flash_init (void)  		      &flash_info[0]);  #endif +#ifdef CFG_ENV_ADDR +	flash_protect ( FLAG_PROTECT_SET, +			CFG_ENV_ADDR, +			CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); +#endif + +#ifdef CFG_ENV_ADDR_REDUND +	flash_protect ( FLAG_PROTECT_SET, +			CFG_ENV_ADDR_REDUND, +			CFG_ENV_ADDR_REDUND + CFG_ENV_SIZE_REDUND - 1, +			&flash_info[0]); +#endif +  	return (size_b);  } @@ -154,6 +171,21 @@ static void flash_get_offsets (ulong base, flash_info_t *info)  		for( i = 0; i < info->sector_count; i++ )  			info->start[i] = base + (i * sect_size);  	} +	else if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_AMD +		 && (info->flash_id & FLASH_TYPEMASK) == FLASH_AM800T) { + +		int sect_size;		/* number of bytes/sector */ + +		sect_size = 0x00010000 * (sizeof(FPW)/2); + +		/* set up sector start address table (top boot sector type) */ +		for (i = 0; i < info->sector_count - 3; i++) +			info->start[i] = base + (i * sect_size); +		i = info->sector_count - 1; +		info->start[i--] = base + (info->size - 0x00004000) * (sizeof(FPW)/2); +		info->start[i--] = base + (info->size - 0x00006000) * (sizeof(FPW)/2); +		info->start[i--] = base + (info->size - 0x00008000) * (sizeof(FPW)/2); +	}  }  /*----------------------------------------------------------------------- @@ -196,6 +228,9 @@ void flash_print_info (flash_info_t *info)  	}  	switch (info->flash_id & FLASH_TYPEMASK) { +	case FLASH_AM800T: +		fmt = "29LV800B%s (8 Mbit, %s)\n"; +		break;  	case FLASH_AM640U:  		fmt = "29LV641D (64 Mbit, uniform sectors)\n";  		break; @@ -295,6 +330,12 @@ ulong flash_get_size (FPWV *addr, flash_info_t *info)  	/* Check 16 bits or 32 bits of ID so work on 32 or 16 bit bus. */  	if (info->flash_id != FLASH_UNKNOWN) switch (addr[1]) { +	case (FPW)AMD_ID_LV800T: +		info->flash_id += FLASH_AM800T; +		info->sector_count = 19; +		info->size = 0x00100000 * (sizeof(FPW)/2); +		break;				/* => 1 or 2 MiB	*/ +  	case (FPW)AMD_ID_LV640U:	/* 29LV640 and 29LV641 have same ID */  		info->flash_id += FLASH_AM640U;  		info->sector_count = 128; @@ -401,6 +442,7 @@ static void flash_sync_real_protect(flash_info_t *info)  	break;      case FLASH_AM640U: +    case FLASH_AM800T:      default:  	/* no hardware protect that we support */  	break; @@ -438,6 +480,7 @@ int	flash_erase (flash_info_t *info, int s_first, int s_last)  	case FLASH_28F320C3B:  	case FLASH_28F640C3B:  	case FLASH_AM640U: +	case FLASH_AM800T:  		break;  	case FLASH_UNKNOWN:  	default: @@ -735,6 +778,7 @@ int flash_real_protect (flash_info_t * info, long sector, int prot)  		break;  	case FLASH_AM640U: +	case FLASH_AM800T:  	default:  		/* no hardware protect that we support */  		info->protect[sector] = prot; |