Blame view
board/spd8xx/spd8xx.c
7.22 KB
f8cac651b Initial revision |
1 2 3 4 5 |
/* * (C) Copyright 2000 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * Ulrich Lutz, Speech Design GmbH, ulutz@datalab.de. * |
1a4596601 Add GPL-2.0+ SPDX... |
6 |
* SPDX-License-Identifier: GPL-2.0+ |
f8cac651b Initial revision |
7 8 9 10 11 12 13 14 15 16 17 18 19 |
*/ #include <common.h> #include <mpc8xx.h> #include <commproc.h> /* ------------------------------------------------------------------------- */ static long int dram_size (long int, long int *, long int); /* ------------------------------------------------------------------------- */ #define _NOT_USED_ 0xFFFFFFFF |
c83bf6a2d Add a common get_... |
20 |
const uint sharc_table[] = { |
f8cac651b Initial revision |
21 22 23 24 |
/* * Single Read. (Offset 0 in UPM RAM) */ 0x0FF3FC04, 0x0FF3EC00, 0x7FFFEC04, 0xFFFFEC04, |
c83bf6a2d Add a common get_... |
25 26 |
0xFFFFEC05, /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, |
f8cac651b Initial revision |
27 28 29 30 31 32 33 34 35 36 37 38 |
/* * Burst Read. (Offset 8 in UPM RAM) */ /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Single Write. (Offset 18 in UPM RAM) */ 0x0FAFFC04, 0x0FAFEC00, 0x7FFFEC04, 0xFFFFEC04, |
c83bf6a2d Add a common get_... |
39 40 |
0xFFFFEC05, /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, |
f8cac651b Initial revision |
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
/* * Burst Write. (Offset 20 in UPM RAM) */ /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Refresh (Offset 30 in UPM RAM) */ /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Exception. (Offset 3c in UPM RAM) */ |
c83bf6a2d Add a common get_... |
59 60 |
0x7FFFFC07, /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, |
f8cac651b Initial revision |
61 |
}; |
c83bf6a2d Add a common get_... |
62 |
const uint sdram_table[] = { |
f8cac651b Initial revision |
63 64 65 66 |
/* * Single Read. (Offset 0 in UPM RAM) */ 0x1F07FC04, 0xEEAEFC04, 0x11ADFC04, 0xEFBBBC00, |
c83bf6a2d Add a common get_... |
67 |
0x1FF77C47, /* last */ |
f8cac651b Initial revision |
68 69 70 |
/* * SDRAM Initialization (offset 5 in UPM RAM) * |
8bde7f776 * Code cleanup: |
71 72 73 |
* This is no UPM entry point. The following definition uses * the remaining space to establish an initialization * sequence, which is executed by a RUN command. |
f8cac651b Initial revision |
74 75 |
* */ |
c83bf6a2d Add a common get_... |
76 |
0x1FF77C35, 0xEFEABC34, 0x1FB57C35, /* last */ |
f8cac651b Initial revision |
77 78 79 80 |
/* * Burst Read. (Offset 8 in UPM RAM) */ 0x1F07FC04, 0xEEAEFC04, 0x10ADFC04, 0xF0AFFC00, |
c83bf6a2d Add a common get_... |
81 |
0xF0AFFC00, 0xF1AFFC00, 0xEFBBBC00, 0x1FF77C47, /* last */ |
f8cac651b Initial revision |
82 83 84 85 86 |
_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Single Write. (Offset 18 in UPM RAM) */ |
c83bf6a2d Add a common get_... |
87 |
0x1F27FC04, 0xEEAEBC00, 0x01B93C04, 0x1FF77C47, /* last */ |
f8cac651b Initial revision |
88 89 90 91 92 |
_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Burst Write. (Offset 20 in UPM RAM) */ 0x1F07FC04, 0xEEAEBC00, 0x10AD7C00, 0xF0AFFC00, |
c83bf6a2d Add a common get_... |
93 94 |
0xF0AFFC00, 0xE1BBBC04, 0x1FF77C47, /* last */ _NOT_USED_, |
f8cac651b Initial revision |
95 96 97 98 99 100 |
_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Refresh (Offset 30 in UPM RAM) */ 0x1FF5FC84, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04, |
c83bf6a2d Add a common get_... |
101 102 |
0xFFFFFC84, 0xFFFFFC07, /* last */ _NOT_USED_, _NOT_USED_, |
f8cac651b Initial revision |
103 104 105 106 |
_NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_, /* * Exception. (Offset 3c in UPM RAM) */ |
c83bf6a2d Add a common get_... |
107 108 |
0x7FFFFC07, /* last */ _NOT_USED_, _NOT_USED_, _NOT_USED_, |
f8cac651b Initial revision |
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
}; /* ------------------------------------------------------------------------- */ /* * Check Board Identity: * */ int checkboard (void) { puts ("Board: SPD823TS "); return (0); } /* ------------------------------------------------------------------------- */ |
9973e3c61 Change initdram()... |
127 |
phys_size_t initdram (int board_type) |
f8cac651b Initial revision |
128 |
{ |
6d0f6bcf3 rename CFG_ macro... |
129 |
volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; |
c83bf6a2d Add a common get_... |
130 131 |
volatile memctl8xx_t *memctl = &immap->im_memctl; long int size_b0; |
f8cac651b Initial revision |
132 133 |
#if 0 |
c83bf6a2d Add a common get_... |
134 135 136 |
/* * Map controller bank 2 to the SRAM bank at preliminary address. */ |
6d0f6bcf3 rename CFG_ macro... |
137 138 |
memctl->memc_or2 = CONFIG_SYS_OR2; memctl->memc_br2 = CONFIG_SYS_BR2; |
f8cac651b Initial revision |
139 |
#endif |
c83bf6a2d Add a common get_... |
140 141 142 |
/* * Map controller bank 4 to the PER8 bank. */ |
6d0f6bcf3 rename CFG_ macro... |
143 144 |
memctl->memc_or4 = CONFIG_SYS_OR4; memctl->memc_br4 = CONFIG_SYS_BR4; |
f8cac651b Initial revision |
145 146 |
#if 0 |
c83bf6a2d Add a common get_... |
147 148 149 150 |
/* Configure SHARC at UMA */ upmconfig (UPMA, (uint *) sharc_table, sizeof (sharc_table) / sizeof (uint)); /* Map controller bank 5 to the SHARC */ |
6d0f6bcf3 rename CFG_ macro... |
151 152 |
memctl->memc_or5 = CONFIG_SYS_OR5; memctl->memc_br5 = CONFIG_SYS_BR5; |
f8cac651b Initial revision |
153 |
#endif |
c83bf6a2d Add a common get_... |
154 |
memctl->memc_mamr = 0x00001000; |
f8cac651b Initial revision |
155 |
|
c83bf6a2d Add a common get_... |
156 157 158 |
/* Configure SDRAM at UMB */ upmconfig (UPMB, (uint *) sdram_table, sizeof (sdram_table) / sizeof (uint)); |
f8cac651b Initial revision |
159 |
|
6d0f6bcf3 rename CFG_ macro... |
160 |
memctl->memc_mptpr = CONFIG_SYS_MPTPR_1BK_8K; |
f8cac651b Initial revision |
161 |
|
c83bf6a2d Add a common get_... |
162 |
memctl->memc_mar = 0x00000088; |
f8cac651b Initial revision |
163 |
|
c83bf6a2d Add a common get_... |
164 165 166 |
/* * Map controller bank 3 to the SDRAM bank at preliminary address. */ |
6d0f6bcf3 rename CFG_ macro... |
167 168 |
memctl->memc_or3 = CONFIG_SYS_OR3_PRELIM; memctl->memc_br3 = CONFIG_SYS_BR3_PRELIM; |
f8cac651b Initial revision |
169 |
|
6d0f6bcf3 rename CFG_ macro... |
170 |
memctl->memc_mbmr = CONFIG_SYS_MBMR_8COL; /* refresh not enabled yet */ |
f8cac651b Initial revision |
171 |
|
c83bf6a2d Add a common get_... |
172 173 174 175 176 177 178 179 |
udelay (200); memctl->memc_mcr = 0x80806105; udelay (1); memctl->memc_mcr = 0x80806130; udelay (1); memctl->memc_mcr = 0x80806130; udelay (1); memctl->memc_mcr = 0x80806106; |
f8cac651b Initial revision |
180 |
|
c83bf6a2d Add a common get_... |
181 |
memctl->memc_mbmr |= MBMR_PTBE; /* refresh enabled */ |
f8cac651b Initial revision |
182 |
|
c83bf6a2d Add a common get_... |
183 184 185 186 |
/* * Check Bank 0 Memory Size for re-configuration */ size_b0 = |
6d0f6bcf3 rename CFG_ macro... |
187 |
dram_size (CONFIG_SYS_MBMR_8COL, SDRAM_BASE3_PRELIM, |
c83bf6a2d Add a common get_... |
188 |
SDRAM_MAX_SIZE); |
f8cac651b Initial revision |
189 |
|
6d0f6bcf3 rename CFG_ macro... |
190 |
memctl->memc_mbmr = CONFIG_SYS_MBMR_8COL | MBMR_PTBE; |
f8cac651b Initial revision |
191 |
|
c83bf6a2d Add a common get_... |
192 |
return (size_b0); |
f8cac651b Initial revision |
193 194 195 196 197 198 199 200 201 202 203 |
} /* ------------------------------------------------------------------------- */ /* * Check memory range for valid RAM. A simple memory test determines * the actually available RAM size between addresses `base' and * `base + maxsize'. Some (not all) hardware errors are detected: * - short between address lines * - short between data lines */ |
c83bf6a2d Add a common get_... |
204 205 |
static long int dram_size (long int mamr_value, long int *base, long int maxsize) |
f8cac651b Initial revision |
206 |
{ |
6d0f6bcf3 rename CFG_ macro... |
207 |
volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; |
c83bf6a2d Add a common get_... |
208 |
volatile memctl8xx_t *memctl = &immap->im_memctl; |
f8cac651b Initial revision |
209 |
|
c83bf6a2d Add a common get_... |
210 |
memctl->memc_mbmr = mamr_value; |
f8cac651b Initial revision |
211 |
|
c83bf6a2d Add a common get_... |
212 |
return (get_ram_size (base, maxsize)); |
f8cac651b Initial revision |
213 214 215 |
} /* ------------------------------------------------------------------------- */ |
c83bf6a2d Add a common get_... |
216 |
void reset_phy (void) |
f8cac651b Initial revision |
217 |
{ |
6d0f6bcf3 rename CFG_ macro... |
218 |
immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
f8cac651b Initial revision |
219 220 221 222 |
ushort sreg; /* Configure extra port pins for NS DP83843 PHY */ immr->im_ioport.iop_papar &= ~(PA_ENET_MDC | PA_ENET_MDIO); |
c83bf6a2d Add a common get_... |
223 224 |
sreg = immr->im_ioport.iop_padir; sreg |= PA_ENET_MDC; /* Mgmt. Data Clock is Output */ |
f8cac651b Initial revision |
225 226 227 228 229 230 |
sreg &= ~(PA_ENET_MDIO); /* Mgmt. Data I/O is bidirect. => Input */ immr->im_ioport.iop_padir = sreg; immr->im_ioport.iop_padat &= ~(PA_ENET_MDC); /* set MDC = 0 */ /* |
8bde7f776 * Code cleanup: |
231 232 |
* RESET in implemented by a positive pulse of at least 1 us * at the reset pin. |
f8cac651b Initial revision |
233 234 235 236 |
* * Configure RESET pins for NS DP83843 PHY, and RESET chip. * * Note: The RESET pin is high active, but there is an |
c83bf6a2d Add a common get_... |
237 |
* inverter on the SPD823TS board... |
f8cac651b Initial revision |
238 239 |
*/ immr->im_ioport.iop_pcpar &= ~(PC_ENET_RESET); |
c83bf6a2d Add a common get_... |
240 |
immr->im_ioport.iop_pcdir |= PC_ENET_RESET; |
f8cac651b Initial revision |
241 242 243 244 |
/* assert RESET signal of PHY */ immr->im_ioport.iop_pcdat &= ~(PC_ENET_RESET); udelay (10); /* de-assert RESET signal of PHY */ |
c83bf6a2d Add a common get_... |
245 |
immr->im_ioport.iop_pcdat |= PC_ENET_RESET; |
f8cac651b Initial revision |
246 247 248 249 |
udelay (10); } /* ------------------------------------------------------------------------- */ |
c83bf6a2d Add a common get_... |
250 |
void ide_set_reset (int on) |
f8cac651b Initial revision |
251 |
{ |
6d0f6bcf3 rename CFG_ macro... |
252 |
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
f8cac651b Initial revision |
253 254 255 256 257 |
/* * Configure PC for IDE Reset Pin */ if (on) { /* assert RESET */ |
6d0f6bcf3 rename CFG_ macro... |
258 |
immr->im_ioport.iop_pcdat &= ~(CONFIG_SYS_PC_IDE_RESET); |
f8cac651b Initial revision |
259 |
} else { /* release RESET */ |
6d0f6bcf3 rename CFG_ macro... |
260 |
immr->im_ioport.iop_pcdat |= CONFIG_SYS_PC_IDE_RESET; |
f8cac651b Initial revision |
261 262 263 |
} /* program port pin as GPIO output */ |
6d0f6bcf3 rename CFG_ macro... |
264 265 266 |
immr->im_ioport.iop_pcpar &= ~(CONFIG_SYS_PC_IDE_RESET); immr->im_ioport.iop_pcso &= ~(CONFIG_SYS_PC_IDE_RESET); immr->im_ioport.iop_pcdir |= CONFIG_SYS_PC_IDE_RESET; |
f8cac651b Initial revision |
267 268 269 |
} /* ------------------------------------------------------------------------- */ |