1b5b06fb7SYork Sun /* 2b5b06fb7SYork Sun * Copyright 2012 Freescale Semiconductor, Inc. 3b5b06fb7SYork Sun * Author: Sandeep Kumar Singh <sandeep@freescale.com> 4b5b06fb7SYork Sun * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6b5b06fb7SYork Sun */ 7b5b06fb7SYork Sun 8b5b06fb7SYork Sun /* This file is based on board/freescale/corenet_ds/eth_superhydra.c */ 9b5b06fb7SYork Sun 10b5b06fb7SYork Sun /* 11b5b06fb7SYork Sun * This file handles the board muxing between the Fman Ethernet MACs and 12b5b06fb7SYork Sun * the RGMII/SGMII/XGMII PHYs on a Freescale B4860 "Centaur". The SGMII 13b5b06fb7SYork Sun * PHYs are the two on-board 1Gb ports. There are no RGMII PHY on board. 14b5b06fb7SYork Sun * The 10Gb XGMII PHY is provided via the XAUI riser card. There is only 15b5b06fb7SYork Sun * one Fman device on B4860. The SERDES configuration is used to determine 16b5b06fb7SYork Sun * where the SGMII and XAUI cards exist, and also which Fman MACs are routed 17b5b06fb7SYork Sun * to which PHYs. So for a given Fman MAC, there is one and only PHY it 18b5b06fb7SYork Sun * connects to. MACs cannot be routed to PHYs dynamically. This configuration 19b5b06fb7SYork Sun * is done at boot time by reading SERDES protocol from RCW. 20b5b06fb7SYork Sun */ 21b5b06fb7SYork Sun 22b5b06fb7SYork Sun #include <common.h> 23b5b06fb7SYork Sun #include <netdev.h> 24b5b06fb7SYork Sun #include <asm/fsl_serdes.h> 25b5b06fb7SYork Sun #include <fm_eth.h> 26b5b06fb7SYork Sun #include <fsl_mdio.h> 27b5b06fb7SYork Sun #include <malloc.h> 28b5b06fb7SYork Sun #include <fdt_support.h> 29b5b06fb7SYork Sun #include <asm/fsl_dtsec.h> 30b5b06fb7SYork Sun 31b5b06fb7SYork Sun #include "../common/ngpixis.h" 32b5b06fb7SYork Sun #include "../common/fman.h" 33b5b06fb7SYork Sun #include "../common/qixis.h" 34b5b06fb7SYork Sun #include "b4860qds_qixis.h" 35b5b06fb7SYork Sun 36b5b06fb7SYork Sun #define EMI_NONE 0xFFFFFFFF 37b5b06fb7SYork Sun 38b5b06fb7SYork Sun #ifdef CONFIG_FMAN_ENET 39b5b06fb7SYork Sun 40b5b06fb7SYork Sun /* 41b5b06fb7SYork Sun * Mapping of all 16 SERDES lanes to board slots. A value n(>0) will mean that 42b5b06fb7SYork Sun * lane at index is mapped to slot number n. A value of '0' will mean 43b5b06fb7SYork Sun * that the mapping must be determined dynamically, or that the lane maps to 44b5b06fb7SYork Sun * something other than a board slot 45b5b06fb7SYork Sun */ 46b5b06fb7SYork Sun static u8 lane_to_slot[] = { 47b5b06fb7SYork Sun 0, 0, 0, 0, 48b5b06fb7SYork Sun 0, 0, 0, 0, 49b5b06fb7SYork Sun 1, 1, 1, 1, 50b5b06fb7SYork Sun 0, 0, 0, 0 51b5b06fb7SYork Sun }; 52b5b06fb7SYork Sun 53b5b06fb7SYork Sun /* 54b5b06fb7SYork Sun * This function initializes the lane_to_slot[] array. It reads RCW to check 55b5b06fb7SYork Sun * if Serdes2{E,F,G,H} is configured as slot 2 or as SFP and initializes 56b5b06fb7SYork Sun * lane_to_slot[] accordingly 57b5b06fb7SYork Sun */ 58b5b06fb7SYork Sun static void initialize_lane_to_slot(void) 59b5b06fb7SYork Sun { 60b5b06fb7SYork Sun unsigned int serdes2_prtcl; 61b5b06fb7SYork Sun ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 62b5b06fb7SYork Sun serdes2_prtcl = in_be32(&gur->rcwsr[4]) & 63b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS2_PRTCL; 64b5b06fb7SYork Sun serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; 65b5b06fb7SYork Sun debug("Initializing lane to slot: Serdes2 protocol: %x\n", 66b5b06fb7SYork Sun serdes2_prtcl); 67b5b06fb7SYork Sun 68b5b06fb7SYork Sun switch (serdes2_prtcl) { 69*c7d506d4Spoonam aggrwal case 0x17: 70b5b06fb7SYork Sun case 0x18: 71b5b06fb7SYork Sun /* 72b5b06fb7SYork Sun * Configuration: 73b5b06fb7SYork Sun * SERDES: 2 74b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 75b5b06fb7SYork Sun * Lanes: E,F: Aur 76b5b06fb7SYork Sun * Lanes: G,H: SRIO 77b5b06fb7SYork Sun */ 78b5b06fb7SYork Sun case 0x91: 79b5b06fb7SYork Sun /* 80b5b06fb7SYork Sun * Configuration: 81b5b06fb7SYork Sun * SERDES: 2 82b5b06fb7SYork Sun * Lanes: A,B: SGMII 83b5b06fb7SYork Sun * Lanes: C,D: SRIO2 84b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 85b5b06fb7SYork Sun */ 86b5b06fb7SYork Sun case 0x93: 87b5b06fb7SYork Sun /* 88b5b06fb7SYork Sun * Configuration: 89b5b06fb7SYork Sun * SERDES: 2 90b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 91b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 92b5b06fb7SYork Sun */ 93b5b06fb7SYork Sun case 0x98: 94b5b06fb7SYork Sun /* 95b5b06fb7SYork Sun * Configuration: 96b5b06fb7SYork Sun * SERDES: 2 97b5b06fb7SYork Sun * Lanes: A,B,C,D: XAUI2 98b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 99b5b06fb7SYork Sun */ 100b5b06fb7SYork Sun case 0x9a: 101b5b06fb7SYork Sun /* 102b5b06fb7SYork Sun * Configuration: 103b5b06fb7SYork Sun * SERDES: 2 104b5b06fb7SYork Sun * Lanes: A,B: PCI 105b5b06fb7SYork Sun * Lanes: C,D: SGMII 106b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 107b5b06fb7SYork Sun */ 108b5b06fb7SYork Sun case 0x9e: 109b5b06fb7SYork Sun /* 110b5b06fb7SYork Sun * Configuration: 111b5b06fb7SYork Sun * SERDES: 2 112b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 113b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 114b5b06fb7SYork Sun */ 115b5b06fb7SYork Sun case 0xb2: 116b5b06fb7SYork Sun /* 117b5b06fb7SYork Sun * Configuration: 118b5b06fb7SYork Sun * SERDES: 2 119b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 120b5b06fb7SYork Sun * Lanes: E,F: SGMII 3&4 121b5b06fb7SYork Sun * Lanes: G,H: XFI 122b5b06fb7SYork Sun */ 123b5b06fb7SYork Sun case 0xc2: 124b5b06fb7SYork Sun /* 125b5b06fb7SYork Sun * Configuration: 126b5b06fb7SYork Sun * SERDES: 2 127b5b06fb7SYork Sun * Lanes: A,B: SGMII 128b5b06fb7SYork Sun * Lanes: C,D: SRIO2 129b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 130b5b06fb7SYork Sun */ 131b5b06fb7SYork Sun lane_to_slot[12] = 2; 132b5b06fb7SYork Sun lane_to_slot[13] = lane_to_slot[12]; 133b5b06fb7SYork Sun lane_to_slot[14] = lane_to_slot[12]; 134b5b06fb7SYork Sun lane_to_slot[15] = lane_to_slot[12]; 135b5b06fb7SYork Sun break; 136b5b06fb7SYork Sun 137b5b06fb7SYork Sun default: 138b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 139b5b06fb7SYork Sun serdes2_prtcl); 140b5b06fb7SYork Sun break; 141b5b06fb7SYork Sun } 142b5b06fb7SYork Sun return; 143b5b06fb7SYork Sun } 144b5b06fb7SYork Sun 145b5b06fb7SYork Sun #endif /* #ifdef CONFIG_FMAN_ENET */ 146b5b06fb7SYork Sun 147b5b06fb7SYork Sun int board_eth_init(bd_t *bis) 148b5b06fb7SYork Sun { 149b5b06fb7SYork Sun #ifdef CONFIG_FMAN_ENET 150b5b06fb7SYork Sun struct memac_mdio_info memac_mdio_info; 151b5b06fb7SYork Sun struct memac_mdio_info tg_memac_mdio_info; 152b5b06fb7SYork Sun unsigned int i; 153b5b06fb7SYork Sun unsigned int serdes1_prtcl, serdes2_prtcl; 154ffee1ddeSZhao Qiang int qsgmii; 155ffee1ddeSZhao Qiang struct mii_dev *bus; 156b5b06fb7SYork Sun ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 157b5b06fb7SYork Sun serdes1_prtcl = in_be32(&gur->rcwsr[4]) & 158b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS1_PRTCL; 159b5b06fb7SYork Sun if (!serdes1_prtcl) { 160b5b06fb7SYork Sun printf("SERDES1 is not enabled\n"); 161b5b06fb7SYork Sun return 0; 162b5b06fb7SYork Sun } 163b5b06fb7SYork Sun serdes1_prtcl >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT; 164b5b06fb7SYork Sun debug("Using SERDES1 Protocol: 0x%x:\n", serdes1_prtcl); 165b5b06fb7SYork Sun 166b5b06fb7SYork Sun serdes2_prtcl = in_be32(&gur->rcwsr[4]) & 167b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS2_PRTCL; 168b5b06fb7SYork Sun if (!serdes2_prtcl) { 169b5b06fb7SYork Sun printf("SERDES2 is not enabled\n"); 170b5b06fb7SYork Sun return 0; 171b5b06fb7SYork Sun } 172b5b06fb7SYork Sun serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; 173b5b06fb7SYork Sun debug("Using SERDES2 Protocol: 0x%x:\n", serdes2_prtcl); 174b5b06fb7SYork Sun 175b5b06fb7SYork Sun printf("Initializing Fman\n"); 176b5b06fb7SYork Sun 177b5b06fb7SYork Sun initialize_lane_to_slot(); 178b5b06fb7SYork Sun 179b5b06fb7SYork Sun memac_mdio_info.regs = 180b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; 181b5b06fb7SYork Sun memac_mdio_info.name = DEFAULT_FM_MDIO_NAME; 182b5b06fb7SYork Sun 183b5b06fb7SYork Sun /* Register the real 1G MDIO bus */ 184b5b06fb7SYork Sun fm_memac_mdio_init(bis, &memac_mdio_info); 185b5b06fb7SYork Sun 186b5b06fb7SYork Sun tg_memac_mdio_info.regs = 187b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR; 188b5b06fb7SYork Sun tg_memac_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME; 189b5b06fb7SYork Sun 190b5b06fb7SYork Sun /* Register the real 10G MDIO bus */ 191b5b06fb7SYork Sun fm_memac_mdio_init(bis, &tg_memac_mdio_info); 192b5b06fb7SYork Sun 193b5b06fb7SYork Sun /* 194b5b06fb7SYork Sun * Program the two on board DTSEC PHY addresses assuming that they are 195b5b06fb7SYork Sun * all SGMII. RGMII is not supported on this board. Setting SGMII 5 and 196b5b06fb7SYork Sun * 6 to on board SGMII phys 197b5b06fb7SYork Sun */ 198b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC5, CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 199b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 200b5b06fb7SYork Sun 201b5b06fb7SYork Sun switch (serdes1_prtcl) { 202*c7d506d4Spoonam aggrwal case 0x29: 203b5b06fb7SYork Sun case 0x2a: 204b5b06fb7SYork Sun /* Serdes 1: A-B SGMII, Configuring DTSEC 5 and 6 */ 205b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC5: %x and" 206b5b06fb7SYork Sun "FM1_DTSEC6: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR, 207b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 208b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC5, 209b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 210b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, 211b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 212b5b06fb7SYork Sun break; 213b5b06fb7SYork Sun #ifdef CONFIG_PPC_B4420 214*c7d506d4Spoonam aggrwal case 0x17: 215b5b06fb7SYork Sun case 0x18: 216b5b06fb7SYork Sun /* Serdes 1: A-D SGMII, Configuring on board dual SGMII Phy */ 217b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC3: %x and" 218b5b06fb7SYork Sun "FM1_DTSEC4: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR, 219b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 220b5b06fb7SYork Sun /* Fixing Serdes clock by programming FPGA register */ 221b5b06fb7SYork Sun QIXIS_WRITE(brdcfg[4], QIXIS_SRDS1CLK_125); 222b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 223b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 224b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 225b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 226b5b06fb7SYork Sun break; 227b5b06fb7SYork Sun #endif 228b5b06fb7SYork Sun default: 229b5b06fb7SYork Sun printf("Fman: Unsupported SerDes1 Protocol 0x%02x\n", 230b5b06fb7SYork Sun serdes1_prtcl); 231b5b06fb7SYork Sun break; 232b5b06fb7SYork Sun } 233b5b06fb7SYork Sun switch (serdes2_prtcl) { 234*c7d506d4Spoonam aggrwal case 0x17: 235b5b06fb7SYork Sun case 0x18: 236b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 237b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 238b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC1, 239b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 240b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 241b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 242b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 243b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 244b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 245b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC4_RISER_PHY_ADDR); 246b5b06fb7SYork Sun break; 247*c7d506d4Spoonam aggrwal case 0x48: 248b5b06fb7SYork Sun case 0x49: 249b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 250b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 251b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC1, 252b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 253b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 254b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 255b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 256b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 257b5b06fb7SYork Sun break; 258b5b06fb7SYork Sun case 0x8d: 259b5b06fb7SYork Sun case 0xb2: 260b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 261b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 262b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 263b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 264b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 265b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 266b5b06fb7SYork Sun break; 26716d88f41SSuresh Gupta case 0x98: 26816d88f41SSuresh Gupta /* XAUI in Slot1 and Slot2 */ 26916d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC1: %x\n", 27016d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 27116d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC1, 27216d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 27316d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 27416d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27516d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 27616d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27716d88f41SSuresh Gupta break; 27816d88f41SSuresh Gupta case 0x9E: 27916d88f41SSuresh Gupta /* XAUI in Slot2 */ 28016d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 28116d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 28216d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 28316d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 28416d88f41SSuresh Gupta break; 285b5b06fb7SYork Sun default: 286b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 287b5b06fb7SYork Sun serdes2_prtcl); 288b5b06fb7SYork Sun break; 289b5b06fb7SYork Sun } 290b5b06fb7SYork Sun 291ffee1ddeSZhao Qiang /*set PHY address for QSGMII Riser Card on slot2*/ 292ffee1ddeSZhao Qiang bus = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); 293ffee1ddeSZhao Qiang qsgmii = is_qsgmii_riser_card(bus, PHY_BASE_ADDR, PORT_NUM, REGNUM); 294ffee1ddeSZhao Qiang 295ffee1ddeSZhao Qiang if (qsgmii) { 296ffee1ddeSZhao Qiang switch (serdes2_prtcl) { 297ffee1ddeSZhao Qiang case 0xb2: 298ffee1ddeSZhao Qiang case 0x8d: 299ffee1ddeSZhao Qiang fm_info_set_phy_address(FM1_DTSEC3, PHY_BASE_ADDR); 300ffee1ddeSZhao Qiang fm_info_set_phy_address(FM1_DTSEC4, PHY_BASE_ADDR + 1); 301ffee1ddeSZhao Qiang break; 302ffee1ddeSZhao Qiang default: 303ffee1ddeSZhao Qiang break; 304ffee1ddeSZhao Qiang } 305ffee1ddeSZhao Qiang } 306ffee1ddeSZhao Qiang 307b5b06fb7SYork Sun for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) { 308b5b06fb7SYork Sun int idx = i - FM1_DTSEC1; 309b5b06fb7SYork Sun 310b5b06fb7SYork Sun switch (fm_info_get_enet_if(i)) { 311b5b06fb7SYork Sun case PHY_INTERFACE_MODE_SGMII: 312b5b06fb7SYork Sun fm_info_set_mdio(i, 313b5b06fb7SYork Sun miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME)); 314b5b06fb7SYork Sun break; 315b5b06fb7SYork Sun case PHY_INTERFACE_MODE_NONE: 316b5b06fb7SYork Sun fm_info_set_phy_address(i, 0); 317b5b06fb7SYork Sun break; 318b5b06fb7SYork Sun default: 319b5b06fb7SYork Sun printf("Fman1: DTSEC%u set to unknown interface %i\n", 320b5b06fb7SYork Sun idx + 1, fm_info_get_enet_if(i)); 321b5b06fb7SYork Sun fm_info_set_phy_address(i, 0); 322b5b06fb7SYork Sun break; 323b5b06fb7SYork Sun } 324b5b06fb7SYork Sun } 325b5b06fb7SYork Sun 32616d88f41SSuresh Gupta for (i = FM1_10GEC1; i < FM1_10GEC1 + CONFIG_SYS_NUM_FM1_10GEC; i++) { 32716d88f41SSuresh Gupta int idx = i - FM1_10GEC1; 32816d88f41SSuresh Gupta 32916d88f41SSuresh Gupta switch (fm_info_get_enet_if(i)) { 33016d88f41SSuresh Gupta case PHY_INTERFACE_MODE_XGMII: 33116d88f41SSuresh Gupta fm_info_set_mdio(i, 33216d88f41SSuresh Gupta miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME)); 33316d88f41SSuresh Gupta break; 33416d88f41SSuresh Gupta default: 33516d88f41SSuresh Gupta printf("Fman1: 10GSEC%u set to unknown interface %i\n", 33616d88f41SSuresh Gupta idx + 1, fm_info_get_enet_if(i)); 33716d88f41SSuresh Gupta fm_info_set_phy_address(i, 0); 33816d88f41SSuresh Gupta break; 33916d88f41SSuresh Gupta } 34016d88f41SSuresh Gupta } 34116d88f41SSuresh Gupta 34216d88f41SSuresh Gupta 343b5b06fb7SYork Sun cpu_eth_init(bis); 344b5b06fb7SYork Sun #endif 345b5b06fb7SYork Sun 346b5b06fb7SYork Sun return pci_eth_init(bis); 347b5b06fb7SYork Sun } 348b5b06fb7SYork Sun 349b5b06fb7SYork Sun void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr, 350b5b06fb7SYork Sun enum fm_port port, int offset) 351b5b06fb7SYork Sun { 352b5b06fb7SYork Sun int phy; 353b5b06fb7SYork Sun char alias[32]; 354b5b06fb7SYork Sun 355b5b06fb7SYork Sun if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII) { 356b5b06fb7SYork Sun phy = fm_info_get_phy_address(port); 357b5b06fb7SYork Sun 358b5b06fb7SYork Sun sprintf(alias, "phy_sgmii_%x", phy); 359b5b06fb7SYork Sun fdt_set_phy_handle(fdt, compat, addr, alias); 360b5b06fb7SYork Sun } 361b5b06fb7SYork Sun } 362b5b06fb7SYork Sun 363b5b06fb7SYork Sun void fdt_fixup_board_enet(void *fdt) 364b5b06fb7SYork Sun { 365b5b06fb7SYork Sun int i; 366b5b06fb7SYork Sun char alias[32]; 367b5b06fb7SYork Sun 368b5b06fb7SYork Sun for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) { 369b5b06fb7SYork Sun switch (fm_info_get_enet_if(i)) { 370b5b06fb7SYork Sun case PHY_INTERFACE_MODE_NONE: 371b5b06fb7SYork Sun sprintf(alias, "ethernet%u", i); 372b5b06fb7SYork Sun fdt_status_disabled_by_alias(fdt, alias); 373b5b06fb7SYork Sun break; 374b5b06fb7SYork Sun default: 375b5b06fb7SYork Sun break; 376b5b06fb7SYork Sun } 377b5b06fb7SYork Sun } 378b5b06fb7SYork Sun } 379