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) { 69b5b06fb7SYork Sun case 0x18: 70b5b06fb7SYork Sun /* 71b5b06fb7SYork Sun * Configuration: 72b5b06fb7SYork Sun * SERDES: 2 73b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 74b5b06fb7SYork Sun * Lanes: E,F: Aur 75b5b06fb7SYork Sun * Lanes: G,H: SRIO 76b5b06fb7SYork Sun */ 77b5b06fb7SYork Sun case 0x91: 78b5b06fb7SYork Sun /* 79b5b06fb7SYork Sun * Configuration: 80b5b06fb7SYork Sun * SERDES: 2 81b5b06fb7SYork Sun * Lanes: A,B: SGMII 82b5b06fb7SYork Sun * Lanes: C,D: SRIO2 83b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 84b5b06fb7SYork Sun */ 85b5b06fb7SYork Sun case 0x93: 86b5b06fb7SYork Sun /* 87b5b06fb7SYork Sun * Configuration: 88b5b06fb7SYork Sun * SERDES: 2 89b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 90b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 91b5b06fb7SYork Sun */ 92b5b06fb7SYork Sun case 0x98: 93b5b06fb7SYork Sun /* 94b5b06fb7SYork Sun * Configuration: 95b5b06fb7SYork Sun * SERDES: 2 96b5b06fb7SYork Sun * Lanes: A,B,C,D: XAUI2 97b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 98b5b06fb7SYork Sun */ 99b5b06fb7SYork Sun case 0x9a: 100b5b06fb7SYork Sun /* 101b5b06fb7SYork Sun * Configuration: 102b5b06fb7SYork Sun * SERDES: 2 103b5b06fb7SYork Sun * Lanes: A,B: PCI 104b5b06fb7SYork Sun * Lanes: C,D: SGMII 105b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 106b5b06fb7SYork Sun */ 107b5b06fb7SYork Sun case 0x9e: 108b5b06fb7SYork Sun /* 109b5b06fb7SYork Sun * Configuration: 110b5b06fb7SYork Sun * SERDES: 2 111b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 112b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 113b5b06fb7SYork Sun */ 114b5b06fb7SYork Sun case 0xb2: 115b5b06fb7SYork Sun /* 116b5b06fb7SYork Sun * Configuration: 117b5b06fb7SYork Sun * SERDES: 2 118b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 119b5b06fb7SYork Sun * Lanes: E,F: SGMII 3&4 120b5b06fb7SYork Sun * Lanes: G,H: XFI 121b5b06fb7SYork Sun */ 122b5b06fb7SYork Sun case 0xc2: 123b5b06fb7SYork Sun /* 124b5b06fb7SYork Sun * Configuration: 125b5b06fb7SYork Sun * SERDES: 2 126b5b06fb7SYork Sun * Lanes: A,B: SGMII 127b5b06fb7SYork Sun * Lanes: C,D: SRIO2 128b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 129b5b06fb7SYork Sun */ 130b5b06fb7SYork Sun lane_to_slot[12] = 2; 131b5b06fb7SYork Sun lane_to_slot[13] = lane_to_slot[12]; 132b5b06fb7SYork Sun lane_to_slot[14] = lane_to_slot[12]; 133b5b06fb7SYork Sun lane_to_slot[15] = lane_to_slot[12]; 134b5b06fb7SYork Sun break; 135b5b06fb7SYork Sun 136b5b06fb7SYork Sun default: 137b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 138b5b06fb7SYork Sun serdes2_prtcl); 139b5b06fb7SYork Sun break; 140b5b06fb7SYork Sun } 141b5b06fb7SYork Sun return; 142b5b06fb7SYork Sun } 143b5b06fb7SYork Sun 144b5b06fb7SYork Sun #endif /* #ifdef CONFIG_FMAN_ENET */ 145b5b06fb7SYork Sun 146b5b06fb7SYork Sun int board_eth_init(bd_t *bis) 147b5b06fb7SYork Sun { 148b5b06fb7SYork Sun #ifdef CONFIG_FMAN_ENET 149b5b06fb7SYork Sun struct memac_mdio_info memac_mdio_info; 150b5b06fb7SYork Sun struct memac_mdio_info tg_memac_mdio_info; 151b5b06fb7SYork Sun unsigned int i; 152b5b06fb7SYork Sun unsigned int serdes1_prtcl, serdes2_prtcl; 153*ffee1ddeSZhao Qiang int qsgmii; 154*ffee1ddeSZhao Qiang struct mii_dev *bus; 155b5b06fb7SYork Sun ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 156b5b06fb7SYork Sun serdes1_prtcl = in_be32(&gur->rcwsr[4]) & 157b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS1_PRTCL; 158b5b06fb7SYork Sun if (!serdes1_prtcl) { 159b5b06fb7SYork Sun printf("SERDES1 is not enabled\n"); 160b5b06fb7SYork Sun return 0; 161b5b06fb7SYork Sun } 162b5b06fb7SYork Sun serdes1_prtcl >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT; 163b5b06fb7SYork Sun debug("Using SERDES1 Protocol: 0x%x:\n", serdes1_prtcl); 164b5b06fb7SYork Sun 165b5b06fb7SYork Sun serdes2_prtcl = in_be32(&gur->rcwsr[4]) & 166b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS2_PRTCL; 167b5b06fb7SYork Sun if (!serdes2_prtcl) { 168b5b06fb7SYork Sun printf("SERDES2 is not enabled\n"); 169b5b06fb7SYork Sun return 0; 170b5b06fb7SYork Sun } 171b5b06fb7SYork Sun serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; 172b5b06fb7SYork Sun debug("Using SERDES2 Protocol: 0x%x:\n", serdes2_prtcl); 173b5b06fb7SYork Sun 174b5b06fb7SYork Sun printf("Initializing Fman\n"); 175b5b06fb7SYork Sun 176b5b06fb7SYork Sun initialize_lane_to_slot(); 177b5b06fb7SYork Sun 178b5b06fb7SYork Sun memac_mdio_info.regs = 179b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; 180b5b06fb7SYork Sun memac_mdio_info.name = DEFAULT_FM_MDIO_NAME; 181b5b06fb7SYork Sun 182b5b06fb7SYork Sun /* Register the real 1G MDIO bus */ 183b5b06fb7SYork Sun fm_memac_mdio_init(bis, &memac_mdio_info); 184b5b06fb7SYork Sun 185b5b06fb7SYork Sun tg_memac_mdio_info.regs = 186b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR; 187b5b06fb7SYork Sun tg_memac_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME; 188b5b06fb7SYork Sun 189b5b06fb7SYork Sun /* Register the real 10G MDIO bus */ 190b5b06fb7SYork Sun fm_memac_mdio_init(bis, &tg_memac_mdio_info); 191b5b06fb7SYork Sun 192b5b06fb7SYork Sun /* 193b5b06fb7SYork Sun * Program the two on board DTSEC PHY addresses assuming that they are 194b5b06fb7SYork Sun * all SGMII. RGMII is not supported on this board. Setting SGMII 5 and 195b5b06fb7SYork Sun * 6 to on board SGMII phys 196b5b06fb7SYork Sun */ 197b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC5, CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 198b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 199b5b06fb7SYork Sun 200b5b06fb7SYork Sun switch (serdes1_prtcl) { 201b5b06fb7SYork Sun case 0x2a: 202b5b06fb7SYork Sun /* Serdes 1: A-B SGMII, Configuring DTSEC 5 and 6 */ 203b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC5: %x and" 204b5b06fb7SYork Sun "FM1_DTSEC6: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR, 205b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 206b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC5, 207b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 208b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, 209b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 210b5b06fb7SYork Sun break; 211b5b06fb7SYork Sun #ifdef CONFIG_PPC_B4420 212b5b06fb7SYork Sun case 0x18: 213b5b06fb7SYork Sun /* Serdes 1: A-D SGMII, Configuring on board dual SGMII Phy */ 214b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC3: %x and" 215b5b06fb7SYork Sun "FM1_DTSEC4: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR, 216b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 217b5b06fb7SYork Sun /* Fixing Serdes clock by programming FPGA register */ 218b5b06fb7SYork Sun QIXIS_WRITE(brdcfg[4], QIXIS_SRDS1CLK_125); 219b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 220b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 221b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 222b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 223b5b06fb7SYork Sun break; 224b5b06fb7SYork Sun #endif 225b5b06fb7SYork Sun default: 226b5b06fb7SYork Sun printf("Fman: Unsupported SerDes1 Protocol 0x%02x\n", 227b5b06fb7SYork Sun serdes1_prtcl); 228b5b06fb7SYork Sun break; 229b5b06fb7SYork Sun } 230b5b06fb7SYork Sun switch (serdes2_prtcl) { 231b5b06fb7SYork Sun case 0x18: 232b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 233b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 234b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC1, 235b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 236b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 237b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 238b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 239b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 240b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 241b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC4_RISER_PHY_ADDR); 242b5b06fb7SYork Sun break; 243b5b06fb7SYork Sun case 0x49: 244b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 245b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 246b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC1, 247b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 248b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 249b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 250b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 251b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 252b5b06fb7SYork Sun break; 253b5b06fb7SYork Sun case 0x8d: 254b5b06fb7SYork Sun case 0xb2: 255b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 256b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 257b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 258b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 259b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 260b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 261b5b06fb7SYork Sun break; 26216d88f41SSuresh Gupta case 0x98: 26316d88f41SSuresh Gupta /* XAUI in Slot1 and Slot2 */ 26416d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC1: %x\n", 26516d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 26616d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC1, 26716d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 26816d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 26916d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27016d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 27116d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27216d88f41SSuresh Gupta break; 27316d88f41SSuresh Gupta case 0x9E: 27416d88f41SSuresh Gupta /* XAUI in Slot2 */ 27516d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 27616d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27716d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 27816d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 27916d88f41SSuresh Gupta break; 280b5b06fb7SYork Sun default: 281b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 282b5b06fb7SYork Sun serdes2_prtcl); 283b5b06fb7SYork Sun break; 284b5b06fb7SYork Sun } 285b5b06fb7SYork Sun 286*ffee1ddeSZhao Qiang /*set PHY address for QSGMII Riser Card on slot2*/ 287*ffee1ddeSZhao Qiang bus = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); 288*ffee1ddeSZhao Qiang qsgmii = is_qsgmii_riser_card(bus, PHY_BASE_ADDR, PORT_NUM, REGNUM); 289*ffee1ddeSZhao Qiang 290*ffee1ddeSZhao Qiang if (qsgmii) { 291*ffee1ddeSZhao Qiang switch (serdes2_prtcl) { 292*ffee1ddeSZhao Qiang case 0xb2: 293*ffee1ddeSZhao Qiang case 0x8d: 294*ffee1ddeSZhao Qiang fm_info_set_phy_address(FM1_DTSEC3, PHY_BASE_ADDR); 295*ffee1ddeSZhao Qiang fm_info_set_phy_address(FM1_DTSEC4, PHY_BASE_ADDR + 1); 296*ffee1ddeSZhao Qiang break; 297*ffee1ddeSZhao Qiang default: 298*ffee1ddeSZhao Qiang break; 299*ffee1ddeSZhao Qiang } 300*ffee1ddeSZhao Qiang } 301*ffee1ddeSZhao Qiang 302b5b06fb7SYork Sun for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) { 303b5b06fb7SYork Sun int idx = i - FM1_DTSEC1; 304b5b06fb7SYork Sun 305b5b06fb7SYork Sun switch (fm_info_get_enet_if(i)) { 306b5b06fb7SYork Sun case PHY_INTERFACE_MODE_SGMII: 307b5b06fb7SYork Sun fm_info_set_mdio(i, 308b5b06fb7SYork Sun miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME)); 309b5b06fb7SYork Sun break; 310b5b06fb7SYork Sun case PHY_INTERFACE_MODE_NONE: 311b5b06fb7SYork Sun fm_info_set_phy_address(i, 0); 312b5b06fb7SYork Sun break; 313b5b06fb7SYork Sun default: 314b5b06fb7SYork Sun printf("Fman1: DTSEC%u set to unknown interface %i\n", 315b5b06fb7SYork Sun idx + 1, fm_info_get_enet_if(i)); 316b5b06fb7SYork Sun fm_info_set_phy_address(i, 0); 317b5b06fb7SYork Sun break; 318b5b06fb7SYork Sun } 319b5b06fb7SYork Sun } 320b5b06fb7SYork Sun 32116d88f41SSuresh Gupta for (i = FM1_10GEC1; i < FM1_10GEC1 + CONFIG_SYS_NUM_FM1_10GEC; i++) { 32216d88f41SSuresh Gupta int idx = i - FM1_10GEC1; 32316d88f41SSuresh Gupta 32416d88f41SSuresh Gupta switch (fm_info_get_enet_if(i)) { 32516d88f41SSuresh Gupta case PHY_INTERFACE_MODE_XGMII: 32616d88f41SSuresh Gupta fm_info_set_mdio(i, 32716d88f41SSuresh Gupta miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME)); 32816d88f41SSuresh Gupta break; 32916d88f41SSuresh Gupta default: 33016d88f41SSuresh Gupta printf("Fman1: 10GSEC%u set to unknown interface %i\n", 33116d88f41SSuresh Gupta idx + 1, fm_info_get_enet_if(i)); 33216d88f41SSuresh Gupta fm_info_set_phy_address(i, 0); 33316d88f41SSuresh Gupta break; 33416d88f41SSuresh Gupta } 33516d88f41SSuresh Gupta } 33616d88f41SSuresh Gupta 33716d88f41SSuresh Gupta 338b5b06fb7SYork Sun cpu_eth_init(bis); 339b5b06fb7SYork Sun #endif 340b5b06fb7SYork Sun 341b5b06fb7SYork Sun return pci_eth_init(bis); 342b5b06fb7SYork Sun } 343b5b06fb7SYork Sun 344b5b06fb7SYork Sun void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr, 345b5b06fb7SYork Sun enum fm_port port, int offset) 346b5b06fb7SYork Sun { 347b5b06fb7SYork Sun int phy; 348b5b06fb7SYork Sun char alias[32]; 349b5b06fb7SYork Sun 350b5b06fb7SYork Sun if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII) { 351b5b06fb7SYork Sun phy = fm_info_get_phy_address(port); 352b5b06fb7SYork Sun 353b5b06fb7SYork Sun sprintf(alias, "phy_sgmii_%x", phy); 354b5b06fb7SYork Sun fdt_set_phy_handle(fdt, compat, addr, alias); 355b5b06fb7SYork Sun } 356b5b06fb7SYork Sun } 357b5b06fb7SYork Sun 358b5b06fb7SYork Sun void fdt_fixup_board_enet(void *fdt) 359b5b06fb7SYork Sun { 360b5b06fb7SYork Sun int i; 361b5b06fb7SYork Sun char alias[32]; 362b5b06fb7SYork Sun 363b5b06fb7SYork Sun for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) { 364b5b06fb7SYork Sun switch (fm_info_get_enet_if(i)) { 365b5b06fb7SYork Sun case PHY_INTERFACE_MODE_NONE: 366b5b06fb7SYork Sun sprintf(alias, "ethernet%u", i); 367b5b06fb7SYork Sun fdt_status_disabled_by_alias(fdt, alias); 368b5b06fb7SYork Sun break; 369b5b06fb7SYork Sun default: 370b5b06fb7SYork Sun break; 371b5b06fb7SYork Sun } 372b5b06fb7SYork Sun } 373b5b06fb7SYork Sun } 374