* [PATCH 0/2] PCI: Slot reset fixes @ 2025-05-24 18:53 Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam ` (3 more replies) 0 siblings, 4 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-24 18:53 UTC (permalink / raw) To: bhelgaas, lpieralisi, kw Cc: linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa, Manivannan Sadhasivam Hi, This series fixes the issues reported for the slot reset feature merged for v6.16. This series is on top of dw-rockchip branch where the slot reset patches are merged. The patches in this series can be squashed into the respective commits since they are not merged into mainline. - Mani Manivannan Sadhasivam (2): PCI: Save and restore root port config space in pcibios_reset_secondary_bus() PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- drivers/pci/controller/pci-host-common.c | 20 +++++++++---------- drivers/pci/pci.c | 15 +++++++++++--- include/linux/pci.h | 2 +- 5 files changed, 31 insertions(+), 22 deletions(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-24 18:53 [PATCH 0/2] PCI: Slot reset fixes Manivannan Sadhasivam @ 2025-05-24 18:53 ` Manivannan Sadhasivam 2025-05-24 20:54 ` Niklas Cassel ` (2 more replies) 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam ` (2 subsequent siblings) 3 siblings, 3 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-24 18:53 UTC (permalink / raw) To: bhelgaas, lpieralisi, kw Cc: linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa, Manivannan Sadhasivam, Lukas Wunner host_bridge::reset_slot() is supposed to reset the PCI root port/slot. Once that happens, the config space content would be lost. This was reported by Niklas on the dw-rockchip based platform where the MPS setting of the root port was lost after the host_bridge::reset_slot() callback. Hence, save the config space before calling the host_bridge::reset_slot() callback and restore it afterwards. While at it, make sure that the callback is only called for root ports by checking if the bridge is behind the root bus. Fixes: d5c1e1c25b37 ("PCI/ERR: Add support for resetting the slots in a platform specific way") Reported-by: Niklas Cassel <cassel@kernel.org> Closes: https://lore.kernel.org/linux-pci/aC9OrPAfpzB_A4K2@ryzen Suggested-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> --- drivers/pci/pci.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 4d396bbab4a8..6d6e9ce2bbcc 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4985,10 +4985,19 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); int ret; - if (host->reset_slot) { + if (pci_is_root_bus(dev->bus) && host->reset_slot) { + /* + * Save the config space of the root port before doing the + * reset, since the state could be lost. The device state + * should've been saved by the caller. + */ + pci_save_state(dev); ret = host->reset_slot(host, dev); if (ret) pci_err(dev, "failed to reset slot: %d\n", ret); + else + /* Now restore it on success */ + pci_restore_state(dev); return; } -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam @ 2025-05-24 20:54 ` Niklas Cassel 2025-05-25 2:36 ` Wilfred Mallawa 2025-05-25 7:22 ` Lukas Wunner 2 siblings, 0 replies; 16+ messages in thread From: Niklas Cassel @ 2025-05-24 20:54 UTC (permalink / raw) To: Manivannan Sadhasivam Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, wilfred.mallawa, Lukas Wunner On Sun, May 25, 2025 at 12:23:03AM +0530, Manivannan Sadhasivam wrote: > host_bridge::reset_slot() is supposed to reset the PCI root port/slot. Once > that happens, the config space content would be lost. This was reported by > Niklas on the dw-rockchip based platform where the MPS setting of the root > port was lost after the host_bridge::reset_slot() callback. Hence, save the > config space before calling the host_bridge::reset_slot() callback and > restore it afterwards. > > While at it, make sure that the callback is only called for root ports by > checking if the bridge is behind the root bus. > > Fixes: d5c1e1c25b37 ("PCI/ERR: Add support for resetting the slots in a platform specific way") > Reported-by: Niklas Cassel <cassel@kernel.org> > Closes: https://lore.kernel.org/linux-pci/aC9OrPAfpzB_A4K2@ryzen > Suggested-by: Lukas Wunner <lukas@wunner.de> > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > --- > drivers/pci/pci.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 4d396bbab4a8..6d6e9ce2bbcc 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -4985,10 +4985,19 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) > struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); > int ret; > > - if (host->reset_slot) { > + if (pci_is_root_bus(dev->bus) && host->reset_slot) { > + /* > + * Save the config space of the root port before doing the > + * reset, since the state could be lost. The device state > + * should've been saved by the caller. > + */ > + pci_save_state(dev); > ret = host->reset_slot(host, dev); > if (ret) > pci_err(dev, "failed to reset slot: %d\n", ret); > + else > + /* Now restore it on success */ > + pci_restore_state(dev); > > return; > } > -- > 2.43.0 > Looks good to me: Reviewed-by: Niklas Cassel <cassel@kernel.org> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam 2025-05-24 20:54 ` Niklas Cassel @ 2025-05-25 2:36 ` Wilfred Mallawa 2025-05-25 7:22 ` Lukas Wunner 2 siblings, 0 replies; 16+ messages in thread From: Wilfred Mallawa @ 2025-05-25 2:36 UTC (permalink / raw) To: kw@linux.com, bhelgaas@google.com, manivannan.sadhasivam@linaro.org, lpieralisi@kernel.org Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, cassel@kernel.org, linux-kernel@vger.kernel.org, lukas@wunner.de On Sun, 2025-05-25 at 00:23 +0530, Manivannan Sadhasivam wrote: > host_bridge::reset_slot() is supposed to reset the PCI root > port/slot. Once > that happens, the config space content would be lost. This was > reported by > Niklas on the dw-rockchip based platform where the MPS setting of the > root > port was lost after the host_bridge::reset_slot() callback. Hence, > save the > config space before calling the host_bridge::reset_slot() callback > and > restore it afterwards. > > While at it, make sure that the callback is only called for root > ports by > checking if the bridge is behind the root bus. > > Fixes: d5c1e1c25b37 ("PCI/ERR: Add support for resetting the slots in > a platform specific way") > Reported-by: Niklas Cassel <cassel@kernel.org> > Closes: https://lore.kernel.org/linux-pci/aC9OrPAfpzB_A4K2@ryzen > Suggested-by: Lukas Wunner <lukas@wunner.de> > Signed-off-by: Manivannan Sadhasivam > <manivannan.sadhasivam@linaro.org> > --- > drivers/pci/pci.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 4d396bbab4a8..6d6e9ce2bbcc 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -4985,10 +4985,19 @@ void __weak > pcibios_reset_secondary_bus(struct pci_dev *dev) > struct pci_host_bridge *host = pci_find_host_bridge(dev- > >bus); > int ret; > > - if (host->reset_slot) { > + if (pci_is_root_bus(dev->bus) && host->reset_slot) { > + /* > + * Save the config space of the root port before > doing the > + * reset, since the state could be lost. The device > state > + * should've been saved by the caller. > + */ > + pci_save_state(dev); > ret = host->reset_slot(host, dev); > if (ret) > pci_err(dev, "failed to reset slot: %d\n", > ret); > + else > + /* Now restore it on success */ > + pci_restore_state(dev); > > return; > } Reviewed-by: Wilfred Mallawa <wilfred.mallawa@wdc.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam 2025-05-24 20:54 ` Niklas Cassel 2025-05-25 2:36 ` Wilfred Mallawa @ 2025-05-25 7:22 ` Lukas Wunner 2025-05-25 7:58 ` Manivannan Sadhasivam 2 siblings, 1 reply; 16+ messages in thread From: Lukas Wunner @ 2025-05-25 7:22 UTC (permalink / raw) To: Manivannan Sadhasivam Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa On Sun, May 25, 2025 at 12:23:03AM +0530, Manivannan Sadhasivam wrote: > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -4985,10 +4985,19 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) > struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); > int ret; > > - if (host->reset_slot) { > + if (pci_is_root_bus(dev->bus) && host->reset_slot) { > + /* > + * Save the config space of the root port before doing the > + * reset, since the state could be lost. The device state > + * should've been saved by the caller. > + */ > + pci_save_state(dev); > ret = host->reset_slot(host, dev); Nit: Capitalize terms as the PCIe Base Spec does, i.e. "Root Port". "The device state" is ambiguous as the Root Port is a device itself and even referred to by the "dev" variable. I think what you mean is "The Endpoint state". Thanks, Lukas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-25 7:22 ` Lukas Wunner @ 2025-05-25 7:58 ` Manivannan Sadhasivam 2025-05-26 6:54 ` Lukas Wunner 0 siblings, 1 reply; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-25 7:58 UTC (permalink / raw) To: Lukas Wunner Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa On Sun, May 25, 2025 at 09:22:03AM +0200, Lukas Wunner wrote: > On Sun, May 25, 2025 at 12:23:03AM +0530, Manivannan Sadhasivam wrote: > > --- a/drivers/pci/pci.c > > +++ b/drivers/pci/pci.c > > @@ -4985,10 +4985,19 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) > > struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); > > int ret; > > > > - if (host->reset_slot) { > > + if (pci_is_root_bus(dev->bus) && host->reset_slot) { > > + /* > > + * Save the config space of the root port before doing the > > + * reset, since the state could be lost. The device state > > + * should've been saved by the caller. > > + */ > > + pci_save_state(dev); > > ret = host->reset_slot(host, dev); > > Nit: Capitalize terms as the PCIe Base Spec does, i.e. "Root Port". > Ack. > "The device state" is ambiguous as the Root Port is a device itself > and even referred to by the "dev" variable. I think what you mean > is "The Endpoint state". > Yes! Will fix them while applying, thanks! - Mani -- மணிவண்ணன் சதாசிவம் ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-25 7:58 ` Manivannan Sadhasivam @ 2025-05-26 6:54 ` Lukas Wunner 2025-05-26 11:16 ` Manivannan Sadhasivam 0 siblings, 1 reply; 16+ messages in thread From: Lukas Wunner @ 2025-05-26 6:54 UTC (permalink / raw) To: Manivannan Sadhasivam Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa On Sun, May 25, 2025 at 01:28:18PM +0530, Manivannan Sadhasivam wrote: > On Sun, May 25, 2025 at 09:22:03AM +0200, Lukas Wunner wrote: > > "The device state" is ambiguous as the Root Port is a device itself > > and even referred to by the "dev" variable. I think what you mean > > is "The Endpoint state". > > > > Yes! Will fix them while applying, thanks! ICYMI, current controller/dw-rockchip branch still uses "The device state", not "The Endpoint state" in commit 56eecfc8f46f ("PCI/ERR: Add support for resetting the Root Ports in a platform specific way"). Otherwise LGTM. Thanks, Lukas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() 2025-05-26 6:54 ` Lukas Wunner @ 2025-05-26 11:16 ` Manivannan Sadhasivam 0 siblings, 0 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-26 11:16 UTC (permalink / raw) To: Lukas Wunner Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa On Mon, May 26, 2025 at 08:54:37AM +0200, Lukas Wunner wrote: > On Sun, May 25, 2025 at 01:28:18PM +0530, Manivannan Sadhasivam wrote: > > On Sun, May 25, 2025 at 09:22:03AM +0200, Lukas Wunner wrote: > > > "The device state" is ambiguous as the Root Port is a device itself > > > and even referred to by the "dev" variable. I think what you mean > > > is "The Endpoint state". > > > > > > > Yes! Will fix them while applying, thanks! > > ICYMI, current controller/dw-rockchip branch still uses > "The device state", not "The Endpoint state" in commit > 56eecfc8f46f ("PCI/ERR: Add support for resetting the > Root Ports in a platform specific way"). > Ah, missed this comment. Incorported now! - Mani -- மணிவண்ணன் சதாசிவம் ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 18:53 [PATCH 0/2] PCI: Slot reset fixes Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam @ 2025-05-24 18:53 ` Manivannan Sadhasivam 2025-05-24 20:57 ` Niklas Cassel ` (2 more replies) 2025-05-26 0:47 ` [PATCH 0/2] PCI: Slot reset fixes Wilfred Mallawa 2025-05-26 5:53 ` Manivannan Sadhasivam 3 siblings, 3 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-24 18:53 UTC (permalink / raw) To: bhelgaas, lpieralisi, kw Cc: linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa, Manivannan Sadhasivam, Lukas Wunner The callback is supposed to reset the root port, hence it should be named as 'reset_root_port'. This also warrants renaming the rest of the instances of 'reset slot' as 'reset root port' in the drivers. Suggested-by: Lukas Wunner <lukas@wunner.de> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> --- drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- drivers/pci/controller/pci-host-common.c | 20 +++++++++---------- drivers/pci/pci.c | 6 +++--- include/linux/pci.h | 2 +- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c index 193e97adf228..0cc7186758ce 100644 --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c @@ -85,7 +85,7 @@ struct rockchip_pcie_of_data { const struct pci_epc_features *epc_features; }; -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, struct pci_dev *pdev); static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip, u32 reg) @@ -261,7 +261,7 @@ static int rockchip_pcie_host_init(struct dw_pcie_rp *pp) rockchip); rockchip_pcie_enable_l0s(pci); - pp->bridge->reset_slot = rockchip_pcie_rc_reset_slot; + pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; return 0; } @@ -700,7 +700,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev) return ret; } -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, struct pci_dev *pdev) { struct pci_bus *bus = bridge->bus; @@ -759,7 +759,7 @@ static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, /* Ignore errors, the link may come up later. */ dw_pcie_wait_for_link(pci); - dev_dbg(dev, "slot reset completed\n"); + dev_dbg(dev, "Root port reset completed\n"); return ret; deinit_clk: diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c index 0c59030a2d55..840263c1efe0 100644 --- a/drivers/pci/controller/dwc/pcie-qcom.c +++ b/drivers/pci/controller/dwc/pcie-qcom.c @@ -291,7 +291,7 @@ struct qcom_pcie { }; #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) -static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, struct pci_dev *pdev); static void qcom_ep_reset_assert(struct qcom_pcie *pcie) @@ -1277,7 +1277,7 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) goto err_assert_reset; } - pp->bridge->reset_slot = qcom_pcie_reset_slot; + pp->bridge->reset_root_port = qcom_pcie_reset_root_port; return 0; @@ -1533,7 +1533,7 @@ static void qcom_pcie_icc_opp_update(struct qcom_pcie *pcie) } } -static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, struct pci_dev *pdev) { struct pci_bus *bus = bridge->bus; @@ -1589,7 +1589,7 @@ static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, qcom_pcie_start_link(pci); - dev_dbg(dev, "Slot reset completed\n"); + dev_dbg(dev, "Root port reset completed\n"); return 0; diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/controller/pci-host-common.c index afa7b140a04a..24e357e85adb 100644 --- a/drivers/pci/controller/pci-host-common.c +++ b/drivers/pci/controller/pci-host-common.c @@ -99,22 +99,22 @@ void pci_host_common_remove(struct platform_device *pdev) EXPORT_SYMBOL_GPL(pci_host_common_remove); #if IS_ENABLED(CONFIG_PCIEAER) -static pci_ers_result_t pci_host_reset_slot(struct pci_dev *dev) +static pci_ers_result_t pci_host_reset_root_port(struct pci_dev *dev) { int ret; ret = pci_bus_error_reset(dev); if (ret) { - pci_err(dev, "Failed to reset slot: %d\n", ret); + pci_err(dev, "Failed to reset root port: %d\n", ret); return PCI_ERS_RESULT_DISCONNECT; } - pci_info(dev, "Slot has been reset\n"); + pci_info(dev, "Root port has been reset\n"); return PCI_ERS_RESULT_RECOVERED; } -static void pci_host_recover_slots(struct pci_host_bridge *host) +static void pci_host_reset_root_ports(struct pci_host_bridge *host) { struct pci_bus *bus = host->bus; struct pci_dev *dev; @@ -124,11 +124,11 @@ static void pci_host_recover_slots(struct pci_host_bridge *host) continue; pcie_do_recovery(dev, pci_channel_io_frozen, - pci_host_reset_slot); + pci_host_reset_root_port); } } #else -static void pci_host_recover_slots(struct pci_host_bridge *host) +static void pci_host_reset_root_ports(struct pci_host_bridge *host) { struct pci_bus *bus = host->bus; struct pci_dev *dev; @@ -140,17 +140,17 @@ static void pci_host_recover_slots(struct pci_host_bridge *host) ret = pci_bus_error_reset(dev); if (ret) - pci_err(dev, "Failed to reset slot: %d\n", ret); + pci_err(dev, "Failed to reset root port: %d\n", ret); else - pci_info(dev, "Slot has been reset\n"); + pci_info(dev, "Root port has been reset\n"); } } #endif void pci_host_handle_link_down(struct pci_host_bridge *bridge) { - dev_info(&bridge->dev, "Recovering slots due to Link Down\n"); - pci_host_recover_slots(bridge); + dev_info(&bridge->dev, "Recovering root ports due to Link Down\n"); + pci_host_reset_root_ports(bridge); } EXPORT_SYMBOL_GPL(pci_host_handle_link_down); diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 6d6e9ce2bbcc..154d33e1af84 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -4985,16 +4985,16 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); int ret; - if (pci_is_root_bus(dev->bus) && host->reset_slot) { + if (pci_is_root_bus(dev->bus) && host->reset_root_port) { /* * Save the config space of the root port before doing the * reset, since the state could be lost. The device state * should've been saved by the caller. */ pci_save_state(dev); - ret = host->reset_slot(host, dev); + ret = host->reset_root_port(host, dev); if (ret) - pci_err(dev, "failed to reset slot: %d\n", ret); + pci_err(dev, "failed to reset root port: %d\n", ret); else /* Now restore it on success */ pci_restore_state(dev); diff --git a/include/linux/pci.h b/include/linux/pci.h index 8d7d2a49b76c..ab4f4a668f6d 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -599,7 +599,7 @@ struct pci_host_bridge { void (*release_fn)(struct pci_host_bridge *); int (*enable_device)(struct pci_host_bridge *bridge, struct pci_dev *dev); void (*disable_device)(struct pci_host_bridge *bridge, struct pci_dev *dev); - int (*reset_slot)(struct pci_host_bridge *bridge, struct pci_dev *dev); + int (*reset_root_port)(struct pci_host_bridge *bridge, struct pci_dev *dev); void *release_data; unsigned int ignore_reset_delay:1; /* For entire hierarchy */ unsigned int no_ext_tags:1; /* No Extended Tags */ -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam @ 2025-05-24 20:57 ` Niklas Cassel 2025-05-25 2:38 ` Wilfred Mallawa 2025-05-25 8:00 ` Manivannan Sadhasivam 2025-05-24 21:51 ` kernel test robot 2025-05-25 7:26 ` Lukas Wunner 2 siblings, 2 replies; 16+ messages in thread From: Niklas Cassel @ 2025-05-24 20:57 UTC (permalink / raw) To: Manivannan Sadhasivam Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, wilfred.mallawa, Lukas Wunner On Sun, May 25, 2025 at 12:23:04AM +0530, Manivannan Sadhasivam wrote: > The callback is supposed to reset the root port, hence it should be named > as 'reset_root_port'. This also warrants renaming the rest of the instances > of 'reset slot' as 'reset root port' in the drivers. > > Suggested-by: Lukas Wunner <lukas@wunner.de> > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > --- > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- > drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- > drivers/pci/controller/pci-host-common.c | 20 +++++++++---------- > drivers/pci/pci.c | 6 +++--- > include/linux/pci.h | 2 +- > 5 files changed, 22 insertions(+), 22 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > index 193e97adf228..0cc7186758ce 100644 > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > @@ -85,7 +85,7 @@ struct rockchip_pcie_of_data { > const struct pci_epc_features *epc_features; > }; > > -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, > +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, > struct pci_dev *pdev); > > static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip, u32 reg) > @@ -261,7 +261,7 @@ static int rockchip_pcie_host_init(struct dw_pcie_rp *pp) > rockchip); > > rockchip_pcie_enable_l0s(pci); > - pp->bridge->reset_slot = rockchip_pcie_rc_reset_slot; > + pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; You just renamed the function to rockchip_pcie_rc_reset_root_port(), but you seem to use the old name here, so I would guess that this will not compile. With the function pointer renamed, this patch looks good to me: Reviewed-by: Niklas Cassel <cassel@kernel.org> > > return 0; > } > @@ -700,7 +700,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev) > return ret; > } > > -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, > +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, > struct pci_dev *pdev) > { > struct pci_bus *bus = bridge->bus; > @@ -759,7 +759,7 @@ static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, > > /* Ignore errors, the link may come up later. */ > dw_pcie_wait_for_link(pci); > - dev_dbg(dev, "slot reset completed\n"); > + dev_dbg(dev, "Root port reset completed\n"); > return ret; > > deinit_clk: > diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c > index 0c59030a2d55..840263c1efe0 100644 > --- a/drivers/pci/controller/dwc/pcie-qcom.c > +++ b/drivers/pci/controller/dwc/pcie-qcom.c > @@ -291,7 +291,7 @@ struct qcom_pcie { > }; > > #define to_qcom_pcie(x) dev_get_drvdata((x)->dev) > -static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, > +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, > struct pci_dev *pdev); > > static void qcom_ep_reset_assert(struct qcom_pcie *pcie) > @@ -1277,7 +1277,7 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp) > goto err_assert_reset; > } > > - pp->bridge->reset_slot = qcom_pcie_reset_slot; > + pp->bridge->reset_root_port = qcom_pcie_reset_root_port; > > return 0; > > @@ -1533,7 +1533,7 @@ static void qcom_pcie_icc_opp_update(struct qcom_pcie *pcie) > } > } > > -static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, > +static int qcom_pcie_reset_root_port(struct pci_host_bridge *bridge, > struct pci_dev *pdev) > { > struct pci_bus *bus = bridge->bus; > @@ -1589,7 +1589,7 @@ static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, > > qcom_pcie_start_link(pci); > > - dev_dbg(dev, "Slot reset completed\n"); > + dev_dbg(dev, "Root port reset completed\n"); > > return 0; > > diff --git a/drivers/pci/controller/pci-host-common.c b/drivers/pci/controller/pci-host-common.c > index afa7b140a04a..24e357e85adb 100644 > --- a/drivers/pci/controller/pci-host-common.c > +++ b/drivers/pci/controller/pci-host-common.c > @@ -99,22 +99,22 @@ void pci_host_common_remove(struct platform_device *pdev) > EXPORT_SYMBOL_GPL(pci_host_common_remove); > > #if IS_ENABLED(CONFIG_PCIEAER) > -static pci_ers_result_t pci_host_reset_slot(struct pci_dev *dev) > +static pci_ers_result_t pci_host_reset_root_port(struct pci_dev *dev) > { > int ret; > > ret = pci_bus_error_reset(dev); > if (ret) { > - pci_err(dev, "Failed to reset slot: %d\n", ret); > + pci_err(dev, "Failed to reset root port: %d\n", ret); > return PCI_ERS_RESULT_DISCONNECT; > } > > - pci_info(dev, "Slot has been reset\n"); > + pci_info(dev, "Root port has been reset\n"); > > return PCI_ERS_RESULT_RECOVERED; > } > > -static void pci_host_recover_slots(struct pci_host_bridge *host) > +static void pci_host_reset_root_ports(struct pci_host_bridge *host) > { > struct pci_bus *bus = host->bus; > struct pci_dev *dev; > @@ -124,11 +124,11 @@ static void pci_host_recover_slots(struct pci_host_bridge *host) > continue; > > pcie_do_recovery(dev, pci_channel_io_frozen, > - pci_host_reset_slot); > + pci_host_reset_root_port); > } > } > #else > -static void pci_host_recover_slots(struct pci_host_bridge *host) > +static void pci_host_reset_root_ports(struct pci_host_bridge *host) > { > struct pci_bus *bus = host->bus; > struct pci_dev *dev; > @@ -140,17 +140,17 @@ static void pci_host_recover_slots(struct pci_host_bridge *host) > > ret = pci_bus_error_reset(dev); > if (ret) > - pci_err(dev, "Failed to reset slot: %d\n", ret); > + pci_err(dev, "Failed to reset root port: %d\n", ret); > else > - pci_info(dev, "Slot has been reset\n"); > + pci_info(dev, "Root port has been reset\n"); > } > } > #endif > > void pci_host_handle_link_down(struct pci_host_bridge *bridge) > { > - dev_info(&bridge->dev, "Recovering slots due to Link Down\n"); > - pci_host_recover_slots(bridge); > + dev_info(&bridge->dev, "Recovering root ports due to Link Down\n"); > + pci_host_reset_root_ports(bridge); > } > EXPORT_SYMBOL_GPL(pci_host_handle_link_down); > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 6d6e9ce2bbcc..154d33e1af84 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -4985,16 +4985,16 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) > struct pci_host_bridge *host = pci_find_host_bridge(dev->bus); > int ret; > > - if (pci_is_root_bus(dev->bus) && host->reset_slot) { > + if (pci_is_root_bus(dev->bus) && host->reset_root_port) { > /* > * Save the config space of the root port before doing the > * reset, since the state could be lost. The device state > * should've been saved by the caller. > */ > pci_save_state(dev); > - ret = host->reset_slot(host, dev); > + ret = host->reset_root_port(host, dev); > if (ret) > - pci_err(dev, "failed to reset slot: %d\n", ret); > + pci_err(dev, "failed to reset root port: %d\n", ret); > else > /* Now restore it on success */ > pci_restore_state(dev); > diff --git a/include/linux/pci.h b/include/linux/pci.h > index 8d7d2a49b76c..ab4f4a668f6d 100644 > --- a/include/linux/pci.h > +++ b/include/linux/pci.h > @@ -599,7 +599,7 @@ struct pci_host_bridge { > void (*release_fn)(struct pci_host_bridge *); > int (*enable_device)(struct pci_host_bridge *bridge, struct pci_dev *dev); > void (*disable_device)(struct pci_host_bridge *bridge, struct pci_dev *dev); > - int (*reset_slot)(struct pci_host_bridge *bridge, struct pci_dev *dev); > + int (*reset_root_port)(struct pci_host_bridge *bridge, struct pci_dev *dev); > void *release_data; > unsigned int ignore_reset_delay:1; /* For entire hierarchy */ > unsigned int no_ext_tags:1; /* No Extended Tags */ > -- > 2.43.0 > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 20:57 ` Niklas Cassel @ 2025-05-25 2:38 ` Wilfred Mallawa 2025-05-25 8:00 ` Manivannan Sadhasivam 1 sibling, 0 replies; 16+ messages in thread From: Wilfred Mallawa @ 2025-05-25 2:38 UTC (permalink / raw) To: cassel@kernel.org, manivannan.sadhasivam@linaro.org Cc: lukas@wunner.de, kw@linux.com, bhelgaas@google.com, linux-arm-msm@vger.kernel.org, linux-pci@vger.kernel.org, lpieralisi@kernel.org, linux-kernel@vger.kernel.org On Sat, 2025-05-24 at 22:57 +0200, Niklas Cassel wrote: > On Sun, May 25, 2025 at 12:23:04AM +0530, Manivannan Sadhasivam > wrote: > > The callback is supposed to reset the root port, hence it should be > > named > > as 'reset_root_port'. This also warrants renaming the rest of the > > instances > > of 'reset slot' as 'reset root port' in the drivers. > > > > Suggested-by: Lukas Wunner <lukas@wunner.de> > > Signed-off-by: Manivannan Sadhasivam > > <manivannan.sadhasivam@linaro.org> > > --- > > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- > > drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- > > drivers/pci/controller/pci-host-common.c | 20 +++++++++------ > > ---- > > drivers/pci/pci.c | 6 +++--- > > include/linux/pci.h | 2 +- > > 5 files changed, 22 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > index 193e97adf228..0cc7186758ce 100644 > > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > @@ -85,7 +85,7 @@ struct rockchip_pcie_of_data { > > const struct pci_epc_features *epc_features; > > }; > > > > -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge > > *bridge, > > +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge > > *bridge, > > struct pci_dev *pdev); > > > > static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip, > > u32 reg) > > @@ -261,7 +261,7 @@ static int rockchip_pcie_host_init(struct > > dw_pcie_rp *pp) > > rockchip); > > > > rockchip_pcie_enable_l0s(pci); > > - pp->bridge->reset_slot = rockchip_pcie_rc_reset_slot; > > + pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; > > You just renamed the function to rockchip_pcie_rc_reset_root_port(), > but you seem to use the old name here, so I would guess that this > will > not compile. > > With the function pointer renamed, this patch looks good to me: > Reviewed-by: Niklas Cassel <cassel@kernel.org> > Reviewed-by: Wilfred Mallawa <wilfred.mallawa@wdc.com> > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 20:57 ` Niklas Cassel 2025-05-25 2:38 ` Wilfred Mallawa @ 2025-05-25 8:00 ` Manivannan Sadhasivam 1 sibling, 0 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-25 8:00 UTC (permalink / raw) To: Niklas Cassel Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, wilfred.mallawa, Lukas Wunner On Sat, May 24, 2025 at 10:57:44PM +0200, Niklas Cassel wrote: > On Sun, May 25, 2025 at 12:23:04AM +0530, Manivannan Sadhasivam wrote: > > The callback is supposed to reset the root port, hence it should be named > > as 'reset_root_port'. This also warrants renaming the rest of the instances > > of 'reset slot' as 'reset root port' in the drivers. > > > > Suggested-by: Lukas Wunner <lukas@wunner.de> > > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> > > --- > > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- > > drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- > > drivers/pci/controller/pci-host-common.c | 20 +++++++++---------- > > drivers/pci/pci.c | 6 +++--- > > include/linux/pci.h | 2 +- > > 5 files changed, 22 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/pci/controller/dwc/pcie-dw-rockchip.c b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > index 193e97adf228..0cc7186758ce 100644 > > --- a/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > +++ b/drivers/pci/controller/dwc/pcie-dw-rockchip.c > > @@ -85,7 +85,7 @@ struct rockchip_pcie_of_data { > > const struct pci_epc_features *epc_features; > > }; > > > > -static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, > > +static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, > > struct pci_dev *pdev); > > > > static int rockchip_pcie_readl_apb(struct rockchip_pcie *rockchip, u32 reg) > > @@ -261,7 +261,7 @@ static int rockchip_pcie_host_init(struct dw_pcie_rp *pp) > > rockchip); > > > > rockchip_pcie_enable_l0s(pci); > > - pp->bridge->reset_slot = rockchip_pcie_rc_reset_slot; > > + pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; > > You just renamed the function to rockchip_pcie_rc_reset_root_port(), > but you seem to use the old name here, so I would guess that this will > not compile. > Yeah, I guess I exposed my sed skills here :P Will fix it up while applying. > With the function pointer renamed, this patch looks good to me: > Reviewed-by: Niklas Cassel <cassel@kernel.org> > Thanks! - Mani -- மணிவண்ணன் சதாசிவம் ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam 2025-05-24 20:57 ` Niklas Cassel @ 2025-05-24 21:51 ` kernel test robot 2025-05-25 7:26 ` Lukas Wunner 2 siblings, 0 replies; 16+ messages in thread From: kernel test robot @ 2025-05-24 21:51 UTC (permalink / raw) To: Manivannan Sadhasivam, bhelgaas, lpieralisi, kw Cc: oe-kbuild-all, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa, Manivannan Sadhasivam, Lukas Wunner Hi Manivannan, kernel test robot noticed the following build errors: [auto build test ERROR on pci/next] [also build test ERROR on next-20250523] [cannot apply to pci/for-linus linus/master v6.15-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Manivannan-Sadhasivam/PCI-Save-and-restore-root-port-config-space-in-pcibios_reset_secondary_bus/20250525-025535 base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next patch link: https://lore.kernel.org/r/20250524185304.26698-3-manivannan.sadhasivam%40linaro.org patch subject: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() config: csky-randconfig-002-20250525 (https://download.01.org/0day-ci/archive/20250525/202505250525.2csmeURe-lkp@intel.com/config) compiler: csky-linux-gcc (GCC) 10.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250525/202505250525.2csmeURe-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202505250525.2csmeURe-lkp@intel.com/ All error/warnings (new ones prefixed by >>): drivers/pci/controller/dwc/pcie-dw-rockchip.c: In function 'rockchip_pcie_host_init': >> drivers/pci/controller/dwc/pcie-dw-rockchip.c:264:32: error: 'rockchip_pcie_rc_reset_slot' undeclared (first use in this function); did you mean 'rockchip_pcie_rc_reset_root_port'? 264 | pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ | rockchip_pcie_rc_reset_root_port drivers/pci/controller/dwc/pcie-dw-rockchip.c:264:32: note: each undeclared identifier is reported only once for each function it appears in At top level: >> drivers/pci/controller/dwc/pcie-dw-rockchip.c:703:12: warning: 'rockchip_pcie_rc_reset_root_port' defined but not used [-Wunused-function] 703 | static int rockchip_pcie_rc_reset_root_port(struct pci_host_bridge *bridge, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +264 drivers/pci/controller/dwc/pcie-dw-rockchip.c 244 245 static int rockchip_pcie_host_init(struct dw_pcie_rp *pp) 246 { 247 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); 248 struct rockchip_pcie *rockchip = to_rockchip_pcie(pci); 249 struct device *dev = rockchip->pci.dev; 250 int irq, ret; 251 252 irq = of_irq_get_byname(dev->of_node, "legacy"); 253 if (irq < 0) 254 return irq; 255 256 ret = rockchip_pcie_init_irq_domain(rockchip); 257 if (ret < 0) 258 dev_err(dev, "failed to init irq domain\n"); 259 260 irq_set_chained_handler_and_data(irq, rockchip_pcie_intx_handler, 261 rockchip); 262 263 rockchip_pcie_enable_l0s(pci); > 264 pp->bridge->reset_root_port = rockchip_pcie_rc_reset_slot; 265 266 return 0; 267 } 268 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam 2025-05-24 20:57 ` Niklas Cassel 2025-05-24 21:51 ` kernel test robot @ 2025-05-25 7:26 ` Lukas Wunner 2 siblings, 0 replies; 16+ messages in thread From: Lukas Wunner @ 2025-05-25 7:26 UTC (permalink / raw) To: Manivannan Sadhasivam Cc: bhelgaas, lpieralisi, kw, linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa Eight more occurrences where "Root Port" should be capitalized: On Sun, May 25, 2025 at 12:23:04AM +0530, Manivannan Sadhasivam wrote: > @@ -759,7 +759,7 @@ static int rockchip_pcie_rc_reset_slot(struct pci_host_bridge *bridge, > > /* Ignore errors, the link may come up later. */ > dw_pcie_wait_for_link(pci); > - dev_dbg(dev, "slot reset completed\n"); > + dev_dbg(dev, "Root port reset completed\n"); > return ret; > > deinit_clk: > @@ -1589,7 +1589,7 @@ static int qcom_pcie_reset_slot(struct pci_host_bridge *bridge, > > qcom_pcie_start_link(pci); > > - dev_dbg(dev, "Slot reset completed\n"); > + dev_dbg(dev, "Root port reset completed\n"); > > return 0; > > @@ -99,22 +99,22 @@ void pci_host_common_remove(struct platform_device *pdev) > ret = pci_bus_error_reset(dev); > if (ret) { > - pci_err(dev, "Failed to reset slot: %d\n", ret); > + pci_err(dev, "Failed to reset root port: %d\n", ret); > return PCI_ERS_RESULT_DISCONNECT; > } > > - pci_info(dev, "Slot has been reset\n"); > + pci_info(dev, "Root port has been reset\n"); > > return PCI_ERS_RESULT_RECOVERED; > } > @@ -140,17 +140,17 @@ static void pci_host_recover_slots(struct pci_host_bridge *host) > > ret = pci_bus_error_reset(dev); > if (ret) > - pci_err(dev, "Failed to reset slot: %d\n", ret); > + pci_err(dev, "Failed to reset root port: %d\n", ret); > else > - pci_info(dev, "Slot has been reset\n"); > + pci_info(dev, "Root port has been reset\n"); > } > } > #endif > > void pci_host_handle_link_down(struct pci_host_bridge *bridge) > { > - dev_info(&bridge->dev, "Recovering slots due to Link Down\n"); > - pci_host_recover_slots(bridge); > + dev_info(&bridge->dev, "Recovering root ports due to Link Down\n"); > + pci_host_reset_root_ports(bridge); > } > EXPORT_SYMBOL_GPL(pci_host_handle_link_down); > > @@ -4985,16 +4985,16 @@ void __weak pcibios_reset_secondary_bus(struct pci_dev *dev) > + ret = host->reset_root_port(host, dev); > if (ret) > - pci_err(dev, "failed to reset slot: %d\n", ret); > + pci_err(dev, "failed to reset root port: %d\n", ret); > else > /* Now restore it on success */ > pci_restore_state(dev); ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/2] PCI: Slot reset fixes 2025-05-24 18:53 [PATCH 0/2] PCI: Slot reset fixes Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam @ 2025-05-26 0:47 ` Wilfred Mallawa 2025-05-26 5:53 ` Manivannan Sadhasivam 3 siblings, 0 replies; 16+ messages in thread From: Wilfred Mallawa @ 2025-05-26 0:47 UTC (permalink / raw) To: kw@linux.com, bhelgaas@google.com, manivannan.sadhasivam@linaro.org, lpieralisi@kernel.org Cc: linux-pci@vger.kernel.org, linux-arm-msm@vger.kernel.org, cassel@kernel.org, linux-kernel@vger.kernel.org On Sun, 2025-05-25 at 00:23 +0530, Manivannan Sadhasivam wrote: > Hi, > > This series fixes the issues reported for the slot reset feature > merged for > v6.16. > > This series is on top of dw-rockchip branch where the slot reset > patches are > merged. The patches in this series can be squashed into the > respective commits > since they are not merged into mainline. > > - Mani > > Manivannan Sadhasivam (2): > PCI: Save and restore root port config space in > pcibios_reset_secondary_bus() > PCI: Rename host_bridge::reset_slot() to > host_bridge::reset_root_port() > > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- > drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- > drivers/pci/controller/pci-host-common.c | 20 +++++++++-------- > -- > drivers/pci/pci.c | 15 +++++++++++--- > include/linux/pci.h | 2 +- > 5 files changed, 31 insertions(+), 22 deletions(-) Hey Mani, I tested this series with the Rock5B RC <-> Rock5B EP. As expected, bus resets now work as intended. Feel free to use: Tested-by: Wilfred Mallawa <wilfred.mallawa@wdc.com> Cheers, Wilfred ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 0/2] PCI: Slot reset fixes 2025-05-24 18:53 [PATCH 0/2] PCI: Slot reset fixes Manivannan Sadhasivam ` (2 preceding siblings ...) 2025-05-26 0:47 ` [PATCH 0/2] PCI: Slot reset fixes Wilfred Mallawa @ 2025-05-26 5:53 ` Manivannan Sadhasivam 3 siblings, 0 replies; 16+ messages in thread From: Manivannan Sadhasivam @ 2025-05-26 5:53 UTC (permalink / raw) To: bhelgaas, lpieralisi, kw Cc: linux-pci, linux-arm-msm, linux-kernel, cassel, wilfred.mallawa On Sun, May 25, 2025 at 12:23:02AM +0530, Manivannan Sadhasivam wrote: > Hi, > > This series fixes the issues reported for the slot reset feature merged for > v6.16. > > This series is on top of dw-rockchip branch where the slot reset patches are > merged. The patches in this series can be squashed into the respective commits > since they are not merged into mainline. > Squashed to dw-rockchip! - Mani > - Mani > > Manivannan Sadhasivam (2): > PCI: Save and restore root port config space in > pcibios_reset_secondary_bus() > PCI: Rename host_bridge::reset_slot() to > host_bridge::reset_root_port() > > drivers/pci/controller/dwc/pcie-dw-rockchip.c | 8 ++++---- > drivers/pci/controller/dwc/pcie-qcom.c | 8 ++++---- > drivers/pci/controller/pci-host-common.c | 20 +++++++++---------- > drivers/pci/pci.c | 15 +++++++++++--- > include/linux/pci.h | 2 +- > 5 files changed, 31 insertions(+), 22 deletions(-) > > -- > 2.43.0 > -- மணிவண்ணன் சதாசிவம் ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-05-26 11:16 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-05-24 18:53 [PATCH 0/2] PCI: Slot reset fixes Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 1/2] PCI: Save and restore root port config space in pcibios_reset_secondary_bus() Manivannan Sadhasivam 2025-05-24 20:54 ` Niklas Cassel 2025-05-25 2:36 ` Wilfred Mallawa 2025-05-25 7:22 ` Lukas Wunner 2025-05-25 7:58 ` Manivannan Sadhasivam 2025-05-26 6:54 ` Lukas Wunner 2025-05-26 11:16 ` Manivannan Sadhasivam 2025-05-24 18:53 ` [PATCH 2/2] PCI: Rename host_bridge::reset_slot() to host_bridge::reset_root_port() Manivannan Sadhasivam 2025-05-24 20:57 ` Niklas Cassel 2025-05-25 2:38 ` Wilfred Mallawa 2025-05-25 8:00 ` Manivannan Sadhasivam 2025-05-24 21:51 ` kernel test robot 2025-05-25 7:26 ` Lukas Wunner 2025-05-26 0:47 ` [PATCH 0/2] PCI: Slot reset fixes Wilfred Mallawa 2025-05-26 5:53 ` Manivannan Sadhasivam
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).