Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: internal.c

Issue 6731011: Add Tegra2 SPI controller. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/flashrom.git@master
Patch Set: refine comments Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * This file is part of the flashrom project. 2 * This file is part of the flashrom project.
3 * 3 *
4 * Copyright (C) 2009 Carl-Daniel Hailfinger 4 * Copyright (C) 2009 Carl-Daniel Hailfinger
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or 8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version. 9 * (at your option) any later version.
10 * 10 *
11 * This program is distributed in the hope that it will be useful, 11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details. 14 * GNU General Public License for more details.
15 * 15 *
16 * You should have received a copy of the GNU General Public License 16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software 17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */ 19 */
20 20
21 #include <stdio.h>
21 #include <string.h> 22 #include <string.h>
22 #include <stdlib.h> 23 #include <stdlib.h>
24 #include <stdarg.h>
25
23 #include "flash.h" 26 #include "flash.h"
24 #include "programmer.h" 27 #include "programmer.h"
25 28
26 #if NEED_PCI == 1 29 #if NEED_PCI == 1
27 struct pci_dev *pci_dev_find_filter(struct pci_filter filter) 30 struct pci_dev *pci_dev_find_filter(struct pci_filter filter)
28 { 31 {
29 struct pci_dev *temp; 32 struct pci_dev *temp;
30 33
31 for (temp = pacc->devices; temp; temp = temp->next) 34 for (temp = pacc->devices; temp; temp = temp->next)
32 if (pci_filter_match(&filter, temp)) 35 if (pci_filter_match(&filter, temp))
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 /* Winbond Super I/O code is not yet available. */ 112 /* Winbond Super I/O code is not yet available. */
110 if (superio.vendor == SUPERIO_VENDOR_NONE) 113 if (superio.vendor == SUPERIO_VENDOR_NONE)
111 superio = probe_superio_winbond(); 114 superio = probe_superio_winbond();
112 #endif 115 #endif
113 } 116 }
114 #endif 117 #endif
115 118
116 int is_laptop = 0; 119 int is_laptop = 0;
117 enum chipbustype target_bus; 120 enum chipbustype target_bus;
118 121
122 #if defined(__i386__) || defined(__x86_64__)
123 #define BUFSIZE 256
124 static char buffer[BUFSIZE];
125
126 static void
127 pci_error(char *msg, ...)
128 {
129 va_list args;
130
131 va_start(args, msg);
132 vsnprintf(buffer, BUFSIZE, msg, args);
133 va_end(args);
134
135 msg_perr("pcilib: %s\n", buffer);
136
137 /* libpci requires us to exit. TODO cleanup? */
138 exit(1);
139 }
140
141 static void
142 pci_warning(char *msg, ...)
143 {
144 va_list args;
145
146 va_start(args, msg);
147 vsnprintf(buffer, BUFSIZE, msg, args);
148 va_end(args);
149
150 msg_pinfo("pcilib: %s\n", buffer);
151 }
152
153 static void
154 pci_debug(char *msg, ...)
155 {
156 va_list args;
157
158 va_start(args, msg);
159 vsnprintf(buffer, BUFSIZE, msg, args);
160 va_end(args);
161
162 msg_pdbg("pcilib: %s\n", buffer);
163 }
164 #endif
165
119 int internal_init(void) 166 int internal_init(void)
120 { 167 {
121 #if __FLASHROM_LITTLE_ENDIAN__ 168 #if __FLASHROM_LITTLE_ENDIAN__
122 int ret = 0; 169 int ret = 0;
123 #endif 170 #endif
124 int force_laptop = 0; 171 int force_laptop = 0;
125 char *arg; 172 char *arg;
126 int probe_target_bus_later = 0; 173 int probe_target_bus_later = 0;
127 174
128 arg = extract_programmer_param("boardenable"); 175 arg = extract_programmer_param("boardenable");
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 } 233 }
187 234
188 free(arg); 235 free(arg);
189 } else { 236 } else {
190 /* The pacc must be initialized before access pci devices. */ 237 /* The pacc must be initialized before access pci devices. */
191 probe_target_bus_later = 1; 238 probe_target_bus_later = 1;
192 } 239 }
193 240
194 get_io_perms(); 241 get_io_perms();
195 242
243 #if defined(__i386__) || defined(__x86_64__)
196 /* Initialize PCI access for flash enables */ 244 /* Initialize PCI access for flash enables */
197 pacc = pci_alloc(); /* Get the pci_access structure */ 245 pacc = pci_alloc(); /* Get the pci_access structure */
246 pacc->error = pci_error;
247 pacc->warning = pci_warning;
248 pacc->debug = pci_debug;
249
198 /* Set all options you want -- here we stick with the defaults */ 250 /* Set all options you want -- here we stick with the defaults */
199 pci_init(pacc); /* Initialize the PCI library */ 251 pci_init(pacc); /* Initialize the PCI library */
200 pci_scan_bus(pacc); /* We want to get the list of devices */ 252 pci_scan_bus(pacc); /* We want to get the list of devices */
253 #endif
Stefan Reinauer 2011/03/25 16:57:47 everything up to here in internal.c should be drop
Louis 2011/03/29 07:55:02 Done.
201 254
202 if (processor_flash_enable()) { 255 if (processor_flash_enable()) {
203 msg_perr("Processor detection/init failed.\n" 256 msg_perr("Processor detection/init failed.\n"
204 "Aborting.\n"); 257 "Aborting.\n");
205 return 1; 258 return 1;
206 } 259 }
207 260
208 #if defined(__i386__) || defined(__x86_64__) 261 #if defined(__i386__) || defined(__x86_64__)
209 /* We look at the cbtable first to see if we need a 262 /* We look at the cbtable first to see if we need a
210 * mainboard specific flash enable sequence. 263 * mainboard specific flash enable sequence.
211 */ 264 */
212 coreboot_init(); 265 coreboot_init();
213 266
214 dmi_init(); 267 dmi_init();
215 268
216 if (probe_target_bus_later) { 269 if (probe_target_bus_later) {
217 /* read the target bus value from register. */ 270 /* read the target bus value from register. */
218 if (get_target_bus_from_chipset(&target_bus)) { 271 if (get_target_bus_from_chipset(&target_bus)) {
219 msg_perr("Cannot get target bus from %s programmer.\n", 272 msg_perr("Cannot get target bus from %s programmer.\n",
220 programmer_table[programmer].name); 273 programmer_table[programmer].name);
221 return 1; 274 return 1;
222 } 275 }
223 } 276 }
224 277
225 /* Probe for the Super I/O chip and fill global struct superio. */ 278 /* Probe for the Super I/O chip and fill global struct superio. */
226 probe_superio(); 279 probe_superio();
280
281 #elif defined(__arm__)
282 /* We look at the cbtable first to see if we need a
283 * mainboard specific flash enable sequence.
284 */
285 coreboot_init();
286
227 #else 287 #else
228 /* FIXME: Enable cbtable searching on all non-x86 platforms supported 288 /* FIXME: Enable cbtable searching on all non-x86 platforms supported
229 * by coreboot. 289 * by coreboot.
230 * FIXME: Find a replacement for DMI on non-x86. 290 * FIXME: Find a replacement for DMI on non-x86.
231 * FIXME: Enable Super I/O probing once port I/O is possible. 291 * FIXME: Enable Super I/O probing once port I/O is possible.
232 */ 292 */
233 #endif 293 #endif
234 294
235 /* Warn if a laptop is detected. */ 295 /* Warn if a laptop is detected. */
236 if (is_laptop) { 296 if (is_laptop) {
(...skipping 12 matching lines...) Expand all
249 if (force_laptop) { 309 if (force_laptop) {
250 msg_perr("Proceeding anyway because user specified " 310 msg_perr("Proceeding anyway because user specified "
251 "laptop=force_I_want_a_brick\n"); 311 "laptop=force_I_want_a_brick\n");
252 } else { 312 } else {
253 msg_perr("Aborting.\n"); 313 msg_perr("Aborting.\n");
254 exit(1); 314 exit(1);
255 } 315 }
256 } 316 }
257 317
258 #if __FLASHROM_LITTLE_ENDIAN__ 318 #if __FLASHROM_LITTLE_ENDIAN__
319
320 #if defined(__i386__) || defined(__x86_64__)
259 /* try to enable it. Failure IS an option, since not all motherboards 321 /* try to enable it. Failure IS an option, since not all motherboards
260 * really need this to be done, etc., etc. 322 * really need this to be done, etc., etc.
261 */ 323 */
262 ret = chipset_flash_enable(); 324 ret = chipset_flash_enable();
263 if (ret == -2) { 325 if (ret == -2) {
264 msg_perr("WARNING: No chipset found. Flash detection " 326 msg_perr("WARNING: No chipset found. Flash detection "
265 "will most likely fail.\n"); 327 "will most likely fail.\n");
266 } 328 }
329 #endif
267 330
268 #if defined(__i386__) || defined(__x86_64__) 331 #if defined(__i386__) || defined(__x86_64__)
269 /* Probe unconditionally for IT87* LPC->SPI translation and for 332 /* Probe unconditionally for IT87* LPC->SPI translation and for
270 * IT87* Parallel write enable. 333 * IT87* Parallel write enable.
271 */ 334 */
272 init_superio_ite(); 335 init_superio_ite();
273 336
274 /* probe for programmers that bridge LPC <--> SPI */ 337 /* probe for programmers that bridge LPC <--> SPI */
275 if (target_bus == CHIP_BUSTYPE_LPC || 338 if (target_bus == CHIP_BUSTYPE_LPC ||
276 target_bus == CHIP_BUSTYPE_FWH) { 339 target_bus == CHIP_BUSTYPE_FWH) {
277 it85xx_probe_spi_flash(NULL); 340 it85xx_probe_spi_flash(NULL);
278 wpce775x_probe_spi_flash(NULL); 341 wpce775x_probe_spi_flash(NULL);
279 mec1308_probe_spi_flash(NULL); 342 mec1308_probe_spi_flash(NULL);
280 } 343 }
281 344
282 #endif 345 #endif
283 346
347 #if defined(__i386__) || defined(__x86_64__)
348 msg_perr("Board_flash_enable\n");
349
284 board_flash_enable(lb_vendor, lb_part); 350 board_flash_enable(lb_vendor, lb_part);
351 #endif
285 352
286 /* Even if chipset init returns an error code, we don't want to abort. 353 /* Even if chipset init returns an error code, we don't want to abort.
287 * The error code might have been a warning only. 354 * The error code might have been a warning only.
288 * Besides that, we don't check the board enable return code either. 355 * Besides that, we don't check the board enable return code either.
289 */ 356 */
290 #if defined(__i386__) || defined(__x86_64__) || defined (__mips) 357 #if defined(__i386__) || defined(__x86_64__) || defined (__mips) || \
358 defined(__arm__)
291 return 0; 359 return 0;
292 #else 360 #else
293 msg_perr("Your platform is not supported yet for the internal " 361 msg_perr("Your platform is not supported yet for the internal "
294 "programmer due to missing\n" 362 "programmer due to missing\n"
295 "flash_base and top/bottom alignment information.\n" 363 "flash_base and top/bottom alignment information.\n"
296 "Aborting.\n"); 364 "Aborting.\n");
297 return 1; 365 return 1;
298 #endif 366 #endif
299 #else 367 #else
300 /* FIXME: Remove this unconditional abort once all PCI drivers are 368 /* FIXME: Remove this unconditional abort once all PCI drivers are
(...skipping 13 matching lines...) Expand all
314 release_io_perms(); 382 release_io_perms();
315 383
316 #if defined(__i386__) || defined(__x86_64__) 384 #if defined(__i386__) || defined(__x86_64__)
317 if (target_bus == CHIP_BUSTYPE_LPC || 385 if (target_bus == CHIP_BUSTYPE_LPC ||
318 target_bus == CHIP_BUSTYPE_FWH) { 386 target_bus == CHIP_BUSTYPE_FWH) {
319 it85xx_shutdown(); 387 it85xx_shutdown();
320 wpce775x_shutdown(); 388 wpce775x_shutdown();
321 mec1308_shutdown(); 389 mec1308_shutdown();
322 } 390 }
323 #endif 391 #endif
324 392 #if defined(__arm__)
393 » if (spi_controller == SPI_CONTROLLER_TEGRA2)
394 » » tegra2_spi_shutdown();
395 #endif
325 return 0; 396 return 0;
326 } 397 }
327 #endif 398 #endif
328 399
329 void internal_chip_writeb(uint8_t val, chipaddr addr) 400 void internal_chip_writeb(uint8_t val, chipaddr addr)
330 { 401 {
331 mmio_writeb(val, (void *) addr); 402 mmio_writeb(val, (void *) addr);
332 } 403 }
333 404
334 void internal_chip_writew(uint16_t val, chipaddr addr) 405 void internal_chip_writew(uint16_t val, chipaddr addr)
(...skipping 19 matching lines...) Expand all
354 uint32_t internal_chip_readl(const chipaddr addr) 425 uint32_t internal_chip_readl(const chipaddr addr)
355 { 426 {
356 return mmio_readl((void *) addr); 427 return mmio_readl((void *) addr);
357 } 428 }
358 429
359 void internal_chip_readn(uint8_t *buf, const chipaddr addr, size_t len) 430 void internal_chip_readn(uint8_t *buf, const chipaddr addr, size_t len)
360 { 431 {
361 memcpy(buf, (void *)addr, len); 432 memcpy(buf, (void *)addr, len);
362 return; 433 return;
363 } 434 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698