Commit Graph

208 Commits

Author SHA1 Message Date
Izabela Bakollari 1d9532ca99 net: phy: micrel: Fix the KSZ9131 MDI-X status issue
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 84383b5ef4cd21b4a67de92afdc05a03b5247db9
Author: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
Date:   Thu Jul 25 12:41:25 2024 +0530

    net: phy: micrel: Fix the KSZ9131 MDI-X status issue

    The MDIX status is not accurately reflecting the current state after the link
    partner has manually altered its MDIX configuration while operating in forced
    mode.

    Access information about Auto mdix completion and pair selection from the
    KSZ9131's Auto/MDI/MDI-X status register

    Fixes: b64e6a8794d9 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131")
    Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20240725071125.13960-1-Raju.Lakkaraju@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:55 +01:00
Izabela Bakollari 588725fc4f net: phy: Micrel KSZ8061: fix errata solution not taking effect problem
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 0a8d3f2e3e8d8aea8af017e14227b91d5989b696
Author: Tristram Ha <tristram.ha@microchip.com>
Date:   Thu May 30 18:38:01 2024 -0700

    net: phy: Micrel KSZ8061: fix errata solution not taking effect problem

    KSZ8061 needs to write to a MMD register at driver initialization to fix
    an errata.  This worked in 5.0 kernel but not in newer kernels.  The
    issue is the main phylib code no longer resets PHY at the very beginning.
    Calling phy resuming code later will reset the chip if it is already
    powered down at the beginning.  This wipes out the MMD register write.
    Solution is to implement a phy resume function for KSZ8061 to take care
    of this problem.

    Fixes: 232ba3a51c ("net: phy: Micrel KSZ8061: link failure after cable connect")
    Signed-off-by: Tristram Ha <tristram.ha@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:51 +01:00
Izabela Bakollari c0bb380331 net: micrel: Fix lan8841_config_intr after getting out of sleep mode
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 4fb679040d9f758eeb3b4d01bbde6405bf20e64e
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri May 24 10:53:50 2024 +0200

    net: micrel: Fix lan8841_config_intr after getting out of sleep mode

    When the interrupt is enabled, the function lan8841_config_intr tries to
    clear any pending interrupts by reading the interrupt status, then
    checks the return value for errors and then continue to enable the
    interrupt. It has been seen that once the system gets out of sleep mode,
    the interrupt status has the value 0x400 meaning that the PHY detected
    that the link was in low power. That is correct value but the problem is
    that the check is wrong.  We try to check for errors but we return an
    error also in this case which is not an error. Therefore fix this by
    returning only when there is an error.

    Fixes: a8f1a19d27ef ("net: micrel: Add support for lan8841 PHY")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Suman Ghosh <sumang@marvell.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://lore.kernel.org/r/20240524085350.359812-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:50 +01:00
Izabela Bakollari e2e7473774 net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ8061
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 128d54fbcb14b8717ecf596d3dbded327b9980b3
Author: Mathieu Othacehe <m.othacehe@gmail.com>
Date:   Tue May 21 08:54:06 2024 +0200

    net: phy: micrel: set soft_reset callback to genphy_soft_reset for KSZ8061

    Following a similar reinstate for the KSZ8081 and KSZ9031.

    Older kernels would use the genphy_soft_reset if the PHY did not implement
    a .soft_reset.

    The KSZ8061 errata described here:
    https://ww1.microchip.com/downloads/en/DeviceDoc/KSZ8061-Errata-DS80000688B.pdf
    and worked around with 232ba3a51c ("net: phy: Micrel KSZ8061: link failure after cable connect")
    is back again without this soft reset.

    Fixes: 6e2d85ec05 ("net: phy: Stop with excessive soft reset")
    Tested-by: Karim Ben Houcine <karim.benhoucine@landisgyr.com>
    Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:50 +01:00
Izabela Bakollari be3dc745e4 net: phy: micrel: Add support for PTP_PF_EXTTS for lan8814
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit b3f1a08fcf0dd58d99b14b9f8fbd1929f188b746
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri Apr 26 16:02:24 2024 +0200

    net: phy: micrel: Add support for PTP_PF_EXTTS for lan8814

    Extend the PTP programmable gpios to implement also PTP_PF_EXTTS
    function. The pins can be configured to capture both of rising
    and falling edge. Once the event is seen, then an interrupt is
    generated and the LTC is saved in the registers.
    On lan8814 only GPIO 3 can be configured for this.

    This was tested using:
    ts2phc -m -l 7 -s generic -f ts2phc.cfg

    Where the configuration was the following:
        ---
        [global]
        ts2phc.pin_index  3

        [eth0]
        ---

    Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:49 +01:00
Izabela Bakollari 98337cd4a0 net: phy: micrel: lan8814: Add support for PTP_PF_PEROUT
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 9e63941b8976c45f1ce42b5e0e45070ee24b22eb
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Mon Apr 8 08:44:32 2024 +0200

    net: phy: micrel: lan8814: Add support for PTP_PF_PEROUT

    Lan8814 has 24 GPIOs but only 2 GPIOs (GPIO 0 and GPIO 1) can be
    configured to generate period signals. And there are 2 events (EVENT_A
    and EVENT_B) but these events are hardcoded to the GPIO 0 and GPIO 1.
    These events are used to generate period signals. It is possible to
    configure the length, the start time and the period of the signal by
    configuring the event.

    These events are generated by comparing the target time with the PHC
    time. In case the PHC time is changed to a value bigger than the target
    time + reload time, then it would generate only 1 event and then it
    would stop because target time + reload time is smaller than PHC time.
    Therefore it is required to change also the target time every time when
    the PHC is changed. The same will apply also when the PHC time is
    changed to a smaller value.

    This was tested using:
    testptp -i 1 -L 1,2
    testptp -i 1 -p 1000000000 -w 200000000

    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:47 +01:00
