| #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); | 
 | } | 
 |  | 
 | 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); | 
 | } |