rk322x-board-spl.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * (C) Copyright 2017 Rockchip Electronics Co., Ltd
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <debug_uart.h>
  8. #include <dm.h>
  9. #include <ram.h>
  10. #include <spl.h>
  11. #include <asm/io.h>
  12. #include <asm/arch/bootrom.h>
  13. #include <asm/arch/cru_rk322x.h>
  14. #include <asm/arch/grf_rk322x.h>
  15. #include <asm/arch/hardware.h>
  16. #include <asm/arch/timer.h>
  17. #include <asm/arch/uart.h>
  18. u32 spl_boot_device(void)
  19. {
  20. return BOOT_DEVICE_MMC1;
  21. }
  22. DECLARE_GLOBAL_DATA_PTR;
  23. #define GRF_BASE 0x11000000
  24. #define SGRF_BASE 0x10140000
  25. #define DEBUG_UART_BASE 0x11030000
  26. void board_debug_uart_init(void)
  27. {
  28. static struct rk322x_grf * const grf = (void *)GRF_BASE;
  29. /* Enable early UART2 channel 1 on the RK322x */
  30. rk_clrsetreg(&grf->gpio1b_iomux,
  31. GPIO1B1_MASK | GPIO1B2_MASK,
  32. GPIO1B2_UART21_SIN << GPIO1B2_SHIFT |
  33. GPIO1B1_UART21_SOUT << GPIO1B1_SHIFT);
  34. /* Set channel C as UART2 input */
  35. rk_clrsetreg(&grf->con_iomux,
  36. CON_IOMUX_UART2SEL_MASK,
  37. CON_IOMUX_UART2SEL_21 << CON_IOMUX_UART2SEL_SHIFT);
  38. }
  39. #define SGRF_DDR_CON0 0x10150000
  40. void board_init_f(ulong dummy)
  41. {
  42. struct udevice *dev;
  43. int ret;
  44. /*
  45. * Debug UART can be used from here if required:
  46. *
  47. * debug_uart_init();
  48. * printch('a');
  49. * printhex8(0x1234);
  50. * printascii("string");
  51. */
  52. debug_uart_init();
  53. printascii("SPL Init");
  54. ret = spl_early_init();
  55. if (ret) {
  56. debug("spl_early_init() failed: %d\n", ret);
  57. hang();
  58. }
  59. rockchip_timer_init();
  60. printf("timer init done\n");
  61. ret = uclass_get_device(UCLASS_RAM, 0, &dev);
  62. if (ret) {
  63. printf("DRAM init failed: %d\n", ret);
  64. return;
  65. }
  66. /* Disable the ddr secure region setting to make it non-secure */
  67. rk_clrreg(SGRF_DDR_CON0, 0x4000);
  68. #if defined(CONFIG_ROCKCHIP_SPL_BACK_TO_BROM) && !defined(CONFIG_SPL_BOARD_INIT)
  69. back_to_bootrom(BROM_BOOT_NEXTSTAGE);
  70. #endif
  71. }