msm: camera: smmu: add new flag to indicate Hw, CDM access
When set, buffers will be mapped within 32-bit region address space and in patching, if Shared or CmdBUffer is not set for such buffers - patch the value with right shift by 8. kmd does as below. Map: Shared or CmdBuffer : Mapped within 32bit. HwAndCDMOrShared : Mapped within 32bit others(HwAccess) : Mapped within 40bit Patching: Shared or CmdBuffer : as is HwAndCDMOrShared : iova >> 8 others (HwAccess) : iova >> 8 Shared/CmdBuffer takes precedence over HwAndCDMOrShared. CRs-Fixed: 3128094 Change-Id: Ifd9f5beaf2659f77544cd0722ef7f60d6c0684a7 Signed-off-by: Pavan Kumar Chilamkurthi <quic_pchilamk@quicinc.com>
This commit is contained in:

committed by
Camera Software Integration

parent
cd2c6d0ab8
commit
3ea1c2ad59
@@ -884,7 +884,8 @@ static int cam_mem_util_map_hw_va(uint32_t flags,
|
|||||||
/* If 36-bit enabled, check for ICP cmd buffers and map them within the shared region */
|
/* If 36-bit enabled, check for ICP cmd buffers and map them within the shared region */
|
||||||
if (cam_smmu_is_expanded_memory() &&
|
if (cam_smmu_is_expanded_memory() &&
|
||||||
cam_smmu_supports_shared_region(mmu_hdls[i]) &&
|
cam_smmu_supports_shared_region(mmu_hdls[i]) &&
|
||||||
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE))
|
((flags & CAM_MEM_FLAG_CMD_BUF_TYPE) ||
|
||||||
|
(flags & CAM_MEM_FLAG_HW_AND_CDM_OR_SHARED)))
|
||||||
region = CAM_SMMU_REGION_SHARED;
|
region = CAM_SMMU_REGION_SHARED;
|
||||||
|
|
||||||
if (flags & CAM_MEM_FLAG_PROTECTED_MODE)
|
if (flags & CAM_MEM_FLAG_PROTECTED_MODE)
|
||||||
|
@@ -360,6 +360,11 @@ int cam_packet_util_process_patches(struct cam_packet *packet,
|
|||||||
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE)) {
|
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE)) {
|
||||||
*dst_cpu_addr = temp;
|
*dst_cpu_addr = temp;
|
||||||
} else {
|
} else {
|
||||||
|
if (CAM_36BIT_INTF_GET_IOVA_OFFSET(temp))
|
||||||
|
CAM_ERR(CAM_UTIL,
|
||||||
|
"Buffer address 0x%lx not aligned to 256bytes",
|
||||||
|
temp);
|
||||||
|
|
||||||
*dst_cpu_addr = CAM_36BIT_INTF_GET_IOVA_BASE(temp);
|
*dst_cpu_addr = CAM_36BIT_INTF_GET_IOVA_BASE(temp);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -367,10 +372,11 @@ int cam_packet_util_process_patches(struct cam_packet *packet,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CAM_DBG(CAM_UTIL,
|
CAM_DBG(CAM_UTIL,
|
||||||
"patch is done for dst %pK with iova 0x%lx patched value 0x%x, shared=%d, cmd=%d",
|
"patch is done for dst %pK with base iova 0x%lx final iova 0x%lx patched value 0x%x, shared=%s, cmd=%s, HwAndCDM %s",
|
||||||
dst_cpu_addr, iova_addr, *dst_cpu_addr,
|
dst_cpu_addr, iova_addr, temp, *dst_cpu_addr,
|
||||||
(flags & CAM_MEM_FLAG_HW_SHARED_ACCESS),
|
CAM_BOOL_TO_YESNO(flags & CAM_MEM_FLAG_HW_SHARED_ACCESS),
|
||||||
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE));
|
CAM_BOOL_TO_YESNO(flags & CAM_MEM_FLAG_CMD_BUF_TYPE),
|
||||||
|
CAM_BOOL_TO_YESNO(flags & CAM_MEM_FLAG_HW_AND_CDM_OR_SHARED));
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
|
@@ -292,6 +292,7 @@ struct cam_req_mgr_link_control {
|
|||||||
#define CAM_MEM_FLAG_DISABLE_DELAYED_UNMAP (1<<13)
|
#define CAM_MEM_FLAG_DISABLE_DELAYED_UNMAP (1<<13)
|
||||||
#define CAM_MEM_FLAG_KMD_DEBUG_FLAG (1<<14)
|
#define CAM_MEM_FLAG_KMD_DEBUG_FLAG (1<<14)
|
||||||
#define CAM_MEM_FLAG_EVA_NOPIXEL (1<<15)
|
#define CAM_MEM_FLAG_EVA_NOPIXEL (1<<15)
|
||||||
|
#define CAM_MEM_FLAG_HW_AND_CDM_OR_SHARED (1<<16)
|
||||||
|
|
||||||
|
|
||||||
#define CAM_MEM_MMU_MAX_HANDLE 16
|
#define CAM_MEM_MMU_MAX_HANDLE 16
|
||||||
|
Reference in New Issue
Block a user