diff options
| -rw-r--r-- | board/keymile/common/common.c | 35 | ||||
| -rw-r--r-- | board/keymile/common/common.h | 10 | ||||
| -rw-r--r-- | board/keymile/km8xx/km8xx.c | 42 | ||||
| -rw-r--r-- | board/keymile/kmeter1/kmeter1.c | 51 | ||||
| -rw-r--r-- | board/keymile/mgcoge/mgcoge.c | 67 | ||||
| -rw-r--r-- | include/configs/keymile-common.h | 17 | ||||
| -rw-r--r-- | include/configs/km8xx.h | 2 | ||||
| -rw-r--r-- | include/configs/kmeter1.h | 6 | ||||
| -rw-r--r-- | include/configs/mgcoge.h | 24 | ||||
| -rw-r--r-- | include/i2c.h | 2 | 
10 files changed, 202 insertions, 54 deletions
| diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c index b2bd7fd84..259462360 100644 --- a/board/keymile/common/common.c +++ b/board/keymile/common/common.c @@ -203,8 +203,9 @@ static int ivm_check_crc (unsigned char *buf, int block)  	crceeprom = (buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 1] + \  			buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN - 2] * 256);  	if (crc != crceeprom) { -		printf ("Error CRC Block: %d EEprom: calculated: %lx EEprom: %lx\n", -			block, crc, crceeprom); +		if (block == 0) +			printf ("Error CRC Block: %d EEprom: calculated: \ +			%lx EEprom: %lx\n", block, crc, crceeprom);  		return -1;  	}  	return 0; @@ -287,7 +288,7 @@ int ivm_analyze_eeprom (unsigned char *buf, int len)  	GET_STRING("IVM_CustomerProductID", IVM_POS_CUSTOMER_PROD_ID, 32)  	if (ivm_check_crc (&buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN * 2], 2) != 0) -		return -2; +		return 0;  	ivm_analyze_block2 (&buf[CONFIG_SYS_IVM_EEPROM_PAGE_LEN * 2], CONFIG_SYS_IVM_EEPROM_PAGE_LEN);  	return 0; @@ -527,6 +528,34 @@ int fdt_set_node_and_value (void *blob,  	}  	return ret;  } +int fdt_get_node_and_value (void *blob, +				char *nodename, +				char *propname, +				void **var) +{ +	int len; +	int nodeoffset = 0; + +	nodeoffset = fdt_path_offset (blob, nodename); +	if (nodeoffset >= 0) { +		*var = (void *)fdt_getprop (blob, nodeoffset, propname, &len); +		if (len == 0) { +			/* no value */ +			printf ("%s no value\n", __FUNCTION__); +			return -1; +		} else if (len > 0) { +			return len; +		} else { +			printf ("libfdt fdt_getprop(): %s\n", +				fdt_strerror(len)); +			return -2; +		} +	} else { +		printf("%s: cannot find %s node err:%s\n", __FUNCTION__, +			nodename, fdt_strerror (nodeoffset)); +		return -3; +	} +}  #endif  int ethernet_present (void) diff --git a/board/keymile/common/common.h b/board/keymile/common/common.h index d3d681424..a38c72772 100644 --- a/board/keymile/common/common.h +++ b/board/keymile/common/common.h @@ -17,4 +17,14 @@ int ivm_read_eeprom (void);  #ifdef CONFIG_KEYMILE_HDLC_ENET  int keymile_hdlc_enet_initialize (bd_t *bis);  #endif + +int fdt_set_node_and_value (void *blob, +			char *nodename, +			char *regname, +			void *var, +			int size); +int fdt_get_node_and_value (void *blob, +				char *nodename, +				char *propname, +				void **var);  #endif /* __KEYMILE_COMMON_H */ diff --git a/board/keymile/km8xx/km8xx.c b/board/keymile/km8xx/km8xx.c index 7c5817977..ec883a404 100644 --- a/board/keymile/km8xx/km8xx.c +++ b/board/keymile/km8xx/km8xx.c @@ -159,12 +159,6 @@ int hush_init_var (void)  }  #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) -extern int fdt_set_node_and_value (void *blob, -				char *nodename, -				char *regname, -				void *var, -				int size); -  /*   * update "memory" property in the blob   */ @@ -172,33 +166,53 @@ void ft_blob_update (void *blob, bd_t *bd)  {  	ulong brg_data[1] = {0};  	ulong memory_data[2] = {0}; -	ulong flash_data[4] = {0}; +	ulong *flash_data = NULL;  	ulong flash_reg[3] = {0}; -	uchar enetaddr[6]; +	flash_info_t	*info; +	int	len; +	int	i = 0;  	memory_data[0] = cpu_to_be32 (bd->bi_memstart);  	memory_data[1] = cpu_to_be32 (bd->bi_memsize);  	fdt_set_node_and_value (blob, "/memory", "reg", memory_data,  				sizeof (memory_data)); -	flash_data[2] = cpu_to_be32 (bd->bi_flashstart); -	flash_data[3] = cpu_to_be32 (bd->bi_flashsize); +	len = fdt_get_node_and_value (blob, "/localbus", "ranges", +					(void *)&flash_data); + +	if (flash_data == NULL) { +		printf ("%s: error /localbus/ranges entry\n", __FUNCTION__); +		return; +	} + +	/* update Flash addr, size */ +	while ( i < (len / 4)) { +		switch (flash_data[i]) { +		case 0: +			info = flash_get_info(CONFIG_SYS_FLASH_BASE); +			flash_data[i + 1] = 0; +			flash_data[i + 2] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE); +			flash_data[i + 3] = cpu_to_be32 (info->size); +			break; +		default: +			break; +		} +		i += 4; +	}  	fdt_set_node_and_value (blob, "/localbus", "ranges", flash_data, -				sizeof (flash_data)); +				len);  	flash_reg[2] = cpu_to_be32 (bd->bi_flashsize);  	fdt_set_node_and_value (blob, "/localbus/flash@0,0", "reg", flash_reg,  				sizeof (flash_reg)); -  	/* BRG */  	brg_data[0] = cpu_to_be32 (bd->bi_busfreq);  	fdt_set_node_and_value (blob, "/soc/cpm", "brg-frequency", brg_data,  				sizeof (brg_data));  	/* MAC adr */ -	eth_getenv_enetaddr("ethaddr", enetaddr);  	fdt_set_node_and_value (blob, "/soc/cpm/ethernet", "mac-address", -				enetaddr, sizeof (u8) * 6); +				bd->bi_enetaddr, sizeof (u8) * 6);  }  void ft_board_setup(void *blob, bd_t *bd) diff --git a/board/keymile/kmeter1/kmeter1.c b/board/keymile/kmeter1/kmeter1.c index 3d1b94154..8cac2c466 100644 --- a/board/keymile/kmeter1/kmeter1.c +++ b/board/keymile/kmeter1/kmeter1.c @@ -187,9 +187,60 @@ int checkboard (void)  }  #if defined(CONFIG_OF_BOARD_SETUP) +/* + * update "/localbus/ranges" property in the blob + */ +void ft_blob_update (void *blob, bd_t *bd) +{ +	ulong	*flash_data = NULL; +	flash_info_t	*info; +	ulong	flash_reg[6] = {0}; +	int	len; +	int	size = 0; +	int	i = 0; + +	len = fdt_get_node_and_value (blob, "/localbus", "ranges", +					(void *)&flash_data); + +	if (flash_data == NULL) { +		printf ("%s: error /localbus/ranges entry\n", __FUNCTION__); +		return; +	} + +	/* update Flash addr, size */ +	while ( i < (len / 4)) { +		switch (flash_data[i]) { +		case 0: +			info = flash_get_info(CONFIG_SYS_FLASH_BASE); +			size = info->size; +			info = flash_get_info(CONFIG_SYS_FLASH_BASE_1); +			size += info->size; +			flash_data[i + 1] = 0; +			flash_data[i + 2] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE); +			flash_data[i + 3] = cpu_to_be32 (size); +			break; +		default: +			break; +		} +		i += 4; +	} +	fdt_set_node_and_value (blob, "/localbus", "ranges", flash_data, +				len); + +	info = flash_get_info(CONFIG_SYS_FLASH_BASE); +	flash_reg[2] = cpu_to_be32 (size); +	flash_reg[4] = flash_reg[2]; +	info = flash_get_info(CONFIG_SYS_FLASH_BASE_1); +	flash_reg[5] = cpu_to_be32 (info->size); +	fdt_set_node_and_value (blob, "/localbus/flash@f0000000,0", "reg", flash_reg, +				sizeof (flash_reg)); +} + +  void ft_board_setup (void *blob, bd_t *bd)  {  	ft_cpu_setup (blob, bd); +	ft_blob_update (blob, bd);  }  #endif diff --git a/board/keymile/mgcoge/mgcoge.c b/board/keymile/mgcoge/mgcoge.c index 67722e708..d24a4b576 100644 --- a/board/keymile/mgcoge/mgcoge.c +++ b/board/keymile/mgcoge/mgcoge.c @@ -312,42 +312,71 @@ int hush_init_var (void)  }  #if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) -extern int fdt_set_node_and_value (void *blob, -				char *nodename, -				char *regname, -				void *var, -				int size); -  /*   * update "memory" property in the blob   */  void ft_blob_update (void *blob, bd_t *bd)  {  	ulong memory_data[2] = {0}; -	ulong flash_data[8] = {0}; +	ulong *flash_data = NULL; +	ulong	flash_reg[6] = {0};  	flash_info_t	*info; -	uchar enetaddr[6]; +	int	len; +	int	size; +	int	i = 0;  	memory_data[0] = cpu_to_be32 (bd->bi_memstart);  	memory_data[1] = cpu_to_be32 (bd->bi_memsize);  	fdt_set_node_and_value (blob, "/memory", "reg", memory_data,  				sizeof (memory_data)); +	len = fdt_get_node_and_value (blob, "/localbus", "ranges", +					(void *)&flash_data); + +	if (flash_data == NULL) { +		printf ("%s: error /localbus/ranges entry\n", __FUNCTION__); +		return; +	} +  	/* update Flash addr, size */ -	info = flash_get_info(CONFIG_SYS_FLASH_BASE); -	flash_data[2] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE); -	flash_data[3] = cpu_to_be32 (info->size); -	flash_data[4] = cpu_to_be32 (5); -	flash_data[5] = cpu_to_be32 (0); -	info = flash_get_info(CONFIG_SYS_FLASH_BASE_1); -	flash_data[6] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE_1); -	flash_data[7] = cpu_to_be32 (info->size); +	while ( i < (len / 4)) { +		switch (flash_data[i]) { +		case 0: +			info = flash_get_info(CONFIG_SYS_FLASH_BASE); +			flash_data[i + 1] = 0; +			flash_data[i + 2] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE); +			flash_data[i + 3] = cpu_to_be32 (info->size); +			break; +		case 5: +			info = flash_get_info(CONFIG_SYS_FLASH_BASE_1); +			size = info->size; +			info = flash_get_info(CONFIG_SYS_FLASH_BASE_2); +			size += info->size; +			flash_data[i + 1] = 0; +			flash_data[i + 2] = cpu_to_be32 (CONFIG_SYS_FLASH_BASE_1); +			flash_data[i + 3] = cpu_to_be32 (size); +			break; +		default: +			break; +		} +		i += 4; +	}  	fdt_set_node_and_value (blob, "/localbus", "ranges", flash_data, -				sizeof (flash_data)); +				len); + +	info = flash_get_info(CONFIG_SYS_FLASH_BASE_1); +	flash_reg[0] = cpu_to_be32 (5); +	flash_reg[2] = cpu_to_be32 (info->size); +	flash_reg[3] = flash_reg[0]; +	flash_reg[4] = flash_reg[2]; +	info = flash_get_info(CONFIG_SYS_FLASH_BASE_2); +	flash_reg[5] = cpu_to_be32 (info->size); +	fdt_set_node_and_value (blob, "/localbus/flash@5,0", "reg", flash_reg, +				sizeof (flash_reg)); +  	/* MAC addr */ -	eth_getenv_enetaddr("ethaddr", enetaddr);  	fdt_set_node_and_value (blob, "/soc/cpm/ethernet", "mac-address", -				enetaddr, sizeof (u8) * 6); +				bd->bi_enetaddr, sizeof (u8) * 6);  }  void ft_board_setup (void *blob, bd_t *bd) diff --git a/include/configs/keymile-common.h b/include/configs/keymile-common.h index 0fcf692d1..0cc1b3b59 100644 --- a/include/configs/keymile-common.h +++ b/include/configs/keymile-common.h @@ -45,6 +45,7 @@  #define CONFIG_CMD_I2C  #define CONFIG_CMD_JFFS2  #define CONFIG_JFFS2_CMDLINE +#define CONFIG_CMD_MTDPARTS  #undef	CONFIG_WATCHDOG			/* disable platform specific watchdog */ @@ -97,7 +98,7 @@  #define CONFIG_SYS_SLOT_ID_MASK		(0x3f)	/* mask for slot ID bits */  #define CONFIG_I2C_MULTI_BUS	1 -#define CONFIG_SYS_MAX_I2C_BUS		2 +#define CONFIG_SYS_MAX_I2C_BUS		1  #define CONFIG_SYS_I2C_INIT_BOARD	1  #define CONFIG_I2C_MUX		1 @@ -122,6 +123,20 @@  #define CONFIG_BOOTP_GATEWAY  #define CONFIG_BOOTP_HOSTNAME +#define CONFIG_ENV_SIZE		0x04000 /* Size of Environment */ + +#define CONFIG_SYS_MALLOC_LEN	(1024 * 1024)	/* Reserved for malloc */ + +#define CONFIG_SYS_64BIT_VSPRINTF	/* needed for UBI/UBIFS */ + +/* UBI Support for all Keymile boards */ +#define CONFIG_CMD_UBI +#define CONFIG_RBTREE +#define CONFIG_MTD_PARTITIONS +#define CONFIG_FLASH_CFI_MTD +#define CONFIG_MTD_DEVICE +#define CONFIG_MTD_CONCAT +  /* define this to use the keymile's io muxing feature */  /*#define CONFIG_IO_MUXING */ diff --git a/include/configs/km8xx.h b/include/configs/km8xx.h index c305b8969..b5552d217 100644 --- a/include/configs/km8xx.h +++ b/include/configs/km8xx.h @@ -121,7 +121,6 @@  #define CONFIG_SYS_FLASH_BASE		0xf0000000  #define CONFIG_SYS_MONITOR_LEN		(384 << 10) /* 384 kB for Monitor */  #define CONFIG_SYS_MONITOR_BASE	CONFIG_SYS_FLASH_BASE -#define CONFIG_SYS_MALLOC_LEN		(256 << 10) /* 256 kB for malloc() */  /*   * For booting Linux, the board info and command line data @@ -146,7 +145,6 @@  #define CONFIG_ENV_IS_IN_FLASH	1  #define CONFIG_ENV_OFFSET	CONFIG_SYS_MONITOR_LEN -#define CONFIG_ENV_SIZE		0x04000 /* Total Size of Environment Sector */  #define CONFIG_ENV_SECT_SIZE	0x20000 /* Total Size of Environment Sector */  /* Address and size of Redundant Environment Sector	*/ diff --git a/include/configs/kmeter1.h b/include/configs/kmeter1.h index 41dbd0d24..347b47c65 100644 --- a/include/configs/kmeter1.h +++ b/include/configs/kmeter1.h @@ -292,7 +292,6 @@  #define CONFIG_ENV_IS_IN_FLASH	1  #define CONFIG_ENV_ADDR		(CONFIG_SYS_MONITOR_BASE + CONFIG_SYS_MONITOR_LEN)  #define CONFIG_ENV_SECT_SIZE	0x20000 /* 128K(one sector) for env */ -#define CONFIG_ENV_SIZE		0x20000  #define CONFIG_ENV_OFFSET	(CONFIG_SYS_MONITOR_LEN)  /* Address and size of Redundant Environment Sector	*/ @@ -314,7 +313,6 @@  #define CONFIG_SYS_I2C_SLAVE	0x7F  #define CONFIG_SYS_I2C_OFFSET	0x3000  #define CONFIG_I2C_MULTI_BUS	1 -#define CONFIG_SYS_MAX_I2C_BUS		2  #define CONFIG_I2C_MUX		1  /* EEprom support */ @@ -326,7 +324,7 @@  #define CONFIG_SYS_DTT_MAX_TEMP	70  #define CONFIG_SYS_DTT_LOW_TEMP	-30  #define CONFIG_SYS_DTT_HYSTERESIS	3 -#define CONFIG_SYS_DTT_BUS_NUM		(2) +#define CONFIG_SYS_DTT_BUS_NUM		(CONFIG_SYS_MAX_I2C_BUS)  #if defined(CONFIG_PCI)  #define CONFIG_CMD_PCI @@ -433,7 +431,7 @@  #define CONFIG_PRAM	512	/* protected RAM [KBytes] */ -#define MTDIDS_DEFAULT		"nor0=app" +#define MTDIDS_DEFAULT		"nor2=app"  #define MTDPARTS_DEFAULT \  	"mtdparts=app:256k(u-boot),128k(env),128k(envred),"	\  	"1536k(esw0),8704k(rootfs0),1536k(esw1),2432k(rootfs1),640k(var),768k(cfg)" diff --git a/include/configs/mgcoge.h b/include/configs/mgcoge.h index cc4210185..ea14948c4 100644 --- a/include/configs/mgcoge.h +++ b/include/configs/mgcoge.h @@ -98,13 +98,11 @@  	"addcon=setenv bootargs ${bootargs} "				\  		"console=ttyCPM0,${baudrate}\0"				\  	"mtdids=nor0=boot,nor1=app \0"					\ -	"mtdparts=mtdparts=boot:384k(u-boot),128k(env),128k(envred),"	\ -		"3456k(free);app:3m(esw0),10m(rootfs0),3m(esw1),"	\ -		"10m(rootfs1),1m(var),5m(cfg) \0"			\  	"partition=nor1,5 \0"						\  	"new_env=prot off FE060000 FE09FFFF; era FE060000 FE09FFFF \0" 	\  	"EEprom_ivm=pca9544a:70:4 \0"					\ -	"mtdparts=" MK_STR(MTDPARTS_DEFAULT) "\0"				\ +	"mtdparts=" MK_STR(MTDPARTS_DEFAULT) "\0"			\ +	"unlock=yes\0"							\  	""  #define CONFIG_SYS_SDRAM_BASE		0x00000000 @@ -112,13 +110,17 @@  #define CONFIG_SYS_FLASH_SIZE		32  #define CONFIG_SYS_FLASH_CFI  #define CONFIG_FLASH_CFI_DRIVER -#define CONFIG_SYS_MAX_FLASH_BANKS	2	/* max num of flash banks	*/ +#define CONFIG_SYS_MAX_FLASH_BANKS	3	/* max num of flash banks	*/  #define CONFIG_SYS_MAX_FLASH_SECT	512	/* max num of sects on one chip */  #define CONFIG_SYS_FLASH_BASE_1	0x50000000 -#define CONFIG_SYS_FLASH_SIZE_1	64 +#define CONFIG_SYS_FLASH_SIZE_1	32 +#define CONFIG_SYS_FLASH_BASE_2	0x52000000 +#define CONFIG_SYS_FLASH_SIZE_2	32 -#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE_1 } +#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE, \ +					CONFIG_SYS_FLASH_BASE_1, \ +					CONFIG_SYS_FLASH_BASE_2 }  #define CONFIG_SYS_MONITOR_BASE	TEXT_BASE  #if (CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE) @@ -193,7 +195,6 @@  #define BOOTFLAG_COLD		0x01	/* Normal Power-On: Boot from FLASH */  #define BOOTFLAG_WARM		0x02	/* Software reboot                  */ -#define CONFIG_SYS_MALLOC_LEN		(4096 << 10)	/* Reserve 4 MB for malloc()	*/  #define CONFIG_SYS_BOOTMAPSZ		(8 << 20)	/* Initial Memory map for Linux */  #define CONFIG_SYS_CACHELINE_SIZE	32	/* For MPC8260 CPUs */ @@ -333,9 +334,10 @@  #define CONFIG_SYS_BR5_PRELIM	((CONFIG_SYS_FLASH_BASE_1 & BRx_BA_MSK) |\  			 BRx_PS_16 | BRx_MS_GPCM_P | BRx_V) -#define CONFIG_SYS_OR5_PRELIM	(MEG_TO_AM(CONFIG_SYS_FLASH_SIZE_1) |\ -			 ORxG_CSNT | ORxG_ACS_DIV2 |\ -			 ORxG_SCY_5_CLK | ORxG_TRLX ) +#define CONFIG_SYS_OR5_PRELIM	(MEG_TO_AM(CONFIG_SYS_FLASH_SIZE_1 + \ +				 CONFIG_SYS_FLASH_SIZE_2) |\ +				 ORxG_CSNT | ORxG_ACS_DIV2 |\ +				 ORxG_SCY_5_CLK | ORxG_TRLX )  #define	CONFIG_SYS_RESET_ADDRESS 0xFDFFFFFC	/* "bad" address		*/ diff --git a/include/i2c.h b/include/i2c.h index 668e754e2..b75476980 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -47,7 +47,9 @@  #define I2C_RXTX_LEN	128	/* maximum tx/rx buffer length */  #if defined(CONFIG_I2C_MULTI_BUS) +#if !defined(CONFIG_SYS_MAX_I2C_BUS)  #define CONFIG_SYS_MAX_I2C_BUS		2 +#endif  #define I2C_GET_BUS()		i2c_get_bus_num()  #define I2C_SET_BUS(a)		i2c_set_bus_num(a)  #else |