get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2231936,
    "url": "http://patchwork.ozlabs.org/api/1.2/patches/2231936/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260501155421.3329862-2-elder@riscstar.com/",
    "project": {
        "id": 42,
        "url": "http://patchwork.ozlabs.org/api/1.2/projects/42/?format=api",
        "name": "Linux GPIO development",
        "link_name": "linux-gpio",
        "list_id": "linux-gpio.vger.kernel.org",
        "list_email": "linux-gpio@vger.kernel.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260501155421.3329862-2-elder@riscstar.com>",
    "list_archive_url": null,
    "date": "2026-05-01T15:54:09",
    "name": "[net-next,01/12] net: pcs: pcs-xpcs-regmap: support XPCS memory-mapped MDIO bus via regmap",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "d0bdad370f3eb2a5aa47a88131d99a550e9b70be",
    "submitter": {
        "id": 89551,
        "url": "http://patchwork.ozlabs.org/api/1.2/people/89551/?format=api",
        "name": "Alex Elder",
        "email": "elder@riscstar.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-gpio/patch/20260501155421.3329862-2-elder@riscstar.com/mbox/",
    "series": [
        {
            "id": 502478,
            "url": "http://patchwork.ozlabs.org/api/1.2/series/502478/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-gpio/list/?series=502478",
            "date": "2026-05-01T15:54:09",
            "name": "net: enable TC956x support",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502478/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2231936/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2231936/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-gpio+bounces-35953-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-gpio@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=riscstar-com.20251104.gappssmtp.com\n header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=fMtk1Sre;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=104.64.211.4; helo=sin.lore.kernel.org;\n envelope-from=linux-gpio+bounces-35953-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=riscstar-com.20251104.gappssmtp.com\n header.i=@riscstar-com.20251104.gappssmtp.com header.b=\"fMtk1Sre\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.219.49",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=riscstar.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=riscstar.com"
        ],
        "Received": [
            "from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4])\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 4g6bGT5jPFz1xqf\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 02 May 2026 01:55:13 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 757B73010822\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  1 May 2026 15:54:44 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6EE473D47A0;\n\tFri,  1 May 2026 15:54:34 +0000 (UTC)",
            "from mail-qv1-f49.google.com (mail-qv1-f49.google.com\n [209.85.219.49])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 3CA593D170B\n\tfor <linux-gpio@vger.kernel.org>; Fri,  1 May 2026 15:54:32 +0000 (UTC)",
            "by mail-qv1-f49.google.com with SMTP id\n 6a1803df08f44-8a151012558so22894686d6.3\n        for <linux-gpio@vger.kernel.org>;\n Fri, 01 May 2026 08:54:32 -0700 (PDT)",
            "from zippy.localdomain (c-75-72-117-212.hsd1.mn.comcast.net.\n [75.72.117.212])\n        by smtp.gmail.com with ESMTPSA id\n 6a1803df08f44-8b539aa7293sm26615406d6.22.2026.05.01.08.54.27\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Fri, 01 May 2026 08:54:30 -0700 (PDT)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777650874; cv=none;\n b=SgbToPLR51U0ZGWmu52BDEQ/EdE4lOBKOhAtLAAd1au4jxFPgjVRfNoQ+TKaqwGdRiS5xc9bEhmAeLOvDjalAGJ5lKR2I17V52VP4e1CXjr4RO+iRbNr7n7hKat7loXTOa9dc6XEb25EB2pchL3mA1iGKLIfbNkhPELKD/WBzZo=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777650874; c=relaxed/simple;\n\tbh=aDKuyOACGE1gNZqDJy0tqBgdZCQkU/jSoB8ed5fRm2I=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=SC/XZ9B5VDOYNsS2wG10APhFgsJlp317gt8F1oF2B4YqADz+p4RHl4GYmaWixvcoj0wF11UeGfGNU6jaGCQ/TOBYD2d1t3elPSSi8UaK6fcFFtvj/Htpdwl6Zrapu/lTMvRSPuGj7JSkEFydiwiqChH65GO6e5bW7wGZdPcxzaQ=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=riscstar.com;\n spf=pass smtp.mailfrom=riscstar.com;\n dkim=pass (2048-bit key) header.d=riscstar-com.20251104.gappssmtp.com\n header.i=@riscstar-com.20251104.gappssmtp.com header.b=fMtk1Sre;\n arc=none smtp.client-ip=209.85.219.49",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1777650871;\n x=1778255671; darn=vger.kernel.org;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=KFcS3U32PymUNY1RdncskmbPJS8yXxMzYT9xI+/9Gm4=;\n        b=fMtk1SreB86rwdZGjIcNe4L88MESDiLdwzL2hEN8M6lap7/SBDpeCiJqKTw3rMZuRa\n         ooCBx9tKT6+v+VVCqqaHnHI1GbFcoUUZl2IGpKZUUtBRQEbKUogIOu/gL/DeeFcOXrSa\n         sTMU3VRF4+jsL9r3egqMEdKIIQcbr2o73xPUEkZoCcAu994iyGR0Wg54RW4ZJPNjRmcm\n         yRIOsO4td7jtDAn7uMe+kyL1dXmmAgvMEuy5+xxvawtYFycwSLCDW6oZhGHpkWtzgFVN\n         7d39T2F4wRmV8h3uwPQ/e7rR9U7ddRrhjP+gOdkC1HxZQMnhN5LKHnXsmHKffbgp+Zpa\n         tNAw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1777650871; x=1778255671;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=KFcS3U32PymUNY1RdncskmbPJS8yXxMzYT9xI+/9Gm4=;\n        b=czdBo80qv6NERSWXw6jn5SRJlQKjWKD4pVaApXOvRjkcFg7ynGgoI212P0rEh3sT/S\n         dqAASJsj3s7GqDhfLP09Y7TtwhYg/T7GholqBVezWZkfo5lI3GWMowviDN0l1mM6koaA\n         fKxXieYNfvuYKpGDj0K+2JUtN2xnTnU0IGCNfWooOnLYs+Vnw+j/qjPFh1Nosys/S00L\n         w04udFA9ytQsz0g1KNfccD8BilEHGLR7JixQ+Bozrs4udQeI3Y4wCfdTAvVtnC7zoB1v\n         tl8xGuOp9qO0ck4i49trZb1qAJ87OO1BhJ6V3zn7p4OlaXPoFNvqbRxRuWan9Nie8gkT\n         Fy+w==",
        "X-Forwarded-Encrypted": "i=1;\n AFNElJ+Rvy/W1JjYpI9K2MuYx0Dhd374CnUeN/mzGgsM+oD8zfuCUQ/RcSOrWNY7GHHmYTeN4KDgUCSjf/Pb@vger.kernel.org",
        "X-Gm-Message-State": "AOJu0YwwMLD6lrI196k18MjIoMZ34W+6GoYHIZ9lrr19eULOxAzTSdQ2\n\t9tsfqSXLE/2q3gw0kwgVo5x6CEENQcAb1ig0mcM6T4jcHuJb1PEtP1s/619cpncd1uQ=",
        "X-Gm-Gg": "AeBDietgooFoJpiBL8NSIdRObYxEL4HYLVOk7BeSFqojp3esXKQLfGUjHThyiqSH1QM\n\trxiF5jOCeY9q3mY2ThqQQwpzsgMsFnCg2fmcdwWG7SPHLpkUCZG7SW4hodomRlZF14/6r+te2nz\n\tUnT9DcqzsK9JeG3JNwrRqQ0uozOH9FvKUg8UkNoB0dQf3q7+bI9SYm5Q4GO6nQrlNfGmkc1xZLS\n\txQf5PJH4IOXcT74NCRwOOmC6ZeBxmYyVI/yEOuNmhdBXZYsoSiLGyz5JKZa+INsgZhTX7WKkxMc\n\tsvFE3HL1vrFJdQ9MignJ5ooT1CrsJn0y8BvjUwZG7c8gD+gE/hrPETN+OSQOXmpXOoX7CLYoj+U\n\taL1V7lCLLYyyrKg2uDWCKtGPXPzrsqBYn3aifgg5q5UesF9dy/umSDSQQB3OH2aUuev0k1do/Ea\n\tZHFLYpwncc8v1i7j46ZV/OIHyskOrPYaC5neRBjHsY2Y1Hc1LxS8EUX2rPNiB4FCRWnoYbqaA7t\n\t2/MxeiVAhfMrsWk",
        "X-Received": "by 2002:a05:6214:4c88:b0:8a6:1216:fb6f with SMTP id\n 6a1803df08f44-8b667a83663mr713716d6.32.1777650871067;\n        Fri, 01 May 2026 08:54:31 -0700 (PDT)",
        "From": "Alex Elder <elder@riscstar.com>",
        "To": "andrew+netdev@lunn.ch,\n\tdavem@davemloft.net,\n\tedumazet@google.com,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\tmaxime.chevallier@bootlin.com,\n\trmk+kernel@armlinux.org.uk,\n\tandersson@kernel.org,\n\tkonradybcio@kernel.org,\n\trobh@kernel.org,\n\tkrzk+dt@kernel.org,\n\tconor+dt@kernel.org,\n\tlinusw@kernel.org,\n\tbrgl@kernel.org,\n\tarnd@arndb.de,\n\tgregkh@linuxfoundation.org",
        "Cc": "Daniel Thompson <daniel@riscstar.com>,\n\telder@riscstar.com,\n\tmohd.anwar@oss.qualcomm.com,\n\ta0987203069@gmail.com,\n\talexandre.torgue@foss.st.com,\n\tast@kernel.org,\n\tboon.khai.ng@altera.com,\n\tchenchuangyu@xiaomi.com,\n\tchenhuacai@kernel.org,\n\tdaniel@iogearbox.net,\n\thawk@kernel.org,\n\thkallweit1@gmail.com,\n\tinochiama@gmail.com,\n\tjohn.fastabend@gmail.com,\n\tjulianbraha@gmail.com,\n\tlivelycarpet87@gmail.com,\n\tmatthew.gerlach@altera.com,\n\tmcoquelin.stm32@gmail.com,\n\tme@ziyao.cc,\n\tprabhakar.mahadev-lad.rj@bp.renesas.com,\n\trichardcochran@gmail.com,\n\trohan.g.thomas@altera.com,\n\tsdf@fomichev.me,\n\tsiyanteng@cqsoftware.com.cn,\n\tweishangjuan@eswincomputing.com,\n\twens@kernel.org,\n\tnetdev@vger.kernel.org,\n\tbpf@vger.kernel.org,\n\tlinux-arm-msm@vger.kernel.org,\n\tdevicetree@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org,\n\tlinux-stm32@st-md-mailman.stormreply.com,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-kernel@vger.kernel.org",
        "Subject": "[PATCH net-next 01/12] net: pcs: pcs-xpcs-regmap: support XPCS\n memory-mapped MDIO bus via regmap",
        "Date": "Fri,  1 May 2026 10:54:09 -0500",
        "Message-ID": "<20260501155421.3329862-2-elder@riscstar.com>",
        "X-Mailer": "git-send-email 2.51.0",
        "In-Reply-To": "<20260501155421.3329862-1-elder@riscstar.com>",
        "References": "<20260501155421.3329862-1-elder@riscstar.com>",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-gpio@vger.kernel.org",
        "List-Id": "<linux-gpio.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-gpio+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-gpio+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit"
    },
    "content": "From: Daniel Thompson <daniel@riscstar.com>\n\nIn some DesignWare XPCS implementatons the memory-mapped MDIO bus is\nallocated to a register window that does not align to a page boundary.\nThis makes iomapping the registers problematic.\n\nFor example the Toshiba TC9564 (a PCIe Ethernet-AVB/TSN bridge) provides\nan \"eMAC\" subsystem with the XPCS base address cuddled up to XGMAC\nregisters.\n\nLet's introduce helpers to allow the driver that owns the eMAC to register\nan XPCS using is regmap for the memory-mapped MDIO bus.\n\nSigned-off-by: Daniel Thompson <daniel@riscstar.com>\nSigned-off-by: Alex Elder <elder@riscstar.com>\n---\n drivers/net/pcs/Makefile            |   4 +-\n drivers/net/pcs/pcs-xpcs-regmap.c   | 203 ++++++++++++++++++++++++++++\n include/linux/pcs/pcs-xpcs-regmap.h |  20 +++\n 3 files changed, 225 insertions(+), 2 deletions(-)\n create mode 100644 drivers/net/pcs/pcs-xpcs-regmap.c\n create mode 100644 include/linux/pcs/pcs-xpcs-regmap.h",
    "diff": "diff --git a/drivers/net/pcs/Makefile b/drivers/net/pcs/Makefile\nindex 4f7920618b900..565f1b63fce0b 100644\n--- a/drivers/net/pcs/Makefile\n+++ b/drivers/net/pcs/Makefile\n@@ -1,8 +1,8 @@\n # SPDX-License-Identifier: GPL-2.0\n # Makefile for Linux PCS drivers\n \n-pcs_xpcs-$(CONFIG_PCS_XPCS)\t:= pcs-xpcs.o pcs-xpcs-plat.o \\\n-\t\t\t\t   pcs-xpcs-nxp.o pcs-xpcs-wx.o\n+pcs_xpcs-$(CONFIG_PCS_XPCS)\t:= pcs-xpcs.o pcs-xpcs-nxp.o pcs-xpcs-regmap.o \\\n+\t\t\t\t   pcs-xpcs-plat.o pcs-xpcs-wx.o\n \n obj-$(CONFIG_PCS_XPCS)\t\t+= pcs_xpcs.o\n obj-$(CONFIG_PCS_LYNX)\t\t+= pcs-lynx.o\ndiff --git a/drivers/net/pcs/pcs-xpcs-regmap.c b/drivers/net/pcs/pcs-xpcs-regmap.c\nnew file mode 100644\nindex 0000000000000..20a54a3605951\n--- /dev/null\n+++ b/drivers/net/pcs/pcs-xpcs-regmap.c\n@@ -0,0 +1,203 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/*\n+ * Synopsys DesignWare XPCS regmap helpers\n+ *\n+ * Copyright (C) 2026 RISCstar Solutions.\n+ * Copyright (C) 2024 Serge Semin\n+ */\n+\n+#include <linux/device.h>\n+#include <linux/kernel.h>\n+#include <linux/mdio.h>\n+#include <linux/pcs/pcs-xpcs.h>\n+#include <linux/pcs/pcs-xpcs-regmap.h>\n+#include <linux/regmap.h>\n+\n+#include \"pcs-xpcs.h\"\n+\n+/* Page select register for the indirect MMIO CSRs access */\n+#define DW_VR_CSR_VIEWPORT\t\t0xff\n+\n+struct dw_xpcs_regmap {\n+\tstruct device *dev;\n+\tstruct mii_bus *bus;\n+\tstruct regmap *regmap;\n+\tbool reg_indir;\n+};\n+\n+static ptrdiff_t xpcs_regmap_addr_format(int dev, int reg)\n+{\n+\treturn FIELD_PREP(0x1f0000, dev) | FIELD_PREP(0xffff, reg);\n+}\n+\n+static u16 xpcs_regmap_addr_page(ptrdiff_t csr)\n+{\n+\treturn FIELD_GET(0x1fff00, csr);\n+}\n+\n+static ptrdiff_t xpcs_regmap_addr_offset(ptrdiff_t csr)\n+{\n+\treturn FIELD_GET(0xff, csr);\n+}\n+\n+static int xpcs_regmap_read_reg_indirect(struct dw_xpcs_regmap *pxpcs, int dev,\n+\t\t\t\t\t int reg)\n+{\n+\tptrdiff_t csr, ofs;\n+\tunsigned int val;\n+\tu16 page;\n+\tint res;\n+\n+\tcsr = xpcs_regmap_addr_format(dev, reg);\n+\tpage = xpcs_regmap_addr_page(csr);\n+\tofs = xpcs_regmap_addr_offset(csr);\n+\n+\tres = regmap_write(pxpcs->regmap, DW_VR_CSR_VIEWPORT, page);\n+\tif (res < 0)\n+\t\treturn res;\n+\n+\tres = regmap_read(pxpcs->regmap, ofs, &val);\n+\tif (res < 0)\n+\t\treturn res;\n+\n+\treturn val & 0xffff;\n+}\n+\n+static int xpcs_regmap_write_reg_indirect(struct dw_xpcs_regmap *pxpcs, int dev,\n+\t\t\t\t\t  int reg, u16 val)\n+{\n+\tptrdiff_t csr, ofs;\n+\tu16 page;\n+\tint res;\n+\n+\tcsr = xpcs_regmap_addr_format(dev, reg);\n+\tpage = xpcs_regmap_addr_page(csr);\n+\tofs = xpcs_regmap_addr_offset(csr);\n+\n+\tres = regmap_write(pxpcs->regmap, DW_VR_CSR_VIEWPORT, page);\n+\tif (res < 0)\n+\t\treturn res;\n+\n+\treturn regmap_write(pxpcs->regmap, ofs, val);\n+}\n+\n+static int xpcs_regmap_read_reg_direct(struct dw_xpcs_regmap *pxpcs, int dev,\n+\t\t\t\t       int reg)\n+{\n+\tunsigned int val;\n+\tptrdiff_t csr;\n+\tint res;\n+\n+\tcsr = xpcs_regmap_addr_format(dev, reg);\n+\tres = regmap_read(pxpcs->regmap, csr, &val);\n+\tif (res < 0)\n+\t\treturn res;\n+\n+\treturn val & 0xffff;\n+}\n+\n+static int xpcs_regmap_write_reg_direct(struct dw_xpcs_regmap *pxpcs, int dev,\n+\t\t\t\t\tint reg, u16 val)\n+{\n+\tptrdiff_t csr = xpcs_regmap_addr_format(dev, reg);\n+\n+\treturn regmap_write(pxpcs->regmap, csr, val);\n+}\n+\n+static int xpcs_regmap_read_c22(struct mii_bus *bus, int addr, int reg)\n+{\n+\tstruct dw_xpcs_regmap *pxpcs = bus->priv;\n+\n+\tif (addr != 0)\n+\t\treturn -ENODEV;\n+\n+\tif (pxpcs->reg_indir)\n+\t\treturn xpcs_regmap_read_reg_indirect(pxpcs, MDIO_MMD_VEND2, reg);\n+\telse\n+\t\treturn xpcs_regmap_read_reg_direct(pxpcs, MDIO_MMD_VEND2, reg);\n+}\n+\n+static int xpcs_regmap_write_c22(struct mii_bus *bus, int addr, int reg, u16 val)\n+{\n+\tstruct dw_xpcs_regmap *pxpcs = bus->priv;\n+\n+\tif (addr != 0)\n+\t\treturn -ENODEV;\n+\n+\tif (pxpcs->reg_indir)\n+\t\treturn xpcs_regmap_write_reg_indirect(pxpcs, MDIO_MMD_VEND2, reg, val);\n+\telse\n+\t\treturn xpcs_regmap_write_reg_direct(pxpcs, MDIO_MMD_VEND2, reg, val);\n+}\n+\n+static int xpcs_regmap_read_c45(struct mii_bus *bus, int addr, int dev, int reg)\n+{\n+\tstruct dw_xpcs_regmap *pxpcs = bus->priv;\n+\n+\tif (addr != 0)\n+\t\treturn -ENODEV;\n+\n+\tif (pxpcs->reg_indir)\n+\t\treturn xpcs_regmap_read_reg_indirect(pxpcs, dev, reg);\n+\telse\n+\t\treturn xpcs_regmap_read_reg_direct(pxpcs, dev, reg);\n+}\n+\n+static int xpcs_regmap_write_c45(struct mii_bus *bus, int addr, int dev,\n+\t\t\t\t int reg, u16 val)\n+{\n+\tstruct dw_xpcs_regmap *pxpcs = bus->priv;\n+\n+\tif (addr != 0)\n+\t\treturn -ENODEV;\n+\n+\tif (pxpcs->reg_indir)\n+\t\treturn xpcs_regmap_write_reg_indirect(pxpcs, dev, reg, val);\n+\telse\n+\t\treturn xpcs_regmap_write_reg_direct(pxpcs, dev, reg, val);\n+}\n+\n+struct dw_xpcs *devm_xpcs_regmap_register(struct device *dev,\n+\t\t\t\t\t  const struct xpcs_regmap_config *config)\n+{\n+\tstatic atomic_t id = ATOMIC_INIT(-1);\n+\tstruct dw_xpcs_regmap *pxpcs;\n+\tint ret;\n+\n+\tpxpcs = devm_kzalloc(dev, sizeof(*pxpcs), GFP_KERNEL);\n+\tif (!pxpcs)\n+\t\treturn ERR_PTR(-ENOMEM);\n+\n+\tpxpcs->dev = dev;\n+\tpxpcs->regmap = config->regmap;\n+\tpxpcs->reg_indir = config->reg_indir;\n+\n+\tpxpcs->bus = devm_mdiobus_alloc_size(dev, 0);\n+\tif (!pxpcs->bus)\n+\t\treturn ERR_PTR(-ENOMEM);\n+\n+\tpxpcs->bus->name = \"DW XPCS MCI/APB3\";\n+\tpxpcs->bus->read = xpcs_regmap_read_c22;\n+\tpxpcs->bus->write = xpcs_regmap_write_c22;\n+\tpxpcs->bus->read_c45 = xpcs_regmap_read_c45;\n+\tpxpcs->bus->write_c45 = xpcs_regmap_write_c45;\n+\tpxpcs->bus->phy_mask = ~0;\n+\tpxpcs->bus->parent = dev;\n+\tpxpcs->bus->priv = pxpcs;\n+\n+\tsnprintf(pxpcs->bus->id, MII_BUS_ID_SIZE,\n+\t\t \"dwxpcs-%x\", atomic_inc_return(&id));\n+\n+\t/* MDIO-bus here serves as just a back-end engine abstracting out\n+\t * the MDIO and MCI/APB3 IO interfaces utilized for the DW XPCS CSRs\n+\t * access.\n+\t */\n+\tret = devm_mdiobus_register(dev, pxpcs->bus);\n+\tif (ret) {\n+\t\tdev_err(dev, \"Failed to create MDIO bus\\n\");\n+\t\treturn ERR_PTR(ret);\n+\t}\n+\n+\treturn xpcs_create_mdiodev(pxpcs->bus, 0);\n+}\n+EXPORT_SYMBOL_GPL(devm_xpcs_regmap_register);\ndiff --git a/include/linux/pcs/pcs-xpcs-regmap.h b/include/linux/pcs/pcs-xpcs-regmap.h\nnew file mode 100644\nindex 0000000000000..19c99d4160365\n--- /dev/null\n+++ b/include/linux/pcs/pcs-xpcs-regmap.h\n@@ -0,0 +1,20 @@\n+/* SPDX-License-Identifier: GPL-2.0 */\n+\n+#ifndef __LINUX_PCS_XPCS_REGMAP_H\n+#define __LINUX_PCS_XPCS_REGMAP_H\n+\n+#include <linux/types.h>\n+\n+struct device;\n+struct regmap;\n+struct dw_xpcs;\n+\n+struct xpcs_regmap_config {\n+\tstruct regmap *regmap;\n+\tbool reg_indir;\n+};\n+\n+struct dw_xpcs *devm_xpcs_regmap_register(\n+\t\tstruct device *dev, const struct xpcs_regmap_config *config);\n+\n+#endif /* __LINUX_PCS_XPCS_REGMAP_H */\n",
    "prefixes": [
        "net-next",
        "01/12"
    ]
}