Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disable BCM54616S MII isolate mode #299

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/igb/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% :
# Patch
pushd ./igb-$(IGB_DRIVER_VERSION)
patch -p1 < ../patch/0001-add-support-for-BCM54616-phy-for-intel-igb-driver.patch
patch -p4 < ../patch/0002-Force-disable-MII-isolate-mode.patch

# Build the package
pushd src
Expand Down
93 changes: 93 additions & 0 deletions src/igb/patch/0002-Force-disable-MII-isolate-mode.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
Force disable MII isolate mode
From: wadelnn <wadelnn@users.noreply.github.com>

---
src/igb/igb-5.3.5.4/src/e1000_82575.c | 7 ++++++-
src/igb/igb-5.3.5.4/src/e1000_hw.h | 1 +
src/igb/igb-5.3.5.4/src/e1000_phy.c | 13 +++++++++++++
src/igb/igb-5.3.5.4/src/e1000_phy.h | 1 +
4 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/igb/igb-5.3.5.4/src/e1000_82575.c b/src/igb/igb-5.3.5.4/src/e1000_82575.c
index 049ab7b..49ec487 100644
--- a/src/igb/igb-5.3.5.4/src/e1000_82575.c
+++ b/src/igb/igb-5.3.5.4/src/e1000_82575.c
@@ -223,7 +223,6 @@ static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
case M88E1112_E_PHY_ID:
case M88E1340M_E_PHY_ID:
case M88E1111_I_PHY_ID:
- case BCM54616_E_PHY_ID:
phy->type = e1000_phy_m88;
phy->ops.check_polarity = e1000_check_polarity_m88;
phy->ops.get_info = e1000_get_phy_info_m88;
@@ -273,6 +272,9 @@ static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
goto out;
}
break;
+ case BCM54616_E_PHY_ID:
+ phy->type = e1000_phy_bcm54616;
+ break;
case IGP03E1000_E_PHY_ID:
case IGP04E1000_E_PHY_ID:
phy->type = e1000_phy_igp_3;
@@ -1603,6 +1605,9 @@ static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
case e1000_phy_82580:
ret_val = e1000_copper_link_setup_82577(hw);
break;
+ case e1000_phy_bcm54616:
+ ret_val = e1000_copper_link_setup_bcm54616(hw);
+ break;
default:
ret_val = -E1000_ERR_PHY;
break;
diff --git a/src/igb/igb-5.3.5.4/src/e1000_hw.h b/src/igb/igb-5.3.5.4/src/e1000_hw.h
index 3bcecf1..cca5d77 100644
--- a/src/igb/igb-5.3.5.4/src/e1000_hw.h
+++ b/src/igb/igb-5.3.5.4/src/e1000_hw.h
@@ -133,6 +133,7 @@ enum e1000_phy_type {
e1000_phy_82580,
e1000_phy_vf,
e1000_phy_i210,
+ e1000_phy_bcm54616,
};

enum e1000_bus_type {
diff --git a/src/igb/igb-5.3.5.4/src/e1000_phy.c b/src/igb/igb-5.3.5.4/src/e1000_phy.c
index 5172691..7c79f69 100644
--- a/src/igb/igb-5.3.5.4/src/e1000_phy.c
+++ b/src/igb/igb-5.3.5.4/src/e1000_phy.c
@@ -1367,6 +1367,19 @@ s32 e1000_copper_link_setup_igp(struct e1000_hw *hw)
return ret_val;
}

+s32 e1000_copper_link_setup_bcm54616(struct e1000_hw *hw)
+{
+ struct e1000_phy_info *phy = &hw->phy;
+ s32 ret_val;
+ u16 phy_data;
+
+ ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &phy_data);
+ phy_data &=~(MII_CR_ISOLATE);
+ ret_val = phy->ops.write_reg(hw, PHY_CONTROL, phy_data);
+
+ return 0;
+}
+
/**
* e1000_phy_setup_autoneg - Configure PHY for auto-negotiation
* @hw: pointer to the HW structure
diff --git a/src/igb/igb-5.3.5.4/src/e1000_phy.h b/src/igb/igb-5.3.5.4/src/e1000_phy.h
index a109c91..f852b5b 100644
--- a/src/igb/igb-5.3.5.4/src/e1000_phy.h
+++ b/src/igb/igb-5.3.5.4/src/e1000_phy.h
@@ -43,6 +43,7 @@ s32 e1000_check_reset_block_generic(struct e1000_hw *hw);
s32 e1000_copper_link_setup_igp(struct e1000_hw *hw);
s32 e1000_copper_link_setup_m88(struct e1000_hw *hw);
s32 e1000_copper_link_setup_m88_gen2(struct e1000_hw *hw);
+s32 e1000_copper_link_setup_bcm54616(struct e1000_hw *hw);
s32 e1000_phy_force_speed_duplex_igp(struct e1000_hw *hw);
s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw);
s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw);
--
2.1.4