TencentOS-kernel/drivers
Martin Blumenstingl 494b2fdedd net: dsa: lantiq_gswip: Don't use PHY auto polling
commit 3e9005be87777afc902b9f5497495898202d335d upstream.

PHY auto polling on the GSWIP hardware can be used so link changes
(speed, link up/down, etc.) can be detected automatically. Internally
GSWIP reads the PHY's registers for this functionality. Based on this
automatic detection GSWIP can also automatically re-configure it's port
settings. Unfortunately this auto polling (and configuration) mechanism
seems to cause various issues observed by different people on different
devices:
- FritzBox 7360v2: the two Gbit/s ports (connected to the two internal
  PHY11G instances) are working fine but the two Fast Ethernet ports
  (using an AR8030 RMII PHY) are completely dead (neither RX nor TX are
  received). It turns out that the AR8030 PHY sets the BMSR_ESTATEN bit
  as well as the ESTATUS_1000_TFULL and ESTATUS_1000_XFULL bits. This
  makes the PHY auto polling state machine (rightfully?) think that the
  established link speed (when the other side is Gbit/s capable) is
  1Gbit/s.
- None of the Ethernet ports on the Zyxel P-2812HNU-F1 (two are
  connected to the internal PHY11G GPHYs while the other three are
  external RGMII PHYs) are working. Neither RX nor TX traffic was
  observed. It is not clear which part of the PHY auto polling state-
  machine caused this.
- FritzBox 7412 (only one LAN port which is connected to one of the
  internal GPHYs running in PHY22F / Fast Ethernet mode) was seeing
  random disconnects (link down events could be seen). Sometimes all
  traffic would stop after such disconnect. It is not clear which part
  of the PHY auto polling state-machine cauased this.
- TP-Link TD-W9980 (two ports are connected to the internal GPHYs
  running in PHY11G / Gbit/s mode, the other two are external RGMII
  PHYs) was affected by similar issues as the FritzBox 7412 just without
  the "link down" events

Switch to software based configuration instead of PHY auto polling (and
letting the GSWIP hardware configure the ports automatically) for the
following link parameters:
- link up/down
- link speed
- full/half duplex
- flow control (RX / TX pause)

After a big round of manual testing by various people (who helped test
this on OpenWrt) it turns out that this fixes all reported issues.

Additionally it can be considered more future proof because any
"quirk" which is implemented for a PHY on the driver side can now be
used with the GSWIP hardware as well because Linux is in control of the
link parameters.

As a nice side-effect this also solves a problem where fixed-links were
not supported previously because we were relying on the PHY auto polling
mechanism, which cannot work for fixed-links as there's no PHY from
where it can read the registers. Configuring the link settings on the
GSWIP ports means that we now use the settings from device-tree also for
ports with fixed-links.

