* [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 @ 2017-02-01 2:40 Andrew Lunn 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Andrew Lunn @ 2017-02-01 2:40 UTC (permalink / raw) To: David Miller; +Cc: Vivien Didelot, netdev, Andrew Lunn The internal PHYs of the MV88E6390 have a Marvell OUI, but the product ID is zero. Work around this by trapping reads to the ID, and if it is zero, return the MV88E6390 family ID. v2: Move the workaround into the central mdio read function. Enable the temperature sensor, even though it does not work on the 6390, but it does on the 6341, which has the same ID problem. Andrew Lunn (2): net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 net: phy: Marvell: Add mv88e6390 internal PHY drivers/net/dsa/mv88e6xxx/chip.c | 8 ++++++++ drivers/net/phy/marvell.c | 20 ++++++++++++++++++++ include/linux/marvell_phy.h | 6 ++++++ 3 files changed, 34 insertions(+) -- 2.11.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 2017-02-01 2:40 [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 Andrew Lunn @ 2017-02-01 2:40 ` Andrew Lunn 2017-02-01 2:45 ` Florian Fainelli 2017-02-01 2:49 ` Vivien Didelot 2017-02-01 2:40 ` [PATCHv2 net-next 2/2] net: phy: Marvell: Add mv88e6390 internal PHY Andrew Lunn 2017-02-03 2:51 ` [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 David Miller 2 siblings, 2 replies; 6+ messages in thread From: Andrew Lunn @ 2017-02-01 2:40 UTC (permalink / raw) To: David Miller; +Cc: Vivien Didelot, netdev, Andrew Lunn The internal PHYs of the mv88e6390 do not have a model ID. Trap any calls to the ID register, and if it is zero, return the ID for the mv88e6390. The Marvell PHY driver can then bind to this ID. Signed-off-by: Andrew Lunn <andrew@lunn.ch> --- drivers/net/dsa/mv88e6xxx/chip.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index bf385377a461..29190303ace0 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -2930,6 +2930,14 @@ static int mv88e6xxx_mdio_read(struct mii_bus *bus, int phy, int reg) err = chip->info->ops->phy_read(chip, bus, phy, reg, &val); mutex_unlock(&chip->reg_lock); + if (reg == MII_PHYSID2) { + /* Some internal PHYS don't have a model number. Use + * the mv88e6390 family model number instead. + */ + if (!(val & 0x3f0)) + val |= PORT_SWITCH_ID_PROD_NUM_6390; + } + return err ? err : val; } -- 2.11.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn @ 2017-02-01 2:45 ` Florian Fainelli 2017-02-01 2:49 ` Vivien Didelot 1 sibling, 0 replies; 6+ messages in thread From: Florian Fainelli @ 2017-02-01 2:45 UTC (permalink / raw) To: Andrew Lunn, David Miller; +Cc: Vivien Didelot, netdev On 01/31/2017 06:40 PM, Andrew Lunn wrote: > The internal PHYs of the mv88e6390 do not have a model ID. Trap any > calls to the ID register, and if it is zero, return the ID for the > mv88e6390. The Marvell PHY driver can then bind to this ID. > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> -- Florian ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn 2017-02-01 2:45 ` Florian Fainelli @ 2017-02-01 2:49 ` Vivien Didelot 1 sibling, 0 replies; 6+ messages in thread From: Vivien Didelot @ 2017-02-01 2:49 UTC (permalink / raw) To: Andrew Lunn, David Miller; +Cc: netdev, Andrew Lunn Hi Andrew, Andrew Lunn <andrew@lunn.ch> writes: > The internal PHYs of the mv88e6390 do not have a model ID. Trap any > calls to the ID register, and if it is zero, return the ID for the > mv88e6390. The Marvell PHY driver can then bind to this ID. > > Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Thanks! Vivien ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCHv2 net-next 2/2] net: phy: Marvell: Add mv88e6390 internal PHY 2017-02-01 2:40 [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 Andrew Lunn 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn @ 2017-02-01 2:40 ` Andrew Lunn 2017-02-03 2:51 ` [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 David Miller 2 siblings, 0 replies; 6+ messages in thread From: Andrew Lunn @ 2017-02-01 2:40 UTC (permalink / raw) To: David Miller; +Cc: Vivien Didelot, netdev, Andrew Lunn The mv88e6390 Ethernet switch has internal PHYs. These PHYs don't have an model ID in the ID2 register. So the MDIO driver in the switch intercepts reads to this register, and returns the switch family ID. Extend the Marvell PHY driver by including this ID, and treat the PHY as a 88E1540. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> --- drivers/net/phy/marvell.c | 20 ++++++++++++++++++++ include/linux/marvell_phy.h | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c index a3e3733813a7..1a0ac48cbc50 100644 --- a/drivers/net/phy/marvell.c +++ b/drivers/net/phy/marvell.c @@ -2142,6 +2142,25 @@ static struct phy_driver marvell_drivers[] = { .get_strings = marvell_get_strings, .get_stats = marvell_get_stats, }, + { + .phy_id = MARVELL_PHY_ID_88E6390, + .phy_id_mask = MARVELL_PHY_ID_MASK, + .name = "Marvell 88E6390", + .features = PHY_GBIT_FEATURES, + .flags = PHY_HAS_INTERRUPT, + .probe = m88e1510_probe, + .config_init = &marvell_config_init, + .config_aneg = &m88e1510_config_aneg, + .read_status = &marvell_read_status, + .ack_interrupt = &marvell_ack_interrupt, + .config_intr = &marvell_config_intr, + .did_interrupt = &m88e1121_did_interrupt, + .resume = &genphy_resume, + .suspend = &genphy_suspend, + .get_sset_count = marvell_get_sset_count, + .get_strings = marvell_get_strings, + .get_stats = marvell_get_stats, + }, }; module_phy_driver(marvell_drivers); @@ -2160,6 +2179,7 @@ static struct mdio_device_id __maybe_unused marvell_tbl[] = { { MARVELL_PHY_ID_88E1510, MARVELL_PHY_ID_MASK }, { MARVELL_PHY_ID_88E1540, MARVELL_PHY_ID_MASK }, { MARVELL_PHY_ID_88E3016, MARVELL_PHY_ID_MASK }, + { MARVELL_PHY_ID_88E6390, MARVELL_PHY_ID_MASK }, { } }; diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h index a57f0dfb6db7..3d616d7f65bf 100644 --- a/include/linux/marvell_phy.h +++ b/include/linux/marvell_phy.h @@ -19,6 +19,12 @@ #define MARVELL_PHY_ID_88E1540 0x01410eb0 #define MARVELL_PHY_ID_88E3016 0x01410e60 +/* The MV88e6390 Ethernet switch contains embedded PHYs. These PHYs do + * not have a model ID. So the switch driver traps reads to the ID2 + * register and returns the switch family ID + */ +#define MARVELL_PHY_ID_88E6390 0x01410f90 + /* struct phy_device dev_flags definitions */ #define MARVELL_PHY_M1145_FLAGS_RESISTANCE 0x00000001 #define MARVELL_PHY_M1118_DNS323_LEDS 0x00000002 -- 2.11.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 2017-02-01 2:40 [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 Andrew Lunn 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn 2017-02-01 2:40 ` [PATCHv2 net-next 2/2] net: phy: Marvell: Add mv88e6390 internal PHY Andrew Lunn @ 2017-02-03 2:51 ` David Miller 2 siblings, 0 replies; 6+ messages in thread From: David Miller @ 2017-02-03 2:51 UTC (permalink / raw) To: andrew; +Cc: vivien.didelot, netdev From: Andrew Lunn <andrew@lunn.ch> Date: Wed, 1 Feb 2017 03:40:04 +0100 > The internal PHYs of the MV88E6390 have a Marvell OUI, but the product > ID is zero. Work around this by trapping reads to the ID, and if it is > zero, return the MV88E6390 family ID. > > v2: Move the workaround into the central mdio read function. > Enable the temperature sensor, even though it does not work on the 6390, > but it does on the 6341, which has the same ID problem. Series applied, thanks Andrew. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-02-03 2:51 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-02-01 2:40 [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 Andrew Lunn 2017-02-01 2:40 ` [PATCHv2 net-next 1/2] net: dsa: mv88e6xxx: Workaround missing PHY ID on mv88e6390 Andrew Lunn 2017-02-01 2:45 ` Florian Fainelli 2017-02-01 2:49 ` Vivien Didelot 2017-02-01 2:40 ` [PATCHv2 net-next 2/2] net: phy: Marvell: Add mv88e6390 internal PHY Andrew Lunn 2017-02-03 2:51 ` [PATCHv2 net-next 0/2] Work around missing PHY prodcut ID in mv88e6390 David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).