1e66c49faSVikas Manocha /* 2e66c49faSVikas Manocha * (C) Copyright 2016 3e66c49faSVikas Manocha * Vikas Manocha, <vikas.manocha@st.com> 4e66c49faSVikas Manocha * 5e66c49faSVikas Manocha * SPDX-License-Identifier: GPL-2.0+ 6e66c49faSVikas Manocha */ 7e66c49faSVikas Manocha 8e66c49faSVikas Manocha #include <common.h> 9*2d9c33caSVikas Manocha #include <dm.h> 10*2d9c33caSVikas Manocha #include <ram.h> 11e66c49faSVikas Manocha #include <asm/io.h> 12e66c49faSVikas Manocha #include <asm/armv7m.h> 13e66c49faSVikas Manocha #include <asm/arch/stm32.h> 14e66c49faSVikas Manocha #include <asm/arch/gpio.h> 15e66c49faSVikas Manocha #include <dm/platdata.h> 16e66c49faSVikas Manocha #include <dm/platform_data/serial_stm32x7.h> 17e66c49faSVikas Manocha #include <asm/arch/stm32_periph.h> 18e66c49faSVikas Manocha #include <asm/arch/stm32_defs.h> 19b20b70fcSMichael Kurz #include <asm/arch/syscfg.h> 20e66c49faSVikas Manocha 21e66c49faSVikas Manocha DECLARE_GLOBAL_DATA_PTR; 22e66c49faSVikas Manocha 23e66c49faSVikas Manocha const struct stm32_gpio_ctl gpio_ctl_gpout = { 24e66c49faSVikas Manocha .mode = STM32_GPIO_MODE_OUT, 25e66c49faSVikas Manocha .otype = STM32_GPIO_OTYPE_PP, 26e66c49faSVikas Manocha .speed = STM32_GPIO_SPEED_50M, 27e66c49faSVikas Manocha .pupd = STM32_GPIO_PUPD_NO, 28e66c49faSVikas Manocha .af = STM32_GPIO_AF0 29e66c49faSVikas Manocha }; 30e66c49faSVikas Manocha 3125c1b135SToshifumi NISHINAGA static int fmc_setup_gpio(void) 3225c1b135SToshifumi NISHINAGA { 3325c1b135SToshifumi NISHINAGA clock_setup(GPIO_B_CLOCK_CFG); 3425c1b135SToshifumi NISHINAGA clock_setup(GPIO_C_CLOCK_CFG); 3525c1b135SToshifumi NISHINAGA clock_setup(GPIO_D_CLOCK_CFG); 3625c1b135SToshifumi NISHINAGA clock_setup(GPIO_E_CLOCK_CFG); 3725c1b135SToshifumi NISHINAGA clock_setup(GPIO_F_CLOCK_CFG); 3825c1b135SToshifumi NISHINAGA clock_setup(GPIO_G_CLOCK_CFG); 3925c1b135SToshifumi NISHINAGA clock_setup(GPIO_H_CLOCK_CFG); 4025c1b135SToshifumi NISHINAGA 41*2d9c33caSVikas Manocha return 0; 4225c1b135SToshifumi NISHINAGA } 4325c1b135SToshifumi NISHINAGA 4425c1b135SToshifumi NISHINAGA int dram_init(void) 4525c1b135SToshifumi NISHINAGA { 46*2d9c33caSVikas Manocha struct udevice *dev; 47*2d9c33caSVikas Manocha struct ram_info ram; 4825c1b135SToshifumi NISHINAGA int rv; 4925c1b135SToshifumi NISHINAGA 5025c1b135SToshifumi NISHINAGA rv = fmc_setup_gpio(); 5125c1b135SToshifumi NISHINAGA if (rv) 5225c1b135SToshifumi NISHINAGA return rv; 5325c1b135SToshifumi NISHINAGA 54081de09dSMichael Kurz clock_setup(FMC_CLOCK_CFG); 55*2d9c33caSVikas Manocha 56*2d9c33caSVikas Manocha rv = uclass_get_device(UCLASS_RAM, 0, &dev); 57*2d9c33caSVikas Manocha if (rv) { 58*2d9c33caSVikas Manocha debug("DRAM init failed: %d\n", rv); 59*2d9c33caSVikas Manocha return rv; 60*2d9c33caSVikas Manocha } 61*2d9c33caSVikas Manocha rv = ram_get_info(dev, &ram); 62*2d9c33caSVikas Manocha if (rv) { 63*2d9c33caSVikas Manocha debug("Cannot get DRAM size: %d\n", rv); 64*2d9c33caSVikas Manocha return rv; 65*2d9c33caSVikas Manocha } 66*2d9c33caSVikas Manocha debug("SDRAM base=%lx, size=%x\n", ram.base, ram.size); 67*2d9c33caSVikas Manocha gd->ram_size = ram.size; 6825c1b135SToshifumi NISHINAGA 6925c1b135SToshifumi NISHINAGA /* 7025c1b135SToshifumi NISHINAGA * Fill in global info with description of SRAM configuration 7125c1b135SToshifumi NISHINAGA */ 7225c1b135SToshifumi NISHINAGA gd->bd->bi_dram[0].start = CONFIG_SYS_RAM_BASE; 73*2d9c33caSVikas Manocha gd->bd->bi_dram[0].size = ram.size; 7425c1b135SToshifumi NISHINAGA 7525c1b135SToshifumi NISHINAGA return rv; 7625c1b135SToshifumi NISHINAGA } 7725c1b135SToshifumi NISHINAGA 78e66c49faSVikas Manocha int uart_setup_gpio(void) 79e66c49faSVikas Manocha { 8095d52733STom Rini clock_setup(GPIO_A_CLOCK_CFG); 8195d52733STom Rini clock_setup(GPIO_B_CLOCK_CFG); 82e34e19feSVikas Manocha return 0; 83e66c49faSVikas Manocha } 84e66c49faSVikas Manocha 85b20b70fcSMichael Kurz #ifdef CONFIG_ETH_DESIGNWARE 86b20b70fcSMichael Kurz 87b20b70fcSMichael Kurz static int stmmac_setup(void) 88b20b70fcSMichael Kurz { 89b20b70fcSMichael Kurz clock_setup(SYSCFG_CLOCK_CFG); 90b20b70fcSMichael Kurz /* Set >RMII mode */ 91b20b70fcSMichael Kurz STM32_SYSCFG->pmc |= SYSCFG_PMC_MII_RMII_SEL; 92b20b70fcSMichael Kurz 93b20b70fcSMichael Kurz clock_setup(GPIO_A_CLOCK_CFG); 94b20b70fcSMichael Kurz clock_setup(GPIO_C_CLOCK_CFG); 95b20b70fcSMichael Kurz clock_setup(GPIO_G_CLOCK_CFG); 96b20b70fcSMichael Kurz clock_setup(STMMAC_CLOCK_CFG); 97b20b70fcSMichael Kurz 98b20b70fcSMichael Kurz return 0; 99b20b70fcSMichael Kurz } 100b20b70fcSMichael Kurz #endif 101b20b70fcSMichael Kurz 102d4363baaSMichael Kurz #ifdef CONFIG_STM32_QSPI 103d4363baaSMichael Kurz 104d4363baaSMichael Kurz static int qspi_setup(void) 105d4363baaSMichael Kurz { 106d4363baaSMichael Kurz clock_setup(GPIO_B_CLOCK_CFG); 107d4363baaSMichael Kurz clock_setup(GPIO_D_CLOCK_CFG); 108d4363baaSMichael Kurz clock_setup(GPIO_E_CLOCK_CFG); 109d4363baaSMichael Kurz return 0; 110d4363baaSMichael Kurz } 111d4363baaSMichael Kurz #endif 112d4363baaSMichael Kurz 113e66c49faSVikas Manocha u32 get_board_rev(void) 114e66c49faSVikas Manocha { 115e66c49faSVikas Manocha return 0; 116e66c49faSVikas Manocha } 117e66c49faSVikas Manocha 118e66c49faSVikas Manocha int board_early_init_f(void) 119e66c49faSVikas Manocha { 120e66c49faSVikas Manocha int res; 121e66c49faSVikas Manocha 122e66c49faSVikas Manocha res = uart_setup_gpio(); 123e66c49faSVikas Manocha if (res) 124e66c49faSVikas Manocha return res; 125e66c49faSVikas Manocha 126b20b70fcSMichael Kurz #ifdef CONFIG_ETH_DESIGNWARE 127b20b70fcSMichael Kurz res = stmmac_setup(); 128b20b70fcSMichael Kurz if (res) 129b20b70fcSMichael Kurz return res; 130b20b70fcSMichael Kurz #endif 131b20b70fcSMichael Kurz 132d4363baaSMichael Kurz #ifdef CONFIG_STM32_QSPI 133d4363baaSMichael Kurz res = qspi_setup(); 134d4363baaSMichael Kurz if (res) 135d4363baaSMichael Kurz return res; 136d4363baaSMichael Kurz #endif 137d4363baaSMichael Kurz 138e66c49faSVikas Manocha return 0; 139e66c49faSVikas Manocha } 140e66c49faSVikas Manocha 141e66c49faSVikas Manocha int board_init(void) 142e66c49faSVikas Manocha { 143e66c49faSVikas Manocha gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100; 144e66c49faSVikas Manocha 145e66c49faSVikas Manocha return 0; 146e66c49faSVikas Manocha } 147