summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVarun Sethi <Varun.Sethi@freescale.com>2014-03-10 19:07:33 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-03-18 18:37:42 (GMT)
commitbe144893e73b6fec387c41ca87378e4714b09666 (patch)
treee1f49df19bc3defaf8080c42ec468f997d814f30
parent16404c8802bc8badeb99408f7b74d11837da87c3 (diff)
downloadlinux-fsl-qoriq-be144893e73b6fec387c41ca87378e4714b09666.tar.xz
iommu/fsl: Setup operation mapping for FMAN.
Setup operation mapping for FMAN. Signed-off-by: Varun Sethi <Varun.Sethi@freescale.com> Change-Id: I1803c366979a28fe3f547526ee0e2f23a5dd03b7 Reviewed-on: http://git.am.freescale.net:8181/9616 Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Stuart Yoder <stuart.yoder@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
-rw-r--r--drivers/iommu/fsl_pamu.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/drivers/iommu/fsl_pamu.c b/drivers/iommu/fsl_pamu.c
index 1de02ca..08c26b7 100644
--- a/drivers/iommu/fsl_pamu.c
+++ b/drivers/iommu/fsl_pamu.c
@@ -81,6 +81,13 @@ static const struct of_device_id l3_device_ids[] = {
{}
};
+/* Table for matching FMAN rx port compatible */
+static const struct of_device_id fman_device_ids[] = {
+ { .compatible = "fsl,fman-port-10g-rx", },
+ { .compatible = "fsl,fman-port-1g-rx", },
+ {}
+};
+
/* maximum subwindows permitted per liodn */
static u32 max_subwindow_count;
@@ -623,13 +630,15 @@ found_cpu_node:
#define QMAN_PAACE 1
#define QMAN_PORTAL_PAACE 2
#define BMAN_PAACE 3
+#define FMAN_PAACE 4
/**
- * Setup operation mapping and stash destinations for QMAN and QMAN portal.
+ * Setup operation mapping and stash destinations for DPAA (QMAN, QMAN portal
+ * FMAN, BMAN) and PMAN.
* Memory accesses to QMAN and BMAN private memory need not be coherent, so
* clear the PAACE entry coherency attribute for them.
*/
-static void setup_qbman_paace(struct paace *ppaace, int paace_type)
+static void setup_dpaa_paace(struct paace *ppaace, int paace_type)
{
switch (paace_type) {
case QMAN_PAACE:
@@ -650,6 +659,13 @@ static void setup_qbman_paace(struct paace *ppaace, int paace_type)
set_bf(ppaace->domain_attr.to_host.coherency_required, PAACE_DA_HOST_CR,
0);
break;
+ case FMAN_PAACE:
+ set_bf(ppaace->impl_attr, PAACE_IA_OTM, PAACE_OTM_INDEXED);
+ ppaace->op_encode.index_ot.omi = OMI_FMAN;
+ /*Set frame stashing for the L3 cache */
+ set_bf(ppaace->impl_attr, PAACE_IA_CID,
+ get_stash_id(PAMU_ATTR_CACHE_L3, 0));
+ break;
}
}
@@ -793,11 +809,15 @@ static void __init setup_liodns(void)
setup_default_ppaace(ppaace);
if (of_device_is_compatible(node, "fsl,qman-portal"))
- setup_qbman_paace(ppaace, QMAN_PORTAL_PAACE);
+ setup_dpaa_paace(ppaace, QMAN_PORTAL_PAACE);
if (of_device_is_compatible(node, "fsl,qman"))
- setup_qbman_paace(ppaace, QMAN_PAACE);
+ setup_dpaa_paace(ppaace, QMAN_PAACE);
if (of_device_is_compatible(node, "fsl,bman"))
- setup_qbman_paace(ppaace, BMAN_PAACE);
+ setup_dpaa_paace(ppaace, BMAN_PAACE);
+#ifdef CONFIG_FSL_FMAN_CPC_STASH
+ if (of_match_node(fman_device_ids, node))
+ setup_dpaa_paace(ppaace, FMAN_PAACE);
+#endif
mb();
pamu_enable_liodn(liodn);
}