aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/e1000e/defines.h1
-rw-r--r--drivers/net/e1000e/ich8lan.c125
2 files changed, 82 insertions, 44 deletions
diff --git a/drivers/net/e1000e/defines.h b/drivers/net/e1000e/defines.h
index 4329ec34b17..c0f185beb8b 100644
--- a/drivers/net/e1000e/defines.h
+++ b/drivers/net/e1000e/defines.h
@@ -238,6 +238,7 @@
238#define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */ 238#define E1000_STATUS_SPEED_100 0x00000040 /* Speed 100Mb/s */
239#define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */ 239#define E1000_STATUS_SPEED_1000 0x00000080 /* Speed 1000Mb/s */
240#define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Completion by NVM */ 240#define E1000_STATUS_LAN_INIT_DONE 0x00000200 /* Lan Init Completion by NVM */
241#define E1000_STATUS_PHYRA 0x00000400 /* PHY Reset Asserted */
241#define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Status of Master requests. */ 242#define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Status of Master requests. */
242 243
243/* Constants used to interpret the masked PCI-X bus speed. */ 244/* Constants used to interpret the masked PCI-X bus speed. */
diff --git a/drivers/net/e1000e/ich8lan.c b/drivers/net/e1000e/ich8lan.c
index 9e23f50fb9c..438778fef5a 100644
--- a/drivers/net/e1000e/ich8lan.c
+++ b/drivers/net/e1000e/ich8lan.c
@@ -694,6 +694,38 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
694} 694}
695 695
696/** 696/**
697 * e1000_lan_init_done_ich8lan - Check for PHY config completion
698 * @hw: pointer to the HW structure
699 *
700 * Check the appropriate indication the MAC has finished configuring the
701 * PHY after a software reset.
702 **/
703static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw)
704{
705 u32 data, loop = E1000_ICH8_LAN_INIT_TIMEOUT;
706
707 /* Wait for basic configuration completes before proceeding */
708 do {
709 data = er32(STATUS);
710 data &= E1000_STATUS_LAN_INIT_DONE;
711 udelay(100);
712 } while ((!data) && --loop);
713
714 /*
715 * If basic configuration is incomplete before the above loop
716 * count reaches 0, loading the configuration from NVM will
717 * leave the PHY in a bad state possibly resulting in no link.
718 */
719 if (loop == 0)
720 hw_dbg(hw, "LAN_INIT_DONE not set, increase timeout\n");
721
722 /* Clear the Init Done bit for the next init event */
723 data = er32(STATUS);
724 data &= ~E1000_STATUS_LAN_INIT_DONE;
725 ew32(STATUS, data);
726}
727
728/**
697 * e1000_phy_hw_reset_ich8lan - Performs a PHY reset 729 * e1000_phy_hw_reset_ich8lan - Performs a PHY reset
698 * @hw: pointer to the HW structure 730 * @hw: pointer to the HW structure
699 * 731 *
@@ -707,13 +739,15 @@ static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
707 u32 i; 739 u32 i;
708 u32 data, cnf_size, cnf_base_addr, sw_cfg_mask; 740 u32 data, cnf_size, cnf_base_addr, sw_cfg_mask;
709 s32 ret_val; 741 s32 ret_val;
710 u16 loop = E1000_ICH8_LAN_INIT_TIMEOUT;
711 u16 word_addr, reg_data, reg_addr, phy_page = 0; 742 u16 word_addr, reg_data, reg_addr, phy_page = 0;
712 743
713 ret_val = e1000e_phy_hw_reset_generic(hw); 744 ret_val = e1000e_phy_hw_reset_generic(hw);
714 if (ret_val) 745 if (ret_val)
715 return ret_val; 746 return ret_val;
716 747
748 /* Allow time for h/w to get to a quiescent state after reset */
749 mdelay(10);
750
717 if (hw->mac.type == e1000_pchlan) { 751 if (hw->mac.type == e1000_pchlan) {
718 ret_val = e1000_hv_phy_workarounds_ich8lan(hw); 752 ret_val = e1000_hv_phy_workarounds_ich8lan(hw);
719 if (ret_val) 753 if (ret_val)
@@ -741,26 +775,8 @@ static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
741 if (!(data & sw_cfg_mask)) 775 if (!(data & sw_cfg_mask))
742 return 0; 776 return 0;
743 777
744 /* Wait for basic configuration completes before proceeding*/ 778 /* Wait for basic configuration completes before proceeding */
745 do { 779 e1000_lan_init_done_ich8lan(hw);
746 data = er32(STATUS);
747 data &= E1000_STATUS_LAN_INIT_DONE;
748 udelay(100);
749 } while ((!data) && --loop);
750
751 /*
752 * If basic configuration is incomplete before the above loop
753 * count reaches 0, loading the configuration from NVM will
754 * leave the PHY in a bad state possibly resulting in no link.
755 */
756 if (loop == 0) {
757 hw_dbg(hw, "LAN_INIT_DONE not set, increase timeout\n");
758 }
759
760 /* Clear the Init Done bit for the next init event */
761 data = er32(STATUS);
762 data &= ~E1000_STATUS_LAN_INIT_DONE;
763 ew32(STATUS, data);
764 780
765 /* 781 /*
766 * Make sure HW does not configure LCD from PHY 782 * Make sure HW does not configure LCD from PHY
@@ -2143,6 +2159,12 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
2143 ctrl = er32(CTRL); 2159 ctrl = er32(CTRL);
2144 2160
2145 if (!e1000_check_reset_block(hw)) { 2161 if (!e1000_check_reset_block(hw)) {
2162 /* Clear PHY Reset Asserted bit */
2163 if (hw->mac.type >= e1000_pchlan) {
2164 u32 status = er32(STATUS);
2165 ew32(STATUS, status & ~E1000_STATUS_PHYRA);
2166 }
2167
2146 /* 2168 /*
2147 * PHY HW reset requires MAC CORE reset at the same 2169 * PHY HW reset requires MAC CORE reset at the same
2148 * time to make sure the interface between MAC and the 2170 * time to make sure the interface between MAC and the
@@ -2156,21 +2178,24 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
2156 ew32(CTRL, (ctrl | E1000_CTRL_RST)); 2178 ew32(CTRL, (ctrl | E1000_CTRL_RST));
2157 msleep(20); 2179 msleep(20);
2158 2180
2159 if (!ret_val) { 2181 if (!ret_val)
2160 /* release the swflag because it is not reset by
2161 * hardware reset
2162 */
2163 e1000_release_swflag_ich8lan(hw); 2182 e1000_release_swflag_ich8lan(hw);
2164 }
2165 2183
2166 ret_val = e1000e_get_auto_rd_done(hw); 2184 if (ctrl & E1000_CTRL_PHY_RST)
2167 if (ret_val) { 2185 ret_val = hw->phy.ops.get_cfg_done(hw);
2168 /* 2186
2169 * When auto config read does not complete, do not 2187 if (hw->mac.type >= e1000_ich10lan) {
2170 * return with an error. This can happen in situations 2188 e1000_lan_init_done_ich8lan(hw);
2171 * where there is no eeprom and prevents getting link. 2189 } else {
2172 */ 2190 ret_val = e1000e_get_auto_rd_done(hw);
2173 hw_dbg(hw, "Auto Read Done did not complete\n"); 2191 if (ret_val) {
2192 /*
2193 * When auto config read does not complete, do not
2194 * return with an error. This can happen in situations
2195 * where there is no eeprom and prevents getting link.
2196 */
2197 hw_dbg(hw, "Auto Read Done did not complete\n");
2198 }
2174 } 2199 }
2175 2200
2176 ew32(IMC, 0xffffffff); 2201 ew32(IMC, 0xffffffff);
@@ -2222,6 +2247,18 @@ static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
2222 for (i = 0; i < mac->mta_reg_count; i++) 2247 for (i = 0; i < mac->mta_reg_count; i++)
2223 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0); 2248 E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
2224 2249
2250 /*
2251 * The 82578 Rx buffer will stall if wakeup is enabled in host and
2252 * the ME. Reading the BM_WUC register will clear the host wakeup bit.
2253 * Reset the phy after disabling host wakeup to reset the Rx buffer.
2254 */
2255 if (hw->phy.type == e1000_phy_82578) {
2256 hw->phy.ops.read_phy_reg(hw, BM_WUC, &i);
2257 ret_val = e1000_phy_hw_reset_ich8lan(hw);
2258 if (ret_val)
2259 return ret_val;
2260 }
2261
2225 /* Setup link and flow control */ 2262 /* Setup link and flow control */
2226 ret_val = e1000_setup_link_ich8lan(hw); 2263 ret_val = e1000_setup_link_ich8lan(hw);
2227 2264
@@ -2254,16 +2291,6 @@ static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
2254 ew32(CTRL_EXT, ctrl_ext); 2291 ew32(CTRL_EXT, ctrl_ext);
2255 2292
2256 /* 2293 /*
2257 * The 82578 Rx buffer will stall if wakeup is enabled in host and
2258 * the ME. Reading the BM_WUC register will clear the host wakeup bit.
2259 * Reset the phy after disabling host wakeup to reset the Rx buffer.
2260 */
2261 if (hw->phy.type == e1000_phy_82578) {
2262 e1e_rphy(hw, BM_WUC, &i);
2263 e1000e_phy_hw_reset_generic(hw);
2264 }
2265
2266 /*
2267 * Clear all of the statistics registers (clear on read). It is 2294 * Clear all of the statistics registers (clear on read). It is
2268 * important that we do this after we have tried to establish link 2295 * important that we do this after we have tried to establish link
2269 * because the symbol error count will increment wildly if there 2296 * because the symbol error count will increment wildly if there
@@ -2850,6 +2877,16 @@ static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw)
2850{ 2877{
2851 u32 bank = 0; 2878 u32 bank = 0;
2852 2879
2880 if (hw->mac.type >= e1000_pchlan) {
2881 u32 status = er32(STATUS);
2882
2883 if (status & E1000_STATUS_PHYRA)
2884 ew32(STATUS, status & ~E1000_STATUS_PHYRA);
2885 else
2886 hw_dbg(hw,
2887 "PHY Reset Asserted not set - needs delay\n");
2888 }
2889
2853 e1000e_get_cfg_done(hw); 2890 e1000e_get_cfg_done(hw);
2854 2891
2855 /* If EEPROM is not marked present, init the IGP 3 PHY manually */ 2892 /* If EEPROM is not marked present, init the IGP 3 PHY manually */