From d775e4ef00e08c839a41e101552be171ff638d3d Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Tue, 17 Jun 2014 15:13:10 +0000 Subject: preliminary support for the WRT1900AC (work in progress) SVN-Revision: 41232 --- .../018-decouple_phy_id_and_address.patch | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 target/linux/mvebu/patches-3.14/018-decouple_phy_id_and_address.patch (limited to 'target/linux/mvebu/patches-3.14/018-decouple_phy_id_and_address.patch') diff --git a/target/linux/mvebu/patches-3.14/018-decouple_phy_id_and_address.patch b/target/linux/mvebu/patches-3.14/018-decouple_phy_id_and_address.patch new file mode 100644 index 0000000000..4ab6738a10 --- /dev/null +++ b/target/linux/mvebu/patches-3.14/018-decouple_phy_id_and_address.patch @@ -0,0 +1,102 @@ +From 9b744942290c168287013f0a19ff7392f65c8107 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 16 May 2014 16:14:03 +0200 +Subject: net: phy: decouple PHY id and PHY address in fixed PHY driver + +Until now, the fixed_phy_add() function was taking as argument +'phy_id', which was used both as the PHY address on the fake fixed +MDIO bus, and as the PHY id, as available in the MII_PHYSID1 and +MII_PHYSID2 registers. However, those two informations are completely +unrelated. + +This patch decouples them. The PHY id of fixed PHYs is hardcoded to be +0x0. Ideally, a really reserved value would be nicer, but there +doesn't seem to be an easy of making sure a dummy value can be +assigned to the Linux kernel for such usage. + +The PHY address remains passed by the caller of phy_fixed_add(). + +Signed-off-by: Thomas Petazzoni +Reviewed-by: Florian Fainelli +Tested-by: Florian Fainelli +Signed-off-by: David S. Miller + +--- a/drivers/net/phy/fixed.c ++++ b/drivers/net/phy/fixed.c +@@ -31,7 +31,7 @@ struct fixed_mdio_bus { + }; + + struct fixed_phy { +- int id; ++ int addr; + u16 regs[MII_REGS_NUM]; + struct phy_device *phydev; + struct fixed_phy_status status; +@@ -104,8 +104,8 @@ static int fixed_phy_update_regs(struct + if (fp->status.asym_pause) + lpa |= LPA_PAUSE_ASYM; + +- fp->regs[MII_PHYSID1] = fp->id >> 16; +- fp->regs[MII_PHYSID2] = fp->id; ++ fp->regs[MII_PHYSID1] = 0; ++ fp->regs[MII_PHYSID2] = 0; + + fp->regs[MII_BMSR] = bmsr; + fp->regs[MII_BMCR] = bmcr; +@@ -115,7 +115,7 @@ static int fixed_phy_update_regs(struct + return 0; + } + +-static int fixed_mdio_read(struct mii_bus *bus, int phy_id, int reg_num) ++static int fixed_mdio_read(struct mii_bus *bus, int phy_addr, int reg_num) + { + struct fixed_mdio_bus *fmb = bus->priv; + struct fixed_phy *fp; +@@ -124,7 +124,7 @@ static int fixed_mdio_read(struct mii_bu + return -1; + + list_for_each_entry(fp, &fmb->phys, node) { +- if (fp->id == phy_id) { ++ if (fp->addr == phy_addr) { + /* Issue callback if user registered it. */ + if (fp->link_update) { + fp->link_update(fp->phydev->attached_dev, +@@ -138,7 +138,7 @@ static int fixed_mdio_read(struct mii_bu + return 0xFFFF; + } + +-static int fixed_mdio_write(struct mii_bus *bus, int phy_id, int reg_num, ++static int fixed_mdio_write(struct mii_bus *bus, int phy_addr, int reg_num, + u16 val) + { + return 0; +@@ -160,7 +160,7 @@ int fixed_phy_set_link_update(struct phy + return -EINVAL; + + list_for_each_entry(fp, &fmb->phys, node) { +- if (fp->id == phydev->phy_id) { ++ if (fp->addr == phydev->addr) { + fp->link_update = link_update; + fp->phydev = phydev; + return 0; +@@ -171,7 +171,7 @@ int fixed_phy_set_link_update(struct phy + } + EXPORT_SYMBOL_GPL(fixed_phy_set_link_update); + +-int fixed_phy_add(unsigned int irq, int phy_id, ++int fixed_phy_add(unsigned int irq, int phy_addr, + struct fixed_phy_status *status) + { + int ret; +@@ -184,9 +184,9 @@ int fixed_phy_add(unsigned int irq, int + + memset(fp->regs, 0xFF, sizeof(fp->regs[0]) * MII_REGS_NUM); + +- fmb->irqs[phy_id] = irq; ++ fmb->irqs[phy_addr] = irq; + +- fp->id = phy_id; ++ fp->addr = phy_addr; + fp->status = *status; + + ret = fixed_phy_update_regs(fp); -- cgit v1.2.3