Izabela Bakollari 385ac7a63d net: phy: micrel: lan8814: Enable LTC at probe time
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit 9f6b3a498174843f5a9fb573d084bbad381f40f6
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Mon Apr 8 08:44:31 2024 +0200

    net: phy: micrel: lan8814: Enable LTC at probe time

    The LTC for lan8814 was enabled only if timestamping was enabled,
    otherwise it would be stopped. Meaning that LTC will not increase by
    itself. This might break other features that don't required timestamping
    like generating 1PPS. Therefore enable the LTC at probe time.

    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:47 +01:00
Izabela Bakollari 92b514f4a7 net: phy: micrel: lan8814: Fix when enabling/disabling 1-step timestamping
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit de99e1ea3a35f23ff83a31d6b08f43d27b2c6345
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Tue Apr 2 09:16:34 2024 +0200

    net: phy: micrel: lan8814: Fix when enabling/disabling 1-step timestamping

    There are 2 issues with the blamed commit.
    1. When the phy is initialized, it would enable the disabled of UDPv4
       checksums. The UDPv6 checksum is already enabled by default. So when
       1-step is configured then it would clear these flags.
    2. After the 1-step is configured, then if 2-step is configured then the
       1-step would be still configured because it is not clearing the flag.
       So the sync frames will still have origin timestamps set.

    Fix this by reading first the value of the register and then
    just change bit 12 as this one determines if the timestamp needs to
    be inserted in the frame, without changing any other bits.

    Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Link: https://lore.kernel.org/r/20240402071634.2483524-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:46 +01:00
Izabela Bakollari bb107c19ee net: phy: micrel: lan8814 cable improvement errata
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit ad080db4483b46576ccaa68136a1e7918faa8a18
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Mon Mar 4 10:15:48 2024 +0100

    net: phy: micrel: lan8814 cable improvement errata

    When the length of the cable is more than 100m and the lan8814 is
    configured to run in 1000Base-T Slave then the register of the device
    needs to be optimized.

    Workaround this by setting the measure time to a value of 0xb. This
    value can be set regardless of the configuration.

    This issue is described in 'LAN8814 Silicon Errata and Data Sheet
    Clarification' and according to that, this will not be corrected in a
    future silicon revision.

    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Acked-by: Arun Ramadoss <arun.ramadoss@microchip.com>
    Link: https://lore.kernel.org/r/20240304091548.1386022-3-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:44 +01:00
Izabela Bakollari 2b35d44b2e net: phy: micrel: lan8814 led errata
JIRA: https://issues.redhat.com/browse/RHEL-57766

commit e9097f8e1e768a359f2484329191ece2922330ec
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Mon Mar 4 10:15:47 2024 +0100

    net: phy: micrel: lan8814 led errata

    Lan8814 phy led behavior is not correct. It was noticed that the led
    still remains ON when the cable is unplugged while there was traffic
    passing at that time.

    The fix consists in clearing bit 10 of register 0x38, in this way the
    led behaviour is correct and gets OFF when there is no link.

    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240304091548.1386022-2-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-12-10 13:40:44 +01:00
Rado Vrbovsky 40945cb730 Merge: CNB96: net/ethtool: rebase to v6.11
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/5197

JIRA: https://issues.redhat.com/browse/RHEL-57750  
Depends: !5196

This updates the ethtool subsystem to v6.11. At the end of this series, the only remaining diffs from v6.11 are the RH_KABI_RESERVES in struct ethtool_ops, as shown by:  
`git diff v6.11 -- net/ethtool include/linux/ethtool.h include/uapi/linux/ethtool{,_netlink}.h Documentation/netlink/specs/ethtool.yaml Documentation/networking/ethtool-netlink.rst tools/net/ynl/ethtool.py`

Omitted-Fix: 9dbad38336a9 ("eth: bnxt: populate defaults in the RSS context struct")
 - bnxt has not been converted to .create_rxfh_context yet.
   This will be in a driver update later.

Omitted-Fix: cdc90f75387c ("pse-core: Conditionally set current limit during PI regulator registration")  
Omitted-Fix: 326f442784c2 ("net: pse-pd: pse_core: Fix pse regulator type")
 - All changes to pse_core.c omitted in the series.

Omitted-Fix: 2fa809b90617 ("net: pse-pd: Kconfig: Add missing Regulator API dependency")
 - Irrelevant. CONFIG_PSE_CONTROLLER is disabled.

Omitted-Fix: 93c3a96c301f ("net: pse-pd: Do not return EOPNOSUPP if config is null")
 - Contained in the merge conflict resolution backported in "net: ethtool: pse-pd: Fix possible null-deref".

Omitted-Fix: dda3529d2e84 ("net: pse-pd: Fix enabled status mismatch")
 - Irrelevant. CONFIG_PSE_CONTROLLER is disabled.

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>

Approved-by: Antoine Tenart <atenart@redhat.com>
Approved-by: Ivan Vecera <ivecera@redhat.com>
Approved-by: Eric Chanudet <echanude@redhat.com>
Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com>

Merged-by: Rado Vrbovsky <rvrbovsk@redhat.com>
2024-10-19 08:11:42 +00:00
Michal Schmidt 7052eaa805 net: Add struct kernel_ethtool_ts_info
JIRA: https://issues.redhat.com/browse/RHEL-57750

