Blame view
board/freescale/t104xrdb/eth.c
4.22 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
714fd406d powerpc/t104xrdb:... |
2 3 |
/* * Copyright 2014 Freescale Semiconductor, Inc. |
714fd406d powerpc/t104xrdb:... |
4 5 6 7 |
*/ #include <common.h> #include <netdev.h> |
db4a1767c board/T1040rdb: A... |
8 |
#include <asm/fsl_serdes.h> |
714fd406d powerpc/t104xrdb:... |
9 10 11 12 |
#include <asm/immap_85xx.h> #include <fm_eth.h> #include <fsl_mdio.h> #include <malloc.h> |
8225b2fd8 net: Move some he... |
13 |
#include <fsl_dtsec.h> |
db4a1767c board/T1040rdb: A... |
14 |
#include <vsc9953.h> |
714fd406d powerpc/t104xrdb:... |
15 16 17 18 19 20 21 22 23 |
#include "../common/fman.h" int board_eth_init(bd_t *bis) { #ifdef CONFIG_FMAN_ENET struct memac_mdio_info memac_mdio_info; unsigned int i; int phy_addr = 0; |
db4a1767c board/T1040rdb: A... |
24 25 26 27 |
#ifdef CONFIG_VSC9953 phy_interface_t phy_int; struct mii_dev *bus; #endif |
714fd406d powerpc/t104xrdb:... |
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
printf("Initializing Fman "); memac_mdio_info.regs = (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; memac_mdio_info.name = DEFAULT_FM_MDIO_NAME; /* Register the real 1G MDIO bus */ fm_memac_mdio_init(bis, &memac_mdio_info); /* * Program on board RGMII, SGMII PHY addresses. */ for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) { int idx = i - FM1_DTSEC1; switch (fm_info_get_enet_if(i)) { |
6fcddd098 powerpc: T1040RDB... |
45 |
#if defined(CONFIG_TARGET_T1040RDB) || defined(CONFIG_TARGET_T1040D4RDB) |
714fd406d powerpc/t104xrdb:... |
46 |
case PHY_INTERFACE_MODE_SGMII: |
4b6067ae9 powerpc/T104xD4RD... |
47 48 49 |
/* T1040RDB & T1040D4RDB only supports SGMII on * DTSEC3 */ |
714fd406d powerpc/t104xrdb:... |
50 51 |
fm_info_set_phy_address(FM1_DTSEC3, CONFIG_SYS_SGMII1_PHY_ADDR); |
b0615f0bd powerpc/t1040rdb:... |
52 |
break; |
714fd406d powerpc/t104xrdb:... |
53 |
#endif |
0167369cf powerpc: T1042RDB... |
54 |
#ifdef CONFIG_TARGET_T1042RDB |
363fb32ac powerpc/t104xrdb:... |
55 56 57 58 59 60 61 62 63 |
case PHY_INTERFACE_MODE_SGMII: /* T1042RDB doesn't supports SGMII on DTSEC1 & DTSEC2 */ if ((FM1_DTSEC1 == i) || (FM1_DTSEC2 == i)) fm_info_set_phy_address(i, 0); /* T1042RDB only supports SGMII on DTSEC3 */ fm_info_set_phy_address(FM1_DTSEC3, CONFIG_SYS_SGMII1_PHY_ADDR); break; #endif |
319ed24a8 powerpc: T1042D4R... |
64 |
#ifdef CONFIG_TARGET_T1042D4RDB |
4b6067ae9 powerpc/T104xD4RD... |
65 66 67 68 69 70 71 72 73 74 75 76 77 |
case PHY_INTERFACE_MODE_SGMII: /* T1042D4RDB supports SGMII on DTSEC1, DTSEC2 * & DTSEC3 */ if (FM1_DTSEC1 == i) phy_addr = CONFIG_SYS_SGMII1_PHY_ADDR; if (FM1_DTSEC2 == i) phy_addr = CONFIG_SYS_SGMII2_PHY_ADDR; if (FM1_DTSEC3 == i) phy_addr = CONFIG_SYS_SGMII3_PHY_ADDR; fm_info_set_phy_address(i, phy_addr); break; #endif |
714fd406d powerpc/t104xrdb:... |
78 |
case PHY_INTERFACE_MODE_RGMII: |
78368804d board: freescale:... |
79 80 81 |
case PHY_INTERFACE_MODE_RGMII_TXID: case PHY_INTERFACE_MODE_RGMII_RXID: case PHY_INTERFACE_MODE_RGMII_ID: |
714fd406d powerpc/t104xrdb:... |
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
if (FM1_DTSEC4 == i) phy_addr = CONFIG_SYS_RGMII1_PHY_ADDR; if (FM1_DTSEC5 == i) phy_addr = CONFIG_SYS_RGMII2_PHY_ADDR; fm_info_set_phy_address(i, phy_addr); break; case PHY_INTERFACE_MODE_QSGMII: fm_info_set_phy_address(i, 0); break; case PHY_INTERFACE_MODE_NONE: fm_info_set_phy_address(i, 0); break; default: printf("Fman1: DTSEC%u set to unknown interface %i ", idx + 1, fm_info_get_enet_if(i)); fm_info_set_phy_address(i, 0); break; } |
9b478bef2 board/T104xrdb: T... |
101 102 103 104 105 106 107 |
if (fm_info_get_enet_if(i) == PHY_INTERFACE_MODE_QSGMII || fm_info_get_enet_if(i) == PHY_INTERFACE_MODE_NONE) fm_info_set_mdio(i, NULL); else fm_info_set_mdio(i, miiphy_get_dev_by_name( DEFAULT_FM_MDIO_NAME)); |
714fd406d powerpc/t104xrdb:... |
108 |
} |
db4a1767c board/T1040rdb: A... |
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
#ifdef CONFIG_VSC9953 /* SerDes configured for QSGMII */ if (serdes_get_first_lane(FSL_SRDS_1, QSGMII_SW1_A) >= 0) { for (i = 0; i < 4; i++) { bus = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); phy_addr = CONFIG_SYS_FM1_QSGMII11_PHY_ADDR + i; phy_int = PHY_INTERFACE_MODE_QSGMII; vsc9953_port_info_set_mdio(i, bus); vsc9953_port_info_set_phy_address(i, phy_addr); vsc9953_port_info_set_phy_int(i, phy_int); vsc9953_port_enable(i); } } if (serdes_get_first_lane(FSL_SRDS_1, QSGMII_SW1_B) >= 0) { for (i = 4; i < 8; i++) { bus = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); phy_addr = CONFIG_SYS_FM1_QSGMII21_PHY_ADDR + i - 4; phy_int = PHY_INTERFACE_MODE_QSGMII; vsc9953_port_info_set_mdio(i, bus); vsc9953_port_info_set_phy_address(i, phy_addr); vsc9953_port_info_set_phy_int(i, phy_int); vsc9953_port_enable(i); } } /* Connect DTSEC1 to L2 switch if it doesn't have a PHY */ if (serdes_get_first_lane(FSL_SRDS_1, SGMII_FM1_DTSEC1) < 0) vsc9953_port_enable(8); /* Connect DTSEC2 to L2 switch if it doesn't have a PHY */ if (serdes_get_first_lane(FSL_SRDS_1, SGMII_FM1_DTSEC2) < 0) { /* Enable L2 On MAC2 using SCFG */ struct ccsr_scfg *scfg = (struct ccsr_scfg *) CONFIG_SYS_MPC85xx_SCFG; out_be32(&scfg->esgmiiselcr, in_be32(&scfg->esgmiiselcr) | (0x80000000)); vsc9953_port_enable(9); } #endif |
714fd406d powerpc/t104xrdb:... |
151 152 153 154 155 |
cpu_eth_init(bis); #endif return pci_eth_init(bis); } |