aboutsummaryrefslogtreecommitdiffstats
path: root/roms/u-boot-sam460ex/tools/updater/update.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/u-boot-sam460ex/tools/updater/update.c')
-rw-r--r--roms/u-boot-sam460ex/tools/updater/update.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/roms/u-boot-sam460ex/tools/updater/update.c b/roms/u-boot-sam460ex/tools/updater/update.c
new file mode 100644
index 000000000..d4a96b29b
--- /dev/null
+++ b/roms/u-boot-sam460ex/tools/updater/update.c
@@ -0,0 +1,77 @@
+#include <common.h>
+#include <exports.h>
+#include "flash_local.h"
+
+extern unsigned long __dummy;
+extern flash_info_t flash_info[]; /* info for FLASH chips */
+
+void do_reset (void);
+void do_updater(void);
+void flash_print_info(flash_info_t * info);
+static ulong flash_get_size(vu_long * addr, flash_info_t * info);
+
+void _main(void)
+{
+ int i;
+ printf("\nU-Boot Firmware Updater\n\n");
+
+ printf("****************************************************\n");
+ printf("* ATTENTION!! PLEASE READ THIS NOTICE CAREFULLY! *\n");
+ printf("****************************************************\n\n");
+ printf("This program will update your computer's firmware.\n");
+ printf("Do NOT remove the disk, reset the machine, or do\n");
+ printf("anything that might disrupt functionality. If this\n");
+ printf("Program fails, your computer might be unusable, and\n");
+ printf("you will need to return your board for reflashing.\n");
+ printf("If you find this too risky, remove the diskette and\n");
+ printf("switch off your machine now. Otherwise press the \n");
+ printf("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 the cdrom.\n");
+ printf("You can switch off/reset now when the cdrom is removed\n\n");
+/*
+ printf("The machine will automatically reset in %d seconds\n", i);
+
+ 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_get_size(0xfff80000,&flash_info[0]);
+ flash_print_info(&flash_info[0]);
+
+ flash_sect_protect(0, 0xFFF80000, 0xFFFFFFFF);
+
+ printf("\nErasing ");
+ flash_sect_erase(0xFFF80000, 0xFFFFFFFF);
+ printf("Writing ");
+ rc = flash_write((uchar *)addr, 0xFFF80000, 0x80000);
+ if (rc != 0) printf(" Flashing failed due to error %d\n", rc);
+ else printf(" done\n");
+
+ flash_sect_protect(1, 0xFFF80000, 0xFFFFFFFF);
+}