Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea8ab16a authored by Iyappan Subramanian's avatar Iyappan Subramanian Committed by David S. Miller
Browse files

drivers: net: xgene-v2: Add MDIO support



Added phy management support by using phy abstraction layer APIs.

Signed-off-by: default avatarIyappan Subramanian <isubramanian@apm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9bdf64d5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -2,5 +2,5 @@
# Makefile for APM X-Gene Ethernet v2 driver
#

xgene-enet-v2-objs := main.o mac.o enet.o ring.o
xgene-enet-v2-objs := main.o mac.o enet.o ring.o mdio.o
obj-$(CONFIG_NET_XGENE_V2) += xgene-enet-v2.o
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ void xge_mac_reset(struct xge_pdata *pdata)
	xge_wr_csr(pdata, MAC_CONFIG_1, 0);
}

static void xge_mac_set_speed(struct xge_pdata *pdata)
void xge_mac_set_speed(struct xge_pdata *pdata)
{
	u32 icm0, icm2, ecm0, mc2;
	u32 intf_ctrl, rgmii;
+1 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ static inline u32 xgene_get_reg_bits(u32 var, int pos, int len)
struct xge_pdata;

void xge_mac_reset(struct xge_pdata *pdata);
void xge_mac_set_speed(struct xge_pdata *pdata);
void xge_mac_enable(struct xge_pdata *pdata);
void xge_mac_disable(struct xge_pdata *pdata);
void xge_mac_init(struct xge_pdata *pdata);
+8 −3
Original line number Diff line number Diff line
@@ -500,9 +500,10 @@ static int xge_open(struct net_device *ndev)

	xge_intr_enable(pdata);
	xge_wr_csr(pdata, DMARXCTRL, 1);

	phy_start(ndev->phydev);
	xge_mac_enable(pdata);
	netif_start_queue(ndev);
	netif_carrier_on(ndev);

	return 0;
}
@@ -511,9 +512,9 @@ static int xge_close(struct net_device *ndev)
{
	struct xge_pdata *pdata = netdev_priv(ndev);

	netif_carrier_off(ndev);
	netif_stop_queue(ndev);
	xge_mac_disable(pdata);
	phy_stop(ndev->phydev);

	xge_intr_disable(pdata);
	xge_free_irq(ndev);
@@ -683,9 +684,12 @@ static int xge_probe(struct platform_device *pdev)
	if (ret)
		goto err;

	ret = xge_mdio_config(ndev);
	if (ret)
		goto err;

	netif_napi_add(ndev, &pdata->napi, xge_napi, NAPI_POLL_WEIGHT);

	netif_carrier_off(ndev);
	ret = register_netdev(ndev);
	if (ret) {
		netdev_err(ndev, "Failed to register netdev\n");
@@ -713,6 +717,7 @@ static int xge_remove(struct platform_device *pdev)
		dev_close(ndev);
	rtnl_unlock();

	xge_mdio_remove(ndev);
	unregister_netdev(ndev);
	free_netdev(ndev);

+4 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ struct xge_pdata {
	struct xge_desc_ring *rx_ring;
	struct platform_device *pdev;
	char irq_name[IRQ_ID_SIZE];
	struct mii_bus *mdio_bus;
	struct net_device *ndev;
	struct napi_struct napi;
	struct xge_stats stats;
@@ -72,4 +73,7 @@ struct xge_pdata {
	u8 nbufs;
};

int xge_mdio_config(struct net_device *ndev);
void xge_mdio_remove(struct net_device *ndev);

#endif /* __XGENE_ENET_V2_MAIN_H__ */
Loading