summaryrefslogtreecommitdiff
path: root/drivers/iommu
diff options
context:
space:
mode:
authorVakul Garg <vakul@freescale.com>2013-05-22 11:09:23 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-05-24 20:03:57 (GMT)
commit77597abefba2dff4dc4ad08cb703de91b33a877a (patch)
tree061be024dd6441d8a82ea97d7b203684d3656138 /drivers/iommu
parentd5721ecea9b9a48f5af11ecfdb98c460e3789f0c (diff)
downloadlinux-fsl-qoriq-77597abefba2dff4dc4ad08cb703de91b33a877a.tar.xz
powerpc/85xx: Enabled stashing of FMAN write data
This patch enables translation of FMAN write transactions into write-with-stashing (to CPC) using IOMMU operation mapping mechanism. This is required for USDPAA IPSEC application so that SEC is able to DMA data faster and show better performance. On T4240, this patch shows up 20% performance gain for USDPAA IPSEC. Change-Id: I17620c2ee44812adb5d02eee217f0ff2e9e85f67 Signed-off-by: Vakul Garg <vakul@freescale.com> Reviewed-on: http://git.am.freescale.net:8181/2651 Reviewed-by: Sethi Varun-B16395 <Varun.Sethi@freescale.com> Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/fsl_pamu.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/drivers/iommu/fsl_pamu.c b/drivers/iommu/fsl_pamu.c
index 102ecd9..6f32f6a 100644
--- a/drivers/iommu/fsl_pamu.c
+++ b/drivers/iommu/fsl_pamu.c
@@ -603,17 +603,22 @@ found_cpu_node:
return ~(u32)0;
}
-/* Identify if the PAACT table entry belongs to QMAN, BMAN or QMAN Portal */
+/*
+ * Identify if the PAACT table entry belongs to QMAN, BMAN or QMAN Portal or
+ * FMAN ports
+ */
#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.
+ * Also set operation mapping and stash destinations for FMAN ports.
* 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:
@@ -634,6 +639,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(IOMMU_ATTR_CACHE_L3, 0));
+ break;
}
}
@@ -661,7 +673,11 @@ static void __init setup_omt(struct ome *omt)
/* Configure OMI_FMAN */
ome = &omt[OMI_FMAN];
ome->moe[IOE_READ_IDX] = EOE_VALID | EOE_READI;
+#ifdef CONFIG_FSL_FMAN_CPC_STASH
+ ome->moe[IOE_WRITE_IDX] = EOE_VALID | EOE_WWSA;
+#else
ome->moe[IOE_WRITE_IDX] = EOE_VALID | EOE_WRITE;
+#endif
/* Configure OMI_QMAN private */
ome = &omt[OMI_QMAN_PRIV];
@@ -762,11 +778,16 @@ static void __init setup_liodns(void)
set_bf(ppaace->addr_bitfields, PAACE_AF_AP,
PAACE_AP_PERMS_ALL);
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_device_is_compatible(node, "fsl,fman-port-10g-rx") ||
+ of_device_is_compatible(node, "fsl,fman-port-1g-rx"))
+ setup_dpaa_paace(ppaace, FMAN_PAACE);
+#endif
mb();
pamu_enable_liodn(liodn);
}