diff options
| author | Sergei Poselenov <sposelenov@emcraft.com> | 2007-02-27 20:15:30 +0300 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2007-02-28 00:54:18 +0100 | 
| commit | e344568b1b46af85ec32d815586f91bc115d6223 (patch) | |
| tree | e0a2ad52f7bae85870aa602278f2ea4d74eef5db /board/mcc200/auto_update.c | |
| parent | 743571145b37182757d4e688a77860b36ee77573 (diff) | |
| download | olio-uboot-2014.01-e344568b1b46af85ec32d815586f91bc115d6223.tar.xz olio-uboot-2014.01-e344568b1b46af85ec32d815586f91bc115d6223.zip | |
MCC200: Fixes for update procedure
- fix logic error in image type handling
- make sure file system images (cramfs etc.) get stored in flash
  with image header stripped so they can be mounted through MTD
Diffstat (limited to 'board/mcc200/auto_update.c')
| -rw-r--r-- | board/mcc200/auto_update.c | 12 | 
1 files changed, 7 insertions, 5 deletions
| diff --git a/board/mcc200/auto_update.c b/board/mcc200/auto_update.c index faa01bd30..90d03ec47 100644 --- a/board/mcc200/auto_update.c +++ b/board/mcc200/auto_update.c @@ -162,7 +162,7 @@ int au_check_cksum_valid(int idx, long nbytes)  int au_check_header_valid(int idx, long nbytes)  {  	image_header_t *hdr; -	unsigned long checksum; +	unsigned long checksum, fsize;  	hdr = (image_header_t *)LOAD_ADDR;  	/* check the easy ones first */ @@ -205,7 +205,7 @@ int au_check_header_valid(int idx, long nbytes)  		return -1;  	}  	if ((idx == IDX_ROOTFS) && -		( (hdr->ih_type != IH_TYPE_RAMDISK) || (hdr->ih_type != IH_TYPE_FILESYSTEM) ) +		( (hdr->ih_type != IH_TYPE_RAMDISK) && (hdr->ih_type != IH_TYPE_FILESYSTEM) )  	   ) {  		printf ("Image %s wrong type\n", aufile[idx]);  		ausize[idx] = 0; @@ -213,8 +213,10 @@ int au_check_header_valid(int idx, long nbytes)  	}  	/* recycle checksum */  	checksum = ntohl(hdr->ih_size); -	/* for kernel and app the image header must also fit into flash */ -	if (idx != IDX_FIRMWARE) + +	fsize = checksum + sizeof(*hdr); +	/* for kernel and ramdisk the image header must also fit into flash */ +	if (idx == IDX_KERNEL || hdr->ih_type == IH_TYPE_RAMDISK)  		checksum += sizeof(*hdr);  	/* check the size does not exceed space in flash. HUSH scripts */ @@ -224,7 +226,7 @@ int au_check_header_valid(int idx, long nbytes)  		return -1;  	}  	/* Update with the real filesize */ -	ausize[idx] = (idx == IDX_FIRMWARE ? checksum + sizeof(*hdr) : checksum); +	ausize[idx] = fsize;  	return checksum; /* return size to be written to flash */  } |