From: John Jacques <john.jacq...@intel.com> The Axxia pci controller has the wrong class code. This commit updates the code each time the controller gets reset.
Signed-off-by: John Jacques <john.jacq...@intel.com> --- drivers/pci/host/pcie-axxia.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/pci/host/pcie-axxia.c b/drivers/pci/host/pcie-axxia.c index 1109cf5..99c9020 100644 --- a/drivers/pci/host/pcie-axxia.c +++ b/drivers/pci/host/pcie-axxia.c @@ -913,6 +913,20 @@ axxia_pcie_los_wa(struct pcie_port *pp, unsigned int max_width) return rc; } +static void pci_axxia_program_rc_class(struct pcie_port *pp) +{ + u32 dbi_ro_wr_en; + /* program correct class for RC */ + axxia_pcie_readl_rc(pp, 0x8bc, &dbi_ro_wr_en); + /* DBI_RO_WR_EN */ + if (!(dbi_ro_wr_en & 0x1)) + axxia_pcie_writel_rc(pp, (dbi_ro_wr_en | 0x1), 0x8bc); + axxia_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI); + /* DBI_RO_WR_EN */ + if (!(dbi_ro_wr_en & 0x1)) + axxia_pcie_writel_rc(pp, dbi_ro_wr_en, 0x8bc); +} + void axxia_pcie_setup_rc(struct pcie_port *pp) { u32 val; @@ -926,6 +940,9 @@ void axxia_pcie_setup_rc(struct pcie_port *pp) return; for (;;) { + /* program correct class for RC */ + pci_axxia_program_rc_class(pp); + /* To work around a hardware problem, set PCIE_LINK_WIDTH_SPEED_CONTROL to 1 lane in all cases. @@ -1038,20 +1055,6 @@ static int axxia_pcie_establish_link(struct pcie_port *pp) return 0; } -static void pci_axxia_program_rc_class(struct pcie_port *pp) -{ - u32 dbi_ro_wr_en; - /* program correct class for RC */ - axxia_pcie_readl_rc(pp, 0x8bc, &dbi_ro_wr_en); - /* DBI_RO_WR_EN */ - if (!(dbi_ro_wr_en & 0x1)) - axxia_pcie_writel_rc(pp, (dbi_ro_wr_en | 0x1), 0x8bc); - axxia_pcie_wr_own_conf(pp, PCI_CLASS_DEVICE, 2, PCI_CLASS_BRIDGE_PCI); - /* DBI_RO_WR_EN */ - if (!(dbi_ro_wr_en & 0x1)) - axxia_pcie_writel_rc(pp, dbi_ro_wr_en, 0x8bc); -} - static irqreturn_t axxia_pcie_irq_handler(int irq, void *arg) { struct pcie_port *pp = arg; @@ -1399,9 +1402,6 @@ int axxia_pcie_host_init(struct pcie_port *pp) return -EINVAL; } - /* program correct class for RC */ - pci_axxia_program_rc_class(pp); - if (axxia_pcie_establish_link(pp)) dev_warn(pp->dev, "axxia_pcie_establish_link failed\n"); -- 2.7.4 -- _______________________________________________ linux-yocto mailing list linux-yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/linux-yocto