| #include <common.h> | |
| #include <exports.h> | |
| extern unsigned long __dummy; | |
| void do_reset (void); | |
| void do_updater(void); | |
| void _main(void) | |
| { | |
| int i; | |
| printf("U-Boot Firmware Updater\n\n\n"); | |
| printf("****************************************************\n" | |
| "* ATTENTION!! PLEASE READ THIS NOTICE CAREFULLY! *\n" | |
| "****************************************************\n\n" | |
| "This program will update your computer's firmware.\n" | |
| "Do NOT remove the disk, reset the machine, or do\n" | |
| "anything that might disrupt functionality. If this\n"); | |
| printf("Program fails, your computer might be unusable, and\n" | |
| "you will need to return your board for reflashing.\n" | |
| "If you find this too risky, remove the diskette and\n" | |
| "switch off your machine now. Otherwise press the \n" | |
| "SPACE key now to start the process\n\n"); | |
| do | |
| { | |
| char x; | |
| while (!tstc()); | |
| x = getc(); | |
| if (x == ' ') break; | |
| } while (1); | |
| do_updater(); | |
| i = 5; | |
| printf("\nUpdate done. Please remove diskette.\n"); | |
| printf("The machine will automatically reset in %d seconds\n", i); | |
| printf("You can switch off/reset now when the floppy is removed\n\n"); | |
| while (i) | |
| { | |
| printf("Resetting in %d\r", i); | |
| udelay(1000000); | |
| i--; | |
| } | |
| do_reset(); | |
| while (1); | |
| } | |
| int flash_sect_protect (int p, ulong addr_first, ulong addr_last); | |
| int flash_sect_erase (ulong addr_first, ulong addr_last); | |
| int flash_write (uchar *src, ulong addr, ulong cnt); | |
| void do_updater(void) | |
| { | |
| unsigned long *addr = &__dummy + 65; | |
| unsigned long flash_size = flash_init(); | |
| int rc; | |
| flash_sect_protect(0, 0xFFF00000, 0xFFF7FFFF); | |
| printf("Erasing "); | |
| flash_sect_erase(0xFFF00000, 0xFFF7FFFF); | |
| printf("Writing "); | |
| rc = flash_write((uchar *)addr, 0xFFF00000, 0x7FFFF); | |
| if (rc != 0) printf("\nFlashing failed due to error %d\n", rc); | |
| else printf("\ndone\n"); | |
| flash_sect_protect(1, 0xFFF00000, 0xFFF7FFFF); | |
| } |