19 Jul, 2010

2 commits

  • This patch adds a new networking option to allow hardware time stamps
    from PHY devices. When enabled, likely candidates among incoming and
    outgoing network packets are offered to the PHY driver for possible
    time stamping. When accepted by the PHY driver, incoming packets are
    deferred for later delivery by the driver.

    The patch also adds phylib driver methods for the SIOCSHWTSTAMP ioctl
    and callbacks for transmit and receive time stamping. Drivers may
    optionally implement these functions.

    Signed-off-by: Richard Cochran
    Signed-off-by: David S. Miller

    Richard Cochran
     
  • The phy_mii_ioctl() function unnecessarily throws away the original ifreq.
    We need access to the ifreq in order to support PHYs that can perform
    hardware time stamping.

    Two maverick drivers filter the ioctl commands passed to phy_mii_ioctl().
    This is unnecessary since phylib will check the command in any case.

    Signed-off-by: Richard Cochran
    Signed-off-by: David S. Miller

    Richard Cochran
     

03 Apr, 2010

1 commit

  • We don't use the normal hotplug mechanism because it doesn't work. It will
    load the module some time after the device appears, but that's not good
    enough for us -- we need the driver loaded _immediately_ because otherwise
    the NIC driver may just abort and then the phy 'device' goes away.

    [bwh: s/phy/mdio/ in module alias, kerneldoc for struct mdio_device_id]

    Signed-off-by: David Woodhouse
    Signed-off-by: Ben Hutchings
    Acked-by: Andy Fleming
    Signed-off-by: David S. Miller

    David Woodhouse
     

17 Mar, 2010

1 commit

  • IEEE 802.3ae clause 45 specifies a somewhat modified MDIO protocol
    for use by 10GIGE phys. The main change is a 21 bit address split into
    a 5 bit device ID and a 16 bit register offset. The definition is designed
    so that normal and extended devices can run on the same MDIO bus.

    Extend mdio-bitbang to do the new protocol. At the MDIO bus level the
    protocol is requested by or'ing MII_ADDR_C45 into the register offset.

    Make phy_read/phy_write/etc pass a full 32 bit register offset.

    This does not attempt to make the phy layer support C45 style PHYs, just
    to provide the MDIO bus support.

    Tested against a Broadcom 10GE phy with ID 0x206034, and several
    Broadcom 10/100/1000 Phys in normal mode.

    Signed-off-by: Jason Gunthorpe
    Signed-off-by: David S. Miller

    Jason Gunthorpe
     

05 Feb, 2010

1 commit


19 Jan, 2010