commit 2111375b85ad173d58e7b8604246a3de60950ac8
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Jul 9 15:53:38 2024 +0200

    net: Add struct kernel_ethtool_ts_info

    In prevision to add new UAPI for hwtstamp we will be limited to the struct
    ethtool_ts_info that is currently passed in fixed binary format through the
    ETHTOOL_GET_TS_INFO ethtool ioctl. It would be good if new kernel code
    already started operating on an extensible kernel variant of that
    structure, similar in concept to struct kernel_hwtstamp_config vs struct
    hwtstamp_config.

    Since struct ethtool_ts_info is in include/uapi/linux/ethtool.h, here
    we introduce the kernel-only structure in include/linux/ethtool.h.
    The manual copy is then made in the function called by ETHTOOL_GET_TS_INFO.

    Acked-by: Shannon Nelson <shannon.nelson@amd.com>
    Acked-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20240709-feature_ptp_netnext-v17-6-b5317f50df2a@bootlin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Conflicts:
	drivers/net/dsa/microchip/ksz_ptp.c
	drivers/net/dsa/microchip/ksz_ptp.h
	drivers/net/ethernet/engleder/tsnep_ethtool.c
	drivers/net/ethernet/fungible/funeth/funeth_ethtool.c
	drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c
	drivers/net/ethernet/renesas/rtsn.c
	net/dsa/user.c
	- code not present in RHEL

	drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
	drivers/net/ethernet/mscc/ocelot_ptp.c
	- code disabled in RHEL config

	drivers/net/ethernet/hisilicon/hns3/hnae3.h
	drivers/net/ethernet/mellanox/mlxsw/spectrum_ethtool.c
	drivers/net/ethernet/sfc/ptp.h
	- context conflicts due to patching out-of-order

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
2024-10-01 12:19:15 +02:00
Michal Schmidt dc450f6872 net: Change the API of PHY default timestamp to MAC
JIRA: https://issues.redhat.com/browse/RHEL-57750

commit 2dd35600590148d843367c04975acad3c1a527c3
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Jul 9 15:53:36 2024 +0200

    net: Change the API of PHY default timestamp to MAC

    Change the API to select MAC default time stamping instead of the PHY.
    Indeed the PHY is closer to the wire therefore theoretically it has less
    delay than the MAC timestamping but the reality is different. Due to lower
    time stamping clock frequency, latency in the MDIO bus and no PHC hardware
    synchronization between different PHY, the PHY PTP is often less precise
    than the MAC. The exception is for PHY designed specially for PTP case but
    these devices are not very widespread. For not breaking the compatibility
    default_timestamp flag has been introduced in phy_device that is set by
    the phy driver to know we are using the old API behavior.

    Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20240709-feature_ptp_netnext-v17-4-b5317f50df2a@bootlin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
2024-10-01 12:19:15 +02:00
Rado Vrbovsky a567d2a1e3 Merge: CVE-2024-35891: net: phy: micrel: Fix potential null pointer dereference
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/4984

JIRA: https://issues.redhat.com/browse/RHEL-37224  
CVE: CVE-2024-35891

```
net: phy: micrel: Fix potential null pointer dereference

In lan8814_get_sig_rx() and lan8814_get_sig_tx() ptp_parse_header() may
return NULL as ptp_header due to abnormal packet type or corrupted packet.
Fix this bug by adding ptp_header check.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240329061631.33199-1-amishin@t-argos.ru
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
(cherry picked from commit 96c155943a703f0655c0c4cab540f67055960e91)
```

Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>

Approved-by: José Ignacio Tornos Martínez <jtornosm@redhat.com>
Approved-by: Izabela Bakollari <ibakolla@redhat.com>
Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com>

Merged-by: Rado Vrbovsky <rvrbovsk@redhat.com>
2024-09-26 17:54:44 +00:00
CKI Backport Bot 86d1330d95 net: phy: micrel: Fix potential null pointer dereference
JIRA: https://issues.redhat.com/browse/RHEL-37224
CVE: CVE-2024-35891

commit 96c155943a703f0655c0c4cab540f67055960e91
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Fri Mar 29 09:16:31 2024 +0300

    net: phy: micrel: Fix potential null pointer dereference

    In lan8814_get_sig_rx() and lan8814_get_sig_tx() ptp_parse_header() may
    return NULL as ptp_header due to abnormal packet type or corrupted packet.
    Fix this bug by adding ptp_header check.

    Found by Linux Verification Center (linuxtesting.org) with SVACE.

    Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240329061631.33199-1-amishin@t-argos.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: CKI Backport Bot <cki-ci-bot+cki-gitlab-backport-bot@redhat.com>
2024-08-09 21:26:09 +00:00
Izabela Bakollari caa1fd1562 net: phy: micrel: use devm_clk_get_optional_enabled for the rmii-ref clock
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit 9853294627237b73a6b765162d9c0485b0697db5
Author: Heiko Stuebner <heiko.stuebner@cherry.de>
Date:   Fri Dec 1 16:01:30 2023 +0100

    net: phy: micrel: use devm_clk_get_optional_enabled for the rmii-ref clock

    While the external clock input will most likely be enabled, it's not
    guaranteed and clk_get_rate in some suppliers will even just return
    valid results when the clock is running.

    So use devm_clk_get_optional_enabled to retrieve and enable the clock
    in one go.

    Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20231201150131.326766-2-heiko@sntech.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:22 +02:00
Izabela Bakollari 0799cf9cad net: micrel: Fix the frequency adjustments
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit 7d7bf30f031b8e2474eefe64230609b45030bd3d
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Thu Feb 1 21:42:03 2024 +0100

    net: micrel: Fix the frequency adjustments

    By default lan8841's 1588 clock frequency is 125MHz. But when adjusting
    the frequency, it is using the 1PPM format of the lan8814. Which is the
    wrong format as lan8814 has a 1588 clock frequency of 250MHz. So then
    for each 1PPM adjustment would adjust less than expected.
    Therefore fix this by using the correct 1PPM format for lan8841.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:18 +02:00
