126749582SAjay Bhargav /* 226749582SAjay Bhargav * (C) Copyright 2011 326749582SAjay Bhargav * eInfochips Ltd. <www.einfochips.com> 426749582SAjay Bhargav * Written-by: Ajay Bhargav <ajay.bhargav@einfochips.com> 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 * 1226749582SAjay Bhargav * See file CREDITS for list of people who contributed to this 1326749582SAjay Bhargav * project. 1426749582SAjay Bhargav * 1526749582SAjay Bhargav * This program is free software; you can redistribute it and/or 1626749582SAjay Bhargav * modify it under the terms of the GNU General Public License as 1726749582SAjay Bhargav * published by the Free Software Foundation; either version 2 of 1826749582SAjay Bhargav * the License, or (at your option) any later version. 1926749582SAjay Bhargav * 2026749582SAjay Bhargav * This program is distributed in the hope that it will be useful, 2126749582SAjay Bhargav * but WITHOUT ANY WARRANTY; without even the implied warranty of 2226749582SAjay Bhargav * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2326749582SAjay Bhargav * GNU General Public License for more details. 2426749582SAjay Bhargav * 2526749582SAjay Bhargav * You should have received a copy of the GNU General Public License 2626749582SAjay Bhargav * along with this program; if not, write to the Free Software 2726749582SAjay Bhargav * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 2826749582SAjay Bhargav * MA 02110-1301 USA 2926749582SAjay Bhargav */ 3026749582SAjay Bhargav 3126749582SAjay Bhargav #include <common.h> 3226749582SAjay Bhargav #include <mvmfp.h> 3326749582SAjay Bhargav #include <asm/arch/mfp.h> 3426749582SAjay Bhargav #include <asm/arch/armada100.h> 35*47e75d72SAjay Bhargav #include <asm/gpio.h> 36*47e75d72SAjay Bhargav #include <miiphy.h> 3726749582SAjay Bhargav 38aa0ecfebSAjay Bhargav #ifdef CONFIG_ARMADA100_FEC 39aa0ecfebSAjay Bhargav #include <net.h> 40aa0ecfebSAjay Bhargav #include <netdev.h> 41aa0ecfebSAjay Bhargav #endif /* CONFIG_ARMADA100_FEC */ 42aa0ecfebSAjay Bhargav 4326749582SAjay Bhargav DECLARE_GLOBAL_DATA_PTR; 4426749582SAjay Bhargav 4526749582SAjay Bhargav int board_early_init_f(void) 4626749582SAjay Bhargav { 4726749582SAjay Bhargav u32 mfp_cfg[] = { 4826749582SAjay Bhargav /* I2C */ 4926749582SAjay Bhargav MFP105_CI2C_SDA, 5026749582SAjay Bhargav MFP106_CI2C_SCL, 5126749582SAjay Bhargav 5226749582SAjay Bhargav /* Enable Console on UART3 */ 5326749582SAjay Bhargav MFPO8_UART3_TXD, 5426749582SAjay Bhargav MFPO9_UART3_RXD, 55aa0ecfebSAjay Bhargav 56aa0ecfebSAjay Bhargav /* Ethernet PHY Interface */ 57aa0ecfebSAjay Bhargav MFP086_ETH_TXCLK, 58aa0ecfebSAjay Bhargav MFP087_ETH_TXEN, 59aa0ecfebSAjay Bhargav MFP088_ETH_TXDQ3, 60aa0ecfebSAjay Bhargav MFP089_ETH_TXDQ2, 61aa0ecfebSAjay Bhargav MFP090_ETH_TXDQ1, 62aa0ecfebSAjay Bhargav MFP091_ETH_TXDQ0, 63aa0ecfebSAjay Bhargav MFP092_ETH_CRS, 64aa0ecfebSAjay Bhargav MFP093_ETH_COL, 65aa0ecfebSAjay Bhargav MFP094_ETH_RXCLK, 66aa0ecfebSAjay Bhargav MFP095_ETH_RXER, 67aa0ecfebSAjay Bhargav MFP096_ETH_RXDQ3, 68aa0ecfebSAjay Bhargav MFP097_ETH_RXDQ2, 69aa0ecfebSAjay Bhargav MFP098_ETH_RXDQ1, 70aa0ecfebSAjay Bhargav MFP099_ETH_RXDQ0, 71aa0ecfebSAjay Bhargav MFP100_ETH_MDC, 72aa0ecfebSAjay Bhargav MFP101_ETH_MDIO, 73aa0ecfebSAjay Bhargav MFP103_ETH_RXDV, 74aa0ecfebSAjay Bhargav 7526749582SAjay Bhargav MFP_EOC /*End of configuration*/ 7626749582SAjay Bhargav }; 7726749582SAjay Bhargav /* configure MFP's */ 7826749582SAjay Bhargav mfp_config(mfp_cfg); 7926749582SAjay Bhargav return 0; 8026749582SAjay Bhargav } 8126749582SAjay Bhargav 8226749582SAjay Bhargav int board_init(void) 8326749582SAjay Bhargav { 8426749582SAjay Bhargav /* arch number of Board */ 8526749582SAjay Bhargav gd->bd->bi_arch_number = MACH_TYPE_SHEEVAD; 8626749582SAjay Bhargav /* adress of boot parameters */ 8726749582SAjay Bhargav gd->bd->bi_boot_params = armd1_sdram_base(0) + 0x100; 88*47e75d72SAjay Bhargav /* Assert PHY_RST# */ 89*47e75d72SAjay Bhargav gpio_direction_output(CONFIG_SYS_GPIO_PHY_RST, GPIO_LOW); 90*47e75d72SAjay Bhargav udelay(10); 91*47e75d72SAjay Bhargav /* Deassert PHY_RST# */ 92*47e75d72SAjay Bhargav gpio_set_value(CONFIG_SYS_GPIO_PHY_RST, GPIO_HIGH); 9326749582SAjay Bhargav return 0; 9426749582SAjay Bhargav } 95aa0ecfebSAjay Bhargav 96aa0ecfebSAjay Bhargav #ifdef CONFIG_ARMADA100_FEC 97aa0ecfebSAjay Bhargav int board_eth_init(bd_t *bis) 98aa0ecfebSAjay Bhargav { 99aa0ecfebSAjay Bhargav struct armd1apmu_registers *apmu_regs = 100aa0ecfebSAjay Bhargav (struct armd1apmu_registers *)ARMD1_APMU_BASE; 101aa0ecfebSAjay Bhargav 102aa0ecfebSAjay Bhargav /* Enable clock of ethernet controller */ 103aa0ecfebSAjay Bhargav writel(FE_CLK_RST | FE_CLK_ENA, &apmu_regs->fecrc); 104aa0ecfebSAjay Bhargav 105aa0ecfebSAjay Bhargav return armada100_fec_register(ARMD1_FEC_BASE); 106aa0ecfebSAjay Bhargav } 107*47e75d72SAjay Bhargav 108*47e75d72SAjay Bhargav #ifdef CONFIG_RESET_PHY_R 109*47e75d72SAjay Bhargav /* Configure and initialize PHY chip 88E3015 */ 110*47e75d72SAjay Bhargav void reset_phy(void) 111*47e75d72SAjay Bhargav { 112*47e75d72SAjay Bhargav u16 phy_adr; 113*47e75d72SAjay Bhargav const char *name = "armd-fec0"; 114*47e75d72SAjay Bhargav 115*47e75d72SAjay Bhargav if (miiphy_set_current_dev(name)) 116*47e75d72SAjay Bhargav return; 117*47e75d72SAjay Bhargav 118*47e75d72SAjay Bhargav /* command to read PHY dev address */ 119*47e75d72SAjay Bhargav if (miiphy_read(name, 0xff, 0xff, &phy_adr)) { 120*47e75d72SAjay Bhargav printf("Err..%s could not read PHY dev address\n", __func__); 121*47e75d72SAjay Bhargav return; 122*47e75d72SAjay Bhargav } 123*47e75d72SAjay Bhargav 124*47e75d72SAjay Bhargav /* Set Ethernet LED in TX blink mode */ 125*47e75d72SAjay Bhargav miiphy_write(name, phy_adr, PHY_LED_MAN_REG, 0x00); 126*47e75d72SAjay Bhargav miiphy_write(name, phy_adr, PHY_LED_PAR_SEL_REG, PHY_LED_VAL); 127*47e75d72SAjay Bhargav 128*47e75d72SAjay Bhargav /* reset the phy */ 129*47e75d72SAjay Bhargav miiphy_reset(name, phy_adr); 130*47e75d72SAjay Bhargav debug("88E3015 Initialized on %s\n", name); 131*47e75d72SAjay Bhargav } 132*47e75d72SAjay Bhargav #endif /* CONFIG_RESET_PHY_R */ 133aa0ecfebSAjay Bhargav #endif /* CONFIG_ARMADA100_FEC */ 134