msm: ipa3: support 64bitmask with SMMU attached
Add support for using 64bit dma_mask on ipa3 with smmu dev attached both in bypass and full mode. Change-Id: I955d81bffc957c4d93a1a90eb974e558e7b5d123 Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
This commit is contained in:
parent
400520a6e2
commit
e2b188f588
1 changed files with 7 additions and 3 deletions
|
@ -218,6 +218,7 @@ static struct {
|
||||||
bool disable_htw;
|
bool disable_htw;
|
||||||
bool fast_map;
|
bool fast_map;
|
||||||
bool s1_bypass;
|
bool s1_bypass;
|
||||||
|
bool use_64_bit_dma_mask;
|
||||||
u32 ipa_base;
|
u32 ipa_base;
|
||||||
u32 ipa_size;
|
u32 ipa_size;
|
||||||
} smmu_info;
|
} smmu_info;
|
||||||
|
@ -3961,7 +3962,7 @@ static int ipa3_pre_init(const struct ipa3_plat_drv_res *resource_p,
|
||||||
goto fail_bind;
|
goto fail_bind;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = ipa3_init_mem_partition(ipa_dev->of_node);
|
result = ipa3_init_mem_partition(master_dev->of_node);
|
||||||
if (result) {
|
if (result) {
|
||||||
IPAERR(":ipa3_init_mem_partition failed!\n");
|
IPAERR(":ipa3_init_mem_partition failed!\n");
|
||||||
result = -ENODEV;
|
result = -ENODEV;
|
||||||
|
@ -4715,7 +4716,7 @@ static int ipa_smmu_uc_cb_probe(struct device *dev)
|
||||||
cb->va_end = cb->va_start + cb->va_size;
|
cb->va_end = cb->va_start + cb->va_size;
|
||||||
IPADBG("UC va_start=0x%x va_sise=0x%x\n", cb->va_start, cb->va_size);
|
IPADBG("UC va_start=0x%x va_sise=0x%x\n", cb->va_start, cb->va_size);
|
||||||
|
|
||||||
if (ipa3_ctx->use_64_bit_dma_mask) {
|
if (smmu_info.use_64_bit_dma_mask) {
|
||||||
if (dma_set_mask(dev, DMA_BIT_MASK(64)) ||
|
if (dma_set_mask(dev, DMA_BIT_MASK(64)) ||
|
||||||
dma_set_coherent_mask(dev, DMA_BIT_MASK(64))) {
|
dma_set_coherent_mask(dev, DMA_BIT_MASK(64))) {
|
||||||
IPAERR("DMA set 64bit mask failed\n");
|
IPAERR("DMA set 64bit mask failed\n");
|
||||||
|
@ -4826,7 +4827,7 @@ static int ipa_smmu_ap_cb_probe(struct device *dev)
|
||||||
cb->va_end = cb->va_start + cb->va_size;
|
cb->va_end = cb->va_start + cb->va_size;
|
||||||
IPADBG("AP va_start=0x%x va_sise=0x%x\n", cb->va_start, cb->va_size);
|
IPADBG("AP va_start=0x%x va_sise=0x%x\n", cb->va_start, cb->va_size);
|
||||||
|
|
||||||
if (ipa3_ctx->use_64_bit_dma_mask) {
|
if (smmu_info.use_64_bit_dma_mask) {
|
||||||
if (dma_set_mask(dev, DMA_BIT_MASK(64)) ||
|
if (dma_set_mask(dev, DMA_BIT_MASK(64)) ||
|
||||||
dma_set_coherent_mask(dev, DMA_BIT_MASK(64))) {
|
dma_set_coherent_mask(dev, DMA_BIT_MASK(64))) {
|
||||||
IPAERR("DMA set 64bit mask failed\n");
|
IPAERR("DMA set 64bit mask failed\n");
|
||||||
|
@ -5035,6 +5036,9 @@ int ipa3_plat_drv_probe(struct platform_device *pdev_p,
|
||||||
if (of_property_read_bool(pdev_p->dev.of_node,
|
if (of_property_read_bool(pdev_p->dev.of_node,
|
||||||
"qcom,smmu-fast-map"))
|
"qcom,smmu-fast-map"))
|
||||||
smmu_info.fast_map = true;
|
smmu_info.fast_map = true;
|
||||||
|
if (of_property_read_bool(pdev_p->dev.of_node,
|
||||||
|
"qcom,use-64-bit-dma-mask"))
|
||||||
|
smmu_info.use_64_bit_dma_mask = true;
|
||||||
smmu_info.arm_smmu = true;
|
smmu_info.arm_smmu = true;
|
||||||
pr_info("IPA smmu_info.s1_bypass=%d smmu_info.fast_map=%d\n",
|
pr_info("IPA smmu_info.s1_bypass=%d smmu_info.fast_map=%d\n",
|
||||||
smmu_info.s1_bypass, smmu_info.fast_map);
|
smmu_info.s1_bypass, smmu_info.fast_map);
|
||||||
|
|
Loading…
Add table
Reference in a new issue