Commit 155c499f authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: wangxun: txgbe: use phylink_pcs internally



Use xpcs_create_pcs_mdiodev() to create the XPCS instance, storing
and using the phylink_pcs pointer internally, rather than dw_xpcs.
Use xpcs_destroy_pcs() to destroy the XPCS instance when we've
finished with it.

Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Link: https://patch.msgid.link/E1svfMV-005ZIR-FE@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent bedea153
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -122,7 +122,7 @@ static int txgbe_pcs_write(struct mii_bus *bus, int addr, int devnum, int regnum
static int txgbe_mdio_pcs_init(struct txgbe *txgbe)
{
	struct mii_bus *mii_bus;
	struct dw_xpcs *xpcs;
	struct phylink_pcs *pcs;
	struct pci_dev *pdev;
	struct wx *wx;
	int ret = 0;
@@ -147,11 +147,11 @@ static int txgbe_mdio_pcs_init(struct txgbe *txgbe)
	if (ret)
		return ret;

	xpcs = xpcs_create_mdiodev(mii_bus, 0, PHY_INTERFACE_MODE_10GBASER);
	if (IS_ERR(xpcs))
		return PTR_ERR(xpcs);
	pcs = xpcs_create_pcs_mdiodev(mii_bus, 0);
	if (IS_ERR(pcs))
		return PTR_ERR(pcs);

	txgbe->xpcs = xpcs;
	txgbe->pcs = pcs;

	return 0;
}
@@ -163,7 +163,7 @@ static struct phylink_pcs *txgbe_phylink_mac_select(struct phylink_config *confi
	struct txgbe *txgbe = wx->priv;

	if (interface == PHY_INTERFACE_MODE_10GBASER)
		return &txgbe->xpcs->pcs;
		return txgbe->pcs;

	return NULL;
}
@@ -302,7 +302,7 @@ irqreturn_t txgbe_link_irq_handler(int irq, void *data)
	status = rd32(wx, TXGBE_CFG_PORT_ST);
	up = !!(status & TXGBE_CFG_PORT_ST_LINK_UP);

	phylink_pcs_change(&txgbe->xpcs->pcs, up);
	phylink_pcs_change(txgbe->pcs, up);

	return IRQ_HANDLED;
}
@@ -778,7 +778,7 @@ int txgbe_init_phy(struct txgbe *txgbe)
err_destroy_phylink:
	phylink_destroy(wx->phylink);
err_destroy_xpcs:
	xpcs_destroy(txgbe->xpcs);
	xpcs_destroy_pcs(txgbe->pcs);
err_unregister_swnode:
	software_node_unregister_node_group(txgbe->nodes.group);

@@ -798,6 +798,6 @@ void txgbe_remove_phy(struct txgbe *txgbe)
	clkdev_drop(txgbe->clock);
	clk_unregister(txgbe->clk);
	phylink_destroy(txgbe->wx->phylink);
	xpcs_destroy(txgbe->xpcs);
	xpcs_destroy_pcs(txgbe->pcs);
	software_node_unregister_node_group(txgbe->nodes.group);
}
+1 −1
Original line number Diff line number Diff line
@@ -329,7 +329,7 @@ struct txgbe {
	struct wx *wx;
	struct txgbe_nodes nodes;
	struct txgbe_irq misc;
	struct dw_xpcs *xpcs;
	struct phylink_pcs *pcs;
	struct platform_device *sfp_dev;
	struct platform_device *i2c_dev;
	struct clk_lookup *clock;