xref: /openbmc/u-boot/board/st/stv0991/stv0991.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
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