get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2232195,
    "url": "http://patchwork.ozlabs.org/api/patches/2232195/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260503161913.77878-1-18255117159@163.com/",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api",
        "name": "Linux PCI development",
        "link_name": "linux-pci",
        "list_id": "linux-pci.vger.kernel.org",
        "list_email": "linux-pci@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260503161913.77878-1-18255117159@163.com>",
    "list_archive_url": null,
    "date": "2026-05-03T16:19:13",
    "name": "PCI: cadence: Use cdns_pcie_find_capability() to get PCIe Cap offset in host driver",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "f3aaecb712bd71c06b6f571f73164ef51b03ad80",
    "submitter": {
        "id": 89937,
        "url": "http://patchwork.ozlabs.org/api/people/89937/?format=api",
        "name": "Hans Zhang",
        "email": "18255117159@163.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260503161913.77878-1-18255117159@163.com/mbox/",
    "series": [
        {
            "id": 502580,
            "url": "http://patchwork.ozlabs.org/api/series/502580/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=502580",
            "date": "2026-05-03T16:19:13",
            "name": "PCI: cadence: Use cdns_pcie_find_capability() to get PCIe Cap offset in host driver",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502580/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2232195/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2232195/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-53642-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-pci@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=163.com header.i=@163.com header.a=rsa-sha256\n header.s=s110527 header.b=d74FHb1q;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-53642-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=163.com header.i=@163.com\n header.b=\"d74FHb1q\"",
            "smtp.subspace.kernel.org;\n arc=none smtp.client-ip=117.135.210.3",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=163.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=163.com"
        ],
        "Received": [
            "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\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 4g7qk81sxtz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 04 May 2026 02:20:00 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id EFE393008756\n\tfor <incoming@patchwork.ozlabs.org>; Sun,  3 May 2026 16:19:57 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 7B7CE372ECA;\n\tSun,  3 May 2026 16:19:57 +0000 (UTC)",
            "from m16.mail.163.com (m16.mail.163.com [117.135.210.3])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id D23512D061C;\n\tSun,  3 May 2026 16:19:51 +0000 (UTC)",
            "from zhb.. (unknown [])\n\tby gzsmtp2 (Coremail) with SMTP id PSgvCgBH_x2Cdfdp3fqmCw--.44160S2;\n\tMon, 04 May 2026 00:19:15 +0800 (CST)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777825197; cv=none;\n b=PD2KX4TyW0v+lCBFqsQUFQUJZA4ynZx0nb9fdqmIOdQG0VRA+qTjupwSTC3h5j2pUblybK3p66SLRw4XZ5yLMxdUoXFs//iHSPksZNCvnn5r68c6mcl3HmewmmUIOq3nU64EK3QCT6Fw+ZSM04+qrc2CZ/IBFItLLYdQi2qjOgw=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777825197; c=relaxed/simple;\n\tbh=yAvWr3Kprz6m9sHl1Wb0mk7IQ8OXqE+bT9c893UKmeE=;\n\th=From:To:Cc:Subject:Date:Message-Id:MIME-Version;\n b=lOMb1vV1EwbeV/H9mXL+vnAyiRESCo45IDOwGJINQ2InVukQmEVYXCNzkA4ndVdYAWZlDjhS3SUzpndeyXeBdqlWL1ED3Be72+lx7d3AJPU1VtCWIbGfUpc0onG5W5LVv3jl80RtdoB8bCE1twZOMb0uvH182I3W5RfzUJab4z0=",
        "ARC-Authentication-Results": "i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=163.com;\n spf=pass smtp.mailfrom=163.com;\n dkim=pass (1024-bit key) header.d=163.com header.i=@163.com\n header.b=d74FHb1q; arc=none smtp.client-ip=117.135.210.3",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com;\n\ts=s110527; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=b4\n\t1JjN3SH5XxvevjFooIwDYxxQeYW3QDlKT3BlDY/5I=; b=d74FHb1qiNQSooxygD\n\thXeiY8r70ELfArPMNtHvmFZZqa/+FcsxgUZaGW3TYjr1vCULRsC8m5Mg2gBOA6yT\n\tyjKBloKqIZX798YOhyF7SWtlvFoOT3rSkOePKcvTXGP+Fw4fRlhfEQ2lqfyLmLLR\n\tY9J3xWX5cg8CMctEVONvVM9rs=",
        "From": "Hans Zhang <18255117159@163.com>",
        "To": "bhelgaas@google.com,\n\tlpieralisi@kernel.org,\n\tkwilczynski@kernel.org,\n\tmani@kernel.org",
        "Cc": "robh@kernel.org,\n\tlinux-pci@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tHans Zhang <18255117159@163.com>",
        "Subject": "[PATCH] PCI: cadence: Use cdns_pcie_find_capability() to get PCIe Cap\n offset in host driver",
        "Date": "Mon,  4 May 2026 00:19:13 +0800",
        "Message-Id": "<20260503161913.77878-1-18255117159@163.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-pci@vger.kernel.org",
        "List-Id": "<linux-pci.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-CM-TRANSID": "PSgvCgBH_x2Cdfdp3fqmCw--.44160S2",
        "X-Coremail-Antispam": "1Uf129KBjvJXoWxtrW5tFW8CryfJFy5Zw4kCrg_yoW7Aw1fpF\n\tZxW3WSkF1Iqr4Y9a1kC3Z8XF13JF9Iya47Jan2kw13XF17CFyUGFy2kFy3KFW7GrZrXry7\n\tX3yDtrZxJa1avFUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2\n\t9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0pE6pBsUUUUU=",
        "X-CM-SenderInfo": "rpryjkyvrrlimvzbiqqrwthudrp/xtbCwwTWemn3dYTVjQAA3c"
    },
    "content": "The PCI Express capability structure may not always reside at offset 0xC0\nin the configuration space of the Cadence PCIe controller. Different SoC\nintegrations can place the capability at a different offset, making the\nhardcoded CDNS_PCIE_RP_CAP_OFFSET unreliable.\n\nReplace the fixed offset with a dynamic lookup using\ncdns_pcie_find_capability() in all host-related functions that need\nto access the PCIe Capability registers. This ensures correct operation\nacross various SoC designs.\n\nSigned-off-by: Hans Zhang <18255117159@163.com>\n---\nWhen I was dealing with Siddharth Vadapalli's review comments on my patch,\nI also discovered that there was hardware coding for the capability. So, \ncontinued to handle it according to the previous submission.\nhttps://lore.kernel.org/all/20250813144529.303548-1-18255117159@163.com/\n\nThis patch is based on the submissions of the following series:\nhttps://patchwork.kernel.org/project/linux-pci/cover/20260501153553.66382-1-18255117159@163.com/\n---\n .../cadence/pcie-cadence-host-common.c          | 17 ++++++++---------\n .../pci/controller/cadence/pcie-cadence-host.c  |  5 +++--\n .../controller/cadence/pcie-cadence-lga-regs.h  |  1 -\n 3 files changed, 11 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/pci/controller/cadence/pcie-cadence-host-common.c b/drivers/pci/controller/cadence/pcie-cadence-host-common.c\nindex d4ae762f423f..b217e3717851 100644\n--- a/drivers/pci/controller/cadence/pcie-cadence-host-common.c\n+++ b/drivers/pci/controller/cadence/pcie-cadence-host-common.c\n@@ -27,14 +27,14 @@ EXPORT_SYMBOL_GPL(bar_max_size);\n \n int cdns_pcie_host_training_complete(struct cdns_pcie *pcie)\n {\n-\tu32 pcie_cap_off = CDNS_PCIE_RP_CAP_OFFSET;\n \tunsigned long end_jiffies;\n \tu16 lnk_stat;\n+\tu8 cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_EXP);\n \n \t/* Wait for link training to complete. Exit after timeout. */\n \tend_jiffies = jiffies + LINK_RETRAIN_TIMEOUT;\n \tdo {\n-\t\tlnk_stat = cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA);\n+\t\tlnk_stat = cdns_pcie_rp_readw(pcie, cap + PCI_EXP_LNKSTA);\n \t\tif (!(lnk_stat & PCI_EXP_LNKSTA_LT))\n \t\t\tbreak;\n \t\tusleep_range(0, 1000);\n@@ -77,27 +77,26 @@ EXPORT_SYMBOL_GPL(cdns_pcie_host_wait_for_link);\n int cdns_pcie_retrain(struct cdns_pcie *pcie,\n \t\t      cdns_pcie_linkup_func pcie_link_up)\n {\n-\tu32 lnk_cap_sls, pcie_cap_off = CDNS_PCIE_RP_CAP_OFFSET;\n+\tu32 lnk_cap_sls;\n \tu16 lnk_stat, lnk_ctl;\n \tint ret = 0;\n+\tu8 cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_EXP);\n \n \t/*\n \t * Set retrain bit if current speed is 2.5 GB/s,\n \t * but the PCIe root port support is > 2.5 GB/s.\n \t */\n \n-\tlnk_cap_sls = cdns_pcie_readl(pcie, (CDNS_PCIE_RP_BASE + pcie_cap_off +\n+\tlnk_cap_sls = cdns_pcie_readl(pcie, (CDNS_PCIE_RP_BASE + cap +\n \t\t\t\t\t     PCI_EXP_LNKCAP));\n \tif ((lnk_cap_sls & PCI_EXP_LNKCAP_SLS) <= PCI_EXP_LNKCAP_SLS_2_5GB)\n \t\treturn ret;\n \n-\tlnk_stat = cdns_pcie_rp_readw(pcie, pcie_cap_off + PCI_EXP_LNKSTA);\n+\tlnk_stat = cdns_pcie_rp_readw(pcie, cap + PCI_EXP_LNKSTA);\n \tif ((lnk_stat & PCI_EXP_LNKSTA_CLS) == PCI_EXP_LNKSTA_CLS_2_5GB) {\n-\t\tlnk_ctl = cdns_pcie_rp_readw(pcie,\n-\t\t\t\t\t     pcie_cap_off + PCI_EXP_LNKCTL);\n+\t\tlnk_ctl = cdns_pcie_rp_readw(pcie, cap + PCI_EXP_LNKCTL);\n \t\tlnk_ctl |= PCI_EXP_LNKCTL_RL;\n-\t\tcdns_pcie_rp_writew(pcie, pcie_cap_off + PCI_EXP_LNKCTL,\n-\t\t\t\t    lnk_ctl);\n+\t\tcdns_pcie_rp_writew(pcie, cap + PCI_EXP_LNKCTL, lnk_ctl);\n \n \t\tret = cdns_pcie_host_training_complete(pcie);\n \t\tif (ret)\ndiff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c\nindex 0bc9e6e90e0e..2a3fd41c1cf4 100644\n--- a/drivers/pci/controller/cadence/pcie-cadence-host.c\n+++ b/drivers/pci/controller/cadence/pcie-cadence-host.c\n@@ -115,6 +115,7 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc)\n \tstruct cdns_pcie *pcie = &rc->pcie;\n \tu32 value, ctrl;\n \tu32 id;\n+\tu8 cap = cdns_pcie_find_capability(pcie, PCI_CAP_ID_EXP);\n \n \t/*\n \t * Set the root complex BAR configuration register:\n@@ -147,12 +148,12 @@ static int cdns_pcie_host_init_root_port(struct cdns_pcie_rc *rc)\n \tcdns_pcie_rp_writeb(pcie, PCI_CLASS_PROG, 0);\n \tcdns_pcie_rp_writew(pcie, PCI_CLASS_DEVICE, PCI_CLASS_BRIDGE_PCI);\n \n-\tvalue = cdns_pcie_rp_readl(pcie, CDNS_PCIE_RP_CAP_OFFSET + PCI_EXP_LNKCAP);\n+\tvalue = cdns_pcie_rp_readl(pcie, cap + PCI_EXP_LNKCAP);\n \tif (rc->quirk_broken_aspm_l0s)\n \t\tvalue &= ~PCI_EXP_LNKCAP_ASPM_L0S;\n \tif (rc->quirk_broken_aspm_l1)\n \t\tvalue &= ~PCI_EXP_LNKCAP_ASPM_L1;\n-\tcdns_pcie_rp_writel(pcie, CDNS_PCIE_RP_CAP_OFFSET + PCI_EXP_LNKCAP, value);\n+\tcdns_pcie_rp_writel(pcie, cap + PCI_EXP_LNKCAP, value);\n \n \treturn 0;\n }\ndiff --git a/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h b/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h\nindex 857b2140c5d2..7b92812ed120 100644\n--- a/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h\n+++ b/drivers/pci/controller/cadence/pcie-cadence-lga-regs.h\n@@ -133,7 +133,6 @@\n \n /* Root Port Registers (PCI configuration space for the root port function) */\n #define CDNS_PCIE_RP_BASE\t0x00200000\n-#define CDNS_PCIE_RP_CAP_OFFSET 0xC0\n \n /* Address Translation Registers */\n #define CDNS_PCIE_AT_BASE\t0x00400000\n",
    "prefixes": []
}