Izabela Bakollari 66f88cf3e9 net: micrel: Fix set/get PHC time for lan8814
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit 8e41d6644f9aff1f898997418e4f2fee6bb959e5
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri Jan 26 08:30:42 2024 +0100

    net: micrel: Fix set/get PHC time for lan8814

    When setting or getting PHC time, the higher bits of the second time (>32
    bits) they were ignored. Meaning that setting some time in the future like
    year 2150, it was failing to set this.

    The issue can be reproduced like this:

     # phc_ctl /dev/ptp1 set 10000000000
     phc_ctl[12.290]: set clock time to 10000000000.000000000 or Sat Nov 20 17:46:40 2286

     # phc_ctl /dev/ptp1 get
     phc_ctl[15.309]: clock time is 1410065411.018055420 or Sun Sep  7 04:50:11 2014

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240126073042.1845153-1-horatiu.vultur@microchip.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:16 +02:00
Izabela Bakollari 5b8611fdab net: micrel: Fix PTP frame parsing for lan8814
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit aaf632f7ab6dec57bc9329a438f94504fe8034b9
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri Jan 19 11:47:50 2024 +0100

    net: micrel: Fix PTP frame parsing for lan8814

    The HW has the capability to check each frame if it is a PTP frame,
    which domain it is, which ptp frame type it is, different ip address in
    the frame. And if one of these checks fail then the frame is not
    timestamp. Most of these checks were disabled except checking the field
    minorVersionPTP inside the PTP header. Meaning that once a partner sends
    a frame compliant to 8021AS which has minorVersionPTP set to 1, then the
    frame was not timestamp because the HW expected by default a value of 0
    in minorVersionPTP. This is exactly the same issue as on lan8841.
    Fix this issue by removing this check so the userspace can decide on this.

    Fixes: ece19502834d ("net: phy: micrel: 1588 support for LAN8814 phy")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:16 +02:00
Izabela Bakollari a4e70f0ac0 net: phy: micrel: populate .soft_reset for KSZ9131
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit e398822c4751017fe401f57409488f5948d12fb5
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Date:   Fri Jan 5 10:52:42 2024 +0200

    net: phy: micrel: populate .soft_reset for KSZ9131

    The RZ/G3S SMARC Module has 2 KSZ9131 PHYs. In this setup, the KSZ9131 PHY
    is used with the ravb Ethernet driver. It has been discovered that when
    bringing the Ethernet interface down/up continuously, e.g., with the
    following sh script:

    $ while :; do ifconfig eth0 down; ifconfig eth0 up; done

    the link speed and duplex are wrong after interrupting the bring down/up
    operation even though the Ethernet interface is up. To recover from this
    state the following configuration sequence is necessary (executed
    manually):

    $ ifconfig eth0 down
    $ ifconfig eth0 up

    The behavior has been identified also on the Microchip SAMA7G5-EK board
    which runs the macb driver and uses the same PHY.

    The order of PHY-related operations in ravb_open() is as follows:
    ravb_open() ->
      ravb_phy_start() ->
        ravb_phy_init() ->
          of_phy_connect() ->
            phy_connect_direct() ->
              phy_attach_direct() ->
                phy_init_hw() ->
                  phydev->drv->soft_reset()
                  phydev->drv->config_init()
                  phydev->drv->config_intr()
                phy_resume()
                  kszphy_resume()

    The order of PHY-related operations in ravb_close is as follows:
    ravb_close() ->
      phy_stop() ->
        phy_suspend() ->
          kszphy_suspend() ->
            genphy_suspend()
              // set BMCR_PDOWN bit in MII_BMCR

    In genphy_suspend() setting the BMCR_PDWN bit in MII_BMCR switches the PHY
    to Software Power-Down (SPD) mode (according to the KSZ9131 datasheet).
    Thus, when opening the interface after it has been  previously closed (via
    ravb_close()), the phydev->drv->config_init() and
    phydev->drv->config_intr() reach the KSZ9131 PHY driver via the
    ksz9131_config_init() and kszphy_config_intr() functions.

    KSZ9131 specifies that the MII management interface remains operational
    during SPD (Software Power-Down), but (according to manual):
    - Only access to the standard registers (0 through 31) is supported.
    - Access to MMD address spaces other than MMD address space 1 is possible
      if the spd_clock_gate_override bit is set.
    - Access to MMD address space 1 is not possible.

    The spd_clock_gate_override bit is not used in the KSZ9131 driver.

    ksz9131_config_init() configures RGMII delay, pad skews and LEDs by
    accessesing MMD registers other than those in address space 1.

    The datasheet for the KSZ9131 does not specify what happens if registers
    from an unsupported address space are accessed while the PHY is in SPD.

    To fix the issue the .soft_reset method has been instantiated for KSZ9131,
    too. This resets the PHY to the default state before doing any
    configurations to it, thus switching it out of SPD.

    Fixes: bff5b4b373 ("net: phy: micrel: add Microchip KSZ9131 initial driver")
    Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:15 +02:00
Izabela Bakollari e9cdfcf8b0 net: micrel: Fix PTP frame parsing for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit acd66c2126eb9b5da2d89ae07dbcd73b909c2111
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Wed Jan 10 12:37:30 2024 +0100

    net: micrel: Fix PTP frame parsing for lan8841

    The HW has the capability to check each frame if it is a PTP frame,
    which domain it is, which ptp frame type it is, different ip address in
    the frame. And if one of these checks fail then the frame is not
    timestamp. Most of these checks were disabled except checking the field
    minorVersionPTP inside the PTP header. Meaning that once a partner sends
    a frame compliant to 8021AS which has minorVersionPTP set to 1, then the
    frame was not timestamp because the HW expected by default a value of 0
    in minorVersionPTP.
    Fix this issue by removing this check so the userspace can decide on this.

    Fixes: cafc3662ee3f ("net: micrel: Add PHC support for lan8841")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:15 +02:00
Izabela Bakollari c552afb5c5 net: phy: micrel: allow usage of generic ethernet-phy clock
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit 99ac4cbcc2a50ecc86ffacc7b4b42ba4259a90d4
Author: Heiko Stuebner <heiko.stuebner@cherry.de>
Date:   Fri Dec 1 16:01:31 2023 +0100

    net: phy: micrel: allow usage of generic ethernet-phy clock

    The generic ethernet-phy binding allows describing an external clock since
    commit 350b7a258f20 ("dt-bindings: net: phy: Document support for external PHY clk")
    for cases where the phy is not supplied by an oscillator but instead
    by a clock from the host system.

    And the old named "rmii-ref" clock from 2014 is only specified for phys
    of the KSZ8021, KSZ8031, KSZ8081, KSZ8091 types.

    So allow retrieving and enabling the optional generic clock on phys that
    do not provide a rmii-ref clock.

    Signed-off-by: Heiko Stuebner <heiko.stuebner@cherry.de>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20231201150131.326766-3-heiko@sntech.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 22:56:09 +02:00
