RE: [PATCHv5 18/20] PCI: mobiveil: Disable IB and OB windows set by bootloader
From: "Z.q. Hou" <zhiqiang.hou@nxp.com>
Date: 2019-06-17 10:42:44
Also in:
linux-devicetree, linux-pci, lkml
Hi Lorenzo,
-----Original Message----- From: Lorenzo Pieralisi <redacted> Sent: 2019年6月17日 17:31 To: Z.q. Hou <zhiqiang.hou@nxp.com> Cc: bhelgaas@google.com; linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; robh+dt@kernel.org; mark.rutland@arm.com; l.subrahmanya@mobiveil.co.in; shawnguo@kernel.org; Leo Li [off-list ref]; catalin.marinas@arm.com; will.deacon@arm.com; Mingkai Hu [off-list ref]; M.h. Lian [off-list ref]; Xiaowei Bao [off-list ref] Subject: Re: [PATCHv5 18/20] PCI: mobiveil: Disable IB and OB windows set by bootloader On Sat, Jun 15, 2019 at 05:03:33AM +0000, Z.q. Hou wrote:quoted
Hi Lorenzo,quoted
-----Original Message----- From: Lorenzo Pieralisi [mailto:lorenzo.pieralisi@arm.com] Sent: 2019年6月13日 0:24 To: Z.q. Hou <zhiqiang.hou@nxp.com>; bhelgaas@google.com Cc: linux-pci@vger.kernel.org; linux-arm-kernel@lists.infradead.org; devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; robh+dt@kernel.org; mark.rutland@arm.com; robh+l.subrahmanya@mobiveil.co.in; shawnguo@kernel.org; Leo Li [off-list ref]; catalin.marinas@arm.com; will.deacon@arm.com; Mingkai Hu [off-list ref]; M.h. Lian [off-list ref]; XiaoweiBaoquoted
quoted
[off-list ref] Subject: Re: [PATCHv5 18/20] PCI: mobiveil: Disable IB and OB windows set by bootloader On Fri, Apr 12, 2019 at 08:37:00AM +0000, Z.q. Hou wrote:quoted
From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Disable all inbound and outbound windows before set up the windows in kernel, in case transactions match the window set by bootloader.There must be no PCI transactions ongoing at bootloader<->OS handover.Yes, exact.quoted
The bootloader needs fixing and this patch should be dropped, the host bridge driver assumes the host bridge state is disabled,The host bridge driver should not assumes the host state is disabled, actually u-boot enable/initialize the host and without disabling it when transfer the control to Linux.Fix the bootloader and drop this patch, I explain to you why.
This patch is just to avoid uboot driver windows setup and Linux driver windows setup overlap issue, please drop it if you don't think it's needed 😊. Thanks, Zhiqiang
quoted
quoted
it will program the bridge apertures from scratch with no ongoing transactions, anything deviating from this behaviour is a bootloader bug and a recipe for disaster.The point of this patch is not to fix the ongoing transaction issue, it is to avoid a potential issue which is caused by the outbound window enabled by bootloader overlapping with Linux enabled.See above. Lorenzoquoted
Thanks, Zhiqiangquoted
Lorenzoquoted
Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Reviewed-by: Minghuan Lian <Minghuan.Lian@nxp.com> Reviewed-by: Subrahmanya Lingappa <redacted> --- V5: - No functionality change. drivers/pci/controller/pcie-mobiveil.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)diff --git a/drivers/pci/controller/pcie-mobiveil.cb/drivers/pci/controller/pcie-mobiveil.c index 8dc87c7a600e..411e9779da12 100644--- a/drivers/pci/controller/pcie-mobiveil.c +++ b/drivers/pci/controller/pcie-mobiveil.c@@ -565,6 +565,24 @@ static int mobiveil_bringup_link(structmobiveil_pcie *pcie)quoted
return -ETIMEDOUT; } +static void mobiveil_pcie_disable_ib_win(struct mobiveil_pcie +*pcie, int idx) { + u32 val; + + val = csr_readl(pcie, PAB_PEX_AMAP_CTRL(idx)); + val &= ~(1 << AMAP_CTRL_EN_SHIFT); + csr_writel(pcie, val, PAB_PEX_AMAP_CTRL(idx)); } + +static void mobiveil_pcie_disable_ob_win(struct mobiveil_pcie +*pcie, int idx) { + u32 val; + + val = csr_readl(pcie, PAB_AXI_AMAP_CTRL(idx)); + val &= ~(1 << WIN_ENABLE_SHIFT); + csr_writel(pcie, val, PAB_AXI_AMAP_CTRL(idx)); } + static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie) { phys_addr_t msg_addr = pcie->pcie_reg_base; @@ -585,6 +603,13@@quoted
quoted
quoted
static int mobiveil_host_init(struct mobiveil_pcie *pcie) { u32 value, pab_ctrl, type; struct resource_entry *win; + int i; + + /* Disable all inbound/outbound windows */ + for (i = 0; i < pcie->apio_wins; i++) + mobiveil_pcie_disable_ob_win(pcie, i); + for (i = 0; i < pcie->ppio_wins; i++) + mobiveil_pcie_disable_ib_win(pcie, i); /* setup bus numbers */ value = csr_readl(pcie, PCI_PRIMARY_BUS); -- 2.17.1
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel