linux/drivers
Andrew Halaney df16c1c51d net: phy: mdio_device: Reset device only when necessary
Currently the phy reset sequence is as shown below for a
devicetree described mdio phy on boot:

1. Assert the phy_device's reset as part of registering
2. Deassert the phy_device's reset as part of registering
3. Deassert the phy_device's reset as part of phy_probe
4. Deassert the phy_device's reset as part of phy_hw_init

The extra two deasserts include waiting the deassert delay afterwards,
which is adding unnecessary delay.

This applies to both possible types of resets (reset controller
reference and a reset gpio) that can be used.

Here's some snipped tracing output using the following command line
params "trace_event=gpio:* trace_options=stacktrace" illustrating
the reset handling and where its coming from:

    /* Assert */
       systemd-udevd-283     [002] .....     6.780434: gpio_value: 544 set 0
       systemd-udevd-283     [002] .....     6.783849: <stack trace>
     => gpiod_set_raw_value_commit
     => gpiod_set_value_nocheck
     => gpiod_set_value_cansleep
     => mdio_device_reset
     => mdiobus_register_device
     => phy_device_register
     => fwnode_mdiobus_phy_device_register
     => fwnode_mdiobus_register_phy
     => __of_mdiobus_register
     => stmmac_mdio_register
     => stmmac_dvr_probe
     => stmmac_pltfr_probe
     => devm_stmmac_pltfr_probe
     => qcom_ethqos_probe
     => platform_probe

    /* Deassert */
       systemd-udevd-283     [002] .....     6.802480: gpio_value: 544 set 1
       systemd-udevd-283     [002] .....     6.805886: <stack trace>
     => gpiod_set_raw_value_commit
     => gpiod_set_value_nocheck
     => gpiod_set_value_cansleep
     => mdio_device_reset
     => phy_device_register
     => fwnode_mdiobus_phy_device_register
     => fwnode_mdiobus_register_phy
     => __of_mdiobus_register
     => stmmac_mdio_register
     => stmmac_dvr_probe
     => stmmac_pltfr_probe
     => devm_stmmac_pltfr_probe
     => qcom_ethqos_probe
     => platform_probe

    /* Deassert */
       systemd-udevd-283     [002] .....     6.882601: gpio_value: 544 set 1
       systemd-udevd-283     [002] .....     6.886014: <stack trace>
     => gpiod_set_raw_value_commit
     => gpiod_set_value_nocheck
     => gpiod_set_value_cansleep
     => mdio_device_reset
     => phy_probe
     => really_probe
     => __driver_probe_device
     => driver_probe_device
     => __device_attach_driver
     => bus_for_each_drv
     => __device_attach
     => device_initial_probe
     => bus_probe_device
     => device_add
     => phy_device_register
     => fwnode_mdiobus_phy_device_register
     => fwnode_mdiobus_register_phy
     => __of_mdiobus_register
     => stmmac_mdio_register
     => stmmac_dvr_probe
     => stmmac_pltfr_probe
     => devm_stmmac_pltfr_probe
     => qcom_ethqos_probe
     => platform_probe

    /* Deassert */
      NetworkManager-477     [000] .....     7.023144: gpio_value: 544 set 1
      NetworkManager-477     [000] .....     7.026596: <stack trace>
     => gpiod_set_raw_value_commit
     => gpiod_set_value_nocheck
     => gpiod_set_value_cansleep
     => mdio_device_reset
     => phy_init_hw
     => phy_attach_direct
     => phylink_fwnode_phy_connect
     => __stmmac_open
     => stmmac_open

There's a lot of paths where the device is getting its reset
asserted and deasserted. Let's track the state and only actually
do the assert/deassert when it changes.