Izabela Bakollari b33a99cff3 net: phy: micrel: Fix forced link mode for KSZ886X switches
JIRA: https://issues.redhat.com/browse/RHEL-33716

commit 510f02febb10259919a41926ab6bf9ec5c72ee48
Author: Oleksij Rempel <o.rempel@pengutronix.de>
Date:   Thu Oct 19 13:14:59 2023 +0200

    net: phy: micrel: Fix forced link mode for KSZ886X switches

    Address a link speed detection issue in KSZ886X PHY driver when in
    forced link mode. Previously, link partners like "ASIX AX88772B"
    with KSZ8873 could fall back to 10Mbit instead of configured 100Mbit.

    The issue arises as KSZ886X PHY continues sending Fast Link Pulses (FLPs)
    even with autonegotiation off, misleading link partners in autoneg mode,
    leading to incorrect link speed detection.

    Now, when autonegotiation is disabled, the driver sets the link state
    forcefully using KSZ886X_CTRL_FORCE_LINK bit. This action, beyond just
    disabling autonegotiation, makes the PHY state more reliably detected by
    link partners using parallel detection, thus fixing the link speed
    misconfiguration.

    With autonegotiation enabled, link state is not forced, allowing proper
    autonegotiation process participation.

    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Divya Koppera <divya.koppera@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Izabela Bakollari <ibakolla@redhat.com>
2024-08-09 18:32:39 +02:00
Lucas Zampieri c32234220c Merge: net: micrel: Fix receiving the timestamp in the frame for lan8841
MR: https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9/-/merge_requests/4529

JIRA: https://issues.redhat.com/browse/RHEL-43994

CVE: CVE-2024-38593
    
net: micrel: Fix receiving the timestamp in the frame for lan8841
    
Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>

Approved-by: Ken Cox <jkc@redhat.com>
Approved-by: Kamal Heib <kheib@redhat.com>
Approved-by: CKI KWF Bot <cki-ci-bot+kwf-gitlab-com@redhat.com>

Merged-by: Lucas Zampieri <lzampier@redhat.com>
2024-07-01 12:51:42 +00:00
Jose Ignacio Tornos Martinez e24e0ab4b4 net: micrel: Fix receiving the timestamp in the frame for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-43994
CVE: CVE-2024-38593

commit aea27a92a41dae14843f92c79e9e42d8f570105c
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Mon May 13 21:21:57 2024 +0200

    net: micrel: Fix receiving the timestamp in the frame for lan8841
    
    The blamed commit started to use the ptp workqueue to get the second
    part of the timestamp. And when the port was set down, then this
    workqueue is stopped. But if the config option NETWORK_PHY_TIMESTAMPING
    is not enabled, then the ptp_clock is not initialized so then it would
    crash when it would try to access the delayed work.
    So then basically by setting up and then down the port, it would crash.
    The fix consists in checking if the ptp_clock is initialized and only
    then cancel the delayed work.
    
    Fixes: cc7554954848 ("net: micrel: Change to receive timestamp in the frame for lan8841")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
2024-06-21 17:33:57 +02:00
Ivan Vecera b128d4b635 net: partial revert of the "Make timestamping selectable: series
JIRA: https://issues.redhat.com/browse/RHEL-36217

Conflicts:
- hunk for lan966x removed as it does not exist in RHEL
- context conflict caused by presence of RH_KABI macros

commit 289354f21b2c3fac93e956efd45f256a88a4d997
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sat Nov 18 18:38:05 2023 -0800

    net: partial revert of the "Make timestamping selectable: series

    Revert following commits:

    commit acec05fb78ab ("net_tstamp: Add TIMESTAMPING SOFTWARE and HARDWARE mask")
    commit 11d55be06df0 ("net: ethtool: Add a command to expose current time stamping layer")
    commit bb8645b00ced ("netlink: specs: Introduce new netlink command to get current timestamp")
    commit d905f9c75329 ("net: ethtool: Add a command to list available time stamping layers")
    commit aed5004ee7a0 ("netlink: specs: Introduce new netlink command to list available time stamping layers")
    commit 51bdf3165f01 ("net: Replace hwtstamp_source by timestamping layer")
    commit 0f7f463d4821 ("net: Change the API of PHY default timestamp to MAC")
    commit 091fab122869 ("net: ethtool: ts: Update GET_TS to reply the current selected timestamp")
    commit 152c75e1d002 ("net: ethtool: ts: Let the active time stamping layer be selectable")
    commit ee60ea6be0d3 ("netlink: specs: Introduce time stamping set command")

    They need more time for reviews.

    Link: https://lore.kernel.org/all/20231118183529.6e67100c@kernel.org/
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-05-16 18:34:23 +02:00
Ivan Vecera 5a1bdf9297 net: Change the API of PHY default timestamp to MAC
JIRA: https://issues.redhat.com/browse/RHEL-36217

Conflicts:
- context conflict caused by presence of RH_KABI macros

commit 0f7f463d4821a4f52fa5c0a961389e651d50c384
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Nov 14 12:28:41 2023 +0100

    net: Change the API of PHY default timestamp to MAC

    Change the API to select MAC default time stamping instead of the PHY.
    Indeed the PHY is closer to the wire therefore theoretically it has less
    delay than the MAC timestamping but the reality is different. Due to lower
    time stamping clock frequency, latency in the MDIO bus and no PHC hardware
    synchronization between different PHY, the PHY PTP is often less precise
    than the MAC. The exception is for PHY designed specially for PTP case but
    these devices are not very widespread. For not breaking the compatibility I
    introduce a default_timestamp flag in phy_device that is set by the phy
    driver to know we are using the old API behavior.

    The phy_set_timestamp function is called at each call of phy_attach_direct.
    In case of MAC driver using phylink this function is called when the
    interface is turned up. Then if the interface goes down and up again the
    last choice of timestamp will be overwritten by the default choice.
    A solution could be to cache the timestamp status but it can bring other
    issues. In case of SFP, if we change the module, it doesn't make sense to
    blindly re-set the timestamp back to PHY, if the new module has a PHY with
    mediocre timestamping capabilities.

    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-05-16 18:34:23 +02:00
