3 * See file CREDITS for list of people who contributed to this
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of
9 * the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
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
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
24 #include <asm/processor.h>
25 #include <spd_sdram.h>
27 DECLARE_GLOBAL_DATA_PTR;
29 extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
31 int board_early_init_f(void)
35 /*--------------------------------------------------------------------
36 * Setup the external bus controller/chip selects
37 *-------------------------------------------------------------------*/
38 mtdcr(ebccfga, xbcfg);
40 mtdcr(ebccfgd, reg | 0x04000000); /* Set ATC */
42 mtebc(pb0ap, 0x03017300); /* FLASH/SRAM */
43 mtebc(pb0cr, 0xfc0da000); /* BAS=0xfc0 64MB r/w 16-bit */
45 mtebc(pb1ap, 0x00000000);
46 mtebc(pb1cr, 0x00000000);
48 mtebc(pb2ap, 0x04814500);
49 /*CPLD*/ mtebc(pb2cr, 0x80018000); /*BAS=0x800 1MB r/w 8-bit */
51 mtebc(pb3ap, 0x00000000);
52 mtebc(pb3cr, 0x00000000);
54 mtebc(pb4ap, 0x00000000);
55 mtebc(pb4cr, 0x00000000);
57 mtebc(pb5ap, 0x00000000);
58 mtebc(pb5cr, 0x00000000);
60 /*--------------------------------------------------------------------
62 *-------------------------------------------------------------------*/
64 /*setup Address lines for flash size 64Meg. */
65 out32(GPIO0_OSRL, in32(GPIO0_OSRL) | 0x50010000);
66 out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x50010000);
67 out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x50000000);
70 out32(GPIO0_TCR, in32(GPIO0_TCR) | 0xC080);
71 out32(GPIO0_TSRL, in32(GPIO0_TSRL) | 0x40);
72 out32(GPIO0_ISR1L, in32(GPIO0_ISR1L) | 0x55);
73 out32(GPIO0_OSRH, in32(GPIO0_OSRH) | 0x50004000);
74 out32(GPIO0_ISR1H, in32(GPIO0_ISR1H) | 0x00440000);
77 out32(GPIO1_TCR, in32(GPIO1_TCR) | 0x02000000);
78 out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x00080000);
79 out32(GPIO1_ISR2L, in32(GPIO1_ISR2L) | 0x00010000);
81 /* external interrupts IRQ0...3 */
82 out32(GPIO1_TCR, in32(GPIO1_TCR) & ~0x00f00000);
83 out32(GPIO1_TSRL, in32(GPIO1_TSRL) & ~0x0000ff00);
84 out32(GPIO1_ISR1L, in32(GPIO1_ISR1L) | 0x00005500);
88 out32(GPIO1_TCR, in32(GPIO1_TCR) | 0xc0000000);
89 out32(GPIO1_OSRL, in32(GPIO1_OSRL) | 0x50000000);
90 out32(GPIO0_TCR, in32(GPIO0_TCR) | 0xf);
91 out32(GPIO0_OSRH, in32(GPIO0_OSRH) | 0xaa);
92 out32(GPIO0_ISR2H, in32(GPIO0_ISR2H) | 0x00000500);
95 /*--------------------------------------------------------------------
96 * Setup the interrupt controller polarities, triggers, etc.
97 *-------------------------------------------------------------------*/
98 mtdcr(uic0sr, 0xffffffff); /* clear all */
99 mtdcr(uic0er, 0x00000000); /* disable all */
100 mtdcr(uic0cr, 0x00000009); /* ATI & UIC1 crit are critical */
101 mtdcr(uic0pr, 0xfffffe13); /* per ref-board manual */
102 mtdcr(uic0tr, 0x01c00008); /* per ref-board manual */
103 mtdcr(uic0vr, 0x00000001); /* int31 highest, base=0x000 */
104 mtdcr(uic0sr, 0xffffffff); /* clear all */
106 mtdcr(uic1sr, 0xffffffff); /* clear all */
107 mtdcr(uic1er, 0x00000000); /* disable all */
108 mtdcr(uic1cr, 0x00000000); /* all non-critical */
109 mtdcr(uic1pr, 0xffffe0ff); /* per ref-board manual */
110 mtdcr(uic1tr, 0x00ffc000); /* per ref-board manual */
111 mtdcr(uic1vr, 0x00000001); /* int31 highest, base=0x000 */
112 mtdcr(uic1sr, 0xffffffff); /* clear all */
114 /*--------------------------------------------------------------------
115 * Setup other serial configuration
116 *-------------------------------------------------------------------*/
117 mfsdr(sdr_pci0, reg);
118 mtsdr(sdr_pci0, 0x80000000 | reg); /* PCI arbiter enabled */
119 mtsdr(sdr_pfc0, 0x00003e00); /* Pin function */
120 mtsdr(sdr_pfc1, 0x00048000); /* Pin function: UART0 has 4 pins */
122 /*clear tmrclk divisor */
123 *(unsigned char *)(CFG_BCSR_BASE | 0x04) = 0x00;
126 *(unsigned char *)(CFG_BCSR_BASE | 0x08) = 0xf0;
128 #if 0 /* test-only */
129 /*enable usb 1.1 fs device and remove usb 2.0 reset */
130 *(unsigned char *)(CFG_BCSR_BASE | 0x09) = 0x00;
133 /*get rid of flash write protect */
134 *(unsigned char *)(CFG_BCSR_BASE | 0x07) = 0x00;
139 int misc_init_r (void)
144 /* Re-do sizing to get full correct info */
145 mtdcr(ebccfga, pb0cr);
146 pbcr = mfdcr(ebccfgd);
147 switch (gd->bd->bi_flashsize) {
173 pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
174 mtdcr(ebccfga, pb0cr);
175 mtdcr(ebccfgd, pbcr);
177 /* adjust flash start and offset */
178 gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
179 gd->bd->bi_flashoffset = 0;
181 /* Monitor protection ON by default */
182 (void)flash_protect(FLAG_PROTECT_SET,
192 char *s = getenv("serial#");
194 printf("Board: Yellowstone - AMCC PPC440GR Evaluation Board");
204 /*************************************************************************
205 * sdram_init -- doesn't use serial presence detect.
207 * Assumes: 256 MB, ECC, non-registered
210 ************************************************************************/
214 void sdram_tr1_set(int ram_address, int* tr1_value)
218 volatile unsigned int* ram_pointer = (unsigned int*)ram_address;
219 int first_good = -1, last_bad = 0x1ff;
221 unsigned long test[NUM_TRIES] = {
222 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
223 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF,
224 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
225 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000,
226 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
227 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555,
228 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
229 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA,
230 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
231 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A,
232 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
233 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5,
234 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
235 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA,
236 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55,
237 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55 };
239 /* go through all possible SDRAM0_TR1[RDCT] values */
240 for (i=0; i<=0x1ff; i++) {
241 /* set the current value for TR1 */
242 mtsdram(mem_tr1, (0x80800800 | i));
245 for (j=0; j<NUM_TRIES; j++) {
246 ram_pointer[j] = test[j];
248 /* clear any cache at ram location */
249 __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
252 /* read values back */
253 for (j=0; j<NUM_TRIES; j++) {
254 for (k=0; k<NUM_READS; k++) {
255 /* clear any cache at ram location */
256 __asm__("dcbf 0,%0": :"r" (&ram_pointer[j]));
258 if (ram_pointer[j] != test[j])
263 if (k != NUM_READS) {
268 /* we have a SDRAM0_TR1[RDCT] that is part of the window */
269 if (j == NUM_TRIES) {
270 if (first_good == -1)
271 first_good = i; /* found beginning of window */
272 } else { /* bad read */
273 /* if we have not had a good read then don't care */
274 if(first_good != -1) {
275 /* first failure after a good read */
282 /* return the current value for TR1 */
283 *tr1_value = (first_good + last_bad) / 2;
286 void sdram_init(void)
289 int tr1_bank1, tr1_bank2;
291 /*--------------------------------------------------------------------
293 *------------------------------------------------------------------*/
294 mtsdram(mem_uabba, 0x00000000); /* ubba=0 (default) */
295 mtsdram(mem_slio, 0x00000000); /* rdre=0 wrre=0 rarw=0 */
296 mtsdram(mem_devopt, 0x00000000); /* dll=0 ds=0 (normal) */
297 mtsdram(mem_clktr, 0x40000000); /* ?? */
298 mtsdram(mem_wddctr, 0x40000000); /* ?? */
300 /*clear this first, if the DDR is enabled by a debugger
301 then you can not make changes. */
302 mtsdram(mem_cfg0, 0x00000000); /* Disable EEC */
304 /*--------------------------------------------------------------------
305 * Setup for board-specific specific mem
306 *------------------------------------------------------------------*/
308 * Following for CAS Latency = 2.5 @ 133 MHz PLB
310 mtsdram(mem_b0cr, 0x000a4001); /* SDBA=0x000 128MB, Mode 3, enabled */
311 mtsdram(mem_b1cr, 0x080a4001); /* SDBA=0x080 128MB, Mode 3, enabled */
313 mtsdram(mem_tr0, 0x410a4012); /* ?? */
314 mtsdram(mem_rtr, 0x04080000); /* ?? */
315 mtsdram(mem_cfg1, 0x00000000); /* Self-refresh exit, disable PM */
316 mtsdram(mem_cfg0, 0x34000000); /* Disable EEC */
317 udelay(400); /* Delay 200 usecs (min) */
319 /*--------------------------------------------------------------------
320 * Enable the controller, then wait for DCEN to complete
321 *------------------------------------------------------------------*/
322 mtsdram(mem_cfg0, 0x84000000); /* Enable */
325 mfsdram(mem_mcsts, reg);
326 if (reg & 0x80000000)
330 sdram_tr1_set(0x00000000, &tr1_bank1);
331 sdram_tr1_set(0x08000000, &tr1_bank2);
332 mtsdram(mem_tr1, (((tr1_bank1+tr1_bank2)/2) | 0x80800800) );
335 /*************************************************************************
338 ************************************************************************/
339 long int initdram(int board)
342 return CFG_SDRAM_BANKS * (CFG_KBYTES_SDRAM * 1024); /* return bytes */
345 #if defined(CFG_DRAM_TEST)
348 unsigned long *mem = (unsigned long *)0;
349 const unsigned long kend = (1024 / sizeof(unsigned long));
354 for (k = 0; k < CFG_KBYTES_SDRAM;
355 ++k, mem += (1024 / sizeof(unsigned long))) {
356 if ((k & 1023) == 0) {
357 printf("%3d MB\r", k / 1024);
360 memset(mem, 0xaaaaaaaa, 1024);
361 for (n = 0; n < kend; ++n) {
362 if (mem[n] != 0xaaaaaaaa) {
363 printf("SDRAM test fails at: %08x\n",
369 memset(mem, 0x55555555, 1024);
370 for (n = 0; n < kend; ++n) {
371 if (mem[n] != 0x55555555) {
372 printf("SDRAM test fails at: %08x\n",
378 printf("SDRAM test passes\n");
383 /*************************************************************************
386 * This routine is called just prior to registering the hose and gives
387 * the board the opportunity to check things. Returning a value of zero
388 * indicates that things are bad & PCI initialization should be aborted.
390 * Different boards may wish to customize the pci controller structure
391 * (add regions, override default access routines, etc) or perform
392 * certain pre-initialization actions.
394 ************************************************************************/
395 #if defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT)
396 int pci_pre_init(struct pci_controller *hose)
400 /*-------------------------------------------------------------------------+
401 | Set priority for all PLB3 devices to 0.
402 | Set PLB3 arbiter to fair mode.
403 +-------------------------------------------------------------------------*/
404 mfsdr(sdr_amp1, addr);
405 mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
406 addr = mfdcr(plb3_acr);
407 mtdcr(plb3_acr, addr | 0x80000000);
409 /*-------------------------------------------------------------------------+
410 | Set priority for all PLB4 devices to 0.
411 +-------------------------------------------------------------------------*/
412 mfsdr(sdr_amp0, addr);
413 mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
414 addr = mfdcr(plb4_acr) | 0xa0000000; /* Was 0x8---- */
415 mtdcr(plb4_acr, addr);
417 /*-------------------------------------------------------------------------+
418 | Set Nebula PLB4 arbiter to fair mode.
419 +-------------------------------------------------------------------------*/
421 addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
422 addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
423 addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
424 addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
425 mtdcr(plb0_acr, addr);
428 addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
429 addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
430 addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
431 addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
432 mtdcr(plb1_acr, addr);
436 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_PRE_INIT) */
438 /*************************************************************************
441 * The bootstrap configuration provides default settings for the pci
442 * inbound map (PIM). But the bootstrap config choices are limited and
443 * may not be sufficient for a given board.
445 ************************************************************************/
446 #if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
447 void pci_target_init(struct pci_controller *hose)
449 /*--------------------------------------------------------------------------+
450 * Set up Direct MMIO registers
451 *--------------------------------------------------------------------------*/
452 /*--------------------------------------------------------------------------+
453 | PowerPC440 EP PCI Master configuration.
454 | Map one 1Gig range of PLB/processor addresses to PCI memory space.
455 | PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
456 | Use byte reversed out routines to handle endianess.
457 | Make this region non-prefetchable.
458 +--------------------------------------------------------------------------*/
459 out32r(PCIX0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
460 out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE); /* PMM0 Local Address */
461 out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
462 out32r(PCIX0_PMM0PCIHA, 0x00000000); /* PMM0 PCI High Address */
463 out32r(PCIX0_PMM0MA, 0xE0000001); /* 512M + No prefetching, and enable region */
465 out32r(PCIX0_PMM1MA, 0x00000000); /* PMM0 Mask/Attribute - disabled b4 setting */
466 out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
467 out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
468 out32r(PCIX0_PMM1PCIHA, 0x00000000); /* PMM0 PCI High Address */
469 out32r(PCIX0_PMM1MA, 0xE0000001); /* 512M + No prefetching, and enable region */
471 out32r(PCIX0_PTM1MS, 0x00000001); /* Memory Size/Attribute */
472 out32r(PCIX0_PTM1LA, 0); /* Local Addr. Reg */
473 out32r(PCIX0_PTM2MS, 0); /* Memory Size/Attribute */
474 out32r(PCIX0_PTM2LA, 0); /* Local Addr. Reg */
476 /*--------------------------------------------------------------------------+
477 * Set up Configuration registers
478 *--------------------------------------------------------------------------*/
480 /* Program the board's subsystem id/vendor id */
481 pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
482 CFG_PCI_SUBSYS_VENDORID);
483 pci_write_config_word(0, PCI_SUBSYSTEM_ID, CFG_PCI_SUBSYS_ID);
485 /* Configure command register as bus master */
486 pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
488 /* 240nS PCI clock */
489 pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
491 /* No error reporting */
492 pci_write_config_word(0, PCI_ERREN, 0);
494 pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
497 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
499 /*************************************************************************
502 ************************************************************************/
503 #if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
504 void pci_master_init(struct pci_controller *hose)
506 unsigned short temp_short;
508 /*--------------------------------------------------------------------------+
509 | Write the PowerPC440 EP PCI Configuration regs.
510 | Enable PowerPC440 EP to be a master on the PCI bus (PMM).
511 | Enable PowerPC440 EP to act as a PCI memory target (PTM).
512 +--------------------------------------------------------------------------*/
513 pci_read_config_word(0, PCI_COMMAND, &temp_short);
514 pci_write_config_word(0, PCI_COMMAND,
515 temp_short | PCI_COMMAND_MASTER |
518 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
520 /*************************************************************************
523 * This routine is called to determine if a pci scan should be
524 * performed. With various hardware environments (especially cPCI and
525 * PPMC) it's insufficient to depend on the state of the arbiter enable
526 * bit in the strap register, or generic host/adapter assumptions.
528 * Rather than hard-code a bad assumption in the general 440 code, the
529 * 440 pci code requires the board to decide at runtime.
531 * Return 0 for adapter mode, non-zero for host (monarch) mode.
534 ************************************************************************/
535 #if defined(CONFIG_PCI)
536 int is_pci_host(struct pci_controller *hose)
538 /* Bamboo is always configured as host. */
541 #endif /* defined(CONFIG_PCI) */
543 /*************************************************************************
546 * This routine is called to reset (keep alive) the watchdog timer
548 ************************************************************************/
549 #if defined(CONFIG_HW_WATCHDOG)
550 void hw_watchdog_reset(void)