xref: /rk3399_rockchip-uboot/drivers/net/phy/teranetics.c (revision ebfdacb42b5e29ed847a8bee05affc24e3d4eb10)
19082eeacSAndy Fleming /*
29082eeacSAndy Fleming  * Teranetics PHY drivers
39082eeacSAndy Fleming  *
49082eeacSAndy Fleming  * This program is free software; you can redistribute it and/or
59082eeacSAndy Fleming  * modify it under the terms of the GNU General Public License as
69082eeacSAndy Fleming  * published by the Free Software Foundation; either version 2 of
79082eeacSAndy Fleming  * the License, or (at your option) any later version.
89082eeacSAndy Fleming  *
99082eeacSAndy Fleming  * This program is distributed in the hope that it will be useful,
109082eeacSAndy Fleming  * but WITHOUT ANY WARRANTY; without even the implied warranty of
119082eeacSAndy Fleming  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
129082eeacSAndy Fleming  * GNU General Public License for more details.
139082eeacSAndy Fleming  *
149082eeacSAndy Fleming  * You should have received a copy of the GNU General Public License
159082eeacSAndy Fleming  * along with this program; if not, write to the Free Software
169082eeacSAndy Fleming  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
179082eeacSAndy Fleming  * MA 02111-1307 USA
189082eeacSAndy Fleming  *
199082eeacSAndy Fleming  * Copyright 2010-2011 Freescale Semiconductor, Inc.
209082eeacSAndy Fleming  * author Andy Fleming
219082eeacSAndy Fleming  *
229082eeacSAndy Fleming  */
239082eeacSAndy Fleming #include <config.h>
249082eeacSAndy Fleming #include <phy.h>
259082eeacSAndy Fleming 
269082eeacSAndy Fleming #ifndef CONFIG_PHYLIB_10G
279082eeacSAndy Fleming #error The Teranetics PHY needs 10G support
289082eeacSAndy Fleming #endif
299082eeacSAndy Fleming 
309082eeacSAndy Fleming int tn2020_config(struct phy_device *phydev)
319082eeacSAndy Fleming {
329082eeacSAndy Fleming 	if (phydev->port == PORT_FIBRE) {
339082eeacSAndy Fleming 		unsigned short restart_an = (MDIO_AN_CTRL1_RESTART |
349082eeacSAndy Fleming 						MDIO_AN_CTRL1_ENABLE |
359082eeacSAndy Fleming 						MDIO_AN_CTRL1_XNP);
369082eeacSAndy Fleming 
379082eeacSAndy Fleming 		phy_write(phydev, 30, 93, 2);
389082eeacSAndy Fleming 		phy_write(phydev, MDIO_MMD_AN, MDIO_CTRL1, restart_an);
399082eeacSAndy Fleming 	}
409082eeacSAndy Fleming 
419082eeacSAndy Fleming 	return 0;
429082eeacSAndy Fleming }
439082eeacSAndy Fleming 
44*ebfdacb4SAndy Fleming int tn2020_startup(struct phy_device *phydev)
45*ebfdacb4SAndy Fleming {
46*ebfdacb4SAndy Fleming 	if (phydev->port != PORT_FIBRE)
47*ebfdacb4SAndy Fleming 		return gen10g_startup(phydev);
48*ebfdacb4SAndy Fleming 
49*ebfdacb4SAndy Fleming 	/*
50*ebfdacb4SAndy Fleming 	 * The TN2020 only pretends to support fiber.
51*ebfdacb4SAndy Fleming 	 * It works, but it doesn't look like it works,
52*ebfdacb4SAndy Fleming 	 * so the link status reports no link.
53*ebfdacb4SAndy Fleming 	 */
54*ebfdacb4SAndy Fleming 	phydev->link = 1;
55*ebfdacb4SAndy Fleming 
56*ebfdacb4SAndy Fleming 	/* For now just lie and say it's 10G all the time */
57*ebfdacb4SAndy Fleming 	phydev->speed = SPEED_10000;
58*ebfdacb4SAndy Fleming 	phydev->duplex = DUPLEX_FULL;
59*ebfdacb4SAndy Fleming 
60*ebfdacb4SAndy Fleming 	return 0;
61*ebfdacb4SAndy Fleming }
62*ebfdacb4SAndy Fleming 
639082eeacSAndy Fleming struct phy_driver tn2020_driver = {
649082eeacSAndy Fleming 	.name = "Teranetics TN2020",
659082eeacSAndy Fleming 	.uid = 0x00a19410,
669082eeacSAndy Fleming 	.mask = 0xfffffff0,
679082eeacSAndy Fleming 	.features = PHY_10G_FEATURES,
689082eeacSAndy Fleming 	.mmds = (MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS |
699082eeacSAndy Fleming 			MDIO_DEVS_PHYXS | MDIO_DEVS_AN |
709082eeacSAndy Fleming 			MDIO_DEVS_VEND1 | MDIO_DEVS_VEND2),
719082eeacSAndy Fleming 	.config = &tn2020_config,
72*ebfdacb4SAndy Fleming 	.startup = &tn2020_startup,
739082eeacSAndy Fleming 	.shutdown = &gen10g_shutdown,
749082eeacSAndy Fleming };
759082eeacSAndy Fleming 
769082eeacSAndy Fleming int phy_teranetics_init(void)
779082eeacSAndy Fleming {
789082eeacSAndy Fleming 	phy_register(&tn2020_driver);
799082eeacSAndy Fleming 
809082eeacSAndy Fleming 	return 0;
819082eeacSAndy Fleming }
82