diff options
Diffstat (limited to 'stm50flw0x0x.c')
| -rw-r--r-- | stm50flw0x0x.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/stm50flw0x0x.c b/stm50flw0x0x.c index 5ca769bd..83c95bb0 100644 --- a/stm50flw0x0x.c +++ b/stm50flw0x0x.c @@ -27,6 +27,7 @@   */  #include <string.h> +#include <stdlib.h>  #include "flash.h"  void protect_stm50flw0x0x(chipaddr bios) @@ -255,7 +256,12 @@ int write_stm50flw0x0x(struct flashchip *flash, uint8_t * buf)  	int total_size = flash->total_size * 1024;  	int page_size = flash->page_size;  	chipaddr bios = flash->virtual_memory; +	uint8_t *tmpbuf = malloc(page_size); +	if (!tmpbuf) { +		printf("Could not allocate memory!\n"); +		exit(1); +	}  	printf("Programming page: \n");  	for (i = 0; (i < total_size / page_size) && (rc == 0); i++) {  		printf @@ -269,8 +275,8 @@ int write_stm50flw0x0x(struct flashchip *flash, uint8_t * buf)  		 * are not erased and rewritten; data is retained also  		 * in sudden power off situations  		 */ -		if (!memcmp((void *)(buf + i * page_size), -			    (void *)(bios + i * page_size), page_size)) { +		chip_readn(tmpbuf, bios + i * page_size, page_size); +		if (!memcmp((void *)(buf + i * page_size), tmpbuf, page_size)) {  			printf("SKIPPED\n");  			continue;  		} @@ -284,6 +290,7 @@ int write_stm50flw0x0x(struct flashchip *flash, uint8_t * buf)  	}  	printf("\n");  	protect_stm50flw0x0x(bios); +	free(tmpbuf);  	return rc;  }  | 