Ivan Vecera f6230c2c9f net: phy: micrel: fix ts_info value in case of no phc
JIRA: https://issues.redhat.com/browse/RHEL-36217

commit 915d25a9d69be969c1cc6c1dd0c3861f6da7b55e
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Nov 14 12:28:34 2023 +0100

    net: phy: micrel: fix ts_info value in case of no phc

    In case of no phc we should not return SOFTWARE TIMESTAMPING flags as we do
    not know whether the netdev supports of timestamping.
    Remove it from the lan8841_ts_info and simply return 0.

    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-05-16 18:34:22 +02:00
Ivan Vecera 01b97f6478 net: Convert PHYs hwtstamp callback to use kernel_hwtstamp_config
JIRA: https://issues.redhat.com/browse/RHEL-36217

commit 446e2305827b76e8081057ce56bbd2703b4da8a9
Author: Kory Maincent <kory.maincent@bootlin.com>
Date:   Tue Nov 14 12:28:29 2023 +0100

    net: Convert PHYs hwtstamp callback to use kernel_hwtstamp_config

    The PHYs hwtstamp callback are still getting the timestamp config from
    ifreq and using copy_from/to_user.
    Get rid of these functions by using timestamp configuration in parameter.
    This also allow to move on to kernel_hwtstamp_config and be similar to
    net devices using the new ndo_hwstamp_get/set.

    This adds the possibility to manipulate the timestamp configuration
    from the kernel which was not possible with the copy_from/to_user.

    Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Ivan Vecera <ivecera@redhat.com>
2024-05-16 18:34:22 +02:00
Adrien Thierry 8d9c3700b2 net: micrel: Change to receive timestamp in the frame for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit cc75549548482ed653c23f212544e58cb38ea980
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Thu Jun 15 11:47:40 2023 +0200

    net: micrel: Change to receive timestamp in the frame for lan8841

    Currently for each timestamp frame, the SW needs to go and read the
    received timestamp over the MDIO bus. But the HW has the capability
    to store the received nanoseconds part and the least significant two
    bits of the seconds in the reserved field of the PTP header. In this
    way we could save few MDIO transactions (actually a little more
    transactions because the access to the PTP registers are indirect)
    for each received frame.

    Instead of reading the rest of seconds part of the timestamp of the
    frame using MDIO transactions schedule PTP worker thread to read the
    seconds part every 500ms and then for each of the received frames use
    this information. Because if for example running with 512 frames per
    second, there is no point to read 512 times the second part.

    Doing all these changes will give a great CPU usage performance.
    Running ptp4l with logSyncInterval of -9 will give a ~60% CPU
    improvement.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Acked-by: Richard Cochran <richardcochran@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:22 -04:00
Adrien Thierry dd6025774b net: phy: micrel: Move KSZ9477 errata fixes to PHY driver
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 26dd2974c5b5caef358784530c9e72715adc8f5b
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Mon Jun 5 09:39:42 2023 -0600

    net: phy: micrel: Move KSZ9477 errata fixes to PHY driver

    The ksz9477 DSA switch driver is currently updating some MMD registers
    on the internal port PHYs to address some chip errata. However, these
    errata are really a property of the PHY itself, not the switch they are
    part of, so this is kind of a layering violation. It makes more sense for
    these writes to be done inside the driver which binds to the PHY and not
    the driver for the containing device.

    This also addresses some issues where the ordering of when these writes
    are done may have been incorrect, causing the link to erratically fail to
    come up at the proper speed or at all. Doing this in the PHY driver
    during config_init ensures that they happen before anything else tries to
    change the state of the PHY on the port.

    The new code also ensures that autonegotiation is disabled during the
    register writes and re-enabled afterwards, as indicated by the latest
    version of the errata documentation from Microchip.

    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:21 -04:00
Adrien Thierry 44f461ca37 net: phy: add helpers for comparing phy IDs
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 4b159f5048b90844679dad08afb3240c1957aba1
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Fri May 19 14:03:59 2023 +0100

    net: phy: add helpers for comparing phy IDs

    There are several places which open code comparing PHY IDs. Provide a
    couple of helpers to assist with this, using a slightly simpler test
    than the original:

    - phy_id_compare() compares two arbitary PHY IDs and a mask of the
      significant bits in the ID.
    - phydev_id_compare() compares the bound phydev with the specified
      PHY ID, using the bound driver's mask.

    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:18 -04:00
Adrien Thierry 24215a501e net: micrel: Update the list of supported phys
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 3e9c0700bf42b6170ae6b6e616cdc2e75a21b506
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Tue Apr 18 14:47:13 2023 +0200

    net: micrel: Update the list of supported phys

    At the beginning of the file micrel.c there is list of supported PHYs.
    Extend this list with the following PHYs lan8841, lan8814 and lan8804,
    as these PHYs were added but the list was not updated.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230418124713.2221451-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:16 -04:00
