msm: camera: smmu: Moves custom smmu API's to cam_compat

Moves custom smmu API's to cam_compat as some of them are legacy and
will not be supported in newer kernel versions.

CRs-Fixed: 3048249
Change-Id: Ic9db5d9d295eb02e8bd2d593721b65e30d605f72
Signed-off-by: Karthik Jayakumar <kjayakum@codeaurora.org>
This commit is contained in:
Karthik Jayakumar
2021-10-14 13:22:24 -07:00
parent 9716446091
commit 6a67d57032
3 changed files with 23 additions and 5 deletions

View File

@@ -3863,11 +3863,9 @@ static int cam_smmu_setup_cb(struct cam_context_bank_info *cb,
goto end; goto end;
} }
iommu_dma_enable_best_fit_algo(dev); /* Enable custom iommu features, if applicable */
cam_smmu_util_iommu_custom(dev, cb->discard_iova_start,
if (cb->discard_iova_start) cb->discard_iova_len);
iommu_dma_reserve_iova(dev, cb->discard_iova_start,
cb->discard_iova_len);
cb->state = CAM_SMMU_ATTACH; cb->state = CAM_SMMU_ATTACH;
} else { } else {

View File

@@ -294,6 +294,12 @@ static int inline cam_subdev_list_cmp(struct cam_subdev *entry_1, struct cam_sub
} }
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
void cam_smmu_util_iommu_custom(struct device *dev,
dma_addr_t discard_start, size_t discard_length)
{
return;
}
int cam_req_mgr_ordered_list_cmp(void *priv, int cam_req_mgr_ordered_list_cmp(void *priv,
const struct list_head *head_1, const struct list_head *head_2) const struct list_head *head_1, const struct list_head *head_2)
{ {
@@ -323,6 +329,17 @@ int cam_get_ddr_type(void)
return DDR_TYPE_LPDDR5; return DDR_TYPE_LPDDR5;
} }
#else #else
void cam_smmu_util_iommu_custom(struct device *dev,
dma_addr_t discard_start, size_t discard_length)
{
iommu_dma_enable_best_fit_algo(dev);
if (discard_start)
iommu_dma_reserve_iova(dev, discard_start, discard_length);
return;
}
int cam_req_mgr_ordered_list_cmp(void *priv, int cam_req_mgr_ordered_list_cmp(void *priv,
struct list_head *head_1, struct list_head *head_2) struct list_head *head_1, struct list_head *head_2)
{ {

View File

@@ -12,6 +12,7 @@
#include <linux/iommu.h> #include <linux/iommu.h>
#include <linux/qcom_scm.h> #include <linux/qcom_scm.h>
#include <linux/list_sort.h> #include <linux/list_sort.h>
#include <linux/dma-iommu.h>
#include "cam_csiphy_dev.h" #include "cam_csiphy_dev.h"
#include "cam_cpastop_hw.h" #include "cam_cpastop_hw.h"
@@ -48,6 +49,8 @@ void cam_check_iommu_faults(struct iommu_domain *domain,
struct cam_smmu_pf_info *pf_info); struct cam_smmu_pf_info *pf_info);
int cam_get_ddr_type(void); int cam_get_ddr_type(void);
int cam_compat_util_get_dmabuf_va(struct dma_buf *dmabuf, uintptr_t *vaddr); int cam_compat_util_get_dmabuf_va(struct dma_buf *dmabuf, uintptr_t *vaddr);
void cam_smmu_util_iommu_custom(struct device *dev,
dma_addr_t discard_start, size_t discard_length);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0) #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
int cam_req_mgr_ordered_list_cmp(void *priv, int cam_req_mgr_ordered_list_cmp(void *priv,