arndale.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2013 Samsung Electronics
  4. */
  5. #include <common.h>
  6. #include <usb.h>
  7. #include <asm/gpio.h>
  8. #include <asm/arch/pinmux.h>
  9. #include <asm/arch/dwmmc.h>
  10. #include <asm/arch/power.h>
  11. DECLARE_GLOBAL_DATA_PTR;
  12. #ifdef CONFIG_USB_EHCI_EXYNOS
  13. int board_usb_init(int index, enum usb_init_type init)
  14. {
  15. /* Configure gpios for usb 3503 hub:
  16. * disconnect, toggle reset and connect
  17. */
  18. gpio_request(EXYNOS5_GPIO_D17, "usb_connect");
  19. gpio_request(EXYNOS5_GPIO_X35, "usb_reset");
  20. gpio_direction_output(EXYNOS5_GPIO_D17, 0);
  21. gpio_direction_output(EXYNOS5_GPIO_X35, 0);
  22. gpio_direction_output(EXYNOS5_GPIO_X35, 1);
  23. gpio_direction_output(EXYNOS5_GPIO_D17, 1);
  24. return 0;
  25. }
  26. #endif
  27. int board_init(void)
  28. {
  29. gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
  30. return 0;
  31. }
  32. int dram_init(void)
  33. {
  34. int i;
  35. u32 addr;
  36. for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
  37. addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE);
  38. gd->ram_size += get_ram_size((long *)addr, SDRAM_BANK_SIZE);
  39. }
  40. return 0;
  41. }
  42. int power_init_board(void)
  43. {
  44. set_ps_hold_ctrl();
  45. return 0;
  46. }
  47. int dram_init_banksize(void)
  48. {
  49. int i;
  50. u32 addr, size;
  51. for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
  52. addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE);
  53. size = get_ram_size((long *)addr, SDRAM_BANK_SIZE);
  54. gd->bd->bi_dram[i].start = addr;
  55. gd->bd->bi_dram[i].size = size;
  56. }
  57. return 0;
  58. }
  59. #ifdef CONFIG_MMC
  60. int board_mmc_init(bd_t *bis)
  61. {
  62. int ret;
  63. /* dwmmc initializattion for available channels */
  64. ret = exynos_dwmmc_init(gd->fdt_blob);
  65. if (ret)
  66. debug("dwmmc init failed\n");
  67. return ret;
  68. }
  69. #endif
  70. static int board_uart_init(void)
  71. {
  72. int err = 0, uart_id;
  73. for (uart_id = PERIPH_ID_UART0; uart_id <= PERIPH_ID_UART3; uart_id++) {
  74. err = exynos_pinmux_config(uart_id, PINMUX_FLAG_NONE);
  75. if (err) {
  76. debug("UART%d not configured\n",
  77. (uart_id - PERIPH_ID_UART0));
  78. return err;
  79. }
  80. }
  81. return err;
  82. }
  83. #ifdef CONFIG_BOARD_EARLY_INIT_F
  84. int board_early_init_f(void)
  85. {
  86. int err;
  87. err = board_uart_init();
  88. if (err) {
  89. debug("UART init failed\n");
  90. return err;
  91. }
  92. return err;
  93. }
  94. #endif
  95. #ifdef CONFIG_DISPLAY_BOARDINFO
  96. int checkboard(void)
  97. {
  98. printf("\nBoard: Arndale\n");
  99. return 0;
  100. }
  101. #endif
  102. #ifdef CONFIG_S5P_PA_SYSRAM
  103. void smp_set_core_boot_addr(unsigned long addr, int corenr)
  104. {
  105. writel(addr, CONFIG_S5P_PA_SYSRAM);
  106. /* make sure this write is really executed */
  107. __asm__ volatile ("dsb\n");
  108. }
  109. #endif