diff options
author | Varun Sethi <Varun.Sethi@freescale.com> | 2014-03-10 19:07:33 (GMT) |
---|---|---|
committer | Jose Rivera <German.Rivera@freescale.com> | 2014-03-18 18:37:42 (GMT) |
commit | be144893e73b6fec387c41ca87378e4714b09666 (patch) | |
tree | e1f49df19bc3defaf8080c42ec468f997d814f30 | |
parent | 16404c8802bc8badeb99408f7b74d11837da87c3 (diff) | |
download | linux-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.c | 30 |
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); } |