//-----------------------------------------------------------------------------
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;
}
示例#2
0
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);
}