xref: /rk3399_rockchip-uboot/board/cloudengines/pogo_e02/pogo_e02.c (revision 96c5f0816a95c80e993140e34e1b06c016e90f36)
11d0f5fa1SDavid Purdy /*
21d0f5fa1SDavid Purdy  * Copyright (C) 2012
31d0f5fa1SDavid Purdy  * David Purdy <david.c.purdy@gmail.com>
41d0f5fa1SDavid Purdy  *
51d0f5fa1SDavid Purdy  * Based on Kirkwood support:
61d0f5fa1SDavid Purdy  * (C) Copyright 2009
71d0f5fa1SDavid Purdy  * Marvell Semiconductor <www.marvell.com>
81d0f5fa1SDavid Purdy  * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
91d0f5fa1SDavid Purdy  *
101a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
111d0f5fa1SDavid Purdy  */
121d0f5fa1SDavid Purdy 
131d0f5fa1SDavid Purdy #include <common.h>
141d0f5fa1SDavid Purdy #include <miiphy.h>
151d0f5fa1SDavid Purdy #include <asm/arch/cpu.h>
163dc23f78SStefan Roese #include <asm/arch/soc.h>
171d0f5fa1SDavid Purdy #include <asm/arch/mpp.h>
181d0f5fa1SDavid Purdy #include "pogo_e02.h"
191d0f5fa1SDavid Purdy 
201d0f5fa1SDavid Purdy DECLARE_GLOBAL_DATA_PTR;
211d0f5fa1SDavid Purdy 
board_early_init_f(void)221d0f5fa1SDavid Purdy int board_early_init_f(void)
231d0f5fa1SDavid Purdy {
241d0f5fa1SDavid Purdy 	/*
251d0f5fa1SDavid Purdy 	 * default gpio configuration
261d0f5fa1SDavid Purdy 	 * There are maximum 64 gpios controlled through 2 sets of registers
271d0f5fa1SDavid Purdy 	 * the  below configuration configures mainly initial LED status
281d0f5fa1SDavid Purdy 	 */
29d5c5132fSStefan Roese 	mvebu_config_gpio(POGO_E02_OE_VAL_LOW,
301d0f5fa1SDavid Purdy 			  POGO_E02_OE_VAL_HIGH,
311d0f5fa1SDavid Purdy 			  POGO_E02_OE_LOW, POGO_E02_OE_HIGH);
321d0f5fa1SDavid Purdy 
331d0f5fa1SDavid Purdy 	/* Multi-Purpose Pins Functionality configuration */
349d86f0c3SAlbert ARIBAUD 	static const u32 kwmpp_config[] = {
351d0f5fa1SDavid Purdy 		MPP0_NF_IO2,
361d0f5fa1SDavid Purdy 		MPP1_NF_IO3,
371d0f5fa1SDavid Purdy 		MPP2_NF_IO4,
381d0f5fa1SDavid Purdy 		MPP3_NF_IO5,
391d0f5fa1SDavid Purdy 		MPP4_NF_IO6,
401d0f5fa1SDavid Purdy 		MPP5_NF_IO7,
411d0f5fa1SDavid Purdy 		MPP6_SYSRST_OUTn,
421d0f5fa1SDavid Purdy 		MPP7_GPO,
431d0f5fa1SDavid Purdy 		MPP8_UART0_RTS,
441d0f5fa1SDavid Purdy 		MPP9_UART0_CTS,
451d0f5fa1SDavid Purdy 		MPP10_UART0_TXD,
461d0f5fa1SDavid Purdy 		MPP11_UART0_RXD,
471d0f5fa1SDavid Purdy 		MPP12_SD_CLK,
481d0f5fa1SDavid Purdy 		MPP13_SD_CMD,
491d0f5fa1SDavid Purdy 		MPP14_SD_D0,
501d0f5fa1SDavid Purdy 		MPP15_SD_D1,
511d0f5fa1SDavid Purdy 		MPP16_SD_D2,
521d0f5fa1SDavid Purdy 		MPP17_SD_D3,
531d0f5fa1SDavid Purdy 		MPP18_NF_IO0,
541d0f5fa1SDavid Purdy 		MPP19_NF_IO1,
551d0f5fa1SDavid Purdy 		MPP29_TSMP9,	/* USB Power Enable */
561d0f5fa1SDavid Purdy 		MPP48_GPIO,	/* LED green */
571d0f5fa1SDavid Purdy 		MPP49_GPIO,	/* LED orange */
581d0f5fa1SDavid Purdy 		0
591d0f5fa1SDavid Purdy 	};
6084683638SValentin Longchamp 	kirkwood_mpp_conf(kwmpp_config, NULL);
611d0f5fa1SDavid Purdy 	return 0;
621d0f5fa1SDavid Purdy }
631d0f5fa1SDavid Purdy 
board_init(void)641d0f5fa1SDavid Purdy int board_init(void)
651d0f5fa1SDavid Purdy {
661d0f5fa1SDavid Purdy 	/* Boot parameters address */
67*96c5f081SStefan Roese 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
681d0f5fa1SDavid Purdy 
691d0f5fa1SDavid Purdy 	return 0;
701d0f5fa1SDavid Purdy }
711d0f5fa1SDavid Purdy 
721d0f5fa1SDavid Purdy #ifdef CONFIG_RESET_PHY_R
731d0f5fa1SDavid Purdy /* Configure and initialize PHY */
reset_phy(void)741d0f5fa1SDavid Purdy void reset_phy(void)
751d0f5fa1SDavid Purdy {
761d0f5fa1SDavid Purdy 	u16 reg;
771d0f5fa1SDavid Purdy 	u16 devadr;
781d0f5fa1SDavid Purdy 	char *name = "egiga0";
791d0f5fa1SDavid Purdy 
801d0f5fa1SDavid Purdy 	if (miiphy_set_current_dev(name))
811d0f5fa1SDavid Purdy 		return;
821d0f5fa1SDavid Purdy 
831d0f5fa1SDavid Purdy 	/* command to read PHY dev address */
841d0f5fa1SDavid Purdy 	if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
851d0f5fa1SDavid Purdy 		printf("Err..(%s) could not read PHY dev address\n", __func__);
861d0f5fa1SDavid Purdy 		return;
871d0f5fa1SDavid Purdy 	}
881d0f5fa1SDavid Purdy 
891d0f5fa1SDavid Purdy 	/*
901d0f5fa1SDavid Purdy 	 * Enable RGMII delay on Tx and Rx for CPU port
911d0f5fa1SDavid Purdy 	 * Ref: sec 4.7.2 of chip datasheet
921d0f5fa1SDavid Purdy 	 */
931d0f5fa1SDavid Purdy 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
941d0f5fa1SDavid Purdy 	miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
951d0f5fa1SDavid Purdy 	reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
961d0f5fa1SDavid Purdy 	miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
971d0f5fa1SDavid Purdy 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
981d0f5fa1SDavid Purdy 
991d0f5fa1SDavid Purdy 	/* reset the phy */
1001d0f5fa1SDavid Purdy 	miiphy_reset(name, devadr);
1011d0f5fa1SDavid Purdy 
1021d0f5fa1SDavid Purdy 	debug("88E1116 Initialized on %s\n", name);
1031d0f5fa1SDavid Purdy }
1041d0f5fa1SDavid Purdy #endif /* CONFIG_RESET_PHY_R */
105