[PATCH 1/3] mvebu: simplify detection and fixup of MV78230-A0
Uwe Kleine-König
u.kleine-koenig at pengutronix.de
Tue Feb 14 02:53:56 PST 2017
Signed-off-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
---
arch/arm/mach-mvebu/armada-370-xp.c | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
index c362cfdabe22..cc0d7bd612e6 100644
--- a/arch/arm/mach-mvebu/armada-370-xp.c
+++ b/arch/arm/mach-mvebu/armada-370-xp.c
@@ -54,31 +54,24 @@ static const struct of_device_id armada_370_xp_pcie_of_ids[] = {
{ },
};
-static int armada_370_xp_soc_id_fixup(void)
+/*
+ * Marvell Armada XP MV78230-A0 incorrectly identifies itself as
+ * MV78460. Check for DEVID_MV78460 but if there are only 2 CPUs
+ * present in Coherency Fabric, fixup PCIe PRODUCT_ID.
+ */
+static int armada_xp_soc_id_fixup(void)
{
struct device_node *np, *cnp;
void __iomem *base;
- u32 reg, ctrl, mask;
+ u32 reg, ctrl;
u32 socid, numcpus;
socid = readl(ARMADA_370_XP_CPU_SOC_ID) & CPU_SOC_ID_DEVICE_MASK;
numcpus = 1 + (readl(ARMADA_370_XP_FABRIC_CONF) & FABRIC_NUM_CPUS_MASK);
- switch (socid) {
- /*
- * Marvell Armada XP MV78230-A0 incorrectly identifies itself as
- * MV78460. Check for DEVID_MV78460 but if there are only 2 CPUs
- * present in Coherency Fabric, fixup PCIe PRODUCT_ID.
- */
- case DEVID_MV78460:
- if (numcpus != 2)
- return 0;
- socid = DEVID_MV78230;
- mask = PCIE0_EN | PCIE1_EN | PCIE0_QUADX1_EN;
- break;
- default:
+ if (socid != DEVID_MV78460 || numcpus != 2)
+ /* not affected */
return 0;
- }
np = of_find_matching_node(NULL, armada_370_xp_pcie_of_ids);
if (!np)
@@ -86,7 +79,7 @@ static int armada_370_xp_soc_id_fixup(void)
/* Enable all individual x1 ports */
ctrl = readl(ARMADA_370_XP_SOC_CTRL);
- writel(ctrl | mask, ARMADA_370_XP_SOC_CTRL);
+ writel(ctrl | PCIE0_EN | PCIE1_EN | PCIE0_QUADX1_EN, ARMADA_370_XP_SOC_CTRL);
for_each_child_of_node(np, cnp) {
base = of_iomap(cnp, 0);
@@ -95,7 +88,7 @@ static int armada_370_xp_soc_id_fixup(void)
/* Fixup PCIe port DEVICE_ID */
reg = readl(base + PCIE_VEN_DEV_ID);
- reg = (socid << 16) | (reg & 0xffff);
+ reg = (DEVID_MV78230 << 16) | (reg & 0xffff);
writel(reg, base + PCIE_VEN_DEV_ID);
}
@@ -148,7 +141,7 @@ static int armada_370_xp_init_soc(struct device_node *root, void *context)
mvebu_set_memory(phys_base, phys_size);
mvebu_mbus_init();
- armada_370_xp_soc_id_fixup();
+ armada_xp_soc_id_fixup();
if (of_machine_is_compatible("marvell,armadaxp"))
armada_xp_init_soc(root);
--
2.11.0
More information about the barebox
mailing list