Blame view

board/sbc8641d/sbc8641d.c 5.76 KB
8ac273271   Joe Hamman   Add support for S...
1
2
3
4
5
6
7
8
9
10
11
  /*
   * Copyright 2007 Wind River Systemes, Inc. <www.windriver.com>
   * Copyright 2007 Embedded Specialties, Inc.
   * Joe Hamman joe.hamman@embeddedspecialties.com
   *
   * Copyright 2004 Freescale Semiconductor.
   * Jeff Brown
   * Srikanth Srinivasan (srikanth.srinivasan@freescale.com)
   *
   * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
   *
3765b3e7b   Wolfgang Denk   Coding Style clea...
12
   * SPDX-License-Identifier:	GPL-2.0+
8ac273271   Joe Hamman   Add support for S...
13
14
15
16
17
18
19
   */
  
  #include <common.h>
  #include <command.h>
  #include <pci.h>
  #include <asm/processor.h>
  #include <asm/immap_86xx.h>
c8514622e   Kumar Gala   fsl_pci: Renamed ...
20
  #include <asm/fsl_pci.h>
5614e71b4   York Sun   Driver/DDR: Movin...
21
  #include <fsl_ddr_sdram.h>
5d27e02c0   Kumar Gala   powerpc/8xxx: Rep...
22
  #include <asm/fsl_serdes.h>
13f5433f7   Jon Loeliger   86xx: Convert sbc...
23
24
  #include <libfdt.h>
  #include <fdt_support.h>
8ac273271   Joe Hamman   Add support for S...
25

