xref: /rk3399_rockchip-uboot/board/st/stv0991/stv0991.c (revision 9d922450aa9944ecf8c249c892078cda80f40e02)
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