19fa32b12SVikas Manocha /*
29fa32b12SVikas Manocha * (C) Copyright 2014
39fa32b12SVikas Manocha * Vikas Manocha, ST Micoelectronics, vikas.manocha@st.com.
49fa32b12SVikas Manocha *
59fa32b12SVikas Manocha * SPDX-License-Identifier: GPL-2.0+
69fa32b12SVikas Manocha */
79fa32b12SVikas Manocha
89fa32b12SVikas Manocha #include <common.h>
9*9d922450SSimon Glass #include <dm.h>
109fa32b12SVikas Manocha #include <miiphy.h>
119fa32b12SVikas Manocha #include <asm/arch/stv0991_periph.h>
129fa32b12SVikas Manocha #include <asm/arch/stv0991_defs.h>
132ce4eaf4SVikas Manocha #include <asm/arch/hardware.h>
142ce4eaf4SVikas Manocha #include <asm/arch/gpio.h>
152ce4eaf4SVikas Manocha #include <netdev.h>
162ce4eaf4SVikas Manocha #include <asm/io.h>
1739e4795aSVikas Manocha #include <dm/platform_data/serial_pl01x.h>
189fa32b12SVikas Manocha
199fa32b12SVikas Manocha DECLARE_GLOBAL_DATA_PTR;
209fa32b12SVikas Manocha
212ce4eaf4SVikas Manocha struct gpio_regs *const gpioa_regs =
222ce4eaf4SVikas Manocha (struct gpio_regs *) GPIOA_BASE_ADDR;
232ce4eaf4SVikas Manocha
24e0320b74SVikas Manocha #ifndef CONFIG_OF_CONTROL
2539e4795aSVikas Manocha static const struct pl01x_serial_platdata serial_platdata = {
2639e4795aSVikas Manocha .base = 0x80406000,
2739e4795aSVikas Manocha .type = TYPE_PL011,
2839e4795aSVikas Manocha .clock = 2700 * 1000,
2939e4795aSVikas Manocha };
3039e4795aSVikas Manocha
3139e4795aSVikas Manocha U_BOOT_DEVICE(stv09911_serials) = {
3239e4795aSVikas Manocha .name = "serial_pl01x",
3339e4795aSVikas Manocha .platdata = &serial_platdata,
3439e4795aSVikas Manocha };
35e0320b74SVikas Manocha #endif
3639e4795aSVikas Manocha
379fa32b12SVikas Manocha #ifdef CONFIG_SHOW_BOOT_PROGRESS
show_boot_progress(int progress)389fa32b12SVikas Manocha void show_boot_progress(int progress)
399fa32b12SVikas Manocha {
409fa32b12SVikas Manocha printf("%i\n", progress);
419fa32b12SVikas Manocha }
429fa32b12SVikas Manocha #endif
439fa32b12SVikas Manocha
enable_eth_phy(void)442ce4eaf4SVikas Manocha void enable_eth_phy(void)
452ce4eaf4SVikas Manocha {
462ce4eaf4SVikas Manocha /* Set GPIOA_06 pad HIGH (Appli board)*/
472ce4eaf4SVikas Manocha writel(readl(&gpioa_regs->dir) | 0x40, &gpioa_regs->dir);
482ce4eaf4SVikas Manocha writel(readl(&gpioa_regs->data) | 0x40, &gpioa_regs->data);
492ce4eaf4SVikas Manocha }
board_eth_enable(void)502ce4eaf4SVikas Manocha int board_eth_enable(void)
512ce4eaf4SVikas Manocha {
522ce4eaf4SVikas Manocha stv0991_pinmux_config(ETH_GPIOB_10_31_C_0_4);
532ce4eaf4SVikas Manocha clock_setup(ETH_CLOCK_CFG);
542ce4eaf4SVikas Manocha enable_eth_phy();
552ce4eaf4SVikas Manocha return 0;
562ce4eaf4SVikas Manocha }
572ce4eaf4SVikas Manocha
board_qspi_enable(void)5854afb500SVikas Manocha int board_qspi_enable(void)
5954afb500SVikas Manocha {
6054afb500SVikas Manocha stv0991_pinmux_config(QSPI_CS_CLK_PAD);
6154afb500SVikas Manocha clock_setup(QSPI_CLOCK_CFG);
6254afb500SVikas Manocha return 0;
6354afb500SVikas Manocha }
6454afb500SVikas Manocha
659fa32b12SVikas Manocha /*
669fa32b12SVikas Manocha * Miscellaneous platform dependent initialisations
679fa32b12SVikas Manocha */
board_init(void)689fa32b12SVikas Manocha int board_init(void)
699fa32b12SVikas Manocha {
702ce4eaf4SVikas Manocha board_eth_enable();
7154afb500SVikas Manocha board_qspi_enable();
729fa32b12SVikas Manocha return 0;
739fa32b12SVikas Manocha }
749fa32b12SVikas Manocha
board_uart_init(void)759fa32b12SVikas Manocha int board_uart_init(void)
769fa32b12SVikas Manocha {
779fa32b12SVikas Manocha stv0991_pinmux_config(UART_GPIOC_30_31);
789fa32b12SVikas Manocha clock_setup(UART_CLOCK_CFG);
799fa32b12SVikas Manocha return 0;
809fa32b12SVikas Manocha }
812ce4eaf4SVikas Manocha
829fa32b12SVikas Manocha #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)839fa32b12SVikas Manocha int board_early_init_f(void)
849fa32b12SVikas Manocha {
859fa32b12SVikas Manocha board_uart_init();
869fa32b12SVikas Manocha return 0;
879fa32b12SVikas Manocha }
889fa32b12SVikas Manocha #endif
899fa32b12SVikas Manocha
dram_init(void)909fa32b12SVikas Manocha int dram_init(void)
919fa32b12SVikas Manocha {
929fa32b12SVikas Manocha gd->ram_size = PHYS_SDRAM_1_SIZE;
939fa32b12SVikas Manocha return 0;
949fa32b12SVikas Manocha }
959fa32b12SVikas Manocha
dram_init_banksize(void)9676b00acaSSimon Glass int dram_init_banksize(void)
979fa32b12SVikas Manocha {
989fa32b12SVikas Manocha gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
999fa32b12SVikas Manocha gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
10076b00acaSSimon Glass
10176b00acaSSimon Glass return 0;
1029fa32b12SVikas Manocha }
1032ce4eaf4SVikas Manocha
1042ce4eaf4SVikas Manocha #ifdef CONFIG_CMD_NET
board_eth_init(bd_t * bis)1052ce4eaf4SVikas Manocha int board_eth_init(bd_t *bis)
1062ce4eaf4SVikas Manocha {
1072ce4eaf4SVikas Manocha int ret = 0;
1082ce4eaf4SVikas Manocha
109ef48f6ddSSimon Glass #if defined(CONFIG_ETH_DESIGNWARE)
1102ce4eaf4SVikas Manocha u32 interface = PHY_INTERFACE_MODE_MII;
1112ce4eaf4SVikas Manocha if (designware_initialize(GMAC_BASE_ADDR, interface) >= 0)
1122ce4eaf4SVikas Manocha ret++;
1132ce4eaf4SVikas Manocha #endif
1142ce4eaf4SVikas Manocha return ret;
1152ce4eaf4SVikas Manocha }
1162ce4eaf4SVikas Manocha #endif
117