diff options
| author | wdenk <wdenk> | 2003-08-05 17:43:17 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-08-05 17:43:17 +0000 | 
| commit | bdccc4fedcf9c5fc1f06e8f833d792198c9d04ae (patch) | |
| tree | 00c1b93f6731d838eae4f8f688d4f95c14471d0a | |
| parent | 96dd9af4c7c5669924c2e40734b246f207b9a8b4 (diff) | |
| download | olio-uboot-2014.01-bdccc4fedcf9c5fc1f06e8f833d792198c9d04ae.tar.xz olio-uboot-2014.01-bdccc4fedcf9c5fc1f06e8f833d792198c9d04ae.zip | |
* Map ISP1362 USB OTG controller for NSCU board
* Patch by Brad Parker, 02 Aug 2003:
  fix sc520_cdp problems
* Implement Boot Cycle Detection (Req. 2.3 of OSDL CGL Reqirements)
* Allow erase command to cross flash bank boundaries
| -rw-r--r-- | CHANGELOG | 9 | ||||
| -rw-r--r-- | Makefile | 16 | ||||
| -rw-r--r-- | board/sc520_cdp/Makefile | 2 | ||||
| -rw-r--r-- | board/sc520_cdp/flash.c | 2 | ||||
| -rw-r--r-- | board/sc520_cdp/sc520_cdp.c | 21 | ||||
| -rw-r--r-- | board/sc520_cdp/u-boot.lds | 2 | ||||
| -rw-r--r-- | board/tqm8xx/tqm8xx.c | 8 | ||||
| -rw-r--r-- | common/cmd_bootm.c | 4 | ||||
| -rw-r--r-- | common/cmd_flash.c | 271 | ||||
| -rw-r--r-- | common/main.c | 28 | ||||
| -rw-r--r-- | cpu/mpc8260/commproc.c | 24 | ||||
| -rw-r--r-- | cpu/mpc8xx/commproc.c | 26 | ||||
| -rw-r--r-- | include/asm-ppc/cpm_8260.h | 7 | ||||
| -rw-r--r-- | include/common.h | 5 | ||||
| -rw-r--r-- | include/commproc.h | 6 | ||||
| -rw-r--r-- | include/configs/NSCU.h | 11 | ||||
| -rw-r--r-- | tools/mkimage.c | 6 | 
17 files changed, 310 insertions, 138 deletions
| @@ -2,6 +2,15 @@  Changes for U-Boot 0.4.5:  ====================================================================== +* Map ISP1362 USB OTG controller for NSCU board + +* Patch by Brad Parker, 02 Aug 2003: +  fix sc520_cdp problems + +* Implement Boot Cycle Detection (Req. 2.3 of OSDL CGL Reqirements) + +* Allow erase command to cross flash bank boundaries +  * Patch by Scott McNutt, 21 Jul 2003:    Add support for LynuxWorks Kernel Downloadable Images (KDIs).    Both LynxOS and BlueCat linux KDIs are supported. @@ -117,12 +117,11 @@ LIBS += common/libcommon.a  LIBS += lib_generic/libgeneric.a  ######################################################################### +######################################################################### -all:		u-boot.srec u-boot.bin System.map +ALL = u-boot.srec u-boot.bin System.map -install:	all -		-cp u-boot.bin /tftpboot/u-boot.bin -		-cp u-boot.bin /net/denx/tftpboot/u-boot.bin +all:		$(ALL)  u-boot.srec:	u-boot  		$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ @@ -130,6 +129,13 @@ u-boot.srec:	u-boot  u-boot.bin:	u-boot  		$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ +u-boot.img:	u-boot.bin +		./tools/mkimage -A $(ARCH) -T firmware -C none \ +		-a $(TEXT_BASE) -e 0 \ +		-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' include/version.h | \ +			sed -e 's/"[	 ]*$$/ for $(BOARD) board"/') \ +		-d $< $@ +  u-boot.dis:	u-boot  		$(OBJDUMP) -d $< > $@ @@ -864,7 +870,7 @@ clobber:	clean  		| xargs rm -f  	rm -f $(OBJS) *.bak tags TAGS  	rm -fr *.*~ -	rm -f u-boot u-boot.bin u-boot.srec u-boot.map System.map +	rm -f u-boot u-boot.map $(ALL)  	rm -f tools/crc32.c tools/environment.c tools/env/crc32.c  	rm -f tools/inca-swap-bytes cpu/mpc824x/bedbug_603e.c  	rm -f include/asm/proc include/asm/arch include/asm diff --git a/board/sc520_cdp/Makefile b/board/sc520_cdp/Makefile index f9a36f9f4..ab06ebc81 100644 --- a/board/sc520_cdp/Makefile +++ b/board/sc520_cdp/Makefile @@ -29,7 +29,7 @@ OBJS	:= sc520_cdp.o flash.o  SOBJS	:= sc520_cdp_asm.o sc520_cdp_asm16.o  $(LIB):	$(OBJS) $(SOBJS) -	$(AR) crv $@ $(OBJS) +	$(AR) crv $@ $(OBJS) $(SOBJS)  clean:  	rm -f $(SOBJS) $(OBJS) diff --git a/board/sc520_cdp/flash.c b/board/sc520_cdp/flash.c index a4d37e508..2f7ce5254 100644 --- a/board/sc520_cdp/flash.c +++ b/board/sc520_cdp/flash.c @@ -325,7 +325,7 @@ void flash_print_info(flash_info_t *info)  	}  	printf ("\n"); -	done: +done:	;  }  /*----------------------------------------------------------------------- diff --git a/board/sc520_cdp/sc520_cdp.c b/board/sc520_cdp/sc520_cdp.c index 0fc836c62..cd5232482 100644 --- a/board/sc520_cdp/sc520_cdp.c +++ b/board/sc520_cdp/sc520_cdp.c @@ -28,7 +28,7 @@  #include <asm/pci.h>  #include <asm/ic/sc520.h>  #include <asm/ic/ali512x.h> -#include <ssi.h> +#include <spi.h>  #undef SC520_CDP_DEBUG @@ -557,6 +557,19 @@ void ssi_chip_select(int dev)  	}  } +void spi_eeprom_probe(int x) +{ +} + +int spi_eeprom_read(int x, int offset, char *buffer, int len) +{ +       return 0; +} + +int spi_eeprom_write(int x, int offset, char *buffer, int len) +{ +       return 0; +}  void spi_init_f(void)  { @@ -586,6 +599,9 @@ ssize_t spi_read(uchar *addr, int alen, uchar *buffer, int len)  #ifdef CONFIG_SC520_CDP_USE_MW  	res = mw_eeprom_read(2, offset, buffer, len);  #endif +#if !defined(CONFIG_SC520_CDP_USE_SPI) && !defined(CONFIG_SC520_CDP_USE_MW) +	res = 0; +#endif  	return res;  } @@ -607,5 +623,8 @@ ssize_t spi_write(uchar *addr, int alen, uchar *buffer, int len)  #ifdef CONFIG_SC520_CDP_USE_MW  	res = mw_eeprom_write(2, offset, buffer, len);  #endif +#if !defined(CONFIG_SC520_CDP_USE_SPI) && !defined(CONFIG_SC520_CDP_USE_MW) +	res = 0; +#endif  	return res;  } diff --git a/board/sc520_cdp/u-boot.lds b/board/sc520_cdp/u-boot.lds index 1944a74aa..9d2f71c33 100644 --- a/board/sc520_cdp/u-boot.lds +++ b/board/sc520_cdp/u-boot.lds @@ -31,7 +31,7 @@ SECTIONS  	.text  : { *(.text); }  	. = ALIGN(4); -	.rodata : { *(.rodata) } +	.rodata : { *(.rodata) *(.rodata.str1.1) *(.rodata.str1.32) }  	. = 0x400000; 	                    /* Ram data segment to use */  	_i386boot_romdata_dest = ABSOLUTE(.); diff --git a/board/tqm8xx/tqm8xx.c b/board/tqm8xx/tqm8xx.c index 05004829b..f9b04f8aa 100644 --- a/board/tqm8xx/tqm8xx.c +++ b/board/tqm8xx/tqm8xx.c @@ -363,7 +363,13 @@ long int initdram (int board_type)  	memctl->memc_mcr = 0x011C | UPMB;  #endif							/* CONFIG_CAN_DRIVER */ - +#ifdef	CONFIG_ISP1362_USB +	/* Initialize OR5 / BR5 */ +	memctl->memc_or5 = CFG_OR5_ISP1362; +	memctl->memc_br5 = CFG_BR5_ISP1362; +#endif							/* CONFIG_ISP1362_USB */ +	     +	      	return (size_b0 + size_b1);  } diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 794f0de13..44331ab17 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -1012,9 +1012,9 @@ int do_imls (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  			printf ("Image at %08lX:\n", (ulong)hdr);  			print_image_hdr( hdr );  			putc ('\n'); -		next_sector: +next_sector:		;  		} -	next_bank: +next_bank:	;  	}  	return (0); diff --git a/common/cmd_flash.c b/common/cmd_flash.c index 811b89b00..4de022ee8 100644 --- a/common/cmd_flash.c +++ b/common/cmd_flash.c @@ -56,45 +56,120 @@ extern flash_info_t flash_info[];	/* info for FLASH chips */   *			  or an invalid flash bank.   */  static int -abbrev_spec(char *str, flash_info_t **pinfo, int *psf, int *psl) +abbrev_spec (char *str, flash_info_t ** pinfo, int *psf, int *psl)  { -    flash_info_t *fp; -    int bank, first, last; -    char *p, *ep; +	flash_info_t *fp; +	int bank, first, last; +	char *p, *ep; -    if ((p = strchr(str, ':')) == NULL) -	return 0; -    *p++ = '\0'; +	if ((p = strchr (str, ':')) == NULL) +		return 0; +	*p++ = '\0'; -    bank = simple_strtoul(str, &ep, 10); -    if (ep == str || *ep != '\0' || -      bank < 1 || bank > CFG_MAX_FLASH_BANKS || -      (fp = &flash_info[bank - 1])->flash_id == FLASH_UNKNOWN) -	return -1; +	bank = simple_strtoul (str, &ep, 10); +	if (ep == str || *ep != '\0' || +		bank < 1 || bank > CFG_MAX_FLASH_BANKS || +		(fp = &flash_info[bank - 1])->flash_id == FLASH_UNKNOWN) +		return -1; -    str = p; -    if ((p = strchr(str, '-')) != NULL) -	*p++ = '\0'; +	str = p; +	if ((p = strchr (str, '-')) != NULL) +		*p++ = '\0'; -    first = simple_strtoul(str, &ep, 10); -    if (ep == str || *ep != '\0' || first >= fp->sector_count) -	return -1; +	first = simple_strtoul (str, &ep, 10); +	if (ep == str || *ep != '\0' || first >= fp->sector_count) +		return -1; -    if (p != NULL) { -	last = simple_strtoul(p, &ep, 10); -	if (ep == p || *ep != '\0' || -	  last < first || last >= fp->sector_count) -	    return -1; -    } -    else -	last = first; +	if (p != NULL) { +		last = simple_strtoul (p, &ep, 10); +		if (ep == p || *ep != '\0' || +			last < first || last >= fp->sector_count) +			return -1; +	} else { +		last = first; +	} -    *pinfo = fp; -    *psf = first; -    *psl = last; +	*pinfo = fp; +	*psf = first; +	*psl = last; -    return 1; +	return 1;  } + +static int +flash_fill_sect_ranges (ulong addr_first, ulong addr_last, +			int *s_first, int *s_last, +			int *s_count ) +{ +	flash_info_t *info; +	ulong bank; +	int rcode = 0; + +	*s_count = 0; + +	for (bank=0; bank < CFG_MAX_FLASH_BANKS; ++bank) { +		s_first[bank] = -1;	/* first sector to erase	*/ +		s_last [bank] = -1;	/* last  sector to erase	*/ +	} + +	for (bank=0,info=&flash_info[0]; +	     (bank < CFG_MAX_FLASH_BANKS) && (addr_first <= addr_last); +	     ++bank, ++info) { +		ulong b_end; +		int sect; +		short s_end; + +		if (info->flash_id == FLASH_UNKNOWN) { +			continue; +		} + +		b_end = info->start[0] + info->size - 1;	/* bank end addr */ +		s_end = info->sector_count - 1;			/* last sector   */ + + +		for (sect=0; sect < info->sector_count; ++sect) { +			ulong end;	/* last address in current sect	*/ + +			end = (sect == s_end) ? b_end : info->start[sect + 1] - 1; + +			if (addr_first > end) +				continue; +			if (addr_last < info->start[sect]) +				continue; + +			if (addr_first == info->start[sect]) { +				s_first[bank] = sect; +			} +			if (addr_last  == end) { +				s_last[bank]  = sect; +			} +		} +		if (s_first[bank] >= 0) { +			if (s_last[bank] < 0) { +				if (addr_last > b_end) { +					s_last[bank] = s_end; +				} else { +					printf ("Error: end address" +						" not on sector boundary\n"); +					rcode = 1; +					break; +				} +			} +			if (s_last[bank] < s_first[bank]) { +				printf ("Error: end sector" +					" precedes start sector\n"); +				rcode = 1; +				break; +			} +			sect = s_last[bank]; +			addr_first = (sect == s_end) ? b_end + 1: info->start[sect + 1]; +			(*s_count) += s_last[bank] - s_first[bank] + 1; +		} +	} + +	return rcode; +} +  int do_flinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	ulong bank; @@ -180,7 +255,6 @@ int do_flerase (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		return 1;  	} -	printf ("Erase Flash from 0x%08lx to 0x%08lx ", addr_first, addr_last);  	rcode = flash_sect_erase(addr_first, addr_last);  	return rcode;  } @@ -189,53 +263,32 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)  {  	flash_info_t *info;  	ulong bank; -	int s_first, s_last; -	int erased; +	int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS]; +	int erased = 0; +	int planned;  	int rcode = 0; -	erased = 0; - -	for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) { -		ulong b_end; -		int sect; - -		if (info->flash_id == FLASH_UNKNOWN) { -			continue; -		} +	rcode = flash_fill_sect_ranges (addr_first, addr_last, +					s_first, s_last, &planned ); -		b_end = info->start[0] + info->size - 1; /* bank end addr */ - -		s_first = -1;		/* first sector to erase	*/ -		s_last  = -1;		/* last  sector to erase	*/ - -		for (sect=0; sect < info->sector_count; ++sect) { -			ulong end;		/* last address in current sect	*/ -			short s_end; - -			s_end = info->sector_count - 1; - -			end = (sect == s_end) ? b_end : info->start[sect + 1] - 1; - -			if (addr_first > end) -				continue; -			if (addr_last < info->start[sect]) -				continue; - -			if (addr_first == info->start[sect]) { -				s_first = sect; +	if (planned && (rcode == 0)) { +		for (bank=0,info=&flash_info[0]; +		     (bank < CFG_MAX_FLASH_BANKS) && (rcode == 0); +		     ++bank, ++info) { +			if (s_first[bank]>=0) { +				erased += s_last[bank] - s_first[bank] + 1; +				printf ("Erase Flash from 0x%08lx to 0x%08lx " +					"in Bank # %ld ", +					info->start[s_first[bank]], +					(s_last[bank] == info->sector_count) ? +						info->start[0] + info->size - 1: +						info->start[s_last[bank]+1] - 1, +					bank+1); +				rcode = flash_erase (info, s_first[bank], s_last[bank]);  			} -			if (addr_last  == end) { -				s_last  = sect; -			} -		} -		if (s_first>=0 && s_first<=s_last) { -			erased += s_last - s_first + 1; -			rcode = flash_erase (info, s_first, s_last);  		} -	} -	if (erased) {  		printf ("Erased %d sectors\n", erased); -	} else { +	} else if (rcode == 0) {  		printf ("Error: start and/or end address"  			" not on sector boundary\n");  		rcode = 1; @@ -243,7 +296,6 @@ int flash_sect_erase (ulong addr_first, ulong addr_last)  	return rcode;  } -  int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  {  	flash_info_t *info; @@ -256,11 +308,11 @@ int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  		return 1;  	} -	if (strcmp(argv[1], "off") == 0) +	if (strcmp(argv[1], "off") == 0) {  		p = 0; -	else if (strcmp(argv[1], "on") == 0) +	} else if (strcmp(argv[1], "on") == 0) {  		p = 1; -	else { +	} else {  		printf ("Usage:\n%s\n", cmdtp->usage);  		return 1;  	} @@ -370,66 +422,43 @@ int flash_sect_protect (int p, ulong addr_first, ulong addr_last)  {  	flash_info_t *info;  	ulong bank; -	int s_first, s_last; +	int s_first[CFG_MAX_FLASH_BANKS], s_last[CFG_MAX_FLASH_BANKS];  	int protected, i; -	int rcode = 0; - -	protected = 0; - -	for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) { -		ulong b_end; -		int sect; - -		if (info->flash_id == FLASH_UNKNOWN) { -			continue; -		} - -		b_end = info->start[0] + info->size - 1; /* bank end addr */ - -		s_first = -1;		/* first sector to erase	*/ -		s_last  = -1;		/* last  sector to erase	*/ - -		for (sect=0; sect < info->sector_count; ++sect) { -			ulong end;		/* last address in current sect	*/ -			short s_end; +	int planned; +	int rcode; -			s_end = info->sector_count - 1; +	rcode = flash_fill_sect_ranges( addr_first, addr_last, s_first, s_last, &planned ); -			end = (sect == s_end) ? b_end : info->start[sect + 1] - 1; +	protected = 0; -			if (addr_first > end) -				continue; -			if (addr_last < info->start[sect]) +	if (planned && (rcode == 0)) { +		for (bank=0,info=&flash_info[0]; bank < CFG_MAX_FLASH_BANKS; ++bank, ++info) { +			if (info->flash_id == FLASH_UNKNOWN) {  				continue; - -			if (addr_first == info->start[sect]) { -				s_first = sect; -			} -			if (addr_last  == end) { -				s_last  = sect;  			} -		} -		if (s_first>=0 && s_first<=s_last) { -			protected += s_last - s_first + 1; -			for (i=s_first; i<=s_last; ++i) { + +			if (s_first[bank]>=0 && s_first[bank]<=s_last[bank]) { +				debug ("Protecting sectors %d..%d in bank %ld\n", +					s_first[bank], s_last[bank], bank+1); +				protected += s_last[bank] - s_first[bank] + 1; +				for (i=s_first[bank]; i<=s_last[bank]; ++i) {  #if defined(CFG_FLASH_PROTECTION) -				if (flash_real_protect(info, i, p)) -					rcode = 1; -				putc ('.'); +					if (flash_real_protect(info, i, p)) +						rcode = 1; +					putc ('.');  #else -				info->protect[i] = p; +					info->protect[i] = p;  #endif	/* CFG_FLASH_PROTECTION */ +				}  			} -		}  #if defined(CFG_FLASH_PROTECTION) -		if (!rcode) putc ('\n'); +			if (!rcode) putc ('\n');  #endif	/* CFG_FLASH_PROTECTION */ +		} -	} -	if (protected) {  		printf ("%sProtected %d sectors\n",  			p ? "" : "Un-", protected); -	} else { +	} else if (rcode == 0) {  		printf ("Error: start and/or end address"  			" not on sector boundary\n");  		rcode = 1; diff --git a/common/main.c b/common/main.c index 5ddecca73..d08bc47d7 100644 --- a/common/main.c +++ b/common/main.c @@ -32,6 +32,8 @@  #include <hush.h>  #endif +#include <post.h> +  #if defined(CONFIG_BOOT_RETRY_TIME) && defined(CONFIG_RESET_TO_RETRY)  extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);		/* for do_reset() prototype */  #endif @@ -258,6 +260,12 @@ void main_loop (void)  #ifdef CONFIG_PREBOOT  	char *p;  #endif +#ifdef CONFIG_BOOTCOUNT_LIMIT +	unsigned long bootcount = 0; +	unsigned long bootlimit = 0; +	char *bcs; +	char bcs_set[16]; +#endif /* CONFIG_BOOTCOUNT_LIMIT */  #if defined(CONFIG_VFD) && defined(VFD_TEST_LOGO)  	ulong bmp = 0;		/* default bitmap */ @@ -270,6 +278,16 @@ void main_loop (void)  	trab_vfd (bmp);  #endif	/* CONFIG_VFD && VFD_TEST_LOGO */ +#ifdef CONFIG_BOOTCOUNT_LIMIT +	bootcount = bootcount_load(); +	bootcount++; +	bootcount_store (bootcount); +	sprintf (bcs_set, "%lu", bootcount); +	setenv ("bootcount", bcs_set); +	bcs = getenv ("bootlimit"); +	bootlimit = bcs ? simple_strtoul (bcs, NULL, 10) : 0; +#endif /* CONFIG_BOOTCOUNT_LIMIT */ +  #ifdef CONFIG_MODEM_SUPPORT  	debug ("DEBUG: main_loop:   do_mdm_init=%d\n", do_mdm_init);  	if (do_mdm_init) { @@ -322,7 +340,15 @@ void main_loop (void)  	init_cmd_timeout ();  # endif	/* CONFIG_BOOT_RETRY_TIME */ -	s = getenv ("bootcmd"); +#ifdef CONFIG_BOOTCOUNT_LIMIT +	if (bootlimit && (bootcount > bootlimit)) { +		printf ("Warning: Bootlimit (%u) exceeded. Using altbootcmd.\n", +		        (unsigned)bootlimit); +		s = getenv ("altbootcmd"); +	} +	else +#endif /* CONFIG_BOOTCOUNT_LIMIT */ +		s = getenv ("bootcmd");  	debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>"); diff --git a/cpu/mpc8260/commproc.c b/cpu/mpc8260/commproc.c index 72cceb3cc..ceb9275d2 100644 --- a/cpu/mpc8260/commproc.c +++ b/cpu/mpc8260/commproc.c @@ -208,3 +208,27 @@ ulong post_word_load (void)  }  #endif	/* CONFIG_POST || CONFIG_LOGBUFFER*/ + +#ifdef CONFIG_BOOTCOUNT_LIMIT + +void bootcount_store (ulong a) +{ +	volatile ulong *save_addr = +		(volatile ulong *)(CFG_IMMR + CPM_BOOTCOUNT_ADDR); + +	save_addr[0] = a; +	save_addr[1] = BOOTCOUNT_MAGIC; +} + +ulong bootcount_load (void) +{ +	volatile ulong *save_addr = +		(volatile ulong *)(CFG_IMMR + CPM_BOOTCOUNT_ADDR); + +	if (save_addr[1] != BOOTCOUNT_MAGIC) +		return 0; +	else +		return save_addr[0]; +} + +#endif /* CONFIG_BOOTCOUNT_LIMIT */ diff --git a/cpu/mpc8xx/commproc.c b/cpu/mpc8xx/commproc.c index 37c72a727..75740e07f 100644 --- a/cpu/mpc8xx/commproc.c +++ b/cpu/mpc8xx/commproc.c @@ -110,3 +110,29 @@ ulong post_word_load (void)  }  #endif	/* CONFIG_POST || CONFIG_LOGBUFFER*/ + +#ifdef CONFIG_BOOTCOUNT_LIMIT + +void bootcount_store (ulong a) +{ +	volatile ulong *save_addr = +		(volatile ulong *)( ((immap_t *) CFG_IMMR)->im_cpm.cp_dpmem + +		                    CPM_BOOTCOUNT_ADDR ); + +	save_addr[0] = a; +	save_addr[1] = BOOTCOUNT_MAGIC; +} + +ulong bootcount_load (void) +{ +	volatile ulong *save_addr = +		(volatile ulong *)( ((immap_t *) CFG_IMMR)->im_cpm.cp_dpmem + +		                    CPM_BOOTCOUNT_ADDR ); + +	if (save_addr[1] != BOOTCOUNT_MAGIC) +		return 0; +	else +		return save_addr[0]; +} + +#endif /* CONFIG_BOOTCOUNT_LIMIT */ diff --git a/include/asm-ppc/cpm_8260.h b/include/asm-ppc/cpm_8260.h index 5c70603f4..b3d08ffd4 100644 --- a/include/asm-ppc/cpm_8260.h +++ b/include/asm-ppc/cpm_8260.h @@ -141,6 +141,13 @@ typedef struct cpm_buf_desc {  #else  #define CPM_POST_WORD_ADDR	CFG_CPM_POST_WORD_ADDR  #endif + +#ifndef CFG_CPM_BOOTCOUNT_ADDR +#define CPM_BOOTCOUNT_ADDR	(CPM_POST_WORD_ADDR - 2*sizeof(ulong)) +#else +#define CPM_BOOTCOUNT_ADDR	CFG_CPM_BOOTCOUNT_ADDR +#endif +  #define PROFF_SCC1		((uint)0x8000)  #define PROFF_SCC2		((uint)0x8100)  #define PROFF_SCC3		((uint)0x8200) diff --git a/include/common.h b/include/common.h index 5158f97ec..940071958 100644 --- a/include/common.h +++ b/include/common.h @@ -236,7 +236,7 @@ extern void  pic_write (uchar reg, uchar val);  # define CFG_DEF_EEPROM_ADDR CFG_I2C_EEPROM_ADDR  #endif /* CONFIG_SPI || !defined(CFG_I2C_EEPROM_ADDR) */ -#if defined(CONFIG_PCU_E) || defined(CONFIG_CCM) || defined(CONFIG_ATC) +#if defined(CONFIG_SPI)  extern void spi_init_f (void);  extern void spi_init_r (void);  extern ssize_t spi_read  (uchar *, int, uchar *, int); @@ -400,6 +400,9 @@ uint	dpram_alloc(uint size);  uint	dpram_alloc_align(uint size,uint align);  void	post_word_store (ulong);  ulong	post_word_load (void); +void	bootcount_store (ulong); +ulong	bootcount_load (void); +#define BOOTCOUNT_MAGIC		0xB001C041  /* $(CPU)/.../<eth> */  void mii_init (void); diff --git a/include/commproc.h b/include/commproc.h index 684524835..63dcc4c9a 100644 --- a/include/commproc.h +++ b/include/commproc.h @@ -83,6 +83,12 @@  #define CPM_POST_WORD_ADDR	CFG_CPM_POST_WORD_ADDR  #endif +#ifndef CFG_CPM_BOOTCOUNT_ADDR +#define CPM_BOOTCOUNT_ADDR	(CPM_POST_WORD_ADDR - 2*sizeof(ulong)) +#else +#define CPM_BOOTCOUNT_ADDR	CFG_CPM_BOOTCOUNT_ADDR +#endif +  #define BD_IIC_START	((uint) 0x0400) /* <- please use CPM_I2C_BASE !! */  /* Export the base address of the communication processor registers diff --git a/include/configs/NSCU.h b/include/configs/NSCU.h index 816945388..3bf54d2eb 100644 --- a/include/configs/NSCU.h +++ b/include/configs/NSCU.h @@ -90,6 +90,8 @@  #define	CONFIG_RTC_MPC8xx		/* use internal RTC of MPC8xx	*/ +#define	CONFIG_ISP1362_USB		/* ISP1362 USB OTG controller	*/ +  #define CONFIG_COMMANDS	      ( CONFIG_CMD_DFL	| \  				CFG_CMD_ASKENV	| \  				CFG_CMD_DHCP	| \ @@ -392,6 +394,15 @@  					BR_PS_8 | BR_MS_UPMB | BR_V )  #endif	/* CONFIG_CAN_DRIVER */ +#ifdef	CONFIG_ISP1362_USB +#define	CFG_ISP1362_BASE	0xD0000000	/* ISP1362 mapped at 0xD0000000 */ +#define CFG_ISP1362_OR_AM	0xFFFF8000	/* 32 kB address mask		*/ +#define CFG_OR5_ISP1362		(CFG_ISP1362_OR_AM | OR_CSNT_SAM | \ +				 OR_ACS_DIV2       | OR_BI       | OR_SCY_5_CLK) +#define CFG_BR5_ISP1362		((CFG_ISP1362_BASE & BR_BA_MSK) | \ +				 BR_PS_16          | BR_MS_GPCM | BR_V ) +#endif	/* CONFIG_ISP1362_USB */ +				   /*   * Memory Periodic Timer Prescaler   * diff --git a/tools/mkimage.c b/tools/mkimage.c index c2e9fa0b6..9de022488 100644 --- a/tools/mkimage.c +++ b/tools/mkimage.c @@ -603,8 +603,8 @@ print_header (image_header_t *hdr)  	printf ("Image Type:   "); print_type(hdr);  	printf ("Data Size:    %d Bytes = %.2f kB = %.2f MB\n",  		size, (double)size / 1.024e3, (double)size / 1.048576e6 ); -	printf ("Load Address: 0x%08x\n", ntohl(hdr->ih_load)); -	printf ("Entry Point:  0x%08x\n", ntohl(hdr->ih_ep)); +	printf ("Load Address: 0x%08X\n", ntohl(hdr->ih_load)); +	printf ("Entry Point:  0x%08X\n", ntohl(hdr->ih_ep));  	if (hdr->ih_type == IH_TYPE_MULTI || hdr->ih_type == IH_TYPE_SCRIPT) {  		int i, ptrs; @@ -631,7 +631,7 @@ print_header (image_header_t *hdr)  				 * if planning to do something with  				 * multiple files  				 */ -				printf ("    Offset = %08x\n", pos); +				printf ("    Offset = %08X\n", pos);  			}  			/* copy_file() will pad the first files to even word align */  			size += 3; |