1. 09 7月, 2012 1 次提交
    • D
      netdev/phy: Fixup lockdep warnings in mdio-mux.c · b93984c9
      David Daney 提交于
      With lockdep enabled we get:
      
      =============================================
      [ INFO: possible recursive locking detected ]
      3.4.4-Cavium-Octeon+ #313 Not tainted
      ---------------------------------------------
      kworker/u:1/36 is trying to acquire lock:
      (&bus->mdio_lock){+.+...}, at: [<ffffffff813da7e8>] mdio_mux_read+0x38/0xa0
      
      but task is already holding lock:
       (&bus->mdio_lock){+.+...}, at: [<ffffffff813d79e4>] mdiobus_read+0x44/0x88
      
      other info that might help us debug this:
       Possible unsafe locking scenario:
      
             CPU0
             ----
        lock(&bus->mdio_lock);
        lock(&bus->mdio_lock);
      
       *** DEADLOCK ***
      
       May be due to missing lock nesting notation
      .
      .
      .
      
      This is a false positive, since we are indeed using 'nested' locking,
      we need to use mutex_lock_nested().
      
      Now in theory we can stack multiple MDIO multiplexers, but that would
      require passing the nesting level (which is difficult to know) to
      mutex_lock_nested().  Instead we assume the simple case of a single
      level of nesting.  Since these are only warning messages, it isn't so
      important to solve the general case.
      Signed-off-by: NDavid Daney <david.daney@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b93984c9
  2. 08 5月, 2012 1 次提交
    • D
      netdev/of/phy: Add MDIO bus multiplexer support. · 0ca2997d
      David Daney 提交于
      This patch adds a somewhat generic framework for MDIO bus
      multiplexers.  It is modeled on the I2C multiplexer.
      
      The multiplexer is needed if there are multiple PHYs with the same
      address connected to the same MDIO bus adepter, or if there is
      insufficient electrical drive capability for all the connected PHY
      devices.
      
      Conceptually it could look something like this:
      
                         ------------------
                         | Control Signal |
                         --------+---------
                                 |
       ---------------   --------+------
       | MDIO MASTER |---| Multiplexer |
       ---------------   --+-------+----
                           |       |
                           C       C
                           h       h
                           i       i
                           l       l
                           d       d
                           |       |
           ---------       A       B   ---------
           |       |       |       |   |       |
           | PHY@1 +-------+       +---+ PHY@1 |
           |       |       |       |   |       |
           ---------       |       |   ---------
           ---------       |       |   ---------
           |       |       |       |   |       |
           | PHY@2 +-------+       +---+ PHY@2 |
           |       |                   |       |
           ---------                   ---------
      
      This framework configures the bus topology from device tree data.  The
      mechanics of switching the multiplexer is left to device specific
      drivers.
      
      The follow-on patch contains a multiplexer driven by GPIO lines.
      Signed-off-by: NDavid Daney <david.daney@cavium.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      0ca2997d