msm: camera: smmu: Set the segment size for the context banks
Set the right segment size in the driver for dma_map_sg to allow for partial cache maintanence. Change-Id: I6c439f23e957eb667bf959c830b120c0390e41b1 Signed-off-by: Karthik Anantha Ram <kartanan@codeaurora.org> Signed-off-by: Jigarkumar Zala <jzala@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
44abb0120d
commit
87c82dcf6a
@@ -3474,9 +3474,24 @@ static int cam_populate_smmu_context_banks(struct device *dev,
|
|||||||
iommu_set_fault_handler(cb->domain,
|
iommu_set_fault_handler(cb->domain,
|
||||||
cam_smmu_iommu_fault_handler,
|
cam_smmu_iommu_fault_handler,
|
||||||
(void *)cb->name);
|
(void *)cb->name);
|
||||||
|
|
||||||
|
if (!dev->dma_parms)
|
||||||
|
dev->dma_parms = devm_kzalloc(dev,
|
||||||
|
sizeof(*dev->dma_parms), GFP_KERNEL);
|
||||||
|
|
||||||
|
if (!dev->dma_parms) {
|
||||||
|
CAM_WARN(CAM_SMMU,
|
||||||
|
"Failed to allocate dma_params");
|
||||||
|
dev->dma_parms = NULL;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
dma_set_max_seg_size(dev, DMA_BIT_MASK(32));
|
||||||
|
dma_set_seg_boundary(dev, DMA_BIT_MASK(64));
|
||||||
|
|
||||||
|
end:
|
||||||
/* increment count to next bank */
|
/* increment count to next bank */
|
||||||
iommu_cb_set.cb_init_count++;
|
iommu_cb_set.cb_init_count++;
|
||||||
|
|
||||||
CAM_DBG(CAM_SMMU, "X: cb init count :%d", iommu_cb_set.cb_init_count);
|
CAM_DBG(CAM_SMMU, "X: cb init count :%d", iommu_cb_set.cb_init_count);
|
||||||
|
|
||||||
cb_init_fail:
|
cb_init_fail:
|
||||||
@@ -3488,6 +3503,7 @@ static int cam_smmu_probe(struct platform_device *pdev)
|
|||||||
int rc = 0;
|
int rc = 0;
|
||||||
struct device *dev = &pdev->dev;
|
struct device *dev = &pdev->dev;
|
||||||
|
|
||||||
|
dev->dma_parms = NULL;
|
||||||
if (of_device_is_compatible(dev->of_node, "qcom,msm-cam-smmu")) {
|
if (of_device_is_compatible(dev->of_node, "qcom,msm-cam-smmu")) {
|
||||||
rc = cam_alloc_smmu_context_banks(dev);
|
rc = cam_alloc_smmu_context_banks(dev);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
@@ -3536,8 +3552,15 @@ static int cam_smmu_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
static int cam_smmu_remove(struct platform_device *pdev)
|
static int cam_smmu_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
|
struct device *dev = &pdev->dev;
|
||||||
|
|
||||||
/* release all the context banks and memory allocated */
|
/* release all the context banks and memory allocated */
|
||||||
cam_smmu_reset_iommu_table(CAM_SMMU_TABLE_DEINIT);
|
cam_smmu_reset_iommu_table(CAM_SMMU_TABLE_DEINIT);
|
||||||
|
if (dev && dev->dma_parms) {
|
||||||
|
devm_kfree(dev, dev->dma_parms);
|
||||||
|
dev->dma_parms = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-cam-smmu"))
|
if (of_device_is_compatible(pdev->dev.of_node, "qcom,msm-cam-smmu"))
|
||||||
cam_smmu_release_cb(pdev);
|
cam_smmu_release_cb(pdev);
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user