summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards/edb93xx/sdram_cfg.h
blob: 0dc1df24b2165afd2af954abd4df5344acf4dcf6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 * Copyright (C) 2009 Matthias Kaehlcke <matthias@kaehlcke.net>
 *
 * Copyright (C) 2006 Dominic Rath <Dominic.Rath@gmx.de>
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 */

#include <config.h>
#include <mach/ep93xx-regs.h>

#define SDRAM_BASE_ADDR		CONFIG_EP93XX_SDRAM_BANK0_BASE

#ifdef CONFIG_EP93XX_SDCE0_PHYS_OFFSET
#define SDRAM_DEVCFG_REG	devcfg0
#elif defined(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET)
#define SDRAM_DEVCFG_REG	devcfg3
#else
#error "SDRAM bank configuration"
#endif

#if defined(CONFIG_MACH_EDB9301) || defined(CONFIG_MACH_EDB9302) ||\
	defined(CONFIG_MACH_EDB9302A)
/*
 * 1x Samsung K4S561632C-TC/L75 4M x 16bit x 4 banks SDRAM
 *
 * CLK cycle time min:
 *	@ CAS latency = 3: 7.5ns
 *	@ CAS latency = 2: 10ns
 * We're running at 66MHz (EDB9301) / 100Mhz (EDB9302(a)) external
 * bus speed (HCLK), with a cycle time of 15ns / 10ns, so it's safe
 * to use CAS latency = 2
 *
 * RAS-to-CAS delay min:
 *	20ns
 * At 15ns/10ns cycle time, we use RAS-to-CAS delay = 2
 *
 * SROMLL = 1: Swap BA[1:0] with A[13:12], making the SDRAM appear
 * as four blocks of 8MB size, instead of eight blocks of 4MB size:
 *
 * EDB9301/EDB9302:
 *
 * 0x00000000 - 0x007fffff
 * 0x01000000 - 0x017fffff
 * 0x04000000 - 0x047fffff
 * 0x05000000 - 0x057fffff
 *
 *
 * EDB9302a:
 *
 * 0xc0000000 - 0xc07fffff
 * 0xc1000000 - 0xc17fffff
 * 0xc4000000 - 0xc47fffff
 * 0xc5000000 - 0xc57fffff
 *
 * BANKCOUNT = 1: This is a device with four banks
 */

#define SDRAM_DEVCFG_VAL (SDRAM_DEVCFG_BANKCOUNT |			\
				SDRAM_DEVCFG_SROMLL |			\
				SDRAM_DEVCFG_CASLAT_2 |			\
				SDRAM_DEVCFG_RASTOCAS_2 |		\
				SDRAM_DEVCFG_EXTBUSWIDTH)

/*
 * 16 bit ext. bus
 *
 * A[22:09] is output as SYA[13:0]
 * CAS latency: 2
 * Burst type: sequential
 * Burst length: 8 (required for 16 bit ext. bus)
 * SYA[13:0] = 0x0023
 */
#define SDRAM_MODE_REG_VAL	0x4600

#define SDRAM_BANK_SEL_0	0x00000000 /* A[22:21] = b00 */
#define SDRAM_BANK_SEL_1	0x00200000 /* A[22:21] = b01 */
#define SDRAM_BANK_SEL_2	0x00400000 /* A[22:21] = b10 */
#define SDRAM_BANK_SEL_3	0x00600000 /* A[22:21] = b11 */

#elif defined(CONFIG_MACH_EDB9307) || defined(CONFIG_MACH_EDB9307A) ||\
	defined CONFIG_MACH_EDB9312 || defined(CONFIG_MACH_EDB9315) ||\
	defined(CONFIG_MACH_EDB9315A)
/*
 * 2x Samsung K4S561632C-TC/L75 4M x 16bit x 4 banks SDRAM
 *
 * CLK cycle time min:
 *	@ CAS latency = 3: 7.5ns
 *	@ CAS latency = 2: 10ns
 * We're running at 100MHz (10ns cycle time) external bus speed (HCLK),
 * so it's safe to use CAS latency = 2
 *
 * RAS-to-CAS delay min:
 *	20ns
 * At 10ns cycle time, we use RAS-to-CAS delay = 2
 *
 * EDB9307, EDB9312, EDB9315:
 *
 * 0x00000000 - 0x01ffffff
 * 0x04000000 - 0x05ffffff
 *
 *
 * EDB9307a, EDB9315a:
 *
 * 0xc0000000 - 0xc1ffffff
 * 0xc4000000 - 0xc5ffffff
 */

#define SDRAM_DEVCFG_VAL	(SDRAM_DEVCFG_BANKCOUNT |		\
				SDRAM_DEVCFG_SROMLL |			\
				SDRAM_DEVCFG_CASLAT_2 |			\
				SDRAM_DEVCFG_RASTOCAS_2)

/*
 * 32 bit ext. bus
 *
 * A[23:10] is output as SYA[13:0]
 * CAS latency: 2
 * Burst type: sequential
 * Burst length: 4
 * SYA[13:0] = 0x0022
 */
#define SDRAM_MODE_REG_VAL	0x8800

#define SDRAM_BANK_SEL_0	0x00000000 /* A[23:22] = b00 */
#define SDRAM_BANK_SEL_1	0x00400000 /* A[23:22] = b01 */
#define SDRAM_BANK_SEL_2	0x00800000 /* A[23:22] = b10 */
#define SDRAM_BANK_SEL_3	0x00c00000 /* A[23:22] = b11 */
#endif