]>
Commit | Line | Data |
---|---|---|
43d9616c WD |
1 | /* |
2 | * (C) Copyright 2002 | |
3 | * Robert Schwebel, Pengutronix, r.schwebel@pengutronix.de | |
4 | * Kyle Harris, Nexus Technologies, Inc., kharris@nexus-tech.net | |
5 | * Marius Groeger, Sysgo Real-Time Solutions GmbH, mgroeger@sysgo.de | |
6 | * | |
7 | * See file CREDITS for list of people who contributed to this | |
8 | * project. | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or | |
11 | * modify it under the terms of the GNU General Public License as | |
12 | * published by the Free Software Foundation; either version 2 of | |
13 | * the License, or (at your option) any later version. | |
14 | * | |
15 | * This program is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | * GNU General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License | |
21 | * along with this program; if not, write to the Free Software | |
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
23 | * MA 02111-1307 USA | |
24 | */ | |
25 | ||
26 | #include <common.h> | |
27 | #include <asm/arch/pxa-regs.h> | |
47cd00fa | 28 | #include <asm/mach-types.h> |
43d9616c WD |
29 | |
30 | #ifdef CONFIG_SHOW_BOOT_PROGRESS | |
31 | # define SHOW_BOOT_PROGRESS(arg) show_boot_progress(arg) | |
32 | #else | |
33 | # define SHOW_BOOT_PROGRESS(arg) | |
34 | #endif | |
35 | ||
47cd00fa WD |
36 | /** |
37 | * i2c_init_board - reset i2c bus. When the board is powercycled during a | |
38 | * bus transfer it might hang; for details see doc/I2C_Edge_Conditions. | |
39 | * The Innokom board has GPIO70 connected to SCLK which can be toggled | |
40 | * until all chips think that their current cycles are finished. | |
43d9616c | 41 | */ |
47cd00fa WD |
42 | int i2c_init_board(void) |
43 | { | |
44 | int i; | |
45 | ||
46 | /* set gpio pin to output */ | |
47 | GPDR(70) |= GPIO_bit(70); | |
48 | for (i = 0; i < 11; i++) { | |
49 | GPCR(70) = GPIO_bit(70); | |
50 | udelay(10); | |
51 | GPSR(70) = GPIO_bit(70); | |
52 | udelay(10); | |
53 | } | |
54 | /* set gpio pin to input */ | |
55 | GPDR(70) &= ~GPIO_bit(70); | |
56 | ||
57 | return 0; | |
58 | } | |
59 | ||
60 | ||
61 | /** | |
62 | * misc_init_r: - misc initialisation routines | |
63 | */ | |
64 | ||
65 | int misc_init_r(void) | |
66 | { | |
67 | uchar *str; | |
68 | ||
69 | /* determine if the software update key is pressed during startup */ | |
70 | if (GPLR0 & 0x00000800) { | |
71 | printf("using bootcmd_normal (sw-update button not pressed)\n"); | |
72 | str = getenv("bootcmd_normal"); | |
73 | } else { | |
74 | printf("using bootcmd_update (sw-update button pressed)\n"); | |
75 | str = getenv("bootcmd_update"); | |
76 | } | |
77 | ||
78 | setenv("bootcmd",str); | |
79 | ||
80 | return 0; | |
81 | } | |
43d9616c WD |
82 | |
83 | ||
84 | /** | |
85 | * board_init: - setup some data structures | |
86 | * | |
87 | * @return: 0 in case of success | |
88 | */ | |
89 | ||
90 | int board_init (void) | |
91 | { | |
92 | DECLARE_GLOBAL_DATA_PTR; | |
93 | ||
94 | /* memory and cpu-speed are setup before relocation */ | |
95 | /* so we do _nothing_ here */ | |
96 | ||
97 | /* arch number of Innokom board */ | |
47cd00fa | 98 | gd->bd->bi_arch_number = MACH_TYPE_INNOKOM; |
43d9616c WD |
99 | |
100 | /* adress of boot parameters */ | |
101 | gd->bd->bi_boot_params = 0xa0000100; | |
102 | ||
103 | return 0; | |
104 | } | |
105 | ||
106 | ||
107 | /** | |
108 | * dram_init: - setup dynamic RAM | |
109 | * | |
110 | * @return: 0 in case of success | |
111 | */ | |
112 | ||
113 | int dram_init (void) | |
114 | { | |
115 | DECLARE_GLOBAL_DATA_PTR; | |
116 | ||
117 | gd->bd->bi_dram[0].start = PHYS_SDRAM_1; | |
118 | gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; | |
119 | ||
120 | return 0; | |
121 | } | |
122 | ||
123 | ||
124 | /** | |
125 | * innokom_set_led: - switch LEDs on or off | |
126 | * | |
127 | * @param led: LED to switch (0,1,2) | |
128 | * @param state: switch on (1) or off (0) | |
129 | */ | |
130 | ||
131 | void innokom_set_led(int led, int state) | |
132 | { | |
133 | switch(led) { | |
134 | /* | |
135 | case 0: if (state==1) { | |
136 | GPCR0 |= CSB226_USER_LED0; | |
137 | } else if (state==0) { | |
138 | GPSR0 |= CSB226_USER_LED0; | |
139 | } | |
140 | break; | |
141 | ||
142 | case 1: if (state==1) { | |
143 | GPCR0 |= CSB226_USER_LED1; | |
144 | } else if (state==0) { | |
145 | GPSR0 |= CSB226_USER_LED1; | |
146 | } | |
147 | break; | |
148 | ||
149 | case 2: if (state==1) { | |
150 | GPCR0 |= CSB226_USER_LED2; | |
151 | } else if (state==0) { | |
152 | GPSR0 |= CSB226_USER_LED2; | |
153 | } | |
154 | break; | |
155 | */ | |
156 | } | |
157 | ||
158 | return; | |
159 | } | |
160 | ||
161 | ||
162 | /** | |
163 | * show_boot_progress: - indicate state of the boot process | |
164 | * | |
165 | * @param status: Status number - see README for details. | |
166 | * | |
167 | * The CSB226 does only have 3 LEDs, so we switch them on at the most | |
168 | * important states (1, 5, 15). | |
169 | */ | |
170 | ||
171 | void show_boot_progress (int status) | |
172 | { | |
173 | switch(status) { | |
174 | /* | |
175 | case 1: csb226_set_led(0,1); break; | |
176 | case 5: csb226_set_led(1,1); break; | |
177 | case 15: csb226_set_led(2,1); break; | |
178 | */ | |
179 | } | |
180 | ||
181 | return; | |
182 | } | |
183 |