Hi, On Thu, Nov 05, 2026 at 08:51:14AM +0800, Shawn Lin wrote: > [...] > > +static void rockchip_pcie_pme_turn_off(struct dw_pcie_rp *pp) > > +{ > > + struct dw_pcie *pci = to_dw_pcie_from_pp(pp); > > + struct rockchip_pcie *rockchip = to_rockchip_pcie(pci); > > + struct device *dev = rockchip->pci.dev; > > + u32 status; > > + int ret; > > + > > + /* 1. Broadcast PME_Turn_Off Message, bit 4 self-clear once done */ > > + rockchip_pcie_writel_apb(rockchip, PME_TURN_OFF, PCIE_CLIENT_MSG_GEN); > > + ret = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_MSG_GEN, > > + status, !(status & BIT(4)), PCIE_PME_TO_L2_TIMEOUT_US / 10, > > + PCIE_PME_TO_L2_TIMEOUT_US); > > + if (ret) { > > + dev_warn(dev, "Failed to send PME_Turn_Off\n"); > > + return; > > + } > > + > > + /* 2. Wait for PME_TO_Ack, bit 9 will be set once received */ > > + ret = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_INTR_STATUS_MSG_RX, > > + status, status & BIT(9), PCIE_PME_TO_L2_TIMEOUT_US / 10, > > + PCIE_PME_TO_L2_TIMEOUT_US); > > + if (ret) { > > + dev_warn(dev, "Failed to receive PME_TO_Ack\n"); > > + return; > > + } > > + > > + /* 3. Clear PME_TO_Ack and Wait for ready to enter L23 message */ > > + rockchip_pcie_writel_apb(rockchip, PME_TO_ACK, PCIE_CLIENT_INTR_STATUS_MSG_RX); > > + ret = readl_poll_timeout(rockchip->apb_base + PCIE_CLIENT_POWER_CON, > > + status, status & PME_READY_ENTER_L23, > > + PCIE_PME_TO_L2_TIMEOUT_US / 10, > > + PCIE_PME_TO_L2_TIMEOUT_US); > > + if (ret) > > + dev_err(dev, "Failed to get ready to enter L23 message\n"); > > +} > > This is a question for the DWC core: should we change > dw_pcie_host_ops::pme_turn_off() to return a value instead of silently > ignoring a failure? > > Looking at pcie-designware-host.c, we have: > > if (pci->pp.ops->pme_turn_off) { > pci->pp.ops->pme_turn_off(&pci->pp); > } else { > ret = dw_pcie_pme_turn_off(pci); > if (ret) > return ret; > } > > The handling feels asymmetric. If ->pme_turn_off fails, shouldn't we abort > dw_pcie_suspend_noirq as well? That sounds sensible to me. I had a look and apart from Rockchip, Layescape can run into an error. Most platforms cannot produce any errors in that function, which explains why this was void to begin with. > Other than that, this patch looks good to me in current shape, > Reviewed-by: Shawn Lin Thanks, taken over for v9. > We can further discuss the callback's return value issue on top. Agreed. This will touch all the glue drivers to add a return 0. I think its better to do that in a separate series. Greetings, -- Sebastian