* [PATCH v8 01/15] PCI: rzg3s-host: Fix reset handling in probe error path
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 02/15] PCI: rzg3s-host: Reorder reset assertion during suspend John Madieu
` (16 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Fix incorrect reset_control_bulk_deassert() call in the probe error
path. When unwinding from a failed pci_host_probe(), the configuration
resets should be asserted to restore the hardware to its initial state,
not deasserted again.
Fixes: 7ef502fb35b2 ("PCI: Add Renesas RZ/G3S host controller driver")
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: No changes
v6: No changes
v5: No changes
v4: No changes
v3: No changes
v2: Collected Rb tag
drivers/pci/controller/pcie-rzg3s-host.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index 5aa58638903f..58e78fc52913 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1588,8 +1588,7 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
host_probe_teardown:
rzg3s_pcie_teardown_irqdomain(host);
- reset_control_bulk_deassert(host->data->num_cfg_resets,
- host->cfg_resets);
+ reset_control_bulk_assert(host->data->num_cfg_resets, host->cfg_resets);
rpm_put:
pm_runtime_put_sync(dev);
rpm_disable:
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 02/15] PCI: rzg3s-host: Reorder reset assertion during suspend
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
2026-03-06 14:34 ` [PATCH v8 01/15] PCI: rzg3s-host: Fix reset handling in probe error path John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 03/15] PCI: rzg3s-host: Rework inbound window algorithm for multi-SoC support John Madieu
` (15 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Reorder the reset assertion sequence during suspend from
power_resets -> cfg_resets to cfg_resets -> power_resets.
This change ensures the suspend sequence follows the reverse order
of the probe/init sequence, where power_resets are deasserted first
followed by cfg_resets.
Additionally, this ordering is required for RZ/G3E support where
cfg resets are controlled through PCIe AXI registers (offset 0x310h).
According to the RZ/G3E hardware manual (Rev.1.15, section 6.6.6.1.1
"Changing the Initial Values of the Registers"), AXI register access
requires ARESETn to be de-asserted and the clock to be supplied.
Since ARESETn is part of power_resets, cfg_resets must be asserted
before power_resets, otherwise the AXI registers become inaccessible.
Fixes: 7ef502fb35b2 ("PCI: Add Renesas RZ/G3S host controller driver")
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7:
- Reworded commit message and removed useless paragraph
- Collect Claudiu's Rb tag
v6: Moved as Patch 02/16 instead of 09/16 and added Fixes tag
v5: New patch as per Claudiu requirement
drivers/pci/controller/pcie-rzg3s-host.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index 58e78fc52913..222891324374 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1623,31 +1623,31 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev)
clk_disable_unprepare(port->refclk);
- ret = reset_control_bulk_assert(data->num_power_resets,
- host->power_resets);
+ ret = reset_control_bulk_assert(data->num_cfg_resets,
+ host->cfg_resets);
if (ret)
goto refclk_restore;
- ret = reset_control_bulk_assert(data->num_cfg_resets,
- host->cfg_resets);
+ ret = reset_control_bulk_assert(data->num_power_resets,
+ host->power_resets);
if (ret)
- goto power_resets_restore;
+ goto cfg_resets_restore;
ret = regmap_update_bits(sysc, RZG3S_SYS_PCIE_RST_RSM_B,
RZG3S_SYS_PCIE_RST_RSM_B_MASK,
FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 0));
if (ret)
- goto cfg_resets_restore;
+ goto power_resets_restore;
return 0;
/* Restore the previous state if any error happens */
-cfg_resets_restore:
- reset_control_bulk_deassert(data->num_cfg_resets,
- host->cfg_resets);
power_resets_restore:
reset_control_bulk_deassert(data->num_power_resets,
host->power_resets);
+cfg_resets_restore:
+ reset_control_bulk_deassert(data->num_cfg_resets,
+ host->cfg_resets);
refclk_restore:
clk_prepare_enable(port->refclk);
pm_runtime_resume_and_get(dev);
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 03/15] PCI: rzg3s-host: Rework inbound window algorithm for multi-SoC support
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
2026-03-06 14:34 ` [PATCH v8 01/15] PCI: rzg3s-host: Fix reset handling in probe error path John Madieu
2026-03-06 14:34 ` [PATCH v8 02/15] PCI: rzg3s-host: Reorder reset assertion during suspend John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 04/15] clk: renesas: r9a09g047: Add PCIe clocks and reset John Madieu
` (14 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
The existing inbound window configuration algorithm has two issues that
prevent proper operation on RZ/G3E:
1. Over-mapping: Using roundup_pow_of_two() on the remaining region size
can result in windows that extend beyond the intended memory region.
2. Alignment violation: Addresses are only aligned to 4K regardless of
the actual window size. According to the RZ/G3S HW manual (Rev.1.10,
section 34.6.6.7) and RZ/G3E HW manual (Rev.1.15, section 6.6.7.6),
bit carry must not occur when adding AXI Window Base and AXI Window
Mask registers. This effectively requires the base address to be
aligned to the window size.
RZ/G3E strictly enforces these constraints and requires precise window
boundaries with properly aligned addresses.
Rework the algorithm to properly handle arbitrary region sizes and
alignment constraints by splitting non-power-of-2 regions into multiple
windows. The new approach iteratively selects the largest power-of-2
size that:
- Fits within the remaining region (__fls of remaining size)
- Does not exceed the natural alignment of the CPU address (__ffs)
- Does not exceed the natural alignment of the PCI address (__ffs)
This ensures windows never over-map beyond the intended region and
satisfies the hardware requirement that base address + mask must not
cause bit carry, while maintaining the 4K * 2^N byte window size
constraint.
The reworked algorithm is required for RZ/G3E support and remains
fully compatible with RZ/G3S.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: Reworded patch description
v7: No changes
v6: No changes
v5:
- Updated HW manual section specification
- Collected Rb tag
v4: No changes
v3: No changes
v2: New patch
drivers/pci/controller/pcie-rzg3s-host.c | 53 +++++++++++++-----------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index 222891324374..7f5ffc5c218a 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1270,50 +1270,55 @@ static int rzg3s_pcie_set_inbound_windows(struct rzg3s_pcie_host *host,
u64 pci_addr = entry->res->start - entry->offset;
u64 cpu_addr = entry->res->start;
u64 cpu_end = entry->res->end;
- u64 size_id = 0;
int id = *index;
u64 size;
- while (cpu_addr < cpu_end) {
+ /*
+ * According to the RZ/G3S HW manual (Rev.1.10, section 34.6.6.7) and
+ * RZ/G3E HW manual (Rev.1.15, section 6.6.7.6):
+ * - Each window must be a single memory size of power of two
+ * - Mask registers must be set to (2^N - 1)
+ * - Bit carry must not occur when adding base and mask registers,
+ * meaning the base address must be aligned to the window size
+ *
+ * Split non-power-of-2 regions into multiple windows to satisfy
+ * these constraints without over-mapping.
+ */
+ while (cpu_addr <= cpu_end) {
+ u64 remaining_size = cpu_end - cpu_addr + 1;
+ u64 align_limit;
+
if (id >= RZG3S_MAX_WINDOWS)
return dev_err_probe(host->dev, -ENOSPC,
"Failed to map inbound window for resource (%s)\n",
entry->res->name);
- size = resource_size(entry->res) - size_id;
+ /* Start with largest power-of-two that fits in remaining size */
+ size = 1ULL << __fls(remaining_size);
/*
- * According to the RZ/G3S HW manual (Rev.1.10,
- * section 34.3.1.71 AXI Window Mask (Lower) Registers) the min
- * size is 4K.
+ * The "no bit carry" rule requires base addresses to be
+ * aligned to the window size. Find the maximum window size
+ * that both addresses can support based on their natural
+ * alignment (lowest set bit).
*/
- size = max(size, SZ_4K);
+ align_limit = min(cpu_addr ? (1ULL << __ffs(cpu_addr)) : ~0ULL,
+ pci_addr ? (1ULL << __ffs(pci_addr)) : ~0ULL);
- /*
- * According the RZ/G3S HW manual (Rev.1.10, sections:
- * - 34.3.1.69 AXI Window Base (Lower) Registers
- * - 34.3.1.71 AXI Window Mask (Lower) Registers
- * - 34.3.1.73 AXI Destination (Lower) Registers)
- * the CPU addr, PCIe addr, size should be 4K aligned and be a
- * power of 2.
- */
- size = ALIGN(size, SZ_4K);
- size = roundup_pow_of_two(size);
-
- cpu_addr = ALIGN(cpu_addr, SZ_4K);
- pci_addr = ALIGN(pci_addr, SZ_4K);
+ size = min(size, align_limit);
/*
- * According to the RZ/G3S HW manual (Rev.1.10, section
- * 34.3.1.71 AXI Window Mask (Lower) Registers) HW expects first
- * 12 LSB bits to be 0xfff. Subtract 1 from size for this.
+ * Minimum window size is 4KB.
+ * See RZ/G3S HW manual (Rev.1.10, section 34.3.1.71) and
+ * RZ/G3E HW manual (Rev.1.15, section 6.6.4.1.3.(74)).
*/
+ size = max(size, SZ_4K);
+
rzg3s_pcie_set_inbound_window(host, cpu_addr, pci_addr,
size - 1, id);
pci_addr += size;
cpu_addr += size;
- size_id = size;
id++;
}
*index = id;
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 04/15] clk: renesas: r9a09g047: Add PCIe clocks and reset
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (2 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 03/15] PCI: rzg3s-host: Rework inbound window algorithm for multi-SoC support John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-11 12:42 ` Claudiu Beznea
2026-03-06 14:34 ` [PATCH v8 05/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Fix naming properties John Madieu
` (13 subsequent siblings)
17 siblings, 1 reply; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Add necessary clocks and reset entries for the PCIe controller
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7:
- Reused standard clock/reset definition macros
v6: No changes
v5: No changes
v4: No changes
v3:
- Collected Rb tag
- Preserved sort order (by _onindex, _onbit);
v2:
- Fixed clock names
- Used assert-variant for reset
drivers/clk/renesas/r9a09g047-cpg.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/clk/renesas/r9a09g047-cpg.c b/drivers/clk/renesas/r9a09g047-cpg.c
index 1e9896742a06..6f5c4b0a6256 100644
--- a/drivers/clk/renesas/r9a09g047-cpg.c
+++ b/drivers/clk/renesas/r9a09g047-cpg.c
@@ -424,6 +424,10 @@ static const struct rzv2h_mod_clk r9a09g047_mod_clks[] __initconst = {
BUS_MSTOP(8, BIT(6))),
DEF_MOD("gbeth_1_aclk_i", CLK_PLLDTY_DIV8, 12, 3, 6, 3,
BUS_MSTOP(8, BIT(6))),
+ DEF_MOD("pcie_0_aclk", CLK_PLLDTY_ACPU_DIV2, 12, 4, 6, 4,
+ BUS_MSTOP(1, BIT(15))),
+ DEF_MOD("pcie_0_clk_pmu", CLK_PLLDTY_ACPU_DIV2, 12, 5, 6, 5,
+ BUS_MSTOP(1, BIT(15))),
DEF_MOD("cru_0_aclk", CLK_PLLDTY_ACPU_DIV2, 13, 2, 6, 18,
BUS_MSTOP(9, BIT(4))),
DEF_MOD_NO_PM("cru_0_vclk", CLK_PLLVDO_CRU0, 13, 3, 6, 19,
@@ -503,6 +507,7 @@ static const struct rzv2h_reset r9a09g047_resets[] __initconst = {
DEF_RST(10, 15, 5, 0), /* USB2_0_PRESETN */
DEF_RST(11, 0, 5, 1), /* GBETH_0_ARESETN_I */
DEF_RST(11, 1, 5, 2), /* GBETH_1_ARESETN_I */
+ DEF_RST(11, 2, 5, 3), /* PCIE_0_ARESETN */
DEF_RST(12, 5, 5, 22), /* CRU_0_PRESETN */
DEF_RST(12, 6, 5, 23), /* CRU_0_ARESETN */
DEF_RST(12, 7, 5, 24), /* CRU_0_S_RESETN */
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v8 04/15] clk: renesas: r9a09g047: Add PCIe clocks and reset
2026-03-06 14:34 ` [PATCH v8 04/15] clk: renesas: r9a09g047: Add PCIe clocks and reset John Madieu
@ 2026-03-11 12:42 ` Claudiu Beznea
0 siblings, 0 replies; 27+ messages in thread
From: Claudiu Beznea @ 2026-03-11 12:42 UTC (permalink / raw)
To: John Madieu, claudiu.beznea.uj, lpieralisi, kwilczynski, mani,
geert+renesas, krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu
On 3/6/26 16:34, John Madieu wrote:
> Add necessary clocks and reset entries for the PCIe controller
>
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v8 05/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Fix naming properties
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (3 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 04/15] clk: renesas: r9a09g047: Add PCIe clocks and reset John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 06/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Document RZ/G3E SoC John Madieu
` (12 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu, Conor Dooley
Fix a typo in interrupt-names: "ser_cor" should be "serr_cor" (System
Error Correctable).
Also convert interrupt-names, clock-names, and reset-names properties
from "description" to "const" to enable proper validation with
dtbs_check.
Fixes: e7534e790557 ("dt-bindings: PCI: Add Renesas RZ/G3S PCIe controller binding")
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: Fixed checkpatch commit message line length warnings
v6: No changes
v5: No changes
v4: Collected Acked-by tag from Conor
v3: New patch
.../bindings/pci/renesas,r9a08g045-pcie.yaml | 50 +++++++++----------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml b/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
index d668782546a2..d1eb92995e2c 100644
--- a/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
+++ b/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
@@ -41,22 +41,22 @@ properties:
interrupt-names:
items:
- - description: serr
- - description: ser_cor
- - description: serr_nonfatal
- - description: serr_fatal
- - description: axi_err
- - description: inta
- - description: intb
- - description: intc
- - description: intd
- - description: msi
- - description: link_bandwidth
- - description: pm_pme
- - description: dma
- - description: pcie_evt
- - description: msg
- - description: all
+ - const: serr
+ - const: serr_cor
+ - const: serr_nonfatal
+ - const: serr_fatal
+ - const: axi_err
+ - const: inta
+ - const: intb
+ - const: intc
+ - const: intd
+ - const: msi
+ - const: link_bandwidth
+ - const: pm_pme
+ - const: dma
+ - const: pcie_evt
+ - const: msg
+ - const: all
interrupt-controller: true
@@ -67,8 +67,8 @@ properties:
clock-names:
items:
- - description: aclk
- - description: pm
+ - const: aclk
+ - const: pm
resets:
items:
@@ -82,13 +82,13 @@ properties:
reset-names:
items:
- - description: aresetn
- - description: rst_b
- - description: rst_gp_b
- - description: rst_ps_b
- - description: rst_rsm_b
- - description: rst_cfg_b
- - description: rst_load_b
+ - const: aresetn
+ - const: rst_b
+ - const: rst_gp_b
+ - const: rst_ps_b
+ - const: rst_rsm_b
+ - const: rst_cfg_b
+ - const: rst_load_b
power-domains:
maxItems: 1
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 06/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Document RZ/G3E SoC
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (4 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 05/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Fix naming properties John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 07/15] PCI: rzg3s-host: Make SYSC register offsets SoC-specific John Madieu
` (11 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Extend the existing device tree bindings for Renesas RZ/G3S PCIe
controller to include support for the RZ/G3E (renesas,r9a09g047e57-pcie)
PCIe controller. The RZ/G3E PCIe controller is similar to RZ/G3S but has
some key differences:
- Uses a different device ID
- Supports PCIe Gen3 (8.0 GT/s) link speeds
- Uses a different clock naming (clkpmu vs clkl1pm)
- Has a different set of interrupts, interrupt ordering, and reset
signals
Add device tree bindings for renesas,r9a09g047e57-pcie compatible IPs.
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: Addressed "75 chars limit" chackpatch warning in commit description
v7: No changes
v6: Collected Rb tag from Claudiu
v5: Collected Rb tag from Rob
v4: Fixed clock name constraint using enum
v3:
- Moved interrupt/clock description in distinct PATCH
- Fixed clock name constraints
- Updated clock descriptions
v2: Reuse G3S names
.../bindings/pci/renesas,r9a08g045-pcie.yaml | 73 +++++++++++++++++--
1 file changed, 67 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml b/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
index d1eb92995e2c..a67108c48feb 100644
--- a/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
+++ b/Documentation/devicetree/bindings/pci/renesas,r9a08g045-pcie.yaml
@@ -10,17 +10,21 @@ maintainers:
- Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
description:
- Renesas RZ/G3S PCIe host controller complies with PCIe Base Specification
- 4.0 and supports up to 5 GT/s (Gen2).
+ Renesas RZ/G3{E,S} PCIe host controllers comply with PCIe
+ Base Specification 4.0 and support up to 5 GT/s (Gen2) for RZ/G3S and
+ up to 8 GT/s (Gen3) for RZ/G3E.
properties:
compatible:
- const: renesas,r9a08g045-pcie # RZ/G3S
+ enum:
+ - renesas,r9a08g045-pcie # RZ/G3S
+ - renesas,r9a09g047-pcie # RZ/G3E
reg:
maxItems: 1
interrupts:
+ minItems: 16
items:
- description: System error interrupt
- description: System error on correctable error interrupt
@@ -38,8 +42,16 @@ properties:
- description: PCIe event interrupt
- description: Message interrupt
- description: All interrupts
+ - description: Link equalization request interrupt
+ - description: Turn off event interrupt
+ - description: PMU power off interrupt
+ - description: D3 event function 0 interrupt
+ - description: D3 event function 1 interrupt
+ - description: Configuration PMCSR write clear function 0 interrupt
+ - description: Configuration PMCSR write clear function 1 interrupt
interrupt-names:
+ minItems: 16
items:
- const: serr
- const: serr_cor
@@ -57,20 +69,28 @@ properties:
- const: pcie_evt
- const: msg
- const: all
+ - const: link_equalization_request
+ - const: turn_off_event
+ - const: pmu_poweroff
+ - const: d3_event_f0
+ - const: d3_event_f1
+ - const: cfg_pmcsr_writeclear_f0
+ - const: cfg_pmcsr_writeclear_f1
interrupt-controller: true
clocks:
items:
- description: System clock
- - description: PM control clock
+ - description: PM control clock or clock for L1 substate handling
clock-names:
items:
- const: aclk
- - const: pm
+ - enum: [pm, pmu]
resets:
+ minItems: 1
items:
- description: AXI2PCIe Bridge reset
- description: Data link layer/transaction layer reset
@@ -81,6 +101,7 @@ properties:
- description: Configuration register reset
reset-names:
+ minItems: 1
items:
- const: aresetn
- const: rst_b
@@ -128,7 +149,9 @@ patternProperties:
const: 0x1912
device-id:
- const: 0x0033
+ enum:
+ - 0x0033
+ - 0x0039
clocks:
items:
@@ -167,6 +190,44 @@ required:
allOf:
- $ref: /schemas/pci/pci-host-bridge.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a08g045-pcie
+ then:
+ properties:
+ interrupts:
+ maxItems: 16
+ interrupt-names:
+ maxItems: 16
+ clock-names:
+ items:
+ - const: aclk
+ - const: pm
+ resets:
+ minItems: 7
+ reset-names:
+ minItems: 7
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-pcie
+ then:
+ properties:
+ interrupts:
+ minItems: 23
+ interrupt-names:
+ minItems: 23
+ clock-names:
+ items:
+ - const: aclk
+ - const: pmu
+ resets:
+ maxItems: 1
+ reset-names:
+ maxItems: 1
unevaluatedProperties: false
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 07/15] PCI: rzg3s-host: Make SYSC register offsets SoC-specific
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (5 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 06/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Document RZ/G3E SoC John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 08/15] PCI: rzg3s-host: Make configuration reset lines optional John Madieu
` (10 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
In preparation for adding RZ/G3E support, move the RST_RSM_B register
offset and mask into a SoC-specific data structure. Compared with RZ/G3S,
the RZ/G3E SYSC controls different functionalities for the PCIe controller.
Make SYSC operations conditional on the presence of register offset
information, allowing the driver to handle SoCs that don't use the
RST_RSM_B signal.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7:
- Cleaned up documentation comments and formatting as per
Claudiu's suggestions
- Dropped kerneldoc from rzg3s_sysc_config_func()
- Moved rzg3s_sysc_config_func() before rzg3s_pcie_update_bits()
to keep rzg3s_pcie_host_parse_port() and
rzg3s_pcie_host_init_port() close together
v6:
- Introduce enum rzg3s_sysc_func_id and rzg3s_sysc_config_func() as
suggested by Claudiu. This replaces direct regmap calls and drops
the -1 skip pattern.
- Removed Rb tag from Claudiu
v5: No changes
v4: No changes
v3: No changes
v2: Collected tag.
drivers/pci/controller/pcie-rzg3s-host.c | 111 +++++++++++++++++------
1 file changed, 85 insertions(+), 26 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index 7f5ffc5c218a..b8a3abf7b6cc 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -159,10 +159,6 @@
#define RZG3S_PCI_CFG_PCIEC 0x60
-/* System controller registers */
-#define RZG3S_SYS_PCIE_RST_RSM_B 0xd74
-#define RZG3S_SYS_PCIE_RST_RSM_B_MASK BIT(0)
-
/* Maximum number of windows */
#define RZG3S_MAX_WINDOWS 8
@@ -174,6 +170,44 @@
/* Timeouts experimentally determined */
#define RZG3S_REQ_ISSUE_TIMEOUT_US 2500
+/**
+ * struct rzg3s_sysc_function - System Controller function descriptor
+ * @offset: Register offset from the System Controller base address
+ * @mask: Bit mask for the function within the register
+ */
+struct rzg3s_sysc_function {
+ u32 offset;
+ u32 mask;
+};
+
+/**
+ * enum rzg3s_sysc_func_id - System controller function IDs
+ * @RZG3S_SYSC_FUNC_ID_RST_RSM_B: RST_RSM_B SYSC function ID
+ * @RZG3S_SYSC_FUNC_ID_MAX: Max SYSC function ID
+ */
+enum rzg3s_sysc_func_id {
+ RZG3S_SYSC_FUNC_ID_RST_RSM_B,
+ RZG3S_SYSC_FUNC_ID_MAX,
+};
+
+/**
+ * struct rzg3s_sysc_info - RZ/G3S System Controller info
+ * @functions: SYSC function descriptors array
+ */
+struct rzg3s_sysc_info {
+ const struct rzg3s_sysc_function functions[RZG3S_SYSC_FUNC_ID_MAX];
+};
+
+/**
+ * struct rzg3s_sysc - RZ/G3S System Controller descriptor
+ * @regmap: System controller regmap
+ * @info: System controller info
+ */
+struct rzg3s_sysc {
+ struct regmap *regmap;
+ const struct rzg3s_sysc_info *info;
+};
+
/**
* struct rzg3s_pcie_msi - RZ/G3S PCIe MSI data structure
* @domain: IRQ domain
@@ -203,6 +237,7 @@ struct rzg3s_pcie_host;
* power-on
* @cfg_resets: array with the resets that need to be de-asserted after
* configuration
+ * @sysc_info: SYSC info
* @num_power_resets: number of power resets
* @num_cfg_resets: number of configuration resets
*/
@@ -210,6 +245,7 @@ struct rzg3s_pcie_soc_data {
int (*init_phy)(struct rzg3s_pcie_host *host);
const char * const *power_resets;
const char * const *cfg_resets;
+ struct rzg3s_sysc_info sysc_info;
u8 num_power_resets;
u8 num_cfg_resets;
};
@@ -233,7 +269,7 @@ struct rzg3s_pcie_port {
* @dev: struct device
* @power_resets: reset control signals that should be set after power up
* @cfg_resets: reset control signals that should be set after configuration
- * @sysc: SYSC regmap
+ * @sysc: SYSC descriptor
* @intx_domain: INTx IRQ domain
* @data: SoC specific data
* @msi: MSI data structure
@@ -248,7 +284,7 @@ struct rzg3s_pcie_host {
struct device *dev;
struct reset_control_bulk_data *power_resets;
struct reset_control_bulk_data *cfg_resets;
- struct regmap *sysc;
+ struct rzg3s_sysc *sysc;
struct irq_domain *intx_domain;
const struct rzg3s_pcie_soc_data *data;
struct rzg3s_pcie_msi msi;
@@ -260,6 +296,23 @@ struct rzg3s_pcie_host {
#define rzg3s_msi_to_host(_msi) container_of(_msi, struct rzg3s_pcie_host, msi)
+static int rzg3s_sysc_config_func(struct rzg3s_sysc *sysc,
+ enum rzg3s_sysc_func_id fid, u32 val)
+{
+ const struct rzg3s_sysc_info *info = sysc->info;
+ const struct rzg3s_sysc_function *functions = info->functions;
+
+ if (fid >= RZG3S_SYSC_FUNC_ID_MAX)
+ return -EINVAL;
+
+ if (!functions[fid].mask)
+ return 0;
+
+ return regmap_update_bits(sysc->regmap, functions[fid].offset,
+ functions[fid].mask,
+ field_prep(functions[fid].mask, val));
+}
+
static void rzg3s_pcie_update_bits(void __iomem *base, u32 offset, u32 mask,
u32 val)
{
@@ -1521,6 +1574,7 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
struct device_node *sysc_np __free(device_node) =
of_parse_phandle(np, "renesas,sysc", 0);
struct rzg3s_pcie_host *host;
+ struct rzg3s_sysc *sysc;
int ret;
bridge = devm_pci_alloc_host_bridge(dev, sizeof(*host));
@@ -1532,6 +1586,13 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
host->data = device_get_match_data(dev);
platform_set_drvdata(pdev, host);
+ host->sysc = devm_kzalloc(dev, sizeof(*host->sysc), GFP_KERNEL);
+ if (!host->sysc)
+ return -ENOMEM;
+
+ sysc = host->sysc;
+ sysc->info = &host->data->sysc_info;
+
host->axi = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(host->axi))
return PTR_ERR(host->axi);
@@ -1545,15 +1606,13 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
if (ret)
return ret;
- host->sysc = syscon_node_to_regmap(sysc_np);
- if (IS_ERR(host->sysc)) {
- ret = PTR_ERR(host->sysc);
+ sysc->regmap = syscon_node_to_regmap(sysc_np);
+ if (IS_ERR(sysc->regmap)) {
+ ret = PTR_ERR(sysc->regmap);
goto port_refclk_put;
}
- ret = regmap_update_bits(host->sysc, RZG3S_SYS_PCIE_RST_RSM_B,
- RZG3S_SYS_PCIE_RST_RSM_B_MASK,
- FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 1));
+ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 1);
if (ret)
goto port_refclk_put;
@@ -1605,9 +1664,7 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
* SYSC RST_RSM_B signal need to be asserted before turning off the
* power to the PHY.
*/
- regmap_update_bits(host->sysc, RZG3S_SYS_PCIE_RST_RSM_B,
- RZG3S_SYS_PCIE_RST_RSM_B_MASK,
- FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 0));
+ rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0);
port_refclk_put:
clk_put(host->port.refclk);
@@ -1619,7 +1676,7 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev)
struct rzg3s_pcie_host *host = dev_get_drvdata(dev);
const struct rzg3s_pcie_soc_data *data = host->data;
struct rzg3s_pcie_port *port = &host->port;
- struct regmap *sysc = host->sysc;
+ struct rzg3s_sysc *sysc = host->sysc;
int ret;
ret = pm_runtime_put_sync(dev);
@@ -1638,9 +1695,7 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev)
if (ret)
goto cfg_resets_restore;
- ret = regmap_update_bits(sysc, RZG3S_SYS_PCIE_RST_RSM_B,
- RZG3S_SYS_PCIE_RST_RSM_B_MASK,
- FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 0));
+ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0);
if (ret)
goto power_resets_restore;
@@ -1663,12 +1718,10 @@ static int rzg3s_pcie_resume_noirq(struct device *dev)
{
struct rzg3s_pcie_host *host = dev_get_drvdata(dev);
const struct rzg3s_pcie_soc_data *data = host->data;
- struct regmap *sysc = host->sysc;
+ struct rzg3s_sysc *sysc = host->sysc;
int ret;
- ret = regmap_update_bits(sysc, RZG3S_SYS_PCIE_RST_RSM_B,
- RZG3S_SYS_PCIE_RST_RSM_B_MASK,
- FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 1));
+ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 1);
if (ret)
return ret;
@@ -1697,9 +1750,7 @@ static int rzg3s_pcie_resume_noirq(struct device *dev)
reset_control_bulk_assert(data->num_power_resets,
host->power_resets);
assert_rst_rsm_b:
- regmap_update_bits(sysc, RZG3S_SYS_PCIE_RST_RSM_B,
- RZG3S_SYS_PCIE_RST_RSM_B_MASK,
- FIELD_PREP(RZG3S_SYS_PCIE_RST_RSM_B_MASK, 0));
+ rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0);
return ret;
}
@@ -1722,6 +1773,14 @@ static const struct rzg3s_pcie_soc_data rzg3s_soc_data = {
.cfg_resets = rzg3s_soc_cfg_resets,
.num_cfg_resets = ARRAY_SIZE(rzg3s_soc_cfg_resets),
.init_phy = rzg3s_soc_pcie_init_phy,
+ .sysc_info = {
+ .functions = {
+ [RZG3S_SYSC_FUNC_ID_RST_RSM_B] = {
+ .offset = 0xd74,
+ .mask = BIT(0),
+ },
+ },
+ },
};
static const struct of_device_id rzg3s_pcie_of_match[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 08/15] PCI: rzg3s-host: Make configuration reset lines optional
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (6 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 07/15] PCI: rzg3s-host: Make SYSC register offsets SoC-specific John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 09/15] PCI: rzg3s-host: Add SoC-specific configuration and initialization callbacks John Madieu
` (9 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Some SoC variants such as RZ/G3E handle configuration reset
control through PCIe AXI registers instead of dedicated reset
lines. Make cfg_resets optional by using
devm_reset_control_bulk_get_optional_exclusive() to allow
SoCs to use alternative or complementary reset control mechanisms.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: Fixed checkpatch commit message line length warnings
v6: No changes
v5: No changes
v4: No changes
v3: No changes
v2: Collected Rb tag.
drivers/pci/controller/pcie-rzg3s-host.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index b8a3abf7b6cc..c741d5ac2594 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1188,9 +1188,9 @@ static int rzg3s_pcie_resets_prepare_and_get(struct rzg3s_pcie_host *host)
if (ret)
return ret;
- return devm_reset_control_bulk_get_exclusive(host->dev,
- data->num_cfg_resets,
- host->cfg_resets);
+ return devm_reset_control_bulk_get_optional_exclusive(host->dev,
+ data->num_cfg_resets,
+ host->cfg_resets);
}
static int rzg3s_pcie_host_parse_port(struct rzg3s_pcie_host *host)
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 09/15] PCI: rzg3s-host: Add SoC-specific configuration and initialization callbacks
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (7 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 08/15] PCI: rzg3s-host: Make configuration reset lines optional John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 10/15] PCI: rzg3s-host: Explicitly set class code for RZ/G3E compatibility John Madieu
` (8 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Add optional cfg_pre_init, cfg_post_init, and cfg_deinit callbacks
to handle SoC-specific configuration methods. While RZ/G3S uses the Linux
reset framework with dedicated reset lines, other SoC variants like RZ/G3E
control configuration resets through PCIe AXI registers.
As Linux reset bulk API gracefully handles optional NULL reset lines
(num_cfg_resets = 0 for RZ/G3E), the driver continues to use the standard
reset framework when reset lines are available, while custom callbacks
are only invoked when provided.
This provides a balanced pattern where:
- RZ/G3S: Uses callbacks that fall back to the reset framework
- RZ/G3E: Sets num_cfg_resets=0, provides
cfg_pre_init/cfg_post_init/cfg_deinit
Add cfg_pre_init, cfg_post_init, and cfg_deinit callbacks to support
custom configuration mechanism in preparation to RZ/G3E PCIe support.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: Updated commit description
v7:
- Fixed commit message: clarified that RZ/G3S callbacks fall
back to the reset framework
- Fixed checkpatch 75-char line length warning in commit
description
v6:
- Fix config_reinit error path in suspend_noirq: call config_pre_init
before config_post_init as spotted by Claudiu.
v5:
- Reorder got labels as per Claudiu's requirements
v4: No changes
v3: No changes
v2:
- Renamed callbacks as per Claudiu's comments
- Reworded goto labels to be consistents with callbacks
drivers/pci/controller/pcie-rzg3s-host.c | 61 +++++++++++++++++-------
1 file changed, 44 insertions(+), 17 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index c741d5ac2594..f8f03b669153 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -233,6 +233,9 @@ struct rzg3s_pcie_host;
/**
* struct rzg3s_pcie_soc_data - SoC specific data
* @init_phy: PHY initialization function
+ * @config_pre_init: Optional callback for SoC-specific pre-configuration
+ * @config_post_init: Callback for SoC-specific post-configuration
+ * @config_deinit: Callback for SoC-specific de-initialization
* @power_resets: array with the resets that need to be de-asserted after
* power-on
* @cfg_resets: array with the resets that need to be de-asserted after
@@ -243,6 +246,9 @@ struct rzg3s_pcie_host;
*/
struct rzg3s_pcie_soc_data {
int (*init_phy)(struct rzg3s_pcie_host *host);
+ void (*config_pre_init)(struct rzg3s_pcie_host *host);
+ int (*config_post_init)(struct rzg3s_pcie_host *host);
+ int (*config_deinit)(struct rzg3s_pcie_host *host);
const char * const *power_resets;
const char * const *cfg_resets;
struct rzg3s_sysc_info sysc_info;
@@ -1109,6 +1115,18 @@ static int rzg3s_pcie_config_init(struct rzg3s_pcie_host *host)
return 0;
}
+static int rzg3s_pcie_config_post_init(struct rzg3s_pcie_host *host)
+{
+ return reset_control_bulk_deassert(host->data->num_cfg_resets,
+ host->cfg_resets);
+}
+
+static int rzg3s_pcie_config_deinit(struct rzg3s_pcie_host *host)
+{
+ return reset_control_bulk_assert(host->data->num_cfg_resets,
+ host->cfg_resets);
+}
+
static void rzg3s_pcie_irq_init(struct rzg3s_pcie_host *host)
{
/*
@@ -1256,22 +1274,26 @@ static int rzg3s_pcie_host_init(struct rzg3s_pcie_host *host)
u32 val;
int ret;
+ /* SoC-specific pre-configuration */
+ if (host->data->config_pre_init)
+ host->data->config_pre_init(host);
+
/* Initialize the PCIe related registers */
ret = rzg3s_pcie_config_init(host);
if (ret)
- return ret;
+ goto config_deinit;
ret = rzg3s_pcie_host_init_port(host);
if (ret)
- return ret;
+ goto config_deinit;
/* Initialize the interrupts */
rzg3s_pcie_irq_init(host);
- ret = reset_control_bulk_deassert(host->data->num_cfg_resets,
- host->cfg_resets);
+ /* SoC-specific post-configuration */
+ ret = host->data->config_post_init(host);
if (ret)
- goto disable_port_refclk;
+ goto config_deinit_and_refclk;
/* Wait for link up */
ret = readl_poll_timeout(host->axi + RZG3S_PCI_PCSTAT1, val,
@@ -1280,18 +1302,20 @@ static int rzg3s_pcie_host_init(struct rzg3s_pcie_host *host)
PCIE_LINK_WAIT_SLEEP_MS * MILLI *
PCIE_LINK_WAIT_MAX_RETRIES);
if (ret)
- goto cfg_resets_deassert;
+ goto config_deinit_post;
val = readl_relaxed(host->axi + RZG3S_PCI_PCSTAT2);
dev_info(host->dev, "PCIe link status [0x%x]\n", val);
return 0;
-cfg_resets_deassert:
- reset_control_bulk_assert(host->data->num_cfg_resets,
- host->cfg_resets);
-disable_port_refclk:
+config_deinit_post:
+ host->data->config_deinit(host);
+config_deinit_and_refclk:
clk_disable_unprepare(host->port.refclk);
+config_deinit:
+ if (host->data->config_pre_init)
+ host->data->config_deinit(host);
return ret;
}
@@ -1652,7 +1676,7 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
host_probe_teardown:
rzg3s_pcie_teardown_irqdomain(host);
- reset_control_bulk_assert(host->data->num_cfg_resets, host->cfg_resets);
+ host->data->config_deinit(host);
rpm_put:
pm_runtime_put_sync(dev);
rpm_disable:
@@ -1685,15 +1709,15 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev)
clk_disable_unprepare(port->refclk);
- ret = reset_control_bulk_assert(data->num_cfg_resets,
- host->cfg_resets);
+ /* SoC-specific de-initialization */
+ ret = data->config_deinit(host);
if (ret)
goto refclk_restore;
ret = reset_control_bulk_assert(data->num_power_resets,
host->power_resets);
if (ret)
- goto cfg_resets_restore;
+ goto config_reinit;
ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 0);
if (ret)
@@ -1705,9 +1729,10 @@ static int rzg3s_pcie_suspend_noirq(struct device *dev)
power_resets_restore:
reset_control_bulk_deassert(data->num_power_resets,
host->power_resets);
-cfg_resets_restore:
- reset_control_bulk_deassert(data->num_cfg_resets,
- host->cfg_resets);
+config_reinit:
+ if (data->config_pre_init)
+ data->config_pre_init(host);
+ data->config_post_init(host);
refclk_restore:
clk_prepare_enable(port->refclk);
pm_runtime_resume_and_get(dev);
@@ -1772,6 +1797,8 @@ static const struct rzg3s_pcie_soc_data rzg3s_soc_data = {
.num_power_resets = ARRAY_SIZE(rzg3s_soc_power_resets),
.cfg_resets = rzg3s_soc_cfg_resets,
.num_cfg_resets = ARRAY_SIZE(rzg3s_soc_cfg_resets),
+ .config_post_init = rzg3s_pcie_config_post_init,
+ .config_deinit = rzg3s_pcie_config_deinit,
.init_phy = rzg3s_soc_pcie_init_phy,
.sysc_info = {
.functions = {
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 10/15] PCI: rzg3s-host: Explicitly set class code for RZ/G3E compatibility
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (8 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 09/15] PCI: rzg3s-host: Add SoC-specific configuration and initialization callbacks John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 11/15] PCI: rzg3s-host: Add PCIe Gen3 (8.0 GT/s) link speed support John Madieu
` (7 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Program the class code register explicitly during PCIe configuration
initialization. RZ/G3E requires this register to be set, while RZ/G3S
has these values as hardware defaults.
This configuration is harmless for RZ/G3S where these match the hardware
defaults, and necessary for RZ/G3E to properly identify the device as a
PCI bridge.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: No changes
v6: Collected Rb tag from Claudiu
v5:
- Used field_prep for non-constant mask to fix test robot warnings
v4: No changes
v3: No changes
v2: No changes
drivers/pci/controller/pcie-rzg3s-host.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index f8f03b669153..bf9dc76fe975 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1081,6 +1081,7 @@ static int rzg3s_pcie_set_max_link_speed(struct rzg3s_pcie_host *host)
static int rzg3s_pcie_config_init(struct rzg3s_pcie_host *host)
{
struct pci_host_bridge *bridge = pci_host_bridge_from_priv(host);
+ u32 mask = GENMASK(31, 8);
struct resource_entry *ft;
struct resource *bus;
u8 subordinate_bus;
@@ -1104,6 +1105,13 @@ static int rzg3s_pcie_config_init(struct rzg3s_pcie_host *host)
writel_relaxed(0xffffffff, host->pcie + RZG3S_PCI_CFG_BARMSK00L);
writel_relaxed(0xffffffff, host->pcie + RZG3S_PCI_CFG_BARMSK00U);
+ /*
+ * Explicitly program class code. RZ/G3E requires this configuration.
+ * Harmless for RZ/G3S where this matches the hardware default.
+ */
+ rzg3s_pcie_update_bits(host->pcie, PCI_CLASS_REVISION, mask,
+ field_prep(mask, PCI_CLASS_BRIDGE_PCI_NORMAL));
+
/* Disable access control to the CFGU */
writel_relaxed(0, host->axi + RZG3S_PCI_PERM);
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 11/15] PCI: rzg3s-host: Add PCIe Gen3 (8.0 GT/s) link speed support
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (9 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 10/15] PCI: rzg3s-host: Explicitly set class code for RZ/G3E compatibility John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller John Madieu
` (6 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Extend the link speed configuration to support Gen3 (8.0 GT/s) in
addition to Gen2 (5.0 GT/s). This is required for RZ/G3E PCIe host
support, which is Gen3 capable.
Instead of relying on DT max-link-speed for configuration, read the
hardware capabilities from the PCI_EXP_LNKCAP register to determine the
maximum supported speed. The DT max-link-speed property is now only used
as an optional limit when explicitly specified, which aligns with PCIe
subsystem expectations.
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: Typo fix in commit description
v7:Fixed checkpatch 75-char line length warning in commit
description
v6: No changes
v5: No changes
v4: No changes
v3: No changes
v2: Collected tag.
drivers/pci/controller/pcie-rzg3s-host.c | 26 ++++++++++++++++++------
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index bf9dc76fe975..44ce056d62c6 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -1004,8 +1004,9 @@ static int rzg3s_pcie_set_max_link_speed(struct rzg3s_pcie_host *host)
{
u32 remote_supported_link_speeds, max_supported_link_speeds;
u32 cs2, tmp, pcie_cap = RZG3S_PCI_CFG_PCIEC;
- u32 cur_link_speed, link_speed;
+ u32 cur_link_speed, link_speed, hw_max_speed;
u8 ltssm_state_l0 = 0xc;
+ u32 lnkcap;
int ret;
u16 ls;
@@ -1025,7 +1026,22 @@ static int rzg3s_pcie_set_max_link_speed(struct rzg3s_pcie_host *host)
ls = readw_relaxed(host->pcie + pcie_cap + PCI_EXP_LNKSTA);
cs2 = readl_relaxed(host->axi + RZG3S_PCI_PCSTAT2);
- switch (pcie_link_speed[host->max_link_speed]) {
+ /* Read hardware supported link speed from Link Capabilities Register */
+ lnkcap = readl_relaxed(host->pcie + pcie_cap + PCI_EXP_LNKCAP);
+ hw_max_speed = FIELD_GET(PCI_EXP_LNKCAP_SLS, lnkcap);
+
+ /*
+ * Use DT max-link-speed only as a limit. If specified and lower
+ * than hardware capability, cap to that value.
+ */
+ if (host->max_link_speed > 0 && host->max_link_speed < hw_max_speed)
+ hw_max_speed = host->max_link_speed;
+
+ switch (pcie_link_speed[hw_max_speed]) {
+ case PCIE_SPEED_8_0GT:
+ max_supported_link_speeds = GENMASK(PCI_EXP_LNKSTA_CLS_8_0GB - 1, 0);
+ link_speed = PCI_EXP_LNKCTL2_TLS_8_0GT;
+ break;
case PCIE_SPEED_5_0GT:
max_supported_link_speeds = GENMASK(PCI_EXP_LNKSTA_CLS_5_0GB - 1, 0);
link_speed = PCI_EXP_LNKCTL2_TLS_5_0GT;
@@ -1041,10 +1057,10 @@ static int rzg3s_pcie_set_max_link_speed(struct rzg3s_pcie_host *host)
remote_supported_link_speeds &= max_supported_link_speeds;
/*
- * Return if max link speed is already set or the connected device
+ * Return if target link speed is already set or the connected device
* doesn't support it.
*/
- if (cur_link_speed == host->max_link_speed ||
+ if (cur_link_speed == hw_max_speed ||
remote_supported_link_speeds != max_supported_link_speeds)
return 0;
@@ -1631,8 +1647,6 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
host->pcie = host->axi + RZG3S_PCI_CFG_BASE;
host->max_link_speed = of_pci_get_max_link_speed(np);
- if (host->max_link_speed < 0)
- host->max_link_speed = 2;
ret = rzg3s_pcie_host_parse_port(host);
if (ret)
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (10 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 11/15] PCI: rzg3s-host: Add PCIe Gen3 (8.0 GT/s) link speed support John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-15 15:53 ` Manivannan Sadhasivam
2026-03-06 14:34 ` [PATCH v8 13/15] arm64: dts: renesas: r9a09g047: Add PCIe node John Madieu
` (5 subsequent siblings)
17 siblings, 1 reply; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
Add support for the PCIe controller found in RZ/G3E SoCs to the existing
RZ/G3S PCIe host driver. The RZ/G3E PCIe controller is similar to the
RZ/G3S's, with the following key differences:
- Supports PCIe Gen3 (8.0 GT/s) link speeds alongside Gen2 (5.0 GT/s)
- Uses a different reset control mechanism via AXI registers instead
of the Linux reset framework
- Requires specific SYSC configuration for link state control and
Root Complex mode selection
Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: Collected Claudiu's Rb tag
v7:
- Renamed RZG3E_PCI_RESET* defines to RZG3S_PCI_RESET* as these
registers are shared with upcoming SoCs (RZ/V2H, RZ/T2N, RZ/N2H),
dropped associated "RZ/G3E specific registers" comment
- Dropped "RZ/G3E SoC-specific config implementations" comment
- Unified function naming to rzg3e_pcie_config_{pre_init,post_init,
deinit}() and rzg3s_pcie_config_{post_init,deinit}()
- Simplified comments as per Claudiu's suggestions
- Used local mask variables for compactness within 80-char limit
- Fixed L1_ALLOW error path: goto config_deinit_and_refclk since
port refclk is already enabled
- Fixed resume: reordered MODE before RST_RSM_B to match probe
sequence, fixing error path handling
v6:
- Use rzg3s_sysc_config_func() with per-function calls instead of
rzg3s_sysc_config() with -1 skip pattern, as suggested by Claudiu
- Extend enum rzg3s_sysc_func_id with L1_ALLOW and MODE entries
- Use regmap_update_bits() consistently for all SYSC accesses
- Shorten comment to "Put controller in RC mode and de-assert RST_RSM_B."
- Drop "Enable ASPM L1 transition" comment (function ID is self-documenting)
v5:
- Introduce rzg3s_sysc_config() helper for sys configuration
v4: No changes
v3: No changes
drivers/pci/controller/pcie-rzg3s-host.c | 90 ++++++++++++++++++++++++
1 file changed, 90 insertions(+)
diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
index 44ce056d62c6..b7f92f5aee4a 100644
--- a/drivers/pci/controller/pcie-rzg3s-host.c
+++ b/drivers/pci/controller/pcie-rzg3s-host.c
@@ -111,6 +111,15 @@
#define RZG3S_PCI_PERM_CFG_HWINIT_EN BIT(2)
#define RZG3S_PCI_PERM_PIPE_PHY_REG_EN BIT(1)
+#define RZG3S_PCI_RESET 0x310
+#define RZG3S_PCI_RESET_RST_OUT_B BIT(6)
+#define RZG3S_PCI_RESET_RST_PS_B BIT(5)
+#define RZG3S_PCI_RESET_RST_LOAD_B BIT(4)
+#define RZG3S_PCI_RESET_RST_CFG_B BIT(3)
+#define RZG3S_PCI_RESET_RST_RSM_B BIT(2)
+#define RZG3S_PCI_RESET_RST_GP_B BIT(1)
+#define RZG3S_PCI_RESET_RST_B BIT(0)
+
#define RZG3S_PCI_MSIRE(id) (0x600 + (id) * 0x10)
#define RZG3S_PCI_MSIRE_ENA BIT(0)
@@ -183,10 +192,14 @@ struct rzg3s_sysc_function {
/**
* enum rzg3s_sysc_func_id - System controller function IDs
* @RZG3S_SYSC_FUNC_ID_RST_RSM_B: RST_RSM_B SYSC function ID
+ * @RZG3S_SYSC_FUNC_ID_L1_ALLOW: L1 allow SYSC function ID
+ * @RZG3S_SYSC_FUNC_ID_MODE: Mode SYSC function ID
* @RZG3S_SYSC_FUNC_ID_MAX: Max SYSC function ID
*/
enum rzg3s_sysc_func_id {
RZG3S_SYSC_FUNC_ID_RST_RSM_B,
+ RZG3S_SYSC_FUNC_ID_L1_ALLOW,
+ RZG3S_SYSC_FUNC_ID_MODE,
RZG3S_SYSC_FUNC_ID_MAX,
};
@@ -1151,6 +1164,42 @@ static int rzg3s_pcie_config_deinit(struct rzg3s_pcie_host *host)
host->cfg_resets);
}
+static void rzg3e_pcie_config_pre_init(struct rzg3s_pcie_host *host)
+{
+ u32 mask = RZG3S_PCI_RESET_RST_LOAD_B | RZG3S_PCI_RESET_RST_CFG_B;
+
+ /* De-assert LOAD_B and CFG_B */
+ rzg3s_pcie_update_bits(host->axi, RZG3S_PCI_RESET, mask, mask);
+}
+
+static int rzg3e_pcie_config_deinit(struct rzg3s_pcie_host *host)
+{
+ writel_relaxed(0, host->axi + RZG3S_PCI_RESET);
+ return 0;
+}
+
+static int rzg3e_pcie_config_post_init(struct rzg3s_pcie_host *host)
+{
+ u32 mask = RZG3S_PCI_RESET_RST_PS_B | RZG3S_PCI_RESET_RST_GP_B |
+ RZG3S_PCI_RESET_RST_B;
+
+ /* De-assert PS_B, GP_B, RST_B */
+ rzg3s_pcie_update_bits(host->axi, RZG3S_PCI_RESET, mask, mask);
+
+ /*
+ * According to the RZ/G3E HW manual (Rev.1.15, Table 6.6-130
+ * Initialization Procedure (RC)), hardware requires >= 500us delay
+ * before final reset deassert.
+ */
+ fsleep(500);
+
+ /* De-assert OUT_B and RSM_B */
+ mask = RZG3S_PCI_RESET_RST_OUT_B | RZG3S_PCI_RESET_RST_RSM_B;
+ rzg3s_pcie_update_bits(host->axi, RZG3S_PCI_RESET, mask, mask);
+
+ return 0;
+}
+
static void rzg3s_pcie_irq_init(struct rzg3s_pcie_host *host)
{
/*
@@ -1311,6 +1360,12 @@ static int rzg3s_pcie_host_init(struct rzg3s_pcie_host *host)
if (ret)
goto config_deinit;
+ /* Enable ASPM L1 transition for SoCs that use it */
+ ret = rzg3s_sysc_config_func(host->sysc,
+ RZG3S_SYSC_FUNC_ID_L1_ALLOW, 1);
+ if (ret)
+ goto config_deinit_and_refclk;
+
/* Initialize the interrupts */
rzg3s_pcie_irq_init(host);
@@ -1658,6 +1713,11 @@ static int rzg3s_pcie_probe(struct platform_device *pdev)
goto port_refclk_put;
}
+ /* Put controller in RC mode */
+ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_MODE, 1);
+ if (ret)
+ goto port_refclk_put;
+
ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 1);
if (ret)
goto port_refclk_put;
@@ -1768,6 +1828,10 @@ static int rzg3s_pcie_resume_noirq(struct device *dev)
struct rzg3s_sysc *sysc = host->sysc;
int ret;
+ ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_MODE, 1);
+ if (ret)
+ return ret;
+
ret = rzg3s_sysc_config_func(sysc, RZG3S_SYSC_FUNC_ID_RST_RSM_B, 1);
if (ret)
return ret;
@@ -1832,11 +1896,37 @@ static const struct rzg3s_pcie_soc_data rzg3s_soc_data = {
},
};
+static const char * const rzg3e_soc_power_resets[] = { "aresetn" };
+
+static const struct rzg3s_pcie_soc_data rzg3e_soc_data = {
+ .power_resets = rzg3e_soc_power_resets,
+ .num_power_resets = ARRAY_SIZE(rzg3e_soc_power_resets),
+ .config_pre_init = rzg3e_pcie_config_pre_init,
+ .config_post_init = rzg3e_pcie_config_post_init,
+ .config_deinit = rzg3e_pcie_config_deinit,
+ .sysc_info = {
+ .functions = {
+ [RZG3S_SYSC_FUNC_ID_L1_ALLOW] = {
+ .offset = 0x1020,
+ .mask = BIT(0),
+ },
+ [RZG3S_SYSC_FUNC_ID_MODE] = {
+ .offset = 0x1024,
+ .mask = BIT(0),
+ },
+ },
+ },
+};
+
static const struct of_device_id rzg3s_pcie_of_match[] = {
{
.compatible = "renesas,r9a08g045-pcie",
.data = &rzg3s_soc_data,
},
+ {
+ .compatible = "renesas,r9a09g047-pcie",
+ .data = &rzg3e_soc_data,
+ },
{}
};
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v8 12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller
2026-03-06 14:34 ` [PATCH v8 12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller John Madieu
@ 2026-03-15 15:53 ` Manivannan Sadhasivam
0 siblings, 0 replies; 27+ messages in thread
From: Manivannan Sadhasivam @ 2026-03-15 15:53 UTC (permalink / raw)
To: John Madieu
Cc: claudiu.beznea.uj, lpieralisi, kwilczynski, geert+renesas,
krzk+dt, robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz,
linux-pci, linux-renesas-soc, devicetree, linux-clk, john.madieu
On Fri, Mar 06, 2026 at 03:34:19PM +0100, John Madieu wrote:
> Add support for the PCIe controller found in RZ/G3E SoCs to the existing
> RZ/G3S PCIe host driver. The RZ/G3E PCIe controller is similar to the
> RZ/G3S's, with the following key differences:
>
> - Supports PCIe Gen3 (8.0 GT/s) link speeds alongside Gen2 (5.0 GT/s)
> - Uses a different reset control mechanism via AXI registers instead
> of the Linux reset framework
> - Requires specific SYSC configuration for link state control and
> Root Complex mode selection
>
> Reviewed-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
> ---
>
> Changes:
>
> v8: Collected Claudiu's Rb tag
>
> v7:
> - Renamed RZG3E_PCI_RESET* defines to RZG3S_PCI_RESET* as these
> registers are shared with upcoming SoCs (RZ/V2H, RZ/T2N, RZ/N2H),
> dropped associated "RZ/G3E specific registers" comment
> - Dropped "RZ/G3E SoC-specific config implementations" comment
> - Unified function naming to rzg3e_pcie_config_{pre_init,post_init,
> deinit}() and rzg3s_pcie_config_{post_init,deinit}()
> - Simplified comments as per Claudiu's suggestions
> - Used local mask variables for compactness within 80-char limit
> - Fixed L1_ALLOW error path: goto config_deinit_and_refclk since
> port refclk is already enabled
> - Fixed resume: reordered MODE before RST_RSM_B to match probe
> sequence, fixing error path handling
>
> v6:
> - Use rzg3s_sysc_config_func() with per-function calls instead of
> rzg3s_sysc_config() with -1 skip pattern, as suggested by Claudiu
> - Extend enum rzg3s_sysc_func_id with L1_ALLOW and MODE entries
> - Use regmap_update_bits() consistently for all SYSC accesses
> - Shorten comment to "Put controller in RC mode and de-assert RST_RSM_B."
> - Drop "Enable ASPM L1 transition" comment (function ID is self-documenting)
>
> v5:
> - Introduce rzg3s_sysc_config() helper for sys configuration
>
> v4: No changes
> v3: No changes
>
> drivers/pci/controller/pcie-rzg3s-host.c | 90 ++++++++++++++++++++++++
> 1 file changed, 90 insertions(+)
>
> diff --git a/drivers/pci/controller/pcie-rzg3s-host.c b/drivers/pci/controller/pcie-rzg3s-host.c
> index 44ce056d62c6..b7f92f5aee4a 100644
> --- a/drivers/pci/controller/pcie-rzg3s-host.c
> +++ b/drivers/pci/controller/pcie-rzg3s-host.c
> @@ -111,6 +111,15 @@
> #define RZG3S_PCI_PERM_CFG_HWINIT_EN BIT(2)
> #define RZG3S_PCI_PERM_PIPE_PHY_REG_EN BIT(1)
>
> +#define RZG3S_PCI_RESET 0x310
> +#define RZG3S_PCI_RESET_RST_OUT_B BIT(6)
> +#define RZG3S_PCI_RESET_RST_PS_B BIT(5)
> +#define RZG3S_PCI_RESET_RST_LOAD_B BIT(4)
> +#define RZG3S_PCI_RESET_RST_CFG_B BIT(3)
> +#define RZG3S_PCI_RESET_RST_RSM_B BIT(2)
> +#define RZG3S_PCI_RESET_RST_GP_B BIT(1)
> +#define RZG3S_PCI_RESET_RST_B BIT(0)
> +
> #define RZG3S_PCI_MSIRE(id) (0x600 + (id) * 0x10)
> #define RZG3S_PCI_MSIRE_ENA BIT(0)
>
> @@ -183,10 +192,14 @@ struct rzg3s_sysc_function {
> /**
> * enum rzg3s_sysc_func_id - System controller function IDs
> * @RZG3S_SYSC_FUNC_ID_RST_RSM_B: RST_RSM_B SYSC function ID
> + * @RZG3S_SYSC_FUNC_ID_L1_ALLOW: L1 allow SYSC function ID
> + * @RZG3S_SYSC_FUNC_ID_MODE: Mode SYSC function ID
> * @RZG3S_SYSC_FUNC_ID_MAX: Max SYSC function ID
> */
> enum rzg3s_sysc_func_id {
> RZG3S_SYSC_FUNC_ID_RST_RSM_B,
> + RZG3S_SYSC_FUNC_ID_L1_ALLOW,
> + RZG3S_SYSC_FUNC_ID_MODE,
> RZG3S_SYSC_FUNC_ID_MAX,
> };
>
> @@ -1151,6 +1164,42 @@ static int rzg3s_pcie_config_deinit(struct rzg3s_pcie_host *host)
> host->cfg_resets);
> }
>
> +static void rzg3e_pcie_config_pre_init(struct rzg3s_pcie_host *host)
> +{
> + u32 mask = RZG3S_PCI_RESET_RST_LOAD_B | RZG3S_PCI_RESET_RST_CFG_B;
> +
> + /* De-assert LOAD_B and CFG_B */
> + rzg3s_pcie_update_bits(host->axi, RZG3S_PCI_RESET, mask, mask);
> +}
> +
> +static int rzg3e_pcie_config_deinit(struct rzg3s_pcie_host *host)
> +{
> + writel_relaxed(0, host->axi + RZG3S_PCI_RESET);
> + return 0;
> +}
> +
> +static int rzg3e_pcie_config_post_init(struct rzg3s_pcie_host *host)
> +{
> + u32 mask = RZG3S_PCI_RESET_RST_PS_B | RZG3S_PCI_RESET_RST_GP_B |
> + RZG3S_PCI_RESET_RST_B;
> +
> + /* De-assert PS_B, GP_B, RST_B */
> + rzg3s_pcie_update_bits(host->axi, RZG3S_PCI_RESET, mask, mask);
> +
> + /*
> + * According to the RZ/G3E HW manual (Rev.1.15, Table 6.6-130
> + * Initialization Procedure (RC)), hardware requires >= 500us delay
> + * before final reset deassert.
> + */
> + fsleep(500);
It is strongly recommended to do a dummy read before adding any delay to make
sure that the previous write got flushed to the hardware and the delay is valid.
So I added a dummy readl_relaxed() before this while applying.
- Mani
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v8 13/15] arm64: dts: renesas: r9a09g047: Add PCIe node
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (11 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 14/15] arm64: dts: renesas: r9a09g047e57-smarc-som: Add PCIe reference clock John Madieu
` (4 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
The RZ/G3E SoC family features an x2 PCIe IP. Add the PCIe node.
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: No changes
v6: No changes
v5: No changes
v4: No changes
v3: No changes
v2: Roerder interrupts and interrupt names to match binding
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 69 ++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
index cbb48ff5028f..2eccaa7ed1c5 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
@@ -841,6 +841,75 @@ wdt3: watchdog@13000400 {
status = "disabled";
};
+ pcie: pcie@13400000 {
+ compatible = "renesas,r9a09g047-pcie";
+ reg = <0 0x13400000 0 0x10000>;
+ ranges = <0x02000000 0 0x30000000 0 0x30000000 0 0x8000000>,
+ <0x43000000 4 0x40000000 4 0x40000000 6 0x00000000>;
+ dma-ranges = <0x42000000 0 0x40000000 0 0x40000000 2 0x00000000>;
+ bus-range = <0x0 0xff>;
+ interrupts = <GIC_SPI 800 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 801 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 802 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 803 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 806 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 792 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 793 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 794 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 795 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 796 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 797 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 799 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 804 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 805 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 807 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 791 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 798 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 808 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 809 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 810 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 811 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 812 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 813 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "serr", "serr_cor", "serr_nonfatal",
+ "serr_fatal", "axi_err", "inta",
+ "intb", "intc", "intd", "msi",
+ "link_bandwidth", "pm_pme", "dma",
+ "pcie_evt", "msg", "all",
+ "link_equalization_request",
+ "turn_off_event", "pmu_poweroff",
+ "d3_event_f0", "d3_event_f1",
+ "cfg_pmcsr_writeclear_f0",
+ "cfg_pmcsr_writeclear_f1";
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ interrupt-map-mask = <0 0 0 7>;
+ interrupt-map = <0 0 0 1 &pcie 0 0 0 0>, /* INTA */
+ <0 0 0 2 &pcie 0 0 0 1>, /* INTB */
+ <0 0 0 3 &pcie 0 0 0 2>, /* INTC */
+ <0 0 0 4 &pcie 0 0 0 3>; /* INTD */
+ clocks = <&cpg CPG_MOD 0xc4>, <&cpg CPG_MOD 0xc5>;
+ clock-names = "aclk", "pmu";
+ resets = <&cpg 0xb2>;
+ reset-names = "aresetn";
+ power-domains = <&cpg>;
+ device_type = "pci";
+ #address-cells = <3>;
+ #size-cells = <2>;
+ renesas,sysc = <&sys>;
+ status = "disabled";
+
+ pcie_port0: pcie@0,0 {
+ reg = <0x0 0x0 0x0 0x0 0x0>;
+ ranges;
+ device_type = "pci";
+ vendor-id = <0x1912>;
+ device-id = <0x0039>;
+ #address-cells = <3>;
+ #size-cells = <2>;
+ };
+ };
+
tsu: thermal@14002000 {
compatible = "renesas,r9a09g047-tsu";
reg = <0 0x14002000 0 0x1000>;
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 14/15] arm64: dts: renesas: r9a09g047e57-smarc-som: Add PCIe reference clock
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (12 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 13/15] arm64: dts: renesas: r9a09g047: Add PCIe node John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-06 14:34 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe John Madieu
` (3 subsequent siblings)
17 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
The RZ/G3E SMARC SoM has a fixed 100 MHz reference clock generator
for PCIe. Model it as a fixed-clock and assign it to the PCIe port.
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: No changes
v6: No changes
v5: No changes
v4: No changes
v3: No changes
v2: No changes
arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
index eb0de21d6716..7e2345bb9918 100644
--- a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
@@ -43,6 +43,12 @@ memory@48000000 {
reg = <0x0 0x48000000 0x0 0xf8000000>;
};
+ pcie_refclk: clock-pcie-ref {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <100000000>;
+ };
+
reg_1p8v: regulator-1p8v {
compatible = "regulator-fixed";
regulator-name = "fixed-1.8V";
@@ -168,6 +174,11 @@ phy1: ethernet-phy@7 {
};
};
+&pcie_port0 {
+ clocks = <&pcie_refclk>;
+ clock-names = "ref";
+};
+
&pinctrl {
eth0_pins: eth0 {
clk {
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (13 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 14/15] arm64: dts: renesas: r9a09g047e57-smarc-som: Add PCIe reference clock John Madieu
@ 2026-03-06 14:34 ` John Madieu
2026-03-11 4:38 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: phucduc.bui
` (2 more replies)
2026-03-11 12:42 ` [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support Claudiu Beznea
` (2 subsequent siblings)
17 siblings, 3 replies; 27+ messages in thread
From: John Madieu @ 2026-03-06 14:34 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu,
John Madieu
The RZ Smarc Crarrier-II board has PCIe slots mounted on it.
Enable PCIe support.
Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
---
Changes:
v8: No changes
v7: No changes
v6: No changes
v5: No changes
v4: No changes
v3:
- Splitted enablement into common carrier dtsi and board dts
v2:
- Removed board-specific dma-ranges.
- Merged enablement and pinmux assignment in same file
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 16 ++++++++++++++++
arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi | 4 ++++
2 files changed, 20 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index 696903dc7a63..1ba50512f4ef 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -122,6 +122,11 @@ key-sleep {
#endif
};
+&pcie {
+ pinctrl-0 = <&pcie_pins>;
+ pinctrl-names = "default";
+};
+
&pinctrl {
canfd_pins: canfd {
can1_pins: can1 {
@@ -167,6 +172,17 @@ rsci9_pins: rsci9 {
bias-pull-up;
};
+ pcie-clkreq-n {
+ gpio-hog;
+ gpios = <RZG3E_GPIO(4, 5) GPIO_ACTIVE_HIGH>;
+ output-low;
+ line-name = "pcie_clkreq_n";
+ };
+
+ pcie_pins: pcie {
+ pinmux = <RZG3E_PORT_PINMUX(G, 7, 1)>; /* PCIE_RST_OUT# */
+ };
+
scif_pins: scif {
pins = "SCIF_TXD", "SCIF_RXD";
renesas,output-impedance = <1>;
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index b607b5d6c259..e2a34577a1a1 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -96,6 +96,10 @@ &i2c0 {
clock-frequency = <400000>;
};
+&pcie {
+ status = "okay";
+};
+
&scif0 {
status = "okay";
};
--
2.25.1
^ permalink raw reply related [flat|nested] 27+ messages in thread* Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
2026-03-06 14:34 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe John Madieu
@ 2026-03-11 4:38 ` phucduc.bui
2026-03-17 23:31 ` John Madieu
2026-03-11 16:12 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe Geert Uytterhoeven
2026-03-16 8:53 ` Biju Das
2 siblings, 1 reply; 27+ messages in thread
From: phucduc.bui @ 2026-03-11 4:38 UTC (permalink / raw)
To: john.madieu.xa
Cc: bhelgaas, biju.das.jz, claudiu.beznea.uj, conor+dt, devicetree,
geert+renesas, john.madieu, krzk+dt, kwilczynski, linux-clk,
linux-pci, linux-renesas-soc, lpieralisi, magnus.damm, mani, robh
I noticed that for gpio-hog nodes, the kernel already uses the node name
as the default label in /sys/kernel/debug/gpio if line-name is missing.
Since the node name here is already pcie-clkreq-n, the line-name property
seems redundant. Should we remove it to keep the DTS more concise?
Best regards,
Phuc
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
2026-03-11 4:38 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: phucduc.bui
@ 2026-03-17 23:31 ` John Madieu
2026-03-18 6:02 ` Bui Duc Phuc
0 siblings, 1 reply; 27+ messages in thread
From: John Madieu @ 2026-03-17 23:31 UTC (permalink / raw)
To: phucduc.bui@gmail.com
Cc: bhelgaas@google.com, Biju Das, Claudiu Beznea,
conor+dt@kernel.org, devicetree@vger.kernel.org,
geert+renesas@glider.be, john.madieu@gmail.com,
krzk+dt@kernel.org, kwilczynski@kernel.org,
linux-clk@vger.kernel.org, linux-pci@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, lpieralisi@kernel.org,
magnus.damm, mani@kernel.org, robh@kernel.org
Hi Phuc,
Thanks for the feedback.
> -----Original Message-----
> From: phucduc.bui@gmail.com <phucduc.bui@gmail.com>
> Sent: Wednesday, March 11, 2026 5:39 AM
> To: John Madieu <john.madieu.xa@bp.renesas.com>
> Subject: Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
>
> [You don't often get email from phucduc.bui@gmail.com. Learn why this is
> important at https://aka.ms/LearnAboutSenderIdentification ]
>
> I noticed that for gpio-hog nodes, the kernel already uses the node name
> as the default label in /sys/kernel/debug/gpio if line-name is missing.
> Since the node name here is already pcie-clkreq-n, the line-name property
> seems redundant. Should we remove it to keep the DTS more concise?
>
Thanks for pointing it out. As per Biju's comment, there is a missing
-hog at the end of node name. Thus, if we keep the schema-friendly node
name 'pcie-clkreq-n-hog', then 'line-name = "pcie_clkreq_n";' can still
be useful.
Regards,
John
> Best regards,
> Phuc
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
2026-03-17 23:31 ` John Madieu
@ 2026-03-18 6:02 ` Bui Duc Phuc
0 siblings, 0 replies; 27+ messages in thread
From: Bui Duc Phuc @ 2026-03-18 6:02 UTC (permalink / raw)
To: John Madieu
Cc: bhelgaas@google.com, Biju Das, Claudiu Beznea,
conor+dt@kernel.org, devicetree@vger.kernel.org,
geert+renesas@glider.be, john.madieu@gmail.com,
krzk+dt@kernel.org, kwilczynski@kernel.org,
linux-clk@vger.kernel.org, linux-pci@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, lpieralisi@kernel.org,
magnus.damm, mani@kernel.org, robh@kernel.org
Hi John,
> Thanks for pointing it out. As per Biju's comment, there is a missing
> -hog at the end of node name. Thus, if we keep the schema-friendly node
> name 'pcie-clkreq-n-hog', then 'line-name = "pcie_clkreq_n";' can still
> be useful.
Thanks for the clarification, that makes sense.
Regarding the line-name property, I'd like to see what the maintainers think
about this direction. I also noticed that the usage of line-name across existing
Renesas DTS files are somewhat inconsistent. If the maintainer approves your
suggested approach, I will follow it and include the line-name in my next patch.
By the way, are you the author of the renowned books such as "Linux Device
Driver Development" and "Mastering Linux Device Driver Development"?
Best Regards,
Phuc
On Wed, Mar 18, 2026 at 6:31 AM John Madieu
<john.madieu.xa@bp.renesas.com> wrote:
>
> Hi Phuc,
>
> Thanks for the feedback.
>
> > -----Original Message-----
> > From: phucduc.bui@gmail.com <phucduc.bui@gmail.com>
> > Sent: Wednesday, March 11, 2026 5:39 AM
> > To: John Madieu <john.madieu.xa@bp.renesas.com>
> > Subject: Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
> >
> > [You don't often get email from phucduc.bui@gmail.com. Learn why this is
> > important at https://aka.ms/LearnAboutSenderIdentification ]
> >
> > I noticed that for gpio-hog nodes, the kernel already uses the node name
> > as the default label in /sys/kernel/debug/gpio if line-name is missing.
> > Since the node name here is already pcie-clkreq-n, the line-name property
> > seems redundant. Should we remove it to keep the DTS more concise?
> >
>
> Thanks for pointing it out. As per Biju's comment, there is a missing
> -hog at the end of node name. Thus, if we keep the schema-friendly node
> name 'pcie-clkreq-n-hog', then 'line-name = "pcie_clkreq_n";' can still
> be useful.
>
> Regards,
> John
>
>
> > Best regards,
> > Phuc
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
2026-03-06 14:34 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe John Madieu
2026-03-11 4:38 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: phucduc.bui
@ 2026-03-11 16:12 ` Geert Uytterhoeven
2026-03-16 9:23 ` John Madieu
2026-03-16 8:53 ` Biju Das
2 siblings, 1 reply; 27+ messages in thread
From: Geert Uytterhoeven @ 2026-03-11 16:12 UTC (permalink / raw)
To: John Madieu
Cc: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt, robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz,
linux-pci, linux-renesas-soc, devicetree, linux-clk, john.madieu
Hi John,
On Fri, 6 Mar 2026 at 15:36, John Madieu <john.madieu.xa@bp.renesas.com> wrote:
> The RZ Smarc Crarrier-II board has PCIe slots mounted on it.
> Enable PCIe support.
>
> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
Thanks for your patch!
> --- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> +++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> @@ -122,6 +122,11 @@ key-sleep {
> #endif
> };
>
> +&pcie {
> + pinctrl-0 = <&pcie_pins>;
> + pinctrl-names = "default";
> +};
> +
> &pinctrl {
> canfd_pins: canfd {
> can1_pins: can1 {
> @@ -167,6 +172,17 @@ rsci9_pins: rsci9 {
> bias-pull-up;
> };
>
> + pcie-clkreq-n {
Please preserve sort order (alphabetical, by node name).
No need to resend this series just for this change.
> + gpio-hog;
> + gpios = <RZG3E_GPIO(4, 5) GPIO_ACTIVE_HIGH>;
> + output-low;
> + line-name = "pcie_clkreq_n";
> + };
> +
> + pcie_pins: pcie {
> + pinmux = <RZG3E_PORT_PINMUX(G, 7, 1)>; /* PCIE_RST_OUT# */
> + };
> +
> scif_pins: scif {
> pins = "SCIF_TXD", "SCIF_RXD";
> renesas,output-impedance = <1>;
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 27+ messages in thread* RE: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
2026-03-11 16:12 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe Geert Uytterhoeven
@ 2026-03-16 9:23 ` John Madieu
0 siblings, 0 replies; 27+ messages in thread
From: John Madieu @ 2026-03-16 9:23 UTC (permalink / raw)
To: geert
Cc: Claudiu Beznea, lpieralisi@kernel.org, kwilczynski@kernel.org,
mani@kernel.org, geert+renesas@glider.be, krzk+dt@kernel.org,
robh@kernel.org, bhelgaas@google.com, conor+dt@kernel.org,
magnus.damm, Biju Das, linux-pci@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org,
linux-clk@vger.kernel.org, john.madieu@gmail.com
Hi Geert,
Thanks for the review.
> -----Original Message-----
> From: Geert Uytterhoeven <geert@linux-m68k.org>
> Sent: Wednesday, March 11, 2026 5:12 PM
> To: John Madieu <john.madieu.xa@bp.renesas.com>
> Subject: Re: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc:
> Enable PCIe
>
> Hi John,
>
> On Fri, 6 Mar 2026 at 15:36, John Madieu <john.madieu.xa@bp.renesas.com>
> wrote:
> > The RZ Smarc Crarrier-II board has PCIe slots mounted on it.
> > Enable PCIe support.
> >
> > Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
>
> Thanks for your patch!
>
> > --- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> > +++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> > @@ -122,6 +122,11 @@ key-sleep {
> > #endif
> > };
> >
> > +&pcie {
> > + pinctrl-0 = <&pcie_pins>;
> > + pinctrl-names = "default";
> > +};
> > +
> > &pinctrl {
> > canfd_pins: canfd {
> > can1_pins: can1 {
> > @@ -167,6 +172,17 @@ rsci9_pins: rsci9 {
> > bias-pull-up;
> > };
> >
> > + pcie-clkreq-n {
>
> Please preserve sort order (alphabetical, by node name).
> No need to resend this series just for this change.
>
Since I've received some other comments on this patch,
I'll address this in v9, excluding the driver patches that
have already been applied by Mani.
Regards,
John
> > + gpio-hog;
> > + gpios = <RZG3E_GPIO(4, 5) GPIO_ACTIVE_HIGH>;
> > + output-low;
> > + line-name = "pcie_clkreq_n";
> > + };
> > +
> > + pcie_pins: pcie {
> > + pinmux = <RZG3E_PORT_PINMUX(G, 7, 1)>; /* PCIE_RST_OUT#
> */
> > + };
> > +
> > scif_pins: scif {
> > pins = "SCIF_TXD", "SCIF_RXD";
> > renesas,output-impedance = <1>;
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-
> m68k.org
>
> In personal conversations with technical people, I call myself a hacker.
> But when I'm talking to journalists I just say "programmer" or something
> like that.
> -- Linus Torvalds
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
2026-03-06 14:34 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe John Madieu
2026-03-11 4:38 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: phucduc.bui
2026-03-11 16:12 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe Geert Uytterhoeven
@ 2026-03-16 8:53 ` Biju Das
2 siblings, 0 replies; 27+ messages in thread
From: Biju Das @ 2026-03-16 8:53 UTC (permalink / raw)
To: John Madieu, Claudiu Beznea, lpieralisi@kernel.org,
kwilczynski@kernel.org, mani@kernel.org, geert+renesas@glider.be,
krzk+dt@kernel.org
Cc: robh@kernel.org, bhelgaas@google.com, conor+dt@kernel.org,
magnus.damm, linux-pci@vger.kernel.org,
linux-renesas-soc@vger.kernel.org, devicetree@vger.kernel.org,
linux-clk@vger.kernel.org, john.madieu@gmail.com, John Madieu
Hi John,
Thanks for the patch.
> -----Original Message-----
> From: John Madieu <john.madieu.xa@bp.renesas.com>
> Sent: 06 March 2026 14:34
> Subject: [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
>
> The RZ Smarc Crarrier-II board has PCIe slots mounted on it.
> Enable PCIe support.
>
> Signed-off-by: John Madieu <john.madieu.xa@bp.renesas.com>
> ---
>
> Changes:
>
> v8: No changes
> v7: No changes
> v6: No changes
> v5: No changes
> v4: No changes
>
> v3:
> - Splitted enablement into common carrier dtsi and board dts
>
> v2:
> - Removed board-specific dma-ranges.
> - Merged enablement and pinmux assignment in same file
>
> .../boot/dts/renesas/r9a09g047e57-smarc.dts | 16 ++++++++++++++++
> arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi | 4 ++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> index 696903dc7a63..1ba50512f4ef 100644
> --- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> +++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
> @@ -122,6 +122,11 @@ key-sleep {
> #endif
> };
>
> +&pcie {
> + pinctrl-0 = <&pcie_pins>;
> + pinctrl-names = "default";
> +};
> +
> &pinctrl {
> canfd_pins: canfd {
> can1_pins: can1 {
> @@ -167,6 +172,17 @@ rsci9_pins: rsci9 {
> bias-pull-up;
> };
>
> + pcie-clkreq-n {
> + gpio-hog;
> + gpios = <RZG3E_GPIO(4, 5) GPIO_ACTIVE_HIGH>;
> + output-low;
> + line-name = "pcie_clkreq_n";
> + };
Dtbs check is triggering the below warning.
arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dtb: pcie-clkreq-n: $nodename:0: 'pcie-clkreq-n' does not match '-hog(-[0-9]+)?$'
Cheers,
Biju
> +
> + pcie_pins: pcie {
> + pinmux = <RZG3E_PORT_PINMUX(G, 7, 1)>; /* PCIE_RST_OUT# */
> + };
> +
> scif_pins: scif {
> pins = "SCIF_TXD", "SCIF_RXD";
> renesas,output-impedance = <1>;
> diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-
> smarc2.dtsi
> index b607b5d6c259..e2a34577a1a1 100644
> --- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
> +++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
> @@ -96,6 +96,10 @@ &i2c0 {
> clock-frequency = <400000>;
> };
>
> +&pcie {
> + status = "okay";
> +};
> +
> &scif0 {
> status = "okay";
> };
> --
> 2.25.1
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (14 preceding siblings ...)
2026-03-06 14:34 ` [PATCH v8 15/15] arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe John Madieu
@ 2026-03-11 12:42 ` Claudiu Beznea
2026-03-13 21:26 ` Lad, Prabhakar
2026-03-15 16:38 ` (subset) " Manivannan Sadhasivam
17 siblings, 0 replies; 27+ messages in thread
From: Claudiu Beznea @ 2026-03-11 12:42 UTC (permalink / raw)
To: John Madieu, claudiu.beznea.uj, lpieralisi, kwilczynski, mani,
geert+renesas, krzk+dt
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu
On 3/6/26 16:34, John Madieu wrote:
> The Renesas RZ/G3E SoC features a PCIe controller that shares similarities with
> the existing RZ/G3S PCIe controller, but with several key differences.
> This series adds support for the RZ/G3E PCIe controller by extending the existing
> RZ/G3S driver and device tree bindings.
>
> Key differences between RZ/G3E and RZ/G3S PCIe controllers:
>
> Link Speed Support:
> - RZ/G3E: Supports PCIe Gen3 (8.0 GT/s) alongside Gen2 (5.0 GT/s)
> - RZ/G3S: Supports PCIe Gen2 (5.0 GT/s) only
>
> Reset Control:
> - RZ/G3E: Uses register-based reset control mechanism
> - RZ/G3S: Uses exclusively external reset control signals
>
> Inbound Window Configuration:
> - RZ/G3E: Requires precise power-of-2 window coverage with strict address
> alignment constraints. Non-power-of-2 memory regions must be split into
> multiple windows to avoid over-mapping, ensuring proper hardware address
> decoding for DMA operations.
> - RZ/G3S: Uses a simpler approach that rounds up to the next power-of-2,
> creating single larger windows. The hardware tolerates over-mapped regions.
>
> Class/Revision IDs:
> - RZ/G3E: Requires explicit setting of class/revision values
> - RZ/G3S: Has default values in hardware
>
> Clock Naming:
> - RZ/G3E: Uses "clkpmu" clock for power management
> - RZ/G3S: Uses "clkl1pm" PM control clock while CLKREQ_B is deasserting
>
> Phy Settings:
> - RZ/G3E: Does not need PHY settings as it works with default hw values
> - RZ/G3S: Requires explicit PHY settings
>
> This series extends the existing driver to detect the SoC type from the device
> tree compatible string and configure the controller appropriately. The updates
> are minimal and focused on the hardware-specific differences while keeping the
> common code paths unified.
>
> Changes:
>
> v8:
> - Collected additional Rb tags on remaining code patches
> - Fixed typos in patch descriptions
> - Fixed checkpatch warnings
I've tested this series on Renesas RZ/G3S SMARC Carrier-II board with an NVMe
device:
root@smarc-rzg3s:/lava-testing# lspci
00:00.0 PCI bridge: Renesas Technology Corp. Device 0033
01:00.0 Non-Volatile memory controller: Transcend Information, Inc. NVMe PCIe
SSD 110S/112S/120S/MTE300S/MTE400S/MTE652T2 (DRAM-less) (rev 03)
root@smarc-rzg3s:/lava-testing#
All looks good, thus, for all the patches in this series:
Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
Thank you,
Claudiu
^ permalink raw reply [flat|nested] 27+ messages in thread* Re: [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (15 preceding siblings ...)
2026-03-11 12:42 ` [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support Claudiu Beznea
@ 2026-03-13 21:26 ` Lad, Prabhakar
2026-03-15 16:38 ` (subset) " Manivannan Sadhasivam
17 siblings, 0 replies; 27+ messages in thread
From: Lad, Prabhakar @ 2026-03-13 21:26 UTC (permalink / raw)
To: John Madieu
Cc: claudiu.beznea.uj, lpieralisi, kwilczynski, mani, geert+renesas,
krzk+dt, robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz,
linux-pci, linux-renesas-soc, devicetree, linux-clk, john.madieu
Hi John,
On Fri, Mar 6, 2026 at 2:39 PM John Madieu
<john.madieu.xa@bp.renesas.com> wrote:
>
> The Renesas RZ/G3E SoC features a PCIe controller that shares similarities with
> the existing RZ/G3S PCIe controller, but with several key differences.
> This series adds support for the RZ/G3E PCIe controller by extending the existing
> RZ/G3S driver and device tree bindings.
>
> Key differences between RZ/G3E and RZ/G3S PCIe controllers:
>
> Link Speed Support:
> - RZ/G3E: Supports PCIe Gen3 (8.0 GT/s) alongside Gen2 (5.0 GT/s)
> - RZ/G3S: Supports PCIe Gen2 (5.0 GT/s) only
>
> Reset Control:
> - RZ/G3E: Uses register-based reset control mechanism
> - RZ/G3S: Uses exclusively external reset control signals
>
> Inbound Window Configuration:
> - RZ/G3E: Requires precise power-of-2 window coverage with strict address
> alignment constraints. Non-power-of-2 memory regions must be split into
> multiple windows to avoid over-mapping, ensuring proper hardware address
> decoding for DMA operations.
> - RZ/G3S: Uses a simpler approach that rounds up to the next power-of-2,
> creating single larger windows. The hardware tolerates over-mapped regions.
>
> Class/Revision IDs:
> - RZ/G3E: Requires explicit setting of class/revision values
> - RZ/G3S: Has default values in hardware
>
> Clock Naming:
> - RZ/G3E: Uses "clkpmu" clock for power management
> - RZ/G3S: Uses "clkl1pm" PM control clock while CLKREQ_B is deasserting
>
> Phy Settings:
> - RZ/G3E: Does not need PHY settings as it works with default hw values
> - RZ/G3S: Requires explicit PHY settings
>
> This series extends the existing driver to detect the SoC type from the device
> tree compatible string and configure the controller appropriately. The updates
> are minimal and focused on the hardware-specific differences while keeping the
> common code paths unified.
>
> Changes:
>
> v8:
> - Collected additional Rb tags on remaining code patches
> - Fixed typos in patch descriptions
> - Fixed checkpatch warnings
>
> v7:
> - Removed former patch [04/16] adding support for init[off|asserted] clocks
> and resets as these steps are not required anymore
> - Renamed RZG3E_PCI_RESET* register defines to RZG3S_PCI_RESET* for
> consistency, as upcoming SoCs (RZ/V2H, RZ/T2N, RZ/N2H) share these
> registers
> - Dropped some useless comments and reduced verbose descriptions to
> concise forms
> - Unified function naming: rzg3s_pcie_config_{post_init,deinit}() and
> rzg3e_pcie_config_{pre_init,post_init,deinit}()
> - Used local mask variables in rzg3e_pcie_config_{pre_init,post_init}()
> for compactness within 80-char line limit
> - Fixed resume_noirq: reordered MODE before RST_RSM_B to match probe
> sequence, fixing error path handling
> - Fixed checkpatch commit message line length warnings
>
> v6:
> - Replaced rzg3s_sysc_config() with enum-based rzg3s_sysc_config_func()
> as suggested by Claudiu, dropping the -1 skip pattern
> - Introduced enum rzg3s_sysc_func_id and array-based SYSC function
> descriptors in patch 08
> - Used regmap_update_bits() consistently for all SYSC accesses
> - Fixed config_reinit error path in suspend_noirq: call config_pre_init
> before config_post_init as spotted by Claudiu
> - Fixed double config_deinit in rzg3s_pcie_host_init() error path by
> separating config_deinit_post into a non-fall-through path
> - Shortened comments as per Claudiu's suggestions
> - Reordered patchset, moving v5's patch 09/16 to 02/16 and added Fixes tag
>
> v5:
> - Introduced new patch to reorder reset handling
> - Introduced rzg3s_sysc_config() helper to handle SYS config
> - Collected Tags on documentation
>
> v4:
> - Collected Ab tag
> - Fixed binding clock name constraint
>
> v3:
> - Removed extra MaxItems in binding causing warnings
> - Fix potential crash for non-initialized rcdev in CPG driver
> - Fix binding contraints replacing 'description' with 'const' as per
> Geert and Rob's comment
>
> v2:
> - Address Bjorn typo comments
> - Address Claidiu's comment on stylish
> - Use single inbound-window-configuration function for both G3E/G3S
> - Refactor goto laballing as per Claudiu's comments
> - Update bindings and reused G3S's interrupt ordering
> * This involves reordering interrupts in dt
> - Remove Board-specific PCIe dma-range.
>
>
> John Madieu (15):
> PCI: rzg3s-host: Fix reset handling in probe error path
> PCI: rzg3s-host: Reorder reset assertion during suspend
> PCI: rzg3s-host: Rework inbound window algorithm for multi-SoC support
> clk: renesas: r9a09g047: Add PCIe clocks and reset
> dt-bindings: PCI: renesas,r9a08g045s33-pcie: Fix naming properties
> dt-bindings: PCI: renesas,r9a08g045s33-pcie: Document RZ/G3E SoC
> PCI: rzg3s-host: Make SYSC register offsets SoC-specific
> PCI: rzg3s-host: Make configuration reset lines optional
> PCI: rzg3s-host: Add SoC-specific configuration and initialization
> callbacks
> PCI: rzg3s-host: Explicitly set class code for RZ/G3E compatibility
> PCI: rzg3s-host: Add PCIe Gen3 (8.0 GT/s) link speed support
> PCI: rzg3s-host: Add support for RZ/G3E PCIe controller
> arm64: dts: renesas: r9a09g047: Add PCIe node
> arm64: dts: renesas: r9a09g047e57-smarc-som: Add PCIe reference clock
> arm64: dts: renesas: r9a09g047e57-smarc: Enable PCIe
>
Thank you for the patches, Ive tested them on RZ/V2N EVK where PCIe IP
is identical to RZ/G3E.
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # RZ/V2N EVK
Cheers,
Prabhakar
> .../bindings/pci/renesas,r9a08g045-pcie.yaml | 121 ++++--
> arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 69 ++++
> .../boot/dts/renesas/r9a09g047e57-smarc.dts | 16 +
> .../boot/dts/renesas/renesas-smarc2.dtsi | 4 +
> .../boot/dts/renesas/rzg3e-smarc-som.dtsi | 11 +
> drivers/clk/renesas/r9a09g047-cpg.c | 5 +
> drivers/pci/controller/pcie-rzg3s-host.c | 362 ++++++++++++++----
> 7 files changed, 478 insertions(+), 110 deletions(-)
>
> --
> 2.25.1
>
>
^ permalink raw reply [flat|nested] 27+ messages in thread* Re: (subset) [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support
2026-03-06 14:34 [PATCH v8 00/15] PCI: renesas: Add RZ/G3E PCIe controller support John Madieu
` (16 preceding siblings ...)
2026-03-13 21:26 ` Lad, Prabhakar
@ 2026-03-15 16:38 ` Manivannan Sadhasivam
17 siblings, 0 replies; 27+ messages in thread
From: Manivannan Sadhasivam @ 2026-03-15 16:38 UTC (permalink / raw)
To: claudiu.beznea.uj, lpieralisi, kwilczynski, geert+renesas,
krzk+dt, John Madieu
Cc: robh, bhelgaas, conor+dt, magnus.damm, biju.das.jz, linux-pci,
linux-renesas-soc, devicetree, linux-clk, john.madieu
On Fri, 06 Mar 2026 15:34:07 +0100, John Madieu wrote:
> The Renesas RZ/G3E SoC features a PCIe controller that shares similarities with
> the existing RZ/G3S PCIe controller, but with several key differences.
> This series adds support for the RZ/G3E PCIe controller by extending the existing
> RZ/G3S driver and device tree bindings.
>
> Key differences between RZ/G3E and RZ/G3S PCIe controllers:
>
> [...]
Applied, thanks!
[01/15] PCI: rzg3s-host: Fix reset handling in probe error path
commit: d284389d4576e7c8040dc4cbb66876e539c6d064
[02/15] PCI: rzg3s-host: Reorder reset assertion during suspend
commit: 34735f63748daa2ea27544259c3042b4948376bf
[03/15] PCI: rzg3s-host: Rework inbound window algorithm for multi-SoC support
commit: d17a200a747b01e05bb0fc14d62fbb5ad6653869
[05/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Fix naming properties
commit: bb1b0f47f6822864c1689f46348efa42c5d4074c
[06/15] dt-bindings: PCI: renesas,r9a08g045s33-pcie: Document RZ/G3E SoC
commit: fabce18494e5a4f388c70a40fa8351c911790d8d
[07/15] PCI: rzg3s-host: Make SYSC register offsets SoC-specific
commit: 346dd3422ed9ff56f033726a50fad2da5677eb12
[08/15] PCI: rzg3s-host: Make configuration reset lines optional
commit: 4ec4ccdaace40397638c305c0a36b423d2142a93
[09/15] PCI: rzg3s-host: Add SoC-specific configuration and initialization callbacks
commit: 5f2c4de717786150f8d6cdbdbffb986cd3c59edb
[10/15] PCI: rzg3s-host: Explicitly set class code for RZ/G3E compatibility
commit: 1e75d2e9a0e018b53f06dcc2e9345ac10f1aa174
[11/15] PCI: rzg3s-host: Add PCIe Gen3 (8.0 GT/s) link speed support
commit: 5e9a5af5c9a2797a5e41e8ee565ce8108588f956
[12/15] PCI: rzg3s-host: Add support for RZ/G3E PCIe controller
commit: 8197ec49a2062185f6bd432a19969ce0b3752e94
Best regards,
--
Manivannan Sadhasivam <mani@kernel.org>
^ permalink raw reply [flat|nested] 27+ messages in thread