mirror of
				https://github.com/DigitalDevices/dddvb.git
				synced 2025-03-01 10:35:23 +00:00 
			
		
		
		
	properly handle flash size limits
This commit is contained in:
		| @@ -119,7 +119,7 @@ static int update_flash(struct ddflash *ddf) | ||||
| 			printf("Flash:    %s\n", ddf->flash_name); | ||||
| 		printf("Version:  %08x\n", ddf->id.hw); | ||||
| 		printf("REGMAP :  %08x\n", ddf->id.regmap); | ||||
| 		if ((res = update_image(ddf, fname, 0x10000, 0x100000, 1, 0)) == 1) | ||||
| 		if ((res = update_image(ddf, fname, 0x10000, ddf->size / 2, 1, 0)) == 1) | ||||
| 			stat |= 1; | ||||
| 		return stat; | ||||
| 	} | ||||
|   | ||||
| @@ -968,12 +968,10 @@ static int flashcmp(struct ddflash *ddf, int fs, uint32_t addr, uint32_t maxlen, | ||||
| 		return -1; | ||||
| 	len = off - fw_off; | ||||
| 	lseek(fs, fw_off, SEEK_SET); | ||||
| #if 0 | ||||
| 	if (len > maxlen) { | ||||
| 		printf("file too big\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
| #endif | ||||
| 	//printf("flash file len %u, compare to %08x in flash: ", len, addr); | ||||
| 	for (j = 0; j < len; j += bl, addr += bl) { | ||||
| 		if (len - j < bl) | ||||
| @@ -1132,9 +1130,15 @@ static int check_fw(struct ddflash *ddf, char *fn, uint32_t *fw_off) | ||||
| 		return -4; | ||||
| 	} | ||||
| 	if (devid == ddf->id.device) { | ||||
| 		if (version <= (ddf->id.hw & 0xffffff)) { | ||||
| 			printf("%s is older or same version as flash\n", fn); | ||||
| 			ret = -3; /* same id but no newer version */ | ||||
| 		if (version < (ddf->id.hw & 0xffffff)) { | ||||
| 			printf("%s is older version than flash\n", fn); | ||||
| 			if (!ddf->force) | ||||
| 				ret = -3; /* same id but older newer version */ | ||||
| 		} | ||||
| 		if (version == (ddf->id.hw & 0xffffff)) { | ||||
| 			printf("%s is same version as flash\n", fn); | ||||
| 			if (!ddf->force) | ||||
| 				ret = 2; /* same and same version */ | ||||
| 		} | ||||
| 	} else | ||||
| 		ret = 1; | ||||
| @@ -1147,7 +1151,7 @@ out: | ||||
| } | ||||
|  | ||||
| static int update_image(struct ddflash *ddf, char *fn,  | ||||
| 			uint32_t adr, uint32_t len, | ||||
| 			uint32_t adr, uint32_t maxlen, | ||||
| 			int has_header, int no_change) | ||||
| { | ||||
| 	int fs, res = 0; | ||||
| @@ -1167,7 +1171,7 @@ static int update_image(struct ddflash *ddf, char *fn, | ||||
| 		printf("File %s not found \n", fn); | ||||
| 		return -1; | ||||
| 	} | ||||
| 	res = flashcmp(ddf, fs, adr, len, fw_off); | ||||
| 	res = flashcmp(ddf, fs, adr, maxlen, fw_off); | ||||
| 	if (res == -2) { | ||||
| 		printf("Flash already identical to %s\n", fn); | ||||
| 		if (ddf->force) { | ||||
| @@ -1177,9 +1181,9 @@ static int update_image(struct ddflash *ddf, char *fn, | ||||
| 	} | ||||
| 	if (res < 0)  | ||||
| 		goto out; | ||||
| 	res = flashwrite(ddf, fs, adr, len, fw_off); | ||||
| 	res = flashwrite(ddf, fs, adr, maxlen, fw_off); | ||||
| 	if (res == 0) { | ||||
| 		res = flashcmp(ddf, fs, adr, len, fw_off); | ||||
| 		res = flashcmp(ddf, fs, adr, maxlen, fw_off); | ||||
| 		if (res == -2) { | ||||
| 			res = 1; | ||||
| 			printf("Flash verify OK!\n"); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user