get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2216512,
    "url": "http://patchwork.ozlabs.org/api/patches/2216512/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-mtd/patch/20260326-winbond-v6-18-rc1-cont-read-v2-4-643de97a68a3@bootlin.com/",
    "project": {
        "id": 3,
        "url": "http://patchwork.ozlabs.org/api/projects/3/?format=api",
        "name": "Linux MTD development",
        "link_name": "linux-mtd",
        "list_id": "linux-mtd.lists.infradead.org",
        "list_email": "linux-mtd@lists.infradead.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260326-winbond-v6-18-rc1-cont-read-v2-4-643de97a68a3@bootlin.com>",
    "list_archive_url": null,
    "date": "2026-03-26T16:25:51",
    "name": "[v2,04/11] spi: spi-mem: Transform the read operation template",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "270f8c9eaa9b461d89a46bfd0f0bf2ecaaeb4e7c",
    "submitter": {
        "id": 73368,
        "url": "http://patchwork.ozlabs.org/api/people/73368/?format=api",
        "name": "Miquel Raynal",
        "email": "miquel.raynal@bootlin.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-mtd/patch/20260326-winbond-v6-18-rc1-cont-read-v2-4-643de97a68a3@bootlin.com/mbox/",
    "series": [
        {
            "id": 497619,
            "url": "http://patchwork.ozlabs.org/api/series/497619/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-mtd/list/?series=497619",
            "date": "2026-03-26T16:25:47",
            "name": "[v2,01/11] mtd: spinand: Drop a too strong limitation",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/497619/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2216512/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216512/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n secure) header.d=lists.infradead.org header.i=@lists.infradead.org\n header.a=rsa-sha256 header.s=bombadil.20210309 header.b=sABcoZv1;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=bootlin.com header.i=@bootlin.com header.a=rsa-sha256\n header.s=dkim header.b=M2lKDKd9;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=none (no SPF record) smtp.mailfrom=lists.infradead.org\n (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org;\n envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from bombadil.infradead.org (bombadil.infradead.org\n [IPv6:2607:7c80:54:3::133])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fhTgJ5cdmz1yGL\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 03:26:33 +1100 (AEDT)",
            "from localhost ([::1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w5nXH-00000005qbi-19Tv;\n\tThu, 26 Mar 2026 16:26:19 +0000",
            "from smtpout-04.galae.net ([185.171.202.116])\n\tby bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux))\n\tid 1w5nXC-00000005qYp-1CWN\n\tfor linux-mtd@lists.infradead.org;\n\tThu, 26 Mar 2026 16:26:16 +0000",
            "from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233])\n\tby smtpout-04.galae.net (Postfix) with ESMTPS id 11D79C5506D;\n\tThu, 26 Mar 2026 16:26:41 +0000 (UTC)",
            "from mail.galae.net (mail.galae.net [212.83.136.155])\n\tby smtpout-01.galae.net (Postfix) with ESMTPS id C396F601FA;\n\tThu, 26 Mar 2026 16:26:12 +0000 (UTC)",
            "from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon)\n with ESMTPSA id 279B110450C89;\n\tThu, 26 Mar 2026 17:26:11 +0100 (CET)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20210309; h=Sender:\n\tContent-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post:\n\tList-Archive:List-Unsubscribe:List-Id:Cc:To:In-Reply-To:References:Message-Id\n\t:MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description:\n\tResent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:\n\tList-Owner; bh=cqniBmFUgIF86+SQIH262hnP198NP5O0MxFZeRWAkvE=; b=sABcoZv11uvQHy\n\tr+SQVkI76DnpVi371/kMb3iMO4u8A8122XF7qQ1WtbFwgl1INWLliE6H2Xh0J6f5Uecfw7J9bhpz2\n\tLUNJNkylIPIPgzU8X4qM+fmt7fCIQiJ091YBz9Ly41OPFrxStO5T1FNRQCQE0f0zsW3IsbjfMUtR4\n\tf0keBU7A7wsm40OoH/YnFUFCZ63lSxwde8YoDEKa5uVljzzInQes23bOR2bqXDhVST4hM2GHAcjMw\n\tcJIvPT+gpb3iv8tk2JKfb07C///DJ7h0S78IVosqhxXLqJiWBYw7rBMW8fRB2x3IJ+odPqXZBBwuM\n\t6Lv7r3mAu+PyfV+c9cBQ==;",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim;\n\tt=1774542372; h=from:subject:date:message-id:to:cc:mime-version:content-type:\n\t content-transfer-encoding:in-reply-to:references;\n\tbh=No2FU9QfdRqbWVypforHQbPWeUdzW3YtFHj8aG5zOTE=;\n\tb=M2lKDKd9D0WXooDNyS9sGpXtV/vLkVc76lcRrVgNzczHEKneXifP+Fb0FBsYL6IceU0I50\n\tafvLqxyX7tp+SxxJZqY88MG14+9ZYePcd5EX7X0n8xBDE1PYGj2YPN2Qxi69Pc/DU99PpP\n\tlZZcKGVpZPXHxZzmA9JJmHU1wburAcNKOlZi2wpR29T1cHYrVfi6u8k8ELXA5pDogYaU15\n\tt7yQkYWRvgJliWkhvo9cwKxf9Gkdb6ukrXzTNIKxx6Dcezn23a73qyjLU36J1/bStEEleD\n\tsfH2+U3dB+J1IaTAyXY9gomnUNG2tHdLBmiG9gsO7lwM3NR+c7nIV8kIRWctVw=="
        ],
        "From": "Miquel Raynal <miquel.raynal@bootlin.com>",
        "Date": "Thu, 26 Mar 2026 17:25:51 +0100",
        "Subject": "[PATCH v2 04/11] spi: spi-mem: Transform the read operation\n template",
        "MIME-Version": "1.0",
        "Message-Id": "\n <20260326-winbond-v6-18-rc1-cont-read-v2-4-643de97a68a3@bootlin.com>",
        "References": "\n <20260326-winbond-v6-18-rc1-cont-read-v2-0-643de97a68a3@bootlin.com>",
        "In-Reply-To": "\n <20260326-winbond-v6-18-rc1-cont-read-v2-0-643de97a68a3@bootlin.com>",
        "To": "Mark Brown <broonie@kernel.org>, Richard Weinberger <richard@nod.at>,\n Vignesh Raghavendra <vigneshr@ti.com>, Michael Walle <mwalle@kernel.org>,\n Miquel Raynal <miquel.raynal@bootlin.com>",
        "Cc": "Pratyush Yadav <pratyush@kernel.org>,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Steam Lin <STLin2@winbond.com>, Santhosh Kumar K <s-k6@ti.com>,\n linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org,\n linux-mtd@lists.infradead.org",
        "X-Mailer": "b4 0.14.3",
        "X-Last-TLS-Session-Version": "TLSv1.3",
        "X-CRM114-Version": "20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ",
        "X-CRM114-CacheID": "sfid-20260326_092614_478054_FE0FE6B2 ",
        "X-CRM114-Status": "GOOD (  18.24  )",
        "X-Spam-Score": "-2.1 (--)",
        "X-Spam-Report": "Spam detection software,\n running on the system \"bombadil.infradead.org\",\n has NOT identified this incoming email as spam.  The original\n message has been attached to this so you can view it or label\n similar future email.  If you have any questions, see\n the administrator of that system for details.\n Content preview:  As of now,\n we only use a single operation template when creating\n    SPI memory direct mappings. With the idea to extend this possibility to 2,\n    rename the template to reflect that we are currently setting [...]\n Content analysis details:   (-2.1 points, 5.0 required)\n  pts rule name              description\n ---- ----------------------\n --------------------------------------------------\n  0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                           [185.171.202.116 listed in\n bl.score.senderscore.com]\n  0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE: The\n                             query to Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                        [185.171.202.116 listed in\n sa-trusted.bondedsender.org]\n  0.0 RCVD_IN_VALIDITY_SAFE_BLOCKED RBL: ADMINISTRATOR NOTICE: The query to\n                              Validity was blocked.  See\n                             https://knowledge.validity.com/hc/en-us/articles/20961730681243\n                              for more information.\n                             [185.171.202.116 listed in\n sa-accredit.habeas.com]\n -0.0 SPF_HELO_PASS          SPF: HELO matches SPF record\n -0.0 SPF_PASS               SPF: sender matches SPF record\n -0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from\n author's\n                             domain\n -0.1 DKIM_VALID             Message has at least one valid DKIM or DK\n signature\n -0.1 DKIM_VALID_EF          Message has a valid DKIM or DK signature from\n                             envelope-from domain\n  0.1 DKIM_SIGNED            Message has a DKIM or DK signature,\n not necessarily valid\n -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n                             [score: 0.0000]",
        "X-BeenThere": "linux-mtd@lists.infradead.org",
        "X-Mailman-Version": "2.1.34",
        "Precedence": "list",
        "List-Id": "Linux MTD discussion mailing list <linux-mtd.lists.infradead.org>",
        "List-Unsubscribe": "<http://lists.infradead.org/mailman/options/linux-mtd>,\n <mailto:linux-mtd-request@lists.infradead.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.infradead.org/pipermail/linux-mtd/>",
        "List-Post": "<mailto:linux-mtd@lists.infradead.org>",
        "List-Help": "<mailto:linux-mtd-request@lists.infradead.org?subject=help>",
        "List-Subscribe": "<http://lists.infradead.org/mailman/listinfo/linux-mtd>,\n <mailto:linux-mtd-request@lists.infradead.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Sender": "\"linux-mtd\" <linux-mtd-bounces@lists.infradead.org>",
        "Errors-To": "linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"
    },
    "content": "As of now, we only use a single operation template when creating SPI\nmemory direct mappings. With the idea to extend this possibility to 2,\nrename the template to reflect that we are currently setting the\n\"primary\" operation, and create a pointer in the same structure to point\nto it.\n\nFrom a user point of view, the op_tmpl name remains but becomes a\npointer, leading to minor changes in both the SPI NAND and SPI NOR\ncores.\n\nThere is no functional change.\n\nAcked-by: Mark Brown <broonie@kernel.org>\nSigned-off-by: Miquel Raynal <miquel.raynal@bootlin.com>\n---\n drivers/mtd/nand/spi/core.c | 15 ++++++++-------\n drivers/mtd/spi-nor/core.c  | 22 ++++++++++++----------\n drivers/spi/spi-mem.c       | 15 ++++++++-------\n include/linux/spi/spi-mem.h |  3 ++-\n 4 files changed, 30 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c\nindex 663f5d6a6bd7..a66510747b31 100644\n--- a/drivers/mtd/nand/spi/core.c\n+++ b/drivers/mtd/nand/spi/core.c\n@@ -491,9 +491,9 @@ static int spinand_read_from_cache_op(struct spinand_device *spinand,\n \n \tif (nand->ecc.engine->integration == NAND_ECC_ENGINE_INTEGRATION_PIPELINED &&\n \t    req->mode != MTD_OPS_RAW)\n-\t\trdesc->info.op_tmpl.data.ecc = true;\n+\t\trdesc->info.op_tmpl->data.ecc = true;\n \telse\n-\t\trdesc->info.op_tmpl.data.ecc = false;\n+\t\trdesc->info.op_tmpl->data.ecc = false;\n \n \tif (spinand->flags & SPINAND_HAS_READ_PLANE_SELECT_BIT)\n \t\tcolumn |= req->pos.plane << fls(nanddev_page_size(nand));\n@@ -586,9 +586,9 @@ static int spinand_write_to_cache_op(struct spinand_device *spinand,\n \n \tif (nand->ecc.engine->integration == NAND_ECC_ENGINE_INTEGRATION_PIPELINED &&\n \t    req->mode != MTD_OPS_RAW)\n-\t\twdesc->info.op_tmpl.data.ecc = true;\n+\t\twdesc->info.op_tmpl->data.ecc = true;\n \telse\n-\t\twdesc->info.op_tmpl.data.ecc = false;\n+\t\twdesc->info.op_tmpl->data.ecc = false;\n \n \tif (spinand->flags & SPINAND_HAS_PROG_PLANE_SELECT_BIT)\n \t\tcolumn |= req->pos.plane << fls(nanddev_page_size(nand));\n@@ -1247,7 +1247,8 @@ static int spinand_create_dirmap(struct spinand_device *spinand,\n \n \t/* Write descriptor */\n \tinfo.length = nanddev_page_size(nand) + nanddev_per_page_oobsize(nand);\n-\tinfo.op_tmpl.data.ecc = enable_ecc;\n+\tinfo.primary_op_tmpl = *spinand->op_templates->update_cache;\n+\tinfo.primary_op_tmpl.data.ecc = enable_ecc;\n \tdesc = devm_spi_mem_dirmap_create(&spinand->spimem->spi->dev,\n \t\t\t\t\t  spinand->spimem, &info);\n \tif (IS_ERR(desc))\n@@ -1256,8 +1257,8 @@ static int spinand_create_dirmap(struct spinand_device *spinand,\n \tspinand->dirmaps[plane].wdesc = desc;\n \n \t/* Read descriptor */\n-\tinfo.op_tmpl = *spinand->op_templates->read_cache;\n-\tinfo.op_tmpl.data.ecc = enable_ecc;\n+\tinfo.primary_op_tmpl = *spinand->op_templates->read_cache;\n+\tinfo.primary_op_tmpl.data.ecc = enable_ecc;\n \tdesc = spinand_create_rdesc(spinand, &info);\n \tif (IS_ERR(desc))\n \t\treturn PTR_ERR(desc);\ndiff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c\nindex 8ffeb41c3e08..84b98d6b12cd 100644\n--- a/drivers/mtd/spi-nor/core.c\n+++ b/drivers/mtd/spi-nor/core.c\n@@ -3641,14 +3641,15 @@ EXPORT_SYMBOL_GPL(spi_nor_scan);\n static int spi_nor_create_read_dirmap(struct spi_nor *nor)\n {\n \tstruct spi_mem_dirmap_info info = {\n-\t\t.op_tmpl = SPI_MEM_OP(SPI_MEM_OP_CMD(nor->read_opcode, 0),\n-\t\t\t\t      SPI_MEM_OP_ADDR(nor->addr_nbytes, 0, 0),\n-\t\t\t\t      SPI_MEM_OP_DUMMY(nor->read_dummy, 0),\n-\t\t\t\t      SPI_MEM_OP_DATA_IN(0, NULL, 0)),\n+\t\t.op_tmpl = &info.primary_op_tmpl,\n+\t\t.primary_op_tmpl = SPI_MEM_OP(SPI_MEM_OP_CMD(nor->read_opcode, 0),\n+\t\t\t\t\t      SPI_MEM_OP_ADDR(nor->addr_nbytes, 0, 0),\n+\t\t\t\t\t      SPI_MEM_OP_DUMMY(nor->read_dummy, 0),\n+\t\t\t\t\t      SPI_MEM_OP_DATA_IN(0, NULL, 0)),\n \t\t.offset = 0,\n \t\t.length = nor->params->size,\n \t};\n-\tstruct spi_mem_op *op = &info.op_tmpl;\n+\tstruct spi_mem_op *op = info.op_tmpl;\n \n \tspi_nor_spimem_setup_op(nor, op, nor->read_proto);\n \n@@ -3672,14 +3673,15 @@ static int spi_nor_create_read_dirmap(struct spi_nor *nor)\n static int spi_nor_create_write_dirmap(struct spi_nor *nor)\n {\n \tstruct spi_mem_dirmap_info info = {\n-\t\t.op_tmpl = SPI_MEM_OP(SPI_MEM_OP_CMD(nor->program_opcode, 0),\n-\t\t\t\t      SPI_MEM_OP_ADDR(nor->addr_nbytes, 0, 0),\n-\t\t\t\t      SPI_MEM_OP_NO_DUMMY,\n-\t\t\t\t      SPI_MEM_OP_DATA_OUT(0, NULL, 0)),\n+\t\t.op_tmpl = &info.primary_op_tmpl,\n+\t\t.primary_op_tmpl = SPI_MEM_OP(SPI_MEM_OP_CMD(nor->program_opcode, 0),\n+\t\t\t\t\t      SPI_MEM_OP_ADDR(nor->addr_nbytes, 0, 0),\n+\t\t\t\t\t      SPI_MEM_OP_NO_DUMMY,\n+\t\t\t\t\t      SPI_MEM_OP_DATA_OUT(0, NULL, 0)),\n \t\t.offset = 0,\n \t\t.length = nor->params->size,\n \t};\n-\tstruct spi_mem_op *op = &info.op_tmpl;\n+\tstruct spi_mem_op *op = info.op_tmpl;\n \n \tif (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second)\n \t\top->addr.nbytes = 0;\ndiff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c\nindex a09371a075d2..e2eaa1ba4ff6 100644\n--- a/drivers/spi/spi-mem.c\n+++ b/drivers/spi/spi-mem.c\n@@ -647,7 +647,7 @@ EXPORT_SYMBOL_GPL(spi_mem_calc_op_duration);\n static ssize_t spi_mem_no_dirmap_read(struct spi_mem_dirmap_desc *desc,\n \t\t\t\t      u64 offs, size_t len, void *buf)\n {\n-\tstruct spi_mem_op op = desc->info.op_tmpl;\n+\tstruct spi_mem_op op = *desc->info.op_tmpl;\n \tint ret;\n \n \top.addr.val = desc->info.offset + offs;\n@@ -667,7 +667,7 @@ static ssize_t spi_mem_no_dirmap_read(struct spi_mem_dirmap_desc *desc,\n static ssize_t spi_mem_no_dirmap_write(struct spi_mem_dirmap_desc *desc,\n \t\t\t\t       u64 offs, size_t len, const void *buf)\n {\n-\tstruct spi_mem_op op = desc->info.op_tmpl;\n+\tstruct spi_mem_op op = *desc->info.op_tmpl;\n \tint ret;\n \n \top.addr.val = desc->info.offset + offs;\n@@ -706,11 +706,11 @@ spi_mem_dirmap_create(struct spi_mem *mem,\n \tint ret = -ENOTSUPP;\n \n \t/* Make sure the number of address cycles is between 1 and 8 bytes. */\n-\tif (!info->op_tmpl.addr.nbytes || info->op_tmpl.addr.nbytes > 8)\n+\tif (!info->primary_op_tmpl.addr.nbytes || info->primary_op_tmpl.addr.nbytes > 8)\n \t\treturn ERR_PTR(-EINVAL);\n \n \t/* data.dir should either be SPI_MEM_DATA_IN or SPI_MEM_DATA_OUT. */\n-\tif (info->op_tmpl.data.dir == SPI_MEM_NO_DATA)\n+\tif (info->primary_op_tmpl.data.dir == SPI_MEM_NO_DATA)\n \t\treturn ERR_PTR(-EINVAL);\n \n \tdesc = kzalloc_obj(*desc);\n@@ -719,6 +719,7 @@ spi_mem_dirmap_create(struct spi_mem *mem,\n \n \tdesc->mem = mem;\n \tdesc->info = *info;\n+\tdesc->info.op_tmpl = &desc->info.primary_op_tmpl;\n \tif (ctlr->mem_ops && ctlr->mem_ops->dirmap_create) {\n \t\tret = spi_mem_access_start(mem);\n \t\tif (ret) {\n@@ -733,7 +734,7 @@ spi_mem_dirmap_create(struct spi_mem *mem,\n \n \tif (ret) {\n \t\tdesc->nodirmap = true;\n-\t\tif (!spi_mem_supports_op(desc->mem, &desc->info.op_tmpl))\n+\t\tif (!spi_mem_supports_op(desc->mem, &desc->info.primary_op_tmpl))\n \t\t\tret = -EOPNOTSUPP;\n \t\telse\n \t\t\tret = 0;\n@@ -857,7 +858,7 @@ ssize_t spi_mem_dirmap_read(struct spi_mem_dirmap_desc *desc,\n \tstruct spi_controller *ctlr = desc->mem->spi->controller;\n \tssize_t ret;\n \n-\tif (desc->info.op_tmpl.data.dir != SPI_MEM_DATA_IN)\n+\tif (desc->info.op_tmpl->data.dir != SPI_MEM_DATA_IN)\n \t\treturn -EINVAL;\n \n \tif (!len)\n@@ -903,7 +904,7 @@ ssize_t spi_mem_dirmap_write(struct spi_mem_dirmap_desc *desc,\n \tstruct spi_controller *ctlr = desc->mem->spi->controller;\n \tssize_t ret;\n \n-\tif (desc->info.op_tmpl.data.dir != SPI_MEM_DATA_OUT)\n+\tif (desc->info.op_tmpl->data.dir != SPI_MEM_DATA_OUT)\n \t\treturn -EINVAL;\n \n \tif (!len)\ndiff --git a/include/linux/spi/spi-mem.h b/include/linux/spi/spi-mem.h\nindex 5774e554c0f0..3cba7fe4bed5 100644\n--- a/include/linux/spi/spi-mem.h\n+++ b/include/linux/spi/spi-mem.h\n@@ -225,7 +225,8 @@ struct spi_mem_op {\n  * direction is directly encoded in the ->op_tmpl.data.dir field.\n  */\n struct spi_mem_dirmap_info {\n-\tstruct spi_mem_op op_tmpl;\n+\tstruct spi_mem_op *op_tmpl;\n+\tstruct spi_mem_op primary_op_tmpl;\n \tu64 offset;\n \tu64 length;\n };\n",
    "prefixes": [
        "v2",
        "04/11"
    ]
}