~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/board/rbc823/rbc823.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * (C) Copyright 2000
 
3
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 
4
 *
 
5
 * SPDX-License-Identifier:     GPL-2.0+
 
6
 */
 
7
 
 
8
#include <common.h>
 
9
#include "mpc8xx.h"
 
10
#include <linux/mtd/doc2000.h>
 
11
 
 
12
extern int kbd_init(void);
 
13
extern int drv_kbd_init(void);
 
14
 
 
15
/* ------------------------------------------------------------------------- */
 
16
 
 
17
static long int dram_size (long int, long int *, long int);
 
18
 
 
19
/* ------------------------------------------------------------------------- */
 
20
 
 
21
#define _NOT_USED_      0xFFFFFFFF
 
22
 
 
23
const uint sdram_table[] =
 
24
{
 
25
        /*
 
26
         * Single Read. (Offset 0 in UPMA RAM)
 
27
         */
 
28
        0x1F07FC04, 0xEEAEFC04, 0x11ADFC04, 0xEFBBBC00,
 
29
        0x1FF77C47, /* last */
 
30
        /*
 
31
         * SDRAM Initialization (offset 5 in UPMA RAM)
 
32
         *
 
33
         * This is no UPM entry point. The following definition uses
 
34
         * the remaining space to establish an initialization
 
35
         * sequence, which is executed by a RUN command.
 
36
         *
 
37
         */
 
38
                    0x1FF77C34, 0xEFEABC34, 0x1FB57C35, /* last */
 
39
        /*
 
40
         * Burst Read. (Offset 8 in UPMA RAM)
 
41
         */
 
42
        0x1F07FC04, 0xEEAEFC04, 0x10ADFC04, 0xF0AFFC00,
 
43
        0xF0AFFC00, 0xF1AFFC00, 0xEFBBBC00, 0x1FF77C47, /* last */
 
44
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
45
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
46
        /*
 
47
         * Single Write. (Offset 18 in UPMA RAM)
 
48
         */
 
49
        0x1F27FC04, 0xEEAEBC00, 0x01B93C04, 0x1FF77C47, /* last */
 
50
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
51
        /*
 
52
         * Burst Write. (Offset 20 in UPMA RAM)
 
53
         */
 
54
        0x1F07FC04, 0xEEAEBC00, 0x10AD7C00, 0xF0AFFC00,
 
55
        0xF0AFFC00, 0xE1BBBC04, 0x1FF77C47, /* last */
 
56
                                            _NOT_USED_,
 
57
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
58
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
59
        /*
 
60
         * Refresh  (Offset 30 in UPMA RAM)
 
61
         */
 
62
        0x1FF5FC84, 0xFFFFFC04, 0xFFFFFC04, 0xFFFFFC04,
 
63
        0xFFFFFC84, 0xFFFFFC07, /* last */
 
64
                                _NOT_USED_, _NOT_USED_,
 
65
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
66
        /*
 
67
         * Exception. (Offset 3c in UPMA RAM)
 
68
         */
 
69
        0x1FF7FC07, /* last */
 
70
                    _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
71
};
 
72
 
 
73
const uint static_table[] =
 
74
{
 
75
        /*
 
76
         * Single Read. (Offset 0 in UPMA RAM)
 
77
         */
 
78
        0x0FFFFC04, 0x0FF3FC04, 0x0FF3CC04, 0x0FF3CC04,
 
79
        0x0FF3EC04, 0x0FF3CC00, 0x0FF7FC04, 0x3FFFFC04,
 
80
        0xFFFFFC04, 0xFFFFFC05, /* last */
 
81
                                _NOT_USED_, _NOT_USED_,
 
82
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
83
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
84
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
85
        /*
 
86
         * Single Write. (Offset 18 in UPMA RAM)
 
87
         */
 
88
        0x0FFFFC04, 0x00FFFC04, 0x00FFFC04, 0x00FFFC04,
 
89
        0x01FFFC00, 0x3FFFFC04, 0xFFFFFC04, 0xFFFFFC05, /* last */
 
90
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
91
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
92
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
93
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
94
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
95
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
96
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
97
        _NOT_USED_, _NOT_USED_, _NOT_USED_, _NOT_USED_,
 
98
};
 
99
 
 
100
/* ------------------------------------------------------------------------- */
 
101
 
 
102
/*
 
103
 * Check Board Identity:
 
104
 *
 
105
 * Test TQ ID string (TQM8xx...)
 
106
 * If present, check for "L" type (no second DRAM bank),
 
107
 * otherwise "L" type is assumed as default.
 
108
 *
 
109
 * Return 1 for "L" type, 0 else.
 
110
 */
 
111
 
 
112
int checkboard (void)
 
113
{
 
114
        char buf[64];
 
115
        int i = getenv_f("serial#", buf, sizeof(buf));
 
116
 
 
117
        if (i < 0 || strncmp(buf, "TQM8", 4)) {
 
118
                printf ("### No HW ID - assuming RBC823\n");
 
119
                return (0);
 
120
        }
 
121
 
 
122
        puts(buf);
 
123
        putc('\n');
 
124
 
 
125
        return (0);
 
126
}
 
127
 
 
128
/* ------------------------------------------------------------------------- */
 
129
 
 
130
phys_size_t initdram (int board_type)
 
