Commit 2ebc440a authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller
Browse files

net: ethernet: sxgbe: use phydev from struct net_device



The private structure contain a pointer to phydev, but the structure
net_device already contain such pointer. So we can remove the pointer
phydev in the private structure, and update the driver to use the
one contained in struct net_device.

Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cffce361
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -475,7 +475,6 @@ struct sxgbe_priv_data {
	int rxcsum_insertion;
	int rxcsum_insertion;
	spinlock_t stats_lock;	/* lock for tx/rx statatics */
	spinlock_t stats_lock;	/* lock for tx/rx statatics */


	struct phy_device *phydev;
	int oldlink;
	int oldlink;
	int speed;
	int speed;
	int oldduplex;
	int oldduplex;
+7 −11
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ static int sxgbe_get_eee(struct net_device *dev,
	edata->eee_active = priv->eee_active;
	edata->eee_active = priv->eee_active;
	edata->tx_lpi_timer = priv->tx_lpi_timer;
	edata->tx_lpi_timer = priv->tx_lpi_timer;


	return phy_ethtool_get_eee(priv->phydev, edata);
	return phy_ethtool_get_eee(dev->phydev, edata);
}
}


static int sxgbe_set_eee(struct net_device *dev,
static int sxgbe_set_eee(struct net_device *dev,
@@ -172,7 +172,7 @@ static int sxgbe_set_eee(struct net_device *dev,
		priv->tx_lpi_timer = edata->tx_lpi_timer;
		priv->tx_lpi_timer = edata->tx_lpi_timer;
	}
	}


	return phy_ethtool_set_eee(priv->phydev, edata);
	return phy_ethtool_set_eee(dev->phydev, edata);
}
}


