From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Qiu, Michael" Subject: Re: [PATCH 4/6] fm10k: Fix issue that MAC addr can't be set to silicon Date: Fri, 12 Jun 2015 02:03:48 +0000 Message-ID: <533710CFB86FA344BFBF2D6802E602860469B225@SHSMSX101.ccr.corp.intel.com> References: <1432887044-24777-1-git-send-email-jing.d.chen@intel.com> <1432887044-24777-5-git-send-email-jing.d.chen@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "He, Shaopeng" To: "Chen, Jing D" , "dev@dpdk.org" Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 9789AADA7 for ; Fri, 12 Jun 2015 04:03:54 +0200 (CEST) Content-Language: en-US List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Tested-by: Michael Qiu >=0A= =0A= =0A= =0A= On 5/29/2015 4:11 PM, Chen, Jing D wrote:=0A= > From: "Chen Jing D(Mark)" =0A= >=0A= > In fm10k, PF driver needs to communicate with switch through=0A= > mailbox if it needs to add/delete MAC address.=0A= > This fix will validate if switch is ready before going forward.=0A= > Then, it is necessary to acquire LPORT_MAP info after issuing=0A= > MAC addr request to switch.=0A= >=0A= > Signed-off-by: Chen Jing D(Mark) =0A= > ---=0A= > drivers/net/fm10k/fm10k_ethdev.c | 34 +++++++++++++++++++++++++++++++-= --=0A= > 1 files changed, 31 insertions(+), 3 deletions(-)=0A= >=0A= > diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_e= thdev.c=0A= > index 19e718b..dedfbb4 100644=0A= > --- a/drivers/net/fm10k/fm10k_ethdev.c=0A= > +++ b/drivers/net/fm10k/fm10k_ethdev.c=0A= > @@ -45,6 +45,10 @@=0A= > #define FM10K_MBXLOCK_DELAY_US 20=0A= > #define UINT64_LOWER_32BITS_MASK 0x00000000ffffffffULL=0A= > =0A= > +/* Max try times to aquire switch status */=0A= > +#define MAX_QUERY_SWITCH_STATE_TIMES 10=0A= > +/* Wait interval to get switch status */=0A= > +#define WAIT_SWITCH_MSG_US 100000=0A= > /* Number of chars per uint32 type */=0A= > #define CHARS_PER_UINT32 (sizeof(uint32_t))=0A= > #define BIT_MASK_PER_UINT32 ((1 << CHARS_PER_UINT32) - 1)=0A= > @@ -1802,6 +1806,32 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)=0A= > fm10k_dev_enable_intr_vf(dev);=0A= > }=0A= > =0A= > + /* Enable uio intr after callback registered */=0A= > + rte_intr_enable(&(dev->pci_dev->intr_handle));=0A= > +=0A= > + hw->mac.ops.update_int_moderator(hw);=0A= > +=0A= > + /* Make sure Switch Manager is ready before going forward. */=0A= > + if (hw->mac.type =3D=3D fm10k_mac_pf) {=0A= > + int switch_ready =3D 0;=0A= > + int i;=0A= > +=0A= > + for (i =3D 0; i < MAX_QUERY_SWITCH_STATE_TIMES; i++) {=0A= > + fm10k_mbx_lock(hw);=0A= > + hw->mac.ops.get_host_state(hw, &switch_ready);=0A= > + fm10k_mbx_unlock(hw);=0A= > + if (switch_ready)=0A= > + break;=0A= > + /* Delay some time to acquire async LPORT_MAP info. */=0A= > + rte_delay_us(WAIT_SWITCH_MSG_US);=0A= > + }=0A= > +=0A= > + if (switch_ready =3D=3D 0) {=0A= > + PMD_INIT_LOG(ERR, "switch is not ready");=0A= > + return -1;=0A= > + }=0A= > + }=0A= > +=0A= > /*=0A= > * Below function will trigger operations on mailbox, acquire lock to= =0A= > * avoid race condition from interrupt handler. Operations on mailbox= =0A= > @@ -1811,7 +1841,7 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)=0A= > */=0A= > fm10k_mbx_lock(hw);=0A= > /* Enable port first */=0A= > - hw->mac.ops.update_lport_state(hw, 0, 0, 1);=0A= > + hw->mac.ops.update_lport_state(hw, hw->mac.dglort_map, 1, 1);=0A= > =0A= > /* Update default vlan */=0A= > hw->mac.ops.update_vlan(hw, hw->mac.default_vid, 0, true);=0A= > @@ -1831,8 +1861,6 @@ eth_fm10k_dev_init(struct rte_eth_dev *dev)=0A= > =0A= > fm10k_mbx_unlock(hw);=0A= > =0A= > - /* enable uio intr after callback registered */=0A= > - rte_intr_enable(&(dev->pci_dev->intr_handle));=0A= > =0A= > return 0;=0A= > }=0A= =0A=