mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	Refresh uboot-lantiq patches. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> SVN-Revision: 40546
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From e17398316e82d8b28217232b4fd6030c65138e74 Mon Sep 17 00:00:00 2001
 | |
| From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | |
| Date: Mon, 12 Aug 2013 01:18:00 +0200
 | |
| Subject: MIPS: lantiq: add NAND SPL support
 | |
| 
 | |
| Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
 | |
| 
 | |
| --- a/arch/mips/cpu/mips32/lantiq-common/spl.c
 | |
| +++ b/arch/mips/cpu/mips32/lantiq-common/spl.c
 | |
| @@ -8,6 +8,7 @@
 | |
|  #include <image.h>
 | |
|  #include <version.h>
 | |
|  #include <spi_flash.h>
 | |
| +#include <nand.h>
 | |
|  #include <linux/compiler.h>
 | |
|  #include <lzma/LzmaDec.h>
 | |
|  #include <linux/lzo.h>
 | |
| @@ -63,6 +64,18 @@
 | |
|  #define spl_boot_nor_flash	0
 | |
|  #endif
 | |
|  
 | |
| +#if defined(CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH) && defined(CONFIG_SYS_BOOT_NANDSPL)
 | |
| +#define spl_boot_nand_flash	1
 | |
| +#else
 | |
| +#define spl_boot_nand_flash	0
 | |
| +#ifndef CONFIG_SYS_NAND_U_BOOT_OFFS
 | |
| +#define CONFIG_SYS_NAND_U_BOOT_OFFS	0
 | |
| +#endif
 | |
| +#ifndef CONFIG_SYS_NAND_PAGE_SIZE
 | |
| +#define CONFIG_SYS_NAND_PAGE_SIZE	0
 | |
| +#endif
 | |
| +#endif
 | |
| +
 | |
|  #define spl_sync()	__asm__ __volatile__("sync");
 | |
|  
 | |
