Blob Blame History Raw
From: Claudiu Manoil <claudiu.manoil@nxp.com>
Date: Wed, 22 Jul 2020 15:38:48 +0300
Subject: enetc: Remove the imdio bus on PF probe bailout

Git-commit: c6dd6488acd105f4fde9b4d289aaef5669b12c76
Patch-mainline: v5.9-rc1
References: jsc#SLE-12251

enetc_imdio_remove() is missing from the enetc_pf_probe()
bailout path. Not surprisingly because enetc_setup_serdes()
is registering the imdio bus for internal purposes, and it's
not obvious that enetc_imdio_remove() currently performs the
teardown of enetc_setup_serdes().
To fix this, define enetc_teardown_serdes() to wrap
enetc_imdio_remove() (improve code maintenance) and call it
on bailout and remove paths.

Fixes: 975d183ef0ca ("net: enetc: Initialize SerDes for SGMII and USXGMII protocols")
Signed-off-by: Claudiu Manoil <claudiu.manoil@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@suse.com>
---
 drivers/net/ethernet/freescale/enetc/enetc_pf.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
@@ -966,6 +966,13 @@ static int enetc_configure_serdes(struct
 	return 0;
 }
 
+static void enetc_teardown_serdes(struct enetc_ndev_priv *priv)
+{
+	struct enetc_pf *pf = enetc_si_priv(priv->si);
+
+	enetc_imdio_remove(pf);
+}
+
 static int enetc_pf_probe(struct pci_dev *pdev,
 			  const struct pci_device_id *ent)
 {
@@ -1045,6 +1052,7 @@ static int enetc_pf_probe(struct pci_dev
 	return 0;
 
 err_reg_netdev:
+	enetc_teardown_serdes(priv);
 	enetc_mdio_remove(pf);
 	enetc_free_msix(priv);
 err_alloc_msix:
@@ -1072,7 +1080,7 @@ static void enetc_pf_remove(struct pci_d
 	priv = netdev_priv(si->ndev);
 	unregister_netdev(si->ndev);
 
-	enetc_imdio_remove(pf);
+	enetc_teardown_serdes(priv);
 	enetc_mdio_remove(pf);
 	enetc_of_put_phy(pf);