d971bbdc0624672fc3cf2b9144e053403295e7be
[dpdk.git] / drivers / net / cnxk / cn10k_ethdev.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 #include "cn10k_ethdev.h"
5
6 static int
7 cn10k_nix_configure(struct rte_eth_dev *eth_dev)
8 {
9         struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev);
10         int rc;
11
12         /* Common nix configure */
13         rc = cnxk_nix_configure(eth_dev);
14         if (rc)
15                 return rc;
16
17         plt_nix_dbg("Configured port%d platform specific rx_offload_flags=%x"
18                     " tx_offload_flags=0x%x",
19                     eth_dev->data->port_id, dev->rx_offload_flags,
20                     dev->tx_offload_flags);
21         return 0;
22 }
23
24 /* Update platform specific eth dev ops */
25 static void
26 nix_eth_dev_ops_override(void)
27 {
28         static int init_once;
29
30         if (init_once)
31                 return;
32         init_once = 1;
33
34         /* Update platform specific ops */
35         cnxk_eth_dev_ops.dev_configure = cn10k_nix_configure;
36 }
37
38 static int
39 cn10k_nix_remove(struct rte_pci_device *pci_dev)
40 {
41         return cnxk_nix_remove(pci_dev);
42 }
43
44 static int
45 cn10k_nix_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
46 {
47         struct rte_eth_dev *eth_dev;
48         int rc;
49
50         if (RTE_CACHE_LINE_SIZE != 64) {
51                 plt_err("Driver not compiled for CN10K");
52                 return -EFAULT;
53         }
54
55         rc = roc_plt_init();
56         if (rc) {
57                 plt_err("Failed to initialize platform model, rc=%d", rc);
58                 return rc;
59         }
60
61         nix_eth_dev_ops_override();
62
63         /* Common probe */
64         rc = cnxk_nix_probe(pci_drv, pci_dev);
65         if (rc)
66                 return rc;
67
68         if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
69                 eth_dev = rte_eth_dev_allocated(pci_dev->device.name);
70                 if (!eth_dev)
71                         return -ENOENT;
72         }
73         return 0;
74 }
75
76 static const struct rte_pci_id cn10k_pci_nix_map[] = {
77         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KA, PCI_DEVID_CNXK_RVU_PF),
78         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KAS, PCI_DEVID_CNXK_RVU_PF),
79         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KA, PCI_DEVID_CNXK_RVU_VF),
80         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KAS, PCI_DEVID_CNXK_RVU_VF),
81         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KA, PCI_DEVID_CNXK_RVU_AF_VF),
82         CNXK_PCI_ID(PCI_SUBSYSTEM_DEVID_CN10KAS, PCI_DEVID_CNXK_RVU_AF_VF),
83         {
84                 .vendor_id = 0,
85         },
86 };
87
88 static struct rte_pci_driver cn10k_pci_nix = {
89         .id_table = cn10k_pci_nix_map,
90         .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_NEED_IOVA_AS_VA |
91                      RTE_PCI_DRV_INTR_LSC,
92         .probe = cn10k_nix_probe,
93         .remove = cn10k_nix_remove,
94 };
95
96 RTE_PMD_REGISTER_PCI(net_cn10k, cn10k_pci_nix);
97 RTE_PMD_REGISTER_PCI_TABLE(net_cn10k, cn10k_pci_nix_map);
98 RTE_PMD_REGISTER_KMOD_DEP(net_cn10k, "vfio-pci");