1 commit

  • commit 541cd3ee00a4fe975b22fac6a3bc846bacef37f7 ("phylib: Fix deadlock
    on resume") caused TI DaVinci EMAC ethernet driver to oops upon resume:

    PM: resume of devices complete after 237.098 msecs
    Restarting tasks ... done.
    kernel BUG at kernel/workqueue.c:354!
    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    [...]
    Backtrace:
    [] (__bug+0x0/0x2c) from [] (queue_delayed_work_on+0x74/0xf8)
    [] (queue_delayed_work_on+0x0/0xf8) from [] (queue_delayed_work+0x2c/0x30)

    The oops pops up because TI DaVinci EMAC driver detaches PHY on
    suspend and attaches it back on resume. Attaching makes phylib call
    phy_start_machine() that initializes a workqueue. On the other hand,
    PHY's resume routine will call phy_start_machine() again, and that
    will cause the oops since we just destroyed the already scheduled
    workqueue.

    This patch fixes the issue by moving workqueue initialization to
    phy_device_create().

    p.s. We don't see this oops with ucc_geth and gianfar drivers because
    they perform a fine-grained suspend, i.e. they just stop the PHYs
    without detaching.

    Reported-by: Sekhar Nori
    Signed-off-by: Anton Vorontsov
    Tested-by: Sekhar Nori
    Signed-off-by: David S. Miller

    Anton Vorontsov
     

31 Dec, 2009

1 commit

  • Since hibernation assumes power loss, we should fully reinitialize
    PHYs (including platform fixups), as if PHYs were just attached.

    This patch factors phy_init_hw() out of phy_attach_direct(), then
    converts mdio_bus to dev_pm_ops and adds an appropriate restore()
    callback.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: David S. Miller

    Anton Vorontsov
     

27 May, 2009

1 commit


27 Apr, 2009

2 commits

  • Add phy_connect_direct() and phy_attach_direct() functions so that
    drivers can use a pointer to the phy_device instead of trying to determine
    the phy's bus_id string.

    This patch is useful for OF device tree descriptions of phy devices where
    the driver doesn't need or know what the bus_id value in order to get a
    phy_device pointer.

    Signed-off-by: Grant Likely
    Acked-by: Andy Fleming
    Signed-off-by: David S. Miller

    Grant Likely
     
  • This patch makes changes in preparation for supporting open firmware
    device tree descriptions of MDIO busses. Changes include:
    - Cleanup handling of phy_map[] entries; they are already NULLed when
    registering and so don't need to be re-cleared, and it is good practice
    to clear them out when unregistering.
    - Split phy_device registration out into a new function so that the
    OF helpers can do two stage registration (separate allocation and
    registration steps).

    Signed-off-by: Grant Likely
    Acked-by: Andy Fleming
    Signed-off-by: David S. Miller

    Grant Likely
     

14 Apr, 2009

1 commit

  • Marvell 88E1121R Dual PHY device can be hardware-configured
    to use shared interrupt pin for both PHY ports. For such
    PHY configurations using shared PHY interrupt phy_interrupt()
    handler will also schedule a work for PHY port which didn't
    cause an interrupt.

    This patch adds a possibility for PHY drivers to provide
    did_interrupt() function which reports if the PHY (or a PHY
    port in a multi-PHY device) generated an interrupt. This
    function is called in phy_change() as phy_change() shouldn't
    proceed if it is invoked for a PHY which didn't cause an
    interrupt. So check for interrupt originator in phy_change()
    to allow early-out.

    Signed-off-by: Anatolij Gustschin
    Signed-off-by: David S. Miller

    Anatolij Gustschin
     

14 Mar, 2009

1 commit

  • It closes a race in phy_stop_machine when reprogramming of phy_timer
    (from phy_state_machine) happens between del_timer_sync and cancel_work_sync.

    Without this change it could lead to crash if phy_device would be freed after
    phy_stop_machine (timer would fire and schedule freed work).

    Signed-off-by: Marcin Slusarz
    Acked-by: Jean Delvare
    Signed-off-by: David S. Miller

    Marcin Slusarz
     

29 Nov, 2008

1 commit

  • This patch adds the power management support into the physical
    abstraction layer.

    Suspend and resume functions respectively turns on/off the bit 11
    into the PHY Basic mode control register.
    Generic PHY device starts supporting PM.

    In order to support the wake-on LAN and avoid to put in power down
    the PHY device, the MDIO is aware of what the Ethernet device wants to do.

    Voluntary, no CONFIG_PM defines were added into the sources.
    Also generic suspend/resume functions are exported to allow
    other drivers use them (such as genphy_config_aneg etc.).

    Within the phy_driver_register function, we need to remove the
    memset. It overrides the device driver owner and it is not good.

    Signed-off-by: Giuseppe Cavallaro
    Signed-off-by: David S. Miller

    Giuseppe Cavallaro
     

09 Oct, 2008

4 commits

  • Add mdiobus_{read,write} routines to allow direct reading/writing
    of registers on an mii bus without having to go through the PHY
    abstraction, and make phy_{read,write} use these primitives.

    Signed-off-by: Lennert Buytenhek
    Signed-off-by: David S. Miller

    Lennert Buytenhek
     
  • Introduce the mdio_bus class, and give each 'struct mii_bus' its own
    'struct device', so that mii_bus objects are represented in the device
    tree and can be found by querying the device tree.

    Signed-off-by: Lennert Buytenhek
    Acked-by: Andy Fleming
    Signed-off-by: David S. Miller

    Lennert Buytenhek
     
  • This patch introduces mdiobus_alloc() and mdiobus_free(), and
    makes all mdio bus drivers use these functions to allocate their
    struct mii_bus'es dynamically.

    Signed-off-by: Lennert Buytenhek
    Signed-off-by: David S. Miller
    Acked-by: Andy Fleming

    Lennert Buytenhek
     
  • In preparation of giving mii_bus objects a device tree presence of
    their own, rename struct mii_bus's ->dev argument to ->parent, since
    having a 'struct device *dev' that points to our parent device
    conflicts with introducing a 'struct device dev' representing our own
    device.

    Signed-off-by: Lennert Buytenhek
    Signed-off-by: David S. Miller
    Acked-by: Andy Fleming

    Lennert Buytenhek
     

19 Sep, 2008

1 commit

  • This patch splits the bus scanning code in mdiobus_register() off
    into a separate function, and makes this function available for
    calling from external code. This allows incrementally scanning an
    mii bus, e.g. as information about which addresses are 'safe' to
    scan becomes available.

    Signed-off-by: Lennert Buytenhek
    Acked-by: Andy Fleming

    Lennert Buytenhek
     

07 May, 2008

1 commit


25 Apr, 2008

1 commit

  • Sometimes the specific interaction between the platform and the PHY
    requires special handling. For instance, to change where the PHY's
    clock input is, or to add a delay to account for latency issues in the
    data path. We add a mechanism for registering a callback with the PHY
    Lib to be called on matching PHYs when they are brought up, or reset.

    Signed-off-by: Andy Fleming
    Signed-off-by: Jeff Garzik

    Andy Fleming
     

18 Apr, 2008

1 commit


17 Apr, 2008

2 commits


03 Feb, 2008

1 commit

  • PHY read/write functions can potentially sleep (e.g., a PHY accessed
    via I2C). The following changes were made to account for this:

    * Change spin locks to mutex locks
    * Add a BUG_ON() to phy_read() phy_write() to warn against
    calling them from an interrupt context.
    * Use work queue for PHY state machine handling since
    it can potentially sleep
    * Change phydev lock from spinlock to mutex

    Signed-off-by: Nate Case
    Acked-by: Andy Fleming
    Signed-off-by: Jeff Garzik
    Signed-off-by: David S. Miller

    Nate Case
     

05 Dec, 2007

1 commit

  • Lately I've got this nice badness on mdio bus removal:

    Device 'e0103120:06' does not have a release() function, it is broken and must be fixed.
    ------------[ cut here ]------------
    Badness at drivers/base/core.c:107
    NIP: c015c1a8 LR: c015c1a8 CTR: c0157488
    REGS: c34bdcf0 TRAP: 0700 Not tainted (2.6.23-rc5-g9ebadfbb-dirty)
    MSR: 00029032 CR: 24088422 XER: 00000000
    ...
    [c34bdda0] [c015c1a8] device_release+0x78/0x80 (unreliable)
    [c34bddb0] [c01354cc] kobject_cleanup+0x80/0xbc
    [c34bddd0] [c01365f0] kref_put+0x54/0x6c
    [c34bdde0] [c013543c] kobject_put+0x24/0x34
    [c34bddf0] [c015c384] put_device+0x1c/0x2c
    [c34bde00] [c0180e84] mdiobus_unregister+0x2c/0x58
    ...

    Though actually there is nothing broken, it just device
    subsystem core expects another "pattern" of resource managment.

    This patch implement phy device's release function, thus
    we're getting rid of this badness.

    Also small hidden bug fixed, hope none other introduced. ;-)

    Signed-off-by: Anton Vorontsov
    Acked-by: Andy Fleming
    Signed-off-by: Jeff Garzik

    Anton Vorontsov
     

