#include #include DECLARE_GLOBAL_DATA_PTR; extern unsigned long __dummy; int do_updater(void); void _main(void) { char *version = getenv("ver"); if (!version) { printf("\nAttention ! You need first to update U-Boot to version 2010.06.02 !!!\n\n"); return; } if (strcmp(version,"U-Boot 2010.06.02 (Dec 31 2010 - 11:14:01)") != 0) { printf("\nAttention ! You need first to update U-Boot to version 2010.06.02 !!!\n\n"); return; } printf("\n------ Sam460ex Hardware Configuration Updater -----\n\n"); printf("****************************************************\n"); printf("* ATTENTION!! PLEASE READ THIS NOTICE CAREFULLY! *\n"); printf("****************************************************\n\n"); printf("This program will update your Sam460 configuration\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); int ret = do_updater(); if (ret == 0) { printf("\nUpdate done. Please remove the cdrom.\n"); printf("You can switch off/reset now when the cdrom is removed\n\n"); while (1); } else { printf("\nUnable to update the hardware configuration\n"); printf("Please contact support@acube-systems.com to\n"); printf("correct the problem\n\n"); } } int do_updater(void) { int ii; unsigned char arr[16] = { 0 }; unsigned char bkp[16] = { 0 }; unsigned char upd[8] = { 0x86, 0x86, 0xb5, 0x19, 0xb9, 0x85, 0x00, 0x00 }; bd_t *bd = gd->bd; // read 16 bytes of the boot eeprom -------------------------------------- puts("Now reading hardware configuration registers...\n"); i2c_read(0x52, 0x00, 1, &arr, 16); for (ii=0;ii<16;ii++) printf ("%02x ",arr[ii]); puts("\n\n"); // backup 16 bytes of the boot eeprom ------------------------------------ puts("Now creating backup... "); i2c_write(0x53, 0x00, 1, &arr, 16); udelay(100000); puts("Done\n"); // checking backup ------------------------------------------------------- puts("Checking backup... "); i2c_read(0x53, 0x00, 1, &bkp, 16); udelay(100000); for (ii=0;ii<16;ii++) { if (arr[ii] != bkp[ii]) break; } if (ii < 16) { puts("\nUnable to create a backup... abort\n"); return 1; } puts("Done\n"); // change config --------------------------------------------------------- puts("Writing new config... "); i2c_write(0x52, 0x00, 1, &upd, 8); puts("Done\n"); // check new config ------------------------------------------------------ puts("Checking new config... "); i2c_read(0x52, 0x00, 1, &bkp, 8); udelay(100000); for (ii=0;ii<8;ii++) { if (upd[ii] != bkp[ii]) break; } if (ii < 8) { puts("\nError verifing new config... abort\n"); return 1; } puts("Done\n"); return 0; }