diff options
| -rw-r--r-- | board/altera/nios2-generic/nios2-generic.c | 2 | ||||
| -rw-r--r-- | common/cmd_bootm.c | 21 | ||||
| -rw-r--r-- | common/command.c | 4 | ||||
| -rw-r--r-- | common/env_callback.c | 9 | ||||
| -rw-r--r-- | common/env_flags.c | 8 | ||||
| -rw-r--r-- | common/image.c | 2 | ||||
| -rw-r--r--[-rwxr-xr-x] | drivers/mmc/dw_mmc.c | 0 | ||||
| -rw-r--r-- | drivers/power/fuel_gauge/fg_max17042.c | 120 | ||||
| -rw-r--r-- | lib/lzma/LzmaTools.c | 5 | 
9 files changed, 122 insertions, 49 deletions
| diff --git a/board/altera/nios2-generic/nios2-generic.c b/board/altera/nios2-generic/nios2-generic.c index 5c5b1b914..aa126d71b 100644 --- a/board/altera/nios2-generic/nios2-generic.c +++ b/board/altera/nios2-generic/nios2-generic.c @@ -8,7 +8,9 @@  #include <common.h>  #include <netdev.h> +#if defined(CONFIG_CFI_FLASH_MTD)  #include <mtd/cfi_flash.h> +#endif  #include <asm/io.h>  #include <asm/gpio.h> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 3f576594d..a59ee95a6 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -82,6 +82,9 @@ static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);  static void fixup_silent_linux(void);  #endif +static int do_bootm_standalone(int flag, int argc, char * const argv[], +			       bootm_headers_t *images); +  static const void *boot_get_kernel(cmd_tbl_t *cmdtp, int flag, int argc,  				char * const argv[], bootm_headers_t *images,  				ulong *os_data, ulong *os_len); @@ -139,6 +142,7 @@ static boot_os_fn do_bootm_integrity;  #endif  static boot_os_fn *boot_os[] = { +	[IH_OS_U_BOOT] = do_bootm_standalone,  #ifdef CONFIG_BOOTM_LINUX  	[IH_OS_LINUX] = do_bootm_linux,  #endif @@ -499,17 +503,18 @@ static int bootm_load_os(bootm_headers_t *images, unsigned long *load_end,  	return 0;  } -static int bootm_start_standalone(int argc, char * const argv[]) +static int do_bootm_standalone(int flag, int argc, char * const argv[], +			       bootm_headers_t *images)  {  	char  *s;  	int   (*appl)(int, char * const []);  	/* Don't start if "autostart" is set to "no" */  	if (((s = getenv("autostart")) != NULL) && (strcmp(s, "no") == 0)) { -		setenv_hex("filesize", images.os.image_len); +		setenv_hex("filesize", images->os.image_len);  		return 0;  	} -	appl = (int (*)(int, char * const []))(ulong)ntohl(images.ep); +	appl = (int (*)(int, char * const []))(ulong)ntohl(images->ep);  	(*appl)(argc, argv);  	return 0;  } @@ -535,14 +540,12 @@ static cmd_tbl_t cmd_bootm_sub[] = {  static int boot_selected_os(int argc, char * const argv[], int state,  		bootm_headers_t *images, boot_os_fn *boot_fn)  { -	if (images->os.type == IH_TYPE_STANDALONE) { -		/* This may return when 'autostart' is 'no' */ -		bootm_start_standalone(argc, argv); -		return 0; -	}  	arch_preboot_os();  	boot_fn(state, argc, argv, images); -	if (state == BOOTM_STATE_OS_FAKE_GO) /* We expect to return */ + +	/* Stand-alone may return when 'autostart' is 'no' */ +	if (images->os.type == IH_TYPE_STANDALONE || +	    state == BOOTM_STATE_OS_FAKE_GO) /* We expect to return */  		return 0;  	bootstage_error(BOOTSTAGE_ID_BOOT_OS_RETURNED);  #ifdef DEBUG diff --git a/common/command.c b/common/command.c index 625571dd4..597ab4cb4 100644 --- a/common/command.c +++ b/common/command.c @@ -184,10 +184,10 @@ static int complete_cmdv(int argc, char * const argv[], char last_char, int maxv  		/* output full list of commands */  		for (; cmdtp != cmdend; cmdtp++) {  			if (n_found >= maxv - 2) { -				cmdv[n_found] = "..."; +				cmdv[n_found++] = "...";  				break;  			} -			cmdv[n_found] = cmdtp->name; +			cmdv[n_found++] = cmdtp->name;  		}  		cmdv[n_found] = NULL;  		return n_found; diff --git a/common/env_callback.c b/common/env_callback.c index 34bb58e4a..d03fa03a4 100644 --- a/common/env_callback.c +++ b/common/env_callback.c @@ -35,6 +35,9 @@ static struct env_clbk_tbl *find_env_callback(const char *name)  	return NULL;  } +static int first_call = 1; +static const char *callback_list; +  /*   * Look for a possible callback for a newly added variable   * This is called specifically when the variable did not exist in the hash @@ -43,11 +46,15 @@ static struct env_clbk_tbl *find_env_callback(const char *name)  void env_callback_init(ENTRY *var_entry)  {  	const char *var_name = var_entry->key; -	const char *callback_list = getenv(ENV_CALLBACK_VAR);  	char callback_name[256] = "";  	struct env_clbk_tbl *clbkp;  	int ret = 1; +	if (first_call) { +		callback_list = getenv(ENV_CALLBACK_VAR); +		first_call = 0; +	} +  	/* look in the ".callbacks" var for a reference to this variable */  	if (callback_list != NULL)  		ret = env_attr_lookup(callback_list, var_name, callback_name); diff --git a/common/env_flags.c b/common/env_flags.c index e9b72e60a..985f92e50 100644 --- a/common/env_flags.c +++ b/common/env_flags.c @@ -395,6 +395,9 @@ static int env_parse_flags_to_bin(const char *flags)  	return binflags;  } +static int first_call = 1; +static const char *flags_list; +  /*   * Look for possible flags for a newly added variable   * This is called specifically when the variable did not exist in the hash @@ -403,10 +406,13 @@ static int env_parse_flags_to_bin(const char *flags)  void env_flags_init(ENTRY *var_entry)  {  	const char *var_name = var_entry->key; -	const char *flags_list = getenv(ENV_FLAGS_VAR);  	char flags[ENV_FLAGS_ATTR_MAX_LEN + 1] = "";  	int ret = 1; +	if (first_call) { +		flags_list = getenv(ENV_FLAGS_VAR); +		first_call = 0; +	}  	/* look in the ".flags" and static for a reference to this variable */  	ret = env_flags_lookup(flags_list, var_name, flags); diff --git a/common/image.c b/common/image.c index 41453540f..ae95c3f18 100644 --- a/common/image.c +++ b/common/image.c @@ -96,9 +96,9 @@ static const table_entry_t uimage_os[] = {  	{	IH_OS_PLAN9,	"plan9",	"Plan 9",		},  	{	IH_OS_RTEMS,	"rtems",	"RTEMS",		},  	{	IH_OS_U_BOOT,	"u-boot",	"U-Boot",		}, +	{	IH_OS_VXWORKS,	"vxworks",	"VxWorks",		},  #if defined(CONFIG_CMD_ELF) || defined(USE_HOSTCC)  	{	IH_OS_QNX,	"qnx",		"QNX",			}, -	{	IH_OS_VXWORKS,	"vxworks",	"VxWorks",		},  #endif  #if defined(CONFIG_INTEGRITY) || defined(USE_HOSTCC)  	{	IH_OS_INTEGRITY,"integrity",	"INTEGRITY",		}, diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 4cec5aaa6..4cec5aaa6 100755..100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c diff --git a/drivers/power/fuel_gauge/fg_max17042.c b/drivers/power/fuel_gauge/fg_max17042.c index c285747f3..154ca6a69 100644 --- a/drivers/power/fuel_gauge/fg_max17042.c +++ b/drivers/power/fuel_gauge/fg_max17042.c @@ -20,21 +20,30 @@ static int fg_write_regs(struct pmic *p, u8 addr, u16 *data, int num)  	int ret = 0;  	int i; -	for (i = 0; i < num; i++, addr++) -		ret |= pmic_reg_write(p, addr, *(data + i)); +	for (i = 0; i < num; i++, addr++) { +		ret = pmic_reg_write(p, addr, *(data + i)); +		if (ret) +			return ret; +	} -	return ret; +	return 0;  }  static int fg_read_regs(struct pmic *p, u8 addr, u16 *data, int num)  { +	unsigned int dat;  	int ret = 0;  	int i; -	for (i = 0; i < num; i++, addr++) -		ret |= pmic_reg_read(p, addr, (u32 *) (data + i)); +	for (i = 0; i < num; i++, addr++) { +		ret = pmic_reg_read(p, addr, &dat); +		if (ret) +			return ret; -	return ret; +		*(data + i) = (u16)dat; +	} + +	return 0;  }  static int fg_write_and_verify(struct pmic *p, u8 addr, u16 data) @@ -57,9 +66,13 @@ static int fg_write_and_verify(struct pmic *p, u8 addr, u16 data)  static void por_fuelgauge_init(struct pmic *p)  {  	u16 r_data0[16], r_data1[16], r_data2[16]; -	u32 rewrite_count = 5, i = 0; -	unsigned int val; -	int ret = 0; +	u32 rewrite_count = 5; +	u32 check_count; +	u32 lock_count; +	u32 i = 0; +	u32 val; +	s32 ret = 0; +	char *status_msg;  	/* Delay 500 ms */  	mdelay(500); @@ -67,29 +80,55 @@ static void por_fuelgauge_init(struct pmic *p)  	pmic_reg_write(p, MAX17042_CONFIG, 0x2310);  rewrite_model: +	check_count = 5; +	lock_count = 5; + +	if (!rewrite_count--) { +		status_msg = "init failed!"; +		goto error; +	} +  	/* Unlock Model Access */  	pmic_reg_write(p, MAX17042_MLOCKReg1, MODEL_UNLOCK1);  	pmic_reg_write(p, MAX17042_MLOCKReg2, MODEL_UNLOCK2);  	/* Write/Read/Verify the Custom Model */ -	ret |= fg_write_regs(p, MAX17042_MODEL1, cell_character0, +	ret = fg_write_regs(p, MAX17042_MODEL1, cell_character0,  			     ARRAY_SIZE(cell_character0)); -	ret |= fg_write_regs(p, MAX17042_MODEL2, cell_character1, +	if (ret) +		goto rewrite_model; + +	ret = fg_write_regs(p, MAX17042_MODEL2, cell_character1,  			     ARRAY_SIZE(cell_character1)); -	ret |= fg_write_regs(p, MAX17042_MODEL3, cell_character2, +	if (ret) +		goto rewrite_model; + +	ret = fg_write_regs(p, MAX17042_MODEL3, cell_character2,  			     ARRAY_SIZE(cell_character2)); +	if (ret) +		goto rewrite_model; -	if (ret) { -		printf("%s: Cell parameters write failed!\n", __func__); -		return; +check_model: +	if (!check_count--) { +		if (rewrite_count) +			goto rewrite_model; +		else +			status_msg = "check failed!"; + +		goto error;  	} -	ret |= fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0)); -	ret |= fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1)); -	ret |= fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2)); +	ret = fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0)); +	if (ret) +		goto check_model; + +	ret = fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1)); +	if (ret) +		goto check_model; +	ret = fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2));  	if (ret) -		printf("%s: Cell parameters read failed!\n", __func__); +		goto check_model;  	for (i = 0; i < 16; i++) {  		if ((cell_character0[i] != r_data0[i]) @@ -98,29 +137,37 @@ rewrite_model:  			goto rewrite_model;  		} +lock_model: +	if (!lock_count--) { +		if (rewrite_count) +			goto rewrite_model; +		else +			status_msg = "lock failed!"; + +		goto error; +	} +  	/* Lock model access */  	pmic_reg_write(p, MAX17042_MLOCKReg1, MODEL_LOCK1);  	pmic_reg_write(p, MAX17042_MLOCKReg2, MODEL_LOCK2);  	/* Verify the model access is locked */ -	ret |= fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0)); -	ret |= fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1)); -	ret |= fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2)); +	ret = fg_read_regs(p, MAX17042_MODEL1, r_data0, ARRAY_SIZE(r_data0)); +	if (ret) +		goto lock_model; -	if (ret) { -		printf("%s: Cell parameters read failed!\n", __func__); -		return; -	} +	ret = fg_read_regs(p, MAX17042_MODEL2, r_data1, ARRAY_SIZE(r_data1)); +	if (ret) +		goto lock_model; + +	ret = fg_read_regs(p, MAX17042_MODEL3, r_data2, ARRAY_SIZE(r_data2)); +	if (ret) +		goto lock_model;  	for (i = 0; i < ARRAY_SIZE(r_data0); i++) {  		/* Check if model locked */ -		if (r_data0[i] || r_data1[i] || r_data2[i]) { -			/* Rewrite model data - prevent from endless loop */ -			if (rewrite_count--) { -				puts("FG - Lock model access failed!\n"); -				goto rewrite_model; -			} -		} +		if (r_data0[i] || r_data1[i] || r_data2[i]) +			goto lock_model;  	}  	/* Write Custom Parameters */ @@ -137,6 +184,11 @@ rewrite_model:  	/* Delay at least 350 ms */  	mdelay(350); + +	status_msg = "OK!"; +error: +	debug("%s: model init status: %s\n", p->name, status_msg); +	return;  }  static int power_update_battery(struct pmic *p, struct pmic *bat) @@ -178,7 +230,7 @@ static int power_check_battery(struct pmic *p, struct pmic *bat)  	ret |= pmic_reg_read(p, MAX17042_STATUS, &val);  	debug("fg status: 0x%x\n", val); -	if (val == MAX17042_POR) +	if (val & MAX17042_POR)  		por_fuelgauge_init(p);  	ret |= pmic_reg_read(p, MAX17042_VERSION, &val); diff --git a/lib/lzma/LzmaTools.c b/lib/lzma/LzmaTools.c index 0aec2f9c7..90d31cdcf 100644 --- a/lib/lzma/LzmaTools.c +++ b/lib/lzma/LzmaTools.c @@ -102,7 +102,7 @@ int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize,          return SZ_ERROR_OUTPUT_EOF;      /* Decompress */ -    outProcessed = *uncompressedSize; +    outProcessed = outSizeFull;      WATCHDOG_RESET(); @@ -111,6 +111,9 @@ int lzmaBuffToBuffDecompress (unsigned char *outStream, SizeT *uncompressedSize,          inStream + LZMA_DATA_OFFSET, &compressedSize,          inStream, LZMA_PROPS_SIZE, LZMA_FINISH_END, &state, &g_Alloc);      *uncompressedSize = outProcessed; + +    debug("LZMA: Uncompresed ................ 0x%zx\n", outProcessed); +      if (res != SZ_OK)  {          return res;      } |