[PATCH 05/13] PCI: dwc: Ensure all outbound ATU windows are reset
Jingoo Han
jingoohan1 at gmail.com
Fri Oct 30 09:12:36 AEDT 2020
On 10/28/20, 4:47 PM, Rob Herring wrote:
>
> The Layerscape driver clears the ATU registers which may have been
> configured by the bootloader. Any driver could have the same issue
> and doing it for all drivers doesn't hurt, so let's move it into the
> common DWC code.
>
> Cc: Minghuan Lian <minghuan.Lian at nxp.com>
> Cc: Mingkai Hu <mingkai.hu at nxp.com>
> Cc: Roy Zang <roy.zang at nxp.com>
> Cc: Lorenzo Pieralisi <lorenzo.pieralisi at arm.com>
> Cc: Bjorn Helgaas <bhelgaas at google.com>
> Cc: Jingoo Han <jingoohan1 at gmail.com>
Acked-by: Jingoo Han <jingoohan1 at gmail.com>
Best regards,
Jingoo Han
> Cc: Gustavo Pimentel <gustavo.pimentel at synopsys.com>
> Cc: linuxppc-dev at lists.ozlabs.org
> Signed-off-by: Rob Herring <robh at kernel.org>
> ---
> drivers/pci/controller/dwc/pci-layerscape.c | 14 --------------
> drivers/pci/controller/dwc/pcie-designware-host.c | 5 +++++
> 2 files changed, 5 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pci-layerscape.c b/drivers/pci/controller/dwc/pci-layerscape.c
> index f24f79a70d9a..53e56d54c482 100644
> --- a/drivers/pci/controller/dwc/pci-layerscape.c
> +++ b/drivers/pci/controller/dwc/pci-layerscape.c
> @@ -83,14 +83,6 @@ static void ls_pcie_drop_msg_tlp(struct ls_pcie *pcie)
> iowrite32(val, pci->dbi_base + PCIE_STRFMR1);
> }
>
> -static void ls_pcie_disable_outbound_atus(struct ls_pcie *pcie)
> -{
> - int i;
> -
> - for (i = 0; i < PCIE_IATU_NUM; i++)
> - dw_pcie_disable_atu(pcie->pci, i, DW_PCIE_REGION_OUTBOUND);
> -}
> -
> static int ls1021_pcie_link_up(struct dw_pcie *pci)
> {
> u32 state;
> @@ -136,12 +128,6 @@ static int ls_pcie_host_init(struct pcie_port *pp)
> struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
> struct ls_pcie *pcie = to_ls_pcie(pci);
>
> - /*
> - * Disable outbound windows configured by the bootloader to avoid
> - * one transaction hitting multiple outbound windows.
> - * dw_pcie_setup_rc() will reconfigure the outbound windows.
> - */
> - ls_pcie_disable_outbound_atus(pcie);
> ls_pcie_fix_error_response(pcie);
>
> dw_pcie_dbi_ro_wr_en(pci);
> diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c
> index cde45b2076ee..265a48f1a0ae 100644
> --- a/drivers/pci/controller/dwc/pcie-designware-host.c
> +++ b/drivers/pci/controller/dwc/pcie-designware-host.c
> @@ -534,6 +534,7 @@ static struct pci_ops dw_pcie_ops = {
>
> void dw_pcie_setup_rc(struct pcie_port *pp)
> {
> + int i;
> u32 val, ctrl, num_ctrls;
> struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
>
> @@ -583,6 +584,10 @@ void dw_pcie_setup_rc(struct pcie_port *pp)
> PCI_COMMAND_MASTER | PCI_COMMAND_SERR;
> dw_pcie_writel_dbi(pci, PCI_COMMAND, val);
>
> + /* Ensure all outbound windows are disabled so there are multiple matches */
> + for (i = 0; i < pci->num_viewport; i++)
> + dw_pcie_disable_atu(pci, i, DW_PCIE_REGION_OUTBOUND);
> +
> /*
> * If the platform provides its own child bus config accesses, it means
> * the platform uses its own address translation component rather than
> --
> 2.25.1
More information about the Linuxppc-dev
mailing list