eb_cpu5282.c 5.5 KB

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