mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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);
 | 
						|
}
 |