]> git.ipfire.org Git - people/ms/u-boot.git/blob - board/sacsng/sacsng.c
536d7de0e04497dbd3efecccf10783e9503dcf28
[people/ms/u-boot.git] / board / sacsng / sacsng.c
1 /*
2 * (C) Copyright 2002
3 * Custom IDEAS, Inc. <www.cideas.com>
4 * Gerald Van Baren <vanbaren@cideas.com>
5 *
6 * See file CREDITS for list of people who contributed to this
7 * project.
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of
12 * the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
22 * MA 02111-1307 USA
23 */
24
25 #include <common.h>
26 #include <asm/u-boot.h>
27 #include <ioports.h>
28 #include <mpc8260.h>
29 #include <i2c.h>
30 #include <spi.h>
31 #include <command.h>
32
33 #ifdef CONFIG_SHOW_BOOT_PROGRESS
34 #include <status_led.h>
35 #endif
36
37 #ifdef CONFIG_ETHER_LOOPBACK_TEST
38 extern void eth_loopback_test(void);
39 #endif /* CONFIG_ETHER_LOOPBACK_TEST */
40
41 #include "clkinit.h"
42 #include "ioconfig.h" /* I/O configuration table */
43
44 /*
45 * PBI Page Based Interleaving
46 * PSDMR_PBI page based interleaving
47 * 0 bank based interleaving
48 * External Address Multiplexing (EAMUX) adds a clock to address cycles
49 * (this can help with marginal board layouts)
50 * PSDMR_EAMUX adds a clock
51 * 0 no extra clock
52 * Buffer Command (BUFCMD) adds a clock to command cycles.
53 * PSDMR_BUFCMD adds a clock
54 * 0 no extra clock
55 */
56 #define CONFIG_PBI PSDMR_PBI
57 #define PESSIMISTIC_SDRAM 0
58 #define EAMUX 0 /* EST requires EAMUX */
59 #define BUFCMD 0
60
61 /*
62 * ADC/DAC Defines:
63 */
64 #define INITIAL_SAMPLE_RATE 10016 /* Initial Daq sample rate */
65 #define INITIAL_RIGHT_JUST 0 /* Initial DAC right justification */
66 #define INITIAL_MCLK_DIVIDE 0 /* Initial MCLK Divide */
67 #define INITIAL_SAMPLE_64X 1 /* Initial 64x clocking mode */
68 #define INITIAL_SAMPLE_128X 0 /* Initial 128x clocking mode */
69
70 /*
71 * ADC Defines:
72 */
73 #define I2C_ADC_1_ADDR 0x0E /* I2C Address of the ADC #1 */
74 #define I2C_ADC_2_ADDR 0x0F /* I2C Address of the ADC #2 */
75
76 #define ADC_SDATA1_MASK 0x00020000 /* PA14 - CH12SDATA_PU */
77 #define ADC_SDATA2_MASK 0x00010000 /* PA15 - CH34SDATA_PU */
78
79 #define ADC_VREF_CAP 100 /* VREF capacitor in uF */
80 #define ADC_INITIAL_DELAY (10 * ADC_VREF_CAP) /* 10 usec per uF, in usec */
81 #define ADC_SDATA_DELAY 100 /* ADC SDATA release delay in usec */
82 #define ADC_CAL_DELAY (1000000 / INITIAL_SAMPLE_RATE * 4500)
83 /* Wait at least 4100 LRCLK's */
84
85 #define ADC_REG1_FRAME_START 0x80 /* Frame start */
86 #define ADC_REG1_GROUND_CAL 0x40 /* Ground calibration enable */
87 #define ADC_REG1_ANA_MOD_PDOWN 0x20 /* Analog modulator section in power down */
88 #define ADC_REG1_DIG_MOD_PDOWN 0x10 /* Digital modulator section in power down */
89
90 #define ADC_REG2_128x 0x80 /* Oversample at 128x */
91 #define ADC_REG2_CAL 0x40 /* System calibration enable */
92 #define ADC_REG2_CHANGE_SIGN 0x20 /* Change sign enable */
93 #define ADC_REG2_LR_DISABLE 0x10 /* Left/Right output disable */
94 #define ADC_REG2_HIGH_PASS_DIS 0x08 /* High pass filter disable */
95 #define ADC_REG2_SLAVE_MODE 0x04 /* Slave mode */
96 #define ADC_REG2_DFS 0x02 /* Digital format select */
97 #define ADC_REG2_MUTE 0x01 /* Mute */
98
99 #define ADC_REG7_ADDR_ENABLE 0x80 /* Address enable */
100 #define ADC_REG7_PEAK_ENABLE 0x40 /* Peak enable */
101 #define ADC_REG7_PEAK_UPDATE 0x20 /* Peak update */
102 #define ADC_REG7_PEAK_FORMAT 0x10 /* Peak display format */
103 #define ADC_REG7_DIG_FILT_PDOWN 0x04 /* Digital filter power down enable */
104 #define ADC_REG7_FIR2_IN_EN 0x02 /* External FIR2 input enable */
105 #define ADC_REG7_PSYCHO_EN 0x01 /* External pyscho filter input enable */
106
107 /*
108 * DAC Defines:
109 */
110
111 #define I2C_DAC_ADDR 0x11 /* I2C Address of the DAC */
112
113 #define DAC_RST_MASK 0x00008000 /* PA16 - DAC_RST* */
114 #define DAC_RESET_DELAY 100 /* DAC reset delay in usec */
115 #define DAC_INITIAL_DELAY 5000 /* DAC initialization delay in usec */
116
117 #define DAC_REG1_AMUTE 0x80 /* Auto-mute */
118
119 #define DAC_REG1_LEFT_JUST_24_BIT (0 << 4) /* Fmt 0: Left justified 24 bit */
120 #define DAC_REG1_I2S_24_BIT (1 << 4) /* Fmt 1: I2S up to 24 bit */
121 #define DAC_REG1_RIGHT_JUST_16BIT (2 << 4) /* Fmt 2: Right justified 16 bit */
122 #define DAC_REG1_RIGHT_JUST_24BIT (3 << 4) /* Fmt 3: Right justified 24 bit */
123 #define DAC_REG1_RIGHT_JUST_20BIT (4 << 4) /* Fmt 4: Right justified 20 bit */
124 #define DAC_REG1_RIGHT_JUST_18BIT (5 << 4) /* Fmt 5: Right justified 18 bit */
125
126 #define DAC_REG1_DEM_NO (0 << 2) /* No De-emphasis */
127 #define DAC_REG1_DEM_44KHZ (1 << 2) /* 44.1KHz De-emphasis */
128 #define DAC_REG1_DEM_48KHZ (2 << 2) /* 48KHz De-emphasis */
129 #define DAC_REG1_DEM_32KHZ (3 << 2) /* 32KHz De-emphasis */
130
131 #define DAC_REG1_SINGLE 0 /* 4- 50KHz sample rate */
132 #define DAC_REG1_DOUBLE 1 /* 50-100KHz sample rate */
133 #define DAC_REG1_QUAD 2 /* 100-200KHz sample rate */
134 #define DAC_REG1_DSD 3 /* Direct Stream Data, DSD */
135
136 #define DAC_REG5_INVERT_A 0x80 /* Invert channel A */
137 #define DAC_REG5_INVERT_B 0x40 /* Invert channel B */
138 #define DAC_REG5_I2C_MODE 0x20 /* Control port (I2C) mode */
139 #define DAC_REG5_POWER_DOWN 0x10 /* Power down mode */
140 #define DAC_REG5_MUTEC_A_B 0x08 /* Mutec A=B */
141 #define DAC_REG5_FREEZE 0x04 /* Freeze */
142 #define DAC_REG5_MCLK_DIV 0x02 /* MCLK divide by 2 */
143 #define DAC_REG5_RESERVED 0x01 /* Reserved */
144
145 /*
146 * Check Board Identity:
147 */
148
149 int checkboard(void)
150 {
151 printf("SACSng\n");
152
153 return 0;
154 }
155
156 phys_size_t initdram(int board_type)
157 {
158 volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR;
159 volatile memctl8260_t *memctl = &immap->im_memctl;
160 volatile uchar c = 0;
161 volatile uchar *ramaddr = (uchar *)(CONFIG_SYS_SDRAM_BASE + 0x8);
162 uint psdmr = CONFIG_SYS_PSDMR;
163 int i;
164 uint psrt = 14; /* for no SPD */
165 uint chipselects = 1; /* for no SPD */
166 uint sdram_size = CONFIG_SYS_SDRAM0_SIZE * 1024 * 1024; /* for no SPD */
167 uint or = CONFIG_SYS_OR2_PRELIM; /* for no SPD */
168
169 #ifdef SDRAM_SPD_ADDR
170 uint data_width;
171 uint rows;
172 uint banks;
173 uint cols;
174 uint caslatency;
175 uint width;
176 uint rowst;
177 uint sdam;
178 uint bsma;
179 uint sda10;
180 u_char data;
181 u_char cksum;
182 int j;
183 #endif
184
185 #ifdef SDRAM_SPD_ADDR
186 /* Keep the compiler from complaining about potentially uninitialized vars */
187 data_width = chipselects = rows = banks = cols = caslatency = psrt =
188 0;
189
190 /*
191 * Read the SDRAM SPD EEPROM via I2C.
192 */
193 i2c_read(SDRAM_SPD_ADDR, 0, 1, &data, 1);
194 cksum = data;
195 for (j = 1; j < 64; j++) { /* read only the checksummed bytes */
196 /* note: the I2C address autoincrements when alen == 0 */
197 i2c_read(SDRAM_SPD_ADDR, 0, 0, &data, 1);
198 if (j == 5)
199 chipselects = data & 0x0F;
200 else if (j == 6)
201 data_width = data;
202 else if (j == 7)
203 data_width |= data << 8;
204 else if (j == 3)
205 rows = data & 0x0F;
206 else if (j == 4)
207 cols = data & 0x0F;
208 else if (j == 12) {
209 /*
210 * Refresh rate: this assumes the prescaler is set to
211 * approximately 1uSec per tick.
212 */
213 switch (data & 0x7F) {
214 default:
215 case 0:
216 psrt = 14; /* 15.625uS */
217 break;
218 case 1:
219 psrt = 2; /* 3.9uS */
220 break;
221 case 2:
222 psrt = 6; /* 7.8uS */
223 break;
224 case 3:
225 psrt = 29; /* 31.3uS */
226 break;
227 case 4:
228 psrt = 60; /* 62.5uS */
229 break;
230 case 5:
231 psrt = 120; /* 125uS */
232 break;
233 }
234 } else if (j == 17)
235 banks = data;
236 else if (j == 18) {
237 caslatency = 3; /* default CL */
238 #if(PESSIMISTIC_SDRAM)
239 if ((data & 0x04) != 0)
240 caslatency = 3;
241 else if ((data & 0x02) != 0)
242 caslatency = 2;
243 else if ((data & 0x01) != 0)
244 caslatency = 1;
245 #else
246 if ((data & 0x01) != 0)
247 caslatency = 1;
248 else if ((data & 0x02) != 0)
249 caslatency = 2;
250 else if ((data & 0x04) != 0)
251 caslatency = 3;
252 #endif
253 else {
254 printf("WARNING: Unknown CAS latency 0x%02X, using 3\n", data);
255 }
256 } else if (j == 63) {
257 if (data != cksum) {
258 printf("WARNING: Configuration data checksum failure:" " is 0x%02x, calculated 0x%02x\n", data, cksum);
259 }
260 }
261 cksum += data;
262 }
263
264 /* We don't trust CL less than 2 (only saw it on an old 16MByte DIMM) */
265 if (caslatency < 2) {
266 printf("WARNING: CL was %d, forcing to 2\n", caslatency);
267 caslatency = 2;
268 }
269 if (rows > 14) {
270 printf("WARNING: This doesn't look good, rows = %d, should be <= 14\n",
271 rows);
272 rows = 14;
273 }
274 if (cols > 11) {
275 printf("WARNING: This doesn't look good, columns = %d, should be <= 11\n",
276 cols);
277 cols = 11;
278 }
279
280 if ((data_width != 64) && (data_width != 72)) {
281 printf("WARNING: SDRAM width unsupported, is %d, expected 64 or 72.\n",
282 data_width);
283 }
284 width = 3; /* 2^3 = 8 bytes = 64 bits wide */
285 /*
286 * Convert banks into log2(banks)
287 */
288 if (banks == 2)
289 banks = 1;
290 else if (banks == 4)
291 banks = 2;
292 else if (banks == 8)
293 banks = 3;
294
295 sdram_size = 1 << (rows + cols + banks + width);
296
297 #if(CONFIG_PBI == 0) /* bank-based interleaving */
298 rowst = ((32 - 6) - (rows + cols + width)) * 2;
299 #else
300 rowst = 32 - (rows + banks + cols + width);
301 #endif
302
303 or = ~(sdram_size - 1) | /* SDAM address mask */
304 ((banks - 1) << 13) | /* banks per device */
305 (rowst << 9) | /* rowst */
306 ((rows - 9) << 6); /* numr */
307
308 memctl->memc_or2 = or;
309
310 /*
311 * SDAM specifies the number of columns that are multiplexed
312 * (reference AN2165/D), defined to be (columns - 6) for page
313 * interleave, (columns - 8) for bank interleave.
314 *
315 * BSMA is 14 - max(rows, cols). The bank select lines come
316 * into play above the highest "address" line going into the
317 * the SDRAM.
318 */
319 #if(CONFIG_PBI == 0) /* bank-based interleaving */
320 sdam = cols - 8;
321 bsma = ((31 - width) - 14) - ((rows > cols) ? rows : cols);
322 sda10 = sdam + 2;
323 #else
324 sdam = cols - 6;
325 bsma = ((31 - width) - 14) - ((rows > cols) ? rows : cols);
326 sda10 = sdam;
327 #endif
328 #if(PESSIMISTIC_SDRAM)
329 psdmr = (CONFIG_PBI | PSDMR_RFEN | PSDMR_RFRC_16_CLK |
330 PSDMR_PRETOACT_8W | PSDMR_ACTTORW_8W | PSDMR_WRC_4C |
331 PSDMR_EAMUX | PSDMR_BUFCMD) | caslatency |
332 ((caslatency - 1) << 6) | /* LDOTOPRE is CL - 1 */
333 (sdam << 24) | (bsma << 21) | (sda10 << 18);
334 #else
335 psdmr = (CONFIG_PBI | PSDMR_RFEN | PSDMR_RFRC_7_CLK |
336 PSDMR_PRETOACT_3W | /* 1 for 7E parts (fast PC-133) */
337 PSDMR_ACTTORW_2W | /* 1 for 7E parts (fast PC-133) */
338 PSDMR_WRC_1C | /* 1 clock + 7nSec */
339 EAMUX | BUFCMD) |
340 caslatency | ((caslatency - 1) << 6) | /* LDOTOPRE is CL - 1 */
341 (sdam << 24) | (bsma << 21) | (sda10 << 18);
342 #endif
343 #endif
344
345 /*
346 * Quote from 8260 UM (10.4.2 SDRAM Power-On Initialization, 10-35):
347 *
348 * "At system reset, initialization software must set up the
349 * programmable parameters in the memory controller banks registers
350 * (ORx, BRx, P/LSDMR). After all memory parameters are configured,
351 * system software should execute the following initialization sequence
352 * for each SDRAM device.
353 *
354 * 1. Issue a PRECHARGE-ALL-BANKS command
355 * 2. Issue eight CBR REFRESH commands
356 * 3. Issue a MODE-SET command to initialize the mode register
357 *
358 * Quote from Micron MT48LC8M16A2 data sheet:
359 *
360 * "...the SDRAM requires a 100uS delay prior to issuing any
361 * command other than a COMMAND INHIBIT or NOP. Starting at some
362 * point during this 100uS period and continuing at least through
363 * the end of this period, COMMAND INHIBIT or NOP commands should
364 * be applied."
365 *
366 * "Once the 100uS delay has been satisfied with at least one COMMAND
367 * INHIBIT or NOP command having been applied, a /PRECHARGE command/
368 * should be applied. All banks must then be precharged, thereby
369 * placing the device in the all banks idle state."
370 *
371 * "Once in the idle state, /two/ AUTO REFRESH cycles must be
372 * performed. After the AUTO REFRESH cycles are complete, the
373 * SDRAM is ready for mode register programming."
374 *
375 * (/emphasis/ mine, gvb)
376 *
377 * The way I interpret this, Micron start up sequence is:
378 * 1. Issue a PRECHARGE-BANK command (initial precharge)
379 * 2. Issue a PRECHARGE-ALL-BANKS command ("all banks ... precharged")
380 * 3. Issue two (presumably, doing eight is OK) CBR REFRESH commands
381 * 4. Issue a MODE-SET command to initialize the mode register
382 *
383 * --------
384 *
385 * The initial commands are executed by setting P/LSDMR[OP] and
386 * accessing the SDRAM with a single-byte transaction."
387 *
388 * The appropriate BRx/ORx registers have already been set when we
389 * get here. The SDRAM can be accessed at the address CONFIG_SYS_SDRAM_BASE.
390 */
391
392 memctl->memc_mptpr = CONFIG_SYS_MPTPR;
393 memctl->memc_psrt = psrt;
394
395 memctl->memc_psdmr = psdmr | PSDMR_OP_PREA;
396 *ramaddr = c;
397
398 memctl->memc_psdmr = psdmr | PSDMR_OP_CBRR;
399 for (i = 0; i < 8; i++)
400 *ramaddr = c;
401
402 memctl->memc_psdmr = psdmr | PSDMR_OP_MRW;
403 *ramaddr = c;
404
405 memctl->memc_psdmr = psdmr | PSDMR_OP_NORM | PSDMR_RFEN;
406 *ramaddr = c;
407
408 /*
409 * Do it a second time for the second set of chips if the DIMM has
410 * two chip selects (double sided).
411 */
412 if (chipselects > 1) {
413 ramaddr += sdram_size;
414
415 memctl->memc_br3 = CONFIG_SYS_BR3_PRELIM + sdram_size;
416 memctl->memc_or3 = or;
417
418 memctl->memc_psdmr = psdmr | PSDMR_OP_PREA;
419 *ramaddr = c;
420
421 memctl->memc_psdmr = psdmr | PSDMR_OP_CBRR;
422 for (i = 0; i < 8; i++)
423 *ramaddr = c;
424
425 memctl->memc_psdmr = psdmr | PSDMR_OP_MRW;
426 *ramaddr = c;
427
428 memctl->memc_psdmr = psdmr | PSDMR_OP_NORM | PSDMR_RFEN;
429 *ramaddr = c;
430 }
431
432 /* return total ram size */
433 return (sdram_size * chipselects);
434 }
435
436 /*-----------------------------------------------------------------------
437 * Board Control Functions
438 */
439 void board_poweroff(void)
440 {
441 while (1); /* hang forever */
442 }
443
444
445 #ifdef CONFIG_MISC_INIT_R
446 /* ------------------------------------------------------------------------- */
447 int misc_init_r(void)
448 {
449 /*
450 * Note: iop is used by the I2C macros, and iopa by the ADC/DAC initialization.
451 */
452 volatile ioport_t *iopa =
453 ioport_addr((immap_t *)CONFIG_SYS_IMMR, 0 /* port A */ );
454 volatile ioport_t *iop =
455 ioport_addr((immap_t *)CONFIG_SYS_IMMR, I2C_PORT);
456
457 int reg; /* I2C register value */
458 char *ep; /* Environment pointer */
459 char str_buf[12]; /* sprintf output buffer */
460 int sample_rate; /* ADC/DAC sample rate */
461 int sample_64x; /* Use 64/4 clocking for the ADC/DAC */
462 int sample_128x; /* Use 128/4 clocking for the ADC/DAC */
463 int right_just; /* Is the data to the DAC right justified? */
464 int mclk_divide; /* MCLK Divide */
465 int quiet; /* Quiet or minimal output mode */
466
467 quiet = 0;
468
469 if ((ep = getenv("quiet")) != NULL)
470 quiet = simple_strtol(ep, NULL, 10);
471 else
472 setenv("quiet", "0");
473
474 /*
475 * SACSng custom initialization:
476 * Start the ADC and DAC clocks, since the Crystal parts do not
477 * work on the I2C bus until the clocks are running.
478 */
479
480 sample_rate = INITIAL_SAMPLE_RATE;
481 if ((ep = getenv("DaqSampleRate")) != NULL)
482 sample_rate = simple_strtol(ep, NULL, 10);
483
484 sample_64x = INITIAL_SAMPLE_64X;
485 sample_128x = INITIAL_SAMPLE_128X;
486 if ((ep = getenv("Daq64xSampling")) != NULL) {
487 sample_64x = simple_strtol(ep, NULL, 10);
488 if (sample_64x)
489 sample_128x = 0;
490 else
491 sample_128x = 1;
492 } else {
493 if ((ep = getenv("Daq128xSampling")) != NULL) {
494 sample_128x = simple_strtol(ep, NULL, 10);
495 if (sample_128x)
496 sample_64x = 0;
497 else
498 sample_64x = 1;
499 }
500 }
501
502 /*
503 * Stop the clocks and wait for at least 1 LRCLK period
504 * to make sure the clocking has really stopped.
505 */
506 Daq_Stop_Clocks();
507 udelay((1000000 / sample_rate) * NUM_LRCLKS_TO_STABILIZE);
508
509 /*
510 * Initialize the clocks with the new rates
511 */
512 Daq_Init_Clocks(sample_rate, sample_64x);
513 sample_rate = Daq_Get_SampleRate();
514
515 /*
516 * Start the clocks and wait for at least 1 LRCLK period
517 * to make sure the clocking has become stable.
518 */
519 Daq_Start_Clocks(sample_rate);
520 udelay((1000000 / sample_rate) * NUM_LRCLKS_TO_STABILIZE);
521
522 sprintf(str_buf, "%d", sample_rate);
523 setenv("DaqSampleRate", str_buf);
524
525 if (sample_64x) {
526 setenv("Daq64xSampling", "1");
527 setenv("Daq128xSampling", NULL);
528 } else {
529 setenv("Daq64xSampling", NULL);
530 setenv("Daq128xSampling", "1");
531 }
532
533 /*
534 * Display the ADC/DAC clocking information
535 */
536 if (!quiet)
537 Daq_Display_Clocks();
538
539 /*
540 * Determine the DAC data justification
541 */
542
543 right_just = INITIAL_RIGHT_JUST;
544 if ((ep = getenv("DaqDACRightJustified")) != NULL)
545 right_just = simple_strtol(ep, NULL, 10);
546
547 sprintf(str_buf, "%d", right_just);
548 setenv("DaqDACRightJustified", str_buf);
549
550 /*
551 * Determine the DAC MCLK Divide
552 */
553
554 mclk_divide = INITIAL_MCLK_DIVIDE;
555 if ((ep = getenv("DaqDACMClockDivide")) != NULL)
556 mclk_divide = simple_strtol(ep, NULL, 10);
557
558 sprintf(str_buf, "%d", mclk_divide);
559 setenv("DaqDACMClockDivide", str_buf);
560
561 /*
562 * Initializing the I2C address in the Crystal A/Ds:
563 *
564 * 1) Wait for VREF cap to settle (10uSec per uF)
565 * 2) Release pullup on SDATA
566 * 3) Write the I2C address to register 6
567 * 4) Enable address matching by setting the MSB in register 7
568 */
569
570 if (!quiet)
571 printf("Initializing the ADC...\n");
572
573 udelay(ADC_INITIAL_DELAY); /* 10uSec per uF of VREF cap */
574
575 iopa->pdat &= ~ADC_SDATA1_MASK; /* release SDATA1 */
576 udelay(ADC_SDATA_DELAY); /* arbitrary settling time */
577
578 i2c_reg_write(0x00, 0x06, I2C_ADC_1_ADDR); /* set address */
579 i2c_reg_write(I2C_ADC_1_ADDR, 0x07, /* turn on ADDREN */
580 ADC_REG7_ADDR_ENABLE);
581
582 i2c_reg_write(I2C_ADC_1_ADDR, 0x02, /* 128x, slave mode, !HPEN */
583 (sample_64x ? 0 : ADC_REG2_128x) |
584 ADC_REG2_HIGH_PASS_DIS | ADC_REG2_SLAVE_MODE);
585
586 reg = i2c_reg_read(I2C_ADC_1_ADDR, 0x06) & 0x7F;
587 if (reg != I2C_ADC_1_ADDR) {
588 printf("Init of ADC U10 failed: address is 0x%02X should be 0x%02X\n",
589 reg, I2C_ADC_1_ADDR);
590 }
591
592 iopa->pdat &= ~ADC_SDATA2_MASK; /* release SDATA2 */
593 udelay(ADC_SDATA_DELAY); /* arbitrary settling time */
594
595 /* set address (do not set ADDREN yet) */
596 i2c_reg_write(0x00, 0x06, I2C_ADC_2_ADDR);
597
598 i2c_reg_write(I2C_ADC_2_ADDR, 0x02, /* 64x, slave mode, !HPEN */
599 (sample_64x ? 0 : ADC_REG2_128x) |
600 ADC_REG2_HIGH_PASS_DIS | ADC_REG2_SLAVE_MODE);
601
602 reg = i2c_reg_read(I2C_ADC_2_ADDR, 0x06) & 0x7F;
603 if (reg != I2C_ADC_2_ADDR) {
604 printf("Init of ADC U15 failed: address is 0x%02X should be 0x%02X\n",
605 reg, I2C_ADC_2_ADDR);
606 }
607
608 i2c_reg_write(I2C_ADC_1_ADDR, 0x01, /* set FSTART and GNDCAL */
609 ADC_REG1_FRAME_START | ADC_REG1_GROUND_CAL);
610
611 i2c_reg_write(I2C_ADC_1_ADDR, 0x02, /* Start calibration */
612 (sample_64x ? 0 : ADC_REG2_128x) |
613 ADC_REG2_CAL |
614 ADC_REG2_HIGH_PASS_DIS | ADC_REG2_SLAVE_MODE);
615
616 udelay(ADC_CAL_DELAY); /* a minimum of 4100 LRCLKs */
617 i2c_reg_write(I2C_ADC_1_ADDR, 0x01, 0x00); /* remove GNDCAL */
618
619 /*
620 * Now that we have synchronized the ADC's, enable address
621 * selection on the second ADC as well as the first.
622 */
623 i2c_reg_write(I2C_ADC_2_ADDR, 0x07, ADC_REG7_ADDR_ENABLE);
624
625 /*
626 * Initialize the Crystal DAC
627 *
628 * Two of the config lines are used for I2C so we have to set them
629 * to the proper initialization state without inadvertantly
630 * sending an I2C "start" sequence. When we bring the I2C back to
631 * the normal state, we send an I2C "stop" sequence.
632 */
633 if (!quiet)
634 printf("Initializing the DAC...\n");
635
636 /*
637 * Bring the I2C clock and data lines low for initialization
638 */
639 I2C_SCL(0);
640 I2C_DELAY;
641 I2C_SDA(0);
642 I2C_ACTIVE;
643 I2C_DELAY;
644
645 /* Reset the DAC */
646 iopa->pdat &= ~DAC_RST_MASK;
647 udelay(DAC_RESET_DELAY);
648
649 /* Release the DAC reset */
650 iopa->pdat |= DAC_RST_MASK;
651 udelay(DAC_INITIAL_DELAY);
652
653 /*
654 * Cause the DAC to:
655 * Enable control port (I2C mode)
656 * Going into power down
657 */
658 i2c_reg_write(I2C_DAC_ADDR, 0x05,
659 DAC_REG5_I2C_MODE | DAC_REG5_POWER_DOWN);
660
661 /*
662 * Cause the DAC to:
663 * Enable control port (I2C mode)
664 * Going into power down
665 * . MCLK divide by 1
666 * . MCLK divide by 2
667 */
668 i2c_reg_write(I2C_DAC_ADDR, 0x05,
669 DAC_REG5_I2C_MODE |
670 DAC_REG5_POWER_DOWN |
671 (mclk_divide ? DAC_REG5_MCLK_DIV : 0));
672
673 /*
674 * Cause the DAC to:
675 * Auto-mute disabled
676 * . Format 0, left justified 24 bits
677 * . Format 3, right justified 24 bits
678 * No de-emphasis
679 * . Single speed mode
680 * . Double speed mode
681 */
682 i2c_reg_write(I2C_DAC_ADDR, 0x01,
683 (right_just ? DAC_REG1_RIGHT_JUST_24BIT :
684 DAC_REG1_LEFT_JUST_24_BIT) |
685 DAC_REG1_DEM_NO |
686 (sample_rate >=
687 50000 ? DAC_REG1_DOUBLE : DAC_REG1_SINGLE));
688
689 sprintf(str_buf, "%d",
690 sample_rate >= 50000 ? DAC_REG1_DOUBLE : DAC_REG1_SINGLE);
691 setenv("DaqDACFunctionalMode", str_buf);
692
693 /*
694 * Cause the DAC to:
695 * Enable control port (I2C mode)
696 * Remove power down
697 * . MCLK divide by 1
698 * . MCLK divide by 2
699 */
700 i2c_reg_write(I2C_DAC_ADDR, 0x05,
701 DAC_REG5_I2C_MODE |
702 (mclk_divide ? DAC_REG5_MCLK_DIV : 0));
703
704 /*
705 * Create a I2C stop condition:
706 * low->high on data while clock is high.
707 */
708 I2C_SCL(1);
709 I2C_DELAY;
710 I2C_SDA(1);
711 I2C_DELAY;
712 I2C_TRISTATE;
713
714 if (!quiet)
715 printf("\n");
716 #ifdef CONFIG_ETHER_LOOPBACK_TEST
717 /*
718 * Run the Ethernet loopback test
719 */
720 eth_loopback_test();
721 #endif /* CONFIG_ETHER_LOOPBACK_TEST */
722
723 #ifdef CONFIG_SHOW_BOOT_PROGRESS
724 /*
725 * Turn off the RED fail LED now that we are up and running.
726 */
727 status_led_set(STATUS_LED_RED, STATUS_LED_OFF);
728 #endif
729
730 return 0;
731 }
732
733 #ifdef CONFIG_SHOW_BOOT_PROGRESS
734 /*
735 * Show boot status: flash the LED if something goes wrong, indicating
736 * that last thing that worked and thus, by implication, what is broken.
737 *
738 * This stores the last OK value in RAM so this will not work properly
739 * before RAM is initialized. Since it is being used for indicating
740 * boot status (i.e. after RAM is initialized), that is OK.
741 */
742 static void flash_code(uchar number, uchar modulo, uchar digits)
743 {
744 int j;
745
746 /*
747 * Recursively do upper digits.
748 */
749 if (digits > 1)
750 flash_code(number / modulo, modulo, digits - 1);
751
752 number = number % modulo;
753
754 /*
755 * Zero is indicated by one long flash (dash).
756 */
757 if (number == 0) {
758 status_led_set(STATUS_LED_BOOT, STATUS_LED_ON);
759 udelay(1000000);
760 status_led_set(STATUS_LED_BOOT, STATUS_LED_OFF);
761 udelay(200000);
762 } else {
763 /*
764 * Non-zero is indicated by short flashes, one per count.
765 */
766 for (j = 0; j < number; j++) {
767 status_led_set(STATUS_LED_BOOT, STATUS_LED_ON);
768 udelay(100000);
769 status_led_set(STATUS_LED_BOOT, STATUS_LED_OFF);
770 udelay(200000);
771 }
772 }
773 /*
774 * Inter-digit pause: we've already waited 200 mSec, wait 1 sec total
775 */
776 udelay(700000);
777 }
778
779 static int last_boot_progress;
780
781 void show_boot_progress(int status)
782 {
783 int i, j;
784
785 if (status > 0) {
786 last_boot_progress = status;
787 } else {
788 /*
789 * If a specific failure code is given, flash this code
790 * else just use the last success code we've seen
791 */
792 if (status < -1)
793 last_boot_progress = -status;
794
795 /*
796 * Flash this code 5 times
797 */
798 for (j = 0; j < 5; j++) {
799 /*
800 * Houston, we have a problem.
801 * Blink the last OK status which indicates where things failed.
802 */
803 status_led_set(STATUS_LED_RED, STATUS_LED_ON);
804 flash_code(last_boot_progress, 5, 3);
805
806 /*
807 * Delay 5 seconds between repetitions,
808 * with the fault LED blinking
809 */
810 for (i = 0; i < 5; i++) {
811 status_led_set(STATUS_LED_RED,
812 STATUS_LED_OFF);
813 udelay(500000);
814 status_led_set(STATUS_LED_RED, STATUS_LED_ON);
815 udelay(500000);
816 }
817 }
818
819 /*
820 * Reset the board to retry initialization.
821 */
822 do_reset(NULL, 0, 0, NULL);
823 }
824 }
825 #endif /* CONFIG_SHOW_BOOT_PROGRESS */
826
827
828 /*
829 * The following are used to control the SPI chip selects for the SPI command.
830 */
831 #if defined(CONFIG_CMD_SPI)
832
833 #define SPI_ADC_CS_MASK 0x00000800
834 #define SPI_DAC_CS_MASK 0x00001000
835
836 static const u32 cs_mask[] = {
837 SPI_ADC_CS_MASK,
838 SPI_DAC_CS_MASK,
839 };
840
841 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
842 {
843 return bus == 0 && cs < sizeof(cs_mask) / sizeof(cs_mask[0]);
844 }
845
846 void spi_cs_activate(struct spi_slave *slave)
847 {
848 volatile ioport_t *iopd =
849 ioport_addr((immap_t *) CONFIG_SYS_IMMR, 3 /* port D */ );
850
851 iopd->pdat &= ~cs_mask[slave->cs];
852 }
853
854 void spi_cs_deactivate(struct spi_slave *slave)
855 {
856 volatile ioport_t *iopd =
857 ioport_addr((immap_t *) CONFIG_SYS_IMMR, 3 /* port D */ );
858
859 iopd->pdat |= cs_mask[slave->cs];
860 }
861
862 #endif
863
864 #endif /* CONFIG_MISC_INIT_R */