Adrien Thierry 3752313538 net: phy: micrel: Fix PTP_PF_PEROUT for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit c6d6ef3ee3b6118dae6b32816e43c790f81079b2
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri Apr 14 10:26:59 2023 +0200

    net: phy: micrel: Fix PTP_PF_PEROUT for lan8841

    If the 1PPS output was enabled and then lan8841 was configured to be a
    follower, then target clock which is used to generate the 1PPS was not
    configure correctly. The problem was that for each adjustments of the
    time, also the nanosecond part of the target clock was changed.
    Therefore the initial nanosecond part of the target clock was changed.
    The issue can be observed if both the leader and the follower are
    generating 1PPS and see that their PPS are not aligned even if the time
    is allined.
    The fix consists of not modifying the nanosecond part of the target
    clock when adjusting the time. In this way the 1PPS get also aligned.

    Fixes: e4ed8ba08e3f ("net: phy: micrel: Add support for PTP_PF_PEROUT for lan8841")
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:15 -04:00
Adrien Thierry fdd10f4823 net: phy: micrel: correct KSZ9131RNX EEE capabilities and advertisement
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit f2e9d083f768ec147da3e3e5209030d3c090c689
Author: Oleksij Rempel <linux@rempel-privat.de>
Date:   Fri Mar 24 14:39:08 2023 +0100

    net: phy: micrel: correct KSZ9131RNX EEE capabilities and advertisement

    The KSZ9131RNX incorrectly shows EEE capabilities in its registers.
    Although the "EEE control and capability 1" (Register 3.20) is set to 0,
    indicating no EEE support, the "EEE advertisement 1" (Register 7.60) is
    set to 0x6, advertising EEE support for 1000BaseT/Full and
    100BaseT/Full.
    This inconsistency causes PHYlib to assume there is no EEE support,
    preventing control over EEE advertisement, which is enabled by default.

    This patch resolves the issue by utilizing the ksz9477_get_features()
    function to correctly set the EEE capabilities for the KSZ9131RNX. This
    adjustment allows proper control over EEE advertisement and ensures
    accurate representation of the device's capabilities.

    Fixes: 8b68710a3121 ("net: phy: start using genphy_c45_ethtool_get/set_eee()")
    Reported-by: Marek Vasut <marex@denx.de>
    Tested-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:13 -04:00
Adrien Thierry e41064fc48 net: phy: micrel: Add support for PTP_PF_EXTTS for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit fac63186f11682fc5ffd0472d1a990256bd61348
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Thu Mar 23 11:55:57 2023 +0100

    net: phy: micrel: Add support for PTP_PF_EXTTS for lan8841

    Extend the PTP programmable gpios to implement also PTP_PF_EXTTS
    function. The pins can be configured to capture both of rising
    and falling edge. Once the event is seen, then an interrupt is
    generated and the LTC is saved in the registers.

    This was tested using:
    ts2phc -m -l 7 -s generic -f ts2phc.cfg

    Where the configuration was the following:
    [global]
    ts2phc.pin_index  6

    [eth2]

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:12 -04:00
Adrien Thierry 106e7e1c0f net: phy: micrel: Fix spelling mistake "minimim" -> "minimum"
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 9bdf4489a3950335af088604876fdc3209a9dd8e
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Tue Mar 14 08:23:15 2023 +0000

    net: phy: micrel: Fix spelling mistake "minimim" -> "minimum"

    There is a spelling mistake in a pr_warn_ratelimited message. Fix it.

    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Link: https://lore.kernel.org/r/20230314082315.26532-1-colin.i.king@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:11 -04:00
