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:
Pavan Kumar Chilamkurthi
2022-02-10 07:45:56 -08:00
committed by Camera Software Integration
parent cd2c6d0ab8
commit 3ea1c2ad59
3 changed files with 13 additions and 5 deletions

View File

@@ -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 (cam_smmu_is_expanded_memory() &&
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;
if (flags & CAM_MEM_FLAG_PROTECTED_MODE)

View File

@@ -360,6 +360,11 @@ int cam_packet_util_process_patches(struct cam_packet *packet,
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE)) {
*dst_cpu_addr = temp;
} 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);
}
} else {
@@ -367,10 +372,11 @@ int cam_packet_util_process_patches(struct cam_packet *packet,
}
CAM_DBG(CAM_UTIL,
"patch is done for dst %pK with iova 0x%lx patched value 0x%x, shared=%d, cmd=%d",
dst_cpu_addr, iova_addr, *dst_cpu_addr,
(flags & CAM_MEM_FLAG_HW_SHARED_ACCESS),
(flags & CAM_MEM_FLAG_CMD_BUF_TYPE));
"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, temp, *dst_cpu_addr,
CAM_BOOL_TO_YESNO(flags & CAM_MEM_FLAG_HW_SHARED_ACCESS),
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;

View File

@@ -292,6 +292,7 @@ struct cam_req_mgr_link_control {
#define CAM_MEM_FLAG_DISABLE_DELAYED_UNMAP (1<<13)
#define CAM_MEM_FLAG_KMD_DEBUG_FLAG (1<<14)
#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