diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/Makefile | 5 | ||||
| -rw-r--r-- | common/cmd_boot.c | 4 | ||||
| -rw-r--r-- | common/cmd_gpio.c | 89 | ||||
| -rw-r--r-- | common/cmd_md5sum.c | 53 | ||||
| -rw-r--r-- | common/cmd_mem.c | 108 | ||||
| -rw-r--r-- | common/cmd_mmc.c | 3 | ||||
| -rw-r--r-- | common/cmd_mmc_spi.c | 88 | ||||
| -rw-r--r-- | common/cmd_nvedit.c | 8 | ||||
| -rw-r--r-- | common/cmd_sha1sum.c | 53 | ||||
| -rw-r--r-- | common/cmd_unzip.c | 59 | ||||
| -rw-r--r-- | common/fdt_support.c | 2 | 
11 files changed, 368 insertions, 104 deletions
diff --git a/common/Makefile b/common/Makefile index 5f0c5340a..f81cff93c 100644 --- a/common/Makefile +++ b/common/Makefile @@ -98,6 +98,7 @@ COBJS-$(CONFIG_CMD_FLASH) += cmd_flash.o  ifdef CONFIG_FPGA  COBJS-$(CONFIG_CMD_FPGA) += cmd_fpga.o  endif +COBJS-$(CONFIG_CMD_GPIO) += cmd_gpio.o  COBJS-$(CONFIG_CMD_I2C) += cmd_i2c.o  COBJS-$(CONFIG_CMD_IDE) += cmd_ide.o  COBJS-$(CONFIG_CMD_IMMAP) += cmd_immap.o @@ -110,6 +111,7 @@ COBJS-$(CONFIG_CMD_LICENSE) += cmd_license.o  COBJS-y += cmd_load.o  COBJS-$(CONFIG_LOGBUFFER) += cmd_log.o  COBJS-$(CONFIG_ID_EEPROM) += cmd_mac.o +COBJS-$(CONFIG_CMD_MD5SUM) += cmd_md5sum.o  COBJS-$(CONFIG_CMD_MEMORY) += cmd_mem.o  COBJS-$(CONFIG_CMD_MFSL) += cmd_mfsl.o  COBJS-$(CONFIG_CMD_MG_DISK) += cmd_mgdisk.o @@ -122,6 +124,7 @@ COBJS-$(CONFIG_CMD_MII) += cmd_mdio.o  endif  COBJS-$(CONFIG_CMD_MISC) += cmd_misc.o  COBJS-$(CONFIG_CMD_MMC) += cmd_mmc.o +COBJS-$(CONFIG_CMD_MMC_SPI) += cmd_mmc_spi.o  COBJS-$(CONFIG_MP) += cmd_mp.o  COBJS-$(CONFIG_CMD_MTDPARTS) += cmd_mtdparts.o  COBJS-$(CONFIG_CMD_NAND) += cmd_nand.o @@ -138,6 +141,7 @@ COBJS-$(CONFIG_CMD_REISER) += cmd_reiser.o  COBJS-$(CONFIG_CMD_SATA) += cmd_sata.o  COBJS-$(CONFIG_CMD_SF) += cmd_sf.o  COBJS-$(CONFIG_CMD_SCSI) += cmd_scsi.o +COBJS-$(CONFIG_CMD_SHA1SUM) += cmd_sha1sum.o  COBJS-$(CONFIG_CMD_SETEXPR) += cmd_setexpr.o  COBJS-$(CONFIG_CMD_SPI) += cmd_spi.o  COBJS-$(CONFIG_CMD_SPIBOOTLDR) += cmd_spibootldr.o @@ -148,6 +152,7 @@ COBJS-$(CONFIG_CMD_TSI148) += cmd_tsi148.o  COBJS-$(CONFIG_CMD_UBI) += cmd_ubi.o  COBJS-$(CONFIG_CMD_UBIFS) += cmd_ubifs.o  COBJS-$(CONFIG_CMD_UNIVERSE) += cmd_universe.o +COBJS-$(CONFIG_CMD_UNZIP) += cmd_unzip.o  ifdef CONFIG_CMD_USB  COBJS-y += cmd_usb.o  COBJS-y += usb.o diff --git a/common/cmd_boot.c b/common/cmd_boot.c index 7b603d350..0afd93964 100644 --- a/common/cmd_boot.c +++ b/common/cmd_boot.c @@ -28,6 +28,8 @@  #include <command.h>  #include <net.h> +#ifdef CONFIG_CMD_GO +  /* Allow ports to override the default behavior */  __attribute__((weak))  unsigned long do_go_exec (ulong (*entry)(int, char * const []), int argc, char * const argv[]) @@ -67,6 +69,8 @@ U_BOOT_CMD(  	"      passing 'arg' as arguments"  ); +#endif +  U_BOOT_CMD(  	reset, 1, 0,	do_reset,  	"Perform RESET of the CPU", diff --git a/common/cmd_gpio.c b/common/cmd_gpio.c new file mode 100644 index 000000000..9cc790aba --- /dev/null +++ b/common/cmd_gpio.c @@ -0,0 +1,89 @@ +/* + * Control GPIO pins on the fly + * + * Copyright (c) 2008-2011 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include <common.h> +#include <command.h> + +#include <asm/gpio.h> + +#ifndef name_to_gpio +#define name_to_gpio(name) simple_strtoul(name, NULL, 10) +#endif + +enum gpio_cmd { +	GPIO_INPUT, +	GPIO_SET, +	GPIO_CLEAR, +	GPIO_TOGGLE, +}; + +static int do_gpio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	int gpio; +	enum gpio_cmd sub_cmd; +	ulong value; +	const char *str_cmd, *str_gpio; + +#ifdef gpio_status +	if (argc == 2 && !strcmp(argv[1], "status")) { +		gpio_status(); +		return 0; +	} +#endif + +	if (argc != 3) + show_usage: +		return cmd_usage(cmdtp); +	str_cmd = argv[1]; +	str_gpio = argv[2]; + +	/* parse the behavior */ +	switch (*str_cmd) { +		case 'i': sub_cmd = GPIO_INPUT;  break; +		case 's': sub_cmd = GPIO_SET;    break; +		case 'c': sub_cmd = GPIO_CLEAR;  break; +		case 't': sub_cmd = GPIO_TOGGLE; break; +		default:  goto show_usage; +	} + +	/* turn the gpio name into a gpio number */ +	gpio = name_to_gpio(str_gpio); +	if (gpio < 0) +		goto show_usage; + +	/* grab the pin before we tweak it */ +	if (gpio_request(gpio, "cmd_gpio")) { +		printf("gpio: requesting pin %u failed\n", gpio); +		return -1; +	} + +	/* finally, let's do it: set direction and exec command */ +	if (sub_cmd == GPIO_INPUT) { +		gpio_direction_input(gpio); +		value = gpio_get_value(gpio); +	} else { +		switch (sub_cmd) { +			case GPIO_SET:    value = 1; break; +			case GPIO_CLEAR:  value = 0; break; +			case GPIO_TOGGLE: value = !gpio_get_value(gpio); break; +			default:          goto show_usage; +		} +		gpio_direction_output(gpio, value); +	} +	printf("gpio: pin %s (gpio %i) value is %lu\n", +		str_gpio, gpio, value); + +	gpio_free(gpio); + +	return value; +} + +U_BOOT_CMD(gpio, 3, 0, do_gpio, +	"input/set/clear/toggle gpio pins", +	"<input|set|clear|toggle> <pin>\n" +	"    - input/set/clear/toggle the specified pin"); diff --git a/common/cmd_md5sum.c b/common/cmd_md5sum.c new file mode 100644 index 000000000..d6ebb802d --- /dev/null +++ b/common/cmd_md5sum.c @@ -0,0 +1,53 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +#include <common.h> +#include <command.h> +#include <u-boot/md5.h> + +static int do_md5sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	unsigned long addr, len; +	unsigned int i; +	u8 output[16]; + +	if (argc < 3) +		return cmd_usage(cmdtp); + +	addr = simple_strtoul(argv[1], NULL, 16); +	len = simple_strtoul(argv[2], NULL, 16); + +	md5((unsigned char *) addr, len, output); +	printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1); +	for (i = 0; i < 16; i++) +		printf("%02x", output[i]); +	printf("\n"); + +	return 0; +} + +U_BOOT_CMD( +	md5sum,	3,	1,	do_md5sum, +	"compute MD5 message digest", +	"address count" +); diff --git a/common/cmd_mem.c b/common/cmd_mem.c index 4b524cfc1..a5576aaab 100644 --- a/common/cmd_mem.c +++ b/common/cmd_mem.c @@ -34,9 +34,6 @@  #endif  #include <watchdog.h> -#include <u-boot/md5.h> -#include <sha1.h> -  #ifdef	CMD_MEM_DEBUG  #define	PRINTF(fmt,args...)	printf (fmt ,##args)  #else @@ -1077,6 +1074,8 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[])  	return 0;  } +#ifdef CONFIG_CMD_CRC32 +  #ifndef CONFIG_CRC32_VERIFY  int do_mem_crc (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) @@ -1161,83 +1160,8 @@ usage:  }  #endif	/* CONFIG_CRC32_VERIFY */ -#ifdef CONFIG_CMD_MD5SUM -int do_md5sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ -	unsigned long addr, len; -	unsigned int i; -	u8 output[16]; - -	if (argc < 3) -		return cmd_usage(cmdtp); - -	addr = simple_strtoul(argv[1], NULL, 16); -	len = simple_strtoul(argv[2], NULL, 16); - -	md5((unsigned char *) addr, len, output); -	printf("md5 for %08lx ... %08lx ==> ", addr, addr + len - 1); -	for (i = 0; i < 16; i++) -		printf("%02x", output[i]); -	printf("\n"); - -	return 0; -}  #endif -#ifdef CONFIG_CMD_SHA1SUM -int do_sha1sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ -	unsigned long addr, len; -	unsigned int i; -	u8 output[20]; - -	if (argc < 3) -		return cmd_usage(cmdtp); - -	addr = simple_strtoul(argv[1], NULL, 16); -	len = simple_strtoul(argv[2], NULL, 16); - -	sha1_csum((unsigned char *) addr, len, output); -	printf("SHA1 for %08lx ... %08lx ==> ", addr, addr + len - 1); -	for (i = 0; i < 20; i++) -		printf("%02x", output[i]); -	printf("\n"); - -	return 0; -} -#endif - -#ifdef CONFIG_CMD_UNZIP -int do_unzip ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ -	unsigned long src, dst; -	unsigned long src_len = ~0UL, dst_len = ~0UL; -	char buf[32]; - -	switch (argc) { -		case 4: -			dst_len = simple_strtoul(argv[3], NULL, 16); -			/* fall through */ -		case 3: -			src = simple_strtoul(argv[1], NULL, 16); -			dst = simple_strtoul(argv[2], NULL, 16); -			break; -		default: -			return cmd_usage(cmdtp); -	} - -	if (gunzip((void *) dst, dst_len, (void *) src, &src_len) != 0) -		return 1; - -	printf("Uncompressed size: %ld = 0x%lX\n", src_len, src_len); -	sprintf(buf, "%lX", src_len); -	setenv("filesize", buf); - -	return 0; -} -#endif /* CONFIG_CMD_UNZIP */ - -  /**************************************************/  U_BOOT_CMD(  	md,	3,	1,	do_mem_md, @@ -1277,6 +1201,8 @@ U_BOOT_CMD(  	"[.b, .w, .l] addr1 addr2 count"  ); +#ifdef CONFIG_CMD_CRC32 +  #ifndef CONFIG_CRC32_VERIFY  U_BOOT_CMD( @@ -1296,6 +1222,8 @@ U_BOOT_CMD(  #endif	/* CONFIG_CRC32_VERIFY */ +#endif +  U_BOOT_CMD(  	base,	2,	1,	do_mem_base,  	"print or set address offset", @@ -1336,27 +1264,3 @@ U_BOOT_CMD(  	"[.b, .w, .l] address value delay(ms)"  );  #endif /* CONFIG_MX_CYCLIC */ - -#ifdef CONFIG_CMD_MD5SUM -U_BOOT_CMD( -	md5sum,	3,	1,	do_md5sum, -	"compute MD5 message digest", -	"address count" -); -#endif - -#ifdef CONFIG_CMD_SHA1SUM -U_BOOT_CMD( -	sha1sum,	3,	1,	do_sha1sum, -	"compute SHA1 message digest", -	"address count" -); -#endif /* CONFIG_CMD_SHA1SUM */ - -#ifdef CONFIG_CMD_UNZIP -U_BOOT_CMD( -	unzip,	4,	1,	do_unzip, -	"unzip a memory region", -	"srcaddr dstaddr [dstsize]" -); -#endif /* CONFIG_CMD_UNZIP */ diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 4323f76b3..6166749ad 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -104,7 +104,8 @@ static void print_mmcinfo(struct mmc *mmc)  			(mmc->version >> 4) & 0xf, mmc->version & 0xf);  	printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No"); -	printf("Capacity: %lld\n", mmc->capacity); +	puts("Capacity: "); +	print_size(mmc->capacity, "\n");  	printf("Bus Width: %d-bit\n", mmc->bus_width);  } diff --git a/common/cmd_mmc_spi.c b/common/cmd_mmc_spi.c new file mode 100644 index 000000000..63fe31337 --- /dev/null +++ b/common/cmd_mmc_spi.c @@ -0,0 +1,88 @@ +/* + * Command for mmc_spi setup. + * + * Copyright (C) 2010 Thomas Chou <thomas@wytron.com.tw> + * Licensed under the GPL-2 or later. + */ + +#include <common.h> +#include <mmc.h> +#include <spi.h> + +#ifndef CONFIG_MMC_SPI_BUS +# define CONFIG_MMC_SPI_BUS 0 +#endif +#ifndef CONFIG_MMC_SPI_CS +# define CONFIG_MMC_SPI_CS 1 +#endif +/* in SPI mode, MMC speed limit is 20MHz, while SD speed limit is 25MHz */ +#ifndef CONFIG_MMC_SPI_SPEED +# define CONFIG_MMC_SPI_SPEED 25000000 +#endif +/* MMC and SD specs only seem to care that sampling is on the + * rising edge ... meaning SPI modes 0 or 3.  So either SPI mode + * should be legit.  We'll use mode 0 since the steady state is 0, + * which is appropriate for hotplugging, unless the platform data + * specify mode 3 (if hardware is not compatible to mode 0). + */ +#ifndef CONFIG_MMC_SPI_MODE +# define CONFIG_MMC_SPI_MODE SPI_MODE_0 +#endif + +static int do_mmc_spi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	uint bus = CONFIG_MMC_SPI_BUS; +	uint cs = CONFIG_MMC_SPI_CS; +	uint speed = CONFIG_MMC_SPI_SPEED; +	uint mode = CONFIG_MMC_SPI_MODE; +	char *endp; +	struct mmc *mmc; + +	if (argc < 2) +		goto usage; + +	cs = simple_strtoul(argv[1], &endp, 0); +	if (*argv[1] == 0 || (*endp != 0 && *endp != ':')) +		goto usage; +	if (*endp == ':') { +		if (endp[1] == 0) +			goto usage; +		bus = cs; +		cs = simple_strtoul(endp + 1, &endp, 0); +		if (*endp != 0) +			goto usage; +	} +	if (argc >= 3) { +		speed = simple_strtoul(argv[2], &endp, 0); +		if (*argv[2] == 0 || *endp != 0) +			goto usage; +	} +	if (argc >= 4) { +		mode = simple_strtoul(argv[3], &endp, 16); +		if (*argv[3] == 0 || *endp != 0) +			goto usage; +	} +	if (!spi_cs_is_valid(bus, cs)) { +		printf("Invalid SPI bus %u cs %u\n", bus, cs); +		return 1; +	} + +	mmc = mmc_spi_init(bus, cs, speed, mode); +	if (!mmc) { +		printf("Failed to create MMC Device\n"); +		return 1; +	} +	printf("%s: %d at %u:%u hz %u mode %u\n", mmc->name, mmc->block_dev.dev, +	       bus, cs, speed, mode); +	return 0; + +usage: +	cmd_usage(cmdtp); +	return 1; +} + +U_BOOT_CMD( +	mmc_spi,	4,	0,	do_mmc_spi, +	"mmc_spi setup", +	"[bus:]cs [hz] [mode]	- setup mmc_spi device" +); diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index 6d8512aec..204a0945e 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -559,6 +559,7 @@ static int do_env_delete(cmd_tbl_t * cmdtp, int flag, int argc, char * const arg  	return 0;  } +#ifdef CONFIG_CMD_EXPORTENV  /*   * env export [-t | -b | -c] addr [size]   *	-t:	export as text format; if size is given, data will be @@ -695,7 +696,9 @@ sep_err:  		cmd);  	return 1;  } +#endif +#ifdef CONFIG_CMD_IMPORTENV  /*   * env import [-d] [-t | -b | -c] addr [size]   *	-d:	delete existing environment before importing; @@ -805,6 +808,7 @@ sep_err:  		cmd);  	return 1;  } +#endif  #if defined(CONFIG_CMD_RUN)  extern int do_run (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]); @@ -822,8 +826,12 @@ static cmd_tbl_t cmd_env_sub[] = {  #if defined(CONFIG_CMD_EDITENV)  	U_BOOT_CMD_MKENT(edit, 2, 0, do_env_edit, "", ""),  #endif +#if defined(CONFIG_CMD_EXPORTENV)  	U_BOOT_CMD_MKENT(export, 4, 0, do_env_export, "", ""), +#endif +#if defined(CONFIG_CMD_IMPORTENV)  	U_BOOT_CMD_MKENT(import, 5, 0, do_env_import, "", ""), +#endif  	U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_env_print, "", ""),  #if defined(CONFIG_CMD_RUN)  	U_BOOT_CMD_MKENT(run, CONFIG_SYS_MAXARGS, 1, do_run, "", ""), diff --git a/common/cmd_sha1sum.c b/common/cmd_sha1sum.c new file mode 100644 index 000000000..bb3cff01f --- /dev/null +++ b/common/cmd_sha1sum.c @@ -0,0 +1,53 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +#include <common.h> +#include <command.h> +#include <sha1.h> + +static int do_sha1sum(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	unsigned long addr, len; +	unsigned int i; +	u8 output[20]; + +	if (argc < 3) +		return cmd_usage(cmdtp); + +	addr = simple_strtoul(argv[1], NULL, 16); +	len = simple_strtoul(argv[2], NULL, 16); + +	sha1_csum((unsigned char *) addr, len, output); +	printf("SHA1 for %08lx ... %08lx ==> ", addr, addr + len - 1); +	for (i = 0; i < 20; i++) +		printf("%02x", output[i]); +	printf("\n"); + +	return 0; +} + +U_BOOT_CMD( +	sha1sum,	3,	1,	do_sha1sum, +	"compute SHA1 message digest", +	"address count" +); diff --git a/common/cmd_unzip.c b/common/cmd_unzip.c new file mode 100644 index 000000000..6483b9267 --- /dev/null +++ b/common/cmd_unzip.c @@ -0,0 +1,59 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +#include <common.h> +#include <command.h> + +static int do_unzip(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ +	unsigned long src, dst; +	unsigned long src_len = ~0UL, dst_len = ~0UL; +	char buf[32]; + +	switch (argc) { +		case 4: +			dst_len = simple_strtoul(argv[3], NULL, 16); +			/* fall through */ +		case 3: +			src = simple_strtoul(argv[1], NULL, 16); +			dst = simple_strtoul(argv[2], NULL, 16); +			break; +		default: +			return cmd_usage(cmdtp); +	} + +	if (gunzip((void *) dst, dst_len, (void *) src, &src_len) != 0) +		return 1; + +	printf("Uncompressed size: %ld = 0x%lX\n", src_len, src_len); +	sprintf(buf, "%lX", src_len); +	setenv("filesize", buf); + +	return 0; +} + +U_BOOT_CMD( +	unzip,	4,	1,	do_unzip, +	"unzip a memory region", +	"srcaddr dstaddr [dstsize]" +); diff --git a/common/fdt_support.c b/common/fdt_support.c index 6c98e5b07..edcf04a21 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -394,7 +394,7 @@ int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks)  {  	int err, nodeoffset;  	int addr_cell_len, size_cell_len, len; -	u8 tmp[banks * 8]; +	u8 tmp[banks * 16]; /* Up to 64-bit address + 64-bit size */  	int bank;  	err = fdt_check_header(blob);  |