| /* | |
| * amirix.c: ppcboot platform support for AMIRIX board | |
| * | |
| * Copyright 2002 Mind NV | |
| * Copyright 2003 AMIRIX Systems Inc. | |
| * | |
| * http://www.mind.be/ | |
| * http://www.amirix.com/ | |
| * | |
| * Author : Peter De Schrijver (p2@mind.be) | |
| * Frank Smith (smith@amirix.com) | |
| * | |
| * Derived from : Other platform support files in this tree, ml2 | |
| * | |
| * This software may be used and distributed according to the terms of | |
| * the GNU General Public License (GPL) version 2, incorporated herein by | |
| * reference. Drivers based on or derived from this code fall under the GPL | |
| * and must retain the authorship, copyright and this license notice. This | |
| * file is not a complete program and may only be used when the entire | |
| * program is licensed under the GPL. | |
| * | |
| */ | |
| #include <common.h> | |
| #include <command.h> | |
| #include <netdev.h> | |
| #include <asm/processor.h> | |
| #include "powerspan.h" | |
| #include "ap1000.h" | |
| int board_pre_init (void) | |
| { | |
| return 0; | |
| } | |
| /** serial number and platform display at startup */ | |
| int checkboard (void) | |
| { | |
| 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); | |
| } | |
| phys_size_t initdram (int board_type) | |
| { | |
| 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_device (void) | |
| { | |
| unsigned int *revision_reg_ptr = (unsigned int *) AP1xx_FPGA_REV_ADDR; | |
| return (*revision_reg_ptr & AP1xx_TARGET_MASK); | |
| } | |
| #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 * 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; | |
| } | |
| #endif | |
| /** Console command to display and set the software reconfigure byte | |
| * <pre> | |
| * swconfig - display the current value of the software reconfigure byte | |
| * swconfig [#] - change the software reconfigure byte to # | |
| * </pre> | |
| * @param *cmdtp [IN] as passed by run_command (ignored) | |
| * @param flag [IN] as passed by run_command (ignored) | |
| * @param argc [IN] as passed by run_command if 1, display, if 2 change | |
| * @param *argv[] [IN] contains the parameters to use | |
| * @return | |
| * <pre> | |
| * 0 if passed | |
| * -1 if failed | |
| * </pre> | |
| */ | |
| 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 * 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 * 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; | |
| } | |
| #define GET_DECIMAL(low_byte) ((low_byte >> 5) * 125) | |
| #define TEMP_BUSY_BIT 0x80 | |
| #define TEMP_LHIGH_BIT 0x40 | |
| #define TEMP_LLOW_BIT 0x20 | |
| #define TEMP_EHIGH_BIT 0x10 | |
| #define TEMP_ELOW_BIT 0x08 | |
| #define TEMP_OPEN_BIT 0x04 | |
| #define TEMP_ETHERM_BIT 0x02 | |
| #define TEMP_LTHERM_BIT 0x01 | |
| 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, | |
| "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, | |
| "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, | |
| "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); | |
| } |