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> 8*7da76512SInderpal Singh #include <usb.h> 9a2ac68fbSChander Kashyap #include <asm/arch/pinmux.h> 10cc2b1012SInderpal Singh #include <asm/arch/dwmmc.h> 11*7da76512SInderpal Singh #include <asm/arch/gpio.h> 12a2ac68fbSChander Kashyap #include <asm/arch/power.h> 13a2ac68fbSChander Kashyap 14a2ac68fbSChander Kashyap DECLARE_GLOBAL_DATA_PTR; 15a2ac68fbSChander Kashyap 16*7da76512SInderpal Singh #ifdef CONFIG_USB_EHCI_EXYNOS 17*7da76512SInderpal Singh int board_usb_init(int index, enum usb_init_type init) 18*7da76512SInderpal Singh { 19*7da76512SInderpal Singh struct exynos5_gpio_part1 *gpio = (struct exynos5_gpio_part1 *) 20*7da76512SInderpal Singh samsung_get_base_gpio_part1(); 21*7da76512SInderpal Singh 22*7da76512SInderpal Singh /* Configure gpios for usb 3503 hub: 23*7da76512SInderpal Singh * disconnect, toggle reset and connect 24*7da76512SInderpal Singh */ 25*7da76512SInderpal Singh s5p_gpio_direction_output(&gpio->d1, 7, 0); 26*7da76512SInderpal Singh s5p_gpio_direction_output(&gpio->x3, 5, 0); 27*7da76512SInderpal Singh 28*7da76512SInderpal Singh s5p_gpio_direction_output(&gpio->x3, 5, 1); 29*7da76512SInderpal Singh s5p_gpio_direction_output(&gpio->d1, 7, 1); 30*7da76512SInderpal Singh 31*7da76512SInderpal Singh return 0; 32*7da76512SInderpal Singh } 33*7da76512SInderpal Singh #endif 34*7da76512SInderpal Singh 35a2ac68fbSChander Kashyap int board_init(void) 36a2ac68fbSChander Kashyap { 37a2ac68fbSChander Kashyap gd->bd->bi_boot_params = (PHYS_SDRAM_1 + 0x100UL); 38a2ac68fbSChander Kashyap return 0; 39a2ac68fbSChander Kashyap } 40a2ac68fbSChander Kashyap 41a2ac68fbSChander Kashyap int dram_init(void) 42a2ac68fbSChander Kashyap { 43a2ac68fbSChander Kashyap int i; 44a2ac68fbSChander Kashyap u32 addr; 45a2ac68fbSChander Kashyap 46a2ac68fbSChander Kashyap for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { 47a2ac68fbSChander Kashyap addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE); 48a2ac68fbSChander Kashyap gd->ram_size += get_ram_size((long *)addr, SDRAM_BANK_SIZE); 49a2ac68fbSChander Kashyap } 50a2ac68fbSChander Kashyap return 0; 51a2ac68fbSChander Kashyap } 52a2ac68fbSChander Kashyap 53a2ac68fbSChander Kashyap int power_init_board(void) 54a2ac68fbSChander Kashyap { 55a2ac68fbSChander Kashyap set_ps_hold_ctrl(); 56a2ac68fbSChander Kashyap return 0; 57a2ac68fbSChander Kashyap } 58a2ac68fbSChander Kashyap 59a2ac68fbSChander Kashyap void dram_init_banksize(void) 60a2ac68fbSChander Kashyap { 61a2ac68fbSChander Kashyap int i; 62a2ac68fbSChander Kashyap u32 addr, size; 63a2ac68fbSChander Kashyap 64a2ac68fbSChander Kashyap for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) { 65a2ac68fbSChander Kashyap addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE); 66a2ac68fbSChander Kashyap size = get_ram_size((long *)addr, SDRAM_BANK_SIZE); 67a2ac68fbSChander Kashyap 68a2ac68fbSChander Kashyap gd->bd->bi_dram[i].start = addr; 69a2ac68fbSChander Kashyap gd->bd->bi_dram[i].size = size; 70a2ac68fbSChander Kashyap } 71a2ac68fbSChander Kashyap } 72a2ac68fbSChander Kashyap 73cc2b1012SInderpal Singh #ifdef CONFIG_GENERIC_MMC 74cc2b1012SInderpal Singh int board_mmc_init(bd_t *bis) 75cc2b1012SInderpal Singh { 76cc2b1012SInderpal Singh int ret; 77cc2b1012SInderpal Singh /* dwmmc initializattion for available channels */ 78cc2b1012SInderpal Singh ret = exynos_dwmmc_init(gd->fdt_blob); 79cc2b1012SInderpal Singh if (ret) 80cc2b1012SInderpal Singh debug("dwmmc init failed\n"); 81cc2b1012SInderpal Singh 82cc2b1012SInderpal Singh return ret; 83cc2b1012SInderpal Singh } 84cc2b1012SInderpal Singh #endif 85cc2b1012SInderpal Singh 86a2ac68fbSChander Kashyap static int board_uart_init(void) 87a2ac68fbSChander Kashyap { 88a2ac68fbSChander Kashyap int err = 0, uart_id; 89a2ac68fbSChander Kashyap 90a2ac68fbSChander Kashyap for (uart_id = PERIPH_ID_UART0; uart_id <= PERIPH_ID_UART3; uart_id++) { 91a2ac68fbSChander Kashyap err = exynos_pinmux_config(uart_id, PINMUX_FLAG_NONE); 92a2ac68fbSChander Kashyap if (err) { 93a2ac68fbSChander Kashyap debug("UART%d not configured\n", 94a2ac68fbSChander Kashyap (uart_id - PERIPH_ID_UART0)); 95a2ac68fbSChander Kashyap return err; 96a2ac68fbSChander Kashyap } 97a2ac68fbSChander Kashyap } 98a2ac68fbSChander Kashyap return err; 99a2ac68fbSChander Kashyap } 100a2ac68fbSChander Kashyap 101a2ac68fbSChander Kashyap #ifdef CONFIG_BOARD_EARLY_INIT_F 102a2ac68fbSChander Kashyap int board_early_init_f(void) 103a2ac68fbSChander Kashyap { 104a2ac68fbSChander Kashyap int err; 105a2ac68fbSChander Kashyap 106a2ac68fbSChander Kashyap err = board_uart_init(); 107a2ac68fbSChander Kashyap if (err) { 108a2ac68fbSChander Kashyap debug("UART init failed\n"); 109a2ac68fbSChander Kashyap return err; 110a2ac68fbSChander Kashyap } 111a2ac68fbSChander Kashyap return err; 112a2ac68fbSChander Kashyap } 113a2ac68fbSChander Kashyap #endif 114a2ac68fbSChander Kashyap 115a2ac68fbSChander Kashyap #ifdef CONFIG_DISPLAY_BOARDINFO 116a2ac68fbSChander Kashyap int checkboard(void) 117a2ac68fbSChander Kashyap { 118a2ac68fbSChander Kashyap printf("\nBoard: Arndale\n"); 119a2ac68fbSChander Kashyap 120a2ac68fbSChander Kashyap return 0; 121a2ac68fbSChander Kashyap } 122a2ac68fbSChander Kashyap #endif 123