1*dd02936fSMingkai Hu /*
2*dd02936fSMingkai Hu * Copyright 2016 Freescale Semiconductor, Inc.
3*dd02936fSMingkai Hu *
4*dd02936fSMingkai Hu * SPDX-License-Identifier: GPL-2.0+
5*dd02936fSMingkai Hu */
6*dd02936fSMingkai Hu #include <common.h>
7*dd02936fSMingkai Hu #include <asm/io.h>
8*dd02936fSMingkai Hu #include <netdev.h>
9*dd02936fSMingkai Hu #include <fm_eth.h>
10*dd02936fSMingkai Hu #include <fsl_dtsec.h>
11*dd02936fSMingkai Hu #include <fsl_mdio.h>
12*dd02936fSMingkai Hu #include <malloc.h>
13*dd02936fSMingkai Hu
14*dd02936fSMingkai Hu #include "../common/fman.h"
15*dd02936fSMingkai Hu
board_eth_init(bd_t * bis)16*dd02936fSMingkai Hu int board_eth_init(bd_t *bis)
17*dd02936fSMingkai Hu {
18*dd02936fSMingkai Hu #ifdef CONFIG_FMAN_ENET
19*dd02936fSMingkai Hu int i;
20*dd02936fSMingkai Hu struct memac_mdio_info dtsec_mdio_info;
21*dd02936fSMingkai Hu struct memac_mdio_info tgec_mdio_info;
22*dd02936fSMingkai Hu struct mii_dev *dev;
23*dd02936fSMingkai Hu u32 srds_s1;
24*dd02936fSMingkai Hu struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
25*dd02936fSMingkai Hu
26*dd02936fSMingkai Hu srds_s1 = in_be32(&gur->rcwsr[4]) &
27*dd02936fSMingkai Hu FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK;
28*dd02936fSMingkai Hu srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT;
29*dd02936fSMingkai Hu
30*dd02936fSMingkai Hu dtsec_mdio_info.regs =
31*dd02936fSMingkai Hu (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR;
32*dd02936fSMingkai Hu
33*dd02936fSMingkai Hu dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME;
34*dd02936fSMingkai Hu
35*dd02936fSMingkai Hu /* Register the 1G MDIO bus */
36*dd02936fSMingkai Hu fm_memac_mdio_init(bis, &dtsec_mdio_info);
37*dd02936fSMingkai Hu
38*dd02936fSMingkai Hu tgec_mdio_info.regs =
39*dd02936fSMingkai Hu (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR;
40*dd02936fSMingkai Hu tgec_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME;
41*dd02936fSMingkai Hu
42*dd02936fSMingkai Hu /* Register the 10G MDIO bus */
43*dd02936fSMingkai Hu fm_memac_mdio_init(bis, &tgec_mdio_info);
44*dd02936fSMingkai Hu
45*dd02936fSMingkai Hu /* Set the two on-board RGMII PHY address */
46*dd02936fSMingkai Hu fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY1_ADDR);
47*dd02936fSMingkai Hu fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY2_ADDR);
48*dd02936fSMingkai Hu
49*dd02936fSMingkai Hu /* Set the two on-board SGMII PHY address */
50*dd02936fSMingkai Hu fm_info_set_phy_address(FM1_DTSEC5, SGMII_PHY1_ADDR);
51*dd02936fSMingkai Hu fm_info_set_phy_address(FM1_DTSEC6, SGMII_PHY2_ADDR);
52*dd02936fSMingkai Hu
53*dd02936fSMingkai Hu /* Set the on-board AQ PHY address */
54*dd02936fSMingkai Hu fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR);
55*dd02936fSMingkai Hu
56*dd02936fSMingkai Hu switch (srds_s1) {
57*dd02936fSMingkai Hu case 0x1133:
58*dd02936fSMingkai Hu break;
59*dd02936fSMingkai Hu default:
60*dd02936fSMingkai Hu printf("Invalid SerDes protocol 0x%x for LS1046ARDB\n",
61*dd02936fSMingkai Hu srds_s1);
62*dd02936fSMingkai Hu break;
63*dd02936fSMingkai Hu }
64*dd02936fSMingkai Hu
65*dd02936fSMingkai Hu dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME);
66*dd02936fSMingkai Hu for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++)
67*dd02936fSMingkai Hu fm_info_set_mdio(i, dev);
68*dd02936fSMingkai Hu
69*dd02936fSMingkai Hu /* XFI on lane A, MAC 9 */
70*dd02936fSMingkai Hu dev = miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME);
71*dd02936fSMingkai Hu fm_info_set_mdio(FM1_10GEC1, dev);
72*dd02936fSMingkai Hu
73*dd02936fSMingkai Hu cpu_eth_init(bis);
74*dd02936fSMingkai Hu #endif
75*dd02936fSMingkai Hu
76*dd02936fSMingkai Hu return pci_eth_init(bis);
77*dd02936fSMingkai Hu }
78