Reported-by: Sagar Cheluvegowda <quic_scheluve@quicinc.com>
Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20231127-net-phy-reset-once-v2-1-448e8658779e@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2023-11-30 23:11:21 -08:00
..
accel accel/ivpu/37xx: Fix hangs related to MMIO reset 2023-11-21 09:20:25 +01:00
accessibility
acpi Merge branches 'acpi-video' and 'acpi-processor' into acpi 2023-11-24 19:16:22 +01:00
amba amba: bus: balance firmware node reference counting 2023-10-17 13:37:35 -05:00
android Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
ata ata: pata_isapnp: Add missing error check for devm_ioport_map() 2023-11-20 09:22:26 +09:00
atm pci-v6.7-changes 2023-11-02 14:05:18 -10:00
auxdisplay
base firmware_loader: Expand Firmware upload error codes with firmware invalid error 2023-11-24 18:09:19 -08:00
bcma
block nbd: pass nbd_sock to nbd_read_reply() instead of index 2023-11-21 07:42:04 -07:00
bluetooth Bluetooth: btmtksdio: enable bluetooth wakeup in system suspend 2023-10-23 11:04:51 -07:00
bus SoC driver updates for 6.7 2023-11-01 14:46:51 -10:00
cache riscv: RISCV_NONSTANDARD_CACHE_OPS shouldn't depend on RISCV_DMA_NONCOHERENT 2023-10-26 09:42:37 +02:00
cdrom
cdx Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
char Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
clk SoC driver updates for 6.7 2023-11-01 14:46:51 -10:00
clocksource RISC-V Patches for the 6.7 Merge Window, Part 2 2023-11-10 09:23:17 -08:00
comedi
connector Fix NULL pointer dereference in cn_filter() 2023-10-24 10:53:45 +02:00
counter
cpufreq Merge branch 'pm-cpufreq' 2023-11-07 20:45:12 +01:00
cpuidle
crypto crypto: talitos - stop using crypto_ahash::init 2023-10-27 18:04:29 +08:00
cxl cxl/pci: Change CXL AER support check to use native AER 2023-11-02 14:09:01 -07:00
dax Many singleton patches against the MM code. The patch series which are 2023-11-02 19:38:47 -10:00
dca
devfreq PM / devfreq: rockchip-dfi: add support for RK3588 2023-10-19 21:21:16 +09:00
dio
dma dmaengine updates for v6.7 2023-11-03 18:56:51 -10:00
dma-buf As usual, lots of singleton and doubleton patches all over the tree and 2023-11-02 20:53:31 -10:00
dpll dpll: Fix potential msg memleak when genlmsg_put_reply failed 2023-11-21 17:41:20 -08:00
edac hardening updates for v6.7-rc1 2023-10-30 19:09:55 -10:00
eisa
extcon extcon: realtek: add the error handler for nvmem_cell_read 2023-10-17 17:38:57 +09:00
firewire firewire: Annotate struct fw_node with __counted_by 2023-11-05 21:15:17 +09:00
firmware efi/unaccepted: Fix off-by-one when checking for overlapping ranges 2023-11-28 12:49:21 +01:00
fpga Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
fsi
gnss
gpio pwm: Changes for v6.7-rc1 2023-11-09 13:47:52 -08:00
gpu Merge tag 'drm-intel-fixes-2023-11-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes 2023-11-24 11:18:29 +10:00
greybus greybus: Add BeaglePlay Linux Driver 2023-10-27 13:19:04 +02:00
hid for-linus-2023112301 2023-11-23 17:31:53 -08:00
hsi
hte hte: Changes for v6.7-rc1 2023-10-31 18:32:51 -10:00
hv TTY/Serial changes for 6.7-rc1 2023-11-03 15:44:25 -10:00
hwmon hwmon updates for v6.7-rc1 2023-10-31 17:44:17 -10:00
hwspinlock
hwtracing
i2c i2c: ocores: Move system PM hooks to the NOIRQ phase 2023-11-13 12:43:42 -05:00
i3c I3C for 6.7 2023-11-04 16:25:36 -10:00
idle
iio Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
infiniband RDMA for v6.7 2023-11-02 15:20:30 -10:00
input Input updates for 6.7 merge window: 2023-11-09 14:18:42 -08:00
interconnect Merge branch 'icc-platform-remove' into icc-next 2023-10-19 00:50:03 +03:00
iommu IOMMU Updates for Linux v6.7 2023-11-09 13:37:28 -08:00
ipack
irqchip - Flush the translation service tables to prevent unpredictable behavior 2023-11-19 13:49:32 -08:00
isdn hardening updates for v6.7-rc1 2023-10-30 19:09:55 -10:00
leds leds: class: Don't expose color sysfs entry 2023-11-22 11:46:03 +00:00
macintosh powerpc updates for 6.7 2023-11-03 10:07:39 -10:00
mailbox Moving repo 2023-11-05 18:45:32 -08:00
mcb mcb: fix error handling for different scenarios when parsing 2023-10-21 23:04:02 +02:00
md block-6.7-2023-11-23 2023-11-23 17:40:15 -08:00
media Renesas R-Car VSP1 driver regression fix 2023-11-16 14:28:44 +01:00
memory IOMMU Updates for Linux v6.7 2023-11-09 13:37:28 -08:00
memstick
message scsi: message: fusion: Initialize return value in mptfc_bus_reset() 2023-10-24 22:36:39 -04:00
mfd - Core Frameworks 2023-11-02 14:40:51 -10:00
misc RISC-V Patches for the 6.7 Merge Window, Part 1 2023-11-08 09:21:18 -08:00
mmc mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled 2023-11-23 18:04:17 +01:00
most
mtd - removed AR7 platform support 2023-11-10 09:19:46 -08:00
mux
net net: phy: mdio_device: Reset device only when necessary 2023-11-30 23:11:21 -08:00
nfc nfc: virtual_ncidev: Add variable to check if ndev is running 2023-11-22 10:55:48 +00:00
ntb
nubus
nvdimm libnvdimm: remove kernel-doc warnings: 2023-10-18 09:48:05 -07:00
nvme nvme: tcp: fix compile-time checks for TLS mode 2023-11-22 18:41:14 -07:00
nvmem Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
of RISC-V Patches for the 6.7 Merge Window, Part 2 2023-11-10 09:23:17 -08:00
opp OPP: No need to defer probe from _opp_attach_genpd() 2023-10-17 11:11:28 +05:30
parisc parisc/power: Fix power soft-off when running on qemu 2023-11-18 18:59:30 +01:00
parport parport: gsc: mark init function static 2023-11-10 08:41:23 +01:00
pci PCI: Add debug print for device ready delay 2023-11-18 17:38:50 +00:00
pcmcia PCMCIA odd cleanups and fixes for v6.7-rc1 2023-11-07 16:40:42 -08:00
peci
perf arm64 fixes: 2023-11-10 12:22:14 -08:00
phy Revert "phy: realtek: usb: Add driver for the Realtek SoC USB 2.0 PHY" 2023-11-06 14:47:36 +01:00
pinctrl pinctrl: realtek: Fix logical error when finding descriptor 2023-11-24 10:39:20 +01:00
platform platform/x86: intel_telemetry: Fix kernel doc descriptions 2023-11-21 10:09:04 +02:00
pmdomain pmdomain: arm: Avoid polling for scmi_perf_domain 2023-11-27 16:28:20 +01:00
pnp PNP: replace deprecated strncpy() with memcpy() 2023-10-20 19:50:40 +02:00
power USB/Thunderbolt changes for 6.7-rc1 2023-11-03 16:00:42 -10:00
powercap powercap: intel_rapl: Downgrade BIOS locked limits pr_warn() to pr_debug() 2023-10-24 22:07:07 +02:00
pps
ps3
ptp net: Convert PHYs hwtstamp callback to use kernel_hwtstamp_config 2023-11-18 14:52:56 +00:00
pwm pwm: samsung: Fix a bit test in pwm_samsung_resume() 2023-11-10 09:20:48 +01:00
rapidio
ras
regulator regulator: Merge up pending fix 2023-10-30 13:14:27 +00:00
remoteproc remoteproc: st: Fix sometimes uninitialized ret in st_rproc_probe() 2023-10-16 11:24:34 -06:00
reset reset: Annotate struct reset_control_array with __counted_by 2023-10-24 14:10:04 -07:00
rpmsg rpmsg: virtio: Replace deprecated strncpy with strscpy/_pad 2023-10-23 13:11:07 -06:00
rtc RTC for 6.7 2023-11-05 18:49:40 -08:00
s390 block-6.7-2023-11-23 2023-11-23 17:40:15 -08:00
sbus
scsi Merge branch '6.7/scsi-staging' into 6.7/scsi-fixes 2023-11-14 11:40:40 -05:00
sh sh: Remove superhyway bus support 2023-10-25 16:50:11 +02:00
siox
slimbus
soc powerpc updates for 6.7 2023-11-03 10:07:39 -10:00
soundwire soundwire updates for 6.7 2023-11-03 19:10:41 -10:00
spi spi: Fixes for v6.7 2023-11-10 11:44:38 -08:00
spmi spmi: rename spmi device lookup helper 2023-11-01 10:02:18 +00:00
ssb ssb: relax SSB_EMBEDDED dependencies 2023-10-19 10:26:26 +03:00
staging pwm: Changes for v6.7-rc1 2023-11-09 13:47:52 -08:00
target SCSI misc on 20231102 2023-11-02 15:13:50 -10:00
tc
tee tee: make tee_class constant 2023-10-18 10:01:34 +02:00
thermal Thermal control updates for 6.7-rc1 2023-10-31 15:28:37 -10:00
thunderbolt thunderbolt: Only add device router DP IN to the head of the DP resource list 2023-11-17 13:05:57 +02:00
tty - removed AR7 platform support 2023-11-10 09:19:46 -08:00
ufs Merge branch '6.7/scsi-staging' into 6.7/scsi-fixes 2023-11-14 11:40:40 -05:00
uio
usb USB-serial fixes for 6.7-rc3 2023-11-24 16:30:38 +00:00
vdpa vdpa_sim_blk: allocate the buffer zeroed 2023-11-01 09:31:16 -04:00
vfio Char/Misc and other driver changes for 6.7-rc1 2023-11-03 14:51:08 -10:00
vhost vhost,virtio,vdpa,firmware: bugfixes 2023-11-16 07:39:37 -05:00
video fbdev: fsl-diu-fb: mark wr_reg_wa() static 2023-11-10 09:16:02 +01:00
virt configfs-tsm for v6.7 2023-11-04 15:58:13 -10:00
virtio vhost,virtio,vdpa,firmware: bugfixes 2023-11-16 07:39:37 -05:00
w1 nvmem: add explicit config option to read old syntax fixed OF cells 2023-10-21 19:19:06 +02:00
watchdog - removed AR7 platform support 2023-11-10 09:19:46 -08:00
xen xen: privcmd: Replace zero-length array with flex-array member and use __counted_by 2023-11-17 10:47:19 +01:00
zorro
Kconfig - removed AR7 platform support 2023-11-10 09:19:46 -08:00
Makefile - removed AR7 platform support 2023-11-10 09:19:46 -08:00