• Gerlando Falauto's avatar
    net/fsl_pq_mdio: fix computed address for the TBI register · 3bb35ac4
    Gerlando Falauto authored
    commit afae5ad7
      "net/fsl_pq_mdio: streamline probing of MDIO nodes"
    
    added support for different types of MDIO devices:
    1) Gianfar MDIO nodes that only map the MII registers
    2) Gianfar MDIO nodes that map the full MDIO register set
    3) eTSEC2 MDIO nodes (which map the full MDIO register set)
    4) QE MDIO nodes (which map only the MII registers)
    
    However, the implementation for types 1 and 4 would mistakenly assume
    a mapping of the full MDIO register set, thereby computing the address
    for the TBI register starting from the containing structure.
    The TBI register would therefore be accessed at a wrong (much bigger)
    address, not giving the expected result at all.
    This patch restores the correct behavior we had prior to the above one.
    
    The consequences of this bug are apparent when trying to access a PHY
    with the same address as the value contained in the initial value of
    the TBI register (normally 0); in that case you'll get answers from the
    internal TBI device (even though MDIO/MDC pins are actually *also*
    toggling on the physical bus!).
    Beware that you also need to add a fake tbi node to your device tree
    with an unused address.
    
    Notice how this fix is related to commit
    22066949
      "powerpc: Add TBI PHY node to first MDIO bus"
    
    which fixed the behavior in kernel 3.3, which was later broken by the
    above commit on kernel 3.7.
    Signed-off-by: default avatarGerlando Falauto <gerlando.falauto@keymile.com>
    Cc: Timur Tabi <timur@tabi.org>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Kumar Gala <galak@kernel.crashing.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3bb35ac4
fsl_pq_mdio.c 13.6 KB