From owner-svn-src-stable-8@FreeBSD.ORG Thu Feb 28 02:23:45 2013 Return-Path: Delivered-To: svn-src-stable-8@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id EBD267EB; Thu, 28 Feb 2013 02:23:44 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from onyx.glenbarber.us (onyx.glenbarber.us [IPv6:2607:fc50:1000:c200::face]) by mx1.freebsd.org (Postfix) with ESMTP id 7F81D245; Thu, 28 Feb 2013 02:23:44 +0000 (UTC) Received: from glenbarber.us (kaos.glenbarber.us [71.224.221.174]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: gjb) by onyx.glenbarber.us (Postfix) with ESMTPSA id 1117B23F645; Wed, 27 Feb 2013 21:23:35 -0500 (EST) DKIM-Filter: OpenDKIM Filter v2.8.0 onyx.glenbarber.us 1117B23F645 Authentication-Results: onyx.glenbarber.us; dkim=none reason="no signature"; dkim-adsp=none Date: Wed, 27 Feb 2013 21:23:33 -0500 From: Glen Barber To: Jack F Vogel Subject: Re: svn commit: r247430 - in stable/8/sys: conf dev/e1000 modules/em modules/igb Message-ID: <20130228022333.GC70215@glenbarber.us> References: <201302280022.r1S0M4vm064514@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="f0KYrhQ4vYSV2aJu" Content-Disposition: inline In-Reply-To: <201302280022.r1S0M4vm064514@svn.freebsd.org> X-Operating-System: FreeBSD 10.0-CURRENT amd64 User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-stable@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, svn-src-stable-8@freebsd.org X-BeenThere: svn-src-stable-8@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 8-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Feb 2013 02:23:45 -0000 --f0KYrhQ4vYSV2aJu Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Jack, This commit seems to break the build for at least powerpc and sparc64. Glen On Thu, Feb 28, 2013 at 12:22:04AM +0000, Jack F Vogel wrote: > Author: jfv > Date: Thu Feb 28 00:22:04 2013 > New Revision: 247430 > URL: http://svnweb.freebsd.org/changeset/base/247430 >=20 > Log: > MFC of the E1000 drivers to STABLE/8, this includes the follow revisions > plus a few tweaks: > 196969,196970,211516,214646,215781,215789,215808,215910,223350, > 223482,223831,228281,228393,229939,231796,232238,234665,235256, > 236406,238148,238151,238214,238765,238770,238953,238981,239105, > 239109,239304,240518,240693,240968,241037,241856,241885,243570, > 243857,245334,246128,246482,247064 >=20 > Added: > stable/8/sys/dev/e1000/e1000_i210.c > - copied, changed from r238148, head/sys/dev/e1000/e1000_i210.c > stable/8/sys/dev/e1000/e1000_i210.h > - copied, changed from r238148, head/sys/dev/e1000/e1000_i210.h > Modified: > stable/8/sys/conf/files > stable/8/sys/dev/e1000/e1000_82541.c > stable/8/sys/dev/e1000/e1000_82543.c > stable/8/sys/dev/e1000/e1000_82571.c > stable/8/sys/dev/e1000/e1000_82575.c > stable/8/sys/dev/e1000/e1000_82575.h > stable/8/sys/dev/e1000/e1000_api.c > stable/8/sys/dev/e1000/e1000_api.h > stable/8/sys/dev/e1000/e1000_defines.h > stable/8/sys/dev/e1000/e1000_hw.h > stable/8/sys/dev/e1000/e1000_ich8lan.c > stable/8/sys/dev/e1000/e1000_ich8lan.h > stable/8/sys/dev/e1000/e1000_mac.c > stable/8/sys/dev/e1000/e1000_mac.h > stable/8/sys/dev/e1000/e1000_manage.c > stable/8/sys/dev/e1000/e1000_manage.h > stable/8/sys/dev/e1000/e1000_nvm.c > stable/8/sys/dev/e1000/e1000_nvm.h > stable/8/sys/dev/e1000/e1000_osdep.h > stable/8/sys/dev/e1000/e1000_phy.c > stable/8/sys/dev/e1000/e1000_phy.h > stable/8/sys/dev/e1000/e1000_regs.h > stable/8/sys/dev/e1000/if_em.c (contents, props changed) > stable/8/sys/dev/e1000/if_igb.c (contents, props changed) > stable/8/sys/dev/e1000/if_igb.h > stable/8/sys/dev/e1000/if_lem.c > stable/8/sys/modules/em/Makefile > stable/8/sys/modules/igb/Makefile > Directory Properties: > stable/8/sys/dev/e1000/ (props changed) >=20 > Modified: stable/8/sys/conf/files > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- stable/8/sys/conf/files Thu Feb 28 00:18:56 2013 (r247429) > +++ stable/8/sys/conf/files Thu Feb 28 00:22:04 2013 (r247430) > @@ -920,6 +920,8 @@ dev/e1000/e1000_82575.c optional em | i > compile-with "${NORMAL_C} -I$S/dev/e1000" > dev/e1000/e1000_ich8lan.c optional em | igb \ > compile-with "${NORMAL_C} -I$S/dev/e1000" > +dev/e1000/e1000_i210.c optional em | igb \ > + compile-with "${NORMAL_C} -I$S/dev/e1000" > dev/e1000/e1000_api.c optional em | igb \ > compile-with "${NORMAL_C} -I$S/dev/e1000" > dev/e1000/e1000_mac.c optional em | igb \ >=20 > Modified: stable/8/sys/dev/e1000/e1000_82541.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- stable/8/sys/dev/e1000/e1000_82541.c Thu Feb 28 00:18:56 2013 (r24742= 9) > +++ stable/8/sys/dev/e1000/e1000_82541.c Thu Feb 28 00:22:04 2013 (r24743= 0) > @@ -642,7 +642,7 @@ static s32 e1000_check_for_link_82541(st > * of MAC speed/duplex configuration. So we only need to > * configure Collision Distance in the MAC. > */ > - e1000_config_collision_dist_generic(hw); > + mac->ops.config_collision_dist(hw); > =20 > /* > * Configure Flow Control now that Auto-Neg has completed. >=20 > Modified: stable/8/sys/dev/e1000/e1000_82543.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- stable/8/sys/dev/e1000/e1000_82543.c Thu Feb 28 00:18:56 2013 (r24742= 9) > +++ stable/8/sys/dev/e1000/e1000_82543.c Thu Feb 28 00:22:04 2013 (r24743= 0) > @@ -1126,7 +1126,7 @@ static s32 e1000_setup_copper_link_82543 > DEBUGOUT("Valid link established!!!\n"); > /* Config the MAC and PHY after link is up */ > if (hw->mac.type =3D=3D e1000_82544) { > - e1000_config_collision_dist_generic(hw); > + hw->mac.ops.config_collision_dist(hw); > } else { > ret_val =3D e1000_config_mac_to_phy_82543(hw); > if (ret_val) > @@ -1160,7 +1160,7 @@ static s32 e1000_setup_fiber_link_82543( > /* Take the link out of reset */ > ctrl &=3D ~E1000_CTRL_LRST; > =20 > - e1000_config_collision_dist_generic(hw); > + hw->mac.ops.config_collision_dist(hw); > =20 > ret_val =3D e1000_commit_fc_settings_generic(hw); > if (ret_val) > @@ -1259,7 +1259,7 @@ static s32 e1000_check_for_copper_link_8 > * settings. > */ > if (mac->type =3D=3D e1000_82544) > - e1000_config_collision_dist_generic(hw); > + hw->mac.ops.config_collision_dist(hw); > else { > ret_val =3D e1000_config_mac_to_phy_82543(hw); > if (ret_val) { > @@ -1433,7 +1433,7 @@ static s32 e1000_config_mac_to_phy_82543 > if (phy_data & M88E1000_PSSR_DPLX) > ctrl |=3D E1000_CTRL_FD; > =20 > - e1000_config_collision_dist_generic(hw); > + hw->mac.ops.config_collision_dist(hw); > =20 > /* > * Set up speed in the Device Control register depending on >=20 > Modified: stable/8/sys/dev/e1000/e1000_82571.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- stable/8/sys/dev/e1000/e1000_82571.c Thu Feb 28 00:18:56 2013 (r24742= 9) > +++ stable/8/sys/dev/e1000/e1000_82571.c Thu Feb 28 00:22:04 2013 (r24743= 0) > @@ -1,6 +1,6 @@ > /***********************************************************************= ******* > =20 > - Copyright (c) 2001-2011, Intel Corporation=20 > + Copyright (c) 2001-2013, Intel Corporation=20 > All rights reserved. > =20 > Redistribution and use in source and binary forms, with or without=20 > @@ -32,8 +32,7 @@ > ************************************************************************= ******/ > /*$FreeBSD$*/ > =20 > -/* > - * 82571EB Gigabit Ethernet Controller > +/* 82571EB Gigabit Ethernet Controller > * 82571EB Gigabit Ethernet Controller (Copper) > * 82571EB Gigabit Ethernet Controller (Fiber) > * 82571EB Dual Port Gigabit Mezzanine Adapter > @@ -51,9 +50,6 @@ > =20 > #include "e1000_api.h" > =20 > -static s32 e1000_init_phy_params_82571(struct e1000_hw *hw); > -static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw); > -static s32 e1000_init_mac_params_82571(struct e1000_hw *hw); > static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw); > static void e1000_release_nvm_82571(struct e1000_hw *hw); > static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, > @@ -78,7 +74,6 @@ static s32 e1000_get_hw_semaphore_82571 > static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw); > static s32 e1000_get_phy_id_82571(struct e1000_hw *hw); > static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw); > -static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw); > static void e1000_put_hw_semaphore_82573(struct e1000_hw *hw); > static s32 e1000_get_hw_semaphore_82574(struct e1000_hw *hw); > static void e1000_put_hw_semaphore_82574(struct e1000_hw *hw); > @@ -99,13 +94,13 @@ static void e1000_power_down_phy_copper_ > static s32 e1000_init_phy_params_82571(struct e1000_hw *hw) > { > struct e1000_phy_info *phy =3D &hw->phy; > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > =20 > DEBUGFUNC("e1000_init_phy_params_82571"); > =20 > if (hw->phy.media_type !=3D e1000_media_type_copper) { > phy->type =3D e1000_phy_none; > - goto out; > + return E1000_SUCCESS; > } > =20 > phy->addr =3D 1; > @@ -165,8 +160,7 @@ static s32 e1000_init_phy_params_82571(s > phy->ops.set_d3_lplu_state =3D e1000_set_d3_lplu_state_82574; > break; > default: > - ret_val =3D -E1000_ERR_PHY; > - goto out; > + return -E1000_ERR_PHY; > break; > } > =20 > @@ -174,7 +168,7 @@ static s32 e1000_init_phy_params_82571(s > ret_val =3D e1000_get_phy_id_82571(hw); > if (ret_val) { > DEBUGOUT("Error getting PHY ID\n"); > - goto out; > + return ret_val; > } > =20 > /* Verify phy id */ > @@ -201,7 +195,6 @@ static s32 e1000_init_phy_params_82571(s > if (ret_val) > DEBUGOUT1("PHY ID unknown: type =3D 0x%08x\n", phy->id); > =20 > -out: > return ret_val; > } > =20 > @@ -241,8 +234,7 @@ static s32 e1000_init_nvm_params_82571(s > if (((eecd >> 15) & 0x3) =3D=3D 0x3) { > nvm->type =3D e1000_nvm_flash_hw; > nvm->word_size =3D 2048; > - /* > - * Autonomous Flash update bit must be cleared due > + /* Autonomous Flash update bit must be cleared due > * to Flash update issue. > */ > eecd &=3D ~E1000_EECD_AUPDEN; > @@ -254,8 +246,7 @@ static s32 e1000_init_nvm_params_82571(s > nvm->type =3D e1000_nvm_eeprom_spi; > size =3D (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >> > E1000_EECD_SIZE_EX_SHIFT); > - /* > - * Added to a constant, "size" becomes the left-shift value > + /* Added to a constant, "size" becomes the left-shift value > * for setting word_size. > */ > size +=3D NVM_WORD_SIZE_BASE_SHIFT; > @@ -382,12 +373,11 @@ static s32 e1000_init_mac_params_82571(s > =20 > /* FWSM register */ > mac->has_fwsm =3D TRUE; > - /* > - * ARC supported; valid only if manageability features are > + /* ARC supported; valid only if manageability features are > * enabled. > */ > - mac->arc_subsystem_valid =3D (E1000_READ_REG(hw, E1000_FWSM) & > - E1000_FWSM_MODE_MASK) ? TRUE : FALSE; > + mac->arc_subsystem_valid =3D !!(E1000_READ_REG(hw, E1000_FWSM) & > + E1000_FWSM_MODE_MASK); > break; > case e1000_82574: > case e1000_82583: > @@ -405,8 +395,7 @@ static s32 e1000_init_mac_params_82571(s > break; > } > =20 > - /* > - * Ensure that the inter-port SWSM.SMBI lock bit is clear before > + /* Ensure that the inter-port SWSM.SMBI lock bit is clear before > * first NVM or PHY acess. This should be done for single-port > * devices, and for one port only on dual-port devices so that > * for those devices we can still use the SMBI lock to synchronize > @@ -422,8 +411,9 @@ static s32 e1000_init_mac_params_82571(s > E1000_WRITE_REG(hw, E1000_SWSM2, swsm2 | > E1000_SWSM2_LOCK); > force_clear_smbi =3D TRUE; > - } else > + } else { > force_clear_smbi =3D FALSE; > + } > break; > default: > force_clear_smbi =3D TRUE; > @@ -443,10 +433,7 @@ static s32 e1000_init_mac_params_82571(s > E1000_WRITE_REG(hw, E1000_SWSM, swsm & ~E1000_SWSM_SMBI); > } > =20 > - /* > - * Initialze device specific counter of SMBI acquisition > - * timeouts. > - */ > + /* Initialze device specific counter of SMBI acquisition timeouts. */ > hw->dev_spec._82571.smb_counter =3D 0; > =20 > return E1000_SUCCESS; > @@ -477,7 +464,7 @@ void e1000_init_function_pointers_82571( > static s32 e1000_get_phy_id_82571(struct e1000_hw *hw) > { > struct e1000_phy_info *phy =3D &hw->phy; > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > u16 phy_id =3D 0; > =20 > DEBUGFUNC("e1000_get_phy_id_82571"); > @@ -485,8 +472,7 @@ static s32 e1000_get_phy_id_82571(struct > switch (hw->mac.type) { > case e1000_82571: > case e1000_82572: > - /* > - * The 82571 firmware may still be configuring the PHY. > + /* The 82571 firmware may still be configuring the PHY. > * In this case, we cannot access the PHY until the > * configuration is done. So we explicitly set the > * PHY ID. > @@ -494,29 +480,29 @@ static s32 e1000_get_phy_id_82571(struct > phy->id =3D IGP01E1000_I_PHY_ID; > break; > case e1000_82573: > - ret_val =3D e1000_get_phy_id(hw); > + return e1000_get_phy_id(hw); > break; > case e1000_82574: > case e1000_82583: > ret_val =3D phy->ops.read_reg(hw, PHY_ID1, &phy_id); > if (ret_val) > - goto out; > + return ret_val; > =20 > phy->id =3D (u32)(phy_id << 16); > usec_delay(20); > ret_val =3D phy->ops.read_reg(hw, PHY_ID2, &phy_id); > if (ret_val) > - goto out; > + return ret_val; > =20 > phy->id |=3D (u32)(phy_id); > phy->revision =3D (u32)(phy_id & ~PHY_REVISION_MASK); > break; > default: > - ret_val =3D -E1000_ERR_PHY; > + return -E1000_ERR_PHY; > break; > } > -out: > - return ret_val; > + > + return E1000_SUCCESS; > } > =20 > /** > @@ -528,15 +514,13 @@ out: > static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw) > { > u32 swsm; > - s32 ret_val =3D E1000_SUCCESS; > s32 sw_timeout =3D hw->nvm.word_size + 1; > s32 fw_timeout =3D hw->nvm.word_size + 1; > s32 i =3D 0; > =20 > DEBUGFUNC("e1000_get_hw_semaphore_82571"); > =20 > - /* > - * If we have timedout 3 times on trying to acquire > + /* If we have timedout 3 times on trying to acquire > * the inter-port SMBI semaphore, there is old code > * operating on the other port, and it is not > * releasing SMBI. Modify the number of times that > @@ -576,12 +560,10 @@ static s32 e1000_get_hw_semaphore_82571( > /* Release semaphores */ > e1000_put_hw_semaphore_82571(hw); > DEBUGOUT("Driver can't access the NVM\n"); > - ret_val =3D -E1000_ERR_NVM; > - goto out; > + return -E1000_ERR_NVM; > } > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -613,22 +595,19 @@ static void e1000_put_hw_semaphore_82571 > static s32 e1000_get_hw_semaphore_82573(struct e1000_hw *hw) > { > u32 extcnf_ctrl; > - s32 ret_val =3D E1000_SUCCESS; > s32 i =3D 0; > =20 > DEBUGFUNC("e1000_get_hw_semaphore_82573"); > =20 > extcnf_ctrl =3D E1000_READ_REG(hw, E1000_EXTCNF_CTRL); > - extcnf_ctrl |=3D E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP; > do { > + extcnf_ctrl |=3D E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP; > E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl); > extcnf_ctrl =3D E1000_READ_REG(hw, E1000_EXTCNF_CTRL); > =20 > if (extcnf_ctrl & E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP) > break; > =20 > - extcnf_ctrl |=3D E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP; > - > msec_delay(2); > i++; > } while (i < MDIO_OWNERSHIP_TIMEOUT); > @@ -637,12 +616,10 @@ static s32 e1000_get_hw_semaphore_82573( > /* Release semaphores */ > e1000_put_hw_semaphore_82573(hw); > DEBUGOUT("Driver can't access the PHY\n"); > - ret_val =3D -E1000_ERR_PHY; > - goto out; > + return -E1000_ERR_PHY; > } > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -712,7 +689,7 @@ static void e1000_put_hw_semaphore_82574 > **/ > static s32 e1000_set_d0_lplu_state_82574(struct e1000_hw *hw, bool activ= e) > { > - u16 data =3D E1000_READ_REG(hw, E1000_POEMB); > + u32 data =3D E1000_READ_REG(hw, E1000_POEMB); > =20 > DEBUGFUNC("e1000_set_d0_lplu_state_82574"); > =20 > @@ -738,7 +715,7 @@ static s32 e1000_set_d0_lplu_state_82574 > **/ > static s32 e1000_set_d3_lplu_state_82574(struct e1000_hw *hw, bool activ= e) > { > - u16 data =3D E1000_READ_REG(hw, E1000_POEMB); > + u32 data =3D E1000_READ_REG(hw, E1000_POEMB); > =20 > DEBUGFUNC("e1000_set_d3_lplu_state_82574"); > =20 > @@ -771,7 +748,7 @@ static s32 e1000_acquire_nvm_82571(struc > =20 > ret_val =3D e1000_get_hw_semaphore_82571(hw); > if (ret_val) > - goto out; > + return ret_val; > =20 > switch (hw->mac.type) { > case e1000_82573: > @@ -784,7 +761,6 @@ static s32 e1000_acquire_nvm_82571(struc > if (ret_val) > e1000_put_hw_semaphore_82571(hw); > =20 > -out: > return ret_val; > } > =20 > @@ -817,7 +793,7 @@ static void e1000_release_nvm_82571(stru > static s32 e1000_write_nvm_82571(struct e1000_hw *hw, u16 offset, u16 wo= rds, > u16 *data) > { > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > =20 > DEBUGFUNC("e1000_write_nvm_82571"); > =20 > @@ -857,31 +833,27 @@ static s32 e1000_update_nvm_checksum_825 > =20 > ret_val =3D e1000_update_nvm_checksum_generic(hw); > if (ret_val) > - goto out; > + return ret_val; > =20 > - /* > - * If our nvm is an EEPROM, then we're done > + /* If our nvm is an EEPROM, then we're done > * otherwise, commit the checksum to the flash NVM. > */ > if (hw->nvm.type !=3D e1000_nvm_flash_hw) > - goto out; > + return E1000_SUCCESS; > =20 > /* Check for pending operations. */ > for (i =3D 0; i < E1000_FLASH_UPDATES; i++) { > msec_delay(1); > - if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) =3D=3D 0) > + if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD)) > break; > } > =20 > - if (i =3D=3D E1000_FLASH_UPDATES) { > - ret_val =3D -E1000_ERR_NVM; > - goto out; > - } > + if (i =3D=3D E1000_FLASH_UPDATES) > + return -E1000_ERR_NVM; > =20 > /* Reset the firmware if using STM opcode. */ > if ((E1000_READ_REG(hw, E1000_FLOP) & 0xFF00) =3D=3D E1000_STM_OPCODE) { > - /* > - * The enabling of and the actual reset must be done > + /* The enabling of and the actual reset must be done > * in two write cycles. > */ > E1000_WRITE_REG(hw, E1000_HICR, E1000_HICR_FW_RESET_ENABLE); > @@ -895,17 +867,14 @@ static s32 e1000_update_nvm_checksum_825 > =20 > for (i =3D 0; i < E1000_FLASH_UPDATES; i++) { > msec_delay(1); > - if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD) =3D=3D 0) > + if (!(E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_FLUPD)) > break; > } > =20 > - if (i =3D=3D E1000_FLASH_UPDATES) { > - ret_val =3D -E1000_ERR_NVM; > - goto out; > - } > + if (i =3D=3D E1000_FLASH_UPDATES) > + return -E1000_ERR_NVM; > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -944,19 +913,17 @@ static s32 e1000_write_nvm_eewr_82571(st > { > struct e1000_nvm_info *nvm =3D &hw->nvm; > u32 i, eewr =3D 0; > - s32 ret_val =3D 0; > + s32 ret_val =3D E1000_SUCCESS; > =20 > DEBUGFUNC("e1000_write_nvm_eewr_82571"); > =20 > - /* > - * A check for invalid values: offset too large, too many words, > + /* A check for invalid values: offset too large, too many words, > * and not enough words. > */ > if ((offset >=3D nvm->word_size) || (words > (nvm->word_size - offset))= || > (words =3D=3D 0)) { > DEBUGOUT("nvm parameter(s) out of bounds\n"); > - ret_val =3D -E1000_ERR_NVM; > - goto out; > + return -E1000_ERR_NVM; > } > =20 > for (i =3D 0; i < words; i++) { > @@ -975,7 +942,6 @@ static s32 e1000_write_nvm_eewr_82571(st > break; > } > =20 > -out: > return ret_val; > } > =20 > @@ -988,7 +954,6 @@ out: > static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw) > { > s32 timeout =3D PHY_CFG_TIMEOUT; > - s32 ret_val =3D E1000_SUCCESS; > =20 > DEBUGFUNC("e1000_get_cfg_done_82571"); > =20 > @@ -1001,12 +966,10 @@ static s32 e1000_get_cfg_done_82571(stru > } > if (!timeout) { > DEBUGOUT("MNG configuration cycle has not completed.\n"); > - ret_val =3D -E1000_ERR_RESET; > - goto out; > + return -E1000_ERR_RESET; > } > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -1023,39 +986,40 @@ out: > static s32 e1000_set_d0_lplu_state_82571(struct e1000_hw *hw, bool activ= e) > { > struct e1000_phy_info *phy =3D &hw->phy; > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > u16 data; > =20 > DEBUGFUNC("e1000_set_d0_lplu_state_82571"); > =20 > if (!(phy->ops.read_reg)) > - goto out; > + return E1000_SUCCESS; > =20 > ret_val =3D phy->ops.read_reg(hw, IGP02E1000_PHY_POWER_MGMT, &data); > if (ret_val) > - goto out; > + return ret_val; > =20 > if (active) { > data |=3D IGP02E1000_PM_D0_LPLU; > ret_val =3D phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, > data); > if (ret_val) > - goto out; > + return ret_val; > =20 > /* When LPLU is enabled, we should disable SmartSpeed */ > ret_val =3D phy->ops.read_reg(hw, IGP01E1000_PHY_PORT_CONFIG, > &data); > + if (ret_val) > + return ret_val; > data &=3D ~IGP01E1000_PSCFR_SMART_SPEED; > ret_val =3D phy->ops.write_reg(hw, IGP01E1000_PHY_PORT_CONFIG, > data); > if (ret_val) > - goto out; > + return ret_val; > } else { > data &=3D ~IGP02E1000_PM_D0_LPLU; > ret_val =3D phy->ops.write_reg(hw, IGP02E1000_PHY_POWER_MGMT, > data); > - /* > - * LPLU and SmartSpeed are mutually exclusive. LPLU is used > + /* LPLU and SmartSpeed are mutually exclusive. LPLU is used > * during Dx states where the power conservation is most > * important. During driver activity we should enable > * SmartSpeed, so performance is maintained. > @@ -1065,32 +1029,31 @@ static s32 e1000_set_d0_lplu_state_82571 > IGP01E1000_PHY_PORT_CONFIG, > &data); > if (ret_val) > - goto out; > + return ret_val; > =20 > data |=3D IGP01E1000_PSCFR_SMART_SPEED; > ret_val =3D phy->ops.write_reg(hw, > IGP01E1000_PHY_PORT_CONFIG, > data); > if (ret_val) > - goto out; > + return ret_val; > } else if (phy->smart_speed =3D=3D e1000_smart_speed_off) { > ret_val =3D phy->ops.read_reg(hw, > IGP01E1000_PHY_PORT_CONFIG, > &data); > if (ret_val) > - goto out; > + return ret_val; > =20 > data &=3D ~IGP01E1000_PSCFR_SMART_SPEED; > ret_val =3D phy->ops.write_reg(hw, > IGP01E1000_PHY_PORT_CONFIG, > data); > if (ret_val) > - goto out; > + return ret_val; > } > } > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -1101,13 +1064,12 @@ out: > **/ > static s32 e1000_reset_hw_82571(struct e1000_hw *hw) > { > - u32 ctrl, ctrl_ext; > + u32 ctrl, ctrl_ext, eecd, tctl; > s32 ret_val; > =20 > DEBUGFUNC("e1000_reset_hw_82571"); > =20 > - /* > - * Prevent the PCI-E bus from sticking if there is no TLP connection > + /* Prevent the PCI-E bus from sticking if there is no TLP connection > * on the last TLP read/write transaction when MAC is reset. > */ > ret_val =3D e1000_disable_pcie_master_generic(hw); > @@ -1118,13 +1080,14 @@ static s32 e1000_reset_hw_82571(struct e > E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff); > =20 > E1000_WRITE_REG(hw, E1000_RCTL, 0); > - E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP); > + tctl =3D E1000_READ_REG(hw, E1000_TCTL); > + tctl &=3D ~E1000_TCTL_EN; > + E1000_WRITE_REG(hw, E1000_TCTL, tctl); > E1000_WRITE_FLUSH(hw); > =20 > msec_delay(10); > =20 > - /* > - * Must acquire the MDIO ownership before MAC reset. > + /* Must acquire the MDIO ownership before MAC reset. > * Ownership defaults to firmware after a reset. > */ > switch (hw->mac.type) { > @@ -1167,15 +1130,23 @@ static s32 e1000_reset_hw_82571(struct e > ret_val =3D e1000_get_auto_rd_done_generic(hw); > if (ret_val) > /* We don't want to continue accessing MAC registers. */ > - goto out; > + return ret_val; > =20 > - /* > - * Phy configuration from NVM just starts after EECD_AUTO_RD is set. > + /* Phy configuration from NVM just starts after EECD_AUTO_RD is set. > * Need to wait for Phy configuration completion before accessing > * NVM and Phy. > */ > =20 > switch (hw->mac.type) { > + case e1000_82571: > + case e1000_82572: > + /* REQ and GNT bits need to be cleared when using AUTO_RD > + * to access the EEPROM. > + */ > + eecd =3D E1000_READ_REG(hw, E1000_EECD); > + eecd &=3D ~(E1000_EECD_REQ | E1000_EECD_GNT); > + E1000_WRITE_REG(hw, E1000_EECD, eecd); > + break; > case e1000_82573: > case e1000_82574: > case e1000_82583: > @@ -1193,7 +1164,7 @@ static s32 e1000_reset_hw_82571(struct e > /* Install any alternate MAC address into RAR0 */ > ret_val =3D e1000_check_alt_mac_addr_generic(hw); > if (ret_val) > - goto out; > + return ret_val; > =20 > e1000_set_laa_state_82571(hw, TRUE); > } > @@ -1202,8 +1173,7 @@ static s32 e1000_reset_hw_82571(struct e > if (hw->phy.media_type =3D=3D e1000_media_type_internal_serdes) > hw->mac.serdes_link_state =3D e1000_serdes_link_down; > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -1225,16 +1195,15 @@ static s32 e1000_init_hw_82571(struct e1 > =20 > /* Initialize identification LED */ > ret_val =3D mac->ops.id_led_init(hw); > + /* An error is not fatal and we should not stop init due to this */ > if (ret_val) > DEBUGOUT("Error initializing identification LED\n"); > - /* This is not fatal and we should not stop init due to this */ > =20 > /* Disabling VLAN filtering */ > DEBUGOUT("Initializing the IEEE VLAN\n"); > mac->ops.clear_vfta(hw); > =20 > - /* Setup the receive address. */ > - /* > + /* Setup the receive address. > * If, however, a locally administered address was assigned to the > * 82571, we must reserve a RAR for it to work around an issue where > * resetting one port will reload the MAC on the other port. > @@ -1277,8 +1246,7 @@ static s32 e1000_init_hw_82571(struct e1 > break; > } > =20 > - /* > - * Clear all of the statistics registers (clear on read). It is > + /* Clear all of the statistics registers (clear on read). It is > * important that we do this after we have tried to establish link > * because the symbol error count will increment wildly if there > * is no link. > @@ -1377,8 +1345,7 @@ static void e1000_initialize_hw_bits_825 > E1000_WRITE_REG(hw, E1000_PBA_ECC, reg); > } > =20 > - /* > - * Workaround for hardware errata. > + /* Workaround for hardware errata. > * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572 > */ > if ((hw->mac.type =3D=3D e1000_82571) || > @@ -1388,6 +1355,15 @@ static void e1000_initialize_hw_bits_825 > E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg); > } > =20 > + /* Disable IPv6 extension header parsing because some malformed > + * IPv6 headers can hang the Rx. > + */ > + if (hw->mac.type <=3D e1000_82573) { > + reg =3D E1000_READ_REG(hw, E1000_RFCTL); > + reg |=3D (E1000_RFCTL_IPV6_EX_DIS | E1000_RFCTL_NEW_IPV6_EXT_DIS); > + E1000_WRITE_REG(hw, E1000_RFCTL, reg); > + } > + > /* PCI-Ex Control Registers */ > switch (hw->mac.type) { > case e1000_82574: > @@ -1396,8 +1372,7 @@ static void e1000_initialize_hw_bits_825 > reg |=3D (1 << 22); > E1000_WRITE_REG(hw, E1000_GCR, reg); > =20 > - /* > - * Workaround for hardware errata. > + /* Workaround for hardware errata. > * apply workaround for hardware errata documented in errata > * docs Fixes issue where some error prone or unreliable PCIe > * completions are occurring, particularly with ASPM enabled. > @@ -1435,25 +1410,25 @@ static void e1000_clear_vfta_82571(struc > case e1000_82574: > case e1000_82583: > if (hw->mng_cookie.vlan_id !=3D 0) { > - /* > - * The VFTA is a 4096b bit-field, each identifying > + /* The VFTA is a 4096b bit-field, each identifying > * a single VLAN ID. The following operations > * determine which 32b entry (i.e. offset) into the > * array we want to set the VLAN ID (i.e. bit) of > * the manageability unit. > */ > vfta_offset =3D (hw->mng_cookie.vlan_id >> > - E1000_VFTA_ENTRY_SHIFT) & E1000_VFTA_ENTRY_MASK; > - vfta_bit_in_reg =3D 1 << (hw->mng_cookie.vlan_id & > - E1000_VFTA_ENTRY_BIT_SHIFT_MASK); > + E1000_VFTA_ENTRY_SHIFT) & > + E1000_VFTA_ENTRY_MASK; > + vfta_bit_in_reg =3D > + 1 << (hw->mng_cookie.vlan_id & > + E1000_VFTA_ENTRY_BIT_SHIFT_MASK); > } > break; > default: > break; > } > for (offset =3D 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) { > - /* > - * If the offset we want to clear is the same offset of the > + /* If the offset we want to clear is the same offset of the > * manageability VLAN ID, then clear all bits except that of > * the manageability unit. > */ > @@ -1495,8 +1470,7 @@ static s32 e1000_led_on_82574(struct e10 > =20 > ctrl =3D hw->mac.ledctl_mode2; > if (!(E1000_STATUS_LU & E1000_READ_REG(hw, E1000_STATUS))) { > - /* > - * If no link, then turn LED on by setting the invert bit > + /* If no link, then turn LED on by setting the invert bit > * for each LED that's "on" (0x0E) in ledctl_mode2. > */ > for (i =3D 0; i < 4; i++) > @@ -1519,30 +1493,28 @@ bool e1000_check_phy_82574(struct e1000_ > { > u16 status_1kbt =3D 0; > u16 receive_errors =3D 0; > - bool phy_hung =3D FALSE; > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > =20 > DEBUGFUNC("e1000_check_phy_82574"); > =20 > - /* > - * Read PHY Receive Error counter first, if its is max - all F's then > + /* Read PHY Receive Error counter first, if its is max - all F's then > * read the Base1000T status register If both are max then PHY is hung. > */ > ret_val =3D hw->phy.ops.read_reg(hw, E1000_RECEIVE_ERROR_COUNTER, > &receive_errors); > if (ret_val) > - goto out; > + return FALSE; > if (receive_errors =3D=3D E1000_RECEIVE_ERROR_MAX) { > ret_val =3D hw->phy.ops.read_reg(hw, E1000_BASE1000T_STATUS, > &status_1kbt); > if (ret_val) > - goto out; > + return FALSE; > if ((status_1kbt & E1000_IDLE_ERROR_COUNT_MASK) =3D=3D > E1000_IDLE_ERROR_COUNT_MASK) > - phy_hung =3D TRUE; > + return TRUE; > } > -out: > - return phy_hung; > + > + return FALSE; > } > =20 > =20 > @@ -1560,8 +1532,7 @@ static s32 e1000_setup_link_82571(struct > { > DEBUGFUNC("e1000_setup_link_82571"); > =20 > - /* > - * 82573 does not have a word in the NVM to determine > + /* 82573 does not have a word in the NVM to determine > * the default flow control setting, so we explicitly > * set it to full. > */ > @@ -1608,17 +1579,14 @@ static s32 e1000_setup_copper_link_82571 > ret_val =3D e1000_copper_link_setup_igp(hw); > break; > default: > - ret_val =3D -E1000_ERR_PHY; > + return -E1000_ERR_PHY; > break; > } > =20 > if (ret_val) > - goto out; > - > - ret_val =3D e1000_setup_copper_link_generic(hw); > + return ret_val; > =20 > -out: > - return ret_val; > + return e1000_setup_copper_link_generic(hw); > } > =20 > /** > @@ -1635,8 +1603,7 @@ static s32 e1000_setup_fiber_serdes_link > switch (hw->mac.type) { > case e1000_82571: > case e1000_82572: > - /* > - * If SerDes loopback mode is entered, there is no form > + /* If SerDes loopback mode is entered, there is no form > * of reset to take the adapter out of that mode. So we > * have to explicitly take the adapter out of loopback > * mode. This prevents drivers from twiddling their thumbs > @@ -1685,16 +1652,17 @@ static s32 e1000_check_for_serdes_link_8 > =20 > ctrl =3D E1000_READ_REG(hw, E1000_CTRL); > status =3D E1000_READ_REG(hw, E1000_STATUS); > + E1000_READ_REG(hw, E1000_RXCW); > + /* SYNCH bit and IV bit are sticky */ > + usec_delay(10); > rxcw =3D E1000_READ_REG(hw, E1000_RXCW); > =20 > if ((rxcw & E1000_RXCW_SYNCH) && !(rxcw & E1000_RXCW_IV)) { > - > /* Receiver is synchronized with no invalid bits. */ > switch (mac->serdes_link_state) { > case e1000_serdes_link_autoneg_complete: > if (!(status & E1000_STATUS_LU)) { > - /* > - * We have lost link, retry autoneg before > + /* We have lost link, retry autoneg before > * reporting link failure > */ > mac->serdes_link_state =3D > @@ -1707,15 +1675,12 @@ static s32 e1000_check_for_serdes_link_8 > break; > =20 > case e1000_serdes_link_forced_up: > - /* > - * If we are receiving /C/ ordered sets, re-enable > + /* If we are receiving /C/ ordered sets, re-enable > * auto-negotiation in the TXCW register and disable > * forced link in the Device Control register in an > * attempt to auto-negotiate with our link partner. > - * If the partner code word is null, stop forcing > - * and restart auto negotiation. > */ > - if ((rxcw & E1000_RXCW_C) || !(rxcw & E1000_RXCW_CW)) { > + if (rxcw & E1000_RXCW_C) { > /* Enable autoneg, and unforce link up */ > E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw); > E1000_WRITE_REG(hw, E1000_CTRL, > @@ -1731,8 +1696,7 @@ static s32 e1000_check_for_serdes_link_8 > =20 > case e1000_serdes_link_autoneg_progress: > if (rxcw & E1000_RXCW_C) { > - /* > - * We received /C/ ordered sets, meaning the > + /* We received /C/ ordered sets, meaning the > * link partner has autonegotiated, and we can > * trust the Link Up (LU) status bit. > */ > @@ -1748,8 +1712,7 @@ static s32 e1000_check_for_serdes_link_8 > DEBUGOUT("AN_PROG -> DOWN\n"); > } > } else { > - /* > - * The link partner did not autoneg. > + /* The link partner did not autoneg. > * Force link up and full duplex, and change > * state to forced. > */ > @@ -1774,8 +1737,7 @@ static s32 e1000_check_for_serdes_link_8 > =20 > case e1000_serdes_link_down: > default: > - /* > - * The link was down but the receiver has now gained > + /* The link was down but the receiver has now gained > * valid sync, so lets see if we can bring the link > * up. > */ > @@ -1794,17 +1756,18 @@ static s32 e1000_check_for_serdes_link_8 > mac->serdes_link_state =3D e1000_serdes_link_down; > DEBUGOUT("ANYSTATE -> DOWN\n"); > } else { > - /* > - * Check several times, if Sync and Config > - * both are consistently 1 then simply ignore > - * the Invalid bit and restart Autoneg > + /* Check several times, if SYNCH bit and CONFIG > + * bit both are consistently 1 then simply ignore > + * the IV bit and restart Autoneg > */ > for (i =3D 0; i < AN_RETRY_COUNT; i++) { > usec_delay(10); > rxcw =3D E1000_READ_REG(hw, E1000_RXCW); > - if ((rxcw & E1000_RXCW_IV) && > - !((rxcw & E1000_RXCW_SYNCH) && > - (rxcw & E1000_RXCW_C))) { > + if ((rxcw & E1000_RXCW_SYNCH) && > + (rxcw & E1000_RXCW_C)) > + continue; > + > + if (rxcw & E1000_RXCW_IV) { > mac->serdes_has_link =3D FALSE; > mac->serdes_link_state =3D > e1000_serdes_link_down; > @@ -1845,7 +1808,7 @@ static s32 e1000_valid_led_default_82571 > ret_val =3D hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); > if (ret_val) { > DEBUGOUT("NVM Read Error\n"); > - goto out; > + return ret_val; > } > =20 > switch (hw->mac.type) { > @@ -1862,8 +1825,7 @@ static s32 e1000_valid_led_default_82571 > break; > } > =20 > -out: > - return ret_val; > + return E1000_SUCCESS; > } > =20 > /** > @@ -1900,15 +1862,14 @@ void e1000_set_laa_state_82571(struct e1 > =20 > /* If workaround is activated... */ > if (state) > - /* > - * Hold a copy of the LAA in RAR[14] This is done so that > + /* Hold a copy of the LAA in RAR[14] This is done so that > * between the time RAR[0] gets clobbered and the time it > * gets fixed, the actual LAA is in one of the RARs and no > * incoming packets directed to this port are dropped. > * Eventually the LAA will be in RAR[0] and RAR[14]. > */ > - e1000_rar_set_generic(hw, hw->mac.addr, > - hw->mac.rar_entry_count - 1); > + hw->mac.ops.rar_set(hw, hw->mac.addr, > + hw->mac.rar_entry_count - 1); > return; > } > =20 > @@ -1925,25 +1886,23 @@ void e1000_set_laa_state_82571(struct e1 > static s32 e1000_fix_nvm_checksum_82571(struct e1000_hw *hw) > { > struct e1000_nvm_info *nvm =3D &hw->nvm; > - s32 ret_val =3D E1000_SUCCESS; > + s32 ret_val; > u16 data; > =20 > DEBUGFUNC("e1000_fix_nvm_checksum_82571"); > =20 > if (nvm->type !=3D e1000_nvm_flash_hw) > - goto out; > + return E1000_SUCCESS; > =20 > - /* > - * Check bit 4 of word 10h. If it is 0, firmware is done updating > + /* Check bit 4 of word 10h. If it is 0, firmware is done updating > * 10h-12h. Checksum may need to be fixed. > */ >=20 > *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** > _______________________________________________ > svn-src-stable-8@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/svn-src-stable-8 > To unsubscribe, send any mail to "svn-src-stable-8-unsubscribe@freebsd.or= g" --f0KYrhQ4vYSV2aJu Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (FreeBSD) iQEcBAEBCAAGBQJRLr+lAAoJEFJPDDeguUaj+8MH/1NbMjgLJcaSRJqnlVrqbtlC uRAtZB12ImzxshbSxaj3ZuWsAQ/5Sg+J6nJwB5iKyFO7jkoCuDVGi5XJraGHdXWM RSNsJPrt5w9Hk0JDHMZkbvJaMrvOYUGT9Iz1aID399Zn5GdoWsrGeDPSXwunBobz mRR4RuBBZLawDnMSxp7LwkUp2zlVIY578hfw9GskTAWDU4ADrbzr7eHgmbBZ48fJ Jd+QNrwfRKPhLiFjrcSaa5YbVXCp5kDumL5Y34FF99H4Rq91yS+UkPu4Ait6Nooq xA0X24FFfi8+tnpbK04MNdWfH+SxznQV79eCJ9JDZcMl1kV0EcT/uCtCg7bMGD8= =oUZH -----END PGP SIGNATURE----- --f0KYrhQ4vYSV2aJu--