diff mbox series

PCI: dwc: endpoint: Clear outbound address on unmap

Message ID 20241004141000.5080-1-dlemoal@kernel.org (mailing list archive)
State Accepted
Delegated to: Krzysztof Wilczyński
Headers show
Series PCI: dwc: endpoint: Clear outbound address on unmap | expand

Commit Message

Damien Le Moal Oct. 4, 2024, 2:10 p.m. UTC
In addition to clearing the atu index bit in ob_window_map, also clear
the address mapped (outbound_addr array) in dw_pcie_ep_unmap_addr(), to
make sure that dw_pcie_find_index() does not endup matching again an ATU
index that was already unmapped.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
 drivers/pci/controller/dwc/pcie-designware-ep.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Bjorn Helgaas Oct. 4, 2024, 10:10 p.m. UTC | #1
On Fri, Oct 04, 2024 at 11:10:00PM +0900, Damien Le Moal wrote:
> In addition to clearing the atu index bit in ob_window_map, also clear
> the address mapped (outbound_addr array) in dw_pcie_ep_unmap_addr(), to
> make sure that dw_pcie_find_index() does not endup matching again an ATU
> index that was already unmapped.

s/atu/ATU/ to match other usage
s/endup matching again/match/

No need to repost for this, whoever applies it can tweak it.

> Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
> ---
>  drivers/pci/controller/dwc/pcie-designware-ep.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
> index 501e527c188e..7f4c082a2d90 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-ep.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
> @@ -294,6 +294,7 @@ static void dw_pcie_ep_unmap_addr(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
>  	if (ret < 0)
>  		return;
>  
> +	ep->outbound_addr[atu_index] = 0;
>  	dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, atu_index);
>  	clear_bit(atu_index, ep->ob_window_map);
>  }
> -- 
> 2.46.2
>
Manivannan Sadhasivam Oct. 15, 2024, 5:54 a.m. UTC | #2
On Fri, Oct 04, 2024 at 11:10:00PM +0900, Damien Le Moal wrote:
> In addition to clearing the atu index bit in ob_window_map, also clear
> the address mapped (outbound_addr array) in dw_pcie_ep_unmap_addr(), to
> make sure that dw_pcie_find_index() does not endup matching again an ATU
> index that was already unmapped.
> 
> Signed-off-by: Damien Le Moal <dlemoal@kernel.org>

Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>

- Mani

> ---
>  drivers/pci/controller/dwc/pcie-designware-ep.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
> index 501e527c188e..7f4c082a2d90 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-ep.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
> @@ -294,6 +294,7 @@ static void dw_pcie_ep_unmap_addr(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
>  	if (ret < 0)
>  		return;
>  
> +	ep->outbound_addr[atu_index] = 0;
>  	dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, atu_index);
>  	clear_bit(atu_index, ep->ob_window_map);
>  }
> -- 
> 2.46.2
>
Krzysztof Wilczyński Oct. 27, 2024, 8:07 p.m. UTC | #3
Hello,

> In addition to clearing the atu index bit in ob_window_map, also clear
> the address mapped (outbound_addr array) in dw_pcie_ep_unmap_addr(), to
> make sure that dw_pcie_find_index() does not endup matching again an ATU
> index that was already unmapped.

Applied to controller/dwc, thank you!

[1/1] PCI: dwc: endpoint: Clear outbound address on unmap
      https://git.kernel.org/pci/pci/c/12dd12821f1e

	Krzysztof
diff mbox series

Patch

diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 501e527c188e..7f4c082a2d90 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -294,6 +294,7 @@  static void dw_pcie_ep_unmap_addr(struct pci_epc *epc, u8 func_no, u8 vfunc_no,
 	if (ret < 0)
 		return;
 
+	ep->outbound_addr[atu_index] = 0;
 	dw_pcie_disable_atu(pci, PCIE_ATU_REGION_DIR_OB, atu_index);
 	clear_bit(atu_index, ep->ob_window_map);
 }