Fix incorrect use of getenv() before relocation
[pandora-u-boot.git] / board / amirix / ap1000 / ap1000.c
index 743211f..64de04c 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <common.h>
 #include <command.h>
+#include <netdev.h>
 #include <asm/processor.h>
 
 #include "powerspan.h"
 
 int board_pre_init (void)
 {
-    return 0;
+       return 0;
 }
 
 /** serial number and platform display at startup */
 int checkboard (void)
 {
-    unsigned char *s = getenv ("serial#");
-    unsigned char *e;
-
-    /* After a loadace command, the SystemAce control register is left in a wonky state. */
-    /* this code did not work in board_pre_init */
-    unsigned char* p = (unsigned char*)AP1000_SYSACE_REGBASE;
-    p[SYSACE_CTRLREG0] = 0x0;
-
-    /* add platform and device to banner */
-    switch(get_device()){
-        case AP1xx_AP107_TARGET:{
-            puts(AP1xx_AP107_TARGET_STR);
-            break;
-        }
-        case AP1xx_AP120_TARGET:{
-            puts(AP1xx_AP120_TARGET_STR);
-            break;
-        }
-        case AP1xx_AP130_TARGET:{
-            puts(AP1xx_AP130_TARGET_STR);
-            break;
-        }
-        case AP1xx_AP1070_TARGET:{
-            puts(AP1xx_AP1070_TARGET_STR);
-            break;
-        }
-        case AP1xx_AP1100_TARGET:{
-            puts(AP1xx_AP1100_TARGET_STR);
-            break;
-        }
-        default:{
-            puts(AP1xx_UNKNOWN_STR);
-            break;
-        }
-    }
-    puts(AP1xx_TARGET_STR);
-    puts(" with ");
-
-    switch(get_platform()){
-        case AP100_BASELINE_PLATFORM:
-        case AP1000_BASELINE_PLATFORM:{
-            puts(AP1xx_BASELINE_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_QUADGE_PLATFORM:{
-            puts(AP1xx_QUADGE_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_MGT_REF_PLATFORM:{
-            puts(AP1xx_MGT_REF_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_STANDARD_PLATFORM:{
-            puts(AP1xx_STANDARD_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_DUAL_PLATFORM:{
-            puts(AP1xx_DUAL_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_BASE_SRAM_PLATFORM:{
-            puts(AP1xx_BASE_SRAM_PLATFORM_STR);
-            break;
-        }
-        case AP1xx_PCI_PCB_TESTPLATFORM:
-        case AP1000_PCI_PCB_TESTPLATFORM:{
-            puts(AP1xx_PCI_PCB_TESTPLATFORM_STR);
-            break;
-        }
-        case AP1xx_DUAL_GE_MEZZ_TESTPLATFORM:{
-            puts(AP1xx_DUAL_GE_MEZZ_TESTPLATFORM_STR);
-            break;
-        }
-        case AP1xx_SFP_MEZZ_TESTPLATFORM:{
-            puts(AP1xx_SFP_MEZZ_TESTPLATFORM_STR);
-            break;
-        }
-        default:{
-            puts(AP1xx_UNKNOWN_STR);
-            break;
-        }
-    }
-
-    if((get_platform() & AP1xx_TESTPLATFORM_MASK) != 0){
-        puts(AP1xx_TESTPLATFORM_STR);
-    }
-    else{
-        puts(AP1xx_PLATFORM_STR);
-    }
-
-    putc('\n');
-
-    puts ("Serial#: ");
-
-    if (!s) {
-        printf ("### No HW ID - assuming AMIRIX");
-    } else {
-        for (e = s; *e; ++e) {
-            if (*e == ' ')
-                break;
-        }
-
-        for (; s < e; ++s) {
-            putc (*s);
-        }
-    }
-
-    putc ('\n');
-
-    return (0);
+       char buf[64];
+       int l = getenv_f("serial#", buf, sizeof(buf));
+
+       /* After a loadace command, the SystemAce control register is left in a wonky state. */
+       /* this code did not work in board_pre_init */
+       unsigned char *p = (unsigned char *) AP1000_SYSACE_REGBASE;
+
+       p[SYSACE_CTRLREG0] = 0x0;
+
+       /* add platform and device to banner */
+       switch (get_device ()) {
+       case AP1xx_AP107_TARGET:
+               puts (AP1xx_AP107_TARGET_STR);
+               break;
+       case AP1xx_AP120_TARGET:
+               puts (AP1xx_AP120_TARGET_STR);
+               break;
+       case AP1xx_AP130_TARGET:
+               puts (AP1xx_AP130_TARGET_STR);
+               break;
+       case AP1xx_AP1070_TARGET:
+               puts (AP1xx_AP1070_TARGET_STR);
+               break;
+       case AP1xx_AP1100_TARGET:
+               puts (AP1xx_AP1100_TARGET_STR);
+               break;
+       default:
+               puts (AP1xx_UNKNOWN_STR);
+               break;
+       }
+       puts (AP1xx_TARGET_STR);
+       puts (" with ");
+
+       switch (get_platform ()) {
+       case AP100_BASELINE_PLATFORM:
+       case AP1000_BASELINE_PLATFORM:
+               puts (AP1xx_BASELINE_PLATFORM_STR);
+               break;
+       case AP1xx_QUADGE_PLATFORM:
+               puts (AP1xx_QUADGE_PLATFORM_STR);
+               break;
+       case AP1xx_MGT_REF_PLATFORM:
+               puts (AP1xx_MGT_REF_PLATFORM_STR);
+               break;
+       case AP1xx_STANDARD_PLATFORM:
+               puts (AP1xx_STANDARD_PLATFORM_STR);
+               break;
+       case AP1xx_DUAL_PLATFORM:
+               puts (AP1xx_DUAL_PLATFORM_STR);
+               break;
+       case AP1xx_BASE_SRAM_PLATFORM:
+               puts (AP1xx_BASE_SRAM_PLATFORM_STR);
+               break;
+       case AP1xx_PCI_PCB_TESTPLATFORM:
+       case AP1000_PCI_PCB_TESTPLATFORM:
+               puts (AP1xx_PCI_PCB_TESTPLATFORM_STR);
+               break;
+       case AP1xx_DUAL_GE_MEZZ_TESTPLATFORM:
+               puts (AP1xx_DUAL_GE_MEZZ_TESTPLATFORM_STR);
+               break;
+       case AP1xx_SFP_MEZZ_TESTPLATFORM:
+               puts (AP1xx_SFP_MEZZ_TESTPLATFORM_STR);
+               break;
+       default:
+               puts (AP1xx_UNKNOWN_STR);
+               break;
+       }
+
+       if ((get_platform () & AP1xx_TESTPLATFORM_MASK) != 0) {
+               puts (AP1xx_TESTPLATFORM_STR);
+       } else {
+               puts (AP1xx_PLATFORM_STR);
+       }
+
+       putc ('\n');
+
+       puts ("Serial#: ");
+
+       if (l < 0) {
+               printf ("### No HW ID - assuming AMIRIX");
+       } else {
+               int i;
+
+               for (i = 0; i < l; ++i) {
+                       if (buf[i] == ' ') {
+                               buf[i] = '\0';
+                               break;
+                       }
+               }
+
+               puts(buf);
+       }
+
+       putc ('\n');
+
+       return (0);
 }
 
 
-long int initdram (int board_type)
+phys_size_t initdram (int board_type)
 {
-    unsigned char *s = getenv ("dramsize");
-
-    if(s != NULL){
-        if((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))){
-            s += 2;
-        }
-        return simple_strtoul(s, NULL, 16);
-    }
-    else{
-        /* give all 64 MB */
+       char buf[64];
+       int i = getenv_f("dramsize", buf, sizeof(buf));
+
+       if (i > 0) {
+               char *s = buf;
+               if ((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))) {
+                       s += 2;
+               }
+               return (long int)simple_strtoul (s, NULL, 16);
+       } else {
+               /* give all 64 MB */
                return 64 * 1024 * 1024;
-    }
+       }
 }
 
-unsigned int get_platform(void){
-    unsigned int *revision_reg_ptr = (unsigned int *)AP1xx_FPGA_REV_ADDR;
-    return (*revision_reg_ptr & AP1xx_PLATFORM_MASK);
+unsigned int get_platform (void)
+{
+       unsigned int *revision_reg_ptr = (unsigned int *) AP1xx_FPGA_REV_ADDR;
+
+       return (*revision_reg_ptr & AP1xx_PLATFORM_MASK);
 }
 
-unsigned int get_device(void){
-    unsigned int *revision_reg_ptr = (unsigned int *)AP1xx_FPGA_REV_ADDR;
+unsigned int get_device (void)
+{
+       unsigned int *revision_reg_ptr = (unsigned int *) AP1xx_FPGA_REV_ADDR;
 
-    return (*revision_reg_ptr & AP1xx_TARGET_MASK);
+       return (*revision_reg_ptr & AP1xx_TARGET_MASK);
 }
 
-#if 0  // loadace is not working; it appears to be a hardware issue with the system ace.
+#if 0                          /* loadace is not working; it appears to be a hardware issue with the system ace. */
 /*
    This function loads FPGA configurations from the SystemACE CompactFlash
 */
-int do_loadace (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_loadace (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 {
-    unsigned char *p = (unsigned char *)AP1000_SYSACE_REGBASE;
-    int cfg;
-
-    if((p[SYSACE_STATREG0] & 0x10) == 0) {
-        p[SYSACE_CTRLREG0] = 0x80;
-        printf ("\nNo CompactFlash Detected\n\n");
-        p[SYSACE_CTRLREG0] = 0x00;
-        return 1;
-    }
-
-    // reset configuration controller: |  0x80
-    // select cpflash                  & ~0x40
-    // cfg start                       |  0x20
-    // wait for cfgstart               & ~0x10
-    // force cfgmode:                  |  0x08
-    // do no force cfgaddr:            & ~0x04
-    // clear mpulock:                  & ~0x02
-    // do not force lock request       & ~0x01
-
-    p[SYSACE_CTRLREG0] = 0x80 | 0x20 | 0x08;
-    p[SYSACE_CTRLREG1] = 0x00;
-
-    // force config address if arg2 exists
-    if (argc == 2) {
-        cfg = simple_strtoul(argv[1], NULL, 10);
-
-        if(cfg > 7) {
-           printf ("\nInvalid Configuration\n\n");
-         p[SYSACE_CTRLREG0] = 0x00;
-           return 1;
-        }
-        // Set config address
-        p[SYSACE_CTRLREG1] = (cfg << 5);
-        // force cfgaddr
-        p[SYSACE_CTRLREG0] |= 0x04;
-
-    } else {
-        cfg = (p[SYSACE_STATREG1] & 0xE0) >> 5;
-    }
-
-    /* release configuration controller */
-    printf("\nLoading V2PRO with config %d...\n", cfg);
-    p[SYSACE_CTRLREG0] &= ~0x80;
-
-
-    while((p[SYSACE_STATREG1] & 0x01) == 0) {
-
-        if(p[SYSACE_ERRREG0] & 0x80) {
-            // attempting to load an invalid configuration makes the cpflash
-            // appear to be removed. Reset here to avoid that problem
-            p[SYSACE_CTRLREG0] = 0x80;
-            printf("\nConfiguration %d Read Error\n\n", cfg);
-            p[SYSACE_CTRLREG0] = 0x00;
-            return 1;
-        }
-    }
-
-    p[SYSACE_CTRLREG0] |= 0x20;
-
-    return 0;
+       unsigned char *p = (unsigned char *) AP1000_SYSACE_REGBASE;
+       int cfg;
+
+       if ((p[SYSACE_STATREG0] & 0x10) == 0) {
+               p[SYSACE_CTRLREG0] = 0x80;
+               printf ("\nNo CompactFlash Detected\n\n");
+               p[SYSACE_CTRLREG0] = 0x00;
+               return 1;
+       }
+
+       /* reset configuration controller: |  0x80 */
+       /* select cpflash                  & ~0x40 */
+       /* cfg start                       |  0x20 */
+       /* wait for cfgstart               & ~0x10 */
+       /* force cfgmode:                  |  0x08 */
+       /* do no force cfgaddr:            & ~0x04 */
+       /* clear mpulock:                  & ~0x02 */
+       /* do not force lock request       & ~0x01 */
+
+       p[SYSACE_CTRLREG0] = 0x80 | 0x20 | 0x08;
+       p[SYSACE_CTRLREG1] = 0x00;
+
+       /* force config address if arg2 exists */
+       if (argc == 2) {
+               cfg = simple_strtoul (argv[1], NULL, 10);
+
+               if (cfg > 7) {
+                       printf ("\nInvalid Configuration\n\n");
+                       p[SYSACE_CTRLREG0] = 0x00;
+                       return 1;
+               }
+               /* Set config address */
+               p[SYSACE_CTRLREG1] = (cfg << 5);
+               /* force cfgaddr */
+               p[SYSACE_CTRLREG0] |= 0x04;
+
+       } else {
+               cfg = (p[SYSACE_STATREG1] & 0xE0) >> 5;
+       }
+
+       /* release configuration controller */
+       printf ("\nLoading V2PRO with config %d...\n", cfg);
+       p[SYSACE_CTRLREG0] &= ~0x80;
+
+
+       while ((p[SYSACE_STATREG1] & 0x01) == 0) {
+
+               if (p[SYSACE_ERRREG0] & 0x80) {
+                       /* attempting to load an invalid configuration makes the cpflash */
+                       /* appear to be removed. Reset here to avoid that problem */
+                       p[SYSACE_CTRLREG0] = 0x80;
+                       printf ("\nConfiguration %d Read Error\n\n", cfg);
+                       p[SYSACE_CTRLREG0] = 0x00;
+                       return 1;
+               }
+       }
+
+       p[SYSACE_CTRLREG0] |= 0x20;
+
+       return 0;
 }
 #endif
 
@@ -260,106 +251,112 @@ int do_loadace (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
   *     -1 if failed
   * </pre>
   */
-int do_swconfigbyte(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
-    unsigned char *sector_buffer = NULL;
-    unsigned char input_char;
-    int write_result;
-    unsigned int  input_uint;
-
-    /* display value if no argument */
-    if(argc < 2){
-        printf("Software configuration byte is currently: 0x%02x\n",
-               *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
-        return 0;
-    }
-    else if(argc > 3){
-        printf("Too many arguments\n");
-        return -1;
-    }
-
-    /* if 3 arguments, 3rd argument is the address to use */
-    if(argc == 3){
-        input_uint = simple_strtoul(argv[1], NULL, 16);
-        sector_buffer = (unsigned char *)input_uint;
-    }
-    else{
-        sector_buffer = (unsigned char *)DEFAULT_TEMP_ADDR;
-    }
-
-    input_char = simple_strtoul(argv[1], NULL, 0);
-    if((input_char & ~SW_BYTE_MASK) != 0){
-        printf("Input of 0x%02x will be masked to 0x%02x\n",
-                input_char, (input_char & SW_BYTE_MASK));
-        input_char = input_char & SW_BYTE_MASK;
-    }
-
-    memcpy(sector_buffer, (void *)SW_BYTE_SECTOR_ADDR, SW_BYTE_SECTOR_SIZE);
-    sector_buffer[SW_BYTE_SECTOR_OFFSET] = input_char;
-
-
-    printf("Erasing Flash...");
-    if (flash_sect_erase (SW_BYTE_SECTOR_ADDR, (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET))){
-        return -1;
-    }
-
-    printf("Writing to Flash... ");
-    write_result = flash_write(sector_buffer, SW_BYTE_SECTOR_ADDR, SW_BYTE_SECTOR_SIZE);
-    if (write_result != 0) {
-        flash_perror (write_result);
-        return -1;
-    }
-    else{
-        printf("done\n");
-        printf("Software configuration byte is now: 0x%02x\n",
-                *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
-    }
-
-    return 0;
+int do_swconfigbyte (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+       unsigned char *sector_buffer = NULL;
+       unsigned char input_char;
+       int write_result;
+       unsigned int input_uint;
+
+       /* display value if no argument */
+       if (argc < 2) {
+               printf ("Software configuration byte is currently: 0x%02x\n",
+                       *((unsigned char *) (SW_BYTE_SECTOR_ADDR +
+                                            SW_BYTE_SECTOR_OFFSET)));
+               return 0;
+       } else if (argc > 3) {
+               printf ("Too many arguments\n");
+               return -1;
+       }
+
+       /* if 3 arguments, 3rd argument is the address to use */
+       if (argc == 3) {
+               input_uint = simple_strtoul (argv[1], NULL, 16);
+               sector_buffer = (unsigned char *) input_uint;
+       } else {
+               sector_buffer = (unsigned char *) DEFAULT_TEMP_ADDR;
+       }
+
+       input_char = simple_strtoul (argv[1], NULL, 0);
+       if ((input_char & ~SW_BYTE_MASK) != 0) {
+               printf ("Input of 0x%02x will be masked to 0x%02x\n",
+                       input_char, (input_char & SW_BYTE_MASK));
+               input_char = input_char & SW_BYTE_MASK;
+       }
+
+       memcpy (sector_buffer, (void *) SW_BYTE_SECTOR_ADDR,
+               SW_BYTE_SECTOR_SIZE);
+       sector_buffer[SW_BYTE_SECTOR_OFFSET] = input_char;
+
+
+       printf ("Erasing Flash...");
+       if (flash_sect_erase
+           (SW_BYTE_SECTOR_ADDR,
+            (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET))) {
+               return -1;
+       }
+
+       printf ("Writing to Flash... ");
+       write_result =
+               flash_write ((char *)sector_buffer, SW_BYTE_SECTOR_ADDR,
+                            SW_BYTE_SECTOR_SIZE);
+       if (write_result != 0) {
+               flash_perror (write_result);
+               return -1;
+       } else {
+               printf ("done\n");
+               printf ("Software configuration byte is now: 0x%02x\n",
+                       *((unsigned char *) (SW_BYTE_SECTOR_ADDR +
+                                            SW_BYTE_SECTOR_OFFSET)));
+       }
+
+       return 0;
 }
 
 #define ONE_SECOND 1000000
 
-int do_pause(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
-    int pause_time;
-    unsigned int delay_time;
-    int break_loop = 0;
-
-    /* display value if no argument */
-    if(argc < 2){
-        pause_time = 1;
-    }
-
-    else if(argc > 2){
-        printf("Too many arguments\n");
-        return -1;
-    }
-    else{
-        pause_time = simple_strtoul(argv[1], NULL, 0);
-    }
-
-    printf("Pausing with a poll time of %d, press any key to reactivate\n", pause_time);
-    delay_time = pause_time * ONE_SECOND;
-    while(break_loop == 0){
-        udelay(delay_time);
-        if(serial_tstc() != 0){
-            break_loop = 1;
-            /* eat user key presses */
-            while(serial_tstc() != 0){
-                serial_getc();
-            }
-        }
-    }
-
-    return 0;
+int do_pause (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+       int pause_time;
+       unsigned int delay_time;
+       int break_loop = 0;
+
+       /* display value if no argument */
+       if (argc < 2) {
+               pause_time = 1;
+       }
+
+       else if (argc > 2) {
+               printf ("Too many arguments\n");
+               return -1;
+       } else {
+               pause_time = simple_strtoul (argv[1], NULL, 0);
+       }
+
+       printf ("Pausing with a poll time of %d, press any key to reactivate\n", pause_time);
+       delay_time = pause_time * ONE_SECOND;
+       while (break_loop == 0) {
+               udelay (delay_time);
+               if (serial_tstc () != 0) {
+                       break_loop = 1;
+                       /* eat user key presses */
+                       while (serial_tstc () != 0) {
+                               serial_getc ();
+                       }
+               }
+       }
+
+       return 0;
 }
 
-int do_swreconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
-    printf("Triggering software reconfigure (software config byte is 0x%02x)...\n",
-           *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
-    udelay (1000);
-    *((unsigned char*)AP1000_CPLD_BASE) = 1;
+int do_swreconfig (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+       printf ("Triggering software reconfigure (software config byte is 0x%02x)...\n",
+               *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
+       udelay (1000);
+       *((unsigned char *) AP1000_CPLD_BASE) = 1;
 
-    return 0;
+       return 0;
 }
 
 #define GET_DECIMAL(low_byte) ((low_byte >> 5) * 125)
@@ -372,301 +369,341 @@ int do_swreconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
 #define TEMP_ETHERM_BIT 0x02
 #define TEMP_LTHERM_BIT 0x01
 
-int do_temp_sensor(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
-    char cmd;
-    int ret_val = 0;
-    unsigned char temp_byte;
-    int temp;
-    int temp_low;
-    int low;
-    int low_low;
-    int high;
-    int high_low;
-    int therm;
-    unsigned char user_data[4] = { 0 };
-    int user_data_count = 0;
-    int ii;
-
-    if(argc > 1){
-        cmd = argv[1][0];
-    }
-    else{
-        cmd = 's'; /* default to status */
-    }
-
-    user_data_count = argc - 2;
-    for(ii = 0;ii < user_data_count;ii++){
-        user_data[ii] = simple_strtoul(argv[2 + ii], NULL, 0);
-    }
-    switch (cmd){
-        case 's':{
-
-            if(I2CAccess(0x2, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            printf("Status    : 0x%02x  ", temp_byte);
-            if(temp_byte & TEMP_BUSY_BIT){
-                printf("BUSY ");
-            }
-
-            if(temp_byte & TEMP_LHIGH_BIT){
-                printf("LHIGH ");
-            }
-
-            if(temp_byte & TEMP_LLOW_BIT){
-                printf("LLOW ");
-            }
-
-            if(temp_byte & TEMP_EHIGH_BIT){
-                printf("EHIGH ");
-            }
-
-            if(temp_byte & TEMP_ELOW_BIT){
-                printf("ELOW ");
-            }
-
-            if(temp_byte & TEMP_OPEN_BIT){
-                printf("OPEN ");
-            }
-
-            if(temp_byte & TEMP_ETHERM_BIT){
-                printf("ETHERM ");
-            }
-
-            if(temp_byte & TEMP_LTHERM_BIT){
-                printf("LTHERM");
-            }
-            printf("\n");
-
-            if(I2CAccess(0x3, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            printf("Config    : 0x%02x  ", temp_byte);
-
-            if(I2CAccess(0x4, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                printf("\n");
-                goto fail;
-            }
-            printf("Conversion: 0x%02x\n", temp_byte);
-            if(I2CAccess(0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            printf("Cons Alert: 0x%02x  ", temp_byte);
-
-            if(I2CAccess(0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                printf("\n");
-                goto fail;
-            }
-            printf("Therm Hyst: %d\n", temp_byte);
-
-            if(I2CAccess(0x0, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            temp = temp_byte;
-            if(I2CAccess(0x6, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            low = temp_byte;
-            if(I2CAccess(0x5, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            high = temp_byte;
-            if(I2CAccess(0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            therm = temp_byte;
-            printf("Local Temp: %2d     Low: %2d     High: %2d     THERM: %2d\n", temp, low, high, therm);
-
-            if(I2CAccess(0x1, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            temp = temp_byte;
-            if(I2CAccess(0x10, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            temp_low = temp_byte;
-            if(I2CAccess(0x8, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            low = temp_byte;
-            if(I2CAccess(0x14, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            low_low = temp_byte;
-            if(I2CAccess(0x7, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            high = temp_byte;
-            if(I2CAccess(0x13, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            high_low = temp_byte;
-            if(I2CAccess(0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            therm = temp_byte;
-            if(I2CAccess(0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
-                goto fail;
-            }
-            printf("Ext Temp  : %2d.%03d Low: %2d.%03d High: %2d.%03d THERM: %2d Offset: %2d\n", temp, GET_DECIMAL(temp_low), low, GET_DECIMAL(low_low), high, GET_DECIMAL(high_low), therm, temp_byte);
-            break;
-        }
-        case 'l':{ /* alter local limits : low, high, therm */
-            if(argc < 3){
-                goto usage;
-            }
-
-            /* low */
-            if(I2CAccess(0xC, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
-                goto fail;
-            }
-
-            if(user_data_count > 1){
-                /* high */
-                if(I2CAccess(0xB, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-
-            if(user_data_count > 2){
-                /* therm */
-                if(I2CAccess(0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-            break;
-        }
-        case 'e':{ /* alter external limits: low, high, therm, offset */
-            if(argc < 3){
-                goto usage;
-            }
-
-            /* low */
-            if(I2CAccess(0xE, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
-                goto fail;
-            }
-
-            if(user_data_count > 1){
-                /* high */
-                if(I2CAccess(0xD, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-
-            if(user_data_count > 2){
-                /* therm */
-                if(I2CAccess(0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-
-            if(user_data_count > 3){
-                /* offset */
-                if(I2CAccess(0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[3], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-            break;
-        }
-        case 'c':{ /* alter config settings: config, conv, cons alert, therm hyst */
-            if(argc < 3){
-                goto usage;
-            }
-
-            /* config */
-            if(I2CAccess(0x9, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
-                goto fail;
-            }
-
-            if(user_data_count > 1){
-                /* conversion */
-                if(I2CAccess(0xA, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-
-            if(user_data_count > 2){
-                /* cons alert */
-                if(I2CAccess(0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-
-            if(user_data_count > 3){
-                /* therm hyst */
-                if(I2CAccess(0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[3], I2C_WRITE) != 0){
-                    goto fail;
-                }
-            }
-            break;
-        }
-        default:{
-            goto usage;
-        }
-    }
-
-    goto done;
- fail:
-    printf("Access to sensor failed\n");
-    ret_val = -1;
-    goto done;
- usage:
-    printf ("Usage:\n%s\n", cmdtp->help);
-
- done:
-     return ret_val;
+int do_temp_sensor (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+       char cmd;
+       int ret_val = 0;
+       unsigned char temp_byte;
+       int temp;
+       int temp_low;
+       int low;
+       int low_low;
+       int high;
+       int high_low;
+       int therm;
+       unsigned char user_data[4] = { 0 };
+       int user_data_count = 0;
+       int ii;
+
+       if (argc > 1) {
+               cmd = argv[1][0];
+       } else {
+               cmd = 's';      /* default to status */
+       }
+
+       user_data_count = argc - 2;
+       for (ii = 0; ii < user_data_count; ii++) {
+               user_data[ii] = simple_strtoul (argv[2 + ii], NULL, 0);
+       }
+       switch (cmd) {
+       case 's':
+               if (I2CAccess
+                   (0x2, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Status    : 0x%02x  ", temp_byte);
+               if (temp_byte & TEMP_BUSY_BIT)
+                       printf ("BUSY ");
+
+               if (temp_byte & TEMP_LHIGH_BIT)
+                       printf ("LHIGH ");
+
+               if (temp_byte & TEMP_LLOW_BIT)
+                       printf ("LLOW ");
+
+               if (temp_byte & TEMP_EHIGH_BIT)
+                       printf ("EHIGH ");
+
+               if (temp_byte & TEMP_ELOW_BIT)
+                       printf ("ELOW ");
+
+               if (temp_byte & TEMP_OPEN_BIT)
+                       printf ("OPEN ");
+
+               if (temp_byte & TEMP_ETHERM_BIT)
+                       printf ("ETHERM ");
+
+               if (temp_byte & TEMP_LTHERM_BIT)
+                       printf ("LTHERM");
+
+               printf ("\n");
+
+               if (I2CAccess
+                   (0x3, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Config    : 0x%02x  ", temp_byte);
+
+               if (I2CAccess
+                   (0x4, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       printf ("\n");
+                       goto fail;
+               }
+               printf ("Conversion: 0x%02x\n", temp_byte);
+               if (I2CAccess
+                   (0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Cons Alert: 0x%02x  ", temp_byte);
+
+               if (I2CAccess
+                   (0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       printf ("\n");
+                       goto fail;
+               }
+               printf ("Therm Hyst: %d\n", temp_byte);
+
+               if (I2CAccess
+                   (0x0, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp = temp_byte;
+               if (I2CAccess
+                   (0x6, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low = temp_byte;
+               if (I2CAccess
+                   (0x5, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high = temp_byte;
+               if (I2CAccess
+                   (0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               therm = temp_byte;
+               printf ("Local Temp: %2d     Low: %2d     High: %2d     THERM: %2d\n", temp, low, high, therm);
+
+               if (I2CAccess
+                   (0x1, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp = temp_byte;
+               if (I2CAccess
+                   (0x10, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               temp_low = temp_byte;
+               if (I2CAccess
+                   (0x8, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low = temp_byte;
+               if (I2CAccess
+                   (0x14, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               low_low = temp_byte;
+               if (I2CAccess
+                   (0x7, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high = temp_byte;
+               if (I2CAccess
+                   (0x13, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               high_low = temp_byte;
+               if (I2CAccess
+                   (0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               therm = temp_byte;
+               if (I2CAccess
+                   (0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &temp_byte, I2C_READ) != 0) {
+                       goto fail;
+               }
+               printf ("Ext Temp  : %2d.%03d Low: %2d.%03d High: %2d.%03d THERM: %2d Offset: %2d\n", temp, GET_DECIMAL (temp_low), low, GET_DECIMAL (low_low), high, GET_DECIMAL (high_low), therm, temp_byte);
+               break;
+       case 'l':               /* alter local limits : low, high, therm */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* low */
+               if (I2CAccess
+                   (0xC, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* high */
+                       if (I2CAccess
+                           (0xB, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* therm */
+                       if (I2CAccess
+                           (0x20, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       case 'e':               /* alter external limits: low, high, therm, offset */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* low */
+               if (I2CAccess
+                   (0xE, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* high */
+                       if (I2CAccess
+                           (0xD, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* therm */
+                       if (I2CAccess
+                           (0x19, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 3) {
+                       /* offset */
+                       if (I2CAccess
+                           (0x11, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[3],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       case 'c':               /* alter config settings: config, conv, cons alert, therm hyst */
+               if (argc < 3) {
+                       goto usage;
+               }
+
+               /* config */
+               if (I2CAccess
+                   (0x9, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                    &user_data[0], I2C_WRITE) != 0) {
+                       goto fail;
+               }
+
+               if (user_data_count > 1) {
+                       /* conversion */
+                       if (I2CAccess
+                           (0xA, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL,
+                            &user_data[1], I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 2) {
+                       /* cons alert */
+                       if (I2CAccess
+                           (0x22, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[2],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+
+               if (user_data_count > 3) {
+                       /* therm hyst */
+                       if (I2CAccess
+                           (0x21, I2C_SENSOR_DEV,
+                            I2C_SENSOR_CHIP_SEL, &user_data[3],
+                            I2C_WRITE) != 0) {
+                               goto fail;
+                       }
+               }
+               break;
+       default:
+               goto usage;
+       }
+
+       goto done;
+fail:
+       printf ("Access to sensor failed\n");
+       ret_val = -1;
+       goto done;
+usage:
+       printf ("Usage:\n%s\n", cmdtp->help);
+
+done:
+       return ret_val;
 }
 
-U_BOOT_CMD(
-    temp,    6,    0,    do_temp_sensor,
-    "temp    - interact with the temperature sensor\n",
-    "temp [s]\n"
-    "        - Show status.\n"
-    "temp l LOW [HIGH] [THERM]\n"
-    "        - Set local limits.\n"
-    "temp e LOW [HIGH] [THERM] [OFFSET]\n"
-    "        - Set external limits.\n"
-    "temp c CONFIG [CONVERSION] [CONS. ALERT] [THERM HYST]\n"
-    "        - Set config options.\n"
-    "\n"
-    "All values can be decimal or hex (hex preceded with 0x).\n"
-    "Only whole numbers are supported for external limits.\n"
-);
+U_BOOT_CMD (temp, 6, 0, do_temp_sensor,
+           "interact with the temperature sensor",
+           "temp [s]\n"
+           "        - Show status.\n"
+           "temp l LOW [HIGH] [THERM]\n"
+           "        - Set local limits.\n"
+           "temp e LOW [HIGH] [THERM] [OFFSET]\n"
+           "        - Set external limits.\n"
+           "temp c CONFIG [CONVERSION] [CONS. ALERT] [THERM HYST]\n"
+           "        - Set config options.\n"
+           "\n"
+           "All values can be decimal or hex (hex preceded with 0x).\n"
+           "Only whole numbers are supported for external limits.");
 
 #if 0
-U_BOOT_CMD(
-    loadace,    2,    0,     do_loadace,
-    "loadace - load fpga configuration from System ACE compact flash\n",
-    "N\n"
-    "    - Load configuration N (0-7) from System ACE compact flash\n"
-    "loadace\n"
-    "    - loads default configuration\n"
-);
+U_BOOT_CMD (loadace, 2, 0, do_loadace,
+           "load fpga configuration from System ACE compact flash",
+           "N\n"
+           "    - Load configuration N (0-7) from System ACE compact flash\n"
+           "loadace\n" "    - loads default configuration");
 #endif
 
-U_BOOT_CMD(
-    swconfig,    2,    0,     do_swconfigbyte,
-    "swconfig- display or modify the software configuration byte\n",
-    "N [ADDRESS]\n"
-    "    - set software configuration byte to N, optionally use ADDRESS as\n"
-    "      location of buffer for flash copy\n"
-    "swconfig\n"
-    "    - display software configuration byte\n"
-);
-
-U_BOOT_CMD(
-    pause,    2,    0,     do_pause,
-    "pause   - sleep processor until any key is pressed with poll time of N seconds\n",
-    "N\n"
-    "    - sleep processor until any key is pressed with poll time of N seconds\n"
-    "pause\n"
-    "    - sleep processor until any key is pressed with poll time of 1 second\n"
-);
-
-U_BOOT_CMD(
-    swrecon,    1,    0,     do_swreconfig,
-    "swrecon - trigger a board reconfigure to the software selected configuration\n",
-    "\n"
-    "    - trigger a board reconfigure to the software selected configuration\n"
-);
-
+U_BOOT_CMD (swconfig, 2, 0, do_swconfigbyte,
+           "display or modify the software configuration byte",
+           "N [ADDRESS]\n"
+           "    - set software configuration byte to N, optionally use ADDRESS as\n"
+           "      location of buffer for flash copy\n"
+           "swconfig\n" "    - display software configuration byte");
+
+U_BOOT_CMD (pause, 2, 0, do_pause,
+           "sleep processor until any key is pressed with poll time of N seconds",
+           "N\n"
+           "    - sleep processor until any key is pressed with poll time of N seconds\n"
+           "pause\n"
+           "    - sleep processor until any key is pressed with poll time of 1 second");
+
+U_BOOT_CMD (swrecon, 1, 0, do_swreconfig,
+           "trigger a board reconfigure to the software selected configuration",
+           "\n"
+           "    - trigger a board reconfigure to the software selected configuration");
+
+int board_eth_init(bd_t *bis)
+{
+       return pci_eth_init(bis);
+}