//----------------------------------------------------------------------------- int mv_man_test_dram(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { MV_STATUS status; printf("*****Testing DRAM now**********\n"); argv[1]="0x1FFFFFF0"; argv[2]="0x2000000F"; argv[3]="0xaaaa5555"; argv[4]="2"; printf("From Addr=%s to Addr=%s\n",argv[1],argv[2]); status=do_mem_mtest(cmdtp,flag,5,argv); printf("******************************\n"); if(status==MV_OK) { printf("DRAM Works!!\n"); g_testReport|= (0x01<<MAN_FUNC_ID_DRAM); } else printf("DRAM Failed!!\n"); return 1; }
int do_diag(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *orig_ethact, *orig_ipaddr, ca_ethact[20], ca_ipaddr[20]; int i; switch (argc) { case 2: if (strncmp(argv[1],"cpu-bist", 8) == 0) { octeon_bist(); return 0; } else if (strncmp(argv[1],"ddr", 3) == 0) { return do_mem_mtest(NULL, 0, 1, "mtest"); } else if (strncmp(argv[1],"pci", 3) == 0) { #define MAX_ADV_PCI_BUS 13 char *local_args[4], busno[4]; int pci_busno; local_args[0] = "pci"; local_args[1] = busno; local_args[2] = "short"; local_args[3] = NULL; for (pci_busno = 0; pci_busno < MAX_ADV_PCI_BUS; pci_busno++) { sprintf (busno, "%x", pci_busno); do_pci(NULL, 0, 3, local_args); } return 0; } else if (strncmp(argv[1],"mmc-sensor", 10) == 0) { #define MON_3VSB_ID "0x02" #define MON_12V_ID "0x03" #define VDD_3V3_ID "0x06" #define TMP421_CORE_ID "0x0B" #define TMP275_BOARD_ID "0x0C" #define MON_3VSB(x) (0.016*x) #define MON_12V(x) ((68*x-5)*0.001) #define VDD_3V3(x) (0.016*x) #define TMP421_CORE(x) (x) #define TMP275_BOARD(x) (1.01*x+0.14) #define COMMAND_SUCCESS_OFFSET 6 #define VALUE_OFFSET (COMMAND_SUCCESS_OFFSET + 1) #define VALID_READ_OFFSET (COMMAND_SUCCESS_OFFSET + 2) #define INVALID_READ_MASK 0x20 const uchar *ret_val; char *argv[]={"ipmi", "raw", "0x04", "0x2D", "0x00"}; char *ids[]={MON_3VSB_ID, MON_12V_ID, VDD_3V3_ID, TMP421_CORE_ID, TMP275_BOARD_ID}; char *ids_name[]={"3.3V standby", "12V", "3.3V", "Core temperature", "Board temperature"}; int total_ids, argc, i, tmp; float fRet; total_ids = sizeof(ids) / sizeof(ids[0]); argc = sizeof(argv) / sizeof(argv[0]); for (i = 0; i < total_ids; i++) { sprintf(argv[argc-1], ids[i]); // replace the sensor ID to read ret_val = mmc_raw_command_access(argc, argv); if (ret_val[COMMAND_SUCCESS_OFFSET]) // 0 = success { printf("!FAIL IPMI Get %s return code 0x%02x\n", ids_name[i], ret_val[6]); continue; } if (ret_val[VALID_READ_OFFSET] & INVALID_READ_MASK) // bit 5: when set, this read is invalid { printf("%s: %s\n", ids_name[i], "Read failed!"); } else { switch (i) { case 0: fRet = MON_3VSB(ret_val[VALUE_OFFSET]); break; case 1: fRet = MON_12V(ret_val[VALUE_OFFSET]); break; case 2: fRet = VDD_3V3(ret_val[VALUE_OFFSET]); break; case 3: fRet = TMP421_CORE(ret_val[VALUE_OFFSET]); break; case 4: fRet = TMP275_BOARD(ret_val[VALUE_OFFSET]); break; default: printf("unkown to calculate\n"); break; } /* float to string, only 3 digits after '.'; Note: printf does not support float */ { tmp = fRet; printf("%s: %d.", ids_name[i], tmp); fRet -= tmp; fRet *= 1000; tmp = fRet; printf("%d\n", tmp); } } } return 0; } else if (strncmp(argv[1],"reset-type", 10) == 0) { uint8_t cause; mmc_get_hw_reset_reason(&cause); printf("reset-type: "); switch (cause) { case 0x1: printf("hard reset"); break; case 0x2: printf("soft reset"); break; case 0x4: printf("watchdog reset"); break; default: printf("unknown 0x%02x",cause); break; } printf("\n"); return 0; } else if (strncmp(argv[1],"i2c", 3) == 0) { char cmd[255], *subcmd[]={"speed", "dev", "probe"}; for (i = 0; i < sizeof(subcmd)/sizeof(subcmd[0]); i++) { sprintf(cmd, "i2c %s", subcmd[i]); run_command(cmd, 0); } return 0; } else if (strncmp(argv[1],"xaui", 4) == 0) { #define XAUI_INTERFACES 2 #define TEST_IP "192.168.4.1" int default_port[] = {2624, 3136}; /* save original env vars */ orig_ethact = getenv("ethact"); sprintf(ca_ethact, orig_ethact); // save to safety place orig_ipaddr = getenv("ipaddr"); sprintf(ca_ipaddr, orig_ipaddr); /* start to test */ setenv("ipaddr", TEST_IP); NetPingIP = string_to_ip(TEST_IP); // ping our self for (i = 0; i < XAUI_INTERFACES; i++) { char *new_ethact = "octeth "; sprintf(new_ethact, "octeth%d", i); setenv("ethact", new_ethact); /* enabling internal loopback */ if (cvmx_helper_configure_loopback(default_port[i], 1, 0)) { printf("enable %s loopback failed!\n", new_ethact); continue; } if (NetLoop(PING) < 0) { printf("%s loopback transmission failed!\n", new_ethact); } else { printf("%s loopback transmission test pass.\n", new_ethact); } /* disable loopback */ if (cvmx_helper_configure_loopback(default_port[i], 0, 0)) printf("disable %s loopback failed!\n", new_ethact); } /* restore env vars */ setenv("ethact", ca_ethact); setenv("ipaddr", orig_ipaddr ? ca_ipaddr : orig_ipaddr); return 0; } else if (strncmp(argv[1],"mii", 3) == 0) { int rc = 0; /* save original env vars */ orig_ethact = getenv("ethact"); sprintf(ca_ethact, orig_ethact); orig_ipaddr = getenv("ipaddr"); sprintf(ca_ipaddr, orig_ipaddr); /* enabling internal loopback */ run_command("mii write 0 0 6100", 0); /* start to test */ setenv("ethact", "octmgmt0"); setenv("ipaddr", TEST_IP); NetPingIP = string_to_ip(TEST_IP); // ping our self if (NetLoop(PING) < 0) { if (NetLoop(PING) < 0) // give another chance, the octmgmt0 may failed on first try rc = -1; } if (rc < 0) { printf("octmgmt0 loopback transmission failed!\n"); } else { printf("octmgmt0 loopback transmission test pass.\n"); } /* disable loopback */ run_command("mii write 0 0 2100", 0); /* restore env vars */ setenv("ethact", ca_ethact); setenv("ipaddr", orig_ipaddr ? ca_ipaddr : orig_ipaddr); return 0; } break; } return cmd_usage(cmdtp); }