From: Marek Vasut <marek.vasut@mailbox.org>
To: "Koichiro Den" <den@valinux.co.jp>,
"Yoshihiro Shimoda" <yoshihiro.shimoda.uh@renesas.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
"Manivannan Sadhasivam" <mani@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Bjorn Helgaas" <bhelgaas@google.com>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Geert Uytterhoeven" <geert+renesas@glider.be>,
"Magnus Damm" <magnus.damm@gmail.com>,
"Jingoo Han" <jingoohan1@gmail.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>,
Frank Li <Frank.Li@nxp.com>, Niklas Cassel <cassel@kernel.org>,
Wilfred Mallawa <wilfred.mallawa@wdc.com>,
Serge Semin <fancer.lancer@gmail.com>,
linux-pci@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 02/11] PCI: rcar-gen4: Drop the APP-based link_up check
Date: Tue, 22 Sep 2026 22:56:02 +0200 [thread overview]
Message-ID: <c2807afc-3e69-4744-8588-20f60839a603@mailbox.org> (raw)
In-Reply-To: <20260918032038.2216471-3-den@valinux.co.jp>
Hello Den-san,
I apologize for my late reply.
On 9/18/26 5:20 AM, Koichiro Den wrote:
> rcar_gen4_pcie_link_up() checks link state using SMLH_LINK_UP and
> RDLH_LINK_UP in PCIEINTSTS0. However, these bits do not reflect the live
> link state. On an R-Car S4, after taking down the endpoint, a link-down
> interrupt saw PCIEINTSTS0 = 0x20a000c5 with both bits still set. Even
> after resetting the controller with the LTSSM back in Polling, they read
> 0xa000c5, still set.
>
> As a result, dw_pcie_link_up() keeps reporting the link as up after it
> has gone down. That defeats the check in dw_pcie_other_conf_map_bus(),
> which is supposed to stop config accesses to downstream devices while
> the link is down, so such accesses go out on the dead link and stall the
> host. It also makes the callback useless for the link-down recovery
> added later, which has to wait for the link to actually come back after
> resetting the controller.
>
> Drop the callback and let the DesignWare core use its PORT_DEBUG1 check
> instead, which correctly detects the downed link.
>
> Fixes: 0d0c551011df ("PCI: rcar-gen4: Add R-Car Gen4 PCIe controller support for host mode")
> Signed-off-by: Koichiro Den <den@valinux.co.jp>
> ---
> drivers/pci/controller/dwc/pcie-rcar-gen4.c | 14 --------------
> 1 file changed, 14 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> index 5a076aa3f490..fe1f1940e809 100644
> --- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> +++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
> @@ -44,8 +44,6 @@
> /* PCIe Interrupt Status 0 Enable */
> #define PCIEINTSTS0EN 0x0310
> #define MSI_CTRL_INT BIT(26)
> -#define SMLH_LINK_UP BIT(7)
> -#define RDLH_LINK_UP BIT(6)
>
> /* PCIe DMA Interrupt Status Enable */
> #define PCIEDMAINTSTSEN 0x0314
> @@ -102,17 +100,6 @@ struct rcar_gen4_pcie {
> #define to_rcar_gen4_pcie(_dw) container_of(_dw, struct rcar_gen4_pcie, dw)
>
> /* Common */
> -static bool rcar_gen4_pcie_link_up(struct dw_pcie *dw)
> -{
> - struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
> - u32 val, mask;
> -
> - val = readl(rcar->base + PCIEINTSTS0);
> - mask = RDLH_LINK_UP | SMLH_LINK_UP;
> -
> - return (val & mask) == mask;
> -}
> -
> /*
> * Manually initiate the speed change. Return 0 if change succeeded; otherwise
> * -ETIMEDOUT.
> @@ -298,7 +285,6 @@ static int rcar_gen4_pcie_get_resources(struct rcar_gen4_pcie *rcar)
> static const struct dw_pcie_ops dw_pcie_ops = {
> .start_link = rcar_gen4_pcie_start_link,
> .stop_link = rcar_gen4_pcie_stop_link,
> - .link_up = rcar_gen4_pcie_link_up,
> };
>
> static struct rcar_gen4_pcie *rcar_gen4_pcie_alloc(struct platform_device *pdev)
Can we include some form of the draft patch below, so the S4 Reference
Manual rev.1.40 , page 1564 , Figure 104.5 Initial Setting of PCIEC ,
bottommost diamond in the figure (smlh_link_up and rdlh_link_up = 1
test), would still be fulfilled, and the initialization code in the
driver would not diverge from the initialization sequence listed in the
reference manual ? What do you think ?
The PCIEINTSTS0CLR should clear the link state bits before the link gets
started, so the initialization code should be able to sample those bits
after the link came up and confirm they were set during the link up.
The PCIEINTSTS0CLR usage however won't solve the case where the DWC PCIe
core code has to sample PCIe link state at arbitrary time, this is what
this patch does solve correctly.
"
diff --git a/drivers/pci/controller/dwc/pcie-rcar-gen4.c
b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
index e5833f36625d2..9f29055f0bed7 100644
--- a/drivers/pci/controller/dwc/pcie-rcar-gen4.c
+++ b/drivers/pci/controller/dwc/pcie-rcar-gen4.c
@@ -203,17 +203,28 @@ static int rcar_gen5_pcie_speed_control(struct
rcar_gen4_pcie *rcar)
* Enable LTSSM of this controller and manually initiate the speed change.
* Always return 0.
*/
+#define PCIEINTSTS0CLR 0x0340
static int rcar_gen4_pcie_start_link(struct dw_pcie *dw)
{
struct rcar_gen4_pcie *rcar = to_rcar_gen4_pcie(dw);
+ u32 val, mask;
int ret;
+ /* Clear RDLH/SMLH link state */
+ writel(RDLH_LINK_UP | SMLH_LINK_UP, rcar->base + PCIEINTSTS0CLR);
+
if (rcar->drvdata->ltssm_control) {
ret = rcar->drvdata->ltssm_control(rcar, true);
if (ret)
return ret;
}
+ ret = rcar->drvdata->speed_control(rcar);
+ if (ret)
+ return ret;
+
+ val = readl(rcar->base + PCIEINTSTS0);
+ mask = RDLH_LINK_UP | SMLH_LINK_UP;
+ return ((val & mask) == mask)
}
@@ -223,6 +234,9 @@ static void rcar_gen4_pcie_stop_link(struct dw_pcie *dw)
if (rcar->drvdata->ltssm_control)
rcar->drvdata->ltssm_control(rcar, false);
+
+ /* Clear RDLH/SMLH link state */
+ writel(RDLH_LINK_UP | SMLH_LINK_UP, rcar->base + PCIEINTSTS0CLR);
}
static int rcar_gen4_pcie_common_init(struct rcar_gen4_pcie *rcar)
"
--
Best regards,
Marek Vasut
next prev parent reply other threads:[~2026-09-22 21:02 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-18 3:20 [PATCH 00/11] PCI: rcar-gen4: Recover from link down and route Root Port interrupts Koichiro Den
2026-09-18 3:20 ` [PATCH 01/11] PCI: dwc: Add Renesas to the RAS DES VSEC list Koichiro Den
2026-09-18 3:24 ` sashiko-bot
2026-09-22 19:40 ` Marek Vasut
2026-09-18 3:20 ` [PATCH 02/11] PCI: rcar-gen4: Drop the APP-based link_up check Koichiro Den
2026-09-18 3:25 ` sashiko-bot
2026-09-22 20:56 ` Marek Vasut [this message]
2026-09-23 14:56 ` Koichiro Den
2026-09-27 19:59 ` Marek Vasut
2026-09-28 4:20 ` Koichiro Den
2026-09-28 15:07 ` Marek Vasut
2026-09-18 3:20 ` [PATCH 03/11] dt-bindings: PCI: rcar-gen4: Add optional "aer" interrupt Koichiro Den
2026-09-18 3:25 ` sashiko-bot
2026-09-22 20:59 ` Marek Vasut
2026-09-28 18:32 ` Rob Herring (Arm)
2026-09-18 3:20 ` [PATCH 04/11] PCI: dwc: Add a host op to run before iMSI-RX status is read Koichiro Den
2026-09-18 3:32 ` sashiko-bot
2026-09-18 3:20 ` [PATCH 05/11] PCI: rcar-gen4: Split reusable hardware initialization Koichiro Den
2026-09-18 3:27 ` sashiko-bot
2026-09-22 21:15 ` Marek Vasut
2026-09-23 15:24 ` Koichiro Den
2026-09-27 20:43 ` Marek Vasut
2026-09-18 3:20 ` [PATCH 06/11] PCI: rcar-gen4: Add Root Port reset support Koichiro Den
2026-09-18 3:29 ` sashiko-bot
2026-09-22 21:22 ` Marek Vasut
2026-09-23 16:12 ` Koichiro Den
2026-09-27 22:25 ` Marek Vasut
2026-09-28 3:50 ` Koichiro Den
2026-09-28 17:47 ` Marek Vasut
2026-09-18 3:20 ` [PATCH 07/11] PCI: rcar-gen4: Recover the Root Port on link down Koichiro Den
2026-09-18 3:33 ` sashiko-bot
2026-09-22 21:44 ` Marek Vasut
2026-09-24 16:15 ` Koichiro Den
2026-09-27 22:37 ` Marek Vasut
2026-09-28 4:06 ` Koichiro Den
2026-09-28 17:36 ` Marek Vasut
2026-09-18 3:20 ` [PATCH 08/11] PCI: dwc: Let glue drivers hide the Root Port MSI capabilities Koichiro Den
2026-09-18 3:24 ` sashiko-bot
2026-09-18 3:20 ` [PATCH 09/11] PCI: rcar-gen4: Route Root Port AER to a virtual Root Port IRQ Koichiro Den
2026-09-18 3:32 ` sashiko-bot
2026-09-18 3:20 ` [PATCH 10/11] PCI: rcar-gen4: Route Root Port PME and bandwidth notifications Koichiro Den
2026-09-18 3:30 ` sashiko-bot
2026-09-18 3:20 ` [PATCH 11/11] arm64: dts: renesas: r8a779f0: Describe the PCIe AER interrupts Koichiro Den
2026-09-18 3:27 ` sashiko-bot
2026-09-22 21:31 ` Marek Vasut
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=c2807afc-3e69-4744-8588-20f60839a603@mailbox.org \
--to=marek.vasut@mailbox.org \
--cc=Frank.Li@nxp.com \
--cc=bhelgaas@google.com \
--cc=cassel@kernel.org \
--cc=conor+dt@kernel.org \
--cc=den@valinux.co.jp \
--cc=devicetree@vger.kernel.org \
--cc=fancer.lancer@gmail.com \
--cc=geert+renesas@glider.be \
--cc=jingoohan1@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=magnus.damm@gmail.com \
--cc=mani@kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=wilfred.mallawa@wdc.com \
--cc=yoshihiro.shimoda.uh@renesas.com \
/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