Adrien Thierry e792c092d0 net: phy: micrel: drop superfluous use of temp variable
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit a57cc54d69d601282c4451010b12f53630834203
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Tue Mar 14 13:49:27 2023 +0100

    net: phy: micrel: drop superfluous use of temp variable

    'temp' was used before commit c0c99d0cd1 ("net: phy: micrel: remove
    the use of .ack_interrupt()") refactored the code. Now, we can simplify
    it a little.

    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20230314124928.44948-1-wsa+renesas@sang-engineering.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:11 -04:00
Adrien Thierry b61bf89370 net: phy: micrel: Add support for PTP_PF_PEROUT for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit e4ed8ba08e3f1ef24771eb95f87da129ad752063
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Tue Mar 7 22:44:02 2023 +0100

    net: phy: micrel: Add support for PTP_PF_PEROUT for lan8841

    Lan8841 has 10 GPIOs and it has 2 events(EVENT_A and EVENT_B). It is
    possible to assigned the 2 events to any of the GPIOs, but a GPIO can
    have only 1 event at a time.
    These events are used to generate periodic signals. It is possible to
    configure the length, the start time and the period of the signal by
    configuring the event.
    Currently the SW uses only EVENT_A to generate the perout.

    These events are generated by comparing the target time with the PHC
    time. In case the PHC time is changed to a value bigger than the target
    time + reload time, then it would generate only 1 event and then it
    would stop because target time + reload time is small than PHC time.
    Therefore it is required to change also the target time every time when
    the PHC is changed. The same will apply also when the PHC time is
    changed to a smaller value.

    This was tested using:
    testptp -L 6,2
    testptp -p 1000000000 -w 200000000

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Link: https://lore.kernel.org/r/20230307214402.793057-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:10 -04:00
Adrien Thierry f3591fed3f net: phy: micrel: add ksz9477_get_features()
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 48fb19940f2ba6b50dfea70f671be9340fb63d60
Author: Oleksij Rempel <linux@rempel-privat.de>
Date:   Sat Feb 11 08:41:07 2023 +0100

    net: phy: micrel: add ksz9477_get_features()

    KSZ8563R, which has same PHYID as KSZ9477 family, will change "EEE control
    and capability 1" (Register 3.20) content depending on configuration of
    "EEE advertisement 1" (Register 7.60). Changes on the 7.60 will affect
    3.20 register.

    So, instead of depending on register 3.20, driver should set supported_eee.

    Proper supported_eee configuration is needed to make use of generic
    PHY c45 set/get_eee functions provided by next patches.

    Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:08 -04:00
Adrien Thierry 71c5b16c39 net: micrel: Add PHC support for lan8841
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit cafc3662ee3fe29a0027e0a947e6c6493cccaf60
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Fri Feb 10 11:27:01 2023 +0100

    net: micrel: Add PHC support for lan8841

    Add support for PHC and timestamping operations for the lan8841 PHY.
    PTP 1-step and 2-step modes are supported, over Ethernet and UDP both
    ipv4 and ipv6.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:08 -04:00
Adrien Thierry 4892290623 net: micrel: Cable Diagnostics feature for lan8841 PHY
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit a136391ae4216a5713f9527c8a05e9364f059a31
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Wed Feb 8 12:44:06 2023 +0100

    net: micrel: Cable Diagnostics feature for lan8841 PHY

    Add support for cable diagnostics in lan8841 PHY. It has the same
    registers layout as lan8814 PHY, therefore reuse the functionality.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20230208114406.1666671-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:07 -04:00
Adrien Thierry 51660de093 net: micrel: Add support for lan8841 PHY
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit a8f1a19d27ef9b13574195ae1571158529473541
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Tue Feb 7 11:52:11 2023 +0100

    net: micrel: Add support for lan8841 PHY

    The LAN8841 is completely integrated triple-speed (10BASE-T/ 100BASE-TX/
    1000BASE-T) Ethernet physical layer transceivers for transmission and
    reception of data on standard CAT-5, as well as CAT-5e and CAT-6,
    unshielded twisted pair (UTP) cables.
    The LAN8841 offers the industry-standard GMII/MII as well as the RGMII.
    Some of the features of the PHY are:
    - Wake on LAN
    - Auto-MDIX
    - IEEE 1588-2008 (V2)
    - LinkMD Capable diagnosis

    Currently the patch offers support only for link configuration.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:07 -04:00
Adrien Thierry 77e70da506 net: phy: micrel: Fix warn: passing zero to PTR_ERR
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 3f88d7d1be42a84a4ae292f085c3886597a04137
Author: Divya Koppera <Divya.Koppera@microchip.com>
Date:   Fri Jan 6 13:59:05 2023 +0530

    net: phy: micrel: Fix warn: passing zero to PTR_ERR

    Handle the NULL pointer case

    Fixes New smatch warnings:
    drivers/net/phy/micrel.c:2613 lan8814_ptp_probe_once() warn: passing zero to 'PTR_ERR'

    vim +/PTR_ERR +2613 drivers/net/phy/micrel.c
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
    Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:04 -04:00
Adrien Thierry 47654175bf net: phy: micrel: Fixed error related to uninitialized symbol ret
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit d50ede4f53e19b63f785768ce62f9a5019c3a021
Author: Divya Koppera <Divya.Koppera@microchip.com>
Date:   Fri Jan 6 13:59:04 2023 +0530

    net: phy: micrel: Fixed error related to uninitialized symbol ret

    Initialized return variable

    Fixes Old smatch warnings:
    drivers/net/phy/micrel.c:1750 ksz886x_cable_test_get_status() error:
    uninitialized symbol 'ret'.

    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:04 -04:00
Adrien Thierry 92e3263d7a net: phy: micrel: Change handler interrupt for lan8814
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit 7abd92a5b98f33a972bd3cadf9948ce59d1c01b8
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Wed Jan 4 20:42:18 2023 +0100

    net: phy: micrel: Change handler interrupt for lan8814

    The lan8814 represents a package of 4 PHYs. All of them are sharing the
    same interrupt line. So when a link was going down/up or a frame was
    timestamped, then the interrupt handler of all the PHYs was called.
    Which is all fine and expected but the problem is the way the handler
    interrupt works.
    Basically if one of the PHYs timestamp a frame, then all the other 3
    PHYs were polling the status of the interrupt until that PHY actually
    cleared the interrupt by reading the timestamp.
    The reason of polling was in case another PHY was also timestamping a
    frame at the same time, it could miss this interrupt. But this is not
    the right approach, because it is the interrupt controller who needs to
    call the interrupt handlers again if the interrupt line is still
    active.
    Therefore change this such when the interrupt handler is called check
    only if the interrupt is for itself, otherwise just exit. In this way
    save CPU usage.

    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Link: https://lore.kernel.org/r/20230104194218.3785229-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:04 -04:00
Adrien Thierry 2413e412d2 net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit b64e6a8794d9d56f9713b6ceb9e3fdfc9c5f99af
Author: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
Date:   Mon Oct 24 13:55:16 2022 +0530

    net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131

    Add support for MDI-X status and configuration for KSZ9131 chips

    Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
    Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:18:00 -04:00
Adrien Thierry ab0abe2fcf net: phy: micrel: Fixes FIELD_GET assertion
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit fa182ea26ff09cbadb28bbcd6196209b3555eb1d
Author: Divya Koppera <Divya.Koppera@microchip.com>
Date:   Tue Oct 11 15:24:37 2022 +0530

    net: phy: micrel: Fixes FIELD_GET assertion

    FIELD_GET() must only be used with a mask that is a compile-time
    constant. Mark the functions as __always_inline to avoid the problem.

    Fixes: 21b688dabecb6a ("net: phy: micrel: Cable Diag feature for lan8814 phy")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Divya Koppera <Divya.Koppera@microchip.com>
    Link: https://lore.kernel.org/r/20221011095437.12580-1-Divya.Koppera@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:17:59 -04:00
Adrien Thierry 7f55fd3055 net: phy: micrel: enable interrupt for ksz9477 phy
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit db45c76bada3e4fa6f56fa8acda813c19e85e946
Author: Arun Ramadoss <arun.ramadoss@microchip.com>
Date:   Thu Sep 22 12:40:28 2022 +0530

    net: phy: micrel: enable interrupt for ksz9477 phy

    Config_intr and handle_interrupt are enabled for ksz9477 phy. It is
    similar to all other phys in the micrel phys.

    Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:17:58 -04:00
Adrien Thierry c4da835ea2 net: phy: micrel: Fix double spaces inside lan8814_config_intr
JIRA: https://issues.redhat.com/browse/RHEL-2799

commit f8b2cce430d92ec927915ba4bc8088fe99659dbc
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Wed Sep 21 08:54:44 2022 +0200

    net: phy: micrel: Fix double spaces inside lan8814_config_intr

    Inside the function lan8814_config_intr, there are double spaces when
    assigning the return value of phy_write to err.

    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20220921065444.637067-1-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Signed-off-by: Adrien Thierry <athierry@redhat.com>
2023-09-19 14:17:34 -04:00