arndale.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. * Copyright (C) 2013 Samsung Electronics
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <usb.h>
  8. #include <asm/gpio.h>
  9. #include <asm/arch/pinmux.h>
  10. #include <asm/arch/dwmmc.h>
  11. #include <asm/arch/power.h>
  12. DECLARE_GLOBAL_DATA_PTR;
  13. #ifdef CONFIG_USB_EHCI_EXYNOS
  14. int board_usb_init(int index, enum usb_init_type init)
  15. {
  16. /* Configure gpios for usb 3503 hub:
  17. * disconnect, toggle reset and connect
  18. */
  19. gpio_request(EXYNOS5_GPIO_D17, "usb_connect");
  20. gpio_request(EXYNOS5_GPIO_X35, "usb_reset");
  21. gpio_direction_output(EXYNOS5_GPIO_D17, 0);
  22. gpio_direction_output(EXYNOS5_GPIO_X35, 0);
  23. gpio_direction_output(EXYNOS5_GPIO_X35, 1);
  24. gpio_direction_output(EXYNOS5_GPIO_D17, 1);
  25. return 0;
  26. }
  27. #endif
  28. int board_init(void)
  29. {
  30. gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL);
  31. return 0;
  32. }
  33. int dram_init(void)
  34. {
  35. int i;
  36. u32 addr;
  37. for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
  38. addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE);
  39. gd->ram_size += get_ram_size((long *)addr, SDRAM_BANK_SIZE);
  40. }
  41. return 0;
  42. }
  43. int power_init_board(void)
  44. {
  45. set_ps_hold_ctrl();
  46. return 0;
  47. }
  48. void dram_init_banksize(void)
  49. {
  50. int i;
  51. u32 addr, size;
  52. for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
  53. addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE);
  54. size = get_ram_size((long *)addr, SDRAM_BANK_SIZE);
  55. gd->bd->bi_dram[i].start = addr;
  56. gd->bd->bi_dram[i].size = size;
  57. }
  58. }
  59. #ifdef CONFIG_GENERIC_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