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

Commit 5b6c273a authored by Nithin Sujir's avatar Nithin Sujir Committed by David S. Miller
Browse files

tg3: Simplify tg3_phy_eee_config_ok() by reusing tg3_eee_pull_config()



eee_config_ok() was checking only for mismatch in advertised settings.
This patch expands the scope of eee_config_ok() to check for mismatch in
the other eee settings. On mismatch we will require a call to
tg3_setup_eee() to push the configured settings to the hardware.

Reviewed-by: default avatarBen Li <benli@broadcom.com>
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarNithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 400dfbaa
Loading
Loading
Loading
Loading
+15 −16
Original line number Diff line number Diff line
@@ -4540,26 +4540,23 @@ static int tg3_init_5401phy_dsp(struct tg3 *tp)

static bool tg3_phy_eee_config_ok(struct tg3 *tp)
{
	u32 val;
	u32 tgtadv = 0;
	u32 advertising = tp->link_config.advertising;
	struct ethtool_eee eee;

	if (!(tp->phy_flags & TG3_PHYFLG_EEE_CAP))
		return true;

	if (tg3_phy_cl45_read(tp, MDIO_MMD_AN, MDIO_AN_EEE_ADV, &val))
		return false;

	val &= (MDIO_AN_EEE_ADV_100TX | MDIO_AN_EEE_ADV_1000T);


	if (advertising & ADVERTISED_100baseT_Full)
		tgtadv |= MDIO_AN_EEE_ADV_100TX;
	if (advertising & ADVERTISED_1000baseT_Full)
		tgtadv |= MDIO_AN_EEE_ADV_1000T;
	tg3_eee_pull_config(tp, &eee);

	if (val != tgtadv)
	if (tp->eee.eee_enabled) {
		if (tp->eee.advertised != eee.advertised ||
		    tp->eee.tx_lpi_timer != eee.tx_lpi_timer ||
		    tp->eee.tx_lpi_enabled != eee.tx_lpi_enabled)
			return false;
	} else {
		/* EEE is disabled but we're advertising */
		if (eee.advertised)
			return false;
	}

	return true;
}
@@ -4862,8 +4859,10 @@ static int tg3_setup_copper_phy(struct tg3 *tp, bool force_reset)
			 */
			if (!eee_config_ok &&
			    (tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN) &&
			    !force_reset)
			    !force_reset) {
				tg3_setup_eee(tp);
				tg3_phy_reset(tp);
			}
		} else {
			if (!(bmcr & BMCR_ANENABLE) &&
			    tp->link_config.speed == current_speed &&