net/nfp: expand device info get
authorHeinrich Kuhn <heinrich.kuhn@netronome.com>
Wed, 2 Sep 2020 11:52:27 +0000 (13:52 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:11 +0000 (18:55 +0200)
Report Rx and Tx descriptor related limitations in the nfp dev_info_get
callback function. This commit also adds NFP_ALIGN_RING_DESC to replace
a static integer value used during rx/tx queue setups to validate
descriptor alignment.

Cc: stable@dpdk.org
Signed-off-by: Heinrich Kuhn <heinrich.kuhn@netronome.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
drivers/net/nfp/nfp_net.c
drivers/net/nfp/nfp_net_pmd.h

index 2d20d4c..f5e4cd3 100644 (file)
@@ -1250,6 +1250,20 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
                .tx_rs_thresh = DEFAULT_TX_RSBIT_THRESH,
        };
 
+       dev_info->rx_desc_lim = (struct rte_eth_desc_lim) {
+               .nb_max = NFP_NET_MAX_RX_DESC,
+               .nb_min = NFP_NET_MIN_RX_DESC,
+               .nb_align = NFP_ALIGN_RING_DESC,
+       };
+
+       dev_info->tx_desc_lim = (struct rte_eth_desc_lim) {
+               .nb_max = NFP_NET_MAX_TX_DESC,
+               .nb_min = NFP_NET_MIN_TX_DESC,
+               .nb_align = NFP_ALIGN_RING_DESC,
+               .nb_seg_max = NFP_TX_MAX_SEG,
+               .nb_mtu_seg_max = NFP_TX_MAX_MTU_SEG,
+       };
+
        dev_info->flow_type_rss_offloads = ETH_RSS_IPV4 |
                                           ETH_RSS_NONFRAG_IPV4_TCP |
                                           ETH_RSS_NONFRAG_IPV4_UDP |
@@ -1513,15 +1527,17 @@ nfp_net_rx_queue_setup(struct rte_eth_dev *dev,
        const struct rte_memzone *tz;
        struct nfp_net_rxq *rxq;
        struct nfp_net_hw *hw;
+       uint32_t rx_desc_sz;
 
        hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
        PMD_INIT_FUNC_TRACE();
 
        /* Validating number of descriptors */
-       if (((nb_desc * sizeof(struct nfp_net_rx_desc)) % 128) != 0 ||
-           (nb_desc > NFP_NET_MAX_RX_DESC) ||
-           (nb_desc < NFP_NET_MIN_RX_DESC)) {
+       rx_desc_sz = nb_desc * sizeof(struct nfp_net_rx_desc);
+       if (rx_desc_sz % NFP_ALIGN_RING_DESC != 0 ||
+           nb_desc > NFP_NET_MAX_RX_DESC ||
+           nb_desc < NFP_NET_MIN_RX_DESC) {
                PMD_DRV_LOG(ERR, "Wrong nb_desc value");
                return -EINVAL;
        }
@@ -1660,15 +1676,17 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
        struct nfp_net_txq *txq;
        uint16_t tx_free_thresh;
        struct nfp_net_hw *hw;
+       uint32_t tx_desc_sz;
 
        hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
 
        PMD_INIT_FUNC_TRACE();
 
        /* Validating number of descriptors */
-       if (((nb_desc * sizeof(struct nfp_net_tx_desc)) % 128) != 0 ||
-           (nb_desc > NFP_NET_MAX_TX_DESC) ||
-           (nb_desc < NFP_NET_MIN_TX_DESC)) {
+       tx_desc_sz = nb_desc * sizeof(struct nfp_net_tx_desc);
+       if (tx_desc_sz % NFP_ALIGN_RING_DESC != 0 ||
+           nb_desc > NFP_NET_MAX_TX_DESC ||
+           nb_desc < NFP_NET_MIN_TX_DESC) {
                PMD_DRV_LOG(ERR, "Wrong nb_desc value");
                return -EINVAL;
        }
index cb2d19a..1295c59 100644 (file)
@@ -33,6 +33,12 @@ struct nfp_net_adapter;
 #define NFP_NET_MAX_RX_DESC (32 * 1024)
 #define NFP_NET_MIN_RX_DESC 64
 
+/* Descriptor alignment */
+#define NFP_ALIGN_RING_DESC 128
+
+#define NFP_TX_MAX_SEG     UINT8_MAX
+#define NFP_TX_MAX_MTU_SEG 8
+
 /* Bar allocation */
 #define NFP_NET_CRTL_BAR        0
 #define NFP_NET_TX_BAR          2