|  struct spl_image {
 | |
| @@ -337,6 +350,58 @@ static int spl_load_nor_flash(struct spl
 | |
|  	return ret;
 | |
|  }
 | |
|  
 | |
| +static int spl_load_nand_flash(struct spl_image *spl)
 | |
| +{
 | |
| +	image_header_t *hdr;
 | |
| +	int ret;
 | |
| +	unsigned long loadaddr;
 | |
| +
 | |
| +	/*
 | |
| +	 * Image format:
 | |
| +	 *
 | |
| +	 * - 12 byte non-volatile bootstrap header
 | |
| +	 * - SPL binary
 | |
| +	 * - 12 byte non-volatile bootstrap header
 | |
| +	 * - padding bytes up to CONFIG_SYS_NAND_U_BOOT_OFFS
 | |
| +	 * - 64 byte U-Boot mkimage header
 | |
| +	 * - U-Boot binary
 | |
| +	 */
 | |
| +	spl->data_addr = CONFIG_SYS_NAND_U_BOOT_OFFS;
 | |
| +
 | |
| +	spl_puts("SPL: initializing NAND flash\n");
 | |
| +	nand_init();
 | |
| +
 | |
| +	spl_debug("SPL: reading image header at page offset %lx\n",
 | |
| +		  spl->data_addr);
 | |
| +
 | |
| +	hdr = (image_header_t *) CONFIG_LOADADDR;
 | |
| +	ret = nand_spl_load_image(spl->data_addr,
 | |
| +				  CONFIG_SYS_NAND_PAGE_SIZE, hdr);
 | |
| +	if (ret)
 | |
| +		return ret;
 | |
| +
 | |
| +	spl_debug("SPL: checking image header at address %p\n", hdr);
 | |
| +
 | |
| +	ret = spl_parse_image(hdr, spl);
 | |
| +	if (ret)
 | |
| +		return ret;
 | |
| +
 | |
| +	if (spl_is_compressed(spl))
 | |
| +		loadaddr = CONFIG_LOADADDR;
 | |
| +	else
 | |
| +		loadaddr = spl->entry_addr;
 | |
| +
 | |
| +	spl_puts("SPL: loading U-Boot to RAM\n");
 | |
| +
 | |
| +	ret = nand_spl_load_image(spl->data_addr, spl->data_size,
 | |
| +				  (void *) loadaddr);
 | |
| +
 | |
| +	if (spl_is_compressed(spl))
 | |
| +		ret = spl_uncompress(spl, loadaddr);
 | |
| +
 | |
| +	return ret;
 | |
| +}
 | |
| +
 | |
|  static int spl_load(struct spl_image *spl)
 | |
|  {
 | |
|  	int ret;
 | |
| @@ -345,6 +410,8 @@ static int spl_load(struct spl_image *sp
 | |
|  		ret = spl_load_spi_flash(spl);
 | |
|  	else if (spl_boot_nor_flash)
 | |
|  		ret = spl_load_nor_flash(spl);
 | |
| +	else if (spl_boot_nand_flash)
 | |
| +		ret = spl_load_nand_flash(spl);
 | |
|  	else
 | |
|  		ret = 1;
 | |
|  
 | |
| --- a/arch/mips/include/asm/lantiq/config.h
 | |
| +++ b/arch/mips/include/asm/lantiq/config.h
 | |
| @@ -40,6 +40,26 @@
 | |
|  #define CONFIG_SPI_SPL_SIMPLE
 | |
|  #endif
 | |
|  
 | |
| +/*
 | |
| + * NAND flash SPL
 | |
| + * BOOT CFG 06 only (address cycle based probing, 2KB or 512B page size)
 | |
| + */
 | |
| +#if defined(CONFIG_LTQ_SUPPORT_SPL_NAND_FLASH) && defined(CONFIG_SYS_BOOT_NANDSPL)
 | |
| +#define CONFIG_SPL
 | |
| +#define CONFIG_SPL_NAND_SUPPORT
 | |
| +#define CONFIG_SPL_NAND_DRIVERS
 | |
| +#define CONFIG_SPL_NAND_SIMPLE
 | |
| +#define CONFIG_SPL_NAND_ECC
 | |
| +
 | |
| +/* use software ECC until driver supports HW ECC */
 | |
| +#define CONFIG_SPL_NAND_SOFTECC
 | |
| +#define CONFIG_SYS_NAND_ECCSIZE		256
 | |
| +#define CONFIG_SYS_NAND_ECCBYTES	3
 | |
| +#define CONFIG_SYS_NAND_ECCPOS		{40, 41, 42, 43, 44, 45, 46, 47, \
 | |
| +					48, 49, 50, 51, 52, 53, 54, 55, \
 | |
| +					56, 57, 58, 59, 60, 61, 62, 63}
 | |
| +#endif
 | |
| +
 | |
|  #if defined(CONFIG_LTQ_SUPPORT_SPL_NOR_FLASH) && defined(CONFIG_SYS_BOOT_NORSPL)
 | |
|  #define CONFIG_SPL
 | |
|  #endif
 | |
| @@ -148,6 +168,21 @@
 | |
|  #define CONFIG_ENV_LOAD_UBOOT_SF
 | |
|  #endif
 | |
|  
 | |
| +#if defined(CONFIG_LTQ_SUPPORT_NAND_FLASH)
 | |
| +#define CONFIG_ENV_WRITE_UBOOT_NAND				\
 | |
| +	"write-uboot-nand="					\
 | |
| +	"nand erase 0 $filesize && "				\
 | |
| +	"nand write $fileaddr 0 $filesize\0"
 | |
| +
 | |
| +#define CONFIG_ENV_LOAD_UBOOT_NAND						\
 | |
| +	"load-uboot-nandspl=tftpboot u-boot.ltq.nandspl\0"			\
 | |
| +	"load-uboot-nandspl-lzo=tftpboot u-boot.ltq.lzo.nandspl\0"		\
 | |
| +	"load-uboot-nandspl-lzma=tftpboot u-boot.ltq.lzma.nandspl\0"
 | |
| +#else
 | |
| +#define CONFIG_ENV_WRITE_UBOOT_NAND
 | |
| +#define CONFIG_ENV_LOAD_UBOOT_NAND
 | |
| +#endif
 | |
| +
 | |
|  #define CONFIG_ENV_LANTIQ_DEFAULTS	\
 | |
|  	CONFIG_ENV_CONSOLEDEV		\
 | |
|  	CONFIG_ENV_ADDCONSOLE		\
 | |
| @@ -159,6 +194,8 @@
 | |
|  	CONFIG_ENV_LOAD_UBOOT_NOR	\
 | |
|  	CONFIG_ENV_SF_PROBE		\
 | |
|  	CONFIG_ENV_WRITE_UBOOT_SF	\
 | |
| -	CONFIG_ENV_LOAD_UBOOT_SF
 | |
| +	CONFIG_ENV_LOAD_UBOOT_SF	\
 | |
| +	CONFIG_ENV_WRITE_UBOOT_NAND	\
 | |
| +	CONFIG_ENV_LOAD_UBOOT_NAND
 | |
|  
 | |
|  #endif /* __LANTIQ_CONFIG_H__ */
 |