2 * Copyright 2014 Freescale Semiconductor, Inc.
4 * SPDX-License-Identifier: GPL-2.0+
9 #include <asm/immap_85xx.h>
13 #include <asm/fsl_dtsec.h>
15 #include "../common/fman.h"
17 int board_eth_init(bd_t
*bis
)
19 #ifdef CONFIG_FMAN_ENET
20 struct memac_mdio_info memac_mdio_info
;
23 printf("Initializing Fman\n");
25 memac_mdio_info
.regs
=
26 (struct memac_mdio_controller
*)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR
;
27 memac_mdio_info
.name
= DEFAULT_FM_MDIO_NAME
;
29 /* Register the real 1G MDIO bus */
30 fm_memac_mdio_init(bis
, &memac_mdio_info
);
33 * Program on board RGMII, SGMII PHY addresses.
35 for (i
= FM1_DTSEC1
; i
< FM1_DTSEC1
+ CONFIG_SYS_NUM_FM1_DTSEC
; i
++) {
36 int idx
= i
- FM1_DTSEC1
;
38 switch (fm_info_get_enet_if(i
)) {
39 #ifdef CONFIG_T1040RDB
40 case PHY_INTERFACE_MODE_SGMII
:
41 /* T1040RDB only supports SGMII on DTSEC3 */
42 fm_info_set_phy_address(FM1_DTSEC3
,
43 CONFIG_SYS_SGMII1_PHY_ADDR
);
46 #ifdef CONFIG_T1042RDB
47 case PHY_INTERFACE_MODE_SGMII
:
48 /* T1042RDB doesn't supports SGMII on DTSEC1 & DTSEC2 */
49 if ((FM1_DTSEC1
== i
) || (FM1_DTSEC2
== i
))
50 fm_info_set_phy_address(i
, 0);
51 /* T1042RDB only supports SGMII on DTSEC3 */
52 fm_info_set_phy_address(FM1_DTSEC3
,
53 CONFIG_SYS_SGMII1_PHY_ADDR
);
56 case PHY_INTERFACE_MODE_RGMII
:
58 phy_addr
= CONFIG_SYS_RGMII1_PHY_ADDR
;
60 phy_addr
= CONFIG_SYS_RGMII2_PHY_ADDR
;
61 fm_info_set_phy_address(i
, phy_addr
);
63 case PHY_INTERFACE_MODE_QSGMII
:
64 fm_info_set_phy_address(i
, 0);
66 case PHY_INTERFACE_MODE_NONE
:
67 fm_info_set_phy_address(i
, 0);
70 printf("Fman1: DTSEC%u set to unknown interface %i\n",
71 idx
+ 1, fm_info_get_enet_if(i
));
72 fm_info_set_phy_address(i
, 0);
76 miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME
));
82 return pci_eth_init(bis
);