xref: /rk3399_rockchip-uboot/board/Marvell/gplugd/gplugd.c (revision c62db35d52c6ba5f31ac36e690c58ec54b273298)
126749582SAjay Bhargav /*
226749582SAjay Bhargav  * (C) Copyright 2011
326749582SAjay Bhargav  * eInfochips Ltd. <www.einfochips.com>
4c7c47ca2SAjay Bhargav  * Written-by: Ajay Bhargav <contact@8051projects.net>
526749582SAjay Bhargav  *
626749582SAjay Bhargav  * Based on Aspenite:
726749582SAjay Bhargav  * (C) Copyright 2010
826749582SAjay Bhargav  * Marvell Semiconductor <www.marvell.com>
926749582SAjay Bhargav  * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
1026749582SAjay Bhargav  * Contributor: Mahavir Jain <mjain@marvell.com>
1126749582SAjay Bhargav  *
121a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
1326749582SAjay Bhargav  */
1426749582SAjay Bhargav 
1526749582SAjay Bhargav #include <common.h>
1626749582SAjay Bhargav #include <mvmfp.h>
17cebad164SPrafulla Wadaskar #include <asm/arch/cpu.h>
1826749582SAjay Bhargav #include <asm/arch/mfp.h>
1926749582SAjay Bhargav #include <asm/arch/armada100.h>
2047e75d72SAjay Bhargav #include <asm/gpio.h>
2147e75d72SAjay Bhargav #include <miiphy.h>
22*c62db35dSSimon Glass #include <asm/mach-types.h>
2326749582SAjay Bhargav 
24aa0ecfebSAjay Bhargav #ifdef CONFIG_ARMADA100_FEC
25aa0ecfebSAjay Bhargav #include <net.h>
26aa0ecfebSAjay Bhargav #include <netdev.h>
27aa0ecfebSAjay Bhargav #endif /* CONFIG_ARMADA100_FEC */
28aa0ecfebSAjay Bhargav 
2926749582SAjay Bhargav DECLARE_GLOBAL_DATA_PTR;
3026749582SAjay Bhargav 
board_early_init_f(void)3126749582SAjay Bhargav int board_early_init_f(void)
3226749582SAjay Bhargav {
3326749582SAjay Bhargav 	u32 mfp_cfg[] = {
3426749582SAjay Bhargav 		/* I2C */
3526749582SAjay Bhargav 		MFP105_CI2C_SDA,
3626749582SAjay Bhargav 		MFP106_CI2C_SCL,
3726749582SAjay Bhargav 
3826749582SAjay Bhargav 		/* Enable Console on UART3 */
3926749582SAjay Bhargav 		MFPO8_UART3_TXD,
4026749582SAjay Bhargav 		MFPO9_UART3_RXD,
41aa0ecfebSAjay Bhargav 
42aa0ecfebSAjay Bhargav 		/* Ethernet PHY Interface */
43aa0ecfebSAjay Bhargav 		MFP086_ETH_TXCLK,
44aa0ecfebSAjay Bhargav 		MFP087_ETH_TXEN,
45aa0ecfebSAjay Bhargav 		MFP088_ETH_TXDQ3,
46aa0ecfebSAjay Bhargav 		MFP089_ETH_TXDQ2,
47aa0ecfebSAjay Bhargav 		MFP090_ETH_TXDQ1,
48aa0ecfebSAjay Bhargav 		MFP091_ETH_TXDQ0,
49aa0ecfebSAjay Bhargav 		MFP092_ETH_CRS,
50aa0ecfebSAjay Bhargav 		MFP093_ETH_COL,
51aa0ecfebSAjay Bhargav 		MFP094_ETH_RXCLK,
52aa0ecfebSAjay Bhargav 		MFP095_ETH_RXER,
53aa0ecfebSAjay Bhargav 		MFP096_ETH_RXDQ3,
54aa0ecfebSAjay Bhargav 		MFP097_ETH_RXDQ2,
55aa0ecfebSAjay Bhargav 		MFP098_ETH_RXDQ1,
56aa0ecfebSAjay Bhargav 		MFP099_ETH_RXDQ0,
57aa0ecfebSAjay Bhargav 		MFP100_ETH_MDC,
58aa0ecfebSAjay Bhargav 		MFP101_ETH_MDIO,
59aa0ecfebSAjay Bhargav 		MFP103_ETH_RXDV,
60aa0ecfebSAjay Bhargav 
61daa4b2f7SAjay Bhargav 		/* SSP2 */
62daa4b2f7SAjay Bhargav 		MFP107_SSP2_RXD,
63daa4b2f7SAjay Bhargav 		MFP108_SSP2_TXD,
64daa4b2f7SAjay Bhargav 		MFP110_SSP2_CS,
65daa4b2f7SAjay Bhargav 		MFP111_SSP2_CLK,
66daa4b2f7SAjay Bhargav 
6726749582SAjay Bhargav 		MFP_EOC		/*End of configuration*/
6826749582SAjay Bhargav 	};
6926749582SAjay Bhargav 	/* configure MFP's */
7026749582SAjay Bhargav 	mfp_config(mfp_cfg);
7126749582SAjay Bhargav 	return 0;
7226749582SAjay Bhargav }
7326749582SAjay Bhargav 
board_init(void)7426749582SAjay Bhargav int board_init(void)
7526749582SAjay Bhargav {
76daa4b2f7SAjay Bhargav 	struct armd1apb2_registers *apb2_regs =
77daa4b2f7SAjay Bhargav 		(struct armd1apb2_registers *)ARMD1_APBC2_BASE;
78daa4b2f7SAjay Bhargav 
7926749582SAjay Bhargav 	/* arch number of Board */
8092a1babfSTom Rini 	gd->bd->bi_arch_number = MACH_TYPE_GPLUGD;
8126749582SAjay Bhargav 	/* adress of boot parameters */
8226749582SAjay Bhargav 	gd->bd->bi_boot_params = armd1_sdram_base(0) + 0x100;
8347e75d72SAjay Bhargav 	/* Assert PHY_RST# */
8447e75d72SAjay Bhargav 	gpio_direction_output(CONFIG_SYS_GPIO_PHY_RST, GPIO_LOW);
8547e75d72SAjay Bhargav 	udelay(10);
8647e75d72SAjay Bhargav 	/* Deassert PHY_RST# */
8747e75d72SAjay Bhargav 	gpio_set_value(CONFIG_SYS_GPIO_PHY_RST, GPIO_HIGH);
88daa4b2f7SAjay Bhargav 
89daa4b2f7SAjay Bhargav 	/* Enable SSP2 clock */
90daa4b2f7SAjay Bhargav 	writel(SSP2_APBCLK | SSP2_FNCLK, &apb2_regs->ssp2_clkrst);
9126749582SAjay Bhargav 	return 0;
9226749582SAjay Bhargav }
93aa0ecfebSAjay Bhargav 
94aa0ecfebSAjay Bhargav #ifdef CONFIG_ARMADA100_FEC
board_eth_init(bd_t * bis)95aa0ecfebSAjay Bhargav int board_eth_init(bd_t *bis)
96aa0ecfebSAjay Bhargav {
97aa0ecfebSAjay Bhargav 	struct armd1apmu_registers *apmu_regs =
98aa0ecfebSAjay Bhargav 		(struct armd1apmu_registers *)ARMD1_APMU_BASE;
99aa0ecfebSAjay Bhargav 
100aa0ecfebSAjay Bhargav 	/* Enable clock of ethernet controller */
101aa0ecfebSAjay Bhargav 	writel(FE_CLK_RST | FE_CLK_ENA, &apmu_regs->fecrc);
102aa0ecfebSAjay Bhargav 
103aa0ecfebSAjay Bhargav 	return armada100_fec_register(ARMD1_FEC_BASE);
104aa0ecfebSAjay Bhargav }
10547e75d72SAjay Bhargav 
10647e75d72SAjay Bhargav #ifdef CONFIG_RESET_PHY_R
10747e75d72SAjay Bhargav /* Configure and initialize PHY chip 88E3015 */
reset_phy(void)10847e75d72SAjay Bhargav void reset_phy(void)
10947e75d72SAjay Bhargav {
11047e75d72SAjay Bhargav 	u16 phy_adr;
11147e75d72SAjay Bhargav 	const char *name = "armd-fec0";
11247e75d72SAjay Bhargav 
11347e75d72SAjay Bhargav 	if (miiphy_set_current_dev(name))
11447e75d72SAjay Bhargav 		return;
11547e75d72SAjay Bhargav 
11647e75d72SAjay Bhargav 	/* command to read PHY dev address */
11747e75d72SAjay Bhargav 	if (miiphy_read(name, 0xff, 0xff, &phy_adr)) {
11847e75d72SAjay Bhargav 		printf("Err..%s could not read PHY dev address\n", __func__);
11947e75d72SAjay Bhargav 		return;
12047e75d72SAjay Bhargav 	}
12147e75d72SAjay Bhargav 
12247e75d72SAjay Bhargav 	/* Set Ethernet LED in TX blink mode */
12347e75d72SAjay Bhargav 	miiphy_write(name, phy_adr, PHY_LED_MAN_REG, 0x00);
12447e75d72SAjay Bhargav 	miiphy_write(name, phy_adr, PHY_LED_PAR_SEL_REG, PHY_LED_VAL);
12547e75d72SAjay Bhargav 
12647e75d72SAjay Bhargav 	/* reset the phy */
12747e75d72SAjay Bhargav 	miiphy_reset(name, phy_adr);
12847e75d72SAjay Bhargav 	debug("88E3015 Initialized on %s\n", name);
12947e75d72SAjay Bhargav }
13047e75d72SAjay Bhargav #endif /* CONFIG_RESET_PHY_R */
131aa0ecfebSAjay Bhargav #endif /* CONFIG_ARMADA100_FEC */
132