static void sxgbe_getdrvinfo(struct net_device *dev,
static void sxgbe_getdrvinfo(struct net_device *dev,
@@ -185,20 +185,16 @@ static void sxgbe_getdrvinfo(struct net_device *dev,
static int sxgbe_getsettings(struct net_device *dev,
static int sxgbe_getsettings(struct net_device *dev,
			     struct ethtool_cmd *cmd)
			     struct ethtool_cmd *cmd)
{
{
	struct sxgbe_priv_data *priv = netdev_priv(dev);
	if (dev->phydev)

		return phy_ethtool_gset(dev->phydev, cmd);
	if (priv->phydev)
		return phy_ethtool_gset(priv->phydev, cmd);


	return -EOPNOTSUPP;
	return -EOPNOTSUPP;
}
}


static int sxgbe_setsettings(struct net_device *dev, struct ethtool_cmd *cmd)
static int sxgbe_setsettings(struct net_device *dev, struct ethtool_cmd *cmd)
{
{
	struct sxgbe_priv_data *priv = netdev_priv(dev);
	if (dev->phydev)

		return phy_ethtool_sset(dev->phydev, cmd);
	if (priv->phydev)
		return phy_ethtool_sset(priv->phydev, cmd);


	return -EOPNOTSUPP;
	return -EOPNOTSUPP;
}
}
@@ -255,7 +251,7 @@ static void sxgbe_get_ethtool_stats(struct net_device *dev,
	char *p;
	char *p;


	if (priv->eee_enabled) {
	if (priv->eee_enabled) {
		int val = phy_get_eee_err(priv->phydev);
		int val = phy_get_eee_err(dev->phydev);


		if (val)
		if (val)
			priv->xstats.eee_wakeup_error_n = val;
			priv->xstats.eee_wakeup_error_n = val;
+15 −17
Original line number Original line Diff line number Diff line
@@ -124,12 +124,13 @@ static void sxgbe_eee_ctrl_timer(unsigned long arg)
 */
 */
bool sxgbe_eee_init(struct sxgbe_priv_data * const priv)
bool sxgbe_eee_init(struct sxgbe_priv_data * const priv)
{
{
	struct net_device *ndev = priv->dev;
	bool ret = false;
	bool ret = false;


	/* MAC core supports the EEE feature. */
	/* MAC core supports the EEE feature. */
	if (priv->hw_cap.eee) {
	if (priv->hw_cap.eee) {
		/* Check if the PHY supports EEE */
		/* Check if the PHY supports EEE */
		if (phy_init_eee(priv->phydev, 1))
		if (phy_init_eee(ndev->phydev, 1))
			return false;
			return false;


		priv->eee_active = 1;
		priv->eee_active = 1;
@@ -152,12 +153,14 @@ bool sxgbe_eee_init(struct sxgbe_priv_data * const priv)


static void sxgbe_eee_adjust(const struct sxgbe_priv_data *priv)
static void sxgbe_eee_adjust(const struct sxgbe_priv_data *priv)
{
{
	struct net_device *ndev = priv->dev;

	/* When the EEE has been already initialised we have to
	/* When the EEE has been already initialised we have to
	 * modify the PLS bit in the LPI ctrl & status reg according
	 * modify the PLS bit in the LPI ctrl & status reg according
	 * to the PHY link status. For this reason.
	 * to the PHY link status. For this reason.
	 */
	 */
	if (priv->eee_enabled)
	if (priv->eee_enabled)
		priv->hw->mac->set_eee_pls(priv->ioaddr, priv->phydev->link);
		priv->hw->mac->set_eee_pls(priv->ioaddr, ndev->phydev->link);
}
}


/**
/**
@@ -203,7 +206,7 @@ static inline u32 sxgbe_tx_avail(struct sxgbe_tx_queue *queue, int tx_qsize)
static void sxgbe_adjust_link(struct net_device *dev)
static void sxgbe_adjust_link(struct net_device *dev)
{
{
	struct sxgbe_priv_data *priv = netdev_priv(dev);
	struct sxgbe_priv_data *priv = netdev_priv(dev);
	struct phy_device *phydev = priv->phydev;
	struct phy_device *phydev = dev->phydev;
	u8 new_state = 0;
	u8 new_state = 0;
	u8 speed = 0xff;
	u8 speed = 0xff;


@@ -306,9 +309,6 @@ static int sxgbe_init_phy(struct net_device *ndev)
	netdev_dbg(ndev, "%s: attached to PHY (UID 0x%x) Link = %d\n",
	netdev_dbg(ndev, "%s: attached to PHY (UID 0x%x) Link = %d\n",
		   __func__, phydev->phy_id, phydev->link);
		   __func__, phydev->phy_id, phydev->link);


	/* save phy device in private structure */
	priv->phydev = phydev;

	return 0;
	return 0;
}
}


@@ -1173,8 +1173,8 @@ static int sxgbe_open(struct net_device *dev)
	priv->hw->dma->start_tx(priv->ioaddr, SXGBE_TX_QUEUES);
	priv->hw->dma->start_tx(priv->ioaddr, SXGBE_TX_QUEUES);
	priv->hw->dma->start_rx(priv->ioaddr, SXGBE_RX_QUEUES);
	priv->hw->dma->start_rx(priv->ioaddr, SXGBE_RX_QUEUES);


	if (priv->phydev)
	if (dev->phydev)
		phy_start(priv->phydev);
		phy_start(dev->phydev);


	/* initialise TX coalesce parameters */
	/* initialise TX coalesce parameters */
	sxgbe_tx_init_coalesce(priv);
	sxgbe_tx_init_coalesce(priv);
@@ -1194,8 +1194,8 @@ static int sxgbe_open(struct net_device *dev)


init_error:
init_error:
	free_dma_desc_resources(priv);
	free_dma_desc_resources(priv);
	if (priv->phydev)
	if (dev->phydev)
		phy_disconnect(priv->phydev);
		phy_disconnect(dev->phydev);
phy_error:
phy_error:
	clk_disable_unprepare(priv->sxgbe_clk);
	clk_disable_unprepare(priv->sxgbe_clk);


@@ -1216,10 +1216,9 @@ static int sxgbe_release(struct net_device *dev)
		del_timer_sync(&priv->eee_ctrl_timer);
		del_timer_sync(&priv->eee_ctrl_timer);


	/* Stop and disconnect the PHY */
	/* Stop and disconnect the PHY */
	if (priv->phydev) {
	if (dev->phydev) {
		phy_stop(priv->phydev);
		phy_stop(dev->phydev);
		phy_disconnect(priv->phydev);
		phy_disconnect(dev->phydev);
		priv->phydev = NULL;
	}
	}


	netif_tx_stop_all_queues(dev);
	netif_tx_stop_all_queues(dev);
@@ -1969,7 +1968,6 @@ static void sxgbe_poll_controller(struct net_device *dev)
 */
 */
static int sxgbe_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
static int sxgbe_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{
{
	struct sxgbe_priv_data *priv = netdev_priv(dev);
	int ret = -EOPNOTSUPP;
	int ret = -EOPNOTSUPP;


	if (!netif_running(dev))
	if (!netif_running(dev))
@@ -1979,9 +1977,9 @@ static int sxgbe_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
	case SIOCGMIIPHY:
	case SIOCGMIIPHY:
	case SIOCGMIIREG:
	case SIOCGMIIREG:
	case SIOCSMIIREG:
	case SIOCSMIIREG:
		if (!priv->phydev)
		if (!dev->phydev)
			return -EINVAL;
			return -EINVAL;
		ret = phy_mii_ioctl(priv->phydev, rq, cmd);
		ret = phy_mii_ioctl(dev->phydev, rq, cmd);
		break;
		break;
	default:
	default:
		break;
		break;