xref: /openbmc/u-boot/board/BuS/eb_cpu5282/eb_cpu5282.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2eb0b43f2SJens Scharsig /*
3eb0b43f2SJens Scharsig  * (C) Copyright 2005-2009
4eb0b43f2SJens Scharsig  * BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
5eb0b43f2SJens Scharsig  *
6eb0b43f2SJens Scharsig  * (C) Copyright 2000-2003
7eb0b43f2SJens Scharsig  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
8eb0b43f2SJens Scharsig  */
9eb0b43f2SJens Scharsig 
10eb0b43f2SJens Scharsig #include <common.h>
11eb0b43f2SJens Scharsig #include <command.h>
12eb0b43f2SJens Scharsig #include "asm/m5282.h"
13eb0b43f2SJens Scharsig #include <bmp_layout.h>
14eb0b43f2SJens Scharsig #include <status_led.h>
15eb0b43f2SJens Scharsig #include <bus_vcxk.h>
16eb0b43f2SJens Scharsig 
17eb0b43f2SJens Scharsig /*---------------------------------------------------------------------------*/
18eb0b43f2SJens Scharsig 
19eb0b43f2SJens Scharsig DECLARE_GLOBAL_DATA_PTR;
20eb0b43f2SJens Scharsig 
21d858c335SJens Scharsig (BuS Elektronik) #ifdef CONFIG_VIDEO
22eb0b43f2SJens Scharsig unsigned long display_width;
23eb0b43f2SJens Scharsig unsigned long display_height;
24d858c335SJens Scharsig (BuS Elektronik) #endif
25eb0b43f2SJens Scharsig 
26eb0b43f2SJens Scharsig /*---------------------------------------------------------------------------*/
27eb0b43f2SJens Scharsig 
checkboard(void)28eb0b43f2SJens Scharsig int checkboard (void)
29eb0b43f2SJens Scharsig {
30d858c335SJens Scharsig (BuS Elektronik) 	puts("Board: EB+CPU5282 (BuS Elektronik GmbH & Co. KG)\n");
31eb0b43f2SJens Scharsig #if (CONFIG_SYS_TEXT_BASE ==  CONFIG_SYS_INT_FLASH_BASE)
32eb0b43f2SJens Scharsig 	puts("       Boot from Internal FLASH\n");
33eb0b43f2SJens Scharsig #endif
34eb0b43f2SJens Scharsig 	return 0;
35eb0b43f2SJens Scharsig }
36eb0b43f2SJens Scharsig 
dram_init(void)37f1683aa7SSimon Glass int dram_init(void)
38eb0b43f2SJens Scharsig {
39eb0b43f2SJens Scharsig 	int size, i;
40eb0b43f2SJens Scharsig 
41eb0b43f2SJens Scharsig 	size = 0;
42d858c335SJens Scharsig (BuS Elektronik) 	MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6 |
43d858c335SJens Scharsig (BuS Elektronik) 			MCFSDRAMC_DCR_RC((15 * CONFIG_SYS_CLK / 1000000) >> 4);
44d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
45eb0b43f2SJens Scharsig #ifdef CONFIG_SYS_SDRAM_BASE0
46d858c335SJens Scharsig (BuS Elektronik) 	MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE0)|
47d858c335SJens Scharsig (BuS Elektronik) 		MCFSDRAMC_DACR_CASL(1) | MCFSDRAMC_DACR_CBM(3) |
48d858c335SJens Scharsig (BuS Elektronik) 		MCFSDRAMC_DACR_PS_32;
49d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
50eb0b43f2SJens Scharsig 
51eb0b43f2SJens Scharsig 	MCFSDRAMC_DMR0 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
52d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
53eb0b43f2SJens Scharsig 
54eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
55d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
56d858c335SJens Scharsig (BuS Elektronik) 	for (i = 0; i < 10; i++)
57d858c335SJens Scharsig (BuS Elektronik) 		asm (" nop");
58eb0b43f2SJens Scharsig 
59d858c335SJens Scharsig (BuS Elektronik) 	*(unsigned long *)(CONFIG_SYS_SDRAM_BASE0) = 0xA5A5A5A5;
60d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
61eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
62d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
63d858c335SJens Scharsig (BuS Elektronik) 
64eb0b43f2SJens Scharsig 	for (i = 0; i < 2000; i++)
65eb0b43f2SJens Scharsig 		asm (" nop");
66d858c335SJens Scharsig (BuS Elektronik) 
67d858c335SJens Scharsig (BuS Elektronik) 	MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
68d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
69d858c335SJens Scharsig (BuS Elektronik) 	/* write SDRAM mode register */
70d858c335SJens Scharsig (BuS Elektronik) 	*(unsigned long *)(CONFIG_SYS_SDRAM_BASE0 + 0x80440) = 0xA5A5A5A5;
71d858c335SJens Scharsig (BuS Elektronik) 	asm (" nop");
72d858c335SJens Scharsig (BuS Elektronik) 	size += CONFIG_SYS_SDRAM_SIZE0 * 1024 * 1024;
73eb0b43f2SJens Scharsig #endif
74d858c335SJens Scharsig (BuS Elektronik) #ifdef CONFIG_SYS_SDRAM_BASE1xx
75eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR1 = MCFSDRAMC_DACR_BASE (CONFIG_SYS_SDRAM_BASE1)
76eb0b43f2SJens Scharsig 			| MCFSDRAMC_DACR_CASL (1)
77eb0b43f2SJens Scharsig 			| MCFSDRAMC_DACR_CBM (3)
78eb0b43f2SJens Scharsig 			| MCFSDRAMC_DACR_PS_16;
79eb0b43f2SJens Scharsig 
80eb0b43f2SJens Scharsig 	MCFSDRAMC_DMR1 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
81eb0b43f2SJens Scharsig 
82eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IP;
83eb0b43f2SJens Scharsig 
84eb0b43f2SJens Scharsig 	*(unsigned short *) (CONFIG_SYS_SDRAM_BASE1) = 0xA5A5;
85eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_RE;
86eb0b43f2SJens Scharsig 
87eb0b43f2SJens Scharsig 	for (i = 0; i < 2000; i++)
88eb0b43f2SJens Scharsig 		asm (" nop");
89eb0b43f2SJens Scharsig 
90eb0b43f2SJens Scharsig 	MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IMRS;
91eb0b43f2SJens Scharsig 	*(unsigned int *) (CONFIG_SYS_SDRAM_BASE1 + 0x220) = 0xA5A5;
92eb0b43f2SJens Scharsig 	size += CONFIG_SYS_SDRAM_SIZE1 * 1024 * 1024;
93eb0b43f2SJens Scharsig #endif
94088454cdSSimon Glass 	gd->ram_size = size;
95088454cdSSimon Glass 
96088454cdSSimon Glass 	return 0;
97eb0b43f2SJens Scharsig }
98eb0b43f2SJens Scharsig 
99eb0b43f2SJens Scharsig #if defined(CONFIG_SYS_DRAM_TEST)
testdram(void)100eb0b43f2SJens Scharsig int testdram (void)
101eb0b43f2SJens Scharsig {
102eb0b43f2SJens Scharsig 	uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START;
103eb0b43f2SJens Scharsig 	uint *pend = (uint *) CONFIG_SYS_MEMTEST_END;
104eb0b43f2SJens Scharsig 	uint *p;
105eb0b43f2SJens Scharsig 
106eb0b43f2SJens Scharsig 	printf("SDRAM test phase 1:\n");
107eb0b43f2SJens Scharsig 	for (p = pstart; p < pend; p++)
108eb0b43f2SJens Scharsig 		*p = 0xaaaaaaaa;
109eb0b43f2SJens Scharsig 
110eb0b43f2SJens Scharsig 	for (p = pstart; p < pend; p++) {
111eb0b43f2SJens Scharsig 		if (*p != 0xaaaaaaaa) {
112eb0b43f2SJens Scharsig 			printf ("SDRAM test fails at: %08x\n", (uint) p);
113eb0b43f2SJens Scharsig 			return 1;
114eb0b43f2SJens Scharsig 		}
115eb0b43f2SJens Scharsig 	}
116eb0b43f2SJens Scharsig 
117eb0b43f2SJens Scharsig 	printf("SDRAM test phase 2:\n");
118eb0b43f2SJens Scharsig 	for (p = pstart; p < pend; p++)
119eb0b43f2SJens Scharsig 		*p = 0x55555555;
120eb0b43f2SJens Scharsig 
121eb0b43f2SJens Scharsig 	for (p = pstart; p < pend; p++) {
122eb0b43f2SJens Scharsig 		if (*p != 0x55555555) {
123eb0b43f2SJens Scharsig 			printf ("SDRAM test fails at: %08x\n", (uint) p);
124eb0b43f2SJens Scharsig 			return 1;
125eb0b43f2SJens Scharsig 		}
126eb0b43f2SJens Scharsig 	}
127eb0b43f2SJens Scharsig 
128eb0b43f2SJens Scharsig 	printf("SDRAM test passed.\n");
129eb0b43f2SJens Scharsig 	return 0;
130eb0b43f2SJens Scharsig }
131eb0b43f2SJens Scharsig #endif
132eb0b43f2SJens Scharsig 
133d858c335SJens Scharsig (BuS Elektronik) #if defined(CONFIG_HW_WATCHDOG)
134d858c335SJens Scharsig (BuS Elektronik) 
hw_watchdog_init(void)135d858c335SJens Scharsig (BuS Elektronik) void hw_watchdog_init(void)
136d858c335SJens Scharsig (BuS Elektronik) {
137d858c335SJens Scharsig (BuS Elektronik) 	char *s;
138d858c335SJens Scharsig (BuS Elektronik) 	int enable;
139d858c335SJens Scharsig (BuS Elektronik) 
140d858c335SJens Scharsig (BuS Elektronik) 	enable = 1;
14100caae6dSSimon Glass 	s = env_get("watchdog");
142d858c335SJens Scharsig (BuS Elektronik) 	if (s != NULL)
143d858c335SJens Scharsig (BuS Elektronik) 		if ((strncmp(s, "off", 3) == 0) || (strncmp(s, "0", 1) == 0))
144d858c335SJens Scharsig (BuS Elektronik) 			enable = 0;
145d858c335SJens Scharsig (BuS Elektronik) 	if (enable)
146d858c335SJens Scharsig (BuS Elektronik) 		MCFGPTA_GPTDDR  |= (1<<2);
147d858c335SJens Scharsig (BuS Elektronik) 	else
148d858c335SJens Scharsig (BuS Elektronik) 		MCFGPTA_GPTDDR  &= ~(1<<2);
149d858c335SJens Scharsig (BuS Elektronik) }
150d858c335SJens Scharsig (BuS Elektronik) 
hw_watchdog_reset(void)151d858c335SJens Scharsig (BuS Elektronik) void hw_watchdog_reset(void)
152d858c335SJens Scharsig (BuS Elektronik) {
153d858c335SJens Scharsig (BuS Elektronik) 	MCFGPTA_GPTPORT  ^= (1<<2);
154d858c335SJens Scharsig (BuS Elektronik) }
155d858c335SJens Scharsig (BuS Elektronik) #endif
156d858c335SJens Scharsig (BuS Elektronik) 
misc_init_r(void)157eb0b43f2SJens Scharsig int misc_init_r(void)
158eb0b43f2SJens Scharsig {
159eb0b43f2SJens Scharsig #ifdef	CONFIG_HW_WATCHDOG
160eb0b43f2SJens Scharsig 	hw_watchdog_init();
161eb0b43f2SJens Scharsig #endif
162eb0b43f2SJens Scharsig 	return 1;
163eb0b43f2SJens Scharsig }
164eb0b43f2SJens Scharsig 
__led_toggle(led_id_t mask)165d858c335SJens Scharsig (BuS Elektronik) void __led_toggle(led_id_t mask)
166d858c335SJens Scharsig (BuS Elektronik) {
167d858c335SJens Scharsig (BuS Elektronik) 	MCFGPTA_GPTPORT ^= (1 << 3);
168d858c335SJens Scharsig (BuS Elektronik) }
169d858c335SJens Scharsig (BuS Elektronik) 
__led_init(led_id_t mask,int state)170d858c335SJens Scharsig (BuS Elektronik) void __led_init(led_id_t mask, int state)
171d858c335SJens Scharsig (BuS Elektronik) {
172d858c335SJens Scharsig (BuS Elektronik) 	__led_set(mask, state);
173d858c335SJens Scharsig (BuS Elektronik) 	MCFGPTA_GPTDDR  |= (1 << 3);
174d858c335SJens Scharsig (BuS Elektronik) }
175d858c335SJens Scharsig (BuS Elektronik) 
__led_set(led_id_t mask,int state)176d858c335SJens Scharsig (BuS Elektronik) void __led_set(led_id_t mask, int state)
177d858c335SJens Scharsig (BuS Elektronik) {
1782d8d190cSUri Mashiach 	if (state == CONFIG_LED_STATUS_ON)
179d858c335SJens Scharsig (BuS Elektronik) 		MCFGPTA_GPTPORT |= (1 << 3);
180d858c335SJens Scharsig (BuS Elektronik) 	else
181d858c335SJens Scharsig (BuS Elektronik) 		MCFGPTA_GPTPORT &= ~(1 << 3);
182d858c335SJens Scharsig (BuS Elektronik) }
183d858c335SJens Scharsig (BuS Elektronik) 
184eb0b43f2SJens Scharsig #if defined(CONFIG_VIDEO)
185eb0b43f2SJens Scharsig 
drv_video_init(void)186eb0b43f2SJens Scharsig int drv_video_init(void)
187eb0b43f2SJens Scharsig {
188eb0b43f2SJens Scharsig 	char *s;
189d858c335SJens Scharsig (BuS Elektronik) #ifdef CONFIG_SPLASH_SCREEN
190eb0b43f2SJens Scharsig 	unsigned long splash;
191d858c335SJens Scharsig (BuS Elektronik) #endif
192eb0b43f2SJens Scharsig 	printf("Init Video as ");
19300caae6dSSimon Glass 	s = env_get("displaywidth");
194d858c335SJens Scharsig (BuS Elektronik) 	if (s != NULL)
195eb0b43f2SJens Scharsig 		display_width = simple_strtoul(s, NULL, 10);
196eb0b43f2SJens Scharsig 	else
197eb0b43f2SJens Scharsig 		display_width = 256;
198eb0b43f2SJens Scharsig 
19900caae6dSSimon Glass 	s = env_get("displayheight");
200d858c335SJens Scharsig (BuS Elektronik) 	if (s != NULL)
201eb0b43f2SJens Scharsig 		display_height = simple_strtoul(s, NULL, 10);
202eb0b43f2SJens Scharsig 	else
203eb0b43f2SJens Scharsig 		display_height = 256;
204eb0b43f2SJens Scharsig 
205eb0b43f2SJens Scharsig 	printf("%lu x %lu pixel matrix\n", display_width, display_height);
206eb0b43f2SJens Scharsig 
207eb0b43f2SJens Scharsig 	MCFCCM_CCR &= ~MCFCCM_CCR_SZEN;
208eb0b43f2SJens Scharsig 	MCFGPIO_PEPAR &= ~MCFGPIO_PEPAR_PEPA2;
209eb0b43f2SJens Scharsig 
210eb0b43f2SJens Scharsig 	vcxk_init(display_width, display_height);
211eb0b43f2SJens Scharsig 
212eb0b43f2SJens Scharsig #ifdef CONFIG_SPLASH_SCREEN
21300caae6dSSimon Glass 	s = env_get("splashimage");
214d858c335SJens Scharsig (BuS Elektronik) 	if (s != NULL) {
215eb0b43f2SJens Scharsig 		splash = simple_strtoul(s, NULL, 16);
216eb0b43f2SJens Scharsig 		vcxk_acknowledge_wait();
217eb0b43f2SJens Scharsig 		video_display_bitmap(splash, 0, 0);
218eb0b43f2SJens Scharsig 	}
219eb0b43f2SJens Scharsig #endif
220eb0b43f2SJens Scharsig 	return 0;
221eb0b43f2SJens Scharsig }
222eb0b43f2SJens Scharsig #endif
223eb0b43f2SJens Scharsig 
224eb0b43f2SJens Scharsig /*---------------------------------------------------------------------------*/
225eb0b43f2SJens Scharsig 
226eb0b43f2SJens Scharsig #ifdef CONFIG_VIDEO
do_brightness(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])227eb0b43f2SJens Scharsig int do_brightness(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
228eb0b43f2SJens Scharsig {
229eb0b43f2SJens Scharsig 	int rcode = 0;
230eb0b43f2SJens Scharsig 	ulong side;
231eb0b43f2SJens Scharsig 	ulong bright;
232eb0b43f2SJens Scharsig 
233eb0b43f2SJens Scharsig 	switch (argc) {
234eb0b43f2SJens Scharsig 	case 3:
235eb0b43f2SJens Scharsig 		side = simple_strtoul(argv[1], NULL, 10);
236eb0b43f2SJens Scharsig 		bright = simple_strtoul(argv[2], NULL, 10);
237eb0b43f2SJens Scharsig 		if ((side >= 0) && (side <= 3) &&
238eb0b43f2SJens Scharsig 			(bright >= 0) && (bright <= 1000)) {
239eb0b43f2SJens Scharsig 			vcxk_setbrightness(side, bright);
240eb0b43f2SJens Scharsig 			rcode = 0;
241eb0b43f2SJens Scharsig 		} else {
242eb0b43f2SJens Scharsig 			printf("parameters out of range\n");
243eb0b43f2SJens Scharsig 			printf("Usage:\n%s\n", cmdtp->usage);
244eb0b43f2SJens Scharsig 			rcode = 1;
245eb0b43f2SJens Scharsig 		}
246eb0b43f2SJens Scharsig 		break;
247eb0b43f2SJens Scharsig 	default:
248eb0b43f2SJens Scharsig 		printf("Usage:\n%s\n", cmdtp->usage);
249eb0b43f2SJens Scharsig 		rcode = 1;
250eb0b43f2SJens Scharsig 		break;
251eb0b43f2SJens Scharsig 	}
252eb0b43f2SJens Scharsig 	return rcode;
253eb0b43f2SJens Scharsig }
254eb0b43f2SJens Scharsig 
255eb0b43f2SJens Scharsig /*---------------------------------------------------------------------------*/
256eb0b43f2SJens Scharsig 
257eb0b43f2SJens Scharsig U_BOOT_CMD(
258eb0b43f2SJens Scharsig 	bright,	3,	0,	do_brightness,
259eb0b43f2SJens Scharsig 	"sets the display brightness\n",
260eb0b43f2SJens Scharsig 	" <side> <0..1000>\n        side: 0/3=both; 1=first; 2=second\n"
261eb0b43f2SJens Scharsig );
262eb0b43f2SJens Scharsig 
263eb0b43f2SJens Scharsig #endif
264eb0b43f2SJens Scharsig 
265eb0b43f2SJens Scharsig /* EOF EB+MCF-EV123.c */
266