Merge "msm: ipa3: add ipa-uc ram mapping to wlan-cb"
This commit is contained in:
commit
409a2f2f0b
2 changed files with 34 additions and 0 deletions
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue