From: Inochi Amaoto <inochiama@gmail.com>
To: sashiko-reviews@lists.linux.dev, Inochi Amaoto <inochiama@gmail.com>
Cc: conor+dt@kernel.org, devicetree@vger.kernel.org, robh@kernel.org,
linux-pci@vger.kernel.org
Subject: Re: [PATCH v3 6/6] PCI: spacemit-k1: Add Spacemit K3 PCIe host controller support
Date: Sun, 5 Jul 2026 09:52:40 +0800 [thread overview]
Message-ID: <akm4VHY-BRikbF2v@inochi.infowork> (raw)
In-Reply-To: <20260703022058.1FD001F000E9@smtp.kernel.org>
On Fri, Jul 03, 2026 at 02:20:57AM +0000, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
> - [High] Unclocked MMIO access during probe triggers a synchronous bus abort.
> - [High] Incorrect `.deinit` callback for K3 prevents PERST# assertion on teardown.
> - [High] AXI cache coherency initialization is bypassed when MSIs are disabled.
> - [Medium] Misleading comment and potential missing initialization for Root Complex mode.
> --
>
> commit 93fac4ee5b6c6ef1d779cae9b2ff5efed7a8fb39
> Author: Inochi Amaoto <inochiama@gmail.com>
>
> PCI: spacemit-k1: Add Spacemit K3 PCIe host controller support
>
> The PCIe controller on Spacemit K3 is almost a standard Synopsys
> DesignWare PCIe IP with extra link and reset control. Unlike
> the PCIe controller on K1, this controller supports external MSI
> interrupt controller and can use multiple PHYs at the same time.
>
> Add driver to support PCIe controller on Spacemit K3 PCIe.
>
> > diff --git a/drivers/pci/controller/dwc/pcie-spacemit-k1.c b/drivers/pci/controller/dwc/pcie-spacemit-k1.c
> > index 31aac056b68ed..680acc93f5395 100644
> > --- a/drivers/pci/controller/dwc/pcie-spacemit-k1.c
> > +++ b/drivers/pci/controller/dwc/pcie-spacemit-k1.c
> [ ... ]
> > @@ -340,6 +354,109 @@ static int k1_pcie_parse_port(struct k1_pcie *k1)
> > return ret;
> > }
> >
> > +static int k3_pcie_init(struct dw_pcie_rp *pp)
> > +{
> [ ... ]
> > + /*
> > + * Put the controller in root complex mode, and indicate that
> > + * Vaux (3.3v) is present.
> > + */
> > + regmap_set_bits(k1->pmu, k1->pmu_off + PCIE_CONTROL_LOGIC,
> > + PCIE_PERSTN_OUT | PCIE_PERSTN_OE);
>
> [Severity: Medium]
> Will this omit initializing the controller into root complex mode?
>
Yes
> Unlike k1_pcie_init(), this code block only drives the PERST# reset pins and
> seems to skip setting DEVICE_TYPE_RC.
>
> > +
> > + val = dw_pcie_readl_dbi(pci, GEN3_EQ_CONTROL_OFF);
> [ ... ]
> > +static int k3_pcie_msi_host_init(struct dw_pcie_rp *pp)
> > +{
> > + struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
> > + u32 val;
> > +
> > + dw_pcie_dbi_ro_wr_en(pci);
> > +
> > + val = dw_pcie_readl_dbi(pci, COHERENCY_CONTROL_3_OFF);
> > + val = u32_replace_bits(val, K3_CACHE_MSTR_AWCACHE_BEHAVIOR,
> > + K3_CACHE_MSTR_AWCACHE_MODE);
> > + dw_pcie_writel_dbi(pci, COHERENCY_CONTROL_3_OFF, val);
> > +
> > + dw_pcie_dbi_ro_wr_dis(pci);
> > +
> > + return 0;
> > +}
>
> [Severity: High]
> Does this code miss initializing AXI cache coherency when MSIs are disabled?
>
No
> Since k3_pcie_msi_host_init() is only called if pci_msi_enabled() is true,
> booting with pci=nomsi would skip this callback, silently skipping general
> cache coherency initialization for the controller.
>
The PCIe controller is broken as it does not support INTx in this driver.
> > +
> > +static const struct dw_pcie_host_ops k3_pcie_host_ops = {
> > + .init = k3_pcie_init,
> > + .deinit = k1_pcie_deinit,
>
> [Severity: High]
> Can reusing k1_pcie_deinit() prevent PERST# assertion on teardown?
>
> During initialization, k3_pcie_init() bypasses the K1 mechanism by setting
> PCIE_IGNORE_PERSTN in PCIE_CONTROL_LOGIC. Since k1_pcie_deinit() attempts to
> toggle PCIE_RC_PERST, won't the K3 hardware ignore it?
>
The K3 has handled this properly. You should treat the K3 and K1
totally differently.
> > + .msi_init = k3_pcie_msi_host_init,
> > +};
> > +
> > +static const struct dw_pcie_ops k3_pcie_ops = {
> > + .link_up = k1_pcie_link_up,
> > + .start_link = k1_pcie_start_link,
> > + .stop_link = k1_pcie_stop_link,
> > +};
> > +
> > +static void k3_pcie_clear_irq_status(struct k1_pcie *k1,
> > + u32 *status0, u32 *status1, u32 *status2)
> > +{
> > + *status0 = readl_relaxed(k1->link + K3_PHY_AHB_IRQSTATUS_INTX);
> > + *status1 = readl_relaxed(k1->link + INTR_STATUS);
> > + *status2 = readl_relaxed(k1->link + K3_ADDR_INTR_STATUS1);
>
> [Severity: High]
> Could this read unclocked MMIO memory and trigger a synchronous bus abort?
>
No, it is possible to access.
> In k1_pcie_probe(), data->parse_port() is called before dw_pcie_host_init():
>
> k1_pcie_probe() {
> ...
> ret = data->parse_port(k1);
> ...
> ret = dw_pcie_host_init(&k1->pci.pp);
> }
>
> This means k3_pcie_parse_port() and k3_pcie_clear_irq_status() are executed
> before the required hardware clocks are enabled, accessing hardware registers
> while their backing clocks are gated.
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260703020003.485436-1-inochiama@gmail.com?part=6
next prev parent reply other threads:[~2026-07-05 1:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-03 1:59 [PATCH v3 0/6] riscv: spacemit: Add PCIe RC controller support for K3 Inochi Amaoto
2026-07-03 1:59 ` [PATCH v3 1/6] PCI: spacemit-k1: Add device data support Inochi Amaoto
2026-07-03 2:15 ` sashiko-bot
2026-07-03 1:59 ` [PATCH v3 2/6] PCI: spacemit-k1: Add multiple PHY handles support Inochi Amaoto
2026-07-03 2:15 ` sashiko-bot
2026-07-03 1:59 ` [PATCH v3 3/6] PCI: spacemit-k1: Add device id update helper Inochi Amaoto
2026-07-03 2:13 ` sashiko-bot
2026-07-03 2:00 ` [PATCH v3 4/6] dt-bindings: PCI: snps,dw-pcie: Add msi-parent for MSI handle check Inochi Amaoto
2026-07-03 2:13 ` sashiko-bot
2026-07-03 2:00 ` [PATCH v3 5/6] dt-bindings: PCI: spacemit: Introduce Spacemit K3 PCIe host controller Inochi Amaoto
2026-07-03 2:15 ` sashiko-bot
2026-07-05 9:37 ` Krzysztof Kozlowski
2026-07-03 2:00 ` [PATCH v3 6/6] PCI: spacemit-k1: Add Spacemit K3 PCIe host controller support Inochi Amaoto
2026-07-03 2:20 ` sashiko-bot
2026-07-05 1:52 ` Inochi Amaoto [this message]
2026-07-03 17:15 ` [PATCH v3 0/6] riscv: spacemit: Add PCIe RC controller support for K3 Aurelien Jarno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=akm4VHY-BRikbF2v@inochi.infowork \
--to=inochiama@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox