Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/113282 _apply patch failure_ Submitter: Jin Liu Date: Thursday, June 23 2022 02:26:15 Applied on: CommitID:69033e3b843c81c74bcdd5e678c896c1fe1535ef Apply patch set 113282-113294 failed: Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: /* unregister callback func from eal lib */ rte_intr_callback_unregister(pci_dev->intr_handle, nfp_net_dev_interrupt_handler, (void *)dev); /* * The ixgbe PMD disables the pcie master on the error: patch failed: drivers/net/nfp/nfp_ethdev.c:340 error: while searching for: struct nfp_pf_dev *pf_dev; struct nfp_net_hw *hw; struct rte_ether_addr *tmp_ether_addr; uint64_t tx_bar_off = 0, rx_bar_off = 0; uint32_t start_q; int stride = 4; int port = 0; error: patch failed: drivers/net/nfp/nfp_ethdev.c:388 error: while searching for: /* NFP can not handle DMA addresses requiring more than 40 bits */ if (rte_mem_check_dma_mask(40)) { RTE_LOG(ERR, PMD, "device %s can not be used:", pci_dev->device.name); RTE_LOG(ERR, PMD, "\trestricted dma mask to 40 bits!\n"); return -ENODEV; }; port = ((struct nfp_net_hw *)eth_dev->data->dev_private)->idx; if (port < 0 || port > 7) { error: patch failed: drivers/net/nfp/nfp_ethdev.c:404 error: while searching for: return -ENODEV; } /* Use PF array of physical ports to get pointer to * this specific port */ hw = pf_dev->ports[port]; PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " "NFP internal port number: %d", port, hw->nfp_idx); eth_dev->dev_ops = &nfp_net_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; error: patch failed: drivers/net/nfp/nfp_ethdev.c:416 error: while searching for: if (port == 0) { hw->ctrl_bar = pf_dev->ctrl_bar; } else { if (!pf_dev->ctrl_bar) return -ENODEV; /* Use port offset in pf ctrl_bar for this * ports control bar */ hw->ctrl_bar = pf_dev->ctrl_bar + (port * NFP_PF_CSR_SLICE_SIZE); } PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); error: patch failed: drivers/net/nfp/nfp_ethdev.c:456 error: while searching for: tmp_ether_addr = (struct rte_ether_addr *)&hw->mac_addr; if (!rte_is_valid_assigned_ether_addr(tmp_ether_addr)) { PMD_INIT_LOG(INFO, "Using random mac address for port %d", port); /* Using random mac addresses for VFs */ rte_eth_random_addr(&hw->mac_addr[0]); nfp_net_write_mac(hw, (uint8_t *)&hw->mac_addr); error: patch failed: drivers/net/nfp/nfp_ethdev.c:557 error: while searching for: if (rte_eal_process_type() == RTE_PROC_PRIMARY) { /* Registering LSC interrupt handler */ rte_intr_callback_register(pci_dev->intr_handle, nfp_net_dev_interrupt_handler, (void *)eth_dev); /* Telling the firmware about the LSC interrupt entry */ nn_cfg_writeb(hw, NFP_NET_CFG_LSC, NFP_NET_IRQ_LSC_IDX); /* Recording current stats counters values */ error: patch failed: drivers/net/nfp/nfp_ethdev.c:583 error: while searching for: } static int nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, struct nfp_eth_table *nfp_eth_table, struct nfp_hwinfo *hwinfo) { struct nfp_nsp *nsp; const char *nfp_fw_model; error: patch failed: drivers/net/nfp/nfp_ethdev.c:656 error: while searching for: if (nfp_eth_table->count == 0 || nfp_eth_table->count > 8) { PMD_DRV_LOG(ERR, "NFP ethernet table reports wrong ports: %u", nfp_eth_table->count); return -EIO; } PMD_DRV_LOG(INFO, "NFP ethernet port table reports %u ports", nfp_eth_table->count); PMD_DRV_LOG(INFO, "Port speed: %u", nfp_eth_table->ports[0].speed); error: patch failed: drivers/net/nfp/nfp_ethdev.c:675 error: while searching for: nfp_eth_table->ports[0].speed / 1000); nsp = nfp_nsp_open(cpp); if (!nsp) { PMD_DRV_LOG(ERR, "NFP error when obtaining NSP handle"); return -EIO; } error: patch failed: drivers/net/nfp/nfp_ethdev.c:689 error: while searching for: return err; } static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) { struct nfp_net_hw *hw; struct rte_eth_dev *eth_dev; struct nfp_eth_table *nfp_eth_table = NULL; int ret = 0; int i; nfp_eth_table = nfp_eth_read_ports(pf_dev->cpp); if (!nfp_eth_table) { PMD_INIT_LOG(ERR, "Error reading NFP ethernet table"); ret = -EIO; goto error; } /* Loop through all physical ports on PF */ error: patch failed: drivers/net/nfp/nfp_ethdev.c:701 error: while searching for: /* Allocate a eth_dev for this phyport */ eth_dev = rte_eth_dev_allocate(port_name); if (!eth_dev) { ret = -ENODEV; goto port_cleanup; } error: patch failed: drivers/net/nfp/nfp_ethdev.c:726 error: while searching for: /* Allocate memory for this phyport */ eth_dev->data->dev_private = rte_zmalloc_socket(port_name, sizeof(struct nfp_net_hw), RTE_CACHE_LINE_SIZE, numa_node); if (!eth_dev->data->dev_private) { ret = -ENOMEM; rte_eth_dev_release_port(eth_dev); goto port_cleanup; error: patch failed: drivers/net/nfp/nfp_ethdev.c:734 error: while searching for: * nfp_net_init */ ret = nfp_net_init(eth_dev); if (ret) { ret = -ENODEV; goto port_cleanup; error: patch failed: drivers/net/nfp/nfp_ethdev.c:759 error: while searching for: } eth_table_cleanup: free(nfp_eth_table); error: return ret; } static int nfp_pf_init(struct rte_pci_device *pci_dev) { struct nfp_pf_dev *pf_dev = NULL; struct nfp_cpp *cpp; struct nfp_hwinfo *hwinfo; struct nfp_rtsym_table *sym_tbl; struct nfp_eth_table *nfp_eth_table = NULL; char name[RTE_ETH_NAME_MAX_LEN]; int total_ports; int ret = -ENODEV; int err; if (!pci_dev) return ret; /* * When device bound to UIO, the device could be used, by mistake, error: patch failed: drivers/net/nfp/nfp_ethdev.c:782 error: while searching for: else cpp = nfp_cpp_from_device_name(pci_dev, 1); if (!cpp) { PMD_INIT_LOG(ERR, "A CPP handle can not be obtained"); ret = -EIO; goto error; } hwinfo = nfp_hwinfo_read(cpp); if (!hwinfo) { PMD_INIT_LOG(ERR, "Error reading hwinfo table"); ret = -EIO; goto error; } nfp_eth_table = nfp_eth_read_ports(cpp); if (!nfp_eth_table) { PMD_INIT_LOG(ERR, "Error reading NFP ethernet table"); ret = -EIO; goto hwinfo_cleanup; error: patch failed: drivers/net/nfp/nfp_ethdev.c:813 error: while searching for: /* Now the symbol table should be there */ sym_tbl = nfp_rtsym_table_read(cpp); if (!sym_tbl) { PMD_INIT_LOG(ERR, "Something is wrong with the firmware" " symbol table"); ret = -EIO; error: patch failed: drivers/net/nfp/nfp_ethdev.c:841 error: while searching for: /* Allocate memory for the PF "device" */ snprintf(name, sizeof(name), "nfp_pf%d", 0); pf_dev = rte_zmalloc(name, sizeof(*pf_dev), 0); if (!pf_dev) { ret = -ENOMEM; goto sym_tbl_cleanup; } error: patch failed: drivers/net/nfp/nfp_ethdev.c:865 error: while searching for: /* Map the symbol table */ pf_dev->ctrl_bar = nfp_rtsym_map(pf_dev->sym_tbl, "_pf0_net_bar0", pf_dev->total_phyports * 32768, &pf_dev->ctrl_area); if (!pf_dev->ctrl_bar) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for _pf0_net_ctrl_bar"); ret = -EIO; goto pf_cleanup; error: patch failed: drivers/net/nfp/nfp_ethdev.c:883 error: while searching for: /* configure access to tx/rx vNIC BARs */ pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, 0, 0, NFP_PCIE_QUEUE(0), NFP_QCP_QUEUE_AREA_SZ, &pf_dev->hwqueues_area); if (!pf_dev->hw_queues) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for net.qc"); ret = -EIO; goto ctrl_area_cleanup; error: patch failed: drivers/net/nfp/nfp_ethdev.c:895 error: while searching for: PMD_INIT_LOG(DEBUG, "tx/rx bar address: 0x%p", pf_dev->hw_queues); /* Initialize and prep physical ports now * This will loop through all physical ports */ ret = nfp_init_phyports(pf_dev); error: patch failed: drivers/net/nfp/nfp_ethdev.c:906 error: while searching for: * is no need to initialise the PF again. Only minimal work is required * here */ static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) { struct nfp_cpp *cpp; struct nfp_rtsym_table *sym_tbl; int total_ports; int i; int err; if (!pci_dev) return -ENODEV; /* error: patch failed: drivers/net/nfp/nfp_ethdev.c:941 error: while searching for: else cpp = nfp_cpp_from_device_name(pci_dev, 1); if (!cpp) { PMD_INIT_LOG(ERR, "A CPP handle can not be obtained"); return -EIO; } error: patch failed: drivers/net/nfp/nfp_ethdev.c:964 error: while searching for: * here so we have to read the number of ports from firmware */ sym_tbl = nfp_rtsym_table_read(cpp); if (!sym_tbl) { PMD_INIT_LOG(ERR, "Something is wrong with the firmware" " symbol table"); return -EIO; error: patch failed: drivers/net/nfp/nfp_ethdev.c:974 error: while searching for: snprintf(port_name, sizeof(port_name), "%s_port%d", pci_dev->device.name, i); PMD_DRV_LOG(DEBUG, "Secondary attaching to port %s", port_name); eth_dev = rte_eth_dev_attach_secondary(port_name); if (!eth_dev) { RTE_LOG(ERR, EAL, "secondary process attach failed, " "ethdev doesn't exist"); return -ENODEV; } eth_dev->process_private = cpp; error: patch failed: drivers/net/nfp/nfp_ethdev.c:989 error: while searching for: return 0; } static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *dev) { if (rte_eal_process_type() == RTE_PROC_PRIMARY) return nfp_pf_init(dev); error: patch failed: drivers/net/nfp/nfp_ethdev.c:1012 error: while searching for: }, }; static int nfp_pci_uninit(struct rte_eth_dev *eth_dev) { struct rte_pci_device *pci_dev; uint16_t port_id; error: patch failed: drivers/net/nfp/nfp_ethdev.c:1035 error: while searching for: return -ENOTSUP; } static int eth_nfp_pci_remove(struct rte_pci_device *pci_dev) { return rte_eth_dev_pci_generic_remove(pci_dev, nfp_pci_uninit); } error: patch failed: drivers/net/nfp/nfp_ethdev.c:1052 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: /* NFP can not handle DMA addresses requiring more than 40 bits */ if (rte_mem_check_dma_mask(40)) { RTE_LOG(ERR, PMD, "device %s can not be used:", pci_dev->device.name); RTE_LOG(ERR, PMD, "\trestricted dma mask to 40 bits!\n"); return -ENODEV; }; hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:296 Applying patch drivers/net/nfp/nfp_ethdev.c with 28 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Rejected hunk #6. Rejected hunk #7. Rejected hunk #8. Rejected hunk #9. Rejected hunk #10. Rejected hunk #11. Rejected hunk #12. Rejected hunk #13. Rejected hunk #14. Rejected hunk #15. Rejected hunk #16. Rejected hunk #17. Rejected hunk #18. Rejected hunk #19. Rejected hunk #20. Rejected hunk #21. Rejected hunk #22. Rejected hunk #23. Rejected hunk #24. Rejected hunk #25. Rejected hunk #26. Rejected hunk #27. Rejected hunk #28. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -340,8 +340,7 @@ nfp_net_close(struct rte_eth_dev *dev) /* unregister callback func from eal lib */ rte_intr_callback_unregister(pci_dev->intr_handle, - nfp_net_dev_interrupt_handler, - (void *)dev); + nfp_net_dev_interrupt_handler, (void *)dev); /* * The ixgbe PMD disables the pcie master on the @@ -388,8 +387,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev) struct nfp_pf_dev *pf_dev; struct nfp_net_hw *hw; struct rte_ether_addr *tmp_ether_addr; - - uint64_t tx_bar_off = 0, rx_bar_off = 0; + uint64_t rx_bar_off = 0; + uint64_t tx_bar_off = 0; uint32_t start_q; int stride = 4; int port = 0; @@ -404,11 +403,11 @@ nfp_net_init(struct rte_eth_dev *eth_dev) /* NFP can not handle DMA addresses requiring more than 40 bits */ if (rte_mem_check_dma_mask(40)) { - RTE_LOG(ERR, PMD, "device %s can not be used:", - pci_dev->device.name); - RTE_LOG(ERR, PMD, "\trestricted dma mask to 40 bits!\n"); + RTE_LOG(ERR, PMD, + "device %s can not be used: restricted dma mask to 40 bits!\n", + pci_dev->device.name); return -ENODEV; - }; + } port = ((struct nfp_net_hw *)eth_dev->data->dev_private)->idx; if (port < 0 || port > 7) { @@ -416,14 +415,14 @@ nfp_net_init(struct rte_eth_dev *eth_dev) return -ENODEV; } - /* Use PF array of physical ports to get pointer to + /* + * Use PF array of physical ports to get pointer to * this specific port */ hw = pf_dev->ports[port]; PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " - "NFP internal port number: %d", - port, hw->nfp_idx); + "NFP internal port number: %d", port, hw->nfp_idx); eth_dev->dev_ops = &nfp_net_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; @@ -456,13 +455,10 @@ nfp_net_init(struct rte_eth_dev *eth_dev) if (port == 0) { hw->ctrl_bar = pf_dev->ctrl_bar; } else { - if (!pf_dev->ctrl_bar) + if (pf_dev->ctrl_bar == NULL) return -ENODEV; - /* Use port offset in pf ctrl_bar for this - * ports control bar - */ - hw->ctrl_bar = pf_dev->ctrl_bar + - (port * NFP_PF_CSR_SLICE_SIZE); + /* Use port offset in pf ctrl_bar for this ports control bar */ + hw->ctrl_bar = pf_dev->ctrl_bar + (port * NFP_PF_CSR_SLICE_SIZE); } PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); @@ -557,8 +553,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev) tmp_ether_addr = (struct rte_ether_addr *)&hw->mac_addr; if (!rte_is_valid_assigned_ether_addr(tmp_ether_addr)) { - PMD_INIT_LOG(INFO, "Using random mac address for port %d", - port); + PMD_INIT_LOG(INFO, "Using random mac address for port %d", port); /* Using random mac addresses for VFs */ rte_eth_random_addr(&hw->mac_addr[0]); nfp_net_write_mac(hw, (uint8_t *)&hw->mac_addr); @@ -583,8 +578,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() == RTE_PROC_PRIMARY) { /* Registering LSC interrupt handler */ rte_intr_callback_register(pci_dev->intr_handle, - nfp_net_dev_interrupt_handler, - (void *)eth_dev); + nfp_net_dev_interrupt_handler, (void *)eth_dev); /* Telling the firmware about the LSC interrupt entry */ nn_cfg_writeb(hw, NFP_NET_CFG_LSC, NFP_NET_IRQ_LSC_IDX); /* Recording current stats counters values */ @@ -656,8 +650,10 @@ nfp_fw_upload(struct rte_pci_device *dev, struct nfp_nsp *nsp, char *card) } static int -nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, - struct nfp_eth_table *nfp_eth_table, struct nfp_hwinfo *hwinfo) +nfp_fw_setup(struct rte_pci_device *dev, + struct nfp_cpp *cpp, + struct nfp_eth_table *nfp_eth_table, + struct nfp_hwinfo *hwinfo) { struct nfp_nsp *nsp; const char *nfp_fw_model; @@ -675,12 +671,12 @@ nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, if (nfp_eth_table->count == 0 || nfp_eth_table->count > 8) { PMD_DRV_LOG(ERR, "NFP ethernet table reports wrong ports: %u", - nfp_eth_table->count); + nfp_eth_table->count); return -EIO; } PMD_DRV_LOG(INFO, "NFP ethernet port table reports %u ports", - nfp_eth_table->count); + nfp_eth_table->count); PMD_DRV_LOG(INFO, "Port speed: %u", nfp_eth_table->ports[0].speed); @@ -689,7 +685,7 @@ nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, nfp_eth_table->ports[0].speed / 1000); nsp = nfp_nsp_open(cpp); - if (!nsp) { + if (nsp == NULL) { PMD_DRV_LOG(ERR, "NFP error when obtaining NSP handle"); return -EIO; } @@ -701,19 +697,19 @@ nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, return err; } -static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) +static int +nfp_init_phyports(struct nfp_pf_dev *pf_dev) { + int i; + int ret = 0; struct nfp_net_hw *hw; struct rte_eth_dev *eth_dev; - struct nfp_eth_table *nfp_eth_table = NULL; - int ret = 0; - int i; + struct nfp_eth_table *nfp_eth_table; nfp_eth_table = nfp_eth_read_ports(pf_dev->cpp); - if (!nfp_eth_table) { + if (nfp_eth_table == NULL) { PMD_INIT_LOG(ERR, "Error reading NFP ethernet table"); - ret = -EIO; - goto error; + return -EIO; } /* Loop through all physical ports on PF */ @@ -726,7 +722,7 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) /* Allocate a eth_dev for this phyport */ eth_dev = rte_eth_dev_allocate(port_name); - if (!eth_dev) { + if (eth_dev == NULL) { ret = -ENODEV; goto port_cleanup; } @@ -734,8 +730,8 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) /* Allocate memory for this phyport */ eth_dev->data->dev_private = rte_zmalloc_socket(port_name, sizeof(struct nfp_net_hw), - RTE_CACHE_LINE_SIZE, numa_node); - if (!eth_dev->data->dev_private) { + RTE_CACHE_LINE_SIZE, numa_node); + if (eth_dev->data->dev_private == NULL) { ret = -ENOMEM; rte_eth_dev_release_port(eth_dev); goto port_cleanup; @@ -759,7 +755,6 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) * nfp_net_init */ ret = nfp_net_init(eth_dev); - if (ret) { ret = -ENODEV; goto port_cleanup; @@ -782,24 +777,25 @@ static int nfp_init_phyports(struct nfp_pf_dev *pf_dev) } eth_table_cleanup: free(nfp_eth_table); -error: + return ret; } -static int nfp_pf_init(struct rte_pci_device *pci_dev) +static int +nfp_pf_init(struct rte_pci_device *pci_dev) { - struct nfp_pf_dev *pf_dev = NULL; + int err; + int ret = 0; + int total_ports; struct nfp_cpp *cpp; + struct nfp_pf_dev *pf_dev; struct nfp_hwinfo *hwinfo; - struct nfp_rtsym_table *sym_tbl; - struct nfp_eth_table *nfp_eth_table = NULL; char name[RTE_ETH_NAME_MAX_LEN]; - int total_ports; - int ret = -ENODEV; - int err; + struct nfp_rtsym_table *sym_tbl; + struct nfp_eth_table *nfp_eth_table; - if (!pci_dev) - return ret; + if (pci_dev == NULL) + return -ENODEV; /* * When device bound to UIO, the device could be used, by mistake, @@ -813,21 +809,21 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) else cpp = nfp_cpp_from_device_name(pci_dev, 1); - if (!cpp) { + if (cpp == NULL) { PMD_INIT_LOG(ERR, "A CPP handle can not be obtained"); ret = -EIO; goto error; } hwinfo = nfp_hwinfo_read(cpp); - if (!hwinfo) { + if (hwinfo == NULL) { PMD_INIT_LOG(ERR, "Error reading hwinfo table"); ret = -EIO; goto error; } nfp_eth_table = nfp_eth_read_ports(cpp); - if (!nfp_eth_table) { + if (nfp_eth_table == NULL) { PMD_INIT_LOG(ERR, "Error reading NFP ethernet table"); ret = -EIO; goto hwinfo_cleanup; @@ -841,7 +837,7 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) /* Now the symbol table should be there */ sym_tbl = nfp_rtsym_table_read(cpp); - if (!sym_tbl) { + if (sym_tbl == NULL) { PMD_INIT_LOG(ERR, "Something is wrong with the firmware" " symbol table"); ret = -EIO; @@ -865,7 +861,7 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) /* Allocate memory for the PF "device" */ snprintf(name, sizeof(name), "nfp_pf%d", 0); pf_dev = rte_zmalloc(name, sizeof(*pf_dev), 0); - if (!pf_dev) { + if (pf_dev == NULL) { ret = -ENOMEM; goto sym_tbl_cleanup; } @@ -883,9 +879,8 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) /* Map the symbol table */ pf_dev->ctrl_bar = nfp_rtsym_map(pf_dev->sym_tbl, "_pf0_net_bar0", - pf_dev->total_phyports * 32768, - &pf_dev->ctrl_area); - if (!pf_dev->ctrl_bar) { + pf_dev->total_phyports * 32768, &pf_dev->ctrl_area); + if (pf_dev->ctrl_bar == NULL) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for _pf0_net_ctrl_bar"); ret = -EIO; goto pf_cleanup; @@ -895,10 +890,9 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) /* configure access to tx/rx vNIC BARs */ pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, 0, 0, - NFP_PCIE_QUEUE(0), - NFP_QCP_QUEUE_AREA_SZ, - &pf_dev->hwqueues_area); - if (!pf_dev->hw_queues) { + NFP_PCIE_QUEUE(0), NFP_QCP_QUEUE_AREA_SZ, + &pf_dev->hwqueues_area); + if (pf_dev->hw_queues == NULL) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for net.qc"); ret = -EIO; goto ctrl_area_cleanup; @@ -906,7 +900,8 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) PMD_INIT_LOG(DEBUG, "tx/rx bar address: 0x%p", pf_dev->hw_queues); - /* Initialize and prep physical ports now + /* + * Initialize and prep physical ports now * This will loop through all physical ports */ ret = nfp_init_phyports(pf_dev); @@ -941,15 +936,16 @@ static int nfp_pf_init(struct rte_pci_device *pci_dev) * is no need to initialise the PF again. Only minimal work is required * here */ -static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) +static int +nfp_pf_secondary_init(struct rte_pci_device *pci_dev) { - struct nfp_cpp *cpp; - struct nfp_rtsym_table *sym_tbl; - int total_ports; int i; int err; + int total_ports; + struct nfp_cpp *cpp; + struct nfp_rtsym_table *sym_tbl; - if (!pci_dev) + if (pci_dev == NULL) return -ENODEV; /* @@ -964,7 +960,7 @@ static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) else cpp = nfp_cpp_from_device_name(pci_dev, 1); - if (!cpp) { + if (cpp == NULL) { PMD_INIT_LOG(ERR, "A CPP handle can not be obtained"); return -EIO; } @@ -974,7 +970,7 @@ static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) * here so we have to read the number of ports from firmware */ sym_tbl = nfp_rtsym_table_read(cpp); - if (!sym_tbl) { + if (sym_tbl == NULL) { PMD_INIT_LOG(ERR, "Something is wrong with the firmware" " symbol table"); return -EIO; @@ -989,13 +985,11 @@ static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) snprintf(port_name, sizeof(port_name), "%s_port%d", pci_dev->device.name, i); - PMD_DRV_LOG(DEBUG, "Secondary attaching to port %s", - port_name); + PMD_DRV_LOG(DEBUG, "Secondary attaching to port %s", port_name); eth_dev = rte_eth_dev_attach_secondary(port_name); - if (!eth_dev) { + if (eth_dev == NULL) { RTE_LOG(ERR, EAL, - "secondary process attach failed, " - "ethdev doesn't exist"); + "secondary process attach failed, ethdev doesn't exist"); return -ENODEV; } eth_dev->process_private = cpp; @@ -1012,8 +1006,9 @@ static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev) return 0; } -static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, - struct rte_pci_device *dev) +static int +nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, + struct rte_pci_device *dev) { if (rte_eal_process_type() == RTE_PROC_PRIMARY) return nfp_pf_init(dev); @@ -1035,7 +1030,8 @@ static const struct rte_pci_id pci_id_nfp_pf_net_map[] = { }, }; -static int nfp_pci_uninit(struct rte_eth_dev *eth_dev) +static int +nfp_pci_uninit(struct rte_eth_dev *eth_dev) { struct rte_pci_device *pci_dev; uint16_t port_id; @@ -1052,7 +1048,8 @@ static int nfp_pci_uninit(struct rte_eth_dev *eth_dev) return -ENOTSUP; } -static int eth_nfp_pci_remove(struct rte_pci_device *pci_dev) +static int +eth_nfp_pci_remove(struct rte_pci_device *pci_dev) { return rte_eth_dev_pci_generic_remove(pci_dev, nfp_pci_uninit); } diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -296,11 +296,11 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) /* NFP can not handle DMA addresses requiring more than 40 bits */ if (rte_mem_check_dma_mask(40)) { - RTE_LOG(ERR, PMD, "device %s can not be used:", - pci_dev->device.name); - RTE_LOG(ERR, PMD, "\trestricted dma mask to 40 bits!\n"); + RTE_LOG(ERR, PMD, + "device %s can not be used: restricted dma mask to 40 bits!\n", + pci_dev->device.name); return -ENODEV; - }; + } hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: #include "nfp_ctrl.h" #include "nfp_cpp_bridge.h" static int nfp_net_pf_read_mac(struct nfp_pf_dev *pf_dev, int port); static int nfp_net_start(struct rte_eth_dev *dev); static int nfp_net_stop(struct rte_eth_dev *dev); static int nfp_net_set_link_up(struct rte_eth_dev *dev); static int nfp_net_set_link_down(struct rte_eth_dev *dev); static int nfp_net_close(struct rte_eth_dev *dev); static int nfp_net_init(struct rte_eth_dev *eth_dev); static int nfp_fw_upload(struct rte_pci_device *dev, struct nfp_nsp *nsp, char *card); static int nfp_fw_setup(struct rte_pci_device *dev, struct nfp_cpp *cpp, struct nfp_eth_table *nfp_eth_table, struct nfp_hwinfo *hwinfo); static int nfp_init_phyports(struct nfp_pf_dev *pf_dev); static int nfp_pf_init(struct rte_pci_device *pci_dev); static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev); static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *dev); static int nfp_pci_uninit(struct rte_eth_dev *eth_dev); static int eth_nfp_pci_remove(struct rte_pci_device *pci_dev); static int nfp_net_pf_read_mac(struct nfp_pf_dev *pf_dev, int port) { error: patch failed: drivers/net/nfp/nfp_ethdev.c:38 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: #include "nfp_logs.h" #include "nfp_ctrl.h" static void nfp_netvf_read_mac(struct nfp_net_hw *hw); static int nfp_netvf_start(struct rte_eth_dev *dev); static int nfp_netvf_stop(struct rte_eth_dev *dev); static int nfp_netvf_set_link_up(struct rte_eth_dev *dev); static int nfp_netvf_set_link_down(struct rte_eth_dev *dev); static int nfp_netvf_close(struct rte_eth_dev *dev); static int nfp_netvf_init(struct rte_eth_dev *eth_dev); static int nfp_vf_pci_uninit(struct rte_eth_dev *eth_dev); static int eth_nfp_vf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev); static int eth_nfp_vf_pci_remove(struct rte_pci_device *pci_dev); static void nfp_netvf_read_mac(struct nfp_net_hw *hw) { error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:23 Checking patch drivers/net/nfp/nfp_rxtx.c... error: while searching for: #include "nfp_logs.h" #include "nfp_ctrl.h" /* Prototypes */ static int nfp_net_rx_fill_freelist(struct nfp_net_rxq *rxq); static inline void nfp_net_mbuf_alloc_failed(struct nfp_net_rxq *rxq); static inline void nfp_net_set_hash(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd, struct rte_mbuf *mbuf); static inline void nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd, struct rte_mbuf *mb); static void nfp_net_rx_queue_release_mbufs(struct nfp_net_rxq *rxq); static int nfp_net_tx_free_bufs(struct nfp_net_txq *txq); static void nfp_net_tx_queue_release_mbufs(struct nfp_net_txq *txq); static inline uint32_t nfp_free_tx_desc(struct nfp_net_txq *txq); static inline uint32_t nfp_net_txq_full(struct nfp_net_txq *txq); static inline void nfp_net_tx_tso(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, struct rte_mbuf *mb); static inline void nfp_net_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, struct rte_mbuf *mb); static int nfp_net_rx_fill_freelist(struct nfp_net_rxq *rxq) { error: patch failed: drivers/net/nfp/nfp_rxtx.c:21 Applying patch drivers/net/nfp/nfp_ethdev.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_rxtx.c with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -38,28 +38,6 @@ #include "nfp_ctrl.h" #include "nfp_cpp_bridge.h" - -static int nfp_net_pf_read_mac(struct nfp_pf_dev *pf_dev, int port); -static int nfp_net_start(struct rte_eth_dev *dev); -static int nfp_net_stop(struct rte_eth_dev *dev); -static int nfp_net_set_link_up(struct rte_eth_dev *dev); -static int nfp_net_set_link_down(struct rte_eth_dev *dev); -static int nfp_net_close(struct rte_eth_dev *dev); -static int nfp_net_init(struct rte_eth_dev *eth_dev); -static int nfp_fw_upload(struct rte_pci_device *dev, - struct nfp_nsp *nsp, char *card); -static int nfp_fw_setup(struct rte_pci_device *dev, - struct nfp_cpp *cpp, - struct nfp_eth_table *nfp_eth_table, - struct nfp_hwinfo *hwinfo); -static int nfp_init_phyports(struct nfp_pf_dev *pf_dev); -static int nfp_pf_init(struct rte_pci_device *pci_dev); -static int nfp_pf_secondary_init(struct rte_pci_device *pci_dev); -static int nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, - struct rte_pci_device *dev); -static int nfp_pci_uninit(struct rte_eth_dev *eth_dev); -static int eth_nfp_pci_remove(struct rte_pci_device *pci_dev); - static int nfp_net_pf_read_mac(struct nfp_pf_dev *pf_dev, int port) { diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -23,18 +23,6 @@ #include "nfp_logs.h" #include "nfp_ctrl.h" -static void nfp_netvf_read_mac(struct nfp_net_hw *hw); -static int nfp_netvf_start(struct rte_eth_dev *dev); -static int nfp_netvf_stop(struct rte_eth_dev *dev); -static int nfp_netvf_set_link_up(struct rte_eth_dev *dev); -static int nfp_netvf_set_link_down(struct rte_eth_dev *dev); -static int nfp_netvf_close(struct rte_eth_dev *dev); -static int nfp_netvf_init(struct rte_eth_dev *eth_dev); -static int nfp_vf_pci_uninit(struct rte_eth_dev *eth_dev); -static int eth_nfp_vf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, - struct rte_pci_device *pci_dev); -static int eth_nfp_vf_pci_remove(struct rte_pci_device *pci_dev); - static void nfp_netvf_read_mac(struct nfp_net_hw *hw) { diff a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c (rejected hunks) @@ -21,27 +21,6 @@ #include "nfp_logs.h" #include "nfp_ctrl.h" -/* Prototypes */ -static int nfp_net_rx_fill_freelist(struct nfp_net_rxq *rxq); -static inline void nfp_net_mbuf_alloc_failed(struct nfp_net_rxq *rxq); -static inline void nfp_net_set_hash(struct nfp_net_rxq *rxq, - struct nfp_net_rx_desc *rxd, - struct rte_mbuf *mbuf); -static inline void nfp_net_rx_cksum(struct nfp_net_rxq *rxq, - struct nfp_net_rx_desc *rxd, - struct rte_mbuf *mb); -static void nfp_net_rx_queue_release_mbufs(struct nfp_net_rxq *rxq); -static int nfp_net_tx_free_bufs(struct nfp_net_txq *txq); -static void nfp_net_tx_queue_release_mbufs(struct nfp_net_txq *txq); -static inline uint32_t nfp_free_tx_desc(struct nfp_net_txq *txq); -static inline uint32_t nfp_net_txq_full(struct nfp_net_txq *txq); -static inline void nfp_net_tx_tso(struct nfp_net_txq *txq, - struct nfp_net_tx_desc *txd, - struct rte_mbuf *mb); -static inline void nfp_net_tx_cksum(struct nfp_net_txq *txq, - struct nfp_net_tx_desc *txd, - struct rte_mbuf *mb); - static int nfp_net_rx_fill_freelist(struct nfp_net_rxq *rxq) { Checking patch drivers/net/nfp/nfp_common.h... error: while searching for: /* The offset of the queue controller queues in the PCIe Target */ #define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff))) /* Maximum value which can be added to a queue with one transaction */ #define NFP_QCP_MAX_ADD 0x7f /* Interrupt definitions */ #define NFP_NET_IRQ_LSC_IDX 0 error: patch failed: drivers/net/nfp/nfp_common.h:44 error: while searching for: * @q: Base address for queue structure * @ptr: Add to the Read or Write pointer * @val: Value to add to the queue pointer * * If @val is greater than @NFP_QCP_MAX_ADD multiple writes are performed. */ static inline void nfp_qcp_ptr_add(uint8_t *q, enum nfp_qcp_ptr ptr, uint32_t val) error: patch failed: drivers/net/nfp/nfp_common.h:307 error: while searching for: else off = NFP_QCP_QUEUE_ADD_WPTR; while (val > NFP_QCP_MAX_ADD) { nn_writel(rte_cpu_to_le_32(NFP_QCP_MAX_ADD), q + off); val -= NFP_QCP_MAX_ADD; } nn_writel(rte_cpu_to_le_32(val), q + off); } /* error: patch failed: drivers/net/nfp/nfp_common.h:320 Applying patch drivers/net/nfp/nfp_common.h with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. diff a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h (rejected hunks) @@ -44,9 +44,6 @@ struct nfp_net_adapter; /* The offset of the queue controller queues in the PCIe Target */ #define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff))) -/* Maximum value which can be added to a queue with one transaction */ -#define NFP_QCP_MAX_ADD 0x7f - /* Interrupt definitions */ #define NFP_NET_IRQ_LSC_IDX 0 @@ -307,8 +304,6 @@ nn_cfg_writeq(struct nfp_net_hw *hw, int off, uint64_t val) * @q: Base address for queue structure * @ptr: Add to the Read or Write pointer * @val: Value to add to the queue pointer - * - * If @val is greater than @NFP_QCP_MAX_ADD multiple writes are performed. */ static inline void nfp_qcp_ptr_add(uint8_t *q, enum nfp_qcp_ptr ptr, uint32_t val) @@ -320,12 +315,7 @@ nfp_qcp_ptr_add(uint8_t *q, enum nfp_qcp_ptr ptr, uint32_t val) else off = NFP_QCP_QUEUE_ADD_WPTR; - while (val > NFP_QCP_MAX_ADD) { - nn_writel(rte_cpu_to_le_32(NFP_QCP_MAX_ADD), q + off); - val -= NFP_QCP_MAX_ADD; -} - -nn_writel(rte_cpu_to_le_32(val), q + off); + nn_writel(rte_cpu_to_le_32(val), q + off); } /* Checking patch drivers/net/nfp/nfp_common.c... error: while searching for: } int nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) { struct nfp_net_hw *hw; uint32_t update, ctrl; error: patch failed: drivers/net/nfp/nfp_common.c:274 Checking patch drivers/net/nfp/nfp_common.h... error: while searching for: void nfp_net_params_setup(struct nfp_net_hw *hw); void nfp_eth_copy_mac(uint8_t *dst, const uint8_t *src); void nfp_net_write_mac(struct nfp_net_hw *hw, uint8_t *mac); int nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr); int nfp_configure_rx_interrupt(struct rte_eth_dev *dev, struct rte_intr_handle *intr_handle); uint32_t nfp_check_offloads(struct rte_eth_dev *dev); error: patch failed: drivers/net/nfp/nfp_common.h:350 Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: .dev_infos_get = nfp_net_infos_get, .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, .mtu_set = nfp_net_dev_mtu_set, .mac_addr_set = nfp_set_mac_addr, .vlan_offload_set = nfp_net_vlan_offload_set, .reta_update = nfp_net_reta_update, .reta_query = nfp_net_reta_query, error: patch failed: drivers/net/nfp/nfp_ethdev.c:344 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: .dev_infos_get = nfp_net_infos_get, .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, .mtu_set = nfp_net_dev_mtu_set, .mac_addr_set = nfp_set_mac_addr, .vlan_offload_set = nfp_net_vlan_offload_set, .reta_update = nfp_net_reta_update, .reta_query = nfp_net_reta_query, error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:251 Applying patch drivers/net/nfp/nfp_common.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_common.h with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ethdev.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c (rejected hunks) @@ -274,7 +274,7 @@ nfp_net_write_mac(struct nfp_net_hw *hw, uint8_t *mac) } int -nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) +nfp_net_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr) { struct nfp_net_hw *hw; uint32_t update, ctrl; diff a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h (rejected hunks) @@ -350,7 +350,7 @@ void nfp_net_disable_queues(struct rte_eth_dev *dev); void nfp_net_params_setup(struct nfp_net_hw *hw); void nfp_eth_copy_mac(uint8_t *dst, const uint8_t *src); void nfp_net_write_mac(struct nfp_net_hw *hw, uint8_t *mac); -int nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr); +int nfp_net_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr); int nfp_configure_rx_interrupt(struct rte_eth_dev *dev, struct rte_intr_handle *intr_handle); uint32_t nfp_check_offloads(struct rte_eth_dev *dev); diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -344,7 +344,7 @@ static const struct eth_dev_ops nfp_net_eth_dev_ops = { .dev_infos_get = nfp_net_infos_get, .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, .mtu_set = nfp_net_dev_mtu_set, - .mac_addr_set = nfp_set_mac_addr, + .mac_addr_set = nfp_net_set_mac_addr, .vlan_offload_set = nfp_net_vlan_offload_set, .reta_update = nfp_net_reta_update, .reta_query = nfp_net_reta_query, diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -251,7 +251,7 @@ static const struct eth_dev_ops nfp_netvf_eth_dev_ops = { .dev_infos_get = nfp_net_infos_get, .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, .mtu_set = nfp_net_dev_mtu_set, - .mac_addr_set = nfp_set_mac_addr, + .mac_addr_set = nfp_net_set_mac_addr, .vlan_offload_set = nfp_net_vlan_offload_set, .reta_update = nfp_net_reta_update, .reta_query = nfp_net_reta_query, Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: } /* Initialise and register driver with DPDK Application */ static const struct eth_dev_ops nfp_net_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_net_start, .dev_stop = nfp_net_stop, error: patch failed: drivers/net/nfp/nfp_ethdev.c:329 error: while searching for: .rss_hash_conf_get = nfp_net_rss_hash_conf_get, .rx_queue_setup = nfp_net_rx_queue_setup, .rx_queue_release = nfp_net_rx_queue_release, .tx_queue_setup = nfp_net_tx_queue_setup, .tx_queue_release = nfp_net_tx_queue_release, .rx_queue_intr_enable = nfp_rx_queue_intr_enable, .rx_queue_intr_disable = nfp_rx_queue_intr_disable, error: patch failed: drivers/net/nfp/nfp_ethdev.c:352 error: while searching for: PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " "NFP internal port number: %d", port, hw->nfp_idx); eth_dev->dev_ops = &nfp_net_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) error: patch failed: drivers/net/nfp/nfp_ethdev.c:402 error: while searching for: return -ENODEV; } eth_dev->process_private = cpp; eth_dev->dev_ops = &nfp_net_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; rte_eth_dev_probing_finish(eth_dev); } error: patch failed: drivers/net/nfp/nfp_ethdev.c:971 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: } /* Initialise and register VF driver with DPDK Application */ static const struct eth_dev_ops nfp_netvf_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_netvf_start, .dev_stop = nfp_netvf_stop, error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:236 error: while searching for: .rss_hash_conf_get = nfp_net_rss_hash_conf_get, .rx_queue_setup = nfp_net_rx_queue_setup, .rx_queue_release = nfp_net_rx_queue_release, .tx_queue_setup = nfp_net_tx_queue_setup, .tx_queue_release = nfp_net_tx_queue_release, .rx_queue_intr_enable = nfp_rx_queue_intr_enable, .rx_queue_intr_disable = nfp_rx_queue_intr_disable, error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:259 error: while searching for: hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); eth_dev->dev_ops = &nfp_netvf_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:292 Checking patch drivers/net/nfp/nfp_rxtx.c... error: while searching for: } int nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf) { error: patch failed: drivers/net/nfp/nfp_rxtx.c:655 error: while searching for: PMD_INIT_FUNC_TRACE(); /* Validating number of descriptors */ 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) { error: patch failed: drivers/net/nfp/nfp_rxtx.c:670 error: while searching for: * resizing in later calls to the queue setup function. */ tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, sizeof(struct nfp_net_tx_desc) * NFP_NET_MAX_TX_DESC, NFP_MEMZONE_ALIGN, socket_id); if (tz == NULL) { error: patch failed: drivers/net/nfp/nfp_rxtx.c:718 error: while searching for: /* Saving physical and virtual addresses for the TX ring */ txq->dma = (uint64_t)tz->iova; txq->txds = (struct nfp_net_tx_desc *)tz->addr; /* mbuf pointers array for referencing mbufs linked to TX descriptors */ txq->txbufs = rte_zmalloc_socket("txq->txbufs", error: patch failed: drivers/net/nfp/nfp_rxtx.c:743 error: while searching for: /* Leaving always free descriptors for avoiding wrapping confusion */ static inline uint32_t nfp_free_tx_desc(struct nfp_net_txq *txq) { if (txq->wr_p >= txq->rd_p) return txq->tx_count - (txq->wr_p - txq->rd_p) - 8; error: patch failed: drivers/net/nfp/nfp_rxtx.c:773 error: while searching for: * This function uses the host copy* of read/write pointers */ static inline uint32_t nfp_net_txq_full(struct nfp_net_txq *txq) { return (nfp_free_tx_desc(txq) < txq->tx_free_thresh); } /* nfp_net_tx_tso - Set TX descriptor for TSO */ static inline void nfp_net_tx_tso(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, struct rte_mbuf *mb) { uint64_t ol_flags; error: patch failed: drivers/net/nfp/nfp_rxtx.c:790 error: while searching for: /* nfp_net_tx_cksum - Set TX CSUM offload flags in TX descriptor */ static inline void nfp_net_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, struct rte_mbuf *mb) { uint64_t ol_flags; error: patch failed: drivers/net/nfp/nfp_rxtx.c:828 error: while searching for: } uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct nfp_net_txq *txq; struct nfp_net_hw *hw; struct nfp_net_tx_desc *txds, txd; struct rte_mbuf *pkt; uint64_t dma_addr; int pkt_size, dma_size; error: patch failed: drivers/net/nfp/nfp_rxtx.c:857 error: while searching for: PMD_TX_LOG(DEBUG, "working for queue %u at pos %d and %u packets", txq->qidx, txq->wr_p, nb_pkts); if ((nfp_free_tx_desc(txq) < nb_pkts) || (nfp_net_txq_full(txq))) nfp_net_tx_free_bufs(txq); free_descs = (uint16_t)nfp_free_tx_desc(txq); if (unlikely(free_descs == 0)) return 0; error: patch failed: drivers/net/nfp/nfp_rxtx.c:876 error: while searching for: * multisegment packet, but TSO info needs to be in all of them. */ txd.data_len = pkt->pkt_len; nfp_net_tx_tso(txq, &txd, pkt); nfp_net_tx_cksum(txq, &txd, pkt); if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) && (hw->cap & NFP_NET_CFG_CTRL_TXVLAN)) { error: patch failed: drivers/net/nfp/nfp_rxtx.c:913 Checking patch drivers/net/nfp/nfp_rxtx.h... error: while searching for: #define PCIE_DESC_TX_ENCAP_VXLAN (1 << 1) #define PCIE_DESC_TX_ENCAP_GRE (1 << 0) struct nfp_net_tx_desc { union { struct { uint8_t dma_addr_hi; /* High bits of host buf address */ error: patch failed: drivers/net/nfp/nfp_rxtx.h:53 error: while searching for: * of the queue and @size is the size in bytes for the queue * (needed for free) */ struct nfp_net_tx_desc *txds; /* * At this point 48 bytes have been used for all the fields in the error: patch failed: drivers/net/nfp/nfp_rxtx.h:124 error: while searching for: struct rte_mempool *mp); void nfp_net_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx); void nfp_net_reset_tx_queue(struct nfp_net_txq *txq); int nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); #endif /* _NFP_RXTX_H_ */ error: patch failed: drivers/net/nfp/nfp_rxtx.h:286 Applying patch drivers/net/nfp/nfp_ethdev.c with 4 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Applying patch drivers/net/nfp/nfp_rxtx.c with 10 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Rejected hunk #6. Rejected hunk #7. Rejected hunk #8. Rejected hunk #9. Rejected hunk #10. Applying patch drivers/net/nfp/nfp_rxtx.h with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -329,7 +329,7 @@ nfp_net_close(struct rte_eth_dev *dev) } /* Initialise and register driver with DPDK Application */ -static const struct eth_dev_ops nfp_net_eth_dev_ops = { +static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_net_start, .dev_stop = nfp_net_stop, @@ -352,7 +352,7 @@ static const struct eth_dev_ops nfp_net_eth_dev_ops = { .rss_hash_conf_get = nfp_net_rss_hash_conf_get, .rx_queue_setup = nfp_net_rx_queue_setup, .rx_queue_release = nfp_net_rx_queue_release, - .tx_queue_setup = nfp_net_tx_queue_setup, + .tx_queue_setup = nfp_net_nfd3_tx_queue_setup, .tx_queue_release = nfp_net_tx_queue_release, .rx_queue_intr_enable = nfp_rx_queue_intr_enable, .rx_queue_intr_disable = nfp_rx_queue_intr_disable, @@ -402,10 +402,10 @@ nfp_net_init(struct rte_eth_dev *eth_dev) PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " "NFP internal port number: %d", port, hw->nfp_idx); - eth_dev->dev_ops = &nfp_net_eth_dev_ops; + eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; + eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) @@ -971,10 +971,10 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) return -ENODEV; } eth_dev->process_private = cpp; - eth_dev->dev_ops = &nfp_net_eth_dev_ops; + eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; + eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; rte_eth_dev_probing_finish(eth_dev); } diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -236,7 +236,7 @@ nfp_netvf_close(struct rte_eth_dev *dev) } /* Initialise and register VF driver with DPDK Application */ -static const struct eth_dev_ops nfp_netvf_eth_dev_ops = { +static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { .dev_configure = nfp_net_configure, .dev_start = nfp_netvf_start, .dev_stop = nfp_netvf_stop, @@ -259,7 +259,7 @@ static const struct eth_dev_ops nfp_netvf_eth_dev_ops = { .rss_hash_conf_get = nfp_net_rss_hash_conf_get, .rx_queue_setup = nfp_net_rx_queue_setup, .rx_queue_release = nfp_net_rx_queue_release, - .tx_queue_setup = nfp_net_tx_queue_setup, + .tx_queue_setup = nfp_net_nfd3_tx_queue_setup, .tx_queue_release = nfp_net_tx_queue_release, .rx_queue_intr_enable = nfp_rx_queue_intr_enable, .rx_queue_intr_disable = nfp_rx_queue_intr_disable, @@ -292,10 +292,10 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); - eth_dev->dev_ops = &nfp_netvf_eth_dev_ops; + eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_xmit_pkts; + eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) diff a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c (rejected hunks) @@ -655,7 +655,7 @@ nfp_net_reset_tx_queue(struct nfp_net_txq *txq) } int -nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, +nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf) { @@ -670,7 +670,7 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, PMD_INIT_FUNC_TRACE(); /* Validating number of descriptors */ - tx_desc_sz = nb_desc * sizeof(struct nfp_net_tx_desc); + tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfd3_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) { @@ -718,7 +718,7 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, * resizing in later calls to the queue setup function. */ tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, - sizeof(struct nfp_net_tx_desc) * + sizeof(struct nfp_net_nfd3_tx_desc) * NFP_NET_MAX_TX_DESC, NFP_MEMZONE_ALIGN, socket_id); if (tz == NULL) { @@ -743,7 +743,7 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, /* Saving physical and virtual addresses for the TX ring */ txq->dma = (uint64_t)tz->iova; - txq->txds = (struct nfp_net_tx_desc *)tz->addr; + txq->txds = (struct nfp_net_nfd3_tx_desc *)tz->addr; /* mbuf pointers array for referencing mbufs linked to TX descriptors */ txq->txbufs = rte_zmalloc_socket("txq->txbufs", @@ -773,7 +773,7 @@ nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, /* Leaving always free descriptors for avoiding wrapping confusion */ static inline -uint32_t nfp_free_tx_desc(struct nfp_net_txq *txq) +uint32_t nfp_net_nfd3_free_tx_desc(struct nfp_net_txq *txq) { if (txq->wr_p >= txq->rd_p) return txq->tx_count - (txq->wr_p - txq->rd_p) - 8; @@ -790,14 +790,14 @@ uint32_t nfp_free_tx_desc(struct nfp_net_txq *txq) * This function uses the host copy* of read/write pointers */ static inline -uint32_t nfp_net_txq_full(struct nfp_net_txq *txq) +uint32_t nfp_net_nfd3_txq_full(struct nfp_net_txq *txq) { - return (nfp_free_tx_desc(txq) < txq->tx_free_thresh); + return (nfp_net_nfd3_free_tx_desc(txq) < txq->tx_free_thresh); } /* nfp_net_tx_tso - Set TX descriptor for TSO */ static inline void -nfp_net_tx_tso(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, +nfp_net_nfd3_tx_tso(struct nfp_net_txq *txq, struct nfp_net_nfd3_tx_desc *txd, struct rte_mbuf *mb) { uint64_t ol_flags; @@ -828,7 +828,7 @@ nfp_net_tx_tso(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, /* nfp_net_tx_cksum - Set TX CSUM offload flags in TX descriptor */ static inline void -nfp_net_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, +nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_nfd3_tx_desc *txd, struct rte_mbuf *mb) { uint64_t ol_flags; @@ -857,11 +857,11 @@ nfp_net_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_tx_desc *txd, } uint16_t -nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) +nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { struct nfp_net_txq *txq; struct nfp_net_hw *hw; - struct nfp_net_tx_desc *txds, txd; + struct nfp_net_nfd3_tx_desc *txds, txd; struct rte_mbuf *pkt; uint64_t dma_addr; int pkt_size, dma_size; @@ -876,10 +876,10 @@ nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) PMD_TX_LOG(DEBUG, "working for queue %u at pos %d and %u packets", txq->qidx, txq->wr_p, nb_pkts); - if ((nfp_free_tx_desc(txq) < nb_pkts) || (nfp_net_txq_full(txq))) + if ((nfp_net_nfd3_free_tx_desc(txq) < nb_pkts) || (nfp_net_nfd3_txq_full(txq))) nfp_net_tx_free_bufs(txq); - free_descs = (uint16_t)nfp_free_tx_desc(txq); + free_descs = (uint16_t)nfp_net_nfd3_free_tx_desc(txq); if (unlikely(free_descs == 0)) return 0; @@ -913,8 +913,8 @@ nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) * multisegment packet, but TSO info needs to be in all of them. */ txd.data_len = pkt->pkt_len; - nfp_net_tx_tso(txq, &txd, pkt); - nfp_net_tx_cksum(txq, &txd, pkt); + nfp_net_nfd3_tx_tso(txq, &txd, pkt); + nfp_net_nfd3_tx_cksum(txq, &txd, pkt); if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) && (hw->cap & NFP_NET_CFG_CTRL_TXVLAN)) { diff a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h (rejected hunks) @@ -53,7 +53,7 @@ #define PCIE_DESC_TX_ENCAP_VXLAN (1 << 1) #define PCIE_DESC_TX_ENCAP_GRE (1 << 0) -struct nfp_net_tx_desc { +struct nfp_net_nfd3_tx_desc { union { struct { uint8_t dma_addr_hi; /* High bits of host buf address */ @@ -124,7 +124,7 @@ struct nfp_net_txq { * of the queue and @size is the size in bytes for the queue * (needed for free) */ - struct nfp_net_tx_desc *txds; + struct nfp_net_nfd3_tx_desc *txds; /* * At this point 48 bytes have been used for all the fields in the @@ -286,10 +286,10 @@ int nfp_net_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, struct rte_mempool *mp); void nfp_net_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx); void nfp_net_reset_tx_queue(struct nfp_net_txq *txq); -int nfp_net_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, +int nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, uint16_t nb_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); -uint16_t nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, +uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); #endif /* _NFP_RXTX_H_ */ Checking patch doc/guides/nics/nfp.rst... error: while searching for: This document explains how to use DPDK with the Netronome Poll Mode Driver (PMD) supporting Netronome's Network Flow Processor 6xxx (NFP-6xxx) and Netronome's Flow Processor 4xxx (NFP-4xxx). NFP is a SRIOV capable device and the PMD supports the physical function (PF) and the virtual functions (VFs). error: patch failed: doc/guides/nics/nfp.rst:12 Checking patch doc/guides/rel_notes/release_22_07.rst... error: while searching for: * Added support for MTU on Windows. * Added matching and RSS on IPsec ESP. * **Updated VMware vmxnet3 networking driver.** * Added version 5 support. error: patch failed: doc/guides/rel_notes/release_22_07.rst:108 Checking patch drivers/net/nfp/nfp_common.h... error: while searching for: #define NFP_NET_PMD_VERSION "0.1" #define PCI_VENDOR_ID_NETRONOME 0x19ee #define PCI_DEVICE_ID_NFP4000_PF_NIC 0x4000 #define PCI_DEVICE_ID_NFP6000_PF_NIC 0x6000 #define PCI_DEVICE_ID_NFP6000_VF_NIC 0x6003 /* Forward declaration */ struct nfp_net_adapter; error: patch failed: drivers/net/nfp/nfp_common.h:16 error: while searching for: #define NFP_QCP_QUEUE_STS_HI 0x000c #define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask (0x3ffff) /* The offset of the queue controller queues in the PCIe Target */ #define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff))) /* Interrupt definitions */ #define NFP_NET_IRQ_LSC_IDX 0 error: patch failed: drivers/net/nfp/nfp_common.h:41 error: while searching for: return val & NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask; } /* Prototypes for common NFP functions */ int nfp_net_reconfig(struct nfp_net_hw *hw, uint32_t ctrl, uint32_t update); int nfp_net_configure(struct rte_eth_dev *dev); error: patch failed: drivers/net/nfp/nfp_common.h:342 Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: /* Work out where in the BAR the queues start. */ switch (pci_dev->id.device_id) { case PCI_DEVICE_ID_NFP4000_PF_NIC: case PCI_DEVICE_ID_NFP6000_PF_NIC: start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); tx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ); rx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; break; default: PMD_DRV_LOG(ERR, "nfp_net: no device ID matching"); error: patch failed: drivers/net/nfp/nfp_ethdev.c:446 error: while searching for: { int err; int ret = 0; int total_ports; struct nfp_cpp *cpp; struct nfp_pf_dev *pf_dev; error: patch failed: drivers/net/nfp/nfp_ethdev.c:764 error: while searching for: PMD_INIT_LOG(DEBUG, "ctrl bar: %p", pf_dev->ctrl_bar); /* configure access to tx/rx vNIC BARs */ pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, 0, 0, NFP_PCIE_QUEUE(0), NFP_QCP_QUEUE_AREA_SZ, &pf_dev->hwqueues_area); if (pf_dev->hw_queues == NULL) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for net.qc"); error: patch failed: drivers/net/nfp/nfp_ethdev.c:867 error: while searching for: } static const struct rte_pci_id pci_id_nfp_pf_net_map[] = { { RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP4000_PF_NIC) error: patch failed: drivers/net/nfp/nfp_ethdev.c:995 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: /* Work out where in the BAR the queues start. */ switch (pci_dev->id.device_id) { case PCI_DEVICE_ID_NFP6000_VF_NIC: start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); tx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ); rx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; break; default: PMD_DRV_LOG(ERR, "nfp_net: no device ID matching"); error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:327 error: while searching for: } static const struct rte_pci_id pci_id_nfp_vf_net_map[] = { { RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP6000_VF_NIC) error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:456 Checking patch drivers/net/nfp/nfpcore/nfp_cpp.h... error: while searching for: * @return true if model is in the NFP6000 family, false otherwise. */ #define NFP_CPP_MODEL_IS_6000(model) \ ((NFP_CPP_MODEL_CHIP_of(model) >= 0x4000) && \ (NFP_CPP_MODEL_CHIP_of(model) < 0x7000)) /* error: patch failed: drivers/net/nfp/nfpcore/nfp_cpp.h:214 Checking patch drivers/net/nfp/nfpcore/nfp_nsp_eth.c... error: while searching for: struct nfp_eth_table *table; uint32_t table_sz; int i, j, ret, cnt = 0; entries = malloc(NSP_ETH_TABLE_SIZE); if (!entries) error: patch failed: drivers/net/nfp/nfpcore/nfp_nsp_eth.c:266 error: while searching for: goto err; } for (i = 0; i < NSP_ETH_MAX_COUNT; i++) if (entries[i].port & NSP_ETH_PORT_LANES_MASK) cnt++; /* Some versions of flash will give us 0 instead of port count. For * those that give a port count, verify it against the value calculated error: patch failed: drivers/net/nfp/nfpcore/nfp_nsp_eth.c:278 error: while searching for: memset(table, 0, table_sz); table->count = cnt; for (i = 0, j = 0; i < NSP_ETH_MAX_COUNT; i++) if (entries[i].port & NSP_ETH_PORT_LANES_MASK) nfp_eth_port_translate(nsp, &entries[i], i, &table->ports[j++]); nfp_eth_calc_port_geometry(table); for (i = 0; i < (int)table->count; i++) error: patch failed: drivers/net/nfp/nfpcore/nfp_nsp_eth.c:299 Applying patch doc/guides/nics/nfp.rst with 1 reject... Rejected hunk #1. Applying patch doc/guides/rel_notes/release_22_07.rst with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_common.h with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Applying patch drivers/net/nfp/nfp_ethdev.c with 4 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch drivers/net/nfp/nfpcore/nfp_cpp.h with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfpcore/nfp_nsp_eth.c with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. diff a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst (rejected hunks) @@ -12,7 +12,8 @@ up to 400-Gb/s. This document explains how to use DPDK with the Netronome Poll Mode Driver (PMD) supporting Netronome's Network Flow Processor 6xxx -(NFP-6xxx) and Netronome's Flow Processor 4xxx (NFP-4xxx). +(NFP-6xxx), Netronome's Network Flow Processor 4xxx (NFP-4xxx) and +Netronome's Network Flow Processor 38xx (NFP-38xx). NFP is a SRIOV capable device and the PMD supports the physical function (PF) and the virtual functions (VFs). diff a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst (rejected hunks) @@ -108,6 +108,10 @@ New Features * Added support for MTU on Windows. * Added matching and RSS on IPsec ESP. +* **Updated Netronome nfp driver.** + + * Added support for NFP3800 NIC. + * **Updated VMware vmxnet3 networking driver.** * Added version 5 support. diff a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h (rejected hunks) @@ -16,9 +16,11 @@ #define NFP_NET_PMD_VERSION "0.1" #define PCI_VENDOR_ID_NETRONOME 0x19ee +#define PCI_DEVICE_ID_NFP3800_PF_NIC 0x3800 +#define PCI_DEVICE_ID_NFP3800_VF_NIC 0x3803 #define PCI_DEVICE_ID_NFP4000_PF_NIC 0x4000 #define PCI_DEVICE_ID_NFP6000_PF_NIC 0x6000 -#define PCI_DEVICE_ID_NFP6000_VF_NIC 0x6003 +#define PCI_DEVICE_ID_NFP6000_VF_NIC 0x6003 /* Include NFP4000VF */ /* Forward declaration */ struct nfp_net_adapter; @@ -41,8 +43,16 @@ struct nfp_net_adapter; #define NFP_QCP_QUEUE_STS_HI 0x000c #define NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask (0x3ffff) +#define NFP_PCIE_QCP_NFP3800_OFFSET 0x400000 +#define NFP_PCIE_QCP_NFP6000_OFFSET 0x80000 +#define NFP_PCIE_QUEUE_NFP3800_MASK 0x1ff +#define NFP_PCIE_QUEUE_NFP6000_MASK 0xff +#define NFP_PCIE_QCP_PF_OFFSET 0x0 +#define NFP_PCIE_QCP_VF_OFFSET 0x0 + /* The offset of the queue controller queues in the PCIe Target */ -#define NFP_PCIE_QUEUE(_q) (0x80000 + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & 0xff))) +#define NFP_PCIE_QUEUE(_offset, _q, _mask) \ + ((_offset) + (NFP_QCP_QUEUE_ADDR_SZ * ((_q) & (_mask)))) /* Interrupt definitions */ #define NFP_NET_IRQ_LSC_IDX 0 @@ -342,6 +352,26 @@ nfp_qcp_read(uint8_t *q, enum nfp_qcp_ptr ptr) return val & NFP_QCP_QUEUE_STS_HI_WRITEPTR_mask; } +static inline uint32_t +nfp_pci_queue(struct rte_pci_device *pdev, uint16_t queue) +{ + switch (pdev->id.device_id) { + case PCI_DEVICE_ID_NFP4000_PF_NIC: + case PCI_DEVICE_ID_NFP6000_PF_NIC: + return NFP_PCIE_QUEUE(NFP_PCIE_QCP_PF_OFFSET, queue, + NFP_PCIE_QUEUE_NFP6000_MASK); + case PCI_DEVICE_ID_NFP3800_VF_NIC: + return NFP_PCIE_QUEUE(NFP_PCIE_QCP_VF_OFFSET, queue, + NFP_PCIE_QUEUE_NFP3800_MASK); + case PCI_DEVICE_ID_NFP6000_VF_NIC: + return NFP_PCIE_QUEUE(NFP_PCIE_QCP_VF_OFFSET, queue, + NFP_PCIE_QUEUE_NFP6000_MASK); + default: + return NFP_PCIE_QUEUE(NFP_PCIE_QCP_PF_OFFSET, queue, + NFP_PCIE_QUEUE_NFP3800_MASK); + } +} + /* Prototypes for common NFP functions */ int nfp_net_reconfig(struct nfp_net_hw *hw, uint32_t ctrl, uint32_t update); int nfp_net_configure(struct rte_eth_dev *dev); diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -446,12 +446,13 @@ nfp_net_init(struct rte_eth_dev *eth_dev) /* Work out where in the BAR the queues start. */ switch (pci_dev->id.device_id) { + case PCI_DEVICE_ID_NFP3800_PF_NIC: case PCI_DEVICE_ID_NFP4000_PF_NIC: case PCI_DEVICE_ID_NFP6000_PF_NIC: start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); - tx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + tx_bar_off = nfp_pci_queue(pci_dev, start_q); start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ); - rx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + rx_bar_off = nfp_pci_queue(pci_dev, start_q); break; default: PMD_DRV_LOG(ERR, "nfp_net: no device ID matching"); @@ -764,6 +765,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) { int err; int ret = 0; + uint64_t addr; int total_ports; struct nfp_cpp *cpp; struct nfp_pf_dev *pf_dev; @@ -867,8 +869,24 @@ nfp_pf_init(struct rte_pci_device *pci_dev) PMD_INIT_LOG(DEBUG, "ctrl bar: %p", pf_dev->ctrl_bar); /* configure access to tx/rx vNIC BARs */ + switch (pci_dev->id.device_id) { + case PCI_DEVICE_ID_NFP3800_PF_NIC: + addr = NFP_PCIE_QUEUE(NFP_PCIE_QCP_NFP3800_OFFSET, + 0, NFP_PCIE_QUEUE_NFP3800_MASK); + break; + case PCI_DEVICE_ID_NFP4000_PF_NIC: + case PCI_DEVICE_ID_NFP6000_PF_NIC: + addr = NFP_PCIE_QUEUE(NFP_PCIE_QCP_NFP6000_OFFSET, + 0, NFP_PCIE_QUEUE_NFP6000_MASK); + break; + default: + PMD_INIT_LOG(ERR, "nfp_net: no device ID matching"); + err = -ENODEV; + goto ctrl_area_cleanup; + } + pf_dev->hw_queues = nfp_cpp_map_area(pf_dev->cpp, 0, 0, - NFP_PCIE_QUEUE(0), NFP_QCP_QUEUE_AREA_SZ, + addr, NFP_QCP_QUEUE_AREA_SZ, &pf_dev->hwqueues_area); if (pf_dev->hw_queues == NULL) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for net.qc"); @@ -995,6 +1013,10 @@ nfp_pf_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, } static const struct rte_pci_id pci_id_nfp_pf_net_map[] = { + { + RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, + PCI_DEVICE_ID_NFP3800_PF_NIC) + }, { RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP4000_PF_NIC) diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -327,11 +327,12 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) /* Work out where in the BAR the queues start. */ switch (pci_dev->id.device_id) { + case PCI_DEVICE_ID_NFP3800_VF_NIC: case PCI_DEVICE_ID_NFP6000_VF_NIC: start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_TXQ); - tx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + tx_bar_off = nfp_pci_queue(pci_dev, start_q); start_q = nn_cfg_readl(hw, NFP_NET_CFG_START_RXQ); - rx_bar_off = (uint64_t)start_q * NFP_QCP_QUEUE_ADDR_SZ; + rx_bar_off = nfp_pci_queue(pci_dev, start_q); break; default: PMD_DRV_LOG(ERR, "nfp_net: no device ID matching"); @@ -456,6 +457,10 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) } static const struct rte_pci_id pci_id_nfp_vf_net_map[] = { + { + RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, + PCI_DEVICE_ID_NFP3800_VF_NIC) + }, { RTE_PCI_DEVICE(PCI_VENDOR_ID_NETRONOME, PCI_DEVICE_ID_NFP6000_VF_NIC) diff a/drivers/net/nfp/nfpcore/nfp_cpp.h b/drivers/net/nfp/nfpcore/nfp_cpp.h (rejected hunks) @@ -214,7 +214,7 @@ void nfp_cpp_free(struct nfp_cpp *cpp); * @return true if model is in the NFP6000 family, false otherwise. */ #define NFP_CPP_MODEL_IS_6000(model) \ - ((NFP_CPP_MODEL_CHIP_of(model) >= 0x4000) && \ + ((NFP_CPP_MODEL_CHIP_of(model) >= 0x3800) && \ (NFP_CPP_MODEL_CHIP_of(model) < 0x7000)) /* diff a/drivers/net/nfp/nfpcore/nfp_nsp_eth.c b/drivers/net/nfp/nfpcore/nfp_nsp_eth.c (rejected hunks) @@ -266,6 +266,7 @@ __nfp_eth_read_ports(struct nfp_nsp *nsp) struct nfp_eth_table *table; uint32_t table_sz; int i, j, ret, cnt = 0; + const struct rte_ether_addr *mac; entries = malloc(NSP_ETH_TABLE_SIZE); if (!entries) @@ -278,9 +279,15 @@ __nfp_eth_read_ports(struct nfp_nsp *nsp) goto err; } - for (i = 0; i < NSP_ETH_MAX_COUNT; i++) - if (entries[i].port & NSP_ETH_PORT_LANES_MASK) + /* The NFP3800 NIC support 8 ports, but only 2 ports are valid, + * the rest 6 ports mac are all 0, ensure we don't use these port + */ + for (i = 0; i < NSP_ETH_MAX_COUNT; i++) { + mac = (const struct rte_ether_addr *)entries[i].mac_addr; + if ((entries[i].port & NSP_ETH_PORT_LANES_MASK) && + (!rte_is_zero_ether_addr(mac))) cnt++; + } /* Some versions of flash will give us 0 instead of port count. For * those that give a port count, verify it against the value calculated @@ -299,10 +306,13 @@ __nfp_eth_read_ports(struct nfp_nsp *nsp) memset(table, 0, table_sz); table->count = cnt; - for (i = 0, j = 0; i < NSP_ETH_MAX_COUNT; i++) - if (entries[i].port & NSP_ETH_PORT_LANES_MASK) + for (i = 0, j = 0; i < NSP_ETH_MAX_COUNT; i++) { + mac = (const struct rte_ether_addr *)entries[i].mac_addr; + if ((entries[i].port & NSP_ETH_PORT_LANES_MASK) && + (!rte_is_zero_ether_addr(mac))) nfp_eth_port_translate(nsp, &entries[i], i, - &table->ports[j++]); + &table->ports[j++]); + } nfp_eth_calc_port_geometry(table); for (i = 0; i < (int)table->count; i++) Checking patch doc/guides/nics/nfp.rst... error: while searching for: different firmware to each SmartNIC. .. Note:: Currently the NFP PMD supports using the PF with Agilio Basic Firmware. See https://help.netronome.com/support/solutions for more information on the various firmwares supported by the Netronome Agilio CX smartNIC. PF multiport support -------------------- error: patch failed: doc/guides/nics/nfp.rst:100 Checking patch doc/guides/rel_notes/release_22_07.rst... error: while searching for: * **Updated Netronome nfp driver.** * Added support for NFP3800 NIC. * **Updated VMware vmxnet3 networking driver.** error: patch failed: doc/guides/rel_notes/release_22_07.rst:111 Checking patch drivers/net/nfp/nfp_ctrl.h... error: while searching for: * - define more STS bits */ #define NFP_NET_CFG_VERSION 0x0030 #define NFP_NET_CFG_VERSION_RESERVED_MASK (0xff << 24) #define NFP_NET_CFG_VERSION_CLASS_MASK (0xff << 16) #define NFP_NET_CFG_VERSION_CLASS(x) (((x) & 0xff) << 16) error: patch failed: drivers/net/nfp/nfp_ctrl.h:135 Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; static int nfp_net_init(struct rte_eth_dev *eth_dev) { error: patch failed: drivers/net/nfp/nfp_ethdev.c:358 error: while searching for: PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " "NFP internal port number: %d", port, hw->nfp_idx); eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; error: patch failed: drivers/net/nfp/nfp_ethdev.c:402 error: while searching for: PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); error: patch failed: drivers/net/nfp/nfp_ethdev.c:441 error: while searching for: nfp_net_cfg_queue_setup(hw); /* Get some of the read-only fields from the config BAR */ hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; error: patch failed: drivers/net/nfp/nfp_ethdev.c:473 error: while searching for: int err; int total_ports; struct nfp_cpp *cpp; struct nfp_rtsym_table *sym_tbl; if (pci_dev == NULL) error: patch failed: drivers/net/nfp/nfp_ethdev.c:939 error: while searching for: "secondary process attach failed, ethdev doesn't exist"); return -ENODEV; } eth_dev->process_private = cpp; eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; rte_eth_dev_probing_finish(eth_dev); } error: patch failed: drivers/net/nfp/nfp_ethdev.c:988 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; static int nfp_netvf_init(struct rte_eth_dev *eth_dev) { error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:265 error: while searching for: hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:292 error: while searching for: pci_dev->addr.domain, pci_dev->addr.bus, pci_dev->addr.devid, pci_dev->addr.function); hw->ctrl_bar = (uint8_t *)pci_dev->mem_resource[0].addr; if (hw->ctrl_bar == NULL) { PMD_DRV_LOG(ERR, "hw->ctrl_bar is NULL. BAR0 not configured"); return -ENODEV; } PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:313 error: while searching for: nfp_net_cfg_queue_setup(hw); /* Get some of the read-only fields from the config BAR */ hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:354 Applying patch doc/guides/nics/nfp.rst with 1 reject... Rejected hunk #1. Applying patch doc/guides/rel_notes/release_22_07.rst with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ctrl.h with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ethdev.c with 6 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Rejected hunk #6. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 4 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. diff a/doc/guides/nics/nfp.rst b/doc/guides/nics/nfp.rst (rejected hunks) @@ -100,9 +100,10 @@ more than one SmartNIC, same type of SmartNIC or different ones, and to upload a different firmware to each SmartNIC. .. Note:: - Currently the NFP PMD supports using the PF with Agilio Basic Firmware. See - https://help.netronome.com/support/solutions for more information on the - various firmwares supported by the Netronome Agilio CX smartNIC. + Currently the NFP PMD supports using the PF with Agilio Firmware with NFD3 + and Agilio Firmware with NFDk. See https://help.netronome.com/support/solutions + for more information on the various firmwares supported by the Netronome + Agilio CX smartNIC. PF multiport support -------------------- diff a/doc/guides/rel_notes/release_22_07.rst b/doc/guides/rel_notes/release_22_07.rst (rejected hunks) @@ -111,6 +111,7 @@ New Features * **Updated Netronome nfp driver.** * Added support for NFP3800 NIC. + * Added support for firmware with NFDk. * **Updated VMware vmxnet3 networking driver.** diff a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h (rejected hunks) @@ -135,6 +135,8 @@ * - define more STS bits */ #define NFP_NET_CFG_VERSION 0x0030 +#define NFP_NET_CFG_VERSION_DP_NFD3 0 +#define NFP_NET_CFG_VERSION_DP_NFDK 1 #define NFP_NET_CFG_VERSION_RESERVED_MASK (0xff << 24) #define NFP_NET_CFG_VERSION_CLASS_MASK (0xff << 16) #define NFP_NET_CFG_VERSION_CLASS(x) (((x) & 0xff) << 16) diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -358,6 +358,32 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; +static inline int +nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) +{ + switch (NFD_CFG_CLASS_VER_of(hw->ver)) { + case NFP_NET_CFG_VERSION_DP_NFD3: + break; + case NFP_NET_CFG_VERSION_DP_NFDK: + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { + PMD_DRV_LOG(ERR, "NFDK must use ABI 5 or newer, found: %d", + NFD_CFG_MAJOR_VERSION_of(hw->ver)); + return -EINVAL; + } + break; + default: + PMD_DRV_LOG(ERR, "The version of firmware is not correct."); + return -EINVAL; + } + + eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; + eth_dev->rx_queue_count = nfp_net_rx_queue_count; + eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; + eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; + + return 0; +} + static int nfp_net_init(struct rte_eth_dev *eth_dev) { @@ -402,11 +428,6 @@ nfp_net_init(struct rte_eth_dev *eth_dev) PMD_INIT_LOG(DEBUG, "Working with physical port number: %d, " "NFP internal port number: %d", port, hw->nfp_idx); - eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; - eth_dev->rx_queue_count = nfp_net_rx_queue_count; - eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; - /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -441,6 +462,11 @@ nfp_net_init(struct rte_eth_dev *eth_dev) PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); + hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); + + if (nfp_net_ethdev_ops_mount(hw, eth_dev)) + return -EINVAL; + hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); @@ -473,7 +499,6 @@ nfp_net_init(struct rte_eth_dev *eth_dev) nfp_net_cfg_queue_setup(hw); /* Get some of the read-only fields from the config BAR */ - hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; @@ -939,6 +964,7 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) int err; int total_ports; struct nfp_cpp *cpp; + struct nfp_net_hw *hw; struct nfp_rtsym_table *sym_tbl; if (pci_dev == NULL) @@ -988,11 +1014,14 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) "secondary process attach failed, ethdev doesn't exist"); return -ENODEV; } + + hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); + + if (nfp_net_ethdev_ops_mount(hw, eth_dev)) + return -EINVAL; + eth_dev->process_private = cpp; - eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; - eth_dev->rx_queue_count = nfp_net_rx_queue_count; - eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; + rte_eth_dev_probing_finish(eth_dev); } diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -265,6 +265,32 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; +static inline int +nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) +{ + switch (NFD_CFG_CLASS_VER_of(hw->ver)) { + case NFP_NET_CFG_VERSION_DP_NFD3: + break; + case NFP_NET_CFG_VERSION_DP_NFDK: + if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { + PMD_DRV_LOG(ERR, "NFDK must use ABI 5 or newer, found: %d", + NFD_CFG_MAJOR_VERSION_of(hw->ver)); + return -EINVAL; + } + break; + default: + PMD_DRV_LOG(ERR, "The version of firmware is not correct."); + return -EINVAL; + } + + eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; + eth_dev->rx_queue_count = nfp_net_rx_queue_count; + eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; + eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; + + return 0; +} + static int nfp_netvf_init(struct rte_eth_dev *eth_dev) { @@ -292,10 +318,19 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) hw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); - eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; - eth_dev->rx_queue_count = nfp_net_rx_queue_count; - eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; + hw->ctrl_bar = (uint8_t *)pci_dev->mem_resource[0].addr; + if (hw->ctrl_bar == NULL) { + PMD_DRV_LOG(ERR, + "hw->ctrl_bar is NULL. BAR0 not configured"); + return -ENODEV; + } + + PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); + + hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); + + if (nfp_netvf_ethdev_ops_mount(hw, eth_dev)) + return -EINVAL; /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) @@ -313,15 +348,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) pci_dev->addr.domain, pci_dev->addr.bus, pci_dev->addr.devid, pci_dev->addr.function); - hw->ctrl_bar = (uint8_t *)pci_dev->mem_resource[0].addr; - if (hw->ctrl_bar == NULL) { - PMD_DRV_LOG(ERR, - "hw->ctrl_bar is NULL. BAR0 not configured"); - return -ENODEV; - } - - PMD_INIT_LOG(DEBUG, "ctrl bar: %p", hw->ctrl_bar); - hw->max_rx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_RXRINGS); hw->max_tx_queues = nn_cfg_readl(hw, NFP_NET_CFG_MAX_TXRINGS); @@ -354,7 +380,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) nfp_net_cfg_queue_setup(hw); /* Get some of the read-only fields from the config BAR */ - hw->ver = nn_cfg_readl(hw, NFP_NET_CFG_VERSION); hw->cap = nn_cfg_readl(hw, NFP_NET_CFG_CAP); hw->max_mtu = nn_cfg_readl(hw, NFP_NET_CFG_MAX_MTU); hw->mtu = RTE_ETHER_MTU; Checking patch drivers/net/nfp/nfp_rxtx.h... error: while searching for: #define PCIE_DESC_TX_ENCAP_VXLAN (1 << 1) #define PCIE_DESC_TX_ENCAP_GRE (1 << 0) struct nfp_net_nfd3_tx_desc { union { struct { error: patch failed: drivers/net/nfp/nfp_rxtx.h:53 Hunk #2 succeeded at 136 (offset 27 lines). error: while searching for: * of the queue and @size is the size in bytes for the queue * (needed for free) */ struct nfp_net_nfd3_tx_desc *txds; /* * At this point 48 bytes have been used for all the fields in the error: patch failed: drivers/net/nfp/nfp_rxtx.h:124 error: while searching for: uint32_t tx_hthresh; /* not used by now. Future? */ uint32_t tx_wthresh; /* not used by now. Future? */ uint16_t port_id; int qidx; int tx_qcidx; __le64 dma; error: patch failed: drivers/net/nfp/nfp_rxtx.h:137 Applying patch drivers/net/nfp/nfp_rxtx.h with 3 rejects... Rejected hunk #1. Hunk #2 applied cleanly. Rejected hunk #3. Rejected hunk #4. diff a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h (rejected hunks) @@ -53,6 +53,31 @@ #define PCIE_DESC_TX_ENCAP_VXLAN (1 << 1) #define PCIE_DESC_TX_ENCAP_GRE (1 << 0) +#define NFDK_TX_MAX_DATA_PER_HEAD 0x00001000 +#define NFDK_DESC_TX_DMA_LEN_HEAD 0x0fff +#define NFDK_DESC_TX_TYPE_HEAD 0xf000 +#define NFDK_DESC_TX_DMA_LEN 0x3fff +#define NFDK_TX_DESC_PER_SIMPLE_PKT 2 +#define NFDK_DESC_TX_TYPE_TSO 2 +#define NFDK_DESC_TX_TYPE_SIMPLE 8 +#define NFDK_DESC_TX_TYPE_GATHER 1 +#define NFDK_DESC_TX_EOP BIT(14) +#define NFDK_DESC_TX_L4_CSUM BIT(1) +#define NFDK_DESC_TX_L3_CSUM BIT(0) + +#define NFDK_TX_MAX_DATA_PER_DESC 0x00004000 +#define NFDK_TX_DESC_GATHER_MAX 17 +#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) +#define NFDK_TX_DESC_BLOCK_SZ 256 +#define NFDK_TX_DESC_BLOCK_CNT (NFDK_TX_DESC_BLOCK_SZ / \ + sizeof(struct nfp_net_nfdk_tx_desc)) +#define NFDK_TX_DESC_STOP_CNT (NFDK_TX_DESC_BLOCK_CNT * \ + NFDK_TX_DESC_PER_SIMPLE_PKT) +#define NFDK_TX_MAX_DATA_PER_BLOCK 0x00010000 +#define D_BLOCK_CPL(idx) (NFDK_TX_DESC_BLOCK_CNT - \ + (idx) % NFDK_TX_DESC_BLOCK_CNT) +#define D_IDX(ring, idx) ((idx) & ((ring)->tx_count - 1)) + struct nfp_net_nfd3_tx_desc { union { struct { @@ -124,7 +176,10 @@ struct nfp_net_txq { * of the queue and @size is the size in bytes for the queue * (needed for free) */ - struct nfp_net_nfd3_tx_desc *txds; + union { + struct nfp_net_nfd3_tx_desc *txds; + struct nfp_net_nfdk_tx_desc *ktxds; + }; /* * At this point 48 bytes have been used for all the fields in the @@ -137,6 +192,7 @@ struct nfp_net_txq { uint32_t tx_hthresh; /* not used by now. Future? */ uint32_t tx_wthresh; /* not used by now. Future? */ uint16_t port_id; + uint16_t data_pending; /* used by nfdk only */ int qidx; int tx_qcidx; __le64 dma; Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; static inline int nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) { switch (NFD_CFG_CLASS_VER_of(hw->ver)) { case NFP_NET_CFG_VERSION_DP_NFD3: break; case NFP_NET_CFG_VERSION_DP_NFDK: if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { error: patch failed: drivers/net/nfp/nfp_ethdev.c:358 error: while searching for: NFD_CFG_MAJOR_VERSION_of(hw->ver)); return -EINVAL; } break; default: PMD_DRV_LOG(ERR, "The version of firmware is not correct."); return -EINVAL; } eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; error: patch failed: drivers/net/nfp/nfp_ethdev.c:370 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; static inline int nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) { switch (NFD_CFG_CLASS_VER_of(hw->ver)) { case NFP_NET_CFG_VERSION_DP_NFD3: break; case NFP_NET_CFG_VERSION_DP_NFDK: if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:265 error: while searching for: NFD_CFG_MAJOR_VERSION_of(hw->ver)); return -EINVAL; } break; default: PMD_DRV_LOG(ERR, "The version of firmware is not correct."); return -EINVAL; } eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:277 Checking patch drivers/net/nfp/nfp_rxtx.c... error: while searching for: return i; } error: patch failed: drivers/net/nfp/nfp_rxtx.c:987 Checking patch drivers/net/nfp/nfp_rxtx.h... error: drivers/net/nfp/nfp_rxtx.h: does not match index Applying patch drivers/net/nfp/nfp_ethdev.c with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch drivers/net/nfp/nfp_rxtx.c with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -358,11 +358,41 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = { .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; +static const struct eth_dev_ops nfp_net_nfdk_eth_dev_ops = { + .dev_configure = nfp_net_configure, + .dev_start = nfp_net_start, + .dev_stop = nfp_net_stop, + .dev_set_link_up = nfp_net_set_link_up, + .dev_set_link_down = nfp_net_set_link_down, + .dev_close = nfp_net_close, + .promiscuous_enable = nfp_net_promisc_enable, + .promiscuous_disable = nfp_net_promisc_disable, + .link_update = nfp_net_link_update, + .stats_get = nfp_net_stats_get, + .stats_reset = nfp_net_stats_reset, + .dev_infos_get = nfp_net_infos_get, + .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, + .mtu_set = nfp_net_dev_mtu_set, + .mac_addr_set = nfp_net_set_mac_addr, + .vlan_offload_set = nfp_net_vlan_offload_set, + .reta_update = nfp_net_reta_update, + .reta_query = nfp_net_reta_query, + .rss_hash_update = nfp_net_rss_hash_update, + .rss_hash_conf_get = nfp_net_rss_hash_conf_get, + .rx_queue_setup = nfp_net_rx_queue_setup, + .rx_queue_release = nfp_net_rx_queue_release, + .tx_queue_setup = nfp_net_nfdk_tx_queue_setup, + .tx_queue_release = nfp_net_tx_queue_release, + .rx_queue_intr_enable = nfp_rx_queue_intr_enable, + .rx_queue_intr_disable = nfp_rx_queue_intr_disable, +}; + static inline int nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) { switch (NFD_CFG_CLASS_VER_of(hw->ver)) { case NFP_NET_CFG_VERSION_DP_NFD3: + eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; break; case NFP_NET_CFG_VERSION_DP_NFDK: if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { @@ -370,13 +400,13 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) NFD_CFG_MAJOR_VERSION_of(hw->ver)); return -EINVAL; } + eth_dev->dev_ops = &nfp_net_nfdk_eth_dev_ops; break; default: PMD_DRV_LOG(ERR, "The version of firmware is not correct."); return -EINVAL; } - eth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -265,11 +265,41 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = { .rx_queue_intr_disable = nfp_rx_queue_intr_disable, }; +static const struct eth_dev_ops nfp_netvf_nfdk_eth_dev_ops = { + .dev_configure = nfp_net_configure, + .dev_start = nfp_netvf_start, + .dev_stop = nfp_netvf_stop, + .dev_set_link_up = nfp_netvf_set_link_up, + .dev_set_link_down = nfp_netvf_set_link_down, + .dev_close = nfp_netvf_close, + .promiscuous_enable = nfp_net_promisc_enable, + .promiscuous_disable = nfp_net_promisc_disable, + .link_update = nfp_net_link_update, + .stats_get = nfp_net_stats_get, + .stats_reset = nfp_net_stats_reset, + .dev_infos_get = nfp_net_infos_get, + .dev_supported_ptypes_get = nfp_net_supported_ptypes_get, + .mtu_set = nfp_net_dev_mtu_set, + .mac_addr_set = nfp_net_set_mac_addr, + .vlan_offload_set = nfp_net_vlan_offload_set, + .reta_update = nfp_net_reta_update, + .reta_query = nfp_net_reta_query, + .rss_hash_update = nfp_net_rss_hash_update, + .rss_hash_conf_get = nfp_net_rss_hash_conf_get, + .rx_queue_setup = nfp_net_rx_queue_setup, + .rx_queue_release = nfp_net_rx_queue_release, + .tx_queue_setup = nfp_net_nfdk_tx_queue_setup, + .tx_queue_release = nfp_net_tx_queue_release, + .rx_queue_intr_enable = nfp_rx_queue_intr_enable, + .rx_queue_intr_disable = nfp_rx_queue_intr_disable, +}; + static inline int nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) { switch (NFD_CFG_CLASS_VER_of(hw->ver)) { case NFP_NET_CFG_VERSION_DP_NFD3: + eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; break; case NFP_NET_CFG_VERSION_DP_NFDK: if (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) { @@ -277,13 +307,13 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev) NFD_CFG_MAJOR_VERSION_of(hw->ver)); return -EINVAL; } + eth_dev->dev_ops = &nfp_netvf_nfdk_eth_dev_ops; break; default: PMD_DRV_LOG(ERR, "The version of firmware is not correct."); return -EINVAL; } - eth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops; eth_dev->rx_queue_count = nfp_net_rx_queue_count; eth_dev->rx_pkt_burst = &nfp_net_recv_pkts; eth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts; diff a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c (rejected hunks) @@ -987,3 +987,120 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk return i; } + +int +nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, + uint16_t queue_idx, + uint16_t nb_desc, + unsigned int socket_id, + const struct rte_eth_txconf *tx_conf) +{ + const struct rte_memzone *tz; + 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 */ + tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfdk_tx_desc); + if (((NFDK_TX_DESC_PER_SIMPLE_PKT * tx_desc_sz) % NFP_ALIGN_RING_DESC) != 0 || + ((NFDK_TX_DESC_PER_SIMPLE_PKT * nb_desc) % NFDK_TX_DESC_BLOCK_CNT) != 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; + } + + tx_free_thresh = (uint16_t)((tx_conf->tx_free_thresh) ? + tx_conf->tx_free_thresh : + DEFAULT_TX_FREE_THRESH); + + if (tx_free_thresh > (nb_desc)) { + PMD_DRV_LOG(ERR, + "tx_free_thresh must be less than the number of TX " + "descriptors. (tx_free_thresh=%u port=%d " + "queue=%d)", (unsigned int)tx_free_thresh, + dev->data->port_id, (int)queue_idx); + return -(EINVAL); + } + + /* + * Free memory prior to re-allocation if needed. This is the case after + * calling nfp_net_stop + */ + if (dev->data->tx_queues[queue_idx]) { + PMD_TX_LOG(DEBUG, "Freeing memory prior to re-allocation %d", + queue_idx); + nfp_net_tx_queue_release(dev, queue_idx); + dev->data->tx_queues[queue_idx] = NULL; + } + + /* Allocating tx queue data structure */ + txq = rte_zmalloc_socket("ethdev TX queue", sizeof(struct nfp_net_txq), + RTE_CACHE_LINE_SIZE, socket_id); + if (txq == NULL) { + PMD_DRV_LOG(ERR, "Error allocating tx dma"); + return -ENOMEM; + } + + /* + * Allocate TX ring hardware descriptors. A memzone large enough to + * handle the maximum ring size is allocated in order to allow for + * resizing in later calls to the queue setup function. + */ + tz = rte_eth_dma_zone_reserve(dev, "tx_ring", queue_idx, + sizeof(struct nfp_net_nfdk_tx_desc) * + NFDK_TX_DESC_PER_SIMPLE_PKT * + NFP_NET_MAX_TX_DESC, NFP_MEMZONE_ALIGN, + socket_id); + if (tz == NULL) { + PMD_DRV_LOG(ERR, "Error allocating tx dma"); + nfp_net_tx_queue_release(dev, queue_idx); + return -ENOMEM; + } + + txq->tx_count = nb_desc * NFDK_TX_DESC_PER_SIMPLE_PKT; + txq->tx_free_thresh = tx_free_thresh; + txq->tx_pthresh = tx_conf->tx_thresh.pthresh; + txq->tx_hthresh = tx_conf->tx_thresh.hthresh; + txq->tx_wthresh = tx_conf->tx_thresh.wthresh; + + /* queue mapping based on firmware configuration */ + txq->qidx = queue_idx; + txq->tx_qcidx = queue_idx * hw->stride_tx; + txq->qcp_q = hw->tx_bar + NFP_QCP_QUEUE_OFF(txq->tx_qcidx); + + txq->port_id = dev->data->port_id; + + /* Saving physical and virtual addresses for the TX ring */ + txq->dma = (uint64_t)tz->iova; + txq->ktxds = (struct nfp_net_nfdk_tx_desc *)tz->addr; + + /* mbuf pointers array for referencing mbufs linked to TX descriptors */ + txq->txbufs = rte_zmalloc_socket("txq->txbufs", + sizeof(*txq->txbufs) * txq->tx_count, + RTE_CACHE_LINE_SIZE, socket_id); + + if (txq->txbufs == NULL) { + nfp_net_tx_queue_release(dev, queue_idx); + return -ENOMEM; + } + PMD_TX_LOG(DEBUG, "txbufs=%p hw_ring=%p dma_addr=0x%" PRIx64, + txq->txbufs, txq->ktxds, (unsigned long)txq->dma); + + nfp_net_reset_tx_queue(txq); + + dev->data->tx_queues[queue_idx] = txq; + txq->hw = hw; + /* + * Telling the HW about the physical address of the TX ring and number + * of descriptors in log2 format + */ + nn_cfg_writeq(hw, NFP_NET_CFG_TXR_ADDR(queue_idx), txq->dma); + nn_cfg_writeb(hw, NFP_NET_CFG_TXR_SZ(queue_idx), rte_log2_u32(txq->tx_count)); + + return 0; +} Checking patch drivers/net/nfp/nfp_common.c... error: while searching for: return ret; } RTE_LOG_REGISTER_SUFFIX(nfp_logtype_init, init, NOTICE); RTE_LOG_REGISTER_SUFFIX(nfp_logtype_driver, driver, NOTICE); /* error: patch failed: drivers/net/nfp/nfp_common.c:1320 Checking patch drivers/net/nfp/nfp_common.h... error: while searching for: int nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf); int nfp_net_rss_config_default(struct rte_eth_dev *dev); #define NFP_NET_DEV_PRIVATE_TO_HW(adapter)\ (&((struct nfp_net_adapter *)adapter)->hw) error: patch failed: drivers/net/nfp/nfp_common.h:413 Checking patch drivers/net/nfp/nfp_ethdev.c... error: while searching for: static int nfp_net_stop(struct rte_eth_dev *dev) { int i; struct nfp_net_hw *hw; struct nfp_net_txq *this_tx_q; struct nfp_net_rxq *this_rx_q; PMD_INIT_LOG(DEBUG, "Stop"); error: patch failed: drivers/net/nfp/nfp_ethdev.c:181 error: while searching for: nfp_net_disable_queues(dev); /* Clear queues */ for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); } if (rte_eal_process_type() == RTE_PROC_PRIMARY) /* Configure the physical port down */ error: patch failed: drivers/net/nfp/nfp_ethdev.c:193 error: while searching for: struct nfp_net_hw *hw; struct rte_pci_device *pci_dev; struct nfp_pf_dev *pf_dev; struct nfp_net_txq *this_tx_q; struct nfp_net_rxq *this_rx_q; int i; if (rte_eal_process_type() != RTE_PROC_PRIMARY) error: patch failed: drivers/net/nfp/nfp_ethdev.c:256 error: while searching for: nfp_net_disable_queues(dev); /* Clear queues */ for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); nfp_net_tx_queue_release(dev, i); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); nfp_net_rx_queue_release(dev, i); } /* Cancel possible impending LSC work here before releasing the port*/ rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, error: patch failed: drivers/net/nfp/nfp_ethdev.c:277 Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: while searching for: static int nfp_netvf_stop(struct rte_eth_dev *dev) { struct nfp_net_txq *this_tx_q; struct nfp_net_rxq *this_rx_q; int i; PMD_INIT_LOG(DEBUG, "Stop"); nfp_net_disable_queues(dev); /* Clear queues */ for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); } return 0; } error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:145 error: while searching for: nfp_netvf_close(struct rte_eth_dev *dev) { struct rte_pci_device *pci_dev; struct nfp_net_txq *this_tx_q; struct nfp_net_rxq *this_rx_q; int i; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:185 error: while searching for: nfp_net_disable_queues(dev); /* Clear queues */ for (i = 0; i < dev->data->nb_tx_queues; i++) { this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; nfp_net_reset_tx_queue(this_tx_q); nfp_net_tx_queue_release(dev, i); } for (i = 0; i < dev->data->nb_rx_queues; i++) { this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; nfp_net_reset_rx_queue(this_rx_q); nfp_net_rx_queue_release(dev, i); } rte_intr_disable(pci_dev->intr_handle); error: patch failed: drivers/net/nfp/nfp_ethdev_vf.c:204 Applying patch drivers/net/nfp/nfp_common.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_common.h with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfp_ethdev.c with 4 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Applying patch drivers/net/nfp/nfp_ethdev_vf.c with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. diff a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c (rejected hunks) @@ -1320,6 +1320,56 @@ nfp_net_rss_config_default(struct rte_eth_dev *dev) return ret; } +void +nfp_net_stop_rx_queue(struct rte_eth_dev *dev) +{ + uint16_t i; + struct nfp_net_rxq *this_rx_q; + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; + nfp_net_reset_rx_queue(this_rx_q); + } +} + +void +nfp_net_close_rx_queue(struct rte_eth_dev *dev) +{ + uint16_t i; + struct nfp_net_rxq *this_rx_q; + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; + nfp_net_reset_rx_queue(this_rx_q); + nfp_net_rx_queue_release(dev, i); + } +} + +void +nfp_net_stop_tx_queue(struct rte_eth_dev *dev) +{ + uint16_t i; + struct nfp_net_txq *this_tx_q; + + for (i = 0; i < dev->data->nb_tx_queues; i++) { + this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; + nfp_net_reset_tx_queue(this_tx_q); + } +} + +void +nfp_net_close_tx_queue(struct rte_eth_dev *dev) +{ + uint16_t i; + struct nfp_net_txq *this_tx_q; + + for (i = 0; i < dev->data->nb_tx_queues; i++) { + this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; + nfp_net_reset_tx_queue(this_tx_q); + nfp_net_tx_queue_release(dev, i); + } +} + RTE_LOG_REGISTER_SUFFIX(nfp_logtype_init, init, NOTICE); RTE_LOG_REGISTER_SUFFIX(nfp_logtype_driver, driver, NOTICE); /* diff a/drivers/net/nfp/nfp_common.h b/drivers/net/nfp/nfp_common.h (rejected hunks) @@ -413,6 +413,10 @@ int nfp_net_rss_hash_update(struct rte_eth_dev *dev, int nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf); int nfp_net_rss_config_default(struct rte_eth_dev *dev); +void nfp_net_stop_rx_queue(struct rte_eth_dev *dev); +void nfp_net_close_rx_queue(struct rte_eth_dev *dev); +void nfp_net_stop_tx_queue(struct rte_eth_dev *dev); +void nfp_net_close_tx_queue(struct rte_eth_dev *dev); #define NFP_NET_DEV_PRIVATE_TO_HW(adapter)\ (&((struct nfp_net_adapter *)adapter)->hw) diff a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c (rejected hunks) @@ -181,10 +181,7 @@ nfp_net_start(struct rte_eth_dev *dev) static int nfp_net_stop(struct rte_eth_dev *dev) { - int i; struct nfp_net_hw *hw; - struct nfp_net_txq *this_tx_q; - struct nfp_net_rxq *this_rx_q; PMD_INIT_LOG(DEBUG, "Stop"); @@ -193,15 +190,9 @@ nfp_net_stop(struct rte_eth_dev *dev) nfp_net_disable_queues(dev); /* Clear queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) { - this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; - nfp_net_reset_tx_queue(this_tx_q); - } + nfp_net_stop_tx_queue(dev); - for (i = 0; i < dev->data->nb_rx_queues; i++) { - this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; - nfp_net_reset_rx_queue(this_rx_q); - } + nfp_net_stop_rx_queue(dev); if (rte_eal_process_type() == RTE_PROC_PRIMARY) /* Configure the physical port down */ @@ -256,8 +247,6 @@ nfp_net_close(struct rte_eth_dev *dev) struct nfp_net_hw *hw; struct rte_pci_device *pci_dev; struct nfp_pf_dev *pf_dev; - struct nfp_net_txq *this_tx_q; - struct nfp_net_rxq *this_rx_q; int i; if (rte_eal_process_type() != RTE_PROC_PRIMARY) @@ -277,17 +266,9 @@ nfp_net_close(struct rte_eth_dev *dev) nfp_net_disable_queues(dev); /* Clear queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) { - this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; - nfp_net_reset_tx_queue(this_tx_q); - nfp_net_tx_queue_release(dev, i); - } + nfp_net_close_tx_queue(dev); - for (i = 0; i < dev->data->nb_rx_queues; i++) { - this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; - nfp_net_reset_rx_queue(this_rx_q); - nfp_net_rx_queue_release(dev, i); - } + nfp_net_close_rx_queue(dev); /* Cancel possible impending LSC work here before releasing the port*/ rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, diff a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c (rejected hunks) @@ -145,24 +145,14 @@ nfp_netvf_start(struct rte_eth_dev *dev) static int nfp_netvf_stop(struct rte_eth_dev *dev) { - struct nfp_net_txq *this_tx_q; - struct nfp_net_rxq *this_rx_q; - int i; - PMD_INIT_LOG(DEBUG, "Stop"); nfp_net_disable_queues(dev); /* Clear queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) { - this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; - nfp_net_reset_tx_queue(this_tx_q); - } + nfp_net_stop_tx_queue(dev); - for (i = 0; i < dev->data->nb_rx_queues; i++) { - this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; - nfp_net_reset_rx_queue(this_rx_q); - } + nfp_net_stop_rx_queue(dev); return 0; } @@ -185,9 +175,6 @@ static int nfp_netvf_close(struct rte_eth_dev *dev) { struct rte_pci_device *pci_dev; - struct nfp_net_txq *this_tx_q; - struct nfp_net_rxq *this_rx_q; - int i; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -204,17 +191,9 @@ nfp_netvf_close(struct rte_eth_dev *dev) nfp_net_disable_queues(dev); /* Clear queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) { - this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; - nfp_net_reset_tx_queue(this_tx_q); - nfp_net_tx_queue_release(dev, i); - } + nfp_net_close_tx_queue(dev); - for (i = 0; i < dev->data->nb_rx_queues; i++) { - this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; - nfp_net_reset_rx_queue(this_rx_q); - nfp_net_rx_queue_release(dev, i); - } + nfp_net_close_rx_queue(dev); rte_intr_disable(pci_dev->intr_handle); Checking patch drivers/net/nfp/nfpcore/nfp_rtsym.c... error: while searching for: return rtbl; } /* * This looks more complex than it should be. But we need to get the type for * the ~ right in round_down (it needs to be as wide as the result!), and we * want to evaluate the macro arguments just once each. */ #define __round_mask(x, y) ((__typeof__(x))((y) - 1)) #define round_up(x, y) \ (__extension__ ({ \ typeof(x) _x = (x); \ ((((_x) - 1) | __round_mask(_x, y)) + 1); \ })) #define round_down(x, y) \ (__extension__ ({ \ typeof(x) _x = (x); \ ((_x) & ~__round_mask(_x, y)); \ })) struct nfp_rtsym_table * __nfp_rtsym_table_read(struct nfp_cpp *cpp, const struct nfp_mip *mip) { error: patch failed: drivers/net/nfp/nfpcore/nfp_rtsym.c:94 Checking patch drivers/net/nfp/nfpcore/nfp_rtsym.h... error: while searching for: #define NFP_RTSYM_TARGET_LMEM -1 #define NFP_RTSYM_TARGET_EMU_CACHE -7 /* * Structure describing a run-time NFP symbol. * error: patch failed: drivers/net/nfp/nfpcore/nfp_rtsym.h:15 Applying patch drivers/net/nfp/nfpcore/nfp_rtsym.c with 1 reject... Rejected hunk #1. Applying patch drivers/net/nfp/nfpcore/nfp_rtsym.h with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfpcore/nfp_rtsym.c b/drivers/net/nfp/nfpcore/nfp_rtsym.c (rejected hunks) @@ -94,25 +94,6 @@ nfp_rtsym_table_read(struct nfp_cpp *cpp) return rtbl; } -/* - * This looks more complex than it should be. But we need to get the type for - * the ~ right in round_down (it needs to be as wide as the result!), and we - * want to evaluate the macro arguments just once each. - */ -#define __round_mask(x, y) ((__typeof__(x))((y) - 1)) - -#define round_up(x, y) \ - (__extension__ ({ \ - typeof(x) _x = (x); \ - ((((_x) - 1) | __round_mask(_x, y)) + 1); \ - })) - -#define round_down(x, y) \ - (__extension__ ({ \ - typeof(x) _x = (x); \ - ((_x) & ~__round_mask(_x, y)); \ - })) - struct nfp_rtsym_table * __nfp_rtsym_table_read(struct nfp_cpp *cpp, const struct nfp_mip *mip) { diff a/drivers/net/nfp/nfpcore/nfp_rtsym.h b/drivers/net/nfp/nfpcore/nfp_rtsym.h (rejected hunks) @@ -15,6 +15,25 @@ #define NFP_RTSYM_TARGET_LMEM -1 #define NFP_RTSYM_TARGET_EMU_CACHE -7 +/* + * This looks more complex than it should be. But we need to get the type for + * the ~ right in round_down (it needs to be as wide as the result!), and we + * want to evaluate the macro arguments just once each. + */ +#define __round_mask(x, y) ((__typeof__(x))((y) - 1)) + +#define round_up(x, y) \ + (__extension__ ({ \ + typeof(x) _x = (x); \ + ((((_x) - 1) | __round_mask(_x, y)) + 1); \ + })) + +#define round_down(x, y) \ + (__extension__ ({ \ + typeof(x) _x = (x); \ + ((_x) & ~__round_mask(_x, y)); \ + })) + /* * Structure describing a run-time NFP symbol. * Checking patch drivers/net/nfp/nfp_ethdev.c... Hunk #1 succeeded at 377 (offset 3 lines). Hunk #2 succeeded at 386 (offset 3 lines). Hunk #3 succeeded at 395 (offset 3 lines). Checking patch drivers/net/nfp/nfp_ethdev_vf.c... Hunk #1 succeeded at 282 (offset 3 lines). Hunk #2 succeeded at 291 (offset 3 lines). Hunk #3 succeeded at 300 (offset 3 lines). Checking patch drivers/net/nfp/nfp_rxtx.c... Checking patch drivers/net/nfp/nfp_rxtx.h... error: drivers/net/nfp/nfp_rxtx.h: does not match index Applied patch drivers/net/nfp/nfp_ethdev.c cleanly. Applied patch drivers/net/nfp/nfp_ethdev_vf.c cleanly. Applied patch drivers/net/nfp/nfp_rxtx.c cleanly. Checking patch drivers/net/nfp/nfp_common.c... error: while searching for: /* Checking RX mode */ if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS && !(hw->cap & NFP_NET_CFG_CTRL_RSS)) { PMD_INIT_LOG(INFO, "RSS not supported"); return -EINVAL; } error: patch failed: drivers/net/nfp/nfp_common.c:171 error: while searching for: .nb_mtu_seg_max = NFP_TX_MAX_MTU_SEG, }; if (hw->cap & NFP_NET_CFG_CTRL_RSS) { dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_RSS_HASH; dev_info->flow_type_rss_offloads = RTE_ETH_RSS_IPV4 | error: patch failed: drivers/net/nfp/nfp_common.c:769 error: while searching for: uint32_t update; int ret; if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) return -EINVAL; ret = nfp_net_rss_reta_write(dev, reta_conf, reta_size); error: patch failed: drivers/net/nfp/nfp_common.c:1080 error: while searching for: hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) return -EINVAL; if (reta_size != NFP_NET_CFG_RSS_ITBL_SZ) { error: patch failed: drivers/net/nfp/nfp_common.c:1108 error: while searching for: rss_hf = rss_conf->rss_hf; /* Checking if RSS is enabled */ if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) { if (rss_hf != 0) { /* Enable RSS? */ PMD_DRV_LOG(ERR, "RSS unsupported"); return -EINVAL; error: patch failed: drivers/net/nfp/nfp_common.c:1206 error: while searching for: hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) return -EINVAL; rss_hf = rss_conf->rss_hf; error: patch failed: drivers/net/nfp/nfp_common.c:1241 Checking patch drivers/net/nfp/nfp_ctrl.h... error: while searching for: #define NFP_NET_CFG_MACADDR 0x0024 #define NFP_NET_CFG_CTRL_LSO_ANY (NFP_NET_CFG_CTRL_LSO | NFP_NET_CFG_CTRL_LSO2) /* * Read-only words (0x0030 - 0x0050): error: patch failed: drivers/net/nfp/nfp_ctrl.h:119 Checking patch drivers/net/nfp/nfp_ethdev.c... error: drivers/net/nfp/nfp_ethdev.c: does not match index Checking patch drivers/net/nfp/nfp_ethdev_vf.c... error: drivers/net/nfp/nfp_ethdev_vf.c: does not match index Checking patch drivers/net/nfp/nfp_rxtx.c... error: drivers/net/nfp/nfp_rxtx.c: does not match index Applying patch drivers/net/nfp/nfp_common.c with 6 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Rejected hunk #6. Applying patch drivers/net/nfp/nfp_ctrl.h with 1 reject... Rejected hunk #1. diff a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c (rejected hunks) @@ -171,7 +171,7 @@ nfp_net_configure(struct rte_eth_dev *dev) /* Checking RX mode */ if (rxmode->mq_mode & RTE_ETH_MQ_RX_RSS && - !(hw->cap & NFP_NET_CFG_CTRL_RSS)) { + !(hw->cap & NFP_NET_CFG_CTRL_RSS_ANY)) { PMD_INIT_LOG(INFO, "RSS not supported"); return -EINVAL; } @@ -769,7 +769,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) .nb_mtu_seg_max = NFP_TX_MAX_MTU_SEG, }; - if (hw->cap & NFP_NET_CFG_CTRL_RSS) { + if (hw->cap & NFP_NET_CFG_CTRL_RSS_ANY) { dev_info->rx_offload_capa |= RTE_ETH_RX_OFFLOAD_RSS_HASH; dev_info->flow_type_rss_offloads = RTE_ETH_RSS_IPV4 | @@ -1080,7 +1080,7 @@ nfp_net_reta_update(struct rte_eth_dev *dev, uint32_t update; int ret; - if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) + if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY)) return -EINVAL; ret = nfp_net_rss_reta_write(dev, reta_conf, reta_size); @@ -1108,7 +1108,7 @@ nfp_net_reta_query(struct rte_eth_dev *dev, hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); - if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) + if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY)) return -EINVAL; if (reta_size != NFP_NET_CFG_RSS_ITBL_SZ) { @@ -1206,7 +1206,7 @@ nfp_net_rss_hash_update(struct rte_eth_dev *dev, rss_hf = rss_conf->rss_hf; /* Checking if RSS is enabled */ - if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) { + if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY)) { if (rss_hf != 0) { /* Enable RSS? */ PMD_DRV_LOG(ERR, "RSS unsupported"); return -EINVAL; @@ -1241,7 +1241,7 @@ nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev, hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private); - if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS)) + if (!(hw->ctrl & NFP_NET_CFG_CTRL_RSS_ANY)) return -EINVAL; rss_hf = rss_conf->rss_hf; diff a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h (rejected hunks) @@ -119,6 +119,7 @@ #define NFP_NET_CFG_MACADDR 0x0024 #define NFP_NET_CFG_CTRL_LSO_ANY (NFP_NET_CFG_CTRL_LSO | NFP_NET_CFG_CTRL_LSO2) +#define NFP_NET_CFG_CTRL_RSS_ANY (NFP_NET_CFG_CTRL_RSS | NFP_NET_CFG_CTRL_RSS2) /* * Read-only words (0x0030 - 0x0050): https://lab.dpdk.org/results/dashboard/patchsets/22762/ UNH-IOL DPDK Community Lab