xref: /rk3399_rockchip-uboot/board/freescale/m5282evb/m5282evb.c (revision f1683aa73c31db0a025e0254e6ce1ee7e56aad3e)
110db3a17STsiChung Liew /*
210db3a17STsiChung Liew  * (C) Copyright 2000-2003
310db3a17STsiChung Liew  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
410db3a17STsiChung Liew  *
51a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
610db3a17STsiChung Liew  */
710db3a17STsiChung Liew 
810db3a17STsiChung Liew #include <common.h>
910db3a17STsiChung Liew #include <asm/immap.h>
1010db3a17STsiChung Liew 
1110db3a17STsiChung Liew DECLARE_GLOBAL_DATA_PTR;
1210db3a17STsiChung Liew 
checkboard(void)1310db3a17STsiChung Liew int checkboard (void)
1410db3a17STsiChung Liew {
1510db3a17STsiChung Liew 	puts ("Board: Freescale M5282EVB Evaluation Board\n");
1610db3a17STsiChung Liew 	return 0;
1710db3a17STsiChung Liew }
1810db3a17STsiChung Liew 
dram_init(void)19*f1683aa7SSimon Glass int dram_init(void)
2010db3a17STsiChung Liew {
2110db3a17STsiChung Liew 	u32 dramsize, i, dramclk;
2210db3a17STsiChung Liew 
236d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 	dramsize = CONFIG_SYS_SDRAM_SIZE * 0x100000;
2410db3a17STsiChung Liew 	for (i = 0x13; i < 0x20; i++) {
2510db3a17STsiChung Liew 		if (dramsize == (1 << i))
2610db3a17STsiChung Liew 			break;
2710db3a17STsiChung Liew 	}
2810db3a17STsiChung Liew 	i--;
2910db3a17STsiChung Liew 
3010db3a17STsiChung Liew 	if (!(MCFSDRAMC_DACR0 & MCFSDRAMC_DACR_RE))
3110db3a17STsiChung Liew 	{
326d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 		dramclk = gd->bus_clk / (CONFIG_SYS_HZ * CONFIG_SYS_HZ);
3310db3a17STsiChung Liew 
3410db3a17STsiChung Liew 		/* Initialize DRAM Control Register: DCR */
3510db3a17STsiChung Liew 		MCFSDRAMC_DCR = (0
3610db3a17STsiChung Liew 			| MCFSDRAMC_DCR_RTIM_6
3710db3a17STsiChung Liew 			| MCFSDRAMC_DCR_RC((15 * dramclk)>>4));
384cb4e654STsiChung Liew 		asm("nop");
3910db3a17STsiChung Liew 
4010db3a17STsiChung Liew 		/* Initialize DACR0 */
4110db3a17STsiChung Liew 		MCFSDRAMC_DACR0 = (0
426d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 			| MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE)
4310db3a17STsiChung Liew 			| MCFSDRAMC_DACR_CASL(1)
4410db3a17STsiChung Liew 			| MCFSDRAMC_DACR_CBM(3)
4510db3a17STsiChung Liew 			| MCFSDRAMC_DACR_PS_32);
464cb4e654STsiChung Liew 		asm("nop");
4710db3a17STsiChung Liew 
4810db3a17STsiChung Liew 		/* Initialize DMR0 */
4910db3a17STsiChung Liew 		MCFSDRAMC_DMR0 = (0
5010db3a17STsiChung Liew 			| ((dramsize - 1) & 0xFFFC0000)
5110db3a17STsiChung Liew 			| MCFSDRAMC_DMR_V);
524cb4e654STsiChung Liew 		asm("nop");
5310db3a17STsiChung Liew 
5410db3a17STsiChung Liew 		/* Set IP (bit 3) in DACR */
5510db3a17STsiChung Liew 		MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
564cb4e654STsiChung Liew 		asm("nop");
5710db3a17STsiChung Liew 
5810db3a17STsiChung Liew 		/* Wait 30ns to allow banks to precharge */
5910db3a17STsiChung Liew 		for (i = 0; i < 5; i++) {
6010db3a17STsiChung Liew 			asm ("nop");
6110db3a17STsiChung Liew 		}
6210db3a17STsiChung Liew 
6310db3a17STsiChung Liew 		/* Write to this block to initiate precharge */
646d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 		*(u32 *)(CONFIG_SYS_SDRAM_BASE) = 0xA5A59696;
654cb4e654STsiChung Liew 		asm("nop");
6610db3a17STsiChung Liew 
6710db3a17STsiChung Liew 		/* Set RE (bit 15) in DACR */
6810db3a17STsiChung Liew 		MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
694cb4e654STsiChung Liew 		asm("nop");
7010db3a17STsiChung Liew 
7110db3a17STsiChung Liew 		/* Wait for at least 8 auto refresh cycles to occur */
7210db3a17STsiChung Liew 		for (i = 0; i < 2000; i++) {
7310db3a17STsiChung Liew 			asm(" nop");
7410db3a17STsiChung Liew 		}
7510db3a17STsiChung Liew 
7610db3a17STsiChung Liew 		/* Finish the configuration by issuing the IMRS. */
7710db3a17STsiChung Liew 		MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
784cb4e654STsiChung Liew 		asm("nop");
7910db3a17STsiChung Liew 
8010db3a17STsiChung Liew 		/* Write to the SDRAM Mode Register */
816d0f6bcfSJean-Christophe PLAGNIOL-VILLARD 		*(u32 *)(CONFIG_SYS_SDRAM_BASE + 0x400) = 0xA5A59696;
8210db3a17STsiChung Liew 	}
83088454cdSSimon Glass 	gd->ram_size = dramsize;
84088454cdSSimon Glass 
85088454cdSSimon Glass 	return 0;
8610db3a17STsiChung Liew }
87