xref: /rk3399_rockchip-uboot/board/freescale/ls1046ardb/eth.c (revision cbe7706ab8aab06c18edaa9b120371f9c8012728)
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