xref: /rk3399_rockchip-uboot/board/Seagate/nas220/nas220.c (revision c62db35d52c6ba5f31ac36e690c58ec54b273298)
19637c4b2SEvgeni Dobrev /*
29637c4b2SEvgeni Dobrev  * Copyright (C) 2014  Evgeni Dobrev <evgeni@studio-punkt.com>
39637c4b2SEvgeni Dobrev  *
49637c4b2SEvgeni Dobrev  * Based on sheevaplug.c originally written by
59637c4b2SEvgeni Dobrev  * Prafulla Wadaskar <prafulla@marvell.com>
69637c4b2SEvgeni Dobrev  * (C) Copyright 2009
79637c4b2SEvgeni Dobrev  * Marvell Semiconductor <www.marvell.com>
89637c4b2SEvgeni Dobrev  *
99637c4b2SEvgeni Dobrev  * SPDX-License-Identifier:     GPL-2.0+
109637c4b2SEvgeni Dobrev  */
119637c4b2SEvgeni Dobrev 
129637c4b2SEvgeni Dobrev #include <common.h>
139637c4b2SEvgeni Dobrev #include <miiphy.h>
14*c62db35dSSimon Glass #include <asm/mach-types.h>
159637c4b2SEvgeni Dobrev #include <asm/arch/soc.h>
169637c4b2SEvgeni Dobrev #include <asm/arch/mpp.h>
179637c4b2SEvgeni Dobrev #include <asm/arch/cpu.h>
189637c4b2SEvgeni Dobrev #include <asm/io.h>
199637c4b2SEvgeni Dobrev 
209637c4b2SEvgeni Dobrev DECLARE_GLOBAL_DATA_PTR;
219637c4b2SEvgeni Dobrev 
board_early_init_f(void)229637c4b2SEvgeni Dobrev int board_early_init_f(void)
239637c4b2SEvgeni Dobrev {
249637c4b2SEvgeni Dobrev 	/*
259637c4b2SEvgeni Dobrev 	 * default gpio configuration
269637c4b2SEvgeni Dobrev 	 */
279637c4b2SEvgeni Dobrev 	mvebu_config_gpio(NAS220_GE_OE_VAL_LOW, NAS220_GE_OE_VAL_HIGH,
289637c4b2SEvgeni Dobrev 			  NAS220_GE_OE_LOW, NAS220_GE_OE_HIGH);
299637c4b2SEvgeni Dobrev 
309637c4b2SEvgeni Dobrev 	/* Multi-Purpose Pins Functionality configuration */
319637c4b2SEvgeni Dobrev 	static const u32 kwmpp_config[] = {
329637c4b2SEvgeni Dobrev 		MPP0_NF_IO2,
339637c4b2SEvgeni Dobrev 		MPP1_NF_IO3,
349637c4b2SEvgeni Dobrev 		MPP2_NF_IO4,
359637c4b2SEvgeni Dobrev 		MPP3_NF_IO5,
369637c4b2SEvgeni Dobrev 		MPP4_NF_IO6,
379637c4b2SEvgeni Dobrev 		MPP5_NF_IO7,
389637c4b2SEvgeni Dobrev 		MPP6_SYSRST_OUTn,
399637c4b2SEvgeni Dobrev 		MPP7_SPI_SCn,
409637c4b2SEvgeni Dobrev 		MPP8_TW_SDA,
419637c4b2SEvgeni Dobrev 		MPP9_TW_SCK,
429637c4b2SEvgeni Dobrev 		MPP10_UART0_TXD,
439637c4b2SEvgeni Dobrev 		MPP11_UART0_RXD,
449637c4b2SEvgeni Dobrev 		MPP12_GPO,
459637c4b2SEvgeni Dobrev 		MPP13_GPIO,
469637c4b2SEvgeni Dobrev 		MPP14_GPIO,
479637c4b2SEvgeni Dobrev 		MPP15_SATA0_ACTn,
489637c4b2SEvgeni Dobrev 		MPP16_SATA1_ACTn,
499637c4b2SEvgeni Dobrev 		MPP17_SATA0_PRESENTn,
509637c4b2SEvgeni Dobrev 		MPP18_NF_IO0,
519637c4b2SEvgeni Dobrev 		MPP19_NF_IO1,
529637c4b2SEvgeni Dobrev 		MPP20_GPIO,
539637c4b2SEvgeni Dobrev 		MPP21_GPIO,
549637c4b2SEvgeni Dobrev 		MPP22_GPIO,
559637c4b2SEvgeni Dobrev 		MPP23_GPIO,
569637c4b2SEvgeni Dobrev 		MPP24_GPIO,
579637c4b2SEvgeni Dobrev 		MPP25_GPIO,
589637c4b2SEvgeni Dobrev 		MPP26_GPIO,
599637c4b2SEvgeni Dobrev 		MPP27_GPIO,
609637c4b2SEvgeni Dobrev 		MPP28_GPIO,
619637c4b2SEvgeni Dobrev 		MPP29_GPIO,
629637c4b2SEvgeni Dobrev 		MPP30_GPIO,
639637c4b2SEvgeni Dobrev 		MPP31_GPIO,
649637c4b2SEvgeni Dobrev 		MPP32_GPIO,
659637c4b2SEvgeni Dobrev 		MPP33_GPIO,
669637c4b2SEvgeni Dobrev 		MPP34_GPIO,
679637c4b2SEvgeni Dobrev 		MPP35_GPIO,
689637c4b2SEvgeni Dobrev 		0
699637c4b2SEvgeni Dobrev 	};
709637c4b2SEvgeni Dobrev 	kirkwood_mpp_conf(kwmpp_config, NULL);
719637c4b2SEvgeni Dobrev 	return 0;
729637c4b2SEvgeni Dobrev }
739637c4b2SEvgeni Dobrev 
board_init(void)749637c4b2SEvgeni Dobrev int board_init(void)
759637c4b2SEvgeni Dobrev {
769637c4b2SEvgeni Dobrev 	/*
779637c4b2SEvgeni Dobrev 	 * arch number of board
789637c4b2SEvgeni Dobrev 	 */
7992a1babfSTom Rini 	gd->bd->bi_arch_number = MACH_TYPE_RD88F6192_NAS;
809637c4b2SEvgeni Dobrev 
819637c4b2SEvgeni Dobrev 	/* adress of boot parameters */
829637c4b2SEvgeni Dobrev 	gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100;
839637c4b2SEvgeni Dobrev 
849637c4b2SEvgeni Dobrev 	return 0;
859637c4b2SEvgeni Dobrev }
869637c4b2SEvgeni Dobrev 
879637c4b2SEvgeni Dobrev #ifdef CONFIG_RESET_PHY_R
889637c4b2SEvgeni Dobrev /* Configure and enable MV88E1116 PHY */
reset_phy(void)899637c4b2SEvgeni Dobrev void reset_phy(void)
909637c4b2SEvgeni Dobrev {
919637c4b2SEvgeni Dobrev 	u16 reg;
929637c4b2SEvgeni Dobrev 	u16 devadr;
939637c4b2SEvgeni Dobrev 	char *name = "egiga0";
949637c4b2SEvgeni Dobrev 
959637c4b2SEvgeni Dobrev 	if (miiphy_set_current_dev(name))
969637c4b2SEvgeni Dobrev 		return;
979637c4b2SEvgeni Dobrev 
989637c4b2SEvgeni Dobrev 	/* command to read PHY dev address */
999637c4b2SEvgeni Dobrev 	if (miiphy_read(name, 0xEE, 0xEE, (u16 *)&devadr)) {
1009637c4b2SEvgeni Dobrev 		printf("Err..%s could not read PHY dev address\n", __func__);
1019637c4b2SEvgeni Dobrev 		return;
1029637c4b2SEvgeni Dobrev 	}
1039637c4b2SEvgeni Dobrev 
1049637c4b2SEvgeni Dobrev 	/*
1059637c4b2SEvgeni Dobrev 	 * Enable RGMII delay on Tx and Rx for CPU port
1069637c4b2SEvgeni Dobrev 	 * Ref: sec 4.7.2 of chip datasheet
1079637c4b2SEvgeni Dobrev 	 */
1089637c4b2SEvgeni Dobrev 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
1099637c4b2SEvgeni Dobrev 	miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
1109637c4b2SEvgeni Dobrev 	reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
1119637c4b2SEvgeni Dobrev 	miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
1129637c4b2SEvgeni Dobrev 	miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
1139637c4b2SEvgeni Dobrev 
1149637c4b2SEvgeni Dobrev 	/* reset the phy */
1159637c4b2SEvgeni Dobrev 	miiphy_reset(name, devadr);
1169637c4b2SEvgeni Dobrev 
1179637c4b2SEvgeni Dobrev 	printf("88E1116 Initialized on %s\n", name);
1189637c4b2SEvgeni Dobrev }
1199637c4b2SEvgeni Dobrev #endif /* CONFIG_RESET_PHY_R */
120