Fixes: 14fceff4771e51 ("net: dsa: Add Lantiq / Intel DSA driver for vrx200")
Fixes: 3e6fdeb28f4c33 ("net: dsa: lantiq_gswip: Let GSWIP automatically set the xMII clock")
Cc: stable@vger.kernel.org
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[ Move gswip_port_set_{speed, duplex, pause} calls from
  gswip_phylink_mac_link_up to gswip_phylink_mac_config because the
  data required for these functions is not available inside
  gswip_phylink_mac_link_up yet in Linux 5.4 (it was only added with
  Linux 5.7). ]
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-05-20 16:06:58 +08:00
..
accessibility
acpi Intel: x86/mce: Fix all mce notifiers to update the mce->kflags bitmask 2021-04-25 14:31:15 +08:00
amba amba: Fix resource leak for drivers without .remove 2021-04-12 12:52:26 +08:00
android binder: add flag to clear buffer on txn complete 2021-03-16 16:43:28 +08:00
ata ata: ahci_brcm: Add back regulators management 2021-04-12 12:52:20 +08:00
atm atm: idt77252: fix null-ptr-dereference 2021-04-12 12:53:23 +08:00
auxdisplay auxdisplay: ht16k33: Fix refresh rate handling 2021-04-12 12:52:25 +08:00
base PM: runtime: Fix ordering in pm_runtime_get_suppliers() 2021-05-20 16:06:49 +08:00
bcma
block xen-blkback: don't leak persistent grants from xen_blkbk_map() 2021-04-12 12:53:32 +08:00
bluetooth Bluetooth: hci_h5: Set HCI_QUIRK_SIMULTANEOUS_DISCOVERY for btrtl 2021-04-12 12:52:46 +08:00
bus bus: ti-sysc: Fix warning on unbind if reset is not deasserted 2021-05-20 16:06:52 +08:00
cdrom
char parisc: parisc-agp requires SBA IOMMU driver 2021-05-20 16:06:56 +08:00
clk clk: aspeed: Fix APLL calculate formula from ast2600-A2 2021-04-12 12:52:28 +08:00
clocksource clocksource/drivers/mxs_timer: Add missing semicolon when DEBUG is defined 2021-04-12 12:52:24 +08:00
connector
counter counter: stm32-timer-cnt: fix ceiling miss-alignment with reload register 2021-05-20 16:06:54 +08:00
cpufreq cpufreq: blacklist Arm Vexpress platforms in cpufreq-dt-platdev 2021-04-12 12:53:22 +08:00
cpuidle Intel: cpuidle: Allow idle states to be disabled by default 2021-04-25 14:31:12 +08:00
crypto crypto: sun4i-ss - initialize need_fallback 2021-04-12 12:52:36 +08:00
dax device-dax/core: Fix memory leak when rmmod dax.ko 2021-03-16 16:43:45 +08:00
dca
devfreq PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out 2021-03-16 16:36:35 +08:00
dio
dma dmaengine: hsu: disable spurious interrupt 2021-04-12 12:52:24 +08:00
dma-buf dmabuf: fix use-after-free of dmabuf's file->f_inode 2021-04-12 12:51:14 +08:00
edac Intel: x86/mce: Fix all mce notifiers to update the mce->kflags bitmask 2021-04-25 14:31:15 +08:00
eisa
extcon extcon: Fix error handling in extcon_dev_register 2021-05-20 16:06:50 +08:00
firewire firewire: nosy: Fix a use-after-free bug in nosy_ioctl() 2021-05-20 16:06:50 +08:00
firmware firmware/efi: Fix a use after bug in efi_mem_reserve_persistent 2021-04-12 12:53:21 +08:00
fpga
fsi
gnss
gpio gpiolib: acpi: Add missing IRQF_ONESHOT 2021-04-12 12:53:22 +08:00
gpu drm/i915: Fix invalid access to ACPI _DSM objects 2021-05-20 16:06:55 +08:00
greybus
hid HID: logitech-dj: add support for the new lightspeed connection iteration 2021-04-12 12:53:03 +08:00
hsi HSI: Fix PM usage counter unbalance in ssi_hw_init 2021-04-12 12:52:22 +08:00
hv Drivers: hv: vmbus: Avoid use-after-free in vmbus_onoffer_rescind() 2021-04-12 12:52:21 +08:00
hwmon hwmon: (pwm-fan) Ensure that calculation doesn't discard big period values 2021-04-12 12:51:24 +08:00
hwspinlock
hwtracing stm class: Fix module init return on allocation failure 2021-04-12 12:51:37 +08:00
i2c i2c: turn recovery error on init to debug 2021-05-20 16:06:58 +08:00
i3c i3c master: fix missing destroy_workqueue() on error in i3c_master_register 2021-03-16 16:43:55 +08:00
ide scsi: ide: Do not set the RQF_PREEMPT flag for sense requests 2021-04-12 12:51:06 +08:00
idle Intel: intel_idle: Customize IceLake server support 2021-04-25 14:31:16 +08:00
iio iio: hid-sensor-temperature: Fix issues of timestamp channel 2021-04-12 12:53:19 +08:00
infiniband RDMA/cxgb4: Fix adapter LE hash errors while destroying ipv6 listening server 2021-04-12 12:53:30 +08:00
input Input: applespi - don't wait for responses to commands indefinitely. 2021-04-12 12:53:03 +08:00
interconnect interconnect: qcom: qcs404: Remove GPU and display RPM IDs 2021-03-16 16:42:11 +08:00
iommu iommu/amd: Fix performance counter initialization 2021-04-12 12:53:03 +08:00
ipack
irqchip irqchip/ingenic: Add support for the JZ4760 2021-04-12 12:53:23 +08:00
isdn mISDN: fix crash in fritzpci 2021-05-20 16:06:52 +08:00
leds leds: trigger: fix potential deadlock with libata 2021-04-12 12:51:44 +08:00
lightnvm lightnvm: fix memory leak when submit fails 2021-04-12 12:51:39 +08:00
macintosh macintosh/via-macii: Access autopoll_devs when inside lock 2021-03-16 16:33:39 +08:00
mailbox mailbox: avoid timer start from callback 2021-03-16 16:38:59 +08:00
mcb
md dm ioctl: fix out of bounds array access when no devices 2021-04-12 12:53:26 +08:00
media media: rc: compile rc-cec.c into rc-core 2021-04-12 12:53:01 +08:00
memory memory: ti-aemif: Drop child node when jumping out loop 2021-04-12 12:52:13 +08:00
memstick memstick: r592: Fix error return in r592_probe() 2021-03-16 16:43:02 +08:00
message scsi: mptfusion: Fix null pointer dereferences in mptscsih_remove() 2021-03-16 16:39:58 +08:00
mfd mfd: wm831x-auxadc: Prevent use after free in wm831x_auxadc_read_irq() 2021-04-12 12:52:27 +08:00
misc habanalabs: Call put_pid() when releasing control device 2021-04-12 12:53:24 +08:00
mmc mmc: cqhci: Fix random crash when remove mmc module/card 2021-04-12 12:53:06 +08:00
mtd mtd: spi-nor: hisi-sfc: Put child node np on error path 2021-04-12 12:52:38 +08:00
mux
net net: dsa: lantiq_gswip: Don't use PHY auto polling 2021-05-20 16:06:58 +08:00
nfc nfc: s3fwrn5: Release the nfc firmware 2021-03-16 16:43:15 +08:00
ntb NTB: hw: amd: fix an issue about leak system resources 2021-03-16 16:39:10 +08:00
nubus
nvdimm libnvdimm/dimm: Avoid race between probe and available_slots_show() 2021-04-12 12:51:55 +08:00
nvme nvme-mpath: replace direct_make_request with generic_make_request 2021-05-20 16:06:54 +08:00
nvmem nvmem: core: skip child nodes not matching binding 2021-04-12 12:52:30 +08:00
of of/fdt: Make sure no-map does not remove already reserved regions 2021-04-12 12:52:24 +08:00
opp opp: Reduce the size of critical section in _opp_table_kref_release() 2021-03-16 16:40:41 +08:00
oprofile
parisc parisc: mask out enable and reserved bits from sba imask 2021-03-16 16:33:54 +08:00
parport
pci PCI/ERR: Update error status after reset_link() 2021-04-25 14:31:13 +08:00
pcmcia
perf drivers/perf: thunderx2_pmu: Fix memory resource error handling 2021-03-16 16:38:23 +08:00
phy phy: rockchip-emmc: emmc_phy_init() always return 0 2021-04-12 12:52:29 +08:00
pinctrl pinctrl: rockchip: fix restore error in resume 2021-05-20 16:06:50 +08:00
platform platform/x86: thinkpad_acpi: Allow the FnLock LED to change state 2021-05-20 16:06:53 +08:00
pnp
power power: reset: at91-sama5d2_shdwc: fix wkupdbc mask 2021-04-12 12:52:24 +08:00
powercap powercap: restrict energy meter to root access 2021-03-16 16:40:32 +08:00
pps
ps3 powerpc/ps3: use dma_mapping_error() 2021-03-16 16:43:15 +08:00
ptp
pwm pwm: rockchip: rockchip_pwm_probe(): Remove superfluous clk_unprepare() 2021-04-12 12:52:30 +08:00
rapidio rapidio: fix the missed put_device() for rio_mport_add_riodev 2021-03-16 16:38:59 +08:00
ras Intel: x86/mce: Fix all mce notifiers to update the mce->kflags bitmask 2021-04-25 14:31:15 +08:00
regulator regulator: qcom-rpmh: Correct the pmic5_hfsmps515 buck 2021-04-12 12:53:24 +08:00
remoteproc remoteproc: qcom: Fix potential NULL dereference in adsp_init_mmio() 2021-03-16 16:43:11 +08:00
reset
rpmsg rpmsg: glink: Use complete_all for open states 2021-03-16 16:39:50 +08:00
rtc rtc: s5m: select REGMAP_I2C 2021-04-12 12:52:24 +08:00
s390 s390/dasd: fix hanging IO request during DASD driver unbind 2021-04-12 12:53:06 +08:00
sbus
scsi scsi: qla2xxx: Fix broken #endif placement 2021-05-20 16:06:47 +08:00
sfi
sh
siox
slimbus slimbus: qcom-ngd-ctrl: Avoid sending power requests without QMI 2021-03-16 16:42:54 +08:00
soc soc: aspeed: snoop: Add clock control logic 2021-04-12 12:52:15 +08:00
soundwire soundwire: cadence: fix ACK/NAK handling 2021-04-12 12:52:29 +08:00
spi spi: stm32: make spurious and overrun interrupts visible 2021-04-12 12:53:02 +08:00
spmi spmi: spmi-pmic-arb: Fix hw_irq overflow 2021-04-12 12:52:39 +08:00
ssb
staging staging: rtl8192e: Change state information from u16 to u8 2021-05-20 16:06:52 +08:00
target scsi: target: pscsi: Clean up after failure in pscsi_map_sg() 2021-05-20 16:06:53 +08:00
tc
tee tee: optee: replace might_sleep with cond_resched 2021-04-12 12:51:45 +08:00
thermal thermal/core: Add NULL pointer check before using cooling device stats 2021-05-20 16:06:47 +08:00
thunderbolt thunderbolt: Fix use-after-free in remove_unplugged_switch() 2021-03-16 16:42:03 +08:00
tty vt/consolemap: do font sum unsigned 2021-04-12 12:52:46 +08:00
uio uio: avoid to request_irq when the legacy irq is not connected 2021-03-16 16:43:58 +08:00
usb usbip: synchronize event handler with sysfs code paths 2021-05-20 16:06:58 +08:00
vfio vfio/nvlink: Add missing SPAPR_TCE_IOMMU depends 2021-05-20 16:06:50 +08:00
vhost vhost: Fix vhost_vq_reset() 2021-05-20 16:06:46 +08:00
video drivers: video: fbcon: fix NULL dereference in fbcon_cursor() 2021-05-20 16:06:52 +08:00
virt virt: vbox: Do not use wait_event_interruptible when called from kernel context 2021-04-12 12:52:10 +08:00
virtio virtio_ring: Fix two use after free bugs 2021-03-16 16:43:19 +08:00
visorbus
vlynq
vme
w1 w1: mxc_w1: Fix timeout resolution problem leading to bus error 2021-03-16 16:39:58 +08:00
watchdog watchdog: mei_wdt: request stop on unregister 2021-04-12 12:52:38 +08:00
xen xen/evtchn: Change irq_info lock to raw_spinlock_t 2021-05-20 16:06:55 +08:00
zorro
Kconfig
Makefile