144937214SPrabhakar Kushwaha /*
244937214SPrabhakar Kushwaha * Copyright 2015 Freescale Semiconductor, Inc.
344937214SPrabhakar Kushwaha *
444937214SPrabhakar Kushwaha *
544937214SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+
644937214SPrabhakar Kushwaha */
744937214SPrabhakar Kushwaha
844937214SPrabhakar Kushwaha #include <common.h>
944937214SPrabhakar Kushwaha #include <command.h>
1044937214SPrabhakar Kushwaha #include <netdev.h>
1144937214SPrabhakar Kushwaha #include <malloc.h>
1244937214SPrabhakar Kushwaha #include <fsl_mdio.h>
1344937214SPrabhakar Kushwaha #include <miiphy.h>
1444937214SPrabhakar Kushwaha #include <phy.h>
1544937214SPrabhakar Kushwaha #include <fm_eth.h>
1644937214SPrabhakar Kushwaha #include <asm/io.h>
1744937214SPrabhakar Kushwaha #include <exports.h>
1844937214SPrabhakar Kushwaha #include <asm/arch/fsl_serdes.h>
19*33a8991aSBogdan Purcareata #include <fsl-mc/fsl_mc.h>
2044937214SPrabhakar Kushwaha #include <fsl-mc/ldpaa_wriop.h>
2144937214SPrabhakar Kushwaha
2244937214SPrabhakar Kushwaha DECLARE_GLOBAL_DATA_PTR;
2344937214SPrabhakar Kushwaha
board_eth_init(bd_t * bis)2444937214SPrabhakar Kushwaha int board_eth_init(bd_t *bis)
2544937214SPrabhakar Kushwaha {
2644937214SPrabhakar Kushwaha #if defined(CONFIG_FSL_MC_ENET)
2744937214SPrabhakar Kushwaha int i, interface;
2844937214SPrabhakar Kushwaha struct memac_mdio_info mdio_info;
2944937214SPrabhakar Kushwaha struct mii_dev *dev;
3044937214SPrabhakar Kushwaha struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
3144937214SPrabhakar Kushwaha u32 srds_s1;
3244937214SPrabhakar Kushwaha struct memac_mdio_controller *reg;
3344937214SPrabhakar Kushwaha
3444937214SPrabhakar Kushwaha srds_s1 = in_le32(&gur->rcwsr[28]) &
3544937214SPrabhakar Kushwaha FSL_CHASSIS3_RCWSR28_SRDS1_PRTCL_MASK;
3644937214SPrabhakar Kushwaha srds_s1 >>= FSL_CHASSIS3_RCWSR28_SRDS1_PRTCL_SHIFT;
3744937214SPrabhakar Kushwaha
3844937214SPrabhakar Kushwaha reg = (struct memac_mdio_controller *)CONFIG_SYS_FSL_WRIOP1_MDIO1;
3944937214SPrabhakar Kushwaha mdio_info.regs = reg;
4044937214SPrabhakar Kushwaha mdio_info.name = DEFAULT_WRIOP_MDIO1_NAME;
4144937214SPrabhakar Kushwaha
4244937214SPrabhakar Kushwaha /* Register the EMI 1 */
4344937214SPrabhakar Kushwaha fm_memac_mdio_init(bis, &mdio_info);
4444937214SPrabhakar Kushwaha
4544937214SPrabhakar Kushwaha reg = (struct memac_mdio_controller *)CONFIG_SYS_FSL_WRIOP1_MDIO2;
4644937214SPrabhakar Kushwaha mdio_info.regs = reg;
4744937214SPrabhakar Kushwaha mdio_info.name = DEFAULT_WRIOP_MDIO2_NAME;
4844937214SPrabhakar Kushwaha
4944937214SPrabhakar Kushwaha /* Register the EMI 2 */
5044937214SPrabhakar Kushwaha fm_memac_mdio_init(bis, &mdio_info);
5144937214SPrabhakar Kushwaha
5244937214SPrabhakar Kushwaha switch (srds_s1) {
5344937214SPrabhakar Kushwaha case 0x2A:
5444937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC1, CORTINA_PHY_ADDR1);
5544937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC2, CORTINA_PHY_ADDR2);
5644937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC3, CORTINA_PHY_ADDR3);
5744937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC4, CORTINA_PHY_ADDR4);
5844937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC5, AQ_PHY_ADDR1);
5944937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC6, AQ_PHY_ADDR2);
6044937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC7, AQ_PHY_ADDR3);
6144937214SPrabhakar Kushwaha wriop_set_phy_address(WRIOP1_DPMAC8, AQ_PHY_ADDR4);
6244937214SPrabhakar Kushwaha
6344937214SPrabhakar Kushwaha break;
6499fe76d0SSantan Kumar case 0x4B:
6599fe76d0SSantan Kumar wriop_set_phy_address(WRIOP1_DPMAC1, CORTINA_PHY_ADDR1);
6699fe76d0SSantan Kumar wriop_set_phy_address(WRIOP1_DPMAC2, CORTINA_PHY_ADDR2);
6799fe76d0SSantan Kumar wriop_set_phy_address(WRIOP1_DPMAC3, CORTINA_PHY_ADDR3);
6899fe76d0SSantan Kumar wriop_set_phy_address(WRIOP1_DPMAC4, CORTINA_PHY_ADDR4);
6999fe76d0SSantan Kumar
7099fe76d0SSantan Kumar break;
7144937214SPrabhakar Kushwaha default:
7244937214SPrabhakar Kushwaha printf("SerDes1 protocol 0x%x is not supported on LS2080aRDB\n",
7344937214SPrabhakar Kushwaha srds_s1);
7444937214SPrabhakar Kushwaha break;
7544937214SPrabhakar Kushwaha }
7644937214SPrabhakar Kushwaha
7744937214SPrabhakar Kushwaha for (i = WRIOP1_DPMAC1; i <= WRIOP1_DPMAC4; i++) {
7844937214SPrabhakar Kushwaha interface = wriop_get_enet_if(i);
7944937214SPrabhakar Kushwaha switch (interface) {
8044937214SPrabhakar Kushwaha case PHY_INTERFACE_MODE_XGMII:
8144937214SPrabhakar Kushwaha dev = miiphy_get_dev_by_name(DEFAULT_WRIOP_MDIO1_NAME);
8244937214SPrabhakar Kushwaha wriop_set_mdio(i, dev);
8344937214SPrabhakar Kushwaha break;
8444937214SPrabhakar Kushwaha default:
8544937214SPrabhakar Kushwaha break;
8644937214SPrabhakar Kushwaha }
8744937214SPrabhakar Kushwaha }
8844937214SPrabhakar Kushwaha
8944937214SPrabhakar Kushwaha for (i = WRIOP1_DPMAC5; i <= WRIOP1_DPMAC8; i++) {
9044937214SPrabhakar Kushwaha switch (wriop_get_enet_if(i)) {
9144937214SPrabhakar Kushwaha case PHY_INTERFACE_MODE_XGMII:
9244937214SPrabhakar Kushwaha dev = miiphy_get_dev_by_name(DEFAULT_WRIOP_MDIO2_NAME);
9344937214SPrabhakar Kushwaha wriop_set_mdio(i, dev);
9444937214SPrabhakar Kushwaha break;
9544937214SPrabhakar Kushwaha default:
9644937214SPrabhakar Kushwaha break;
9744937214SPrabhakar Kushwaha }
9844937214SPrabhakar Kushwaha }
9944937214SPrabhakar Kushwaha
10044937214SPrabhakar Kushwaha cpu_eth_init(bis);
101*33a8991aSBogdan Purcareata #endif /* CONFIG_FSL_MC_ENET */
10244937214SPrabhakar Kushwaha
10344937214SPrabhakar Kushwaha #ifdef CONFIG_PHY_AQUANTIA
10444937214SPrabhakar Kushwaha /*
10544937214SPrabhakar Kushwaha * Export functions to be used by AQ firmware
10644937214SPrabhakar Kushwaha * upload application
10744937214SPrabhakar Kushwaha */
10844937214SPrabhakar Kushwaha gd->jt->strcpy = strcpy;
10944937214SPrabhakar Kushwaha gd->jt->mdelay = mdelay;
11044937214SPrabhakar Kushwaha gd->jt->mdio_get_current_dev = mdio_get_current_dev;
11144937214SPrabhakar Kushwaha gd->jt->phy_find_by_mask = phy_find_by_mask;
11244937214SPrabhakar Kushwaha gd->jt->mdio_phydev_for_ethname = mdio_phydev_for_ethname;
11344937214SPrabhakar Kushwaha gd->jt->miiphy_set_current_dev = miiphy_set_current_dev;
11444937214SPrabhakar Kushwaha #endif
11544937214SPrabhakar Kushwaha return pci_eth_init(bis);
11644937214SPrabhakar Kushwaha }
117*33a8991aSBogdan Purcareata
118*33a8991aSBogdan Purcareata #if defined(CONFIG_RESET_PHY_R)
reset_phy(void)119*33a8991aSBogdan Purcareata void reset_phy(void)
120*33a8991aSBogdan Purcareata {
121*33a8991aSBogdan Purcareata mc_env_boot();
122*33a8991aSBogdan Purcareata }
123*33a8991aSBogdan Purcareata #endif /* CONFIG_RESET_PHY_R */
124