net: phy: micrel: Add basic support for KSZ9131

This adds basic support for the new Micrel KSZ9131 phy.

Signed-off-by: Philippe Schenker <philippe.schenker@toradex.com>
This commit is contained in:
Philippe Schenker 2020-03-11 11:59:23 +01:00 committed by Stefano Babic
parent 0861aa8fed
commit c51eef5924
2 changed files with 60 additions and 0 deletions

View File

@ -393,9 +393,67 @@ static struct phy_driver ksz9031_driver = {
.readext = &ksz9031_phy_extread,
};
/*
* KSZ9131
*/
static int ksz9131_config(struct phy_device *phydev)
{
/* TBD: Implement Skew values for dts */
/* add an option to disable the gigabit feature of this PHY */
if (env_get("disable_giga")) {
unsigned features;
unsigned bmcr;
/* disable speed 1000 in features supported by the PHY */
features = phydev->drv->features;
features &= ~(SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full);
phydev->advertising = phydev->supported = features;
/* disable speed 1000 in Basic Control Register */
bmcr = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR);
bmcr &= ~(1 << 6);
phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr);
/* disable speed 1000 in 1000Base-T Control Register */
phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, 0);
/* start autoneg */
genphy_config_aneg(phydev);
genphy_restart_aneg(phydev);
return 0;
}
return genphy_config(phydev);
}
static struct phy_driver ksz9131_driver = {
.name = "Micrel ksz9031",
.uid = PHY_ID_KSZ9131,
.mask = MII_KSZ9x31_SILICON_REV_MASK,
.features = PHY_GBIT_FEATURES,
.config = &ksz9131_config,
.startup = &ksz90xx_startup,
.shutdown = &genphy_shutdown,
.writeext = &ksz9031_phy_extwrite,
.readext = &ksz9031_phy_extread,
};
int ksz9xx1_phy_get_id(struct phy_device *phydev)
{
unsigned int phyid;
get_phy_id(phydev->bus, phydev->addr, MDIO_DEVAD_NONE, &phyid);
return phyid;
}
int phy_micrel_ksz90x1_init(void)
{
phy_register(&ksz9021_driver);
phy_register(&ksz9031_driver);
phy_register(&ksz9131_driver);
return 0;
}

View File

@ -26,6 +26,7 @@
#define MII_KSZ9x31_SILICON_REV_MASK 0xfffff0
#define PHY_ID_KSZ9031 0x00221620
#define PHY_ID_KSZ9131 0x00221640
/* Registers */
@ -40,5 +41,6 @@ int ksz9031_phy_extended_write(struct phy_device *phydev, int devaddr,
int regnum, u16 mode, u16 val);
int ksz9031_phy_extended_read(struct phy_device *phydev, int devaddr,
int regnum, u16 mode);
int ksz9xx1_phy_get_id(struct phy_device *phydev);
#endif