[PATCH net-next 03/18] net: mvpp2: set the SMI PHY address when connecting to the PHY

Antoine Tenart
2017-07-24T13:50:03Z

When connecting to the PHY, explicitly set the SMI PHY address in the
controller registers to configure a given port to be connected to the
selected PHY.

Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
---
drivers/net/ethernet/marvell/mvpp2.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)

diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 1e592abc9067..6ffff929b22a 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -359,6 +359,8 @@
#define MVPP22_SMI_MISC_CFG_REG 0x1204
#define MVPP22_SMI_POLLING_EN BIT(10)

+#define MVPP22_SMI_PHY_ADDR(port) (0x120c + (port) * 0x4)
+
#define MVPP22_GMAC_BASE(port) (0x7000 + (port) * 0x1000 + 0xe00)

#define MVPP2_CAUSE_TXQ_SENT_DESC_ALL_MASK 0xff
@@ -5939,7 +5941,9 @@ static void mvpp21_get_mac_address(struct mvpp2_port *port, unsigned char *addr)

static int mvpp2_phy_connect(struct mvpp2_port *port)
{
+ struct mvpp2 *priv = port->priv;
struct phy_device *phy_dev;
+ u32 phy_addr;

phy_dev = of_phy_connect(port->dev, port->phy_node, mvpp2_link_event, 0,
port->phy_interface);
@@ -5954,6 +5958,16 @@ static int mvpp2_phy_connect(struct mvpp2_port *port)
port->duplex = 0;
port->speed = 0;

+ if (priv->hw_version != MVPP22)
+ return 0;
+
+ /* Set the SMI PHY address */
+ if (of_property_read_u32(port->phy_node, "reg", &phy_addr)) {
+ netdev_err(port->dev, "cannot find the PHY address\n");
+ return -EINVAL;
+ }
+
+ writel(phy_addr, priv->iface_base + MVPP22_SMI_PHY_ADDR(port->gop_id));
return 0;
}

--
2.13.3