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> 3547e75d72SAjay Bhargav #include <asm/gpio.h> 3647e75d72SAjay 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 75*daa4b2f7SAjay Bhargav /* SSP2 */ 76*daa4b2f7SAjay Bhargav MFP107_SSP2_RXD, 77*daa4b2f7SAjay Bhargav MFP108_SSP2_TXD, 78*daa4b2f7SAjay Bhargav MFP110_SSP2_CS, 79*daa4b2f7SAjay Bhargav MFP111_SSP2_CLK, 80*daa4b2f7SAjay Bhargav 8126749582SAjay Bhargav MFP_EOC /*End of configuration*/ 8226749582SAjay Bhargav }; 8326749582SAjay Bhargav /* configure MFP's */ 8426749582SAjay Bhargav mfp_config(mfp_cfg); 8526749582SAjay Bhargav return 0; 8626749582SAjay Bhargav } 8726749582SAjay Bhargav 8826749582SAjay Bhargav int board_init(void) 8926749582SAjay Bhargav { 90*daa4b2f7SAjay Bhargav struct armd1apb2_registers *apb2_regs = 91*daa4b2f7SAjay Bhargav (struct armd1apb2_registers *)ARMD1_APBC2_BASE; 92*daa4b2f7SAjay Bhargav 9326749582SAjay Bhargav /* arch number of Board */ 9426749582SAjay Bhargav gd->bd->bi_arch_number = MACH_TYPE_SHEEVAD; 9526749582SAjay Bhargav /* adress of boot parameters */ 9626749582SAjay Bhargav gd->bd->bi_boot_params = armd1_sdram_base(0) + 0x100; 9747e75d72SAjay Bhargav /* Assert PHY_RST# */ 9847e75d72SAjay Bhargav gpio_direction_output(CONFIG_SYS_GPIO_PHY_RST, GPIO_LOW); 9947e75d72SAjay Bhargav udelay(10); 10047e75d72SAjay Bhargav /* Deassert PHY_RST# */ 10147e75d72SAjay Bhargav gpio_set_value(CONFIG_SYS_GPIO_PHY_RST, GPIO_HIGH); 102*daa4b2f7SAjay Bhargav 103*daa4b2f7SAjay Bhargav /* Enable SSP2 clock */ 104*daa4b2f7SAjay Bhargav writel(SSP2_APBCLK | SSP2_FNCLK, &apb2_regs->ssp2_clkrst); 10526749582SAjay Bhargav return 0; 10626749582SAjay Bhargav } 107aa0ecfebSAjay Bhargav 108aa0ecfebSAjay Bhargav #ifdef CONFIG_ARMADA100_FEC 109aa0ecfebSAjay Bhargav int board_eth_init(bd_t *bis) 110aa0ecfebSAjay Bhargav { 111aa0ecfebSAjay Bhargav struct armd1apmu_registers *apmu_regs = 112aa0ecfebSAjay Bhargav (struct armd1apmu_registers *)ARMD1_APMU_BASE; 113aa0ecfebSAjay Bhargav 114aa0ecfebSAjay Bhargav /* Enable clock of ethernet controller */ 115aa0ecfebSAjay Bhargav writel(FE_CLK_RST | FE_CLK_ENA, &apmu_regs->fecrc); 116aa0ecfebSAjay Bhargav 117aa0ecfebSAjay Bhargav return armada100_fec_register(ARMD1_FEC_BASE); 118aa0ecfebSAjay Bhargav } 11947e75d72SAjay Bhargav 12047e75d72SAjay Bhargav #ifdef CONFIG_RESET_PHY_R 12147e75d72SAjay Bhargav /* Configure and initialize PHY chip 88E3015 */ 12247e75d72SAjay Bhargav void reset_phy(void) 12347e75d72SAjay Bhargav { 12447e75d72SAjay Bhargav u16 phy_adr; 12547e75d72SAjay Bhargav const char *name = "armd-fec0"; 12647e75d72SAjay Bhargav 12747e75d72SAjay Bhargav if (miiphy_set_current_dev(name)) 12847e75d72SAjay Bhargav return; 12947e75d72SAjay Bhargav 13047e75d72SAjay Bhargav /* command to read PHY dev address */ 13147e75d72SAjay Bhargav if (miiphy_read(name, 0xff, 0xff, &phy_adr)) { 13247e75d72SAjay Bhargav printf("Err..%s could not read PHY dev address\n", __func__); 13347e75d72SAjay Bhargav return; 13447e75d72SAjay Bhargav } 13547e75d72SAjay Bhargav 13647e75d72SAjay Bhargav /* Set Ethernet LED in TX blink mode */ 13747e75d72SAjay Bhargav miiphy_write(name, phy_adr, PHY_LED_MAN_REG, 0x00); 13847e75d72SAjay Bhargav miiphy_write(name, phy_adr, PHY_LED_PAR_SEL_REG, PHY_LED_VAL); 13947e75d72SAjay Bhargav 14047e75d72SAjay Bhargav /* reset the phy */ 14147e75d72SAjay Bhargav miiphy_reset(name, phy_adr); 14247e75d72SAjay Bhargav debug("88E3015 Initialized on %s\n", name); 14347e75d72SAjay Bhargav } 14447e75d72SAjay Bhargav #endif /* CONFIG_RESET_PHY_R */ 145aa0ecfebSAjay Bhargav #endif /* CONFIG_ARMADA100_FEC */ 146