1. 14 6月, 2017 2 次提交
  2. 03 6月, 2017 1 次提交
  3. 01 6月, 2017 1 次提交
    • R
      net: fix auto-loading of Marvell DSA driver · 1b8f8694
      Russell King 提交于
      Auto-loading of the Marvell DSA driver has stopped working with recent
      kernels.  This seems to be due to the change of binding for DSA devices,
      moving them from the platform bus to the MDIO bus.
      
      In order for module auto-loading to work, we need to provide a MODALIAS
      string in the uevent file for the device.  However, the device core does
      not automatically provide this, and needs each bus_type to implement a
      uevent method to generate these strings.  The MDIO bus does not provide
      such a method, so no MODALIAS string is provided:
      
      .# cat /sys/bus/mdio_bus/devices/f1072004.mdio-mii\:04/uevent
      DRIVER=mv88e6085
      OF_NAME=switch
      OF_FULLNAME=/soc/internal-regs/mdio@72004/switch@4
      OF_COMPATIBLE_0=marvell,mv88e6085
      OF_COMPATIBLE_N=1
      
      In the case of OF-based devices, the solution is easy -
      of_device_uevent_modalias() does the work for us.  After this is done,
      the uevent file looks like this:
      
      .# cat /sys/bus/mdio_bus/devices/f1072004.mdio-mii\:04/uevent
      DRIVER=mv88e6085
      OF_NAME=switch
      OF_FULLNAME=/soc/internal-regs/mdio@72004/switch@4
      OF_COMPATIBLE_0=marvell,mv88e6085
      OF_COMPATIBLE_N=1
      MODALIAS=of:NswitchT<NULL>Cmarvell,mv88e6085
      
      which results in auto-loading of the Marvell DSA driver on Clearfog
      platforms.
      
      Fixes: c0405563 ("ARM: dts: armada-388-clearfog: Utilize new DSA binding")
      Signed-off-by: NRussell King <rmk+kernel@armlinux.org.uk>
      Reviewed-by: NAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1b8f8694
  4. 12 5月, 2017 1 次提交
  5. 25 4月, 2017 1 次提交
    • R
      mdio_bus: Issue GPIO RESET to PHYs. · 69226896
      Roger Quadros 提交于
      Some boards [1] leave the PHYs at an invalid state
      during system power-up or reset thus causing unreliability
      issues with the PHY which manifests as PHY not being detected
      or link not functional. To fix this, these PHYs need to be RESET
      via a GPIO connected to the PHY's RESET pin.
      
      Some boards have a single GPIO controlling the PHY RESET pin of all
      PHYs on the bus whereas some others have separate GPIOs controlling
      individual PHY RESETs.
      
      In both cases, the RESET de-assertion cannot be done in the PHY driver
      as the PHY will not probe till its reset is de-asserted.
      So do the RESET de-assertion in the MDIO bus driver.
      
      [1] - am572x-idk, am571x-idk, a437x-idk
      Signed-off-by: NRoger Quadros <rogerq@ti.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      69226896
  6. 30 3月, 2017 1 次提交
    • F
      net: phy: Allow building mdio-boardinfo into the kernel · d0281a56
      Florian Fainelli 提交于
      mdio-boardinfo contains code that is helpful for platforms to register
      specific MDIO bus devices independent of how CONFIG_MDIO_DEVICE or
      CONFIG_PHYLIB will be selected (modular or built-in). In order to make
      that possible, let's do the following:
      
      - descend into drivers/net/phy/ unconditionally
      
      - make mdiobus_setup_mdiodev_from_board_info() take a callback argument
        which allows us not to expose the internal MDIO board info list and
        mutex, yet maintain the logic within the same file
      
      - relocate the code that creates a MDIO device into
        drivers/net/phy/mdio_bus.c
      
      - build mdio-boardinfo.o into the kernel as soon as MDIO_DEVICE is
        defined (y or m)
      
      Fixes: 90eff909 ("net: phy: Allow splitting MDIO bus/device support from PHYs")
      Fixes: 648ea013 ("net: phy: Allow pre-declaration of MDIO devices")
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Tested-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d0281a56
  7. 25 3月, 2017 1 次提交
    • F
      net: phy: Allow splitting MDIO bus/device support from PHYs · 90eff909
      Florian Fainelli 提交于
      Introduce a new configuration symbol: MDIO_DEVICE which allows building
      the MDIO devices and bus code, without pulling in the entire Ethernet
      PHY library and devices code.
      
      PHYLIB nows select MDIO_DEVICE and the relevant Makefile files are
      updated to reflect that.
      
      When MDIO_DEVICE (MDIO bus/device only) is selected, but not PHYLIB, we
      have mdio-bus.ko as a loadable module, and it does not have a
      module_exit() function because the safety of removing a bus class is
      unclear.
      
      When both MDIO_DEVICE and PHYLIB are enabled, we need to assemble
      everything into a common loadable module: libphy.ko because of nasty
      circular dependencies between phy.c, phy_device.c and mdio_bus.c which
      are really tough to untangle.
      Signed-off-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      90eff909
  8. 07 2月, 2017 1 次提交
  9. 25 11月, 2016 1 次提交
  10. 05 5月, 2016 1 次提交
  11. 02 5月, 2016 1 次提交
    • M
      mdio_bus: Fix MDIO bus scanning in __mdiobus_register() · 70e927b9
      Marek Vasut 提交于
      Since commit b74766a0 ("phylib: don't return NULL
      from get_phy_device()") in linux-next, phy_get_device() will return
      ERR_PTR(-ENODEV) instead of NULL if the PHY device ID is all ones.
      
      This causes problem with stmmac driver and likely some other drivers
      which call mdiobus_register(). I triggered this bug on SoCFPGA MCVEVK
      board with linux-next 20160427 and 20160428. In case of the stmmac, if
      there is no PHY node specified in the DT for the stmmac block, the stmmac
      driver ( drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c function
      stmmac_mdio_register() ) will call mdiobus_register() , which will
      register the MDIO bus and probe for the PHY.
      
      The mdiobus_register() resp. __mdiobus_register() iterates over all of
      the addresses on the MDIO bus and calls mdiobus_scan() for each of them,
      which invokes get_phy_device(). Before the aforementioned patch, the
      mdiobus_scan() would return NULL if no PHY was found on a given address
      and mdiobus_register() would continue and try the next PHY address. Now,
      mdiobus_scan() returns ERR_PTR(-ENODEV), which is caught by the
      'if (IS_ERR(phydev))' condition and the loop exits immediately if the
      PHY address does not contain PHY.
      
      Repair this by explicitly checking for the ERR_PTR(-ENODEV) and if this
      error comes around, continue with the next PHY address.
      Signed-off-by: NMarek Vasut <marex@denx.de>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Acked-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      70e927b9
  12. 27 4月, 2016 1 次提交
  13. 12 4月, 2016 1 次提交
  14. 13 1月, 2016 1 次提交
  15. 08 1月, 2016 10 次提交
  16. 23 10月, 2015 1 次提交
  17. 26 9月, 2015 1 次提交
  18. 25 9月, 2015 3 次提交
    • R
      phy: add phy_device_remove() · 38737e49
      Russell King 提交于
      Add a phy_device_remove() function to complement phy_device_register(),
      which undoes the effects of phy_device_register() by removing the phy
      device from visibility, but not freeing it.
      
      This allows these details to be moved out of the mdio bus code into
      the phy code where this action belongs.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      38737e49
    • R
      phy: fix mdiobus module safety · 3e3aaf64
      Russell King 提交于
      Re-implement the mdiobus module refcounting to ensure that we actually
      ensure that the mdiobus module code does not go away while we might call
      into it.
      
      The old scheme using bus->dev.driver was buggy, because bus->dev is a
      class device which never has a struct device_driver associated with it,
      and hence the associated code trying to obtain a refcount did nothing
      useful.
      
      Instead, take the approach that other subsystems do: pass the module
      when calling mdiobus_register(), and record that in the mii_bus struct.
      When we need to increment the module use count in the phy code, use
      this stored pointer.  When the phy is deteched, drop the module
      refcount, remembering that the phy device might go away at that point.
      
      This doesn't stop the mii_bus going away while there are in-use phys -
      it merely stops the underlying code vanishing.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      3e3aaf64
    • R
      phy: fix of_mdio_find_bus() device refcount leak · a1364421
      Russell King 提交于
      of_mdio_find_bus() leaks a struct device refcount, caused by using
      class_find_device() and not realising that the device reference has
      its refcount incremented:
      
       * Note, you will need to drop the reference with put_device() after use.
      ...
              while ((dev = class_dev_iter_next(&iter))) {
                      if (match(dev, data)) {
                              get_device(dev);
                              break;
                      }
      
      Update the comment, and arrange for the phy code to drop this refcount
      when disposing of a reference to it.
      Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a1364421
  19. 02 9月, 2015 1 次提交
    • M
      phylib: fix device deletion order in mdiobus_unregister() · b6c6aedc
      Mark Salter 提交于
      commit 8b63ec18 ("phylib: Make PHYs children of their MDIO bus, not
      the bus' parent.") uncovered a problem in mdiobus_unregister() which
      leads to this warning when I reboot an APM Mustang (arm64) platform:
      
        WARNING: CPU: 7 PID: 4239 at fs/sysfs/group.c:224 sysfs_remove_group+0xa0/0xa4()
        sysfs group fffffe0000e07a10 not found for kobject 'xgene-mii-eth0:03'
        ...
        CPU: 7 PID: 4239 Comm: reboot Tainted: G            E   4.2.0-0.18.el7.test15.aarch64 #1
        Hardware name: AppliedMicro Mustang/Mustang, BIOS 1.1.0 Aug 26 2015
        Call Trace:
        [<fffffe000009739c>] dump_backtrace+0x0/0x170
        [<fffffe000009752c>] show_stack+0x20/0x2c
        [<fffffe00007436f0>] dump_stack+0x78/0x9c
        [<fffffe00000c2cb4>] warn_slowpath_common+0xa0/0xd8
        [<fffffe00000c2d60>] warn_slowpath_fmt+0x74/0x88
        [<fffffe0000293d3c>] sysfs_remove_group+0x9c/0xa4
        [<fffffe00004a8bac>] dpm_sysfs_remove+0x5c/0x70
        [<fffffe000049b388>] device_del+0x44/0x208
        [<fffffe000049b578>] device_unregister+0x2c/0x7c
        [<fffffe000050dc68>] mdiobus_unregister+0x48/0x94
        [<fffffe000052afd0>] xgene_enet_mdio_remove+0x28/0x44
        [<fffffe000052d3f0>] xgene_enet_remove+0xd0/0xd8
        [<fffffe000052d424>] xgene_enet_shutdown+0x2c/0x3c
        [<fffffe00004a204c>] platform_drv_shutdown+0x24/0x40
        [<fffffe000049d4f4>] device_shutdown+0xf0/0x1b4
        [<fffffe00000e31ec>] kernel_restart_prepare+0x40/0x4c
        [<fffffe00000e32f8>] kernel_restart+0x1c/0x80
        [<fffffe00000e3670>] SyS_reboot+0x17c/0x250
      
      The problem is that mdiobus_unregister() deletes the bus device before
      unregistering the phy devices on the bus. This wasn't a problem before
      because the phys were not children of the bus:
      
        /sys/devices/platform/APMC0D05:00/net/eth0/xgene-mii-eth0:03
        /sys/devices/platform/APMC0D05:00/net/eth0/xgene-mii-eth0
      
      But now that they are:
      
        /sys/devices/platform/APMC0D05:00/net/eth0/xgene-mii-eth0/xgene-mii-eth0:03
      
      when mdiobus_unregister deletes the bus device, the phy subdirs are
      removed from sysfs also. So when the phys are unregistered afterward,
      we get the warning. This patch changes the order so that phys are
      unregistered before the bus device is deleted.
      
      Fixes: 8b63ec18 ("phylib: Make PHYs children of their MDIO bus, not the bus' parent.")
      Signed-off-by: NMark Salter <msalter@redhat.com>
      Reviewed-by: NFlorian Fainelli <f.fainelli@gmail.com>
      Tested-by: NMark Langsdorf <mlangsdo@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b6c6aedc
  20. 21 7月, 2015 1 次提交
  21. 27 1月, 2015 2 次提交
  22. 30 8月, 2014 1 次提交
  23. 06 8月, 2014 1 次提交
    • F
      Revert "net: phy: Set the driver when registering an MDIO bus device" · ce7991e8
      Fabio Estevam 提交于
      Commit a71e3c37 ("net: phy: Set the driver when registering an MDIO bus
      device") caused the following regression on the fec driver:
      
      root@imx6qsabresd:~# echo mem > /sys/power/state
      PM: Syncing filesystems ... done.
      Freezing user space processes ... (elapsed 0.003 seconds) done.
      Freezing remaining freezable tasks ... (elapsed 0.002 seconds) done.
      Unable to handle kernel NULL pointer dereference at virtual address 0000002c
      pgd = bcd14000
      [0000002c] *pgd=4d9e0831, *pte=00000000, *ppte=00000000
      Internal error: Oops: 17 [#1] SMP ARM
      Modules linked in:
      CPU: 0 PID: 617 Comm: sh Not tainted 3.16.0 #17
      task: bc0c4e00 ti: bceb6000 task.ti: bceb6000
      PC is at fec_suspend+0x10/0x70
      LR is at dpm_run_callback.isra.7+0x34/0x6c
      pc : [<803f8a98>]    lr : [<80361f44>]    psr: 600f0013
      sp : bceb7d70  ip : bceb7d88  fp : bceb7d84
      r10: 8091523c  r9 : 00000000  r8 : bd88f478
      r7 : 803f8a88  r6 : 81165988  r5 : 00000000  r4 : 00000000
      r3 : 00000000  r2 : 00000000  r1 : bd88f478  r0 : bd88f478
      Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
      Control: 10c5387d  Table: 4cd1404a  DAC: 00000015
      Process sh (pid: 617, stack limit = 0xbceb6240)
      Stack: (0xbceb7d70 to 0xbceb8000)
      ....
      
      The problem with the original commit is explained by Russell King:
      
      "It has the effect (as can be seen from the oops) of attaching the MDIO bus
      device (itself is a bus-less device) to the platform driver, which means
      that if the platform driver supports power management, it will be called
      to power manage the MDIO bus device.
      
      Moreover, drivers do not expect to be called for power management
      operations for devices which they haven't probed, and certainly not for
      devices which aren't part of the same bus that the driver is registered
      against."
      
      This reverts commit a71e3c37.
      
      Cc: <stable@vger.kernel.org> #3.16
      Signed-off-by: NFabio Estevam <fabio.estevam@freescale.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ce7991e8
  24. 25 7月, 2014 1 次提交
  25. 02 7月, 2014 1 次提交
  26. 30 5月, 2014 1 次提交
  27. 10 5月, 2014 1 次提交
    • A
      mdio_bus: fix devm_mdiobus_alloc_size export · 93dccc59
      Arnd Bergmann 提交于
      commit 6d48f44b "mdio_bus: implement devm_mdiobus_alloc/devm_mdiobus_free"
      introduced a new function devm_mdiobus_alloc_size() but added an export
      for a different function devm_mdiobus_alloc(), which was obviously
      a simple mistake that leads to  build error whenever this function is
      used from a loadable module:
      
      ERROR: "devm_mdiobus_alloc_size" [drivers/net/ethernet/ti/davinci_mdio.ko] undefined!
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Cc: Lad, Prabhakar <prabhakar.csengg@gmail.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: netdev@vger.kernel.org
      Acked-by: NLad, Prabhakar <prabhakar.csengg@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      93dccc59