GbE: Optionally force master mode for RTL PHY
#1
A while back I stumbled over this patch for u-boot https://patchwork.ozlabs.org/patch/602067/ forcing the RTL80211C/E PHY into master mode to overcome some issues when the PHY is in slave mode.

Maybe this could be a source for the random GbE problems we see here sometimes?

I was just looking at Olimex blog and read the specs for their A64 board, and one of the features reads:


Code:
...
* Ethernet Gigabit interface works just in master mode
...

I tried adding the register read-modify-write to the 3.10.x BSP driver but failed, maybe someone with better skills can have a look at it? The patch boils down to:


Code:
/* RTL8211x 1000BASE-T Control Register */
#define MIIM_RTL8211x_CTRL1000T_MSCE (1 << 12);
#define MIIM_RTL8211X_CTRL1000T_MASTER (1 << 11);

...

    unsigned int reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
    /* force manual master/slave configuration */
    reg |= MIIM_RTL8211x_CTRL1000T_MSCE;
    /* force master mode */
    reg |= MIIM_RTL8211X_CTRL1000T_MASTER;
    phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, reg);

...


One read-modify-write operation....
Come have a chat in the Pine IRC channel >>
#2
(07-25-2016, 06:04 AM)xalius Wrote: A while back I stumbled over this patch for u-boot https://patchwork.ozlabs.org/patch/602067/ forcing the RTL80211C/E PHY into master mode to overcome some issues when the PHY is in slave mode.

Maybe this could be a source for the random GbE problems we see here sometimes?

I was just looking at Olimex blog and read the specs for their A64 board, and one of the features reads:


Code:
...
* Ethernet Gigabit interface works just in master mode
...

I tried adding the register read-modify-write to the 3.10.x BSP driver but failed, maybe someone with better skills can have a look at it? The patch boils down to:


Code:
/* RTL8211x 1000BASE-T Control Register */
#define MIIM_RTL8211x_CTRL1000T_MSCE (1 << 12);
#define MIIM_RTL8211X_CTRL1000T_MASTER (1 << 11);

...

    unsigned int reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_CTRL1000);
    /* force manual master/slave configuration */
    reg |= MIIM_RTL8211x_CTRL1000T_MSCE;
    /* force master mode */
    reg |= MIIM_RTL8211X_CTRL1000T_MASTER;
    phy_write(phydev, MDIO_DEVAD_NONE, MII_CTRL1000, reg);

...


One read-modify-write operation....

This is a good finding, I will ask our Android engineer to check out.


Possibly Related Threads…
Thread Author Replies Views Last Post
  Pine64 in standby mode mont3z 0 1,701 05-28-2016, 09:39 AM
Last Post: mont3z

Forum Jump:


Users browsing this thread: 1 Guest(s)