123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- // SPDX-License-Identifier: GPL-2.0+
- /*
- * (C) Copyright 2005-2009
- * BuS Elektronik GmbH & Co.KG <esw@bus-elektonik.de>
- *
- * (C) Copyright 2000-2003
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- */
- #include <common.h>
- #include <command.h>
- #include "asm/m5282.h"
- #include <bmp_layout.h>
- #include <env.h>
- #include <init.h>
- #include <status_led.h>
- #include <bus_vcxk.h>
- /*---------------------------------------------------------------------------*/
- DECLARE_GLOBAL_DATA_PTR;
- #ifdef CONFIG_VIDEO
- unsigned long display_width;
- unsigned long display_height;
- #endif
- /*---------------------------------------------------------------------------*/
- int checkboard (void)
- {
- puts("Board: EB+CPU5282 (BuS Elektronik GmbH & Co. KG)\n");
- #if (CONFIG_SYS_TEXT_BASE == CONFIG_SYS_INT_FLASH_BASE)
- puts(" Boot from Internal FLASH\n");
- #endif
- return 0;
- }
- int dram_init(void)
- {
- int size, i;
- size = 0;
- MCFSDRAMC_DCR = MCFSDRAMC_DCR_RTIM_6 |
- MCFSDRAMC_DCR_RC((15 * CONFIG_SYS_CLK / 1000000) >> 4);
- asm (" nop");
- #ifdef CONFIG_SYS_SDRAM_BASE0
- MCFSDRAMC_DACR0 = MCFSDRAMC_DACR_BASE(CONFIG_SYS_SDRAM_BASE0)|
- MCFSDRAMC_DACR_CASL(1) | MCFSDRAMC_DACR_CBM(3) |
- MCFSDRAMC_DACR_PS_32;
- asm (" nop");
- MCFSDRAMC_DMR0 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
- asm (" nop");
- MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IP;
- asm (" nop");
- for (i = 0; i < 10; i++)
- asm (" nop");
- *(unsigned long *)(CONFIG_SYS_SDRAM_BASE0) = 0xA5A5A5A5;
- asm (" nop");
- MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_RE;
- asm (" nop");
- for (i = 0; i < 2000; i++)
- asm (" nop");
- MCFSDRAMC_DACR0 |= MCFSDRAMC_DACR_IMRS;
- asm (" nop");
- /* write SDRAM mode register */
- *(unsigned long *)(CONFIG_SYS_SDRAM_BASE0 + 0x80440) = 0xA5A5A5A5;
- asm (" nop");
- size += CONFIG_SYS_SDRAM_SIZE0 * 1024 * 1024;
- #endif
- #ifdef CONFIG_SYS_SDRAM_BASE1xx
- MCFSDRAMC_DACR1 = MCFSDRAMC_DACR_BASE (CONFIG_SYS_SDRAM_BASE1)
- | MCFSDRAMC_DACR_CASL (1)
- | MCFSDRAMC_DACR_CBM (3)
- | MCFSDRAMC_DACR_PS_16;
- MCFSDRAMC_DMR1 = MCFSDRAMC_DMR_BAM_16M | MCFSDRAMC_DMR_V;
- MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IP;
- *(unsigned short *) (CONFIG_SYS_SDRAM_BASE1) = 0xA5A5;
- MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_RE;
- for (i = 0; i < 2000; i++)
- asm (" nop");
- MCFSDRAMC_DACR1 |= MCFSDRAMC_DACR_IMRS;
- *(unsigned int *) (CONFIG_SYS_SDRAM_BASE1 + 0x220) = 0xA5A5;
- size += CONFIG_SYS_SDRAM_SIZE1 * 1024 * 1024;
- #endif
- gd->ram_size = size;
- return 0;
- }
- #if defined(CONFIG_SYS_DRAM_TEST)
- int testdram(void)
- {
- uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START;
- uint *pend = (uint *) CONFIG_SYS_MEMTEST_END;
- uint *p;
- printf("SDRAM test phase 1:\n");
- for (p = pstart; p < pend; p++)
- *p = 0xaaaaaaaa;
- for (p = pstart; p < pend; p++) {
- if (*p != 0xaaaaaaaa) {
- printf ("SDRAM test fails at: %08x\n", (uint) p);
- return 1;
- }
- }
- printf("SDRAM test phase 2:\n");
- for (p = pstart; p < pend; p++)
- *p = 0x55555555;
- for (p = pstart; p < pend; p++) {
- if (*p != 0x55555555) {
- printf ("SDRAM test fails at: %08x\n", (uint) p);
- return 1;
- }
- }
- printf("SDRAM test passed.\n");
- return 0;
- }
- #endif
- #if defined(CONFIG_HW_WATCHDOG)
- void hw_watchdog_init(void)
- {
- char *s;
- int enable;
- enable = 1;
- s = env_get("watchdog");
- if (s != NULL)
- if ((strncmp(s, "off", 3) == 0) || (strncmp(s, "0", 1) == 0))
- enable = 0;
- if (enable)
- MCFGPTA_GPTDDR |= (1<<2);
- else
- MCFGPTA_GPTDDR &= ~(1<<2);
- }
- void hw_watchdog_reset(void)
- {
- MCFGPTA_GPTPORT ^= (1<<2);
- }
- #endif
- int misc_init_r(void)
- {
- #ifdef CONFIG_HW_WATCHDOG
- hw_watchdog_init();
- #endif
- return 1;
- }
- void __led_toggle(led_id_t mask)
- {
- MCFGPTA_GPTPORT ^= (1 << 3);
- }
- void __led_init(led_id_t mask, int state)
- {
- __led_set(mask, state);
- MCFGPTA_GPTDDR |= (1 << 3);
- }
- void __led_set(led_id_t mask, int state)
- {
- if (state == CONFIG_LED_STATUS_ON)
- MCFGPTA_GPTPORT |= (1 << 3);
- else
- MCFGPTA_GPTPORT &= ~(1 << 3);
- }
- #if defined(CONFIG_VIDEO)
- int drv_video_init(void)
- {
- char *s;
- #ifdef CONFIG_SPLASH_SCREEN
- unsigned long splash;
- #endif
- printf("Init Video as ");
- s = env_get("displaywidth");
- if (s != NULL)
- display_width = simple_strtoul(s, NULL, 10);
- else
- display_width = 256;
- s = env_get("displayheight");
- if (s != NULL)
- display_height = simple_strtoul(s, NULL, 10);
- else
- display_height = 256;
- printf("%lu x %lu pixel matrix\n", display_width, display_height);
- MCFCCM_CCR &= ~MCFCCM_CCR_SZEN;
- MCFGPIO_PEPAR &= ~MCFGPIO_PEPAR_PEPA2;
- vcxk_init(display_width, display_height);
- #ifdef CONFIG_SPLASH_SCREEN
- s = env_get("splashimage");
- if (s != NULL) {
- splash = simple_strtoul(s, NULL, 16);
- vcxk_acknowledge_wait();
- video_display_bitmap(splash, 0, 0);
- }
- #endif
- return 0;
- }
- #endif
- /*---------------------------------------------------------------------------*/
- #ifdef CONFIG_VIDEO
- int do_brightness(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
- {
- int rcode = 0;
- ulong side;
- ulong bright;
- switch (argc) {
- case 3:
- side = simple_strtoul(argv[1], NULL, 10);
- bright = simple_strtoul(argv[2], NULL, 10);
- if ((side >= 0) && (side <= 3) &&
- (bright >= 0) && (bright <= 1000)) {
- vcxk_setbrightness(side, bright);
- rcode = 0;
- } else {
- printf("parameters out of range\n");
- printf("Usage:\n%s\n", cmdtp->usage);
- rcode = 1;
- }
- break;
- default:
- printf("Usage:\n%s\n", cmdtp->usage);
- rcode = 1;
- break;
- }
- return rcode;
- }
- /*---------------------------------------------------------------------------*/
- U_BOOT_CMD(
- bright, 3, 0, do_brightness,
- "sets the display brightness\n",
- " <side> <0..1000>\n side: 0/3=both; 1=first; 2=second\n"
- );
- #endif
- /* EOF EB+MCF-EV123.c */
|