Merge "msm: ipa3: add ipa-uc ram mapping to wlan-cb"

This commit is contained in:
Linux Build Service Account 2016-08-26 14:48:49 -07:00 committed by Gerrit - the friendly Code Review server
commit 409a2f2f0b
2 changed files with 34 additions and 0 deletions

View file

@ -212,6 +212,9 @@ qcom,ipa@fd4c0000 {
ipa_smmu_wlan: ipa_smmu_wlan {
compatible = "qcom,ipa-smmu-wlan-cb";
iommus = <&anoc2_smmu 0x31>;
qcom,additional-mapping =
/* ipa-uc ram */
<0x1E60000 0x1E60000 0x80000>;
};
ipa_smmu_uc: ipa_smmu_uc {

View file

@ -4660,6 +4660,9 @@ static int ipa_smmu_wlan_cb_probe(struct device *dev)
int fast = 1;
int bypass = 1;
int ret;
u32 add_map_size;
const u32 *add_map;
int i;
IPADBG("sub pdev=%p\n", dev);
@ -4720,7 +4723,35 @@ static int ipa_smmu_wlan_cb_probe(struct device *dev)
cb->valid = false;
return ret;
}
/* MAP ipa-uc ram */
add_map = of_get_property(dev->of_node,
"qcom,additional-mapping", &add_map_size);
if (add_map) {
/* mapping size is an array of 3-tuple of u32 */
if (add_map_size % (3 * sizeof(u32))) {
IPAERR("wrong additional mapping format\n");
cb->valid = false;
return -EFAULT;
}
/* iterate of each entry of the additional mapping array */
for (i = 0; i < add_map_size / sizeof(u32); i += 3) {
u32 iova = be32_to_cpu(add_map[i]);
u32 pa = be32_to_cpu(add_map[i + 1]);
u32 size = be32_to_cpu(add_map[i + 2]);
unsigned long iova_p;
phys_addr_t pa_p;
u32 size_p;
IPA_SMMU_ROUND_TO_PAGE(iova, pa, size,
iova_p, pa_p, size_p);
IPADBG("mapping 0x%lx to 0x%pa size %d\n",
iova_p, &pa_p, size_p);
ipa3_iommu_map(cb->iommu,
iova_p, pa_p, size_p,
IOMMU_READ | IOMMU_WRITE | IOMMU_DEVICE);
}
}
return 0;
}