net: fman: Get PCS node in per-mac init
authorSean Anderson <sean.anderson@seco.com>
Thu, 18 Aug 2022 16:16:30 +0000 (12:16 -0400)
committerJakub Kicinski <kuba@kernel.org>
Fri, 19 Aug 2022 23:35:54 +0000 (16:35 -0700)
This moves the reading of the PCS property out of the generic probe and
into the mac-specific initialization function. This reduces the
mac-specific jobs done in the top-level probe function.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Acked-by: Camelia Groza <camelia.groza@nxp.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/fman/mac.c
drivers/net/ethernet/freescale/fman/mac.h

index 6a4eaca837006d03a86ff6f9feeaae8bb2f91762..0af6f6c49284cfa264cc1384bb41ac01299c2b6e 100644 (file)
@@ -32,7 +32,6 @@ struct mac_priv_s {
        void __iomem                    *vaddr;
        u8                              cell_index;
        struct fman                     *fman;
-       struct device_node              *internal_phy_node;
        /* List of multicast addresses */
        struct list_head                mc_addr_list;
        struct platform_device          *eth_dev;
@@ -85,12 +84,12 @@ static int set_fman_mac_params(struct mac_device *mac_dev,
        params->exception_cb    = mac_exception;
        params->event_cb        = mac_exception;
        params->dev_id          = mac_dev;
-       params->internal_phy_node = priv->internal_phy_node;
 
        return 0;
 }
 
-static int tgec_initialization(struct mac_device *mac_dev)
+static int tgec_initialization(struct mac_device *mac_dev,
+                              struct device_node *mac_node)
 {
        int err;
        struct mac_priv_s       *priv;
@@ -138,7 +137,8 @@ _return:
        return err;
 }
 
-static int dtsec_initialization(struct mac_device *mac_dev)
+static int dtsec_initialization(struct mac_device *mac_dev,
+                               struct device_node *mac_node)
 {
        int                     err;
        struct mac_priv_s       *priv;
@@ -150,6 +150,7 @@ static int dtsec_initialization(struct mac_device *mac_dev)
        err = set_fman_mac_params(mac_dev, &params);
        if (err)
                goto _return;
+       params.internal_phy_node = of_parse_phandle(mac_node, "tbi-handle", 0);
 
        mac_dev->fman_mac = dtsec_config(&params);
        if (!mac_dev->fman_mac) {
@@ -190,7 +191,8 @@ _return:
        return err;
 }
 
-static int memac_initialization(struct mac_device *mac_dev)
+static int memac_initialization(struct mac_device *mac_dev,
+                               struct device_node *mac_node)
 {
        int                      err;
        struct mac_priv_s       *priv;
@@ -201,6 +203,7 @@ static int memac_initialization(struct mac_device *mac_dev)
        err = set_fman_mac_params(mac_dev, &params);
        if (err)
                goto _return;
+       params.internal_phy_node = of_parse_phandle(mac_node, "pcsphy-handle", 0);
 
        if (priv->max_speed == SPEED_10000)
                params.phy_if = PHY_INTERFACE_MODE_XGMII;
@@ -583,14 +586,10 @@ static int mac_probe(struct platform_device *_of_dev)
 
        if (of_device_is_compatible(mac_node, "fsl,fman-dtsec")) {
                setup_dtsec(mac_dev);
-               priv->internal_phy_node = of_parse_phandle(mac_node,
-                                                         "tbi-handle", 0);
        } else if (of_device_is_compatible(mac_node, "fsl,fman-xgec")) {
                setup_tgec(mac_dev);
        } else if (of_device_is_compatible(mac_node, "fsl,fman-memac")) {
                setup_memac(mac_dev);
-               priv->internal_phy_node = of_parse_phandle(mac_node,
-                                                         "pcsphy-handle", 0);
        } else {
                dev_err(dev, "MAC node (%pOF) contains unsupported MAC\n",
                        mac_node);
@@ -783,7 +782,7 @@ static int mac_probe(struct platform_device *_of_dev)
                put_device(&phy->mdio.dev);
        }
 
-       err = mac_dev->init(mac_dev);
+       err = mac_dev->init(mac_dev, mac_node);
        if (err < 0) {
                dev_err(dev, "mac_dev->init() = %d\n", err);
                of_node_put(mac_dev->phy_node);
index 95f67b4efb61553022d9d992b86588eb3a30c84f..e4329c7d5001e5ea778208a4cf5b0f8e8efb5c7f 100644 (file)
@@ -35,7 +35,7 @@ struct mac_device {
        bool promisc;
        bool allmulti;
 
-       int (*init)(struct mac_device *mac_dev);
+       int (*init)(struct mac_device *mac_dev, struct device_node *mac_node);
        int (*enable)(struct fman_mac *mac_dev);
        int (*disable)(struct fman_mac *mac_dev);
        void (*adjust_link)(struct mac_device *mac_dev);