1a2ac68fbSChander Kashyap /* 2a2ac68fbSChander Kashyap * Copyright (C) 2013 Samsung Electronics 3a2ac68fbSChander Kashyap * 4a2ac68fbSChander Kashyap * SPDX-License-Identifier: GPL-2.0+ 5a2ac68fbSChander Kashyap */ 6a2ac68fbSChander Kashyap 7a2ac68fbSChander Kashyap #include <common.h> 87da76512SInderpal Singh #include <usb.h> 9*903fd795SSimon Glass #include <asm/gpio.h> 10a2ac68fbSChander Kashyap #include <asm/arch/pinmux.h> 11cc2b1012SInderpal Singh #include <asm/arch/dwmmc.h> 12a2ac68fbSChander Kashyap #include <asm/arch/power.h> 13a2ac68fbSChander Kashyap 14a2ac68fbSChander Kashyap DECLARE_GLOBAL_DATA_PTR; 15a2ac68fbSChander Kashyap 167da76512SInderpal Singh #ifdef CONFIG_USB_EHCI_EXYNOS 177da76512SInderpal Singh int board_usb_init(int index, enum usb_init_type init) 187da76512SInderpal Singh { 197da76512SInderpal Singh /* Configure gpios for usb 3503 hub: 207da76512SInderpal Singh * disconnect, toggle reset and connect 217da76512SInderpal Singh */ 22f6ae1ca0SAkshay Saraswat gpio_direction_output(EXYNOS5_GPIO_D17, 0); 23f6ae1ca0SAkshay Saraswat gpio_direction_output(EXYNOS5_GPIO_X35, 0); 247da76512SInderpal Singh 25f6ae1ca0SAkshay Saraswat gpio_direction_output(EXYNOS5_GPIO_X35, 1); 26f6ae1ca0SAkshay Saraswat gpio_direction_output(EXYNOS5_GPIO_D17, 1); 277da76512SInderpal Singh 287da76512SInderpal Singh return 0; 297da76512SInderpal Singh } 307da76512SInderpal Singh #endif 317da76512SInderpal Singh 32a2ac68fbSChander Kashyap int board_init(void) 33a2ac68fbSChander Kashyap { 34a2ac68fbSChander Kashyap gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL); 35a2ac68fbSChander Kashyap return 0; 36a2ac68fbSChander Kashyap } 37a2ac68fbSChander Kashyap 38a2ac68fbSChander Kashyap int dram_init(void) 39a2ac68fbSChander Kashyap { 40a2ac68fbSChander Kashyap int i; 41a2ac68fbSChander Kashyap u32 addr; 42a2ac68fbSChander Kashyap 43a2ac68fbSChander Kashyap for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { 44a2ac68fbSChander Kashyap addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE); 45a2ac68fbSChander Kashyap gd->ram_size += get_ram_size((long *)addr, SDRAM_BANK_SIZE); 46a2ac68fbSChander Kashyap } 47a2ac68fbSChander Kashyap return 0; 48a2ac68fbSChander Kashyap } 49a2ac68fbSChander Kashyap 50a2ac68fbSChander Kashyap int power_init_board(void) 51a2ac68fbSChander Kashyap { 52a2ac68fbSChander Kashyap set_ps_hold_ctrl(); 53a2ac68fbSChander Kashyap return 0; 54a2ac68fbSChander Kashyap } 55a2ac68fbSChander Kashyap 56a2ac68fbSChander Kashyap void dram_init_banksize(void) 57a2ac68fbSChander Kashyap { 58a2ac68fbSChander Kashyap int i; 59a2ac68fbSChander Kashyap u32 addr, size; 60a2ac68fbSChander Kashyap 61a2ac68fbSChander Kashyap for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { 62a2ac68fbSChander Kashyap addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE); 63a2ac68fbSChander Kashyap size = get_ram_size((long *)addr, SDRAM_BANK_SIZE); 64a2ac68fbSChander Kashyap 65a2ac68fbSChander Kashyap gd->bd->bi_dram[i].start = addr; 66a2ac68fbSChander Kashyap gd->bd->bi_dram[i].size = size; 67a2ac68fbSChander Kashyap } 68a2ac68fbSChander Kashyap } 69a2ac68fbSChander Kashyap 70cc2b1012SInderpal Singh #ifdef CONFIG_GENERIC_MMC 71cc2b1012SInderpal Singh int board_mmc_init(bd_t *bis) 72cc2b1012SInderpal Singh { 73cc2b1012SInderpal Singh int ret; 74cc2b1012SInderpal Singh /* dwmmc initializattion for available channels */ 75cc2b1012SInderpal Singh ret = exynos_dwmmc_init(gd->fdt_blob); 76cc2b1012SInderpal Singh if (ret) 77cc2b1012SInderpal Singh debug("dwmmc init failed\n"); 78cc2b1012SInderpal Singh 79cc2b1012SInderpal Singh return ret; 80cc2b1012SInderpal Singh } 81cc2b1012SInderpal Singh #endif 82cc2b1012SInderpal Singh 83a2ac68fbSChander Kashyap static int board_uart_init(void) 84a2ac68fbSChander Kashyap { 85a2ac68fbSChander Kashyap int err = 0, uart_id; 86a2ac68fbSChander Kashyap 87a2ac68fbSChander Kashyap for (uart_id = PERIPH_ID_UART0; uart_id <= PERIPH_ID_UART3; uart_id++) { 88a2ac68fbSChander Kashyap err = exynos_pinmux_config(uart_id, PINMUX_FLAG_NONE); 89a2ac68fbSChander Kashyap if (err) { 90a2ac68fbSChander Kashyap debug("UART%d not configured\n", 91a2ac68fbSChander Kashyap (uart_id - PERIPH_ID_UART0)); 92a2ac68fbSChander Kashyap return err; 93a2ac68fbSChander Kashyap } 94a2ac68fbSChander Kashyap } 95a2ac68fbSChander Kashyap return err; 96a2ac68fbSChander Kashyap } 97a2ac68fbSChander Kashyap 98a2ac68fbSChander Kashyap #ifdef CONFIG_BOARD_EARLY_INIT_F 99a2ac68fbSChander Kashyap int board_early_init_f(void) 100a2ac68fbSChander Kashyap { 101a2ac68fbSChander Kashyap int err; 102a2ac68fbSChander Kashyap 103a2ac68fbSChander Kashyap err = board_uart_init(); 104a2ac68fbSChander Kashyap if (err) { 105a2ac68fbSChander Kashyap debug("UART init failed\n"); 106a2ac68fbSChander Kashyap return err; 107a2ac68fbSChander Kashyap } 108a2ac68fbSChander Kashyap return err; 109a2ac68fbSChander Kashyap } 110a2ac68fbSChander Kashyap #endif 111a2ac68fbSChander Kashyap 112a2ac68fbSChander Kashyap #ifdef CONFIG_DISPLAY_BOARDINFO 113a2ac68fbSChander Kashyap int checkboard(void) 114a2ac68fbSChander Kashyap { 115a2ac68fbSChander Kashyap printf("\nBoard: Arndale\n"); 116a2ac68fbSChander Kashyap 117a2ac68fbSChander Kashyap return 0; 118a2ac68fbSChander Kashyap } 119a2ac68fbSChander Kashyap #endif 120fafbc6c0SAndre Przywara 121fafbc6c0SAndre Przywara #ifdef CONFIG_S5P_PA_SYSRAM 122fafbc6c0SAndre Przywara void smp_set_core_boot_addr(unsigned long addr, int corenr) 123fafbc6c0SAndre Przywara { 124fafbc6c0SAndre Przywara writel(addr, CONFIG_S5P_PA_SYSRAM); 125fafbc6c0SAndre Przywara 126fafbc6c0SAndre Przywara /* make sure this write is really executed */ 127fafbc6c0SAndre Przywara __asm__ volatile ("dsb\n"); 128fafbc6c0SAndre Przywara } 129fafbc6c0SAndre Przywara #endif 130