ap1000.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. /*
  2. * amirix.c: ppcboot platform support for AMIRIX board
  3. *
  4. * Copyright 2002 Mind NV
  5. * Copyright 2003 AMIRIX Systems Inc.
  6. *
  7. * http://www.mind.be/
  8. * http://www.amirix.com/
  9. *
  10. * Author : Peter De Schrijver (p2@mind.be)
  11. * Frank Smith (smith@amirix.com)
  12. *
  13. * Derived from : Other platform support files in this tree, ml2
  14. *
  15. * This software may be used and distributed according to the terms of
  16. * the GNU General Public License (GPL) version 2, incorporated herein by
  17. * reference. Drivers based on or derived from this code fall under the GPL
  18. * and must retain the authorship, copyright and this license notice. This
  19. * file is not a complete program and may only be used when the entire
  20. * program is licensed under the GPL.
  21. *
  22. */
  23. #include <common.h>
  24. #include <command.h>
  25. #include <asm/processor.h>
  26. #include "powerspan.h"
  27. #include "ap1000.h"
  28. int board_pre_init (void)
  29. {
  30. return 0;
  31. }
  32. /** serial number and platform display at startup */
  33. int checkboard (void)
  34. {
  35. unsigned char *s = getenv ("serial#");
  36. unsigned char *e;
  37. /* After a loadace command, the SystemAce control register is left in a wonky state. */
  38. /* this code did not work in board_pre_init */
  39. unsigned char* p = (unsigned char*)AP1000_SYSACE_REGBASE;
  40. p[SYSACE_CTRLREG0] = 0x0;
  41. /* add platform and device to banner */
  42. switch(get_device()){
  43. case AP1xx_AP107_TARGET:{
  44. puts(AP1xx_AP107_TARGET_STR);
  45. break;
  46. }
  47. case AP1xx_AP120_TARGET:{
  48. puts(AP1xx_AP120_TARGET_STR);
  49. break;
  50. }
  51. case AP1xx_AP130_TARGET:{
  52. puts(AP1xx_AP130_TARGET_STR);
  53. break;
  54. }
  55. case AP1xx_AP1070_TARGET:{
  56. puts(AP1xx_AP1070_TARGET_STR);
  57. break;
  58. }
  59. case AP1xx_AP1100_TARGET:{
  60. puts(AP1xx_AP1100_TARGET_STR);
  61. break;
  62. }
  63. default:{
  64. puts(AP1xx_UNKNOWN_STR);
  65. break;
  66. }
  67. }
  68. puts(AP1xx_TARGET_STR);
  69. puts(" with ");
  70. switch(get_platform()){
  71. case AP100_BASELINE_PLATFORM:
  72. case AP1000_BASELINE_PLATFORM:{
  73. puts(AP1xx_BASELINE_PLATFORM_STR);
  74. break;
  75. }
  76. case AP1xx_QUADGE_PLATFORM:{
  77. puts(AP1xx_QUADGE_PLATFORM_STR);
  78. break;
  79. }
  80. case AP1xx_MGT_REF_PLATFORM:{
  81. puts(AP1xx_MGT_REF_PLATFORM_STR);
  82. break;
  83. }
  84. case AP1xx_STANDARD_PLATFORM:{
  85. puts(AP1xx_STANDARD_PLATFORM_STR);
  86. break;
  87. }
  88. case AP1xx_DUAL_PLATFORM:{
  89. puts(AP1xx_DUAL_PLATFORM_STR);
  90. break;
  91. }
  92. case AP1xx_BASE_SRAM_PLATFORM:{
  93. puts(AP1xx_BASE_SRAM_PLATFORM_STR);
  94. break;
  95. }
  96. case AP1xx_PCI_PCB_TESTPLATFORM:
  97. case AP1000_PCI_PCB_TESTPLATFORM:{
  98. puts(AP1xx_PCI_PCB_TESTPLATFORM_STR);
  99. break;
  100. }
  101. case AP1xx_DUAL_GE_MEZZ_TESTPLATFORM:{
  102. puts(AP1xx_DUAL_GE_MEZZ_TESTPLATFORM_STR);
  103. break;
  104. }
  105. case AP1xx_SFP_MEZZ_TESTPLATFORM:{
  106. puts(AP1xx_SFP_MEZZ_TESTPLATFORM_STR);
  107. break;
  108. }
  109. default:{
  110. puts(AP1xx_UNKNOWN_STR);
  111. break;
  112. }
  113. }
  114. if((get_platform() & AP1xx_TESTPLATFORM_MASK) != 0){
  115. puts(AP1xx_TESTPLATFORM_STR);
  116. }
  117. else{
  118. puts(AP1xx_PLATFORM_STR);
  119. }
  120. putc('\n');
  121. puts ("Serial#: ");
  122. if (!s) {
  123. printf ("### No HW ID - assuming AMIRIX");
  124. } else {
  125. for (e = s; *e; ++e) {
  126. if (*e == ' ')
  127. break;
  128. }
  129. for (; s < e; ++s) {
  130. putc (*s);
  131. }
  132. }
  133. putc ('\n');
  134. return (0);
  135. }
  136. long int initdram (int board_type)
  137. {
  138. unsigned char *s = getenv ("dramsize");
  139. if(s != NULL){
  140. if((s[0] == '0') && ((s[1] == 'x') || (s[1] == 'X'))){
  141. s += 2;
  142. }
  143. return simple_strtoul(s, NULL, 16);
  144. }
  145. else{
  146. /* give all 64 MB */
  147. return 64 * 1024 * 1024;
  148. }
  149. }
  150. unsigned int get_platform(void){
  151. unsigned int *revision_reg_ptr = (unsigned int *)AP1xx_FPGA_REV_ADDR;
  152. return (*revision_reg_ptr & AP1xx_PLATFORM_MASK);
  153. }
  154. unsigned int get_device(void){
  155. unsigned int *revision_reg_ptr = (unsigned int *)AP1xx_FPGA_REV_ADDR;
  156. return (*revision_reg_ptr & AP1xx_TARGET_MASK);
  157. }
  158. #if 0 // loadace is not working; it appears to be a hardware issue with the system ace.
  159. /*
  160. This function loads FPGA configurations from the SystemACE CompactFlash
  161. */
  162. int do_loadace (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
  163. {
  164. unsigned char *p = (unsigned char *)AP1000_SYSACE_REGBASE;
  165. int cfg;
  166. if((p[SYSACE_STATREG0] & 0x10) == 0) {
  167. p[SYSACE_CTRLREG0] = 0x80;
  168. printf ("\nNo CompactFlash Detected\n\n");
  169. p[SYSACE_CTRLREG0] = 0x00;
  170. return 1;
  171. }
  172. // reset configuration controller: | 0x80
  173. // select cpflash & ~0x40
  174. // cfg start | 0x20
  175. // wait for cfgstart & ~0x10
  176. // force cfgmode: | 0x08
  177. // do no force cfgaddr: & ~0x04
  178. // clear mpulock: & ~0x02
  179. // do not force lock request & ~0x01
  180. p[SYSACE_CTRLREG0] = 0x80 | 0x20 | 0x08;
  181. p[SYSACE_CTRLREG1] = 0x00;
  182. // force config address if arg2 exists
  183. if (argc == 2) {
  184. cfg = simple_strtoul(argv[1], NULL, 10);
  185. if(cfg > 7) {
  186. printf ("\nInvalid Configuration\n\n");
  187. p[SYSACE_CTRLREG0] = 0x00;
  188. return 1;
  189. }
  190. // Set config address
  191. p[SYSACE_CTRLREG1] = (cfg << 5);
  192. // force cfgaddr
  193. p[SYSACE_CTRLREG0] |= 0x04;
  194. } else {
  195. cfg = (p[SYSACE_STATREG1] & 0xE0) >> 5;
  196. }
  197. /* release configuration controller */
  198. printf("\nLoading V2PRO with config %d...\n", cfg);
  199. p[SYSACE_CTRLREG0] &= ~0x80;
  200. while((p[SYSACE_STATREG1] & 0x01) == 0) {
  201. if(p[SYSACE_ERRREG0] & 0x80) {
  202. // attempting to load an invalid configuration makes the cpflash
  203. // appear to be removed. Reset here to avoid that problem
  204. p[SYSACE_CTRLREG0] = 0x80;
  205. printf("\nConfiguration %d Read Error\n\n", cfg);
  206. p[SYSACE_CTRLREG0] = 0x00;
  207. return 1;
  208. }
  209. }
  210. p[SYSACE_CTRLREG0] |= 0x20;
  211. return 0;
  212. }
  213. #endif
  214. /** Console command to display and set the software reconfigure byte
  215. * <pre>
  216. * swconfig - display the current value of the software reconfigure byte
  217. * swconfig [#] - change the software reconfigure byte to #
  218. * </pre>
  219. * @param *cmdtp [IN] as passed by run_command (ignored)
  220. * @param flag [IN] as passed by run_command (ignored)
  221. * @param argc [IN] as passed by run_command if 1, display, if 2 change
  222. * @param *argv[] [IN] contains the parameters to use
  223. * @return
  224. * <pre>
  225. * 0 if passed
  226. * -1 if failed
  227. * </pre>
  228. */
  229. int do_swconfigbyte(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
  230. unsigned char *sector_buffer = NULL;
  231. unsigned char input_char;
  232. int write_result;
  233. unsigned int input_uint;
  234. /* display value if no argument */
  235. if(argc < 2){
  236. printf("Software configuration byte is currently: 0x%02x\n",
  237. *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
  238. return 0;
  239. }
  240. else if(argc > 3){
  241. printf("Too many arguments\n");
  242. return -1;
  243. }
  244. /* if 3 arguments, 3rd argument is the address to use */
  245. if(argc == 3){
  246. input_uint = simple_strtoul(argv[1], NULL, 16);
  247. sector_buffer = (unsigned char *)input_uint;
  248. }
  249. else{
  250. sector_buffer = (unsigned char *)DEFAULT_TEMP_ADDR;
  251. }
  252. input_char = simple_strtoul(argv[1], NULL, 0);
  253. if((input_char & ~SW_BYTE_MASK) != 0){
  254. printf("Input of 0x%02x will be masked to 0x%02x\n",
  255. input_char, (input_char & SW_BYTE_MASK));
  256. input_char = input_char & SW_BYTE_MASK;
  257. }
  258. memcpy(sector_buffer, (void *)SW_BYTE_SECTOR_ADDR, SW_BYTE_SECTOR_SIZE);
  259. sector_buffer[SW_BYTE_SECTOR_OFFSET] = input_char;
  260. printf("Erasing Flash...");
  261. if (flash_sect_erase (SW_BYTE_SECTOR_ADDR, (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET))){
  262. return -1;
  263. }
  264. printf("Writing to Flash... ");
  265. write_result = flash_write(sector_buffer, SW_BYTE_SECTOR_ADDR, SW_BYTE_SECTOR_SIZE);
  266. if (write_result != 0) {
  267. flash_perror (write_result);
  268. return -1;
  269. }
  270. else{
  271. printf("done\n");
  272. printf("Software configuration byte is now: 0x%02x\n",
  273. *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
  274. }
  275. return 0;
  276. }
  277. #define ONE_SECOND 1000000
  278. int do_pause(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
  279. int pause_time;
  280. unsigned int delay_time;
  281. int break_loop = 0;
  282. /* display value if no argument */
  283. if(argc < 2){
  284. pause_time = 1;
  285. }
  286. else if(argc > 2){
  287. printf("Too many arguments\n");
  288. return -1;
  289. }
  290. else{
  291. pause_time = simple_strtoul(argv[1], NULL, 0);
  292. }
  293. printf("Pausing with a poll time of %d, press any key to reactivate\n", pause_time);
  294. delay_time = pause_time * ONE_SECOND;
  295. while(break_loop == 0){
  296. udelay(delay_time);
  297. if(serial_tstc() != 0){
  298. break_loop = 1;
  299. /* eat user key presses */
  300. while(serial_tstc() != 0){
  301. serial_getc();
  302. }
  303. }
  304. }
  305. return 0;
  306. }
  307. int do_swreconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
  308. printf("Triggering software reconfigure (software config byte is 0x%02x)...\n",
  309. *((unsigned char *) (SW_BYTE_SECTOR_ADDR + SW_BYTE_SECTOR_OFFSET)));
  310. udelay (1000);
  311. *((unsigned char*)AP1000_CPLD_BASE) = 1;
  312. return 0;
  313. }
  314. #define GET_DECIMAL(low_byte) ((low_byte >> 5) * 125)
  315. #define TEMP_BUSY_BIT 0x80
  316. #define TEMP_LHIGH_BIT 0x40
  317. #define TEMP_LLOW_BIT 0x20
  318. #define TEMP_EHIGH_BIT 0x10
  319. #define TEMP_ELOW_BIT 0x08
  320. #define TEMP_OPEN_BIT 0x04
  321. #define TEMP_ETHERM_BIT 0x02
  322. #define TEMP_LTHERM_BIT 0x01
  323. int do_temp_sensor(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
  324. char cmd;
  325. int ret_val = 0;
  326. unsigned char temp_byte;
  327. int temp;
  328. int temp_low;
  329. int low;
  330. int low_low;
  331. int high;
  332. int high_low;
  333. int therm;
  334. unsigned char user_data[4] = { 0 };
  335. int user_data_count = 0;
  336. int ii;
  337. if(argc > 1){
  338. cmd = argv[1][0];
  339. }
  340. else{
  341. cmd = 's'; /* default to status */
  342. }
  343. user_data_count = argc - 2;
  344. for(ii = 0;ii < user_data_count;ii++){
  345. user_data[ii] = simple_strtoul(argv[2 + ii], NULL, 0);
  346. }
  347. switch (cmd){
  348. case 's':{
  349. if(I2CAccess(0x2, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  350. goto fail;
  351. }
  352. printf("Status : 0x%02x ", temp_byte);
  353. if(temp_byte & TEMP_BUSY_BIT){
  354. printf("BUSY ");
  355. }
  356. if(temp_byte & TEMP_LHIGH_BIT){
  357. printf("LHIGH ");
  358. }
  359. if(temp_byte & TEMP_LLOW_BIT){
  360. printf("LLOW ");
  361. }
  362. if(temp_byte & TEMP_EHIGH_BIT){
  363. printf("EHIGH ");
  364. }
  365. if(temp_byte & TEMP_ELOW_BIT){
  366. printf("ELOW ");
  367. }
  368. if(temp_byte & TEMP_OPEN_BIT){
  369. printf("OPEN ");
  370. }
  371. if(temp_byte & TEMP_ETHERM_BIT){
  372. printf("ETHERM ");
  373. }
  374. if(temp_byte & TEMP_LTHERM_BIT){
  375. printf("LTHERM");
  376. }
  377. printf("\n");
  378. if(I2CAccess(0x3, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  379. goto fail;
  380. }
  381. printf("Config : 0x%02x ", temp_byte);
  382. if(I2CAccess(0x4, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  383. printf("\n");
  384. goto fail;
  385. }
  386. printf("Conversion: 0x%02x\n", temp_byte);
  387. if(I2CAccess(0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  388. goto fail;
  389. }
  390. printf("Cons Alert: 0x%02x ", temp_byte);
  391. if(I2CAccess(0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  392. printf("\n");
  393. goto fail;
  394. }
  395. printf("Therm Hyst: %d\n", temp_byte);
  396. if(I2CAccess(0x0, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  397. goto fail;
  398. }
  399. temp = temp_byte;
  400. if(I2CAccess(0x6, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  401. goto fail;
  402. }
  403. low = temp_byte;
  404. if(I2CAccess(0x5, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  405. goto fail;
  406. }
  407. high = temp_byte;
  408. if(I2CAccess(0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  409. goto fail;
  410. }
  411. therm = temp_byte;
  412. printf("Local Temp: %2d Low: %2d High: %2d THERM: %2d\n", temp, low, high, therm);
  413. if(I2CAccess(0x1, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  414. goto fail;
  415. }
  416. temp = temp_byte;
  417. if(I2CAccess(0x10, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  418. goto fail;
  419. }
  420. temp_low = temp_byte;
  421. if(I2CAccess(0x8, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  422. goto fail;
  423. }
  424. low = temp_byte;
  425. if(I2CAccess(0x14, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  426. goto fail;
  427. }
  428. low_low = temp_byte;
  429. if(I2CAccess(0x7, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  430. goto fail;
  431. }
  432. high = temp_byte;
  433. if(I2CAccess(0x13, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  434. goto fail;
  435. }
  436. high_low = temp_byte;
  437. if(I2CAccess(0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  438. goto fail;
  439. }
  440. therm = temp_byte;
  441. if(I2CAccess(0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &temp_byte, I2C_READ) != 0){
  442. goto fail;
  443. }
  444. 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);
  445. break;
  446. }
  447. case 'l':{ /* alter local limits : low, high, therm */
  448. if(argc < 3){
  449. goto usage;
  450. }
  451. /* low */
  452. if(I2CAccess(0xC, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
  453. goto fail;
  454. }
  455. if(user_data_count > 1){
  456. /* high */
  457. if(I2CAccess(0xB, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
  458. goto fail;
  459. }
  460. }
  461. if(user_data_count > 2){
  462. /* therm */
  463. if(I2CAccess(0x20, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
  464. goto fail;
  465. }
  466. }
  467. break;
  468. }
  469. case 'e':{ /* alter external limits: low, high, therm, offset */
  470. if(argc < 3){
  471. goto usage;
  472. }
  473. /* low */
  474. if(I2CAccess(0xE, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
  475. goto fail;
  476. }
  477. if(user_data_count > 1){
  478. /* high */
  479. if(I2CAccess(0xD, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
  480. goto fail;
  481. }
  482. }
  483. if(user_data_count > 2){
  484. /* therm */
  485. if(I2CAccess(0x19, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
  486. goto fail;
  487. }
  488. }
  489. if(user_data_count > 3){
  490. /* offset */
  491. if(I2CAccess(0x11, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[3], I2C_WRITE) != 0){
  492. goto fail;
  493. }
  494. }
  495. break;
  496. }
  497. case 'c':{ /* alter config settings: config, conv, cons alert, therm hyst */
  498. if(argc < 3){
  499. goto usage;
  500. }
  501. /* config */
  502. if(I2CAccess(0x9, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[0], I2C_WRITE) != 0){
  503. goto fail;
  504. }
  505. if(user_data_count > 1){
  506. /* conversion */
  507. if(I2CAccess(0xA, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[1], I2C_WRITE) != 0){
  508. goto fail;
  509. }
  510. }
  511. if(user_data_count > 2){
  512. /* cons alert */
  513. if(I2CAccess(0x22, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[2], I2C_WRITE) != 0){
  514. goto fail;
  515. }
  516. }
  517. if(user_data_count > 3){
  518. /* therm hyst */
  519. if(I2CAccess(0x21, I2C_SENSOR_DEV, I2C_SENSOR_CHIP_SEL, &user_data[3], I2C_WRITE) != 0){
  520. goto fail;
  521. }
  522. }
  523. break;
  524. }
  525. default:{
  526. goto usage;
  527. }
  528. }
  529. goto done;
  530. fail:
  531. printf("Access to sensor failed\n");
  532. ret_val = -1;
  533. goto done;
  534. usage:
  535. printf ("Usage:\n%s\n", cmdtp->help);
  536. done:
  537. return ret_val;
  538. }
  539. U_BOOT_CMD(
  540. temp, 6, 0, do_temp_sensor,
  541. "temp - interact with the temperature sensor\n",
  542. "temp [s]\n"
  543. " - Show status.\n"
  544. "temp l LOW [HIGH] [THERM]\n"
  545. " - Set local limits.\n"
  546. "temp e LOW [HIGH] [THERM] [OFFSET]\n"
  547. " - Set external limits.\n"
  548. "temp c CONFIG [CONVERSION] [CONS. ALERT] [THERM HYST]\n"
  549. " - Set config options.\n"
  550. "\n"
  551. "All values can be decimal or hex (hex preceded with 0x).\n"
  552. "Only whole numbers are supported for external limits.\n"
  553. );
  554. #if 0
  555. U_BOOT_CMD(
  556. loadace, 2, 0, do_loadace,
  557. "loadace - load fpga configuration from System ACE compact flash\n",
  558. "N\n"
  559. " - Load configuration N (0-7) from System ACE compact flash\n"
  560. "loadace\n"
  561. " - loads default configuration\n"
  562. );
  563. #endif
  564. U_BOOT_CMD(
  565. swconfig, 2, 0, do_swconfigbyte,
  566. "swconfig- display or modify the software configuration byte\n",
  567. "N [ADDRESS]\n"
  568. " - set software configuration byte to N, optionally use ADDRESS as\n"
  569. " location of buffer for flash copy\n"
  570. "swconfig\n"
  571. " - display software configuration byte\n"
  572. );
  573. U_BOOT_CMD(
  574. pause, 2, 0, do_pause,
  575. "pause - sleep processor until any key is pressed with poll time of N seconds\n",
  576. "N\n"
  577. " - sleep processor until any key is pressed with poll time of N seconds\n"
  578. "pause\n"
  579. " - sleep processor until any key is pressed with poll time of 1 second\n"
  580. );
  581. U_BOOT_CMD(
  582. swrecon, 1, 0, do_swreconfig,
  583. "swrecon - trigger a board reconfigure to the software selected configuration\n",
  584. "\n"
  585. " - trigger a board reconfigure to the software selected configuration\n"
  586. );