PCI: mobiveil: Allow mobiveil_host_init() to be used to re-init host
Allow the mobiveil_host_init() function to be used to re-init host controller's PAB and GPEX CSR register block, since the NXP integrated Mobiveil IP has to reset and then re-init the PAB and GPEX CSR registers upon hot-reset. Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Reviewed-by: Subrahmanya Lingappa <l.subrahmanya@mobiveil.co.in> Reviewed-by: Andrew Murray <amurray@thegoodpenguin.co.uk>
This commit is contained in:
parent
fc99b3311a
commit
52cae4c708
|
@ -221,18 +221,23 @@ static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie)
|
|||
writel_relaxed(1, pcie->apb_csr_base + MSI_ENABLE_OFFSET);
|
||||
}
|
||||
|
||||
static int mobiveil_host_init(struct mobiveil_pcie *pcie)
|
||||
int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit)
|
||||
{
|
||||
struct mobiveil_root_port *rp = &pcie->rp;
|
||||
struct pci_host_bridge *bridge = rp->bridge;
|
||||
u32 value, pab_ctrl, type;
|
||||
struct resource_entry *win;
|
||||
|
||||
/* setup bus numbers */
|
||||
value = mobiveil_csr_readl(pcie, PCI_PRIMARY_BUS);
|
||||
value &= 0xff000000;
|
||||
value |= 0x00ff0100;
|
||||
mobiveil_csr_writel(pcie, value, PCI_PRIMARY_BUS);
|
||||
pcie->ib_wins_configured = 0;
|
||||
pcie->ob_wins_configured = 0;
|
||||
|
||||
if (!reinit) {
|
||||
/* setup bus numbers */
|
||||
value = mobiveil_csr_readl(pcie, PCI_PRIMARY_BUS);
|
||||
value &= 0xff000000;
|
||||
value |= 0x00ff0100;
|
||||
mobiveil_csr_writel(pcie, value, PCI_PRIMARY_BUS);
|
||||
}
|
||||
|
||||
/*
|
||||
* program Bus Master Enable Bit in Command Register in PAB Config
|
||||
|
@ -576,7 +581,7 @@ int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
|
|||
* configure all inbound and outbound windows and prepare the RC for
|
||||
* config access
|
||||
*/
|
||||
ret = mobiveil_host_init(pcie);
|
||||
ret = mobiveil_host_init(pcie, false);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to initialize host\n");
|
||||
return ret;
|
||||
|
|
|
@ -166,6 +166,7 @@ struct mobiveil_pcie {
|
|||
};
|
||||
|
||||
int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie);
|
||||
int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit);
|
||||
bool mobiveil_pcie_link_up(struct mobiveil_pcie *pcie);
|
||||
int mobiveil_bringup_link(struct mobiveil_pcie *pcie);
|
||||
void program_ob_windows(struct mobiveil_pcie *pcie, int win_num, u64 cpu_addr,
|
||||
|
|
Loading…
Reference in New Issue