lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 1 Oct 2013 14:11:36 -0700
From:	"Nithin Nayak Sujir" <nsujir@...adcom.com>
To:	"Hauke Mehrtens" <hauke@...ke-m.de>
cc:	davem@...emloft.net, mchan@...adcom.com, netdev@...r.kernel.org
Subject: Re: [PATCH 1/3] tg3: add support a phy at an address different
 than 01



On 09/28/2013 02:15 PM, Hauke Mehrtens wrote:
> When phylib was in use tg3 only searched at address 01 on the mdio
> bus and did not work with any other address. On the BCM4705 SoCs the
> switch is connected as a PHY behind the MAC driven by tg3 and it is at
> PHY address 30 in most cases. This is a preparation patch to allow
> support for such switches.
>
> phy_addr is set to TG3_PHY_MII_ADDR for all devices, which are using
> phylib, so this should not change any behavior.
>
> Signed-off-by: Hauke Mehrtens <hauke@...ke-m.de>
> ---



Acked-by: Nithin Nayak Sujir <nsujir@...adcom.com>




>   drivers/net/ethernet/broadcom/tg3.c |   38 +++++++++++++++++------------------
>   1 file changed, 19 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
> index 221a181..853a05e 100644
> --- a/drivers/net/ethernet/broadcom/tg3.c
> +++ b/drivers/net/ethernet/broadcom/tg3.c
> @@ -1375,7 +1375,7 @@ static int tg3_mdio_read(struct mii_bus *bp, int mii_id, int reg)
>
>   	spin_lock_bh(&tp->lock);
>
> -	if (tg3_readphy(tp, reg, &val))
> +	if (__tg3_readphy(tp, mii_id, reg, &val))
>   		val = -EIO;
>
>   	spin_unlock_bh(&tp->lock);
> @@ -1390,7 +1390,7 @@ static int tg3_mdio_write(struct mii_bus *bp, int mii_id, int reg, u16 val)
>
>   	spin_lock_bh(&tp->lock);
>
> -	if (tg3_writephy(tp, reg, val))
> +	if (__tg3_writephy(tp, mii_id, reg, val))
>   		ret = -EIO;
>
>   	spin_unlock_bh(&tp->lock);
> @@ -1408,7 +1408,7 @@ static void tg3_mdio_config_5785(struct tg3 *tp)
>   	u32 val;
>   	struct phy_device *phydev;
>
> -	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +	phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>   	switch (phydev->drv->phy_id & phydev->drv->phy_id_mask) {
>   	case PHY_ID_BCM50610:
>   	case PHY_ID_BCM50610M:
> @@ -1533,7 +1533,7 @@ static int tg3_mdio_init(struct tg3 *tp)
>   	tp->mdio_bus->read     = &tg3_mdio_read;
>   	tp->mdio_bus->write    = &tg3_mdio_write;
>   	tp->mdio_bus->reset    = &tg3_mdio_reset;
> -	tp->mdio_bus->phy_mask = ~(1 << TG3_PHY_MII_ADDR);
> +	tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
>   	tp->mdio_bus->irq      = &tp->mdio_irq[0];
>
>   	for (i = 0; i < PHY_MAX_ADDR; i++)
> @@ -1554,7 +1554,7 @@ static int tg3_mdio_init(struct tg3 *tp)
>   		return i;
>   	}
>
> -	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +	phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   	if (!phydev || !phydev->drv) {
>   		dev_warn(&tp->pdev->dev, "No PHY devices\n");
> @@ -1964,7 +1964,7 @@ static void tg3_setup_flow_control(struct tg3 *tp, u32 lcladv, u32 rmtadv)
>   	u32 old_tx_mode = tp->tx_mode;
>
>   	if (tg3_flag(tp, USE_PHYLIB))
> -		autoneg = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]->autoneg;
> +		autoneg = tp->mdio_bus->phy_map[tp->phy_addr]->autoneg;
>   	else
>   		autoneg = tp->link_config.autoneg;
>
> @@ -2000,7 +2000,7 @@ static void tg3_adjust_link(struct net_device *dev)
>   	u8 oldflowctrl, linkmesg = 0;
>   	u32 mac_mode, lcl_adv, rmt_adv;
>   	struct tg3 *tp = netdev_priv(dev);
> -	struct phy_device *phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +	struct phy_device *phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   	spin_lock_bh(&tp->lock);
>
> @@ -2089,7 +2089,7 @@ static int tg3_phy_init(struct tg3 *tp)
>   	/* Bring the PHY back to a known state. */
>   	tg3_bmcr_reset(tp);
>
> -	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +	phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   	/* Attach the MAC to the PHY. */
>   	phydev = phy_connect(tp->dev, dev_name(&phydev->dev),
> @@ -2116,7 +2116,7 @@ static int tg3_phy_init(struct tg3 *tp)
>   				      SUPPORTED_Asym_Pause);
>   		break;
>   	default:
> -		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
> +		phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]);
>   		return -EINVAL;
>   	}
>
> @@ -2134,7 +2134,7 @@ static void tg3_phy_start(struct tg3 *tp)
>   	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   		return;
>
> -	phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +	phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   	if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
>   		tp->phy_flags &= ~TG3_PHYFLG_IS_LOW_POWER;
> @@ -2154,13 +2154,13 @@ static void tg3_phy_stop(struct tg3 *tp)
>   	if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   		return;
>
> -	phy_stop(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
> +	phy_stop(tp->mdio_bus->phy_map[tp->phy_addr]);
>   }
>
>   static void tg3_phy_fini(struct tg3 *tp)
>   {
>   	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
> -		phy_disconnect(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
> +		phy_disconnect(tp->mdio_bus->phy_map[tp->phy_addr]);
>   		tp->phy_flags &= ~TG3_PHYFLG_IS_CONNECTED;
>   	}
>   }
> @@ -4034,7 +4034,7 @@ static int tg3_power_down_prepare(struct tg3 *tp)
>   			struct phy_device *phydev;
>   			u32 phyid, advertising;
>
> -			phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +			phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   			tp->phy_flags |= TG3_PHYFLG_IS_LOW_POWER;
>
> @@ -11922,7 +11922,7 @@ static int tg3_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
>   		struct phy_device *phydev;
>   		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   			return -EAGAIN;
> -		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +		phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>   		return phy_ethtool_gset(phydev, cmd);
>   	}
>
> @@ -11989,7 +11989,7 @@ static int tg3_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
>   		struct phy_device *phydev;
>   		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   			return -EAGAIN;
> -		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +		phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>   		return phy_ethtool_sset(phydev, cmd);
>   	}
>
> @@ -12144,7 +12144,7 @@ static int tg3_nway_reset(struct net_device *dev)
>   	if (tg3_flag(tp, USE_PHYLIB)) {
>   		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   			return -EAGAIN;
> -		r = phy_start_aneg(tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR]);
> +		r = phy_start_aneg(tp->mdio_bus->phy_map[tp->phy_addr]);
>   	} else {
>   		u32 bmcr;
>
> @@ -12260,7 +12260,7 @@ static int tg3_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam
>   		u32 newadv;
>   		struct phy_device *phydev;
>
> -		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +		phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>
>   		if (!(phydev->supported & SUPPORTED_Pause) ||
>   		    (!(phydev->supported & SUPPORTED_Asym_Pause) &&
> @@ -13696,7 +13696,7 @@ static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
>   		struct phy_device *phydev;
>   		if (!(tp->phy_flags & TG3_PHYFLG_IS_CONNECTED))
>   			return -EAGAIN;
> -		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +		phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>   		return phy_mii_ioctl(phydev, ifr, cmd);
>   	}
>
> @@ -17635,7 +17635,7 @@ static int tg3_init_one(struct pci_dev *pdev,
>
>   	if (tp->phy_flags & TG3_PHYFLG_IS_CONNECTED) {
>   		struct phy_device *phydev;
> -		phydev = tp->mdio_bus->phy_map[TG3_PHY_MII_ADDR];
> +		phydev = tp->mdio_bus->phy_map[tp->phy_addr];
>   		netdev_info(dev,
>   			    "attached PHY driver [%s] (mii_bus:phy_addr=%s)\n",
>   			    phydev->drv->name, dev_name(&phydev->dev));
>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