diff options
Diffstat (limited to 'util/flash_and_burn/82802ab.c')
-rw-r--r-- | util/flash_and_burn/82802ab.c | 92 |
1 files changed, 47 insertions, 45 deletions
diff --git a/util/flash_and_burn/82802ab.c b/util/flash_and_burn/82802ab.c index c818e92151..80945ad832 100644 --- a/util/flash_and_burn/82802ab.c +++ b/util/flash_and_burn/82802ab.c @@ -47,10 +47,10 @@ void print_82802ab_status(unsigned char status) printf("%s", status & 0x2 ? "WP|TBL#|WP#,ABORT:" : "UNLOCK:"); } -int probe_82802ab (struct flashchip * flash) +int probe_82802ab(struct flashchip *flash) { - volatile unsigned char * bios = flash->virt_addr; - unsigned char id1, id2; + volatile unsigned char *bios = flash->virt_addr; + unsigned char id1, id2; #if 0 *(volatile unsigned char *) (bios + 0x5555) = 0xAA; @@ -74,18 +74,18 @@ int probe_82802ab (struct flashchip * flash) #endif myusec_delay(10); - printf("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); + printf("%s: id1 0x%x, id2 0x%x\n", __FUNCTION__, id1, id2); if (id1 == flash->manufacture_id && id2 == flash->model_id) { size_t size = flash->total_size * 1024; // we need to mmap the write-protect space. - bios = mmap (0, size, PROT_WRITE | PROT_READ, MAP_SHARED, - flash->fd_mem, (off_t) (0 - 0x400000 - size)); - if (bios == MAP_FAILED) { + bios = mmap(0, size, PROT_WRITE | PROT_READ, MAP_SHARED, + flash->fd_mem, (off_t) (0 - 0x400000 - size)); + if (bios == MAP_FAILED) { // it's this part but we can't map it ... - perror("Error MMAP /dev/mem"); - exit(1); - } + perror("Error MMAP /dev/mem"); + exit(1); + } flash->virt_addr_2 = bios; return 1; @@ -94,39 +94,39 @@ int probe_82802ab (struct flashchip * flash) return 0; } -unsigned char wait_82802ab(volatile unsigned char * bios) +unsigned char wait_82802ab(volatile unsigned char *bios) { unsigned char status; unsigned char id1, id2; *bios = 0x70; - if ((*bios & 0x80) == 0) { // it's busy - while ((*bios & 0x80) == 0) - ; + if ((*bios & 0x80) == 0) { // it's busy + while ((*bios & 0x80) == 0); } status = *bios; // put another command to get out of status register mode - + *bios = 0x90; myusec_delay(10); id1 = *(volatile unsigned char *) bios; id2 = *(volatile unsigned char *) (bios + 0x01); - + // this is needed to jam it out of "read id" mode *(volatile unsigned char *) (bios + 0x5555) = 0xAA; *(volatile unsigned char *) (bios + 0x2AAA) = 0x55; *(volatile unsigned char *) (bios + 0x5555) = 0xF0; return status; - + } int erase_82802ab_block(struct flashchip *flash, int offset) { - volatile unsigned char * bios = flash->virt_addr + offset; - volatile unsigned char *wrprotect = flash->virt_addr_2 + offset + 2; + volatile unsigned char *bios = flash->virt_addr + offset; + volatile unsigned char *wrprotect = + flash->virt_addr_2 + offset + 2; unsigned char status; // clear status register @@ -146,54 +146,56 @@ int erase_82802ab_block(struct flashchip *flash, int offset) status = wait_82802ab(flash->virt_addr); //print_82802ab_status(status); printf("DONE BLOCK 0x%x\n", offset); - return(0); + return (0); } -int erase_82802ab (struct flashchip * flash) +int erase_82802ab(struct flashchip *flash) { int i; unsigned int total_size = flash->total_size * 1024; - printf("total_size is %d; flash->page_size is %d\n", - total_size, flash->page_size); - for(i = 0; i < total_size; i += flash->page_size) + printf("total_size is %d; flash->page_size is %d\n", + total_size, flash->page_size); + for (i = 0; i < total_size; i += flash->page_size) erase_82802ab_block(flash, i); printf("DONE ERASE\n"); - return(0); + return (0); } -void write_page_82802ab (volatile char * bios, char * src, volatile char * dst, - int page_size) +void write_page_82802ab(volatile char *bios, char *src, volatile char *dst, + int page_size) { - int i; + int i; - for (i = 0; i < page_size; i++) { - /* transfer data from source to destination */ - *dst = 0x40; - *dst++ = *src++; + for (i = 0; i < page_size; i++) { + /* transfer data from source to destination */ + *dst = 0x40; + *dst++ = *src++; wait_82802ab(bios); - } + } } -int write_82802ab (struct flashchip * flash, unsigned char * buf) +int write_82802ab(struct flashchip *flash, unsigned char *buf) { int i; - int total_size = flash->total_size *1024, page_size = flash->page_size; - volatile unsigned char * bios = flash->virt_addr; + int total_size = flash->total_size * 1024, page_size = + flash->page_size; + volatile unsigned char *bios = flash->virt_addr; - erase_82802ab (flash); + erase_82802ab(flash); if (*bios != 0xff) { printf("ERASE FAILED\n"); return -1; } - printf ("Programming Page: "); - for (i = 0; i < total_size/page_size; i++) { - printf ("%04d at address: 0x%08x", i, i * page_size); - write_page_82802ab(bios, buf + i * page_size, bios + i * page_size, - page_size); - printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); + printf("Programming Page: "); + for (i = 0; i < total_size / page_size; i++) { + printf("%04d at address: 0x%08x", i, i * page_size); + write_page_82802ab(bios, buf + i * page_size, + bios + i * page_size, page_size); + printf + ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); } printf("\n"); - protect_82802ab (bios); - return(0); + protect_82802ab(bios); + return (0); } |