02 Dec, 2007

1 commit


11 Oct, 2007

1 commit

  • Keep track of disable_irq_nosync() invocations and call enable_irq() the
    right number of times if work has been cancelled that would include them.

    Now that the call to flush_work_keventd() (problematic because of
    rtnl_mutex being held) has been replaced by cancel_work_sync() another
    issue has arisen and been left unresolved. As the MDIO bus cannot be
    accessed from the interrupt context the PHY interrupt handler uses
    disable_irq_nosync() to prevent from looping and schedules some work to be
    done as a softirq, which, apart from handling the state change of the
    originating PHY, is responsible for reenabling the interrupt. Now if the
    interrupt line is shared by another device and a call to the softirq
    handler has been cancelled, that call to enable_irq() never happens and the
    other device cannot use its interrupt anymore as its stuck disabled.

    I decided to use a counter rather than a flag because there may be more
    than one call to phy_change() cancelled in the queue -- a real one and a
    fake one triggered by free_irq() if DEBUG_SHIRQ is used, if nothing else.
    Therefore because of its nesting property enable_irq() has to be called the
    right number of times to match the number disable_irq_nosync() was called
    and restore the original state. This DEBUG_SHIRQ feature is also the
    reason why free_irq() has to be called before cancel_work_sync().

    While at it I updated the comment about phy_stop_interrupts() being called
    from `keventd' -- this is no longer relevant as the use of
    cancel_work_sync() makes such an approach unnecessary. OTOH a similar
    comment referring to flush_scheduled_work() in phy_stop() still applies as
    using cancel_work_sync() there would be dangerous.

    Checked with checkpatch.pl and at the run time (with and without
    DEBUG_SHIRQ).

    Signed-off-by: Maciej W. Rozycki
    Cc: Andy Fleming
    Cc: Jeff Garzik
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Maciej W. Rozycki
     

28 Apr, 2007

1 commit


02 Dec, 2006

2 commits

  • Most PHYs connect to an ethernet controller over a GMII or MII
    interface. However, a growing number are connected over
    different interfaces, such as RGMII or SGMII.

    The ethernet driver will tell the PHY what type of connection it
    is by setting it manually, or passing it in through phy_connect
    (or phy_attach).

    Changes include:
    * Updates to documentation
    * Updates to PHY Lib consumers
    * Changes to PHY Lib to add interface support
    * Some minor changes to whitespace in phy.h
    * gianfar driver now detects interface and passes appropriate
    value to PHY Lib
    Signed-off-by: Andrew Fleming
    Signed-off-by: Jeff Garzik

    Andy Fleming
     
  • The uses some types and macros defined in
    , , and ,
    but fails to include these headers.

    Signed-off-by: Maciej W. Rozycki

    patch-mips-2.6.18-20060920-include-phy-16
    Signed-off-by: Jeff Garzik

    Maciej W. Rozycki
     

20 Aug, 2006

1 commit

  • This makes it possible for HW PHY-less boards to utilize PAL goodies. Generic
    routines to connect to fixed PHY are provided, as well as ability to specify
    software callback that fills up link, speed, etc. information into PHY
    descriptor (the latter feature not tested so far).

    Signed-off-by: Vitaly Bordug
    Signed-off-by: Andrew Morton
    Signed-off-by: Jeff Garzik

    Vitaly Bordug
     

13 Jan, 2006

1 commit


06 Nov, 2005

1 commit

  • Adds a phy_mask field to struct mii_bus and uses it. This field
    indicates each phy address to be ignored when probing the mdio bus.

    This support is needed for the fs_enet and ibm_emac drivers to be
    converted to the generic phy layer among other drivers. Many systems
    lock up on probing certain phy addresses or probing doesn't return
    0xffff when nothing is found at the address. A new driver I'm
    working on also makes use of this mask.

    Signed-off-by: Matt Porter
    Signed-off-by: Jeff Garzik

    Matt Porter
     

29 Aug, 2005

1 commit

  • This patch adds back the code that was taken out, thus re-enabling:

    * The PHY Layer to initialize without crashing
    * Drivers to actually connect to PHYs
    * The entire PHY Control Layer

    This patch is used by the gianfar driver, and other drivers which are in
    development.

    Signed-off-by: Andy Fleming
    Signed-off-by: Jeff Garzik

    Andy Fleming
     

11 Aug, 2005

2 commits


31 Jul, 2005

1 commit