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