]> git.sur5r.net Git - u-boot/blob - board/freescale/m5282evb/m5282evb.c
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / board / freescale / m5282evb / m5282evb.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * (C) Copyright 2000-2003
4  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
5  */
6
7 #include <common.h>
8 #include <asm/immap.h>
9
10 DECLARE_GLOBAL_DATA_PTR;
11
12 int checkboard (void)
13 {
14         puts ("Board: Freescale M5282EVB Evaluation Board\n");
15         return 0;
16 }
17
18 int dram_init(void)
19 {
20         u32 dramsize, i, dramclk;
21
22         dramsize = CONFIG_SYS_SDRAM_SIZE * 0x100000;
23         for (i = 0x13; i < 0x20; i++) {
24                 if (dramsize == (1 << i))
25                         break;
26         }
27         i--;
28
29         if (!(MCFSDRAMC_DACR0 & MCFSDRAMC_DACR_RE))
30         {
31                 dramclk = gd->bus_clk / (CONFIG_SYS_HZ * CONFIG_SYS_HZ);
32
33                 /* Initialize DRAM Control Register: DCR */
34                 MCFSDRAMC_DCR = (0
35                         | MCFSDRAMC_DCR_RTIM_6
36                         | MCFSDRAMC_DCR_RC((15 * dramclk)>>4));
37                 asm("nop");
38
39                 /* Initialize DACR0 */
40                 MCFSDRAMC_DACR0 = (0
41                         | MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE)
42                         | MCFSDRAMC_DACR_CASL(1)
43                         | MCFSDRAMC_DACR_CBM(3)
44                         | MCFSDRAMC_DACR_PS_32);
45                 asm("nop");
46
47                 /* Initialize DMR0 */
48                 MCFSDRAMC_DMR0 = (0
49                         | ((dramsize - 1) & 0xFFFC0000)
50                         | MCFSDRAMC_DMR_V);
51                 asm("nop");
52
53                 /* Set IP (bit 3) in DACR */
54                 MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
55                 asm("nop");
56
57                 /* Wait 30ns to allow banks to precharge */
58                 for (i = 0; i < 5; i++) {
59                         asm ("nop");
60                 }
61
62                 /* Write to this block to initiate precharge */
63                 *(u32 *)(CONFIG_SYS_SDRAM_BASE) = 0xA5A59696;
64                 asm("nop");
65
66                 /* Set RE (bit 15) in DACR */
67                 MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
68                 asm("nop");
69
70                 /* Wait for at least 8 auto refresh cycles to occur */
71                 for (i = 0; i < 2000; i++) {
72                         asm(" nop");
73                 }
74
75                 /* Finish the configuration by issuing the IMRS. */
76                 MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
77                 asm("nop");
78
79                 /* Write to the SDRAM Mode Register */
80                 *(u32 *)(CONFIG_SYS_SDRAM_BASE + 0x400) = 0xA5A59696;
81         }
82         gd->ram_size = dramsize;
83
84         return 0;
85 }