1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
29fa32b12SVikas Manocha /*
31537d386SPatrice Chotard * Copyright (C) 2014, STMicroelectronics - All Rights Reserved
41537d386SPatrice Chotard * Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
59fa32b12SVikas Manocha */
69fa32b12SVikas Manocha
79fa32b12SVikas Manocha #include <common.h>
89d922450SSimon Glass #include <dm.h>
99fa32b12SVikas Manocha #include <miiphy.h>
109fa32b12SVikas Manocha #include <asm/arch/stv0991_periph.h>
119fa32b12SVikas Manocha #include <asm/arch/stv0991_defs.h>
122ce4eaf4SVikas Manocha #include <asm/arch/hardware.h>
132ce4eaf4SVikas Manocha #include <asm/arch/gpio.h>
142ce4eaf4SVikas Manocha #include <netdev.h>
152ce4eaf4SVikas Manocha #include <asm/io.h>
1639e4795aSVikas Manocha #include <dm/platform_data/serial_pl01x.h>
179fa32b12SVikas Manocha
189fa32b12SVikas Manocha DECLARE_GLOBAL_DATA_PTR;
199fa32b12SVikas Manocha
202ce4eaf4SVikas Manocha struct gpio_regs *const gpioa_regs =
212ce4eaf4SVikas Manocha (struct gpio_regs *) GPIOA_BASE_ADDR;
222ce4eaf4SVikas Manocha
23e0320b74SVikas Manocha #ifndef CONFIG_OF_CONTROL
2439e4795aSVikas Manocha static const struct pl01x_serial_platdata serial_platdata = {
2539e4795aSVikas Manocha .base = 0x80406000,
2639e4795aSVikas Manocha .type = TYPE_PL011,
2739e4795aSVikas Manocha .clock = 2700 * 1000,
2839e4795aSVikas Manocha };
2939e4795aSVikas Manocha
3039e4795aSVikas Manocha U_BOOT_DEVICE(stv09911_serials) = {
3139e4795aSVikas Manocha .name = "serial_pl01x",
3239e4795aSVikas Manocha .platdata = &serial_platdata,
3339e4795aSVikas Manocha };
34e0320b74SVikas Manocha #endif
3539e4795aSVikas Manocha
369fa32b12SVikas Manocha #ifdef CONFIG_SHOW_BOOT_PROGRESS
show_boot_progress(int progress)379fa32b12SVikas Manocha void show_boot_progress(int progress)
389fa32b12SVikas Manocha {
399fa32b12SVikas Manocha printf("%i\n", progress);
409fa32b12SVikas Manocha }
419fa32b12SVikas Manocha #endif
429fa32b12SVikas Manocha
enable_eth_phy(void)432ce4eaf4SVikas Manocha void enable_eth_phy(void)
442ce4eaf4SVikas Manocha {
452ce4eaf4SVikas Manocha /* Set GPIOA_06 pad HIGH (Appli board)*/
462ce4eaf4SVikas Manocha writel(readl(&gpioa_regs->dir) | 0x40, &gpioa_regs->dir);
472ce4eaf4SVikas Manocha writel(readl(&gpioa_regs->data) | 0x40, &gpioa_regs->data);
482ce4eaf4SVikas Manocha }
board_eth_enable(void)492ce4eaf4SVikas Manocha int board_eth_enable(void)
502ce4eaf4SVikas Manocha {
512ce4eaf4SVikas Manocha stv0991_pinmux_config(ETH_GPIOB_10_31_C_0_4);
522ce4eaf4SVikas Manocha clock_setup(ETH_CLOCK_CFG);
532ce4eaf4SVikas Manocha enable_eth_phy();
542ce4eaf4SVikas Manocha return 0;
552ce4eaf4SVikas Manocha }
562ce4eaf4SVikas Manocha
board_qspi_enable(void)5754afb500SVikas Manocha int board_qspi_enable(void)
5854afb500SVikas Manocha {
5954afb500SVikas Manocha stv0991_pinmux_config(QSPI_CS_CLK_PAD);
6054afb500SVikas Manocha clock_setup(QSPI_CLOCK_CFG);
6154afb500SVikas Manocha return 0;
6254afb500SVikas Manocha }
6354afb500SVikas Manocha
649fa32b12SVikas Manocha /*
659fa32b12SVikas Manocha * Miscellaneous platform dependent initialisations
669fa32b12SVikas Manocha */
board_init(void)679fa32b12SVikas Manocha int board_init(void)
689fa32b12SVikas Manocha {
692ce4eaf4SVikas Manocha board_eth_enable();
7054afb500SVikas Manocha board_qspi_enable();
719fa32b12SVikas Manocha return 0;
729fa32b12SVikas Manocha }
739fa32b12SVikas Manocha
board_uart_init(void)749fa32b12SVikas Manocha int board_uart_init(void)
759fa32b12SVikas Manocha {
769fa32b12SVikas Manocha stv0991_pinmux_config(UART_GPIOC_30_31);
779fa32b12SVikas Manocha clock_setup(UART_CLOCK_CFG);
789fa32b12SVikas Manocha return 0;
799fa32b12SVikas Manocha }
802ce4eaf4SVikas Manocha
819fa32b12SVikas Manocha #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)829fa32b12SVikas Manocha int board_early_init_f(void)
839fa32b12SVikas Manocha {
849fa32b12SVikas Manocha board_uart_init();
859fa32b12SVikas Manocha return 0;
869fa32b12SVikas Manocha }
879fa32b12SVikas Manocha #endif
889fa32b12SVikas Manocha
dram_init(void)899fa32b12SVikas Manocha int dram_init(void)
909fa32b12SVikas Manocha {
919fa32b12SVikas Manocha gd->ram_size = PHYS_SDRAM_1_SIZE;
929fa32b12SVikas Manocha return 0;
939fa32b12SVikas Manocha }
949fa32b12SVikas Manocha
dram_init_banksize(void)9576b00acaSSimon Glass int dram_init_banksize(void)
969fa32b12SVikas Manocha {
979fa32b12SVikas Manocha gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
989fa32b12SVikas Manocha gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
9976b00acaSSimon Glass
10076b00acaSSimon Glass return 0;
1019fa32b12SVikas Manocha }
1022ce4eaf4SVikas Manocha
1032ce4eaf4SVikas Manocha #ifdef CONFIG_CMD_NET
board_eth_init(bd_t * bis)1042ce4eaf4SVikas Manocha int board_eth_init(bd_t *bis)
1052ce4eaf4SVikas Manocha {
1062ce4eaf4SVikas Manocha int ret = 0;
1072ce4eaf4SVikas Manocha
108ef48f6ddSSimon Glass #if defined(CONFIG_ETH_DESIGNWARE)
1092ce4eaf4SVikas Manocha u32 interface = PHY_INTERFACE_MODE_MII;
1102ce4eaf4SVikas Manocha if (designware_initialize(GMAC_BASE_ADDR, interface) >= 0)
1112ce4eaf4SVikas Manocha ret++;
1122ce4eaf4SVikas Manocha #endif
1132ce4eaf4SVikas Manocha return ret;
1142ce4eaf4SVikas Manocha }
1152ce4eaf4SVikas Manocha #endif
116