1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <common.h>
25#include <asm/processor.h>
26#include <asm/io.h>
27#include <command.h>
28#include <malloc.h>
29#include <sja1000.h>
30
31DECLARE_GLOBAL_DATA_PTR;
32
33extern void lxt971_no_sleep(void);
34
35
36
37
38
39void init_coupler(u32 addr)
40{
41 struct sja1000_basic_s *ctrl = (struct sja1000_basic_s *)addr;
42
43
44 out_8(&ctrl->cr, CR_RR);
45
46
47 out_8(&ctrl->btr0, 0x00);
48 out_8(&ctrl->btr1, 0x14);
49 out_8(&ctrl->oc, OC_TP1 | OC_TN1 | OC_POL1 |
50 OC_TP0 | OC_TN0 | OC_POL0 | OC_MODE1);
51 out_8(&ctrl->cr, 0x00);
52
53
54 in_8(&ctrl->cr);
55 in_8(&ctrl->cr);
56 in_8(&ctrl->cr);
57 in_8(&ctrl->cr);
58
59
60 out_8(&ctrl->cr, CR_RR);
61}
62
63int board_early_init_f (void)
64{
65
66
67
68
69
70
71
72
73
74
75
76
77 mtdcr(UIC0SR, 0xFFFFFFFF);
78 mtdcr(UIC0ER, 0x00000000);
79 mtdcr(UIC0CR, 0x00000000);
80 mtdcr(UIC0PR, 0xFFFFFF80);
81 mtdcr(UIC0TR, 0x10000000);
82 mtdcr(UIC0VCR, 0x00000001);
83 mtdcr(UIC0SR, 0xFFFFFFFF);
84
85
86
87
88 mtebc (EBC0_CFG, 0xa8400000);
89
90
91
92
93 out_be32((void *)GPIO0_OR,
94 in_be32((void *)GPIO0_OR) & ~(0x80000000 >> 12));
95 udelay(1000);
96 out_be32((void *)GPIO0_OR,
97 in_be32((void *)GPIO0_OR) | (0x80000000 >> 12));
98 udelay(1000);
99
100 return 0;
101}
102
103int misc_init_r (void)
104{
105
106 gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
107 gd->bd->bi_flashoffset = 0;
108
109
110
111
112 if (!getenv("noinitcoupler"))
113 init_coupler(CAN_BA);
114
115 return (0);
116}
117
118
119
120
121int checkboard (void)
122{
123 char str[64];
124 int i = getenv_f("serial#", str, sizeof(str));
125 int flashcnt;
126 int delay;
127 u8 *led_reg = (u8 *)(CAN_BA + 0x1000);
128
129 puts ("Board: ");
130
131 if (i == -1) {
132 puts ("### No HW ID - assuming VOM405");
133 } else {
134 puts(str);
135 }
136
137 printf(" (PLD-Version=%02d)\n", in_8(led_reg));
138
139
140
141
142 for (flashcnt = 0; flashcnt < 3; flashcnt++) {
143 out_8(led_reg, 0x40);
144 for (delay = 0; delay < 100; delay++)
145 udelay(1000);
146 out_8(led_reg, 0x47);
147 for (delay = 0; delay < 50; delay++)
148 udelay(1000);
149 }
150 out_8(led_reg, 0x40);
151
152 return 0;
153}
154
155void reset_phy(void)
156{
157#ifdef CONFIG_LXT971_NO_SLEEP
158
159
160
161
162 lxt971_no_sleep();
163#endif
164}
165