]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - packages/hal/arm/mx51/var/v2_0/src/cmds.c
RedBoot STK5 Release 2010-03-04
[karo-tx-redboot.git] / packages / hal / arm / mx51 / var / v2_0 / src / cmds.c
index 5b94be28faf19ad8ce9bedab46b489a87548145a..ee6af36cceb3bc200e05b2d649eaa408bcff8d7c 100644 (file)
@@ -46,6 +46,7 @@
 
 #include "hab_super_root.h"
 
 
 #include "hab_super_root.h"
 
+//#define IIM_FUSE_DEBUG
 //#define CMD_CLOCK_DEBUG
 #ifdef CMD_CLOCK_DEBUG
 #define dbg(fmt...)                                                            \
 //#define CMD_CLOCK_DEBUG
 #ifdef CMD_CLOCK_DEBUG
 #define dbg(fmt...)                                                            \
@@ -622,7 +623,7 @@ u32 get_main_clock(enum main_clocks clk)
                }
                break;
        case DDR_CLK:
                }
                break;
        case DDR_CLK:
-               if (((cbcdr >> 30) & 0x1) == 0x1) {
+               if (cbcdr & (1 << 30)) {
                        pll = pll_clock(PLL1);
                        pdf = (cbcdr >> 27) & 0x7;
                } else {
                        pll = pll_clock(PLL1);
                        pdf = (cbcdr >> 27) & 0x7;
                } else {
@@ -773,7 +774,6 @@ RedBoot_cmd("L2",
 void do_L2_caches(int argc, char *argv[])
 {
        u32 oldints;
 void do_L2_caches(int argc, char *argv[])
 {
        u32 oldints;
-       int L2cache_on=0;
 
        if (argc == 2) {
                if (strcasecmp(argv[1], "on") == 0) {
 
        if (argc == 2) {
                if (strcasecmp(argv[1], "on") == 0) {
@@ -791,8 +791,10 @@ void do_L2_caches(int argc, char *argv[])
                        diag_printf("Invalid L2 cache mode: %s\n", argv[1]);
                }
        } else {
                        diag_printf("Invalid L2 cache mode: %s\n", argv[1]);
                }
        } else {
+               int L2cache_on;
+
                HAL_L2CACHE_IS_ENABLED(L2cache_on);
                HAL_L2CACHE_IS_ENABLED(L2cache_on);
-               diag_printf("L2 cache: %s\n", L2cache_on?"On":"Off");
+               diag_printf("L2 cache: %s\n", L2cache_on ? "On" : "Off");
        }
 }
 #endif //L2CC_ENABLED
        }
 }
 #endif //L2CC_ENABLED
@@ -849,7 +851,7 @@ static int poll_fuse_op_done(int action)
        return -1;
 }
 
        return -1;
 }
 
-static unsigned int sense_fuse(int bank, int row, int bit)
+unsigned int sense_fuse(int bank, int row, int bit)
 {
        int addr, addr_l, addr_h, reg_addr;
 
 {
        int addr, addr_l, addr_h, reg_addr;
 
@@ -862,7 +864,7 @@ static unsigned int sense_fuse(int bank, int row, int bit)
        addr_l = (addr & 0x000000FF);
 
 #ifdef IIM_FUSE_DEBUG
        addr_l = (addr & 0x000000FF);
 
 #ifdef IIM_FUSE_DEBUG
-       diag_printf("%s: addr_h=0x%x, addr_l=0x%x\n",
+       diag_printf("%s: addr_h=0x%02x, addr_l=0x%02x\n",
                                __FUNCTION__, addr_h, addr_l);
 #endif
        writel(addr_h, IIM_BASE_ADDR + IIM_UA_OFF);
                                __FUNCTION__, addr_h, addr_l);
 #endif
        writel(addr_h, IIM_BASE_ADDR + IIM_UA_OFF);
@@ -907,7 +909,7 @@ void do_fuse_read(int argc, char *argv[])
 
 /* Blow fuses based on the bank, row and bit positions (all 0-based)
 */
 
 /* Blow fuses based on the bank, row and bit positions (all 0-based)
 */
-int fuse_blow(int bank,int row,int bit)
+static int fuse_blow(int bank, int row, int bit)
 {
        int addr, addr_l, addr_h, ret = -1;
 
 {
        int addr, addr_l, addr_h, ret = -1;
 
@@ -923,13 +925,14 @@ int fuse_blow(int bank,int row,int bit)
        addr_l = (addr & 0x000000FF);
 
 #ifdef IIM_FUSE_DEBUG
        addr_l = (addr & 0x000000FF);
 
 #ifdef IIM_FUSE_DEBUG
-       diag_printf("blowing addr_h=0x%x, addr_l=0x%x\n", addr_h, addr_l);
+       diag_printf("blowing fuse %d %d bit %d addr_h=0x%02x, addr_l=0x%02x\n",
+                               bank, row, bit, addr_h, addr_l);
 #endif
 
        writel(addr_h, IIM_BASE_ADDR + IIM_UA_OFF);
        writel(addr_l, IIM_BASE_ADDR + IIM_LA_OFF);
        /* Start Programming */
 #endif
 
        writel(addr_h, IIM_BASE_ADDR + IIM_UA_OFF);
        writel(addr_l, IIM_BASE_ADDR + IIM_LA_OFF);
        /* Start Programming */
-       writel(0x31, IIM_BASE_ADDR + IIM_FCTL_OFF);
+       writel(0x71, IIM_BASE_ADDR + IIM_FCTL_OFF);
        if (poll_fuse_op_done(POLL_FUSE_PRGD) == 0) {
                ret = 0;
        }
        if (poll_fuse_op_done(POLL_FUSE_PRGD) == 0) {
                ret = 0;
        }
@@ -986,7 +989,7 @@ u32 quick_atoi(char *a, u32 slen)
        return num;
 }
 
        return num;
 }
 
-static void fuse_blow_row(int bank, int row, int value)
+void fuse_blow_row(int bank, int row, int value)
 {
        unsigned int reg, i;
 
 {
        unsigned int reg, i;
 
@@ -1029,7 +1032,7 @@ void do_fuse_blow(int argc, char *argv[])
                                memcpy(val, s, 2);
                                val[2]='\0';
                                value = quick_atoi(val, 2);
                                memcpy(val, s, 2);
                                val[2]='\0';
                                value = quick_atoi(val, 2);
-                               //    diag_printf("fuse_blow_row(2, %d, value=0x%x)\n", i, value);
+                               //    diag_printf("fuse_blow_row(2, %d, value=0x%02x)\n", i, value);
                                fuse_blow_row(2, i, value);
 
                                if ((++s)[0] == '\0') {
                                fuse_blow_row(2, i, value);
 
                                if ((++s)[0] == '\0') {
@@ -1086,7 +1089,7 @@ void do_fuse_blow(int argc, char *argv[])
                                        bank, row, value);
                fuse_blow_row(bank, row, value);
                fuse_val = sense_fuse(bank, row, 0);
                                        bank, row, value);
                fuse_blow_row(bank, row, value);
                fuse_val = sense_fuse(bank, row, 0);
-               diag_printf("fuses at (bank:%ld, row:%ld) = 0x%x\n", bank, row, fuse_val);
+               diag_printf("fuses at (bank:%ld, row:%ld) = 0x%02x\n", bank, row, fuse_val);
 
        } else {
                diag_printf("Passing in wrong arguments: %d\n", argc);
 
        } else {
                diag_printf("Passing in wrong arguments: %d\n", argc);