From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ferruh Yigit Subject: Re: [PATCH 27/29] net/ixgbe/base: add write flush required by Inphi Date: Mon, 5 Dec 2016 19:40:32 +0000 Message-ID: <10604e95-4011-00d4-cc4f-42bf0feacf3d@intel.com> References: <1480833100-48545-1-git-send-email-wei.dai@intel.com> <1480833100-48545-27-git-send-email-wei.dai@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org To: Wei Dai , helin.zhang@intel.com, konstantin.ananyev@intel.com Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id AE3F52BCD for ; Mon, 5 Dec 2016 20:40:56 +0100 (CET) In-Reply-To: <1480833100-48545-27-git-send-email-wei.dai@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 12/4/2016 6:31 AM, Wei Dai wrote: > This patch updates Inphi configuration to flush the register write with Do we really need to mention from Inphi here? If so, can you please explain what it is? > a reg read. Inphi is configured in ixgbe_setup_mac_link_sfp_x550a. > The Inphy setup flow has been updated to read configuration reg, write > only linear/non-linear, and then read (write flush). Also patch does [1] seems not mentioned in the commit log, can you please add information for it? [1] > + reg_phy_ext &= ~((IXGBE_CS4227_EDC_MODE_CX1 << 1) | > + (IXGBE_CS4227_EDC_MODE_SR << 1)); > > Signed-off-by: Wei Dai > --- > drivers/net/ixgbe/base/ixgbe_x550.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c b/drivers/net/ixgbe/base/ixgbe_x550.c > index 4a98530..a57ba74 100644 > --- a/drivers/net/ixgbe/base/ixgbe_x550.c > +++ b/drivers/net/ixgbe/base/ixgbe_x550.c > @@ -2834,12 +2834,26 @@ s32 ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw, > > /* Configure CS4227/CS4223 LINE side to proper mode. */ > reg_slice = IXGBE_CS4227_LINE_SPARE24_LSB + slice_offset; > + > + ret_val = hw->phy.ops.read_reg(hw, reg_slice, > + IXGBE_MDIO_ZERO_DEV_TYPE, ®_phy_ext); > + > + if (ret_val != IXGBE_SUCCESS) > + return ret_val; > + > + reg_phy_ext &= ~((IXGBE_CS4227_EDC_MODE_CX1 << 1) | > + (IXGBE_CS4227_EDC_MODE_SR << 1)); > + > if (setup_linear) > reg_phy_ext = (IXGBE_CS4227_EDC_MODE_CX1 << 1) | 0x1; > else > reg_phy_ext = (IXGBE_CS4227_EDC_MODE_SR << 1) | 0x1; > ret_val = hw->phy.ops.write_reg(hw, reg_slice, > IXGBE_MDIO_ZERO_DEV_TYPE, reg_phy_ext); > + > + /* Flush previous write with a read */ > + ret_val = hw->phy.ops.read_reg(hw, reg_slice, > + IXGBE_MDIO_ZERO_DEV_TYPE, ®_phy_ext); > } > return ret_val; > } >