get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 94645,
    "url": "https://patches.dpdk.org/api/patches/94645/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210621150449.19070-21-tduszynski@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://patches.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": "<20210621150449.19070-21-tduszynski@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210621150449.19070-21-tduszynski@marvell.com",
    "date": "2021-06-21T15:04:37",
    "name": "[v3,20/32] common/cnxk: support for setting bphy irq handler",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "44ac3e8cc20a09592557e208d11156e4eb639489",
    "submitter": {
        "id": 2215,
        "url": "https://patches.dpdk.org/api/people/2215/?format=api",
        "name": "Tomasz Duszynski",
        "email": "tduszynski@marvell.com"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210621150449.19070-21-tduszynski@marvell.com/mbox/",
    "series": [
        {
            "id": 17426,
            "url": "https://patches.dpdk.org/api/series/17426/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17426",
            "date": "2021-06-21T15:04:17",
            "name": "add support for baseband phy",
            "version": 3,
            "mbox": "https://patches.dpdk.org/series/17426/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/94645/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/94645/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 3A0AFA0547;\n\tMon, 21 Jun 2021 17:07:29 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id ED62A4121D;\n\tMon, 21 Jun 2021 17:06:00 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174])\n by mails.dpdk.org (Postfix) with ESMTP id C5BD04122E\n for <dev@dpdk.org>; Mon, 21 Jun 2021 17:05:59 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id\n 15LF5HTA008514; Mon, 21 Jun 2021 08:05:56 -0700",
            "from dc5-exch01.marvell.com ([199.233.59.181])\n by mx0a-0016f401.pphosted.com with ESMTP id 39aj2xja2w-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 21 Jun 2021 08:05:56 -0700",
            "from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com\n (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.18;\n Mon, 21 Jun 2021 08:05:55 -0700",
            "from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com\n (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend\n Transport; Mon, 21 Jun 2021 08:05:55 -0700",
            "from EH-LT0048.marvell.com (unknown [10.193.32.52])\n by maili.marvell.com (Postfix) with ESMTP id D6FCC3F705B;\n Mon, 21 Jun 2021 08:05:52 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : mime-version :\n content-transfer-encoding : content-type; s=pfpt0220;\n bh=O/NM+Y87xIOdDweQacl/Fe9yK15ZVaBvfsedhCfhZQ0=;\n b=dpCbvB7uygmSIxhb2oc4ovBUkD3U5NO+prcuw47d2gRISn5CprmBR/tH/NkwL1tGWRLF\n FEhyAF85zDzTpD/PKpQekl4E+yAeWmKxTa0TVa5h9e2PivUjb3eoKBM8BfZze7hHgwZn\n qV9fhjz2M7O3VbjgPPvjCj/3oPnn2mPhlmif46a5BQPHnhd4LICau03PXsI7TXC/ZBZV\n oNEn8nB7kSW95e/QEDWKCQmKlpu1gosIdMvfnzUWCpPsYdEiZFjcNF6UjuCfe5P9tM8a\n 7D6fhkgfr84iHlhoW2YuGrY1aCXVsKCIV/JLAJq2wjaCj64G8Mp6ebzQ55OZjncovq6A lw==",
        "From": "Tomasz Duszynski <tduszynski@marvell.com>",
        "To": "Nithin Dabilpuram <ndabilpuram@marvell.com>, Kiran Kumar K\n <kirankumark@marvell.com>, Sunil Kumar Kori <skori@marvell.com>, Satha Rao\n <skoteshwar@marvell.com>, Ray Kinsella <mdr@ashroe.eu>, Neil Horman\n <nhorman@tuxdriver.com>",
        "CC": "<thomas@monjalon.net>, <dev@dpdk.org>, Tomasz Duszynski\n <tduszynski@marvell.com>, Jakub Palider <jpalider@marvell.com>, Jerin Jacob\n <jerinj@marvell.com>",
        "Date": "Mon, 21 Jun 2021 17:04:37 +0200",
        "Message-ID": "<20210621150449.19070-21-tduszynski@marvell.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210621150449.19070-1-tduszynski@marvell.com>",
        "References": "<20210531214142.30167-1-tduszynski@marvell.com>\n <20210621150449.19070-1-tduszynski@marvell.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Proofpoint-GUID": "nFyDPfQ2XIWOd5_pmyvG3A4GzX8nPc85",
        "X-Proofpoint-ORIG-GUID": "nFyDPfQ2XIWOd5_pmyvG3A4GzX8nPc85",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790\n definitions=2021-06-21_06:2021-06-21,\n 2021-06-21 signatures=0",
        "Subject": "[dpdk-dev] [PATCH v3 20/32] common/cnxk: support for setting bphy\n irq handler",
        "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",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Add support for setting custom baseband phy irq handler.\n\nSigned-off-by: Jakub Palider <jpalider@marvell.com>\nSigned-off-by: Tomasz Duszynski <tduszynski@marvell.com>\nReviewed-by: Jerin Jacob <jerinj@marvell.com>\n---\n drivers/common/cnxk/roc_bphy_irq.c   | 121 +++++++++++++++++++++++++++\n drivers/common/cnxk/roc_bphy_irq.h   |   5 ++\n drivers/common/cnxk/roc_io.h         |   9 ++\n drivers/common/cnxk/roc_io_generic.h |   5 ++\n drivers/common/cnxk/version.map      |   2 +\n 5 files changed, 142 insertions(+)",
    "diff": "diff --git a/drivers/common/cnxk/roc_bphy_irq.c b/drivers/common/cnxk/roc_bphy_irq.c\nindex a90c055ff..f988abf51 100644\n--- a/drivers/common/cnxk/roc_bphy_irq.c\n+++ b/drivers/common/cnxk/roc_bphy_irq.c\n@@ -4,12 +4,22 @@\n #include <fcntl.h>\n #include <pthread.h>\n #include <sys/ioctl.h>\n+#include <sys/mman.h>\n #include <sys/queue.h>\n #include <unistd.h>\n \n #include \"roc_api.h\"\n #include \"roc_bphy_irq.h\"\n \n+#define roc_cpuset_t cpu_set_t\n+\n+struct roc_bphy_irq_usr_data {\n+\tuint64_t isr_base;\n+\tuint64_t sp;\n+\tuint64_t cpu;\n+\tuint64_t irq_num;\n+};\n+\n struct roc_bphy_irq_stack {\n \tSTAILQ_ENTRY(roc_bphy_irq_stack) entries;\n \tvoid *sp_buffer;\n@@ -21,6 +31,8 @@ struct roc_bphy_irq_stack {\n #define ROC_BPHY_CTR_DEV_PATH \"/dev/otx-bphy-ctr\"\n \n #define ROC_BPHY_IOC_MAGIC 0xF3\n+#define ROC_BPHY_IOC_SET_BPHY_HANDLER                                          \\\n+\t_IOW(ROC_BPHY_IOC_MAGIC, 1, struct roc_bphy_irq_usr_data)\n #define ROC_BPHY_IOC_GET_BPHY_MAX_IRQ\t_IOR(ROC_BPHY_IOC_MAGIC, 3, uint64_t)\n #define ROC_BPHY_IOC_GET_BPHY_BMASK_IRQ _IOR(ROC_BPHY_IOC_MAGIC, 4, uint64_t)\n \n@@ -187,6 +199,115 @@ roc_bphy_irq_stack_get(int cpu)\n \treturn NULL;\n }\n \n+void\n+roc_bphy_intr_handler(unsigned int irq_num)\n+{\n+\tstruct roc_bphy_irq_chip *irq_chip;\n+\tconst struct plt_memzone *mz;\n+\n+\tmz = plt_memzone_lookup(ROC_BPHY_MEMZONE_NAME);\n+\tif (mz == NULL)\n+\t\treturn;\n+\n+\tirq_chip = *(struct roc_bphy_irq_chip **)mz->addr;\n+\tif (irq_chip == NULL)\n+\t\treturn;\n+\n+\tif (irq_chip->irq_vecs[irq_num].handler != NULL)\n+\t\tirq_chip->irq_vecs[irq_num].handler(\n+\t\t\t(int)irq_num, irq_chip->irq_vecs[irq_num].isr_data);\n+\n+\troc_atf_ret();\n+}\n+\n+int\n+roc_bphy_irq_handler_set(struct roc_bphy_irq_chip *chip, int irq_num,\n+\t\t\t void (*isr)(int irq_num, void *isr_data),\n+\t\t\t void *isr_data)\n+{\n+\troc_cpuset_t orig_cpuset, intr_cpuset;\n+\tstruct roc_bphy_irq_usr_data irq_usr;\n+\tconst struct plt_memzone *mz;\n+\tint i, retval, curr_cpu, rc;\n+\tchar *env;\n+\n+\tmz = plt_memzone_lookup(chip->mz_name);\n+\tif (mz == NULL) {\n+\t\t/* what we want is just a pointer to chip, not object itself */\n+\t\tmz = plt_memzone_reserve_cache_align(chip->mz_name,\n+\t\t\t\t\t\t     sizeof(chip));\n+\t\tif (mz == NULL)\n+\t\t\treturn -ENOMEM;\n+\t}\n+\n+\tif (chip->irq_vecs[irq_num].handler != NULL)\n+\t\treturn -EINVAL;\n+\n+\trc = pthread_getaffinity_np(pthread_self(), sizeof(orig_cpuset),\n+\t\t\t\t    &orig_cpuset);\n+\tif (rc < 0) {\n+\t\tplt_err(\"Failed to get affinity mask\");\n+\t\treturn rc;\n+\t}\n+\n+\tfor (curr_cpu = -1, i = 0; i < CPU_SETSIZE; i++)\n+\t\tif (CPU_ISSET(i, &orig_cpuset))\n+\t\t\tcurr_cpu = i;\n+\tif (curr_cpu < 0)\n+\t\treturn -ENOENT;\n+\n+\tCPU_ZERO(&intr_cpuset);\n+\tCPU_SET(curr_cpu, &intr_cpuset);\n+\tretval = pthread_setaffinity_np(pthread_self(), sizeof(intr_cpuset),\n+\t\t\t\t\t&intr_cpuset);\n+\tif (rc < 0) {\n+\t\tplt_err(\"Failed to set affinity mask\");\n+\t\treturn rc;\n+\t}\n+\n+\tirq_usr.isr_base = (uint64_t)roc_bphy_intr_handler;\n+\tirq_usr.sp = (uint64_t)roc_bphy_irq_stack_get(curr_cpu);\n+\tirq_usr.cpu = curr_cpu;\n+\tif (irq_usr.sp == 0) {\n+\t\trc = pthread_setaffinity_np(pthread_self(), sizeof(orig_cpuset),\n+\t\t\t\t\t    &orig_cpuset);\n+\t\tif (rc < 0)\n+\t\t\tplt_err(\"Failed to restore affinity mask\");\n+\t\treturn rc;\n+\t}\n+\n+\t/* On simulator memory locking operation takes much time. We want\n+\t * to skip this when running in such an environment.\n+\t */\n+\tenv = getenv(\"BPHY_INTR_MLOCK_DISABLE\");\n+\tif (env == NULL) {\n+\t\trc = mlockall(MCL_CURRENT | MCL_FUTURE);\n+\t\tif (rc < 0)\n+\t\t\tplt_warn(\"Failed to lock memory into RAM\");\n+\t}\n+\n+\t*((struct roc_bphy_irq_chip **)(mz->addr)) = chip;\n+\tirq_usr.irq_num = irq_num;\n+\tchip->irq_vecs[irq_num].handler_cpu = curr_cpu;\n+\tchip->irq_vecs[irq_num].handler = isr;\n+\tchip->irq_vecs[irq_num].isr_data = isr_data;\n+\tretval = ioctl(chip->intfd, ROC_BPHY_IOC_SET_BPHY_HANDLER, &irq_usr);\n+\tif (retval != 0) {\n+\t\troc_bphy_irq_stack_remove(curr_cpu);\n+\t\tchip->irq_vecs[irq_num].handler = NULL;\n+\t\tchip->irq_vecs[irq_num].handler_cpu = -1;\n+\t} else {\n+\t\tchip->n_handlers++;\n+\t}\n+\n+\trc = pthread_setaffinity_np(pthread_self(), sizeof(orig_cpuset),\n+\t\t\t\t    &orig_cpuset);\n+\tif (rc < 0)\n+\t\tplt_warn(\"Failed to restore affinity mask\");\n+\n+\treturn retval;\n+}\n+\n bool\n roc_bphy_intr_available(struct roc_bphy_irq_chip *irq_chip, int irq_num)\n {\ndiff --git a/drivers/common/cnxk/roc_bphy_irq.h b/drivers/common/cnxk/roc_bphy_irq.h\nindex 549a84a7d..7dd23f4ab 100644\n--- a/drivers/common/cnxk/roc_bphy_irq.h\n+++ b/drivers/common/cnxk/roc_bphy_irq.h\n@@ -25,6 +25,11 @@ __roc_api struct roc_bphy_irq_chip *roc_bphy_intr_init(void);\n __roc_api void roc_bphy_intr_fini(struct roc_bphy_irq_chip *irq_chip);\n __roc_api void roc_bphy_irq_stack_remove(int cpu);\n __roc_api void *roc_bphy_irq_stack_get(int cpu);\n+__roc_api void roc_bphy_intr_handler(unsigned int irq_num);\n+__roc_api int\n+roc_bphy_irq_handler_set(struct roc_bphy_irq_chip *chip, int irq_num,\n+\t\t\t void (*handler)(int irq_num, void *isr_data),\n+\t\t\t void *isr_data);\n __roc_api bool roc_bphy_intr_available(struct roc_bphy_irq_chip *irq_chip,\n \t\t\t\t       int irq_num);\n \ndiff --git a/drivers/common/cnxk/roc_io.h b/drivers/common/cnxk/roc_io.h\nindex fb3d9c5e5..aee8c7f97 100644\n--- a/drivers/common/cnxk/roc_io.h\n+++ b/drivers/common/cnxk/roc_io.h\n@@ -184,4 +184,13 @@ roc_lmt_mov_seg_nv(void *out, const void *in, const uint16_t segdw)\n \t\tdst128[i] = src128[i];\n }\n \n+static __plt_always_inline void\n+roc_atf_ret(void)\n+{\n+\t/* This will allow wfi in EL0 to cause async exception to EL3\n+\t * which will optionally perform necessary actions.\n+\t */\n+\t__asm(\"wfi\");\n+}\n+\n #endif /* _ROC_IO_H_ */\ndiff --git a/drivers/common/cnxk/roc_io_generic.h b/drivers/common/cnxk/roc_io_generic.h\nindex c1689b6f8..28cb0963e 100644\n--- a/drivers/common/cnxk/roc_io_generic.h\n+++ b/drivers/common/cnxk/roc_io_generic.h\n@@ -119,4 +119,9 @@ roc_lmt_mov_seg_nv(void *out, const void *in, const uint16_t segdw)\n \tPLT_SET_USED(segdw);\n }\n \n+static __plt_always_inline void\n+roc_atf_ret(void)\n+{\n+}\n+\n #endif /* _ROC_IO_GENERIC_H_ */\ndiff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map\nindex 78601fe31..861a97cc0 100644\n--- a/drivers/common/cnxk/version.map\n+++ b/drivers/common/cnxk/version.map\n@@ -24,7 +24,9 @@ INTERNAL {\n \troc_bphy_dev_init;\n \troc_bphy_intr_available;\n \troc_bphy_intr_fini;\n+\troc_bphy_intr_handler;\n \troc_bphy_intr_init;\n+\troc_bphy_irq_handler_set;\n \troc_bphy_irq_stack_get;\n \troc_bphy_irq_stack_remove;\n \troc_clk_freq_get;\n",
    "prefixes": [
        "v3",
        "20/32"
    ]
}