131
{
 
132
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
 
133
        volatile memctl8xx_t *memctl = &immap->im_memctl;
 
134
        long int size_b0, size8, size9;
 
135
 
 
136
        upmconfig (UPMA, (uint *) sdram_table,
 
137
                   sizeof (sdram_table) / sizeof (uint));
 
138
 
 
139
        /*
 
140
         * 1 Bank of 64Mbit x 2 devices
 
141
         */
 
142
        memctl->memc_mptpr = CONFIG_SYS_MPTPR_1BK_4K;
 
143
        memctl->memc_mar = 0x00000088;
 
144
 
 
145
        /*
 
146
         * Map controller SDRAM bank 0
 
147
         */
 
148
        memctl->memc_or4 = CONFIG_SYS_OR4_PRELIM;
 
149
        memctl->memc_br4 = CONFIG_SYS_BR4_PRELIM;
 
150
        memctl->memc_mamr = CONFIG_SYS_MAMR_8COL & (~(MAMR_PTAE));      /* no refresh yet */
 
151
        udelay (200);
 
152
 
 
153
        /*
 
154
         * Perform SDRAM initializsation sequence
 
155
         */
 
156
        memctl->memc_mcr = 0x80008105;  /* SDRAM bank 0 */
 
157
        udelay (1);
 
158
        memctl->memc_mamr = (CONFIG_SYS_MAMR_8COL & ~(MAMR_TLFA_MSK)) | MAMR_TLFA_8X;
 
159
        udelay (200);
 
160
        memctl->memc_mcr = 0x80008130;  /* SDRAM bank 0 - execute twice */
 
161
        udelay (1);
 
162
        memctl->memc_mamr = (CONFIG_SYS_MAMR_8COL & ~(MAMR_TLFA_MSK)) | MAMR_TLFA_4X;
 
163
        udelay (200);
 
164
 
 
165
        memctl->memc_mamr |= MAMR_PTAE; /* enable refresh */
 
166
        udelay (1000);
 
167
 
 
168
        /*
 
169
         * Preliminary prescaler for refresh (depends on number of
 
170
         * banks): This value is selected for four cycles every 62.4 us
 
171
         * with two SDRAM banks or four cycles every 31.2 us with one
 
172
         * bank. It will be adjusted after memory sizing.
 
173
         */
 
174
        memctl->memc_mptpr = CONFIG_SYS_MPTPR_2BK_4K;   /* 16: but should be: CONFIG_SYS_MPTPR_1BK_4K */
 
175
 
 
176
        /*
 
177
         * Check Bank 0 Memory Size for re-configuration
 
178
         *
 
179
         * try 8 column mode
 
180
         */
 
181
        size8 = dram_size (CONFIG_SYS_MAMR_8COL, (long *) SDRAM_BASE4_PRELIM,
 
182
                           SDRAM_MAX_SIZE);
 
183
        udelay (1000);
 
184
 
 
185
        /*
 
186
         * try 9 column mode
 
187
         */
 
188
        size9 = dram_size (CONFIG_SYS_MAMR_9COL, (long *) SDRAM_BASE4_PRELIM,
 
189
                           SDRAM_MAX_SIZE);
 
190
 
 
191
        if (size8 < size9) {    /* leave configuration at 9 columns     */
 
192
                size_b0 = size9;
 
193
/*      debug ("SDRAM Bank 0 in 9 column mode: %ld MB\n", size >> 20);  */
 
194
        } else {                /* back to 8 columns                    */
 
195
                size_b0 = size8;
 
196
                memctl->memc_mamr = CONFIG_SYS_MAMR_8COL;
 
197
                udelay (500);
 
198
/*      debug ("SDRAM Bank 0 in 8 column mode: %ld MB\n", size >> 20);  */
 
199
        }
 
200
 
 
201
        udelay (1000);
 
202
 
 
203
        /*
 
204
         * Adjust refresh rate depending on SDRAM type, both banks
 
205
         * For types > 128 MBit leave it at the current (fast) rate
 
206
         */
 
207
        if ((size_b0 < 0x02000000)) {
 
208
                /* reduce to 15.6 us (62.4 us / quad) */
 
209
                memctl->memc_mptpr = CONFIG_SYS_MPTPR_2BK_4K;
 
210
                udelay (1000);
 
211
        }
 
212
 
 
213
        /* SDRAM Bank 0 is bigger - map first       */
 
214
 
 
215
        memctl->memc_or4 = ((-size_b0) & 0xFFFF0000) | CONFIG_SYS_OR_TIMING_SDRAM;
 
216
        memctl->memc_br4 = (CONFIG_SYS_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMA | BR_V;
 
217
 
 
218
        udelay (10000);
 
219
 
 
220
        return (size_b0);
 
221
}
 
222
 
 
223
/* ------------------------------------------------------------------------- */
 
224
 
 
225
/*
 
226
 * Check memory range for valid RAM. A simple memory test determines
 
227
 * the actually available RAM size between addresses `base' and
 
228
 * `base + maxsize'. Some (not all) hardware errors are detected:
 
229
 * - short between address lines
 
230
 * - short between data lines
 
231
 */
 
232
 
 
233
static long int dram_size (long int mamr_value, long int *base,
 
234
                           long int maxsize)
 
235
{
 
236
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
 
237
        volatile memctl8xx_t *memctl = &immap->im_memctl;
 
238
 
 
239
        memctl->memc_mamr = mamr_value;
 
240
 
 
241
        return (get_ram_size (base, maxsize));
 
242
}
 
243
 
 
244
#ifdef CONFIG_CMD_DOC
 
245
void doc_init (void)
 
246
{
 
247
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
 
248
        volatile memctl8xx_t *memctl = &immap->im_memctl;
 
249
 
 
250
        upmconfig (UPMB, (uint *) static_table,
 
251
                   sizeof (static_table) / sizeof (uint));
 
252
        memctl->memc_mbmr = MAMR_DSA_1_CYCL;
 
253
 
 
254
        doc_probe (FLASH_BASE1_PRELIM);
 
255
}
 
256
#endif