diff options
| author | Stefan Roese <sr@denx.de> | 2005-11-29 18:18:21 +0100 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2005-11-29 18:18:21 +0100 | 
| commit | 6e7fb6eaa515e15c2b86451d7853c2611713e872 (patch) | |
| tree | 512e4c08baa1047310056989a4a651fe4aa10d18 /board/amcc/luan/flash.c | |
| parent | 1178a412d2c71cf8be61738153f11c99ce9653a5 (diff) | |
| download | olio-uboot-2014.01-6e7fb6eaa515e15c2b86451d7853c2611713e872.tar.xz olio-uboot-2014.01-6e7fb6eaa515e15c2b86451d7853c2611713e872.zip | |
Add support for AMCC 440SP, add support for AMCC Luan 440SP eval board.
Patch by John Otken, 23 Nov 2005
Diffstat (limited to 'board/amcc/luan/flash.c')
| -rw-r--r-- | board/amcc/luan/flash.c | 111 | 
1 files changed, 111 insertions, 0 deletions
| diff --git a/board/amcc/luan/flash.c b/board/amcc/luan/flash.c new file mode 100644 index 000000000..d3c3c0d05 --- /dev/null +++ b/board/amcc/luan/flash.c @@ -0,0 +1,111 @@ +/* + * (C) Copyright 2002 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * (C) Copyright 2002 Jun Gu <jung@artesyncp.com> + * Add support for Am29F016D and dynamic switch setting. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Modified 4/5/2001 + * Wait for completion of each sector erase command issued + * 4/5/2001 + * Chris Hallinan - DS4.COM, Inc. - clh@net1plus.com + */ + +#include <common.h> +#include <ppc4xx.h> +#include <asm/processor.h> + +#undef DEBUG +#ifdef DEBUG +#define DEBUGF(x...) printf(x) +#else +#define DEBUGF(x...) +#endif				/* DEBUG */ + +static unsigned long flash_addr_table[1][CFG_MAX_FLASH_BANKS] = { +	{0xff900000, 0xff980000, 0xffc00000},	/* 0:000: configuraton 3 */ +}; + +/* + * include common flash code (for amcc boards) + */ +#include "../common/flash.c" + +/*----------------------------------------------------------------------- + * Functions + */ +static ulong flash_get_size(vu_long * addr, flash_info_t * info); + +unsigned long flash_init(void) +{ +	unsigned long total_b = 0; +	unsigned long size_b[CFG_MAX_FLASH_BANKS]; +	unsigned short index = 0; +	int i; + +	/* read FPGA base register FPGA_REG0 */ + +	DEBUGF("\n"); +	DEBUGF("FLASH: Index: %d\n", index); + +	/* Init: no FLASHes known */ +	for (i = 0; i < CFG_MAX_FLASH_BANKS; ++i) { +		flash_info[i].flash_id = FLASH_UNKNOWN; +		flash_info[i].sector_count = -1; +		flash_info[i].size = 0; + +		/* check whether the address is 0 */ +		if (flash_addr_table[index][i] == 0) { +			continue; +		} + +		/* call flash_get_size() to initialize sector address */ +		size_b[i] = flash_get_size((vu_long *) +					   flash_addr_table[index][i], +					   &flash_info[i]); +		flash_info[i].size = size_b[i]; +		if (flash_info[i].flash_id == FLASH_UNKNOWN) { +			printf("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n", +			       i, size_b[i], size_b[i] << 20); +			flash_info[i].sector_count = -1; +			flash_info[i].size = 0; +		} + +		/* Monitor protection ON by default */ +		(void)flash_protect(FLAG_PROTECT_SET, CFG_MONITOR_BASE, +				    CFG_MONITOR_BASE + CFG_MONITOR_LEN - 1, +				    &flash_info[2]); +#ifdef CFG_ENV_IS_IN_FLASH +		(void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR, +				    CFG_ENV_ADDR + CFG_ENV_SECT_SIZE - 1, +				    &flash_info[2]); +		(void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR_REDUND, +				    CFG_ENV_ADDR_REDUND + CFG_ENV_SECT_SIZE - 1, +				    &flash_info[2]); +#endif + +		total_b += flash_info[i].size; +	} + +	return total_b; +} |