diff --git a/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c b/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c index 2ae71b586b..bdcbb7e0dc 100644 --- a/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +++ b/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c @@ -5350,6 +5350,13 @@ static int cam_ife_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args) } } + if (in_port[i].usage_type && in_port[i].secure_mode) { + CAM_ERR(CAM_ISP, + "Dual IFE mode is not supported in secure camera usecases"); + rc = -EINVAL; + goto free_mem; + } + cam_ife_hw_mgr_preprocess_port(ife_ctx, &in_port[i]); total_pix_port += in_port[i].ipp_count + in_port[i].ife_rd_count + diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.c index 773ec90e1d..84d4d0a484 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.c @@ -26,6 +26,7 @@ #include "cam_cdm_util.h" #include "cam_common_util.h" #include "cam_subdev.h" +#include "cam_compat.h" /* CSIPHY TPG VC/DT values */ #define CAM_IFE_CPHY_TPG_VC_VAL 0x0 @@ -4720,9 +4721,6 @@ static void cam_ife_csid_ver2_send_secure_info( secure_info.vc_mask = 0; secure_info.csid_hw_idx_mask = BIT(csid_hw->hw_intf->hw_idx); - if (csid_hw->sync_mode == CAM_ISP_HW_SYNC_MASTER) - secure_info.csid_hw_idx_mask |= BIT(csid_hw->dual_core_idx); - CAM_DBG(CAM_ISP, "PHY secure info for CSID[%u], lane_cfg: 0x%x, ife: 0x%x, cdm: 0x%x, vc_mask: 0x%llx", csid_hw->hw_intf->hw_idx, @@ -4877,7 +4875,7 @@ int cam_ife_csid_ver2_start(void *hw_priv, void *args, */ if ((csid_hw->sync_mode != CAM_ISP_HW_SYNC_SLAVE) && start_args->is_secure && - csid_hw->flags.domain_id_security) + cam_is_mink_api_available()) cam_ife_csid_ver2_send_secure_info(start_args, csid_hw); /* diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.h b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.h index 47642cb936..21e51d9907 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.h +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_hw_ver2.h @@ -552,7 +552,7 @@ struct cam_ife_csid_ver2_common_reg_info { struct cam_ife_csid_secure_info { uint32_t phy_sel; uint32_t lane_cfg; - uint32_t vc_mask; + uint64_t vc_mask; uint32_t csid_hw_idx_mask; uint32_t cdm_hw_idx_mask; }; diff --git a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c index 49b54a8d50..4244696333 100644 --- a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c +++ b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c @@ -482,8 +482,8 @@ static int cam_csiphy_update_secure_info(struct csiphy_device *csiphy_dev, int32 uint32_t cpas_version; int rc; - if (csiphy_dev->domain_id_security) { - CAM_DBG(CAM_CSIPHY, "Domain ID scheme for CSIPHY [%u], skipping legacy update", + if (cam_is_mink_api_available()) { + CAM_DBG(CAM_CSIPHY, "Using MINK API for CSIPHY [%u], skipping legacy update", csiphy_dev->soc_info.index); return 0; @@ -2502,7 +2502,7 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, rc = cam_csiphy_program_secure_mode(csiphy_dev, CAM_SECURE_MODE_SECURE, offset); - if (rc < 0) { + if (rc) { csiphy_dev->csiphy_info[offset] .secure_mode = CAM_SECURE_MODE_NON_SECURE; @@ -2570,7 +2570,7 @@ int32_t cam_csiphy_core_cfg(void *phy_dev, rc = cam_csiphy_program_secure_mode( csiphy_dev, CAM_SECURE_MODE_SECURE, offset); - if (rc < 0) { + if (rc) { csiphy_dev->csiphy_info[offset].secure_mode = CAM_SECURE_MODE_NON_SECURE; goto cpas_stop; diff --git a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h index 51b75225b8..f4f54110dd 100644 --- a/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h +++ b/drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h @@ -118,7 +118,7 @@ enum cam_csiphy_common_reg_program { struct cam_csiphy_secure_info { uint32_t phy_lane_sel_mask; uint32_t lane_assign; - uint32_t vc_mask; + uint64_t vc_mask; uint32_t csid_hw_idx_mask; uint32_t cdm_hw_idx_mask; }; diff --git a/drivers/cam_utils/cam_compat.c b/drivers/cam_utils/cam_compat.c index 031e3c4ded..2b8dfa6781 100644 --- a/drivers/cam_utils/cam_compat.c +++ b/drivers/cam_utils/cam_compat.c @@ -272,6 +272,14 @@ void cam_free_clear(const void * ptr) } #endif +bool cam_is_mink_api_available(void) +{ +#if KERNEL_VERSION(6, 0, 0) <= LINUX_VERSION_CODE + return true; +#else + return false; +#endif +} #if KERNEL_VERSION(6, 0, 0) <= LINUX_VERSION_CODE int cam_csiphy_notify_secure_mode(struct csiphy_device *csiphy_dev, bool protect, int32_t offset) diff --git a/drivers/cam_utils/cam_compat.h b/drivers/cam_utils/cam_compat.h index e38b37e52a..346bd75e27 100644 --- a/drivers/cam_utils/cam_compat.h +++ b/drivers/cam_utils/cam_compat.h @@ -60,6 +60,7 @@ int camera_component_match_add_drivers(struct device *master_dev, struct component_match **match_list); int cam_csiphy_notify_secure_mode(struct csiphy_device *csiphy_dev, bool protect, int32_t offset); +bool cam_is_mink_api_available(void); void cam_free_clear(const void *); void cam_check_iommu_faults(struct iommu_domain *domain, struct cam_smmu_pf_info *pf_info);