Home | History | Annotate | Download | only in sh7785lcr
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Copyright (C) 2008 Yoshihiro Shimoda <shimoda.yoshihiro (at) renesas.com>
      4  */
      5 
      6 #include <common.h>
      7 #include <console.h>
      8 #include <asm/io.h>
      9 #include <asm/processor.h>
     10 #include <asm/pci.h>
     11 
     12 #if defined(CONFIG_CPU_32BIT)
     13 #define NOCACHE_OFFSET		0x00000000
     14 #else
     15 #define NOCACHE_OFFSET		0xa0000000
     16 #endif
     17 #define PLD_LEDCR		(0x04000008 + NOCACHE_OFFSET)
     18 #define PLD_SWSR		(0x0400000a + NOCACHE_OFFSET)
     19 #define PLD_VERSR		(0x0400000c + NOCACHE_OFFSET)
     20 
     21 #define SM107_DEVICEID		(0x13e00060 + NOCACHE_OFFSET)
     22 
     23 static void test_pld(void)
     24 {
     25 	printf("PLD version = %04x\n", readb(PLD_VERSR));
     26 }
     27 
     28 static void test_sm107(void)
     29 {
     30 	printf("SM107 device ID = %04x\n", readl(SM107_DEVICEID));
     31 }
     32 
     33 static void test_led(void)
     34 {
     35 	printf("turn on LEDs 3, 5, 7, 9\n");
     36 	writeb(0x55, PLD_LEDCR);
     37 	mdelay(2000);
     38 	printf("turn on LEDs 4, 6, 8, 10\n");
     39 	writeb(0xaa, PLD_LEDCR);
     40 	mdelay(2000);
     41 	writeb(0x00, PLD_LEDCR);
     42 }
     43 
     44 static void test_dipsw(void)
     45 {
     46 	printf("Please DIPSW set = B'0101\n");
     47 	while (readb(PLD_SWSR) != 0x05) {
     48 		if (ctrlc())
     49 			return;
     50 	}
     51 	printf("Please DIPSW set = B'1010\n");
     52 	while (readb(PLD_SWSR) != 0x0A) {
     53 		if (ctrlc())
     54 			return;
     55 	}
     56 	printf("DIPSW OK\n");
     57 }
     58 
     59 static void test_net(void)
     60 {
     61 	unsigned long data;
     62 
     63 	writel(0x80000000, 0xfe0401c0);
     64 	data = readl(0xfe040220);
     65 	if (data == 0x816910ec)
     66 		printf("Ethernet OK\n");
     67 	else
     68 		printf("Ethernet NG, data = %08x\n", (unsigned int)data);
     69 }
     70 
     71 static void test_sata(void)
     72 {
     73 	unsigned long data;
     74 
     75 	writel(0x80000800, 0xfe0401c0);
     76 	data = readl(0xfe040220);
     77 	if (data == 0x35121095)
     78 		printf("SATA OK\n");
     79 	else
     80 		printf("SATA NG, data = %08x\n", (unsigned int)data);
     81 }
     82 
     83 static void test_pci(void)
     84 {
     85 	writel(0x80001800, 0xfe0401c0);
     86 	printf("PCI CN1 ID = %08x\n", readl(0xfe040220));
     87 
     88 	writel(0x80001000, 0xfe0401c0);
     89 	printf("PCI CN2 ID = %08x\n", readl(0xfe040220));
     90 }
     91 
     92 int do_hw_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
     93 {
     94 	char *cmd;
     95 
     96 	if (argc != 2)
     97 		return cmd_usage(cmdtp);
     98 
     99 	cmd = argv[1];
    100 	switch (cmd[0]) {
    101 	case 'a':	/* all */
    102 		test_pld();
    103 		test_led();
    104 		test_dipsw();
    105 		test_sm107();
    106 		test_net();
    107 		test_sata();
    108 		test_pci();
    109 		break;
    110 	case 'p':	/* pld or pci */
    111 		if (cmd[1] == 'l')
    112 			test_pld();
    113 		else
    114 			test_pci();
    115 		break;
    116 	case 'l':	/* led */
    117 		test_led();
    118 		break;
    119 	case 'd':	/* dipsw */
    120 		test_dipsw();
    121 		break;
    122 	case 's':	/* sm107 or sata */
    123 		if (cmd[1] == 'm')
    124 			test_sm107();
    125 		else
    126 			test_sata();
    127 		break;
    128 	case 'n':	/* net */
    129 		test_net();
    130 		break;
    131 	default:
    132 		return cmd_usage(cmdtp);
    133 	}
    134 
    135 	return 0;
    136 }
    137 
    138 U_BOOT_CMD(
    139 	hwtest,	2,	1,	do_hw_test,
    140 	"hardware test for R0P7785LC0011RL board",
    141 	"\n"
    142 	"hwtest all   - test all hardware\n"
    143 	"hwtest pld   - output PLD version\n"
    144 	"hwtest led   - turn on LEDs\n"
    145 	"hwtest dipsw - test DIP switch\n"
    146 	"hwtest sm107 - output SM107 version\n"
    147 	"hwtest net   - check RTL8110 ID\n"
    148 	"hwtest sata  - check SiI3512 ID\n"
    149 	"hwtest pci   - output PCI slot device ID"
    150 );
    151