Patch "net: dpaa: fman_memac: accept phy-interface-type = "10gbase-r" in the device tree" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: dpaa: fman_memac: accept phy-interface-type = "10gbase-r" in the device tree

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-dpaa-fman_memac-accept-phy-interface-type-10gbas.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 995a89a9b6509e2bb83ccea6e303c03130516f20
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Wed Feb 21 00:34:42 2024 +0200

    net: dpaa: fman_memac: accept phy-interface-type = "10gbase-r" in the device tree
    
    [ Upstream commit 734f06db599f66d6a159c78abfdbadfea3b7d43b ]
    
    Since commit 5d93cfcf7360 ("net: dpaa: Convert to phylink"), we support
    the "10gbase-r" phy-mode through a driver-based conversion of "xgmii",
    but we still don't actually support it when the device tree specifies
    "10gbase-r" proper.
    
    This is because boards such as LS1046A-RDB do not define pcs-handle-names
    (for whatever reason) in the ethernet@f0000 device tree node, and the
    code enters through this code path:
    
            err = of_property_match_string(mac_node, "pcs-handle-names", "xfi");
            // code takes neither branch and falls through
            if (err >= 0) {
                    (...)
            } else if (err != -EINVAL && err != -ENODATA) {
                    goto _return_fm_mac_free;
            }
    
            (...)
    
            /* For compatibility, if pcs-handle-names is missing, we assume this
             * phy is the first one in pcsphy-handle
             */
            err = of_property_match_string(mac_node, "pcs-handle-names", "sgmii");
            if (err == -EINVAL || err == -ENODATA)
                    pcs = memac_pcs_create(mac_node, 0); // code takes this branch
            else if (err < 0)
                    goto _return_fm_mac_free;
            else
                    pcs = memac_pcs_create(mac_node, err);
    
            // A default PCS is created and saved in "pcs"
    
            // This determination fails and mistakenly saves the default PCS
            // memac->sgmii_pcs instead of memac->xfi_pcs, because at this
            // stage, mac_dev->phy_if == PHY_INTERFACE_MODE_10GBASER.
            if (err && mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII)
                    memac->xfi_pcs = pcs;
            else
                    memac->sgmii_pcs = pcs;
    
    In other words, in the absence of pcs-handle-names, the default
    xfi_pcs assignment logic only works when in the device tree we have
    PHY_INTERFACE_MODE_XGMII.
    
    By reversing the order between the fallback xfi_pcs assignment and the
    "xgmii" overwrite with "10gbase-r", we are able to support both values
    in the device tree, with identical behavior.
    
    Currently, it is impossible to make the s/xgmii/10gbase-r/ device tree
    conversion, because it would break forward compatibility (new device
    tree with old kernel). The only way to modify existing device trees to
    phy-interface-mode = "10gbase-r" is to fix stable kernels to accept this
    value and handle it properly.
    
    One reason why the conversion is desirable is because with pre-phylink
    kernels, the Aquantia PHY driver used to warn about the improper use
    of PHY_INTERFACE_MODE_XGMII [1]. It is best to have a single (latest)
    device tree that works with all supported stable kernel versions.
    
    Note that the blamed commit does not constitute a regression per se.
    Older stable kernels like 6.1 still do not work with "10gbase-r", but
    for a different reason. That is a battle for another time.
    
    [1] https://lore.kernel.org/netdev/20240214-ls1046-dts-use-10gbase-r-v1-1-8c2d68547393@xxxxxxxxxxxxxxxxx/
    
    Fixes: 5d93cfcf7360 ("net: dpaa: Convert to phylink")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Sean Anderson <sean.anderson@xxxxxxxx>
    Acked-by: Madalin Bucur <madalin.bucur@xxxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index 9ba15d3183d75..758535adc9ff5 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -1073,6 +1073,14 @@ int memac_initialization(struct mac_device *mac_dev,
 	unsigned long		 capabilities;
 	unsigned long		*supported;
 
+	/* The internal connection to the serdes is XGMII, but this isn't
+	 * really correct for the phy mode (which is the external connection).
+	 * However, this is how all older device trees say that they want
+	 * 10GBASE-R (aka XFI), so just convert it for them.
+	 */
+	if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII)
+		mac_dev->phy_if = PHY_INTERFACE_MODE_10GBASER;
+
 	mac_dev->phylink_ops		= &memac_mac_ops;
 	mac_dev->set_promisc		= memac_set_promiscuous;
 	mac_dev->change_addr		= memac_modify_mac_address;
@@ -1139,7 +1147,7 @@ int memac_initialization(struct mac_device *mac_dev,
 	 * (and therefore that xfi_pcs cannot be set). If we are defaulting to
 	 * XGMII, assume this is for XFI. Otherwise, assume it is for SGMII.
 	 */
-	if (err && mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII)
+	if (err && mac_dev->phy_if == PHY_INTERFACE_MODE_10GBASER)
 		memac->xfi_pcs = pcs;
 	else
 		memac->sgmii_pcs = pcs;
@@ -1153,14 +1161,6 @@ int memac_initialization(struct mac_device *mac_dev,
 		goto _return_fm_mac_free;
 	}
 
-	/* The internal connection to the serdes is XGMII, but this isn't
-	 * really correct for the phy mode (which is the external connection).
-	 * However, this is how all older device trees say that they want
-	 * 10GBASE-R (aka XFI), so just convert it for them.
-	 */
-	if (mac_dev->phy_if == PHY_INTERFACE_MODE_XGMII)
-		mac_dev->phy_if = PHY_INTERFACE_MODE_10GBASER;
-
 	/* TODO: The following interface modes are supported by (some) hardware
 	 * but not by this driver:
 	 * - 1000BASE-KX




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux