diff options
| author | Benoît Thébaudeau <benoit.thebaudeau@advansee.com> | 2012-08-13 22:48:56 +0200 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2012-09-17 19:42:46 -0500 | 
| commit | 5d818a2821c3c7cf350ee4a2c67a11f8e1039af0 (patch) | |
| tree | 6448c0917ab8d37d2661ab6443b18548656179d2 /nand_spl | |
| parent | 365b2c0761040764953e659f3385840e33823807 (diff) | |
| download | olio-uboot-2014.01-5d818a2821c3c7cf350ee4a2c67a11f8e1039af0.tar.xz olio-uboot-2014.01-5d818a2821c3c7cf350ee4a2c67a11f8e1039af0.zip | |
spl mxc nand: Merge duplicated code
Merge duplicated code into functions, which is better for SPL size too.
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Cc: Scott Wood <scottwood@freescale.com>
Cc: Stefano Babic <sbabic@denx.de>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'nand_spl')
| -rw-r--r-- | nand_spl/nand_boot_fsl_nfc.c | 50 | 
1 files changed, 23 insertions, 27 deletions
| diff --git a/nand_spl/nand_boot_fsl_nfc.c b/nand_spl/nand_boot_fsl_nfc.c index b90f93e3b..b98fe4162 100644 --- a/nand_spl/nand_boot_fsl_nfc.c +++ b/nand_spl/nand_boot_fsl_nfc.c @@ -83,37 +83,35 @@ static void nfc_nand_command(unsigned short command)  	nfc_wait_ready();  } +static void nfc_nand_address(unsigned short address) +{ +	writew(address, &nfc->flash_addr); +	writew(NFC_ADDR, &nfc->config2); +	nfc_wait_ready(); +} +  static void nfc_nand_page_address(unsigned int page_address)  {  	unsigned int page_count; -	writew(0x00, &nfc->flash_addr); -	writew(NFC_ADDR, &nfc->config2); -	nfc_wait_ready(); +	nfc_nand_address(0x00);  	/* code only for large page flash */ -	if (CONFIG_SYS_NAND_PAGE_SIZE > 512) { -		writew(0x00, &nfc->flash_addr); -		writew(NFC_ADDR, &nfc->config2); -		nfc_wait_ready(); -	} +	if (CONFIG_SYS_NAND_PAGE_SIZE > 512) +		nfc_nand_address(0x00);  	page_count = CONFIG_SYS_NAND_SIZE / CONFIG_SYS_NAND_PAGE_SIZE;  	if (page_address <= page_count) {  		page_count--; /* transform 0x01000000 to 0x00ffffff */  		do { -			writew(page_address & 0xff, &nfc->flash_addr); -			writew(NFC_ADDR, &nfc->config2); -			nfc_wait_ready(); +			nfc_nand_address(page_address & 0xff);  			page_address = page_address >> 8;  			page_count = page_count >> 8;  		} while (page_count);  	} -	writew(0x00, &nfc->flash_addr); -	writew(NFC_ADDR, &nfc->config2); -	nfc_wait_ready(); +	nfc_nand_address(0x00);  }  static void nfc_nand_data_output(void) @@ -149,12 +147,8 @@ static int nfc_nand_check_ecc(void)  	return readw(&nfc->ecc_status_result);  } -static int nfc_read_page(unsigned int page_address, unsigned char *buf) +static void nfc_nand_read_page(unsigned int page_address)  { -	int i; -	u32 *src; -	u32 *dst; -  	writew(0, &nfc->buf_addr); /* read in first 0 buffer */  	nfc_nand_command(NAND_CMD_READ0);  	nfc_nand_page_address(page_address); @@ -163,6 +157,15 @@ static int nfc_read_page(unsigned int page_address, unsigned char *buf)  		nfc_nand_command(NAND_CMD_READSTART);  	nfc_nand_data_output(); /* fill the main buffer 0 */ +} + +static int nfc_read_page(unsigned int page_address, unsigned char *buf) +{ +	int i; +	u32 *src; +	u32 *dst; + +	nfc_nand_read_page(page_address);  	if (nfc_nand_check_ecc())  		return -1; @@ -188,14 +191,7 @@ static int is_badblock(int pagenumber)  	/* Check the first two pages for bad block markers */  	for (page = pagenumber; page < pagenumber + 2; page++) { -		writew(0, &nfc->buf_addr); /* read in first 0 buffer */ -		nfc_nand_command(NAND_CMD_READ0); -		nfc_nand_page_address(page); - -		if (CONFIG_SYS_NAND_PAGE_SIZE > 512) -			nfc_nand_command(NAND_CMD_READSTART); - -		nfc_nand_data_output(); /* fill the main buffer 0 */ +		nfc_nand_read_page(page);  		src = (u32 *)&nfc->spare_area[0][0]; |