diff options
Diffstat (limited to 'common')
| -rw-r--r-- | common/cmd_doc.c | 19 | ||||
| -rw-r--r-- | common/cmd_ide.c | 60 | ||||
| -rw-r--r-- | common/cmd_nand.c | 38 | ||||
| -rw-r--r-- | common/cmd_net.c | 26 | ||||
| -rw-r--r-- | common/cmd_reiser.c | 6 | ||||
| -rw-r--r-- | common/env_common.c | 2 | 
6 files changed, 113 insertions, 38 deletions
| diff --git a/common/cmd_doc.c b/common/cmd_doc.c index ab3751695..4e624a2f3 100644 --- a/common/cmd_doc.c +++ b/common/cmd_doc.c @@ -216,6 +216,7 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	image_header_t *hdr;  	int rcode = 0; +	SHOW_BOOT_PROGRESS (34);  	switch (argc) {  	case 1:  		addr = CFG_LOAD_ADDR; @@ -236,24 +237,27 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		break;  	default:  		printf ("Usage:\n%s\n", cmdtp->usage); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-35);  		return 1;  	} +	SHOW_BOOT_PROGRESS (35);  	if (!boot_device) {  		puts ("\n** No boot device **\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-36);  		return 1;  	} +	SHOW_BOOT_PROGRESS (36);  	dev = simple_strtoul(boot_device, &ep, 16);  	if ((dev >= CFG_MAX_DOC_DEVICE) ||  	    (doc_dev_desc[dev].ChipID == DOC_ChipID_UNKNOWN)) {  		printf ("\n** Device %d not available\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-37);  		return 1;  	} +	SHOW_BOOT_PROGRESS (37);  	printf ("\nLoading from device %d: %s at 0x%lX (offset 0x%lX)\n",  		dev, doc_dev_desc[dev].name, doc_dev_desc[dev].physadr, @@ -262,9 +266,10 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	if (doc_rw (doc_dev_desc + dev, 1, offset,  		    SECTORSIZE, NULL, (u_char *)addr)) {  		printf ("** Read error on %d\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-38);  		return 1;  	} +	SHOW_BOOT_PROGRESS (38);  	hdr = (image_header_t *)addr; @@ -276,16 +281,18 @@ int do_docboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		cnt -= SECTORSIZE;  	} else {  		puts ("\n** Bad Magic Number **\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-39);  		return 1;  	} +	SHOW_BOOT_PROGRESS (39);  	if (doc_rw (doc_dev_desc + dev, 1, offset + SECTORSIZE, cnt,  		    NULL, (u_char *)(addr+SECTORSIZE))) {  		printf ("** Read error on %d\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-40);  		return 1;  	} +	SHOW_BOOT_PROGRESS (40);  	/* Loading ok, update default load address */ diff --git a/common/cmd_ide.c b/common/cmd_ide.c index e308474af..c74cde96e 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -185,6 +185,9 @@ static void input_data(int dev, ulong *sect_buf, int words);  static void output_data(int dev, ulong *sect_buf, int words);  static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len); +#ifndef CFG_ATA_PORT_ADDR +#define CFG_ATA_PORT_ADDR(port) (port) +#endif  #ifdef CONFIG_ATAPI  static void	atapi_inquiry(block_dev_desc_t *dev_desc); @@ -382,6 +385,7 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	image_header_t *hdr;  	int rcode = 0; +	SHOW_BOOT_PROGRESS (41);  	switch (argc) {  	case 1:  		addr = CFG_LOAD_ADDR; @@ -397,44 +401,50 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		break;  	default:  		printf ("Usage:\n%s\n", cmdtp->usage); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-42);  		return 1;  	} +	SHOW_BOOT_PROGRESS (42);  	if (!boot_device) {  		puts ("\n** No boot device **\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-43);  		return 1;  	} +	SHOW_BOOT_PROGRESS (43);  	dev = simple_strtoul(boot_device, &ep, 16);  	if (ide_dev_desc[dev].type==DEV_TYPE_UNKNOWN) {  		printf ("\n** Device %d not available\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-44);  		return 1;  	} +	SHOW_BOOT_PROGRESS (44);  	if (*ep) {  		if (*ep != ':') {  			puts ("\n** Invalid boot device, use `dev[:part]' **\n"); -			SHOW_BOOT_PROGRESS (-1); +			SHOW_BOOT_PROGRESS (-45);  			return 1;  		}  		part = simple_strtoul(++ep, NULL, 16);  	} +	SHOW_BOOT_PROGRESS (45);  	if (get_partition_info (&ide_dev_desc[dev], part, &info)) { -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-46);  		return 1;  	} +	SHOW_BOOT_PROGRESS (46);  	if ((strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) &&  	    (strncmp((char *)info.type, BOOT_PART_COMP, sizeof(info.type)) != 0)) {  		printf ("\n** Invalid partition type \"%.32s\""  			" (expect \"" BOOT_PART_TYPE "\")\n",  			info.type); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-47);  		return 1;  	} +	SHOW_BOOT_PROGRESS (47);  	printf ("\nLoading from IDE device %d, partition %d: "  		"Name: %.32s  Type: %.32s\n", @@ -445,26 +455,29 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	if (ide_dev_desc[dev].block_read (dev, info.start, 1, (ulong *)addr) != 1) {  		printf ("** Read error on %d:%d\n", dev, part); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-48);  		return 1;  	} +	SHOW_BOOT_PROGRESS (48);  	hdr = (image_header_t *)addr;  	if (ntohl(hdr->ih_magic) != IH_MAGIC) {  		printf("\n** Bad Magic Number **\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-49);  		return 1;  	} +	SHOW_BOOT_PROGRESS (49);  	checksum = ntohl(hdr->ih_hcrc);  	hdr->ih_hcrc = 0;  	if (crc32 (0, (uchar *)hdr, sizeof(image_header_t)) != checksum) {  		puts ("\n** Bad Header Checksum **\n"); -		SHOW_BOOT_PROGRESS (-2); +		SHOW_BOOT_PROGRESS (-50);  		return 1;  	} +	SHOW_BOOT_PROGRESS (50);  	hdr->ih_hcrc = htonl(checksum); /* restore checksum for later use */  	print_image_hdr (hdr); @@ -477,9 +490,10 @@ int do_diskboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	if (ide_dev_desc[dev].block_read (dev, info.start+1, cnt,  		      (ulong *)(addr+info.blksz)) != cnt) {  		printf ("** Read error on %d:%d\n", dev, part); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-51);  		return 1;  	} +	SHOW_BOOT_PROGRESS (51);  	/* Loading ok, update default load address */ @@ -807,13 +821,13 @@ ide_outb(int dev, int port, unsigned char val)  	/* Ensure I/O operations complete */  	EIEIO; -	*((uchar *)(ATA_CURR_BASE(dev)+port)) = val; +	*((u16 *)(ATA_CURR_BASE(dev)+CFG_ATA_PORT_ADDR(port))) = val;  }  #else	/* ! __PPC__ */  static void __inline__  ide_outb(int dev, int port, unsigned char val)  { -	outb(val, ATA_CURR_BASE(dev)+port); +	outb(val, ATA_CURR_BASE(dev)+CFG_ATA_PORT_ADDR(port));  }  #endif	/* __PPC__ */ @@ -825,7 +839,7 @@ ide_inb(int dev, int port)  	uchar val;  	/* Ensure I/O operations complete */  	EIEIO; -	val = *((uchar *)(ATA_CURR_BASE(dev)+port)); +	val = *((u16 *)(ATA_CURR_BASE(dev)+CFG_ATA_PORT_ADDR(port)));  	debug ("ide_inb (dev= %d, port= 0x%x) : @ 0x%08lx -> 0x%02x\n",  		dev, port, (ATA_CURR_BASE(dev)+port), val);  	return (val); @@ -834,7 +848,7 @@ ide_inb(int dev, int port)  static unsigned char __inline__  ide_inb(int dev, int port)  { -  return inb(ATA_CURR_BASE(dev)+port); +  return inb(ATA_CURR_BASE(dev)+CFG_ATA_PORT_ADDR(port));  }  #endif	/* __PPC__ */ @@ -891,6 +905,9 @@ input_swap_data(int dev, ulong *sect_buf, int words)  #ifdef __MIPS__  		*dbuf++ = swab16p((u16*)pbuf);  		*dbuf++ = swab16p((u16*)pbuf); +#elif defined(CONFIG_PCS440EP) +		*dbuf++ = *pbuf; +		*dbuf++ = *pbuf;  #else  		*dbuf++ = ld_le16(pbuf);  		*dbuf++ = ld_le16(pbuf); @@ -930,10 +947,18 @@ output_data(int dev, ulong *sect_buf, int words)  	pbuf = (ushort *)(ATA_CURR_BASE(dev)+ATA_DATA_REG);  	dbuf = (ushort *)sect_buf;  	while (words--) { +#if defined(CONFIG_PCS440EP) +		/* not tested, because CF was write protected */ +		EIEIO; +		*pbuf = ld_le16(dbuf++); +		EIEIO; +		*pbuf = ld_le16(dbuf++); +#else  		EIEIO;  		*pbuf = *dbuf++;  		EIEIO;  		*pbuf = *dbuf++; +#endif  	}  #endif  } @@ -981,10 +1006,17 @@ input_data(int dev, ulong *sect_buf, int words)  	debug("in input data base for read is %lx\n", (unsigned long) pbuf);  	while (words--) { +#if defined(CONFIG_PCS440EP) +		EIEIO; +		*dbuf++ = ld_le16(pbuf); +		EIEIO; +		*dbuf++ = ld_le16(pbuf); +#else  		EIEIO;  		*dbuf++ = *pbuf;  		EIEIO;  		*dbuf++ = *pbuf; +#endif  	}  #endif  } diff --git a/common/cmd_nand.c b/common/cmd_nand.c index b011b5e3d..b088150f3 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -486,17 +486,19 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,  	r = nand_read(nand, offset, &cnt, (u_char *) addr);  	if (r) {  		puts("** Read error\n"); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-56);  		return 1;  	} +	SHOW_BOOT_PROGRESS(56);  	hdr = (image_header_t *) addr;  	if (ntohl(hdr->ih_magic) != IH_MAGIC) {  		printf("\n** Bad Magic Number 0x%x **\n", hdr->ih_magic); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-57);  		return 1;  	} +	SHOW_BOOT_PROGRESS(57);  	print_image_hdr(hdr); @@ -505,9 +507,10 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand,  	r = nand_read(nand, offset, &cnt, (u_char *) addr);  	if (r) {  		puts("** Read error\n"); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-58);  		return 1;  	} +	SHOW_BOOT_PROGRESS(58);  	/* Loading ok, update default load address */ @@ -559,6 +562,7 @@ int do_nandboot(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  	}  #endif +	SHOW_BOOT_PROGRESS(52);  	switch (argc) {  	case 1:  		addr = CFG_LOAD_ADDR; @@ -582,23 +586,26 @@ int do_nandboot(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  usage:  #endif  		printf("Usage:\n%s\n", cmdtp->usage); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-53);  		return 1;  	} +	SHOW_BOOT_PROGRESS(53);  	if (!boot_device) {  		puts("\n** No boot device **\n"); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-54);  		return 1;  	} +	SHOW_BOOT_PROGRESS(54);  	idx = simple_strtoul(boot_device, NULL, 16);  	if (idx < 0 || idx >= CFG_MAX_NAND_DEVICE || !nand_info[idx].name) {  		printf("\n** Device %d not available\n", idx); -		SHOW_BOOT_PROGRESS(-1); +		SHOW_BOOT_PROGRESS(-55);  		return 1;  	} +	SHOW_BOOT_PROGRESS(55);  	return nand_load_image(cmdtp, &nand_info[idx], offset, addr, argv[0]);  } @@ -887,6 +894,7 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	ulong offset = 0;  	image_header_t *hdr;  	int rcode = 0; +	SHOW_BOOT_PROGRESS(52);  	switch (argc) {  	case 1:  		addr = CFG_LOAD_ADDR; @@ -907,24 +915,27 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		break;  	default:  		printf ("Usage:\n%s\n", cmdtp->usage); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-53);  		return 1;  	} +	SHOW_BOOT_PROGRESS(53);  	if (!boot_device) {  		puts ("\n** No boot device **\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-54);  		return 1;  	} +	SHOW_BOOT_PROGRESS(54);  	dev = simple_strtoul(boot_device, &ep, 16);  	if ((dev >= CFG_MAX_NAND_DEVICE) ||  	    (nand_dev_desc[dev].ChipID == NAND_ChipID_UNKNOWN)) {  		printf ("\n** Device %d not available\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-55);  		return 1;  	} +	SHOW_BOOT_PROGRESS(55);  	printf ("\nLoading from device %d: %s at 0x%lx (offset 0x%lx)\n",  		dev, nand_dev_desc[dev].name, nand_dev_desc[dev].IO_ADDR, @@ -933,9 +944,10 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ, offset,  			SECTORSIZE, NULL, (u_char *)addr)) {  		printf ("** Read error on %d\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-56);  		return 1;  	} +	SHOW_BOOT_PROGRESS(56);  	hdr = (image_header_t *)addr; @@ -947,17 +959,19 @@ int do_nandboot (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		cnt -= SECTORSIZE;  	} else {  		printf ("\n** Bad Magic Number 0x%x **\n", ntohl(hdr->ih_magic)); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-57);  		return 1;  	} +	SHOW_BOOT_PROGRESS(57);  	if (nand_legacy_rw (nand_dev_desc + dev, NANDRW_READ,  			offset + SECTORSIZE, cnt, NULL,  			(u_char *)(addr+SECTORSIZE))) {  		printf ("** Read error on %d\n", dev); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-58);  		return 1;  	} +	SHOW_BOOT_PROGRESS(58);  	/* Loading ok, update default load address */ diff --git a/common/cmd_net.c b/common/cmd_net.c index 2cb2c5d34..e9d552e23 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -30,6 +30,13 @@  #if (CONFIG_COMMANDS & CFG_CMD_NET) +#ifdef CONFIG_SHOW_BOOT_PROGRESS +# include <status_led.h> +extern void show_boot_progress (int val); +# define SHOW_BOOT_PROGRESS(arg)	show_boot_progress (arg) +#else +# define SHOW_BOOT_PROGRESS(arg) +#endif  extern int do_bootm (cmd_tbl_t *, int, int, char *[]); @@ -184,18 +191,25 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])  		break;  	default: printf ("Usage:\n%s\n", cmdtp->usage); +		SHOW_BOOT_PROGRESS(-80);  		return 1;  	} -	if ((size = NetLoop(proto)) < 0) +	SHOW_BOOT_PROGRESS(80); +	if ((size = NetLoop(proto)) < 0) { +		SHOW_BOOT_PROGRESS(-81);  		return 1; +	} +	SHOW_BOOT_PROGRESS(81);  	/* NetLoop ok, update environment */  	netboot_update_env();  	/* done if no file was loaded (no errors though) */ -	if (size == 0) +	if (size == 0) { +		SHOW_BOOT_PROGRESS(-82);  		return 0; +	}  	/* flush cache */  	flush_cache(load_addr, size); @@ -208,15 +222,23 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])  		printf ("Automatic boot of image at addr 0x%08lX ...\n",  			load_addr); +		SHOW_BOOT_PROGRESS(82);  		rcode = do_bootm (cmdtp, 0, 1, local_args);  	}  #ifdef CONFIG_AUTOSCRIPT  	if (((s = getenv("autoscript")) != NULL) && (strcmp(s,"yes") == 0)) {  		printf("Running autoscript at addr 0x%08lX ...\n", load_addr); +		SHOW_BOOT_PROGRESS(83);  		rcode = autoscript (load_addr);  	}  #endif +#if defined(CONFIG_SHOW_BOOT_PROGRESS) +	if (rcode < 0) +		SHOW_BOOT_PROGRESS(-83); +	else +		SHOW_BOOT_PROGRESS(84); +#endif  	return rcode;  } diff --git a/common/cmd_reiser.c b/common/cmd_reiser.c index 09c86e66d..d83c31ab3 100644 --- a/common/cmd_reiser.c +++ b/common/cmd_reiser.c @@ -90,7 +90,7 @@ int do_reiserls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  	if (!reiserfs_mount(part_length)) { -		printf ("** Bad Reisefs partition or disk - %s %d:%d **\n",  argv[1], dev, part); +		printf ("** Bad Reiserfs partition or disk - %s %d:%d **\n",  argv[1], dev, part);  		return 1;  	} @@ -183,7 +183,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			return 1;  		} -		if (strncmp(info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) { +		if (strncmp((char *)info.type, BOOT_PART_TYPE, sizeof(info.type)) != 0) {  			printf ("\n** Invalid partition type \"%.32s\""  				" (expect \"" BOOT_PART_TYPE "\")\n",  				info.type); @@ -204,7 +204,7 @@ int do_reiserload (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  	}  	if (!reiserfs_mount(part_length)) { -		printf ("** Bad Reisefs partition or disk - %s %d:%d **\n",  argv[1], dev, part); +		printf ("** Bad Reiserfs partition or disk - %s %d:%d **\n",  argv[1], dev, part);  		return 1;  	} diff --git a/common/env_common.c b/common/env_common.c index eb33422af..0462cad6d 100644 --- a/common/env_common.c +++ b/common/env_common.c @@ -232,7 +232,7 @@ void env_relocate (void)  		puts ("Using default environment\n\n");  #else  		puts ("*** Warning - bad CRC, using default environment\n\n"); -		SHOW_BOOT_PROGRESS (-1); +		SHOW_BOOT_PROGRESS (-60);  #endif  		if (sizeof(default_environment) > ENV_SIZE) |