* [PATCH] PCI: Prevent LS7A Bus Master clearing on kexec
@ 2024-07-26 9:28 Huacai Chen
2024-08-01 23:12 ` Bjorn Helgaas
0 siblings, 1 reply; 3+ messages in thread
From: Huacai Chen @ 2024-07-26 9:28 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: linux-pci, Jianmin Lv, Xuefeng Li, Huacai Chen, Jiaxun Yang,
Huacai Chen, Ming Wang
This is similar to commit 62b6dee1b44aa23b39355 ("PCI/portdrv: Prevent
LS7A Bus Master clearing on shutdown"), which prevents LS7A Bus Master
clearing on kexec.
Only skip Bus Master clearing on bridges because endpoint devices still
need it.
Signed-off-by: Ming Wang <wangming01@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
---
drivers/pci/pci-driver.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index f412ef73a6e4..b7d3a4d8532f 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -517,7 +517,7 @@ static void pci_device_shutdown(struct device *dev)
* If it is not a kexec reboot, firmware will hit the PCI
* devices with big hammer and stop their DMA any way.
*/
- if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
+ if (kexec_in_progress && !pci_is_bridge(pci_dev) && (pci_dev->current_state <= PCI_D3hot))
pci_clear_master(pci_dev);
}
--
2.43.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] PCI: Prevent LS7A Bus Master clearing on kexec
2024-07-26 9:28 [PATCH] PCI: Prevent LS7A Bus Master clearing on kexec Huacai Chen
@ 2024-08-01 23:12 ` Bjorn Helgaas
2024-08-04 1:22 ` Huacai Chen
0 siblings, 1 reply; 3+ messages in thread
From: Bjorn Helgaas @ 2024-08-01 23:12 UTC (permalink / raw)
To: Huacai Chen
Cc: Bjorn Helgaas, linux-pci, Jianmin Lv, Xuefeng Li, Huacai Chen,
Jiaxun Yang, Ming Wang
On Fri, Jul 26, 2024 at 05:28:29PM +0800, Huacai Chen wrote:
> This is similar to commit 62b6dee1b44aa23b39355 ("PCI/portdrv: Prevent
> LS7A Bus Master clearing on shutdown"), which prevents LS7A Bus Master
> clearing on kexec.
>
> Only skip Bus Master clearing on bridges because endpoint devices still
> need it.
I think we need some explanation here and a hint in the comment below
about why this is needed.
I guess the point is to work around the LS7A defect that clearing
PCI_COMMAND_MASTER prevents MMIO requests from going downstream, and
we may need to do that even after .shutdown(), e.g., to print console
messages?
And in this case we rely on .shutdown() for the downstream devices to
disable interrupts and DMA?
s/62b6dee1b44aa23b39355/62b6dee1b44a/
> Signed-off-by: Ming Wang <wangming01@loongson.cn>
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> ---
> drivers/pci/pci-driver.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> index f412ef73a6e4..b7d3a4d8532f 100644
> --- a/drivers/pci/pci-driver.c
> +++ b/drivers/pci/pci-driver.c
> @@ -517,7 +517,7 @@ static void pci_device_shutdown(struct device *dev)
> * If it is not a kexec reboot, firmware will hit the PCI
> * devices with big hammer and stop their DMA any way.
> */
> - if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
> + if (kexec_in_progress && !pci_is_bridge(pci_dev) && (pci_dev->current_state <= PCI_D3hot))
> pci_clear_master(pci_dev);
> }
>
> --
> 2.43.5
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] PCI: Prevent LS7A Bus Master clearing on kexec
2024-08-01 23:12 ` Bjorn Helgaas
@ 2024-08-04 1:22 ` Huacai Chen
0 siblings, 0 replies; 3+ messages in thread
From: Huacai Chen @ 2024-08-04 1:22 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Huacai Chen, Bjorn Helgaas, linux-pci, Jianmin Lv, Xuefeng Li,
Jiaxun Yang, Ming Wang
On Fri, Aug 2, 2024 at 7:12 AM Bjorn Helgaas <helgaas@kernel.org> wrote:
>
> On Fri, Jul 26, 2024 at 05:28:29PM +0800, Huacai Chen wrote:
> > This is similar to commit 62b6dee1b44aa23b39355 ("PCI/portdrv: Prevent
> > LS7A Bus Master clearing on shutdown"), which prevents LS7A Bus Master
> > clearing on kexec.
> >
> > Only skip Bus Master clearing on bridges because endpoint devices still
> > need it.
>
> I think we need some explanation here and a hint in the comment below
> about why this is needed.
>
> I guess the point is to work around the LS7A defect that clearing
> PCI_COMMAND_MASTER prevents MMIO requests from going downstream, and
> we may need to do that even after .shutdown(), e.g., to print console
> messages?
>
> And in this case we rely on .shutdown() for the downstream devices to
> disable interrupts and DMA?
Yes, this is the key point, I will add the above information to the
commit message.
>
> s/62b6dee1b44aa23b39355/62b6dee1b44a/
OK, thanks.
Huacai
>
> > Signed-off-by: Ming Wang <wangming01@loongson.cn>
> > Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> > ---
> > drivers/pci/pci-driver.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
> > index f412ef73a6e4..b7d3a4d8532f 100644
> > --- a/drivers/pci/pci-driver.c
> > +++ b/drivers/pci/pci-driver.c
> > @@ -517,7 +517,7 @@ static void pci_device_shutdown(struct device *dev)
> > * If it is not a kexec reboot, firmware will hit the PCI
> > * devices with big hammer and stop their DMA any way.
> > */
> > - if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
> > + if (kexec_in_progress && !pci_is_bridge(pci_dev) && (pci_dev->current_state <= PCI_D3hot))
> > pci_clear_master(pci_dev);
> > }
> >
> > --
> > 2.43.5
> >
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-08-04 1:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-26 9:28 [PATCH] PCI: Prevent LS7A Bus Master clearing on kexec Huacai Chen
2024-08-01 23:12 ` Bjorn Helgaas
2024-08-04 1:22 ` Huacai Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox