Skip to content

Commit 8795b70

Browse files
Marek Vasutbjorn-helgaas
authored andcommitted
PCI: rcar-gen4: Add missing 1ms delay after PWR reset assertion
R-Car V4H Reference Manual R19UH0186EJ0130 Rev.1.30 Apr. 21, 2025 page 585 Figure 9.3.2 Software Reset flow (B) indicates that for peripherals in HSC domain, after reset has been asserted by writing a matching reset bit into register SRCR, it is mandatory to wait 1ms. Because it is the controller driver which can determine whether or not the controller is in HSC domain based on its compatible string, add the missing delay in the controller driver. This 1ms delay is documented on R-Car V4H and V4M; it is currently unclear whether S4 is affected as well. This patch does apply the extra delay on R-Car S4 as well. Fixes: 0d0c551 ("PCI: rcar-gen4: Add R-Car Gen4 PCIe controller support for host mode") Suggested-by: Geert Uytterhoeven <[email protected]> Signed-off-by: Marek Vasut <[email protected]> [mani: added the missing r-b tag from Krzysztof] Signed-off-by: Manivannan Sadhasivam <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Reviewed-by: Geert Uytterhoeven <[email protected]> Reviewed-by: Krzysztof Wilczyński <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent d96ac5b commit 8795b70

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

drivers/pci/controller/dwc/pcie-rcar-gen4.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,17 @@ static int rcar_gen4_pcie_common_init(struct rcar_gen4_pcie *rcar)
182182
return ret;
183183
}
184184

185-
if (!reset_control_status(dw->core_rsts[DW_PCIE_PWR_RST].rstc))
185+
if (!reset_control_status(dw->core_rsts[DW_PCIE_PWR_RST].rstc)) {
186186
reset_control_assert(dw->core_rsts[DW_PCIE_PWR_RST].rstc);
187+
/*
188+
* R-Car V4H Reference Manual R19UH0186EJ0130 Rev.1.30 Apr.
189+
* 21, 2025 page 585 Figure 9.3.2 Software Reset flow (B)
190+
* indicates that for peripherals in HSC domain, after
191+
* reset has been asserted by writing a matching reset bit
192+
* into register SRCR, it is mandatory to wait 1ms.
193+
*/
194+
fsleep(1000);
195+
}
187196

188197
val = readl(rcar->base + PCIEMSR0);
189198
if (rcar->drvdata->mode == DW_PCIE_RC_TYPE) {

0 commit comments

Comments
 (0)