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

Commit 5eb6f3c7 authored by Bruce Allan's avatar Bruce Allan Committed by David S. Miller
Browse files

e1000e: refactor PHY ID detection workaround



The workaround that detects the correct PHY ID when an initial read of the
PHY ID registers returns an invalid one should retry up to ten times with
a small delay between attempts using a single PHY address and then repeat
using the remaining possible PHY addresses.  Do this instead of trying each
possible PHY address repeating that up to 100 times.

Signed-off-by: default avatarBruce Allan <bruce.w.allan@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 94e5b651
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -219,7 +219,7 @@ enum e1e_registers {
	E1000_HICR      = 0x08F00, /* Host Interface Control */
};

/* RSS registers */
#define E1000_MAX_PHY_ADDR		4

/* IGP01E1000 Specific Registers */
#define IGP01E1000_PHY_PORT_CONFIG	0x10 /* Port Config */
+16 −10
Original line number Diff line number Diff line
@@ -2198,12 +2198,16 @@ s32 e1000e_determine_phy_address(struct e1000_hw *hw)
{
	s32 ret_val = -E1000_ERR_PHY_TYPE;
	u32 phy_addr = 0;
	u32 i = 0;
	u32 i;
	enum e1000_phy_type phy_type = e1000_phy_unknown;

	do {
		for (phy_addr = 0; phy_addr < 4; phy_addr++) {
	hw->phy.id = phy_type;

	for (phy_addr = 0; phy_addr < E1000_MAX_PHY_ADDR; phy_addr++) {
		hw->phy.addr = phy_addr;
		i = 0;

		do {
			e1000e_get_phy_id(hw);
			phy_type = e1000e_get_phy_type_from_id(hw->phy.id);

@@ -2213,12 +2217,14 @@ s32 e1000e_determine_phy_address(struct e1000_hw *hw)
			 */
			if (phy_type  != e1000_phy_unknown) {
				ret_val = 0;
				break;
			}
				goto out;
			}
			msleep(1);
			i++;
	} while ((ret_val != 0) && (i < 100));
		} while (i < 10);
	}

out:
	return ret_val;
}