summaryrefslogtreecommitdiffstats
path: root/sys/dev/e1000/e1000_phy.c
diff options
context:
space:
mode:
authorjfv <jfv@FreeBSD.org>2010-09-28 00:13:15 +0000
committerjfv <jfv@FreeBSD.org>2010-09-28 00:13:15 +0000
commit6e3a6af4dca11cb0ff57310539129574a52697ec (patch)
tree21280311b19d0a44f429c7a43c6e9ff933e22698 /sys/dev/e1000/e1000_phy.c
parent0d99f2e43e7ec663501399402dc10f4d73b985d4 (diff)
downloadFreeBSD-src-6e3a6af4dca11cb0ff57310539129574a52697ec.zip
FreeBSD-src-6e3a6af4dca11cb0ff57310539129574a52697ec.tar.gz
Update code from Intel:
- Sync shared code with Intel internal - New client chipset support added - em driver - fixes to 82574, limit queues to 1 but use MSIX - em driver - large changes in TX checksum offload and tso code, thanks to yongari. - some small changes for watchdog issues. - igb driver - local timer watchdog code was missing locking this and a couple other watchdog related fixes. - bug in rx discard found by Andrew Boyer, check for null pointer MFC: a week
Diffstat (limited to 'sys/dev/e1000/e1000_phy.c')
-rw-r--r--sys/dev/e1000/e1000_phy.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/sys/dev/e1000/e1000_phy.c b/sys/dev/e1000/e1000_phy.c
index 24ca36f..fb66623 100644
--- a/sys/dev/e1000/e1000_phy.c
+++ b/sys/dev/e1000/e1000_phy.c
@@ -281,6 +281,13 @@ s32 e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data)
goto out;
}
*data = (u16) mdic;
+
+ /*
+ * Allow some time after each MDIC transaction to avoid
+ * reading duplicate data in the next MDIC transaction.
+ */
+ if (hw->mac.type == e1000_pch2lan)
+ usec_delay(100);
out:
return ret_val;
@@ -345,6 +352,13 @@ s32 e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data)
goto out;
}
+ /*
+ * Allow some time after each MDIC transaction to avoid
+ * reading duplicate data in the next MDIC transaction.
+ */
+ if (hw->mac.type == e1000_pch2lan)
+ usec_delay(100);
+
out:
return ret_val;
}
@@ -868,9 +882,10 @@ s32 e1000_copper_link_setup_m88(struct e1000_hw *hw)
if (ret_val)
goto out;
+ phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
/* For BM PHY this bit is downshift enable */
- if (phy->type != e1000_phy_bm)
- phy_data |= M88E1000_PSCR_ASSERT_CRS_ON_TX;
+ if (phy->type == e1000_phy_bm)
+ phy_data &= ~M88E1000_PSCR_ASSERT_CRS_ON_TX;
/*
* Options:
@@ -2618,6 +2633,9 @@ enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
case I82577_E_PHY_ID:
phy_type = e1000_phy_82577;
break;
+ case I82579_E_PHY_ID:
+ phy_type = e1000_phy_82579;
+ break;
case I82580_I_PHY_ID:
phy_type = e1000_phy_82580;
break;
OpenPOWER on IntegriCloud