get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/130865/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 130865,
    "url": "http://patchwork.dpdk.org/api/patches/130865/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20230830021457.2064750-28-chaoyong.he@corigine.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20230830021457.2064750-28-chaoyong.he@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20230830021457.2064750-28-chaoyong.he@corigine.com",
    "date": "2023-08-30T02:14:57",
    "name": "[v2,27/27] net/nfp: extend the usage of nfp BAR from 8 to 24",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "3cfbdf21186dffce3cb6c445c1d2c32aeed3ba59",
    "submitter": {
        "id": 2554,
        "url": "http://patchwork.dpdk.org/api/people/2554/?format=api",
        "name": "Chaoyong He",
        "email": "chaoyong.he@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20230830021457.2064750-28-chaoyong.he@corigine.com/mbox/",
    "series": [
        {
            "id": 29363,
            "url": "http://patchwork.dpdk.org/api/series/29363/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=29363",
            "date": "2023-08-30T02:14:30",
            "name": "refact the nfpcore module",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/29363/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/130865/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/130865/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 3FD3C41FC8;\n\tWed, 30 Aug 2023 04:19:12 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A507440DDB;\n\tWed, 30 Aug 2023 04:16:19 +0200 (CEST)",
            "from NAM02-BN1-obe.outbound.protection.outlook.com\n (mail-bn1nam02on2105.outbound.protection.outlook.com [40.107.212.105])\n by mails.dpdk.org (Postfix) with ESMTP id 91E66406BA\n for <dev@dpdk.org>; Wed, 30 Aug 2023 04:16:17 +0200 (CEST)",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)\n by DM6PR13MB3786.namprd13.prod.outlook.com (2603:10b6:5:229::11) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6745.18; Wed, 30 Aug\n 2023 02:16:15 +0000",
            "from SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::c0f3:c2cc:b5bb:4192]) by SJ0PR13MB5545.namprd13.prod.outlook.com\n ([fe80::c0f3:c2cc:b5bb:4192%4]) with mapi id 15.20.6699.034; Wed, 30 Aug 2023\n 02:16:15 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=BJOmxF3rvFoWtkddG1r/WR+abU+6DtXvbU/fmL/SlESYJgZiTmhOALU2lvZkNiUJxvAbNOpUHzbzBkwo70BCUKFYkugHTj4fxPDYmiTgfC6tUCZ3gEYu1Ns71OheKCHvh60/yRPHn36sOhL9JXg8cvF5b8xOMlxHKNMZE9yt/lVAVyWb/KaTIkimOPxt9yjrGYd4bvxDeniDff/IyqKiuWU1enMGLZJi1I6n1ZjDRqtxkEDcj+DPE6OBaVN3UeLixLc60u5mDMasJSsc0owlKB+1Bo6MEjOufER60CaDZQyUk/fuOhfgTIMCfDisCEmc30lPe+CmT9C6rs5b/4igdw==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=kawOvL8cPaguqLBQZOKjuZVEcj5PKFzXMXu0qjrWsWQ=;\n b=cBo4tEqP9r4p/xG4wcMxJVrWSA8ZhqPqy9HtnwVZt+C4MOmC7SNJnXq9m4p0xKNBCAX3XR8JPfwcL8fvYhyhCmeKnzeafOMVmipDT2Q5aitwnmtsWMUaAOlED3G9hwHLl02Fg+1dhnz6sUS98hG4iyZKOVTCftOtYNSgIJlKOetxNCj5TRoaV3sTFsl2kVu+EMTTlMhbz9lYamp+gyX0A+jAttOFNDcrGX3nW2JLqkXJvxX/Ousr8MNzN8NsdU1AwJQM9ZRK5FuuCFspYYUXgUvKO8EdDKCcIg69U1zvslWHpjlBorwdmPwlYZJd8sUXglvymj96oVJ7NFIe7YdRUw==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=kawOvL8cPaguqLBQZOKjuZVEcj5PKFzXMXu0qjrWsWQ=;\n b=a2HjCHSWQOSR/gWy35ptwL6ZgFA/tpJb3n+eqP0AXPRwuncXrcQLHfOzjUoUMUbKyAOYxfV3FMIc0uSqgwjYwDaOE2QbtKpVWnQ3m05kTBpu0k09wJvhYZOHZ2i84syXQshpRx1x83I5XY3NcYWZO0vGQC2RwlMRM0RUVehcD7w=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Chaoyong He <chaoyong.he@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "oss-drivers@corigine.com, niklas.soderlund@corigine.com,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH v2 27/27] net/nfp: extend the usage of nfp BAR from 8 to 24",
        "Date": "Wed, 30 Aug 2023 10:14:57 +0800",
        "Message-Id": "<20230830021457.2064750-28-chaoyong.he@corigine.com>",
        "X-Mailer": "git-send-email 2.39.1",
        "In-Reply-To": "<20230830021457.2064750-1-chaoyong.he@corigine.com>",
        "References": "<20230824110956.1943559-1-chaoyong.he@corigine.com>\n <20230830021457.2064750-1-chaoyong.he@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "PH0PR07CA0113.namprd07.prod.outlook.com\n (2603:10b6:510:4::28) To SJ0PR13MB5545.namprd13.prod.outlook.com\n (2603:10b6:a03:424::5)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ0PR13MB5545:EE_|DM6PR13MB3786:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "27d6c717-3a0b-44bf-47fe-08dba8ff16ab",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n SnhXltcY52ZMIWBrHzVIVOZjlwKjwNritd9ua6RXriFqcnbzrTmh4WIDLu2kTWacpZdkXuqqrUhjOW/y4g8jIA60j/aECcnitbGlVouOQljB5ajl4IWLbsUojk1ezIGz00n+OlYv77UDqoDluxZafx+2jzqT28Rdfb40HiTkqxcn401iP2/jvWCCLC6gPPb8MQtoLhtkZ65N+er/0O2CaayIu1P9xhlVJ2z4K9n9ZB5j6Ln8paF3q7L8FixPmKUpnX7+1+vIGkGOKUKfTDuUwV6LkR02s+J3V6pNTD+BPyhaFre12QK+vetc/RVL93YLIpT/X41gSPSwqDJgpQy2lQc4lVyN/lc3iLdfYVv8h08N08zvS40JAYKgg/Pl/TgyALpoq16sve/F+06kt7MlzRvm2C/KDshzdVosXFFlj07fKfhKa701YEQ1wpwFs7OAAXzqcmfA3K6s9FAHjbWvNBPRkCD0QG3a1nfH/2gTb5aBYfAaZkjJjjfX8ArQvj/4N4thhoFIURUPK1CR9GJ75TWSX1M53h61eqSzH0A+6ZvxCXbLjkiOgudNsmg5CaaV21ixlz7TxNJOBcQ7tQAhcX/uErP3/gOeYaeqcWSDFU3bcrBGZ6oylOP8sZBQ0p68uYrl5RGdk/egoiYtMg+JxYzf7wkF8q/RGXb3NUF2P0w=",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230031)(136003)(366004)(376002)(346002)(396003)(39830400003)(451199024)(186009)(1800799009)(6512007)(6916009)(316002)(38100700002)(41300700001)(38350700002)(2906002)(4326008)(66574015)(30864003)(83380400001)(2616005)(86362001)(44832011)(26005)(36756003)(1076003)(8676002)(5660300002)(107886003)(8936002)(6666004)(6506007)(6486002)(66556008)(66946007)(66476007)(52116002)(478600001);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?6Pb+J2QMGPmYPCZjEHiTywwJMu2o?=\n\t=?utf-8?q?TeBHgF7aYZU7j66naQd4cgC2H0ziEMKbwWsEdLp58grbRqZH4mcQqzyIsFlVkSDAU?=\n\t=?utf-8?q?e0YTQgH+CpuQZMctEYYvN5/fsYDiXQ0S2fAT3fF31MT9Lo2JlgU1segfUhsWNf57R?=\n\t=?utf-8?q?4Y8SFO9XogP2nwMjbFEIX+meKuccp8whKYKfcH51ca1xpGbZgfN19CU6WspjbFIv4?=\n\t=?utf-8?q?jW2rqhyB2C8UyxcljWSpxO2WTZbJdz0njBU8DgdrdHAa8SbLtgBbGJaFOlNKz9oRJ?=\n\t=?utf-8?q?OsO9s3zVo+nLErWe8u78LYV7qqJlElCRE+YkS+GCU3aBH7ndpxdDEdb2zI7qroLHj?=\n\t=?utf-8?q?A6DFDl2Srxd3QsW1do7k5C2NZXwy8dgKTXm3ViXj1hl2xZvDMzF+4eDkJHs8CRLHr?=\n\t=?utf-8?q?eV6jB4JMs/TEwomPqVTyG2seNpP/MtZV7xh1bTEqjAeyiG38IAkSe1MSDmYOQbo3o?=\n\t=?utf-8?q?VAnAzvsUTM3mjxbZQDi0+U+43H65xVzrCq9IfovznQBKXyK+WeJr5e6CE551dIJqC?=\n\t=?utf-8?q?oMtDNtTEimFUOEre3km/qqt2HjtEtuEo50QJkQxWCuI/LPZNsRyOjdF4z5ouh1i47?=\n\t=?utf-8?q?5Y0LJI/z8JaUMyYG1oAxBAdoNKV29w/MdCet3uVY3AdTHv6UE7+zeMz8sKq2cExPQ?=\n\t=?utf-8?q?UW+/nXwA6hRkRpACvfnfm1vE7oDksp8M0WpTjDT3d6c6nIt9DCC65RWlP9TjRsMoJ?=\n\t=?utf-8?q?qy1LPk4mJ2LVEd1pTYNGkNNYQdLQF4veA0DCp+ojwKPwV+JGkGMLjQrFDGefBI14J?=\n\t=?utf-8?q?fZt+SDImP3atbNXPmv+JuxutNG4MdDPpvLvAclo3RyJpbLv0sCztg8f9Vvw1oUZyL?=\n\t=?utf-8?q?hzAZm5grXt1iM9z+sp0NUQOsd0+PzQZB45aZM8Q1oJQvA/Fm+KDPkM7059vLIJjfX?=\n\t=?utf-8?q?+k6ZxTmGHA1B/VgQNkZ3oESfLhNNpOl5xepn6rScAcA5kD+RKAu/sYgE/votGx+bi?=\n\t=?utf-8?q?3wJUuSE0lFucg9Um1B27ChrQKy/LtRlHlevFdiYfU3LqBKb7L4XDEO1uhBVRHhKvh?=\n\t=?utf-8?q?lnME795U6YTGqjLyC5DW/oKqREHtkAINa6f88nazS9CqqglPPA9Yi7KS+IjkJ++Rz?=\n\t=?utf-8?q?nuD9LU6qWmYZ1WW5SvHbutPNEJeSIspgtsXizlyZJtkGKITkrdo8SJDYKU7zhHDU4?=\n\t=?utf-8?q?89ROGhFoQKxbtCjsGRbyWhk7itfnNIzJIaUHhK1vBXjyGXGjG/iIbQ5M8gSaUPicO?=\n\t=?utf-8?q?uiTm2YKT4hQK7zq9H0Exd+mgh+pNieaNpAuL/3Oq8s9IMus17CCyVl+gjQMlC4ewp?=\n\t=?utf-8?q?URd2b6ZP5WKeAhYxuTcCt/AUI3r44WwMRPlGle/OvykJbUaU+ckVYgtCaL9eDvPyo?=\n\t=?utf-8?q?kSeQQi6GHgCr3E87A3GaWdNE3Cao9FkGcPQG9Yprddtvyz0PyNpRvc/VfXvbziFgq?=\n\t=?utf-8?q?gP0PZv1BvFDWF9HfS3cKHmk5XEGdI+xS+k47fnx/Qp57vEGxcUsC3FD1i7Af46bLe?=\n\t=?utf-8?q?N0a01DS9wksMDaWOqvXTmTL81hFN6W/cgkeazeW7qBCWc+cyQ1Q2fEKin4Ji2zQrK?=\n\t=?utf-8?q?We0Od9SSexUrr99vaQxgiv9T1UrxNOu21Q=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 27d6c717-3a0b-44bf-47fe-08dba8ff16ab",
        "X-MS-Exchange-CrossTenant-AuthSource": "SJ0PR13MB5545.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Aug 2023 02:16:15.6861 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "fe128f2c-073b-4c20-818e-7246a585940c",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n Na5mLKsJmiVPp3OOcbAsxzMdXFO1S3ZH/uJARegeq7Px9tAzs6rGTNcLUT4INO9QSZez1yvdIkfc6Pgfm3mDzpeeFVEZM8YtTWH1GhWMnB8=",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM6PR13MB3786",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Sync the logic from kernel driver, adjust the definition of structure,\nand extend the usage of nfp BAR from 8 to 24.\n\nThis will greatly enhance the scalability of nfp PMD.\n\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nReviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n---\n drivers/net/nfp/nfp_ethdev.c           |   8 +-\n drivers/net/nfp/nfpcore/nfp6000_pcie.c | 475 ++++++++++++++++++-------\n drivers/net/nfp/nfpcore/nfp6000_pcie.h |   1 +\n drivers/net/nfp/nfpcore/nfp_cpp.h      |   5 +-\n drivers/net/nfp/nfpcore/nfp_cppcore.c  |   2 +-\n 5 files changed, 346 insertions(+), 145 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex 6eefec3836..d6454d8964 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -918,9 +918,9 @@ nfp_pf_init(struct rte_pci_device *pci_dev)\n \t * use a lock file if UIO is being used.\n \t */\n \tif (pci_dev->kdrv == RTE_PCI_KDRV_VFIO)\n-\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, false);\n+\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, dev_info, false);\n \telse\n-\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, true);\n+\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, dev_info, true);\n \n \tif (cpp == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"A CPP handle can not be obtained\");\n@@ -1121,9 +1121,9 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev)\n \t * use a lock file if UIO is being used.\n \t */\n \tif (pci_dev->kdrv == RTE_PCI_KDRV_VFIO)\n-\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, false);\n+\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, dev_info, false);\n \telse\n-\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, true);\n+\t\tcpp = nfp_cpp_from_nfp6000_pcie(pci_dev, dev_info, true);\n \n \tif (cpp == NULL) {\n \t\tPMD_INIT_LOG(ERR, \"A CPP handle can not be obtained\");\ndiff --git a/drivers/net/nfp/nfpcore/nfp6000_pcie.c b/drivers/net/nfp/nfpcore/nfp6000_pcie.c\nindex e32ac1107c..c16d9474e2 100644\n--- a/drivers/net/nfp/nfpcore/nfp6000_pcie.c\n+++ b/drivers/net/nfp/nfpcore/nfp6000_pcie.c\n@@ -19,6 +19,8 @@\n #include <unistd.h>\n #include <fcntl.h>\n \n+#include <rte_io.h>\n+\n #include \"nfp_cpp.h\"\n #include \"nfp_logs.h\"\n #include \"nfp_target.h\"\n@@ -59,20 +61,12 @@\n #define NFP_PCIE_P2C_GENERAL_TOKEN_OFFSET(bar, x) ((x) << ((bar)->bitsize - 4))\n #define NFP_PCIE_P2C_GENERAL_SIZE(bar)             (1 << ((bar)->bitsize - 4))\n \n-#define NFP_PCIE_CFG_BAR_PCIETOCPPEXPBAR(id, bar, slot) \\\n-\t(NFP_PCIE_BAR(id) + ((bar) * 8 + (slot)) * 4)\n-\n-#define NFP_PCIE_CPP_BAR_PCIETOCPPEXPBAR(bar, slot) \\\n-\t(((bar) * 8 + (slot)) * 4)\n+#define NFP_PCIE_P2C_EXPBAR_OFFSET(bar_index)      ((bar_index) * 4)\n \n struct nfp_pcie_user;\n struct nfp6000_area_priv;\n \n /* Describes BAR configuration and usage */\n-#define NFP_BAR_MIN 1\n-#define NFP_BAR_MID 5\n-#define NFP_BAR_MAX 7\n-\n struct nfp_bar {\n \tstruct nfp_pcie_user *nfp;    /**< Backlink to owner */\n \tuint32_t barcfg;     /**< BAR config CSR */\n@@ -80,22 +74,26 @@ struct nfp_bar {\n \tuint64_t mask;       /**< Mask of the BAR aperture (read only) */\n \tuint32_t bitsize;    /**< Bit size of the BAR aperture (read only) */\n \tuint32_t index;      /**< Index of the BAR */\n-\tint lock;            /**< If the BAR has been locked */\n+\tbool lock;           /**< If the BAR has been locked */\n \n-\tchar *csr;\n \tchar *iomem;         /**< mapped IO memory */\n+\tstruct rte_mem_resource *resource;    /**< IOMEM resource window */\n };\n \n-#define BUSDEV_SZ    13\n+#define NFP_PCI_BAR_MAX    (PCI_64BIT_BAR_COUNT * 8)\n+\n struct nfp_pcie_user {\n-\tstruct nfp_bar bar[NFP_BAR_MAX];\n+\tstruct rte_pci_device *pci_dev;\n+\tconst struct nfp_dev_info *dev_info;\n \n-\tint device;\n \tint lock;\n-\tchar busdev[BUSDEV_SZ];\n-\tint barsz;\n-\tint dev_id;\n-\tchar *cfg;\n+\n+\t/* PCI BAR management */\n+\tuint32_t bars;\n+\tstruct nfp_bar bar[NFP_PCI_BAR_MAX];\n+\n+\t/* Reserved BAR access */\n+\tchar *csr;\n };\n \n /* Generic CPP bus access interface. */\n@@ -206,19 +204,19 @@ nfp_bar_write(struct nfp_pcie_user *nfp,\n \t\tstruct nfp_bar *bar,\n \t\tuint32_t newcfg)\n {\n-\tint base;\n-\tint slot;\n-\n-\tbase = bar->index >> 3;\n-\tslot = bar->index & 7;\n+\tuint32_t xbar;\n \n-\tif (nfp->cfg == NULL)\n-\t\treturn (-ENOMEM);\n+\txbar = NFP_PCIE_P2C_EXPBAR_OFFSET(bar->index);\n \n-\tbar->csr = nfp->cfg +\n-\t\t\tNFP_PCIE_CFG_BAR_PCIETOCPPEXPBAR(nfp->dev_id, base, slot);\n-\n-\t*(uint32_t *)(bar->csr) = newcfg;\n+\tif (nfp->csr != NULL) {\n+\t\trte_write32(newcfg, nfp->csr + xbar);\n+\t\t/* Readback to ensure BAR is flushed */\n+\t\trte_read32(nfp->csr + xbar);\n+\t} else {\n+\t\txbar += nfp->dev_info->pcie_cfg_expbar_offset;\n+\t\trte_pci_write_config(nfp->pci_dev, &newcfg, sizeof(uint32_t),\n+\t\t\t\txbar);\n+\t}\n \n \tbar->barcfg = newcfg;\n \n@@ -249,105 +247,320 @@ nfp_reconfigure_bar(struct nfp_pcie_user *nfp,\n \treturn nfp_bar_write(nfp, bar, newcfg);\n }\n \n-/*\n- * Map all PCI bars. We assume that the BAR with the PCIe config block is\n- * already mapped.\n+static uint32_t\n+nfp_bitsize_calc(uint64_t mask)\n+{\n+\tuint64_t tmp = mask;\n+\tuint32_t bit_size = 0;\n+\n+\tif (tmp == 0)\n+\t\treturn 0;\n+\n+\tfor (; tmp != 0; tmp >>= 1)\n+\t\tbit_size++;\n+\n+\treturn bit_size;\n+}\n+\n+static int\n+nfp_cmp_bars(const void *ptr_a,\n+\t\tconst void *ptr_b)\n+{\n+\tconst struct nfp_bar *a = ptr_a;\n+\tconst struct nfp_bar *b = ptr_b;\n+\n+\tif (a->bitsize == b->bitsize)\n+\t\treturn a->index - b->index;\n+\telse\n+\t\treturn a->bitsize - b->bitsize;\n+}\n+\n+static bool\n+nfp_bars_for_secondary(uint32_t index)\n+{\n+\tuint8_t tmp = index & 0x07;\n+\n+\tif (tmp == 0x06 || tmp == 0x07)\n+\t\treturn true;\n+\telse\n+\t\treturn false;\n+}\n+\n+/**\n+ * Map all PCI bars and fetch the actual BAR configurations from the board.\n+ * We assume that the BAR with the PCIe config block is already mapped.\n  *\n  * BAR0.0: Reserved for General Mapping (for MSI-X access to PCIe SRAM)\n+ * BAR0.1: --\n+ * BAR0.2: --\n+ * BAR0.3: --\n+ * BAR0.4: --\n+ * BAR0.5: --\n+ * BAR0.6: --\n+ * BAR0.7: --\n  *\n- *         Halving PCItoCPPBars for primary and secondary processes.\n- *         For CoreNIC firmware:\n- *         NFP PMD just requires two fixed slots, one for configuration BAR,\n- *         and another for accessing the hw queues. Another slot is needed\n- *         for setting the link up or down. Secondary processes do not need\n- *         to map the first two slots again, but it requires one slot for\n- *         accessing the link, even if it is not likely the secondary process\n- *         starting the port.\n- *         For Flower firmware:\n- *         NFP PMD need another fixed slots, used as the configureation BAR\n- *         for ctrl vNIC.\n+ * BAR1.0-BAR1.7: --\n+ * BAR2.0-BAR2.7: --\n  */\n static int\n nfp_enable_bars(struct nfp_pcie_user *nfp)\n {\n-\tint x;\n-\tint end;\n-\tint start;\n+\tint pf;\n+\tuint32_t i;\n+\tuint8_t min_bars;\n \tstruct nfp_bar *bar;\n+\tenum rte_proc_type_t type;\n+\tstruct rte_mem_resource *res;\n+\tconst uint32_t barcfg_msix_general = NFP_PCIE_BAR_PCIE2CPP_MAPTYPE\n+\t\t\t(NFP_PCIE_BAR_PCIE2CPP_MAPTYPE_GENERAL) |\n+\t\t\tNFP_PCIE_BAR_PCIE2CPP_LENGTHSELECT_32BIT;\n+\n+\ttype = rte_eal_process_type();\n+\tif (type == RTE_PROC_PRIMARY)\n+\t\tmin_bars = 12;\n+\telse\n+\t\tmin_bars = 4;\n+\n+\tfor (i = 0; i < RTE_DIM(nfp->bar); i++) {\n+\t\tif (i != 0) {\n+\t\t\tif (type == RTE_PROC_PRIMARY) {\n+\t\t\t\tif (nfp_bars_for_secondary(i))\n+\t\t\t\t\tcontinue;\n+\t\t\t} else {\n+\t\t\t\tif (!nfp_bars_for_secondary(i))\n+\t\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t}\n \n-\tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = NFP_BAR_MID;\n-\t\tend = NFP_BAR_MIN;\n-\t} else {\n-\t\tstart = NFP_BAR_MAX;\n-\t\tend = NFP_BAR_MID;\n+\t\t/* 24 NFP bars mapping into BAR0, BAR2 and BAR4 */\n+\t\tres = &nfp->pci_dev->mem_resource[(i >> 3) * 2];\n+\n+\t\t/* Skip over BARs that are not mapped */\n+\t\tif (res->addr != NULL) {\n+\t\t\tbar = &nfp->bar[i];\n+\t\t\tbar->resource = res;\n+\t\t\tbar->barcfg = 0;\n+\n+\t\t\tbar->nfp = nfp;\n+\t\t\tbar->index = i;\n+\t\t\t/* The resource shared by 8 bars */\n+\t\t\tbar->mask = (res->len >> 3) - 1;\n+\t\t\tbar->bitsize = nfp_bitsize_calc(bar->mask);\n+\t\t\tbar->base = 0;\n+\t\t\tbar->lock = false;\n+\t\t\tbar->iomem = (char *)res->addr +\n+\t\t\t\t\t((bar->index & 7) << bar->bitsize);\n+\n+\t\t\tnfp->bars++;\n+\t\t}\n \t}\n \n-\tfor (x = start; x > end; x--) {\n-\t\tbar = &nfp->bar[x - 1];\n-\t\tbar->barcfg = 0;\n-\t\tbar->nfp = nfp;\n-\t\tbar->index = x;\n-\t\tbar->mask = (1 << (nfp->barsz - 3)) - 1;\n-\t\tbar->bitsize = nfp->barsz - 3;\n-\t\tbar->base = 0;\n-\t\tbar->iomem = NULL;\n-\t\tbar->lock = 0;\n-\t\tbar->csr = nfp->cfg + NFP_PCIE_CFG_BAR_PCIETOCPPEXPBAR(nfp->dev_id,\n-\t\t\t\tbar->index >> 3, bar->index & 7);\n-\t\tbar->iomem = nfp->cfg + (bar->index << bar->bitsize);\n+\tif (nfp->bars < min_bars) {\n+\t\tPMD_DRV_LOG(ERR, \"Not enough usable BARs found.\");\n+\t\treturn -EINVAL;\n \t}\n+\n+\tswitch (nfp->pci_dev->id.device_id) {\n+\tcase PCI_DEVICE_ID_NFP3800_PF_NIC:\n+\t\tpf = nfp->pci_dev->addr.function & 0x07;\n+\t\tnfp->csr = nfp->bar[0].iomem + NFP_PCIE_BAR(pf);\n+\t\tbreak;\n+\tcase PCI_DEVICE_ID_NFP4000_PF_NIC:\n+\tcase PCI_DEVICE_ID_NFP6000_PF_NIC:\n+\t\tnfp->csr = nfp->bar[0].iomem + NFP_PCIE_BAR(0);\n+\t\tbreak;\n+\tdefault:\n+\t\tPMD_DRV_LOG(ERR, \"Unsupported device ID: %04hx!\",\n+\t\t\t\tnfp->pci_dev->id.device_id);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\t/* Configure, and lock, BAR0.0 for General Target use (MSI-X SRAM) */\n+\tbar = &nfp->bar[0];\n+\tbar->lock = true;\n+\n+\tnfp_bar_write(nfp, bar, barcfg_msix_general);\n+\n+\t/* Sort bars by bit size - use the smallest possible first. */\n+\tqsort(&nfp->bar[0], nfp->bars, sizeof(nfp->bar[0]), nfp_cmp_bars);\n+\n \treturn 0;\n }\n \n-static struct nfp_bar *\n-nfp_alloc_bar(struct nfp_pcie_user *nfp)\n+/* Check if BAR can be used with the given parameters. */\n+static bool\n+matching_bar_exist(struct nfp_bar *bar,\n+\t\tint target,\n+\t\tint action,\n+\t\tint token,\n+\t\tuint64_t offset,\n+\t\tsize_t size,\n+\t\tint width)\n {\n-\tint x;\n-\tint end;\n-\tint start;\n-\tstruct nfp_bar *bar;\n+\tint bar_width;\n+\tint bar_token;\n+\tint bar_target;\n+\tint bar_action;\n+\tuint32_t map_type;\n+\n+\tbar_width = NFP_PCIE_BAR_PCIE2CPP_LENGTHSELECT_OF(bar->barcfg);\n+\tswitch (bar_width) {\n+\tcase NFP_PCIE_BAR_PCIE2CPP_LENGTHSELECT_32BIT:\n+\t\tbar_width = 4;\n+\t\tbreak;\n+\tcase NFP_PCIE_BAR_PCIE2CPP_LENGTHSELECT_64BIT:\n+\t\tbar_width = 8;\n+\t\tbreak;\n+\tcase NFP_PCIE_BAR_PCIE2CPP_LENGTHSELECT_0BYTE:\n+\t\tbar_width = 0;\n+\t\tbreak;\n+\tdefault:\n+\t\tbar_width = -1;\n+\t\tbreak;\n+\t}\n \n-\tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = NFP_BAR_MID;\n-\t\tend = NFP_BAR_MIN;\n-\t} else {\n-\t\tstart = NFP_BAR_MAX;\n-\t\tend = NFP_BAR_MID;\n+\t/* Make sure to match up the width */\n+\tif (bar_width != width)\n+\t\treturn false;\n+\n+\tbar_token = NFP_PCIE_BAR_PCIE2CPP_TOKEN_BASEADDRESS_OF(bar->barcfg);\n+\tbar_action = NFP_PCIE_BAR_PCIE2CPP_ACTION_BASEADDRESS_OF(bar->barcfg);\n+\tmap_type = NFP_PCIE_BAR_PCIE2CPP_MAPTYPE_OF(bar->barcfg);\n+\tswitch (map_type) {\n+\tcase NFP_PCIE_BAR_PCIE2CPP_MAPTYPE_TARGET:\n+\t\tbar_token = -1;\n+\t\t/* FALLTHROUGH */\n+\tcase NFP_PCIE_BAR_PCIE2CPP_MAPTYPE_BULK:\n+\t\tbar_action = NFP_CPP_ACTION_RW;\n+\t\tif (action == 0)\n+\t\t\taction = NFP_CPP_ACTION_RW;\n+\t\t/* FALLTHROUGH */\n+\tcase NFP_PCIE_BAR_PCIE2CPP_MAPTYPE_FIXED:\n+\t\tbreak;\n+\tdefault:\n+\t\t/* We don't match explicit bars through the area interface */\n+\t\treturn false;\n \t}\n \n-\tfor (x = start; x > end; x--) {\n-\t\tbar = &nfp->bar[x - 1];\n-\t\tif (bar->lock == 0) {\n-\t\t\tbar->lock = 1;\n-\t\t\treturn bar;\n-\t\t}\n+\tbar_target = NFP_PCIE_BAR_PCIE2CPP_TARGET_BASEADDRESS_OF(bar->barcfg);\n+\tif ((bar_target < 0 || bar_target == target) &&\n+\t\t\t(bar_token < 0 || bar_token == token) &&\n+\t\t\tbar_action == action &&\n+\t\t\tbar->base <= offset &&\n+\t\t\t(bar->base + (1 << bar->bitsize)) >= (offset + size))\n+\t\treturn true;\n+\n+\t/* No match */\n+\treturn false;\n+}\n+\n+static int\n+find_matching_bar(struct nfp_pcie_user *nfp,\n+\t\tint target,\n+\t\tint action,\n+\t\tint token,\n+\t\tuint64_t offset,\n+\t\tsize_t size,\n+\t\tint width)\n+{\n+\tuint32_t n;\n+\n+\tfor (n = 0; n < nfp->bars; n++) {\n+\t\tstruct nfp_bar *bar = &nfp->bar[n];\n+\n+\t\tif (matching_bar_exist(bar, target, action, token,\n+\t\t\t\toffset, size, width))\n+\t\t\treturn n;\n+\t}\n+\n+\treturn -1;\n+}\n+\n+/* Return EAGAIN if no resource is available */\n+static int\n+find_unused_bar_noblock(struct nfp_pcie_user *nfp,\n+\t\tint target,\n+\t\tint action,\n+\t\tint token,\n+\t\tuint64_t offset,\n+\t\tsize_t size,\n+\t\tint width)\n+{\n+\tint ret;\n+\tuint32_t n;\n+\tconst struct nfp_bar *bar;\n+\n+\tfor (n = 0; n < nfp->bars; n++) {\n+\t\tbar = &nfp->bar[n];\n+\n+\t\tif (bar->bitsize == 0)\n+\t\t\tcontinue;\n+\n+\t\t/* Just check to see if we can make it fit... */\n+\t\tret = nfp_compute_bar(bar, NULL, NULL, target, action,\n+\t\t\t\ttoken, offset, size, width);\n+\t\tif (ret != 0)\n+\t\t\tcontinue;\n+\n+\t\tif (!bar->lock)\n+\t\t\treturn n;\n+\t}\n+\n+\treturn -EAGAIN;\n+}\n+\n+static int\n+nfp_alloc_bar(struct nfp_pcie_user *nfp,\n+\t\tstruct nfp6000_area_priv *priv)\n+{\n+\tint ret;\n+\tint bar_num;\n+\tsize_t size = priv->size;\n+\tint token = priv->token;\n+\tint target = priv->target;\n+\tint action = priv->action;\n+\tint width = priv->width.bar;\n+\tuint64_t offset = priv->offset;\n+\n+\t/* Bar size should small than 16MB */\n+\tif (size > (1 << 24))\n+\t\treturn -EINVAL;\n+\n+\tbar_num = find_matching_bar(nfp, target, action, token,\n+\t\t\toffset, size, width);\n+\tif (bar_num >= 0) {\n+\t\t/* Found a perfect match. */\n+\t\tnfp->bar[bar_num].lock = true;\n+\t\treturn bar_num;\n \t}\n \n-\treturn NULL;\n+\tbar_num = find_unused_bar_noblock(nfp, target, action, token,\n+\t\t\toffset, size, width);\n+\tif (bar_num < 0)\n+\t\treturn bar_num;\n+\n+\tnfp->bar[bar_num].lock = true;\n+\tret = nfp_reconfigure_bar(nfp, &nfp->bar[bar_num],\n+\t\t\ttarget, action, token, offset, size, width);\n+\tif (ret < 0) {\n+\t\tnfp->bar[bar_num].lock = false;\n+\t\treturn ret;\n+\t}\n+\n+\treturn bar_num;\n }\n \n static void\n nfp_disable_bars(struct nfp_pcie_user *nfp)\n {\n-\tint x;\n-\tint end;\n-\tint start;\n+\tuint32_t i;\n \tstruct nfp_bar *bar;\n \n-\tif (rte_eal_process_type() == RTE_PROC_PRIMARY) {\n-\t\tstart = NFP_BAR_MID;\n-\t\tend = NFP_BAR_MIN;\n-\t} else {\n-\t\tstart = NFP_BAR_MAX;\n-\t\tend = NFP_BAR_MID;\n-\t}\n-\n-\tfor (x = start; x > end; x--) {\n-\t\tbar = &nfp->bar[x - 1];\n-\t\tif (bar->iomem) {\n+\tfor (i = 0; i < nfp->bars; i++) {\n+\t\tbar = &nfp->bar[i];\n+\t\tif (bar->iomem != NULL) {\n \t\t\tbar->iomem = NULL;\n-\t\t\tbar->lock = 0;\n+\t\t\tbar->lock = false;\n \t\t}\n \t}\n }\n@@ -364,7 +577,6 @@ nfp6000_area_init(struct nfp_cpp_area *area,\n \tuint32_t target = NFP_CPP_ID_TARGET_of(dest);\n \tuint32_t action = NFP_CPP_ID_ACTION_of(dest);\n \tstruct nfp6000_area_priv *priv = nfp_cpp_area_priv(area);\n-\tstruct nfp_pcie_user *nfp = nfp_cpp_priv(nfp_cpp_area_cpp(area));\n \n \tpp = nfp_target_pushpull(NFP_CPP_ID(target, action, token), address);\n \tif (pp < 0)\n@@ -383,9 +595,7 @@ nfp6000_area_init(struct nfp_cpp_area *area,\n \telse\n \t\tpriv->width.bar = priv->width.write;\n \n-\tpriv->bar = nfp_alloc_bar(nfp);\n-\tif (priv->bar == NULL)\n-\t\treturn -ENOMEM;\n+\tpriv->bar = NULL;\n \n \tpriv->target = target;\n \tpriv->action = action;\n@@ -393,17 +603,29 @@ nfp6000_area_init(struct nfp_cpp_area *area,\n \tpriv->offset = address;\n \tpriv->size = size;\n \n-\tret = nfp_reconfigure_bar(nfp, priv->bar, priv->target, priv->action,\n-\t\t\tpriv->token, priv->offset, priv->size,\n-\t\t\tpriv->width.bar);\n-\n \treturn ret;\n }\n \n static int\n nfp6000_area_acquire(struct nfp_cpp_area *area)\n {\n+\tint bar_num;\n \tstruct nfp6000_area_priv *priv = nfp_cpp_area_priv(area);\n+\tstruct nfp_pcie_user *nfp = nfp_cpp_priv(nfp_cpp_area_cpp(area));\n+\n+\t/* Already allocated. */\n+\tif (priv->bar != NULL)\n+\t\treturn 0;\n+\n+\tbar_num = nfp_alloc_bar(nfp, priv);\n+\tif (bar_num < 0) {\n+\t\tPMD_DRV_LOG(ERR, \"Failed to allocate bar %d:%d:%d:%#lx: %d\",\n+\t\t\t\tpriv->target, priv->action, priv->token,\n+\t\t\t\tpriv->offset, bar_num);\n+\t\treturn bar_num;\n+\t}\n+\n+\tpriv->bar = &nfp->bar[bar_num];\n \n \t/* Calculate offset into BAR. */\n \tif (nfp_bar_maptype(priv->bar) ==\n@@ -432,7 +654,7 @@ nfp6000_area_release(struct nfp_cpp_area *area)\n {\n \tstruct nfp6000_area_priv *priv = nfp_cpp_area_priv(area);\n \n-\tpriv->bar->lock = 0;\n+\tpriv->bar->lock = false;\n \tpriv->bar = NULL;\n \tpriv->iomem = NULL;\n }\n@@ -603,7 +825,8 @@ nfp_acquire_process_lock(struct nfp_pcie_user *desc)\n \n \tmemset(&lock, 0, sizeof(lock));\n \n-\tsnprintf(lockname, sizeof(lockname), \"/var/lock/nfp_%s\", desc->busdev);\n+\tsnprintf(lockname, sizeof(lockname), \"/var/lock/nfp_%s\",\n+\t\t\tdesc->pci_dev->device.name);\n \tdesc->lock = open(lockname, O_RDWR | O_CREAT, 0666);\n \tif (desc->lock < 0)\n \t\treturn desc->lock;\n@@ -693,32 +916,11 @@ nfp6000_get_serial(struct rte_pci_device *dev,\n }\n \n static int\n-nfp6000_set_barsz(struct rte_pci_device *dev,\n-\t\tstruct nfp_pcie_user *desc)\n-{\n-\tint i = 0;\n-\tuint64_t tmp;\n-\n-\ttmp = dev->mem_resource[0].len;\n-\n-\twhile (tmp >>= 1)\n-\t\ti++;\n-\n-\tdesc->barsz = i;\n-\n-\treturn 0;\n-}\n-\n-static int\n-nfp6000_init(struct nfp_cpp *cpp,\n-\t\tstruct rte_pci_device *dev)\n+nfp6000_init(struct nfp_cpp *cpp)\n {\n \tint ret = 0;\n \tstruct nfp_pcie_user *desc = nfp_cpp_priv(cpp);\n \n-\tmemset(desc->busdev, 0, BUSDEV_SZ);\n-\tstrlcpy(desc->busdev, dev->device.name, sizeof(desc->busdev));\n-\n \tif (rte_eal_process_type() == RTE_PROC_PRIMARY &&\n \t\t\tnfp_cpp_driver_need_lock(cpp)) {\n \t\tret = nfp_acquire_process_lock(desc);\n@@ -726,12 +928,6 @@ nfp6000_init(struct nfp_cpp *cpp,\n \t\t\treturn -1;\n \t}\n \n-\tif (nfp6000_set_barsz(dev, desc) < 0)\n-\t\treturn -1;\n-\n-\tdesc->cfg = dev->mem_resource[0].addr;\n-\tdesc->dev_id = dev->addr.function & 0x7;\n-\n \tret = nfp_enable_bars(desc);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Enable bars failed\");\n@@ -749,7 +945,6 @@ nfp6000_free(struct nfp_cpp *cpp)\n \tnfp_disable_bars(desc);\n \tif (nfp_cpp_driver_need_lock(cpp))\n \t\tclose(desc->lock);\n-\tclose(desc->device);\n \trte_free(desc);\n }\n \n@@ -789,6 +984,7 @@ nfp_cpp_operations *nfp_cpp_transport_operations(void)\n  */\n struct nfp_cpp *\n nfp_cpp_from_nfp6000_pcie(struct rte_pci_device *pci_dev,\n+\t\tconst struct nfp_dev_info *dev_info,\n \t\tbool driver_lock_needed)\n {\n \tint ret;\n@@ -800,6 +996,9 @@ nfp_cpp_from_nfp6000_pcie(struct rte_pci_device *pci_dev,\n \tif (nfp == NULL)\n \t\treturn NULL;\n \n+\tnfp->pci_dev = pci_dev;\n+\tnfp->dev_info = dev_info;\n+\n \tret = nfp6000_get_interface(pci_dev, &interface);\n \tif (ret != 0) {\n \t\tPMD_DRV_LOG(ERR, \"Get interface failed.\");\ndiff --git a/drivers/net/nfp/nfpcore/nfp6000_pcie.h b/drivers/net/nfp/nfpcore/nfp6000_pcie.h\nindex 8847f6f946..8e2cfb69e6 100644\n--- a/drivers/net/nfp/nfpcore/nfp6000_pcie.h\n+++ b/drivers/net/nfp/nfpcore/nfp6000_pcie.h\n@@ -14,6 +14,7 @@\n const struct nfp_cpp_operations *nfp_cpp_transport_operations(void);\n \n struct nfp_cpp *nfp_cpp_from_nfp6000_pcie(struct rte_pci_device *pci_dev,\n+\t\tconst struct nfp_dev_info *dev_info,\n \t\tbool driver_lock_needed);\n \n #endif /* __NFP6000_PCIE_H__ */\ndiff --git a/drivers/net/nfp/nfpcore/nfp_cpp.h b/drivers/net/nfp/nfpcore/nfp_cpp.h\nindex e879c7c920..2defc4fa16 100644\n--- a/drivers/net/nfp/nfpcore/nfp_cpp.h\n+++ b/drivers/net/nfp/nfpcore/nfp_cpp.h\n@@ -18,6 +18,8 @@ struct nfp_cpp_area;\n \n #define NFP_CPP_NUM_TARGETS             16\n \n+#define PCI_64BIT_BAR_COUNT             3\n+\n /*\n  * NFP CPP operations structure\n  */\n@@ -26,8 +28,7 @@ struct nfp_cpp_operations {\n \tsize_t area_priv_size;\n \n \t/* Instance an NFP CPP */\n-\tint (*init)(struct nfp_cpp *cpp,\n-\t\t\tstruct rte_pci_device *dev);\n+\tint (*init)(struct nfp_cpp *cpp);\n \n \t/*\n \t * Free the bus.\ndiff --git a/drivers/net/nfp/nfpcore/nfp_cppcore.c b/drivers/net/nfp/nfpcore/nfp_cppcore.c\nindex 6f46dbf5b7..8a55670f84 100644\n--- a/drivers/net/nfp/nfpcore/nfp_cppcore.c\n+++ b/drivers/net/nfp/nfpcore/nfp_cppcore.c\n@@ -947,7 +947,7 @@ nfp_cpp_alloc(struct rte_pci_device *pci_dev,\n \t * NOTE: cpp_lock is NOT locked for op->init,\n \t * since it may call NFP CPP API operations\n \t */\n-\terr = cpp->op->init(cpp, pci_dev);\n+\terr = cpp->op->init(cpp);\n \tif (err < 0) {\n \t\tPMD_DRV_LOG(ERR, \"NFP interface initialization failed\");\n \t\trte_free(cpp);\n",
    "prefixes": [
        "v2",
        "27/27"
    ]
}