>From 852811b11795ee389ea6a953ed0db69b76722469 Mon Sep 17 00:00:00 2001 From: Gowtham Kudupudi Date: Sun, 14 Jun 2026 09:41:01 +0530 Subject: [PATCH 1/2] PCI: meson: Fix PERST# timing by asserting reset before LTSSM enable On warm reboot, the PCIe controller's LTSSM starts link training immediately if PERST# is already deasserted from the previous boot. The driver then pulses PERST# for only 500us, which is too short to properly reset the endpoint device that has already started training. Fix by moving the PERST# assert/deassert pulse BEFORE enabling LTSSM, so the endpoint gets a clean reset cycle before link training begins. This was found on Amlogic G12B (A311D) with NVMe on an M.2 slot. Cold boot worked because POR held PERST# low; warm reboot did not. The fix was confirmed on a Banana Pi CM4 with Waveshare IO base board. Signed-off-by: Gowtham Kudupudi --- drivers/pci/controller/dwc/pci-meson.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/controller/dwc/pci-meson.c b/drivers/pci/controller/dwc/pci-meson.c index 0694084f612..c28ab40c9ff 100644 --- a/drivers/pci/controller/dwc/pci-meson.c +++ b/drivers/pci/controller/dwc/pci-meson.c @@ -308,8 +308,8 @@ static int meson_pcie_start_link(struct dw_pcie *pci) { struct meson_pcie *mp = to_meson_pcie(pci); - meson_pcie_ltssm_enable(mp); meson_pcie_assert_reset(mp); + meson_pcie_ltssm_enable(mp); return 0; } -- 2.54.0