xref: /rk3399_rockchip-uboot/board/armltd/integrator/integrator.c (revision 576afd4faeba1519bcb8c0083c3e4d45e5643a48)
1*576afd4fSJean-Christophe PLAGNIOL-VILLARD /*
2*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
3*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
4*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Marius Groeger <mgroeger@sysgo.de>
5*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
6*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2002
7*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * David Mueller, ELSOFT AG, <d.mueller@elsoft.ch>
8*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
9*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2003
10*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Texas Instruments, <www.ti.com>
11*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Kshitij Gupta <Kshitij@ti.com>
12*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
13*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * (C) Copyright 2004
14*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * ARM Ltd.
15*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Philippe Robin, <philippe.robin@arm.com>
16*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
17*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * See file CREDITS for list of people who contributed to this
18*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * project.
19*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
20*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * This program is free software; you can redistribute it and/or
21*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * modify it under the terms of the GNU General Public License as
22*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * published by the Free Software Foundation; either version 2 of
23*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * the License, or (at your option) any later version.
24*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
25*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * This program is distributed in the hope that it will be useful,
26*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
28*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * GNU General Public License for more details.
29*576afd4fSJean-Christophe PLAGNIOL-VILLARD  *
30*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * You should have received a copy of the GNU General Public License
31*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * along with this program; if not, write to the Free Software
32*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
33*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * MA 02111-1307 USA
34*576afd4fSJean-Christophe PLAGNIOL-VILLARD  */
35*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
36*576afd4fSJean-Christophe PLAGNIOL-VILLARD #include <common.h>
37*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_PCI
38*576afd4fSJean-Christophe PLAGNIOL-VILLARD #include <netdev.h>
39*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
40*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
41*576afd4fSJean-Christophe PLAGNIOL-VILLARD DECLARE_GLOBAL_DATA_PTR;
42*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
43*576afd4fSJean-Christophe PLAGNIOL-VILLARD void peripheral_power_enable (void);
44*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
45*576afd4fSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SHOW_BOOT_PROGRESS)
46*576afd4fSJean-Christophe PLAGNIOL-VILLARD void show_boot_progress(int progress)
47*576afd4fSJean-Christophe PLAGNIOL-VILLARD {
48*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	printf("Boot reached stage %d\n", progress);
49*576afd4fSJean-Christophe PLAGNIOL-VILLARD }
50*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
51*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
52*576afd4fSJean-Christophe PLAGNIOL-VILLARD #define COMP_MODE_ENABLE ((unsigned int)0x0000EAEF)
53*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
54*576afd4fSJean-Christophe PLAGNIOL-VILLARD /*
55*576afd4fSJean-Christophe PLAGNIOL-VILLARD  * Miscellaneous platform dependent initialisations
56*576afd4fSJean-Christophe PLAGNIOL-VILLARD  */
57*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
58*576afd4fSJean-Christophe PLAGNIOL-VILLARD int board_init (void)
59*576afd4fSJean-Christophe PLAGNIOL-VILLARD {
60*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	/* arch number of Integrator Board */
61*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_ARCH_CINTEGRATOR
62*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_arch_number = MACH_TYPE_CINTEGRATOR;
63*576afd4fSJean-Christophe PLAGNIOL-VILLARD #else
64*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_arch_number = MACH_TYPE_INTEGRATOR;
65*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
66*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
67*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	/* adress of boot parameters */
68*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_boot_params = 0x00000100;
69*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
70*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->flags = 0;
71*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
72*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CM_REMAP
73*576afd4fSJean-Christophe PLAGNIOL-VILLARD extern void cm_remap(void);
74*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	cm_remap();	/* remaps writeable memory to 0x00000000 */
75*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
76*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
77*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	icache_enable ();
78*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
79*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	return 0;
80*576afd4fSJean-Christophe PLAGNIOL-VILLARD }
81*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
82*576afd4fSJean-Christophe PLAGNIOL-VILLARD int misc_init_r (void)
83*576afd4fSJean-Christophe PLAGNIOL-VILLARD {
84*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_PCI
85*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	pci_init();
86*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
87*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	setenv("verify", "n");
88*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	return (0);
89*576afd4fSJean-Christophe PLAGNIOL-VILLARD }
90*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
91*576afd4fSJean-Christophe PLAGNIOL-VILLARD /******************************
92*576afd4fSJean-Christophe PLAGNIOL-VILLARD  Routine:
93*576afd4fSJean-Christophe PLAGNIOL-VILLARD  Description:
94*576afd4fSJean-Christophe PLAGNIOL-VILLARD ******************************/
95*576afd4fSJean-Christophe PLAGNIOL-VILLARD int dram_init (void)
96*576afd4fSJean-Christophe PLAGNIOL-VILLARD {
97*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
98*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_dram[0].size	 = PHYS_SDRAM_1_SIZE;
99*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
100*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_CM_SPD_DETECT
101*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	{
102*576afd4fSJean-Christophe PLAGNIOL-VILLARD extern void dram_query(void);
103*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	unsigned long cm_reg_sdram;
104*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	unsigned long sdram_shift;
105*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
106*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	dram_query();	/* Assembler accesses to CM registers */
107*576afd4fSJean-Christophe PLAGNIOL-VILLARD 			/* Queries the SPD values	      */
108*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
109*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	/* Obtain the SDRAM size from the CM SDRAM register */
110*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
111*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	cm_reg_sdram = *(volatile ulong *)(CM_BASE + OS_SDRAM);
112*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	/*   Register	      SDRAM size
113*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *
114*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *   0xXXXXXXbbb000bb	 16 MB
115*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *   0xXXXXXXbbb001bb	 32 MB
116*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *   0xXXXXXXbbb010bb	 64 MB
117*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *   0xXXXXXXbbb011bb	128 MB
118*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *   0xXXXXXXbbb100bb	256 MB
119*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 *
120*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	 */
121*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	sdram_shift		 = ((cm_reg_sdram & 0x0000001C)/4)%4;
122*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	gd->bd->bi_dram[0].size	 = 0x01000000 << sdram_shift;
123*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
124*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	}
125*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif /* CM_SPD_DETECT */
126*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
127*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	return 0;
128*576afd4fSJean-Christophe PLAGNIOL-VILLARD }
129*576afd4fSJean-Christophe PLAGNIOL-VILLARD 
130*576afd4fSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_PCI
131*576afd4fSJean-Christophe PLAGNIOL-VILLARD int board_eth_init(bd_t *bis)
132*576afd4fSJean-Christophe PLAGNIOL-VILLARD {
133*576afd4fSJean-Christophe PLAGNIOL-VILLARD 	return pci_eth_init(bis);
134*576afd4fSJean-Christophe PLAGNIOL-VILLARD }
135*576afd4fSJean-Christophe PLAGNIOL-VILLARD #endif
136