1b5b06fb7SYork Sun /* 2b5b06fb7SYork Sun * Copyright 2012 Freescale Semiconductor, Inc. 3b5b06fb7SYork Sun * Author: Sandeep Kumar Singh <sandeep@freescale.com> 4b5b06fb7SYork Sun * 5b5b06fb7SYork Sun * See file CREDITS for list of people who contributed to this 6b5b06fb7SYork Sun * project. 7b5b06fb7SYork Sun * 8b5b06fb7SYork Sun * This program is free software; you can redistribute it and/or 9b5b06fb7SYork Sun * modify it under the terms of the GNU General Public License as 10b5b06fb7SYork Sun * published by the Free Software Foundation; either version 2 of 11b5b06fb7SYork Sun * the License, or (at your option) any later version. 12b5b06fb7SYork Sun * 13b5b06fb7SYork Sun * This program is distributed in the hope that it will be useful, 14b5b06fb7SYork Sun * but WITHOUT ANY WARRANTY; without even the implied warranty of 15b5b06fb7SYork Sun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16b5b06fb7SYork Sun * GNU General Public License for more details. 17b5b06fb7SYork Sun * 18b5b06fb7SYork Sun * You should have received a copy of the GNU General Public License 19b5b06fb7SYork Sun * along with this program; if not, write to the Free Software 20b5b06fb7SYork Sun * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21b5b06fb7SYork Sun * MA 02111-1307 USA 22b5b06fb7SYork Sun */ 23b5b06fb7SYork Sun 24b5b06fb7SYork Sun /* This file is based on board/freescale/corenet_ds/eth_superhydra.c */ 25b5b06fb7SYork Sun 26b5b06fb7SYork Sun /* 27b5b06fb7SYork Sun * This file handles the board muxing between the Fman Ethernet MACs and 28b5b06fb7SYork Sun * the RGMII/SGMII/XGMII PHYs on a Freescale B4860 "Centaur". The SGMII 29b5b06fb7SYork Sun * PHYs are the two on-board 1Gb ports. There are no RGMII PHY on board. 30b5b06fb7SYork Sun * The 10Gb XGMII PHY is provided via the XAUI riser card. There is only 31b5b06fb7SYork Sun * one Fman device on B4860. The SERDES configuration is used to determine 32b5b06fb7SYork Sun * where the SGMII and XAUI cards exist, and also which Fman MACs are routed 33b5b06fb7SYork Sun * to which PHYs. So for a given Fman MAC, there is one and only PHY it 34b5b06fb7SYork Sun * connects to. MACs cannot be routed to PHYs dynamically. This configuration 35b5b06fb7SYork Sun * is done at boot time by reading SERDES protocol from RCW. 36b5b06fb7SYork Sun */ 37b5b06fb7SYork Sun 38b5b06fb7SYork Sun #include <common.h> 39b5b06fb7SYork Sun #include <netdev.h> 40b5b06fb7SYork Sun #include <asm/fsl_serdes.h> 41b5b06fb7SYork Sun #include <fm_eth.h> 42b5b06fb7SYork Sun #include <fsl_mdio.h> 43b5b06fb7SYork Sun #include <malloc.h> 44b5b06fb7SYork Sun #include <fdt_support.h> 45b5b06fb7SYork Sun #include <asm/fsl_dtsec.h> 46b5b06fb7SYork Sun 47b5b06fb7SYork Sun #include "../common/ngpixis.h" 48b5b06fb7SYork Sun #include "../common/fman.h" 49b5b06fb7SYork Sun #include "../common/qixis.h" 50b5b06fb7SYork Sun #include "b4860qds_qixis.h" 51b5b06fb7SYork Sun 52b5b06fb7SYork Sun #define EMI_NONE 0xFFFFFFFF 53b5b06fb7SYork Sun 54b5b06fb7SYork Sun #ifdef CONFIG_FMAN_ENET 55b5b06fb7SYork Sun 56b5b06fb7SYork Sun /* 57b5b06fb7SYork Sun * Mapping of all 16 SERDES lanes to board slots. A value n(>0) will mean that 58b5b06fb7SYork Sun * lane at index is mapped to slot number n. A value of '0' will mean 59b5b06fb7SYork Sun * that the mapping must be determined dynamically, or that the lane maps to 60b5b06fb7SYork Sun * something other than a board slot 61b5b06fb7SYork Sun */ 62b5b06fb7SYork Sun static u8 lane_to_slot[] = { 63b5b06fb7SYork Sun 0, 0, 0, 0, 64b5b06fb7SYork Sun 0, 0, 0, 0, 65b5b06fb7SYork Sun 1, 1, 1, 1, 66b5b06fb7SYork Sun 0, 0, 0, 0 67b5b06fb7SYork Sun }; 68b5b06fb7SYork Sun 69b5b06fb7SYork Sun /* 70b5b06fb7SYork Sun * This function initializes the lane_to_slot[] array. It reads RCW to check 71b5b06fb7SYork Sun * if Serdes2{E,F,G,H} is configured as slot 2 or as SFP and initializes 72b5b06fb7SYork Sun * lane_to_slot[] accordingly 73b5b06fb7SYork Sun */ 74b5b06fb7SYork Sun static void initialize_lane_to_slot(void) 75b5b06fb7SYork Sun { 76b5b06fb7SYork Sun unsigned int serdes2_prtcl; 77b5b06fb7SYork Sun ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 78b5b06fb7SYork Sun serdes2_prtcl = in_be32(&gur->rcwsr[4]) & 79b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS2_PRTCL; 80b5b06fb7SYork Sun serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; 81b5b06fb7SYork Sun debug("Initializing lane to slot: Serdes2 protocol: %x\n", 82b5b06fb7SYork Sun serdes2_prtcl); 83b5b06fb7SYork Sun 84b5b06fb7SYork Sun switch (serdes2_prtcl) { 85b5b06fb7SYork Sun case 0x18: 86b5b06fb7SYork Sun /* 87b5b06fb7SYork Sun * Configuration: 88b5b06fb7SYork Sun * SERDES: 2 89b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 90b5b06fb7SYork Sun * Lanes: E,F: Aur 91b5b06fb7SYork Sun * Lanes: G,H: SRIO 92b5b06fb7SYork Sun */ 93b5b06fb7SYork Sun case 0x91: 94b5b06fb7SYork Sun /* 95b5b06fb7SYork Sun * Configuration: 96b5b06fb7SYork Sun * SERDES: 2 97b5b06fb7SYork Sun * Lanes: A,B: SGMII 98b5b06fb7SYork Sun * Lanes: C,D: SRIO2 99b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 100b5b06fb7SYork Sun */ 101b5b06fb7SYork Sun case 0x93: 102b5b06fb7SYork Sun /* 103b5b06fb7SYork Sun * Configuration: 104b5b06fb7SYork Sun * SERDES: 2 105b5b06fb7SYork Sun * Lanes: A,B,C,D: SGMII 106b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 107b5b06fb7SYork Sun */ 108b5b06fb7SYork Sun case 0x98: 109b5b06fb7SYork Sun /* 110b5b06fb7SYork Sun * Configuration: 111b5b06fb7SYork Sun * SERDES: 2 112b5b06fb7SYork Sun * Lanes: A,B,C,D: XAUI2 113b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 114b5b06fb7SYork Sun */ 115b5b06fb7SYork Sun case 0x9a: 116b5b06fb7SYork Sun /* 117b5b06fb7SYork Sun * Configuration: 118b5b06fb7SYork Sun * SERDES: 2 119b5b06fb7SYork Sun * Lanes: A,B: PCI 120b5b06fb7SYork Sun * Lanes: C,D: SGMII 121b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 122b5b06fb7SYork Sun */ 123b5b06fb7SYork Sun case 0x9e: 124b5b06fb7SYork Sun /* 125b5b06fb7SYork Sun * Configuration: 126b5b06fb7SYork Sun * SERDES: 2 127b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 128b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 129b5b06fb7SYork Sun */ 130b5b06fb7SYork Sun case 0xb2: 131b5b06fb7SYork Sun /* 132b5b06fb7SYork Sun * Configuration: 133b5b06fb7SYork Sun * SERDES: 2 134b5b06fb7SYork Sun * Lanes: A,B,C,D: PCI 135b5b06fb7SYork Sun * Lanes: E,F: SGMII 3&4 136b5b06fb7SYork Sun * Lanes: G,H: XFI 137b5b06fb7SYork Sun */ 138b5b06fb7SYork Sun case 0xc2: 139b5b06fb7SYork Sun /* 140b5b06fb7SYork Sun * Configuration: 141b5b06fb7SYork Sun * SERDES: 2 142b5b06fb7SYork Sun * Lanes: A,B: SGMII 143b5b06fb7SYork Sun * Lanes: C,D: SRIO2 144b5b06fb7SYork Sun * Lanes: E,F,G,H: XAUI2 145b5b06fb7SYork Sun */ 146b5b06fb7SYork Sun lane_to_slot[12] = 2; 147b5b06fb7SYork Sun lane_to_slot[13] = lane_to_slot[12]; 148b5b06fb7SYork Sun lane_to_slot[14] = lane_to_slot[12]; 149b5b06fb7SYork Sun lane_to_slot[15] = lane_to_slot[12]; 150b5b06fb7SYork Sun break; 151b5b06fb7SYork Sun 152b5b06fb7SYork Sun default: 153b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 154b5b06fb7SYork Sun serdes2_prtcl); 155b5b06fb7SYork Sun break; 156b5b06fb7SYork Sun } 157b5b06fb7SYork Sun return; 158b5b06fb7SYork Sun } 159b5b06fb7SYork Sun 160b5b06fb7SYork Sun #endif /* #ifdef CONFIG_FMAN_ENET */ 161b5b06fb7SYork Sun 162b5b06fb7SYork Sun int board_eth_init(bd_t *bis) 163b5b06fb7SYork Sun { 164b5b06fb7SYork Sun #ifdef CONFIG_FMAN_ENET 165b5b06fb7SYork Sun struct memac_mdio_info memac_mdio_info; 166b5b06fb7SYork Sun struct memac_mdio_info tg_memac_mdio_info; 167b5b06fb7SYork Sun unsigned int i; 168b5b06fb7SYork Sun unsigned int serdes1_prtcl, serdes2_prtcl; 169b5b06fb7SYork Sun ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 170b5b06fb7SYork Sun serdes1_prtcl = in_be32(&gur->rcwsr[4]) & 171b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS1_PRTCL; 172b5b06fb7SYork Sun if (!serdes1_prtcl) { 173b5b06fb7SYork Sun printf("SERDES1 is not enabled\n"); 174b5b06fb7SYork Sun return 0; 175b5b06fb7SYork Sun } 176b5b06fb7SYork Sun serdes1_prtcl >>= FSL_CORENET2_RCWSR4_SRDS1_PRTCL_SHIFT; 177b5b06fb7SYork Sun debug("Using SERDES1 Protocol: 0x%x:\n", serdes1_prtcl); 178b5b06fb7SYork Sun 179b5b06fb7SYork Sun serdes2_prtcl = in_be32(&gur->rcwsr[4]) & 180b5b06fb7SYork Sun FSL_CORENET2_RCWSR4_SRDS2_PRTCL; 181b5b06fb7SYork Sun if (!serdes2_prtcl) { 182b5b06fb7SYork Sun printf("SERDES2 is not enabled\n"); 183b5b06fb7SYork Sun return 0; 184b5b06fb7SYork Sun } 185b5b06fb7SYork Sun serdes2_prtcl >>= FSL_CORENET2_RCWSR4_SRDS2_PRTCL_SHIFT; 186b5b06fb7SYork Sun debug("Using SERDES2 Protocol: 0x%x:\n", serdes2_prtcl); 187b5b06fb7SYork Sun 188b5b06fb7SYork Sun printf("Initializing Fman\n"); 189b5b06fb7SYork Sun 190b5b06fb7SYork Sun initialize_lane_to_slot(); 191b5b06fb7SYork Sun 192b5b06fb7SYork Sun memac_mdio_info.regs = 193b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; 194b5b06fb7SYork Sun memac_mdio_info.name = DEFAULT_FM_MDIO_NAME; 195b5b06fb7SYork Sun 196b5b06fb7SYork Sun /* Register the real 1G MDIO bus */ 197b5b06fb7SYork Sun fm_memac_mdio_init(bis, &memac_mdio_info); 198b5b06fb7SYork Sun 199b5b06fb7SYork Sun tg_memac_mdio_info.regs = 200b5b06fb7SYork Sun (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR; 201b5b06fb7SYork Sun tg_memac_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME; 202b5b06fb7SYork Sun 203b5b06fb7SYork Sun /* Register the real 10G MDIO bus */ 204b5b06fb7SYork Sun fm_memac_mdio_init(bis, &tg_memac_mdio_info); 205b5b06fb7SYork Sun 206b5b06fb7SYork Sun /* 207b5b06fb7SYork Sun * Program the two on board DTSEC PHY addresses assuming that they are 208b5b06fb7SYork Sun * all SGMII. RGMII is not supported on this board. Setting SGMII 5 and 209b5b06fb7SYork Sun * 6 to on board SGMII phys 210b5b06fb7SYork Sun */ 211b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC5, CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 212b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 213b5b06fb7SYork Sun 214b5b06fb7SYork Sun switch (serdes1_prtcl) { 215b5b06fb7SYork Sun case 0x2a: 216b5b06fb7SYork Sun /* Serdes 1: A-B SGMII, Configuring DTSEC 5 and 6 */ 217b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC5: %x and" 218b5b06fb7SYork Sun "FM1_DTSEC6: %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_DTSEC5, 223b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 224b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC6, 225b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 226b5b06fb7SYork Sun break; 227b5b06fb7SYork Sun #ifdef CONFIG_PPC_B4420 228b5b06fb7SYork Sun case 0x18: 229b5b06fb7SYork Sun /* Serdes 1: A-D SGMII, Configuring on board dual SGMII Phy */ 230b5b06fb7SYork Sun debug("Setting phy addresses for FM1_DTSEC3: %x and" 231b5b06fb7SYork Sun "FM1_DTSEC4: %x\n", CONFIG_SYS_FM1_DTSEC5_PHY_ADDR, 232b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 233b5b06fb7SYork Sun /* Fixing Serdes clock by programming FPGA register */ 234b5b06fb7SYork Sun QIXIS_WRITE(brdcfg[4], QIXIS_SRDS1CLK_125); 235b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 236b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC5_PHY_ADDR); 237b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 238b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC6_PHY_ADDR); 239b5b06fb7SYork Sun break; 240b5b06fb7SYork Sun #endif 241b5b06fb7SYork Sun default: 242b5b06fb7SYork Sun printf("Fman: Unsupported SerDes1 Protocol 0x%02x\n", 243b5b06fb7SYork Sun serdes1_prtcl); 244b5b06fb7SYork Sun break; 245b5b06fb7SYork Sun } 246b5b06fb7SYork Sun switch (serdes2_prtcl) { 247b5b06fb7SYork Sun case 0x18: 248b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 249b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 250b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC1, 251b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 252b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 253b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 254b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 255b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 256b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 257b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC4_RISER_PHY_ADDR); 258b5b06fb7SYork Sun break; 259b5b06fb7SYork Sun case 0x49: 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_DTSEC1, 263b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 264b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC2, 265b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 266b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 267b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC3_RISER_PHY_ADDR); 268b5b06fb7SYork Sun break; 269b5b06fb7SYork Sun case 0x8d: 270b5b06fb7SYork Sun case 0xb2: 271b5b06fb7SYork Sun debug("Setting phy addresses on SGMII Riser card for" 272b5b06fb7SYork Sun "FM1_DTSEC ports: \n"); 273b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC3, 274b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC1_RISER_PHY_ADDR); 275b5b06fb7SYork Sun fm_info_set_phy_address(FM1_DTSEC4, 276b5b06fb7SYork Sun CONFIG_SYS_FM1_DTSEC2_RISER_PHY_ADDR); 277b5b06fb7SYork Sun break; 278*16d88f41SSuresh Gupta case 0x98: 279*16d88f41SSuresh Gupta /* XAUI in Slot1 and Slot2 */ 280*16d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC1: %x\n", 281*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 282*16d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC1, 283*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC1_PHY_ADDR); 284*16d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 285*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 286*16d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 287*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 288*16d88f41SSuresh Gupta break; 289*16d88f41SSuresh Gupta case 0x9E: 290*16d88f41SSuresh Gupta /* XAUI in Slot2 */ 291*16d88f41SSuresh Gupta debug("Setting phy addresses on B4860 QDS AMC2PEX-2S for FM1_10GEC2: %x\n", 292*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 293*16d88f41SSuresh Gupta fm_info_set_phy_address(FM1_10GEC2, 294*16d88f41SSuresh Gupta CONFIG_SYS_FM1_10GEC2_PHY_ADDR); 295*16d88f41SSuresh Gupta break; 296b5b06fb7SYork Sun default: 297b5b06fb7SYork Sun printf("Fman: Unsupported SerDes2 Protocol 0x%02x\n", 298b5b06fb7SYork Sun serdes2_prtcl); 299b5b06fb7SYork Sun break; 300b5b06fb7SYork Sun } 301b5b06fb7SYork Sun 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 321*16d88f41SSuresh Gupta for (i = FM1_10GEC1; i < FM1_10GEC1 + CONFIG_SYS_NUM_FM1_10GEC; i++) { 322*16d88f41SSuresh Gupta int idx = i - FM1_10GEC1; 323*16d88f41SSuresh Gupta 324*16d88f41SSuresh Gupta switch (fm_info_get_enet_if(i)) { 325*16d88f41SSuresh Gupta case PHY_INTERFACE_MODE_XGMII: 326*16d88f41SSuresh Gupta fm_info_set_mdio(i, 327*16d88f41SSuresh Gupta miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME)); 328*16d88f41SSuresh Gupta break; 329*16d88f41SSuresh Gupta default: 330*16d88f41SSuresh Gupta printf("Fman1: 10GSEC%u set to unknown interface %i\n", 331*16d88f41SSuresh Gupta idx + 1, fm_info_get_enet_if(i)); 332*16d88f41SSuresh Gupta fm_info_set_phy_address(i, 0); 333*16d88f41SSuresh Gupta break; 334*16d88f41SSuresh Gupta } 335*16d88f41SSuresh Gupta } 336*16d88f41SSuresh Gupta 337*16d88f41SSuresh 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