Skip to content

Commit

Permalink
net: mscc: ocelot: make phy_mode a member of the common struct ocelot…
Browse files Browse the repository at this point in the history
…_port

The Ocelot switchdev driver and the Felix DSA one need it for different
reasons. Felix (or at least the VSC9959 instantiation in NXP LS1028A) is
integrated with the traditional NXP Layerscape PCS design which does not
support runtime configuration of SerDes protocol. So it needs to
pre-validate the phy-mode from the device tree and prevent PHYLINK from
attempting to change it. For this, it needs to cache it in a private
variable.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Jan 6, 2020
1 parent d79d303 commit ee50d07
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 6 deletions.
7 changes: 4 additions & 3 deletions drivers/net/ethernet/mscc/ocelot.c
Original file line number Diff line number Diff line change
Expand Up @@ -500,21 +500,22 @@ EXPORT_SYMBOL(ocelot_port_enable);
static int ocelot_port_open(struct net_device *dev)
{
struct ocelot_port_private *priv = netdev_priv(dev);
struct ocelot *ocelot = priv->port.ocelot;
struct ocelot_port *ocelot_port = &priv->port;
struct ocelot *ocelot = ocelot_port->ocelot;
int port = priv->chip_port;
int err;

if (priv->serdes) {
err = phy_set_mode_ext(priv->serdes, PHY_MODE_ETHERNET,
priv->phy_mode);
ocelot_port->phy_mode);
if (err) {
netdev_err(dev, "Could not set mode of SerDes\n");
return err;
}
}

err = phy_connect_direct(dev, priv->phy, &ocelot_port_adjust_link,
priv->phy_mode);
ocelot_port->phy_mode);
if (err) {
netdev_err(dev, "Could not attach to PHY\n");
return err;
Expand Down
1 change: 0 additions & 1 deletion drivers/net/ethernet/mscc/ocelot.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ struct ocelot_port_private {

u8 vlan_aware;

phy_interface_t phy_mode;
struct phy *serdes;

struct ocelot_port_tc tc;
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/ethernet/mscc/ocelot_board.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,9 +402,9 @@ static int mscc_ocelot_probe(struct platform_device *pdev)

of_get_phy_mode(portnp, &phy_mode);

priv->phy_mode = phy_mode;
ocelot_port->phy_mode = phy_mode;

switch (priv->phy_mode) {
switch (ocelot_port->phy_mode) {
case PHY_INTERFACE_MODE_NA:
continue;
case PHY_INTERFACE_MODE_SGMII:
Expand Down
2 changes: 2 additions & 0 deletions include/soc/mscc/ocelot.h
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,8 @@ struct ocelot_port {
u8 ptp_cmd;
struct sk_buff_head tx_skbs;
u8 ts_id;

phy_interface_t phy_mode;
};

struct ocelot {
Expand Down

0 comments on commit ee50d07

Please sign in to comment.