xref: /openbmc/u-boot/drivers/net/phy/atheros.c (revision 903d384d401bdfc517266787549caf4630a7f305)
19082eeacSAndy Fleming /*
29082eeacSAndy Fleming  * Atheros PHY drivers
39082eeacSAndy Fleming  *
41a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
59082eeacSAndy Fleming  *
66027384aSXie Xiaobo  * Copyright 2011, 2013 Freescale Semiconductor, Inc.
79082eeacSAndy Fleming  * author Andy Fleming
89082eeacSAndy Fleming  */
99082eeacSAndy Fleming #include <phy.h>
109082eeacSAndy Fleming 
119082eeacSAndy Fleming static int ar8021_config(struct phy_device *phydev)
129082eeacSAndy Fleming {
139082eeacSAndy Fleming 	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
149082eeacSAndy Fleming 	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x3D47);
159082eeacSAndy Fleming 
16e0d80964SZhao Qiang 	phydev->supported = phydev->drv->features;
179082eeacSAndy Fleming 	return 0;
189082eeacSAndy Fleming }
199082eeacSAndy Fleming 
206027384aSXie Xiaobo static int ar8035_config(struct phy_device *phydev)
216027384aSXie Xiaobo {
226027384aSXie Xiaobo 	int regval;
236027384aSXie Xiaobo 
246027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x0007);
256027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, 0x8016);
266027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0xd, 0x4007);
276027384aSXie Xiaobo 	regval = phy_read(phydev, MDIO_DEVAD_NONE, 0xe);
286027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0xe, (regval|0x0018));
296027384aSXie Xiaobo 
306027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
316027384aSXie Xiaobo 	regval = phy_read(phydev, MDIO_DEVAD_NONE, 0x1e);
326027384aSXie Xiaobo 	phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, (regval|0x0100));
336027384aSXie Xiaobo 
3402aa4c53SXiaobo Xie 	phydev->supported = phydev->drv->features;
356027384aSXie Xiaobo 
36*903d384dSAlison Wang 	genphy_config_aneg(phydev);
37*903d384dSAlison Wang 	genphy_restart_aneg(phydev);
38*903d384dSAlison Wang 
396027384aSXie Xiaobo 	return 0;
406027384aSXie Xiaobo }
416027384aSXie Xiaobo 
4206370590SKim Phillips static struct phy_driver AR8021_driver =  {
439082eeacSAndy Fleming 	.name = "AR8021",
449082eeacSAndy Fleming 	.uid = 0x4dd040,
45dc116bd6SHaijun.Zhang 	.mask = 0x4ffff0,
469082eeacSAndy Fleming 	.features = PHY_GBIT_FEATURES,
479082eeacSAndy Fleming 	.config = ar8021_config,
489082eeacSAndy Fleming 	.startup = genphy_startup,
499082eeacSAndy Fleming 	.shutdown = genphy_shutdown,
509082eeacSAndy Fleming };
519082eeacSAndy Fleming 
52433a2c53SHeiko Schocher static struct phy_driver AR8031_driver =  {
53626ee1e3SShengzhou Liu 	.name = "AR8031/AR8033",
54433a2c53SHeiko Schocher 	.uid = 0x4dd074,
55f66e3dedSFabio Estevam 	.mask = 0xffffffef,
56433a2c53SHeiko Schocher 	.features = PHY_GBIT_FEATURES,
57d584c68cSFabio Estevam 	.config = ar8035_config,
58433a2c53SHeiko Schocher 	.startup = genphy_startup,
59433a2c53SHeiko Schocher 	.shutdown = genphy_shutdown,
60433a2c53SHeiko Schocher };
61433a2c53SHeiko Schocher 
62433a2c53SHeiko Schocher static struct phy_driver AR8035_driver =  {
636027384aSXie Xiaobo 	.name = "AR8035",
646027384aSXie Xiaobo 	.uid = 0x4dd072,
65f66e3dedSFabio Estevam 	.mask = 0xffffffef,
666027384aSXie Xiaobo 	.features = PHY_GBIT_FEATURES,
676027384aSXie Xiaobo 	.config = ar8035_config,
686027384aSXie Xiaobo 	.startup = genphy_startup,
696027384aSXie Xiaobo 	.shutdown = genphy_shutdown,
706027384aSXie Xiaobo };
716027384aSXie Xiaobo 
729082eeacSAndy Fleming int phy_atheros_init(void)
739082eeacSAndy Fleming {
749082eeacSAndy Fleming 	phy_register(&AR8021_driver);
75433a2c53SHeiko Schocher 	phy_register(&AR8031_driver);
766027384aSXie Xiaobo 	phy_register(&AR8035_driver);
779082eeacSAndy Fleming 
789082eeacSAndy Fleming 	return 0;
799082eeacSAndy Fleming }
80