From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 874FDA046B for ; Wed, 21 Aug 2019 08:17:06 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 87FDE1BEE4; Wed, 21 Aug 2019 08:17:05 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 6CA251BED1 for ; Wed, 21 Aug 2019 08:17:03 +0200 (CEST) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Aug 2019 23:17:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,411,1559545200"; d="scan'208";a="262395472" Received: from yexl-server.sh.intel.com (HELO localhost) ([10.67.117.5]) by orsmga001.jf.intel.com with ESMTP; 20 Aug 2019 23:17:01 -0700 Date: Wed, 21 Aug 2019 14:15:48 +0800 From: Ye Xiaolong To: Andy Pei Cc: dev@dpdk.org, rosen.xu@intel.com, tianfei.zhang@intel.com Message-ID: <20190821061548.GA87622@intel.com> References: <1565255540-308917-1-git-send-email-andy.pei@intel.com> <1565280090-344032-1-git-send-email-andy.pei@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1565280090-344032-1-git-send-email-andy.pei@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-dev] [PATCH v2] net/ipn3ke: setup MTU when HW init X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list 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 08/09, Andy Pei wrote: >set up mtu to the minimun in tx mtu, rx mtu and IPN3KE_MAC_FRAME_SIZE_MAX. > >Signed-off-by: Andy Pei >--- >v2: >* modify low bound and upper bound. > > drivers/net/ipn3ke/ipn3ke_ethdev.c | 97 ++++++++++++++++++++++++++++++++++++++ > drivers/net/ipn3ke/ipn3ke_ethdev.h | 19 ++++++++ > 2 files changed, 116 insertions(+) > >diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.c b/drivers/net/ipn3ke/ipn3ke_ethdev.c >index c226d63..1a6c217 100644 >--- a/drivers/net/ipn3ke/ipn3ke_ethdev.c >+++ b/drivers/net/ipn3ke/ipn3ke_ethdev.c >@@ -209,6 +209,100 @@ > return 0; > } > >+static void ipn3ke_10G_mtu_setup >+(struct ipn3ke_hw *hw, uint32_t mac_num, uint32_t eth_group_sel) The dpdk convention is: static void ipn3ke_10G_mtu_setup(xxx) >+{ >+ uint32_t tx; >+ uint32_t rx; >+ uint32_t tmp; >+ >+ (*hw->f_mac_read)(hw, >+ &tx, >+ IPN3KE_10G_TX_FRAME_MAXLENGTH, >+ mac_num, >+ eth_group_sel); Need to verify whether hw->f_mac_read is NULL or not. >+ >+ (*hw->f_mac_read)(hw, >+ &rx, >+ IPN3KE_10G_RX_FRAME_MAXLENGTH, >+ mac_num, >+ eth_group_sel); >+ >+ tmp = (tx > rx) ? rx : tx; Can use RTE_MIN >+ if (tmp < RTE_ETHER_MIN_MTU) >+ tmp = RTE_ETHER_MIN_MTU; >+ if (tmp > IPN3KE_MAC_FRAME_SIZE_MAX - IPN3KE_ETH_OVERHEAD) >+ tmp = IPN3KE_MAC_FRAME_SIZE_MAX - IPN3KE_ETH_OVERHEAD; >+ >+ (*hw->f_mac_write)(hw, >+ tmp, >+ IPN3KE_10G_TX_FRAME_MAXLENGTH, >+ mac_num, >+ eth_group_sel); >+ >+ (*hw->f_mac_write)(hw, >+ tmp, >+ IPN3KE_10G_RX_FRAME_MAXLENGTH, >+ mac_num, >+ eth_group_sel); Need to check f_mac_write is not NULL before calling it. >+} >+ >+static void ipn3ke_25G_mtu_setup >+(struct ipn3ke_hw *hw, uint32_t mac_num, uint32_t eth_group_sel) >+{ >+ uint32_t tx; >+ uint32_t rx; >+ uint32_t tmp; >+ >+ (*hw->f_mac_read)(hw, >+ &tx, >+ IPN3KE_25G_MAX_TX_SIZE_CONFIG, >+ mac_num, >+ eth_group_sel); >+ >+ (*hw->f_mac_read)(hw, >+ &rx, >+ IPN3KE_25G_MAX_RX_SIZE_CONFIG, >+ mac_num, >+ eth_group_sel); >+ >+ tmp = (tx > rx) ? rx : tx; >+ if (tmp < RTE_ETHER_MIN_MTU) >+ tmp = RTE_ETHER_MIN_MTU; >+ if (tmp > IPN3KE_MAC_FRAME_SIZE_MAX - IPN3KE_ETH_OVERHEAD) >+ tmp = IPN3KE_MAC_FRAME_SIZE_MAX - IPN3KE_ETH_OVERHEAD; >+ >+ (*hw->f_mac_write)(hw, >+ tmp, >+ IPN3KE_25G_MAX_TX_SIZE_CONFIG, >+ mac_num, >+ eth_group_sel); >+ >+ (*hw->f_mac_write)(hw, >+ tmp, >+ IPN3KE_25G_MAX_RX_SIZE_CONFIG, >+ mac_num, >+ eth_group_sel); >+} >+ ipn3ke_10G_mtu_setup and ipn3ke_25G_mtu_setup share most of the code, please try to refactor to avoid duplicate code. >+static void >+ipn3ke_mtu_setup(struct ipn3ke_hw *hw) >+{ >+ int i; >+ if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) { >+ for (i = 0; i < hw->port_num; i++) { >+ ipn3ke_10G_mtu_setup(hw, i, 0); >+ ipn3ke_10G_mtu_setup(hw, i, 1); >+ } >+ } else if (hw->retimer.mac_type == >+ IFPGA_RAWDEV_RETIMER_MAC_TYPE_25GE_25GAUI) { >+ for (i = 0; i < hw->port_num; i++) { >+ ipn3ke_25G_mtu_setup(hw, i, 0); >+ ipn3ke_25G_mtu_setup(hw, i, 1); >+ } >+ } >+} >+ > static int > ipn3ke_hw_init(struct rte_afu_device *afu_dev, > struct ipn3ke_hw *hw) >@@ -303,6 +397,9 @@ > } > } > >+ /* init mtu */ >+ ipn3ke_mtu_setup(hw); >+ > ret = rte_eth_switch_domain_alloc(&hw->switch_domain_id); > if (ret) > IPN3KE_AFU_PMD_WARN("failed to allocate switch domain for device %d", >diff --git a/drivers/net/ipn3ke/ipn3ke_ethdev.h b/drivers/net/ipn3ke/ipn3ke_ethdev.h >index c7b336b..6419da3 100644 >--- a/drivers/net/ipn3ke/ipn3ke_ethdev.h >+++ b/drivers/net/ipn3ke/ipn3ke_ethdev.h >@@ -654,6 +654,25 @@ static inline void _ipn3ke_indrct_write(struct ipn3ke_hw *hw, > #define IPN3KE_MAC_RX_FRAME_MAXLENGTH_MASK \ > IPN3KE_MASK(0xFFFF, IPN3KE_MAC_RX_FRAME_MAXLENGTH_SHIFT) > >+/* Additional Feature Register */ >+#define ADD_PHY_CTRL 0x0 >+#define PHY_RESET BIT(0) >+/* registers for 25G/40G mac */ >+#define MAC_CONFIG 0x310 >+#define MAC_RESET_MASK GENMASK(2, 0) >+ >+#define IPN3KE_MAX_MTU 0xffff >+ >+#define IPN3KE_25G_PHY_PMA_SLOOP 0x313 >+#define IPN3KE_25G_TX_FLOW_CTRL 0x640 >+#define IPN3KE_25G_MAX_TX_SIZE_CONFIG 0x407 >+#define IPN3KE_25G_MAX_RX_SIZE_CONFIG 0x506 >+ >+#define IPN3KE_10G_TX_PAUSE_FRAME_QUANTA 0x0042 >+#define IPN3KE_10G_TX_PAUSE_FRAME_HOLDOFF 0x0043 >+#define IPN3KE_10G_TX_FRAME_MAXLENGTH 0x002C >+#define IPN3KE_10G_RX_FRAME_MAXLENGTH 0x00AE >+ > #define IPN3KE_REGISTER_WIDTH 32 I saw some MACRO definitions are not used in this patch. And by the way, why there is no mtu_set ops for ipn3ke ethdev? Thanks, Xiaolong > > /*Bits[2:0]: Configuration of TX statistics counters: >-- >1.8.3.1 >