]> git.karo-electronics.de Git - karo-tx-redboot.git/blobdiff - packages/hal/arm/mx51/karo/v1_0/src/tx51_misc.c
RedBoot STK5 Release 2010-03-04
[karo-tx-redboot.git] / packages / hal / arm / mx51 / karo / v1_0 / src / tx51_misc.c
index d835358e4c1c954d2127a7a61e5287367ef951a8..c350bbad3e9b7e3ddd429084e62839f4bbcb0899 100644 (file)
@@ -403,39 +403,34 @@ int tx51_mac_addr_program(unsigned char mac_addr[ETHER_ADDR_LEN])
                return ret;
        }
        ret = lp3972_reg_write(0x39, 0xf0);
-       if (ret < 0) {
+       if (ret < 0 && ret != -ENOSYS) {
                diag_printf("Failed to switch fuse programming voltage: %d\n", ret);
                return ret;
        }
        ret = lp3972_reg_read(0x39);
-       if (ret != 0xf0) {
+       if (ret != -ENOSYS && ret != 0xf0) {
                diag_printf("Failed to switch fuse programming voltage: %d\n", ret);
                return ret;
        }
        for (i = 0; i < ETHER_ADDR_LEN; i++) {
-               int bit;
                unsigned char fuse = readl(SOC_FEC_MAC_BASE +
                                                                ETHER_ADDR_LEN * 4 - ((i + 1) << 2));
+               int row = SOC_MAC_ADDR_FUSE + ETHER_ADDR_LEN - 1 - i;
 
-               for (bit = 0; bit < 8; bit++) {
-                       if (((mac_addr[i] >> bit) & 0x1) == 0)
-                               continue;
-                       if (((mac_addr[i] >> bit) & 1) == ((fuse >> bit) & 1)) {
-                               continue;
-                       }
-                       if (fuse_blow(SOC_MAC_ADDR_FUSE_BANK,
-                                                       SOC_MAC_ADDR_FUSE + ETHER_ADDR_LEN - 1 - i,
-                                                       bit)) {
-                               diag_printf("Failed to blow fuse bank 0 row %d bit %d\n",
-                                                       i, bit);
-                               ret = -1;
-                               goto out;
-                       }
+               if (fuse == mac_addr[i]) {
+                       continue;
+               }
+               fuse_blow_row(SOC_MAC_ADDR_FUSE_BANK, row, mac_addr[i]);
+               ret = sense_fuse(SOC_MAC_ADDR_FUSE_BANK, row, 0);
+               if (ret != mac_addr[i]) {
+                       diag_printf("Failed to verify fuse bank %d row %d; expected %02x got %02x\n",
+                                               SOC_MAC_ADDR_FUSE_BANK, row, mac_addr[i], ret);
+                       goto out;
                }
        }
 #ifdef SOC_MAC_ADDR_LOCK_BIT
-       fuse_blow(SOC_MAC_ADDR_FUSE_BANK, SOC_MAC_ADDR_LOCK_FUSE,
-                       SOC_MAC_ADDR_LOCK_BIT);
+       fuse_blow_row(SOC_MAC_ADDR_FUSE_BANK, SOC_MAC_ADDR_LOCK_FUSE,
+                               (1 << SOC_MAC_ADDR_LOCK_BIT));
 #endif
 out:
        lp3972_reg_write(0x39, 0);
@@ -500,35 +495,10 @@ static void random_init(void)
 }
 RedBoot_init(random_init, RedBoot_INIT_FIRST);
 
-#define WDOG_WRSR      ((CYG_WORD16 *)0x10002004)
 static void display_board_type(void)
 {
-       CYG_WORD32 reset_cause;
-       const char *dlm = "";
-
-       diag_printf("\nBoard Type: Ka-Ro TX51\n");
-       diag_printf("Last RESET cause: ");
-       HAL_READ_UINT32(SRC_BASE_ADDR + 8, reset_cause);
-
-       if ((reset_cause & 9) == 1) {
-               diag_printf("%sPOWER_ON RESET", dlm);
-               dlm = " | ";
-       } else if ((reset_cause & 9) == 9) {
-               diag_printf("%sUSER RESET", dlm);
-               dlm = " | ";
-       }
-       if ((reset_cause & 0x11) == 0x11) {
-               diag_printf("%sWATCHDOG RESET", dlm);
-               dlm = " | ";
-       } else if ((reset_cause & 0x11) == 0x10) {
-               diag_printf("%sSOFT RESET", dlm);
-               dlm = " | ";
-       }
-       if (*dlm == '\0') {
-               diag_printf("UNKNOWN: %08x\n", reset_cause);
-       } else {
-               diag_printf("\n");
-       }
+       diag_printf("\nBoard Type: Ka-Ro TX51-80x%d\n",
+               SDRAM_SIZE > SZ_128M);
 }
 
 static void display_board_info(void)