8ac273271   Joe Hamman   Add support for S...
26
27
28
29
30
31
32
33
34
35
36
  long int fixed_sdram (void);
  
  int board_early_init_f (void)
  {
  	return 0;
  }
  
  int checkboard (void)
  {
  	puts ("Board: Wind River SBC8641D
  ");
8ac273271   Joe Hamman   Add support for S...
37
38
  	return 0;
  }
9973e3c61   Becky Bruce   Change initdram()...
39
  phys_size_t initdram (int board_type)
8ac273271   Joe Hamman   Add support for S...
40
41
42
43
  {
  	long dram_size = 0;
  
  #if defined(CONFIG_SPD_EEPROM)
9bd4e5911   Kumar Gala   FSL DDR: Convert ...
44
  	dram_size = fsl_ddr_sdram();
8ac273271   Joe Hamman   Add support for S...
45
46
47
  #else
  	dram_size = fixed_sdram ();
  #endif
21cd5815a   Wolfgang Denk   MPC8xxx: drop red...
48
  	debug ("    DDR: ");
8ac273271   Joe Hamman   Add support for S...
49
50
  	return dram_size;
  }
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
51
  #if defined(CONFIG_SYS_DRAM_TEST)
8ac273271   Joe Hamman   Add support for S...
52
53
  int testdram (void)
  {
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
54
55
  	uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START;
  	uint *pend = (uint *) CONFIG_SYS_MEMTEST_END;
8ac273271   Joe Hamman   Add support for S...
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
  	uint *p;
  
  	puts ("SDRAM test phase 1:
  ");
  	for (p = pstart; p < pend; p++)
  		*p = 0xaaaaaaaa;
  
  	for (p = pstart; p < pend; p++) {
  		if (*p != 0xaaaaaaaa) {
  			printf ("SDRAM test fails at: %08x
  ", (uint) p);
  			return 1;
  		}
  	}
  
  	puts ("SDRAM test phase 2:
  ");
  	for (p = pstart; p < pend; p++)
  		*p = 0x55555555;
  
  	for (p = pstart; p < pend; p++) {
  		if (*p != 0x55555555) {
  			printf ("SDRAM test fails at: %08x
  ", (uint) p);
  			return 1;
  		}
  	}
  
  	puts ("SDRAM test passed.
  ");
  	return 0;
  }
  #endif
  
  #if !defined(CONFIG_SPD_EEPROM)
  /*
   * Fixed sdram init -- doesn't use serial presence detect.
   */
  long int fixed_sdram (void)
  {
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
96
97
  #if !defined(CONFIG_SYS_RAMBOOT)
  	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
9a17eb5b7   York Sun   Driver/DDR: combi...
98
  	volatile struct ccsr_ddr *ddr = &immap->im_ddr1;
8ac273271   Joe Hamman   Add support for S...
99

6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
100
101
102
103
104
105
106
107
108
109
110
111
  	ddr->cs0_bnds = CONFIG_SYS_DDR_CS0_BNDS;
  	ddr->cs1_bnds = CONFIG_SYS_DDR_CS1_BNDS;
  	ddr->cs2_bnds = CONFIG_SYS_DDR_CS2_BNDS;
  	ddr->cs3_bnds = CONFIG_SYS_DDR_CS3_BNDS;
  	ddr->cs0_config = CONFIG_SYS_DDR_CS0_CONFIG;
  	ddr->cs1_config = CONFIG_SYS_DDR_CS1_CONFIG;
  	ddr->cs2_config = CONFIG_SYS_DDR_CS2_CONFIG;
  	ddr->cs3_config = CONFIG_SYS_DDR_CS3_CONFIG;
  	ddr->timing_cfg_3 = CONFIG_SYS_DDR_TIMING_3;
  	ddr->timing_cfg_0 = CONFIG_SYS_DDR_TIMING_0;
  	ddr->timing_cfg_1 = CONFIG_SYS_DDR_TIMING_1;
  	ddr->timing_cfg_2 = CONFIG_SYS_DDR_TIMING_2;
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
112
  	ddr->sdram_cfg = CONFIG_SYS_DDR_CFG_1A;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
113
  	ddr->sdram_cfg_2 = CONFIG_SYS_DDR_CFG_2;
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
114
  	ddr->sdram_mode = CONFIG_SYS_DDR_MODE_1;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
115
  	ddr->sdram_mode_2 = CONFIG_SYS_DDR_MODE_2;
9a17eb5b7   York Sun   Driver/DDR: combi...
116
  	ddr->sdram_md_cntl = CONFIG_SYS_DDR_MODE_CTL;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
117
118
119
  	ddr->sdram_interval = CONFIG_SYS_DDR_INTERVAL;
  	ddr->sdram_data_init = CONFIG_SYS_DDR_DATA_INIT;
  	ddr->sdram_clk_cntl = CONFIG_SYS_DDR_CLK_CTRL;
8ac273271   Joe Hamman   Add support for S...
120
121
122
123
  
  	asm ("sync;isync");
  
  	udelay (500);
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
124
  	ddr->sdram_cfg = CONFIG_SYS_DDR_CFG_1B;
8ac273271   Joe Hamman   Add support for S...
125
126
127
128
  	asm ("sync; isync");
  
  	udelay (500);
  	ddr = &immap->im_ddr2;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
129
130
131
132
133
134
135
136
137
138
139
140
  	ddr->cs0_bnds = CONFIG_SYS_DDR2_CS0_BNDS;
  	ddr->cs1_bnds = CONFIG_SYS_DDR2_CS1_BNDS;
  	ddr->cs2_bnds = CONFIG_SYS_DDR2_CS2_BNDS;
  	ddr->cs3_bnds = CONFIG_SYS_DDR2_CS3_BNDS;
  	ddr->cs0_config = CONFIG_SYS_DDR2_CS0_CONFIG;
  	ddr->cs1_config = CONFIG_SYS_DDR2_CS1_CONFIG;
  	ddr->cs2_config = CONFIG_SYS_DDR2_CS2_CONFIG;
  	ddr->cs3_config = CONFIG_SYS_DDR2_CS3_CONFIG;
  	ddr->timing_cfg_3 = CONFIG_SYS_DDR2_EXT_REFRESH;
  	ddr->timing_cfg_0 = CONFIG_SYS_DDR2_TIMING_0;
  	ddr->timing_cfg_1 = CONFIG_SYS_DDR2_TIMING_1;
  	ddr->timing_cfg_2 = CONFIG_SYS_DDR2_TIMING_2;
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
141
  	ddr->sdram_cfg = CONFIG_SYS_DDR2_CFG_1A;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
142
  	ddr->sdram_cfg_2 = CONFIG_SYS_DDR2_CFG_2;
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
143
  	ddr->sdram_mode = CONFIG_SYS_DDR2_MODE_1;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
144
  	ddr->sdram_mode_2 = CONFIG_SYS_DDR2_MODE_2;
9a17eb5b7   York Sun   Driver/DDR: combi...
145
  	ddr->sdram_md_cntl = CONFIG_SYS_DDR2_MODE_CTL;
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
146
147
148
  	ddr->sdram_interval = CONFIG_SYS_DDR2_INTERVAL;
  	ddr->sdram_data_init = CONFIG_SYS_DDR2_DATA_INIT;
  	ddr->sdram_clk_cntl = CONFIG_SYS_DDR2_CLK_CTRL;
8ac273271   Joe Hamman   Add support for S...
149
150
151
152
  
  	asm ("sync;isync");
  
  	udelay (500);
e7ee23ec1   Peter Tyser   86xx: Rename ccsr...
153
  	ddr->sdram_cfg = CONFIG_SYS_DDR2_CFG_1B;
8ac273271   Joe Hamman   Add support for S...
154
155
156
157
  	asm ("sync; isync");
  
  	udelay (500);
  #endif
6d0f6bcf3   Jean-Christophe PLAGNIOL-VILLARD   rename CFG_ macro...
158
  	return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024;
8ac273271   Joe Hamman   Add support for S...
159
160
161
162
163
164
165
  }
  #endif				/* !defined(CONFIG_SPD_EEPROM) */
  
  #if defined(CONFIG_PCI)
  /*
   * Initialize PCI Devices, report devices found.
   */
cca34967c   Joe Hamman   Modify SBC8641D t...
166
  void pci_init_board(void)
8ac273271   Joe Hamman   Add support for S...
167
  {
c51136ec4   Kumar Gala   powerpc/86xx: Rew...
168
  	fsl_pcie_init_board(0);
8ac273271   Joe Hamman   Add support for S...
169
  }
c51136ec4   Kumar Gala   powerpc/86xx: Rew...
170
  #endif /* CONFIG_PCI */
8ac273271   Joe Hamman   Add support for S...
171

13f5433f7   Jon Loeliger   86xx: Convert sbc...
172
173
  
  #if defined(CONFIG_OF_BOARD_SETUP)
e895a4b06   Simon Glass   fdt: Allow ft_boa...
174
  int ft_board_setup(void *blob, bd_t *bd)
8ac273271   Joe Hamman   Add support for S...
175
  {
13f5433f7   Jon Loeliger   86xx: Convert sbc...
176
  	ft_cpu_setup(blob, bd);
8ac273271   Joe Hamman   Add support for S...
177

6525d51fa   Kumar Gala   powerpc/85xx & 86...
178
  	FT_FSL_PCI_SETUP;
e895a4b06   Simon Glass   fdt: Allow ft_boa...
179
180
  
  	return 0;
8ac273271   Joe Hamman   Add support for S...
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
  }
  #endif
  
  void sbc8641d_reset_board (void)
  {
  	puts ("Resetting board....
  ");
  }
  
  /*
   * get_board_sys_clk
   *      Clock is fixed at 1GHz on this board. Used for CONFIG_SYS_CLK_FREQ
   */
  
  unsigned long get_board_sys_clk (ulong dummy)
  {
  	int i;
  	ulong val = 0;
  
  	i = 5;
  	i &= 0x07;
  
  	switch (i) {
  	case 0:
  		val = 33000000;
  		break;
  	case 1:
  		val = 40000000;
  		break;
  	case 2:
  		val = 50000000;
  		break;
  	case 3:
  		val = 66000000;
  		break;
  	case 4:
  		val = 83000000;
  		break;
  	case 5:
  		val = 100000000;
  		break;
  	case 6:
  		val = 134000000;
  		break;
  	case 7:
  		val = 166000000;
  		break;
  	}
  
  	return val;
  }
4ef630df7   Peter Tyser   86xx: Reset update
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
  
  void board_reset(void)
  {
  #ifdef CONFIG_SYS_RESET_ADDRESS
  	ulong addr = CONFIG_SYS_RESET_ADDRESS;
  
  	/* flush and disable I/D cache */
  	__asm__ __volatile__ ("mfspr	3, 1008"	::: "r3");
  	__asm__ __volatile__ ("ori	5, 5, 0xcc00"	::: "r5");
  	__asm__ __volatile__ ("ori	4, 3, 0xc00"	::: "r4");
  	__asm__ __volatile__ ("andc	5, 3, 5"	::: "r5");
  	__asm__ __volatile__ ("sync");
  	__asm__ __volatile__ ("mtspr	1008, 4");
  	__asm__ __volatile__ ("isync");
  	__asm__ __volatile__ ("sync");
  	__asm__ __volatile__ ("mtspr	1008, 5");
  	__asm__ __volatile__ ("isync");
  	__asm__ __volatile__ ("sync");
  
  	/*
  	 * SRR0 has system reset vector, SRR1 has default MSR value
  	 * rfi restores MSR from SRR1 and sets the PC to the SRR0 value
  	 */
  	__asm__ __volatile__ ("mtspr	26, %0"		:: "r" (addr));
  	__asm__ __volatile__ ("li	4, (1 << 6)"	::: "r4");
  	__asm__ __volatile__ ("mtspr	27, 4");
  	__asm__ __volatile__ ("rfi");
  #endif
  }