diff --git a/msm/eva/cvp_hfi.c b/msm/eva/cvp_hfi.c index cd2a103aff..2c400eef3e 100644 --- a/msm/eva/cvp_hfi.c +++ b/msm/eva/cvp_hfi.c @@ -2298,6 +2298,43 @@ static int iris_hfi_session_clean(void *session) return 0; } +static int iris_debug_hook(void *device) +{ + struct iris_hfi_device *dev = device; + u32 val; + + if (!device) { + dprintk(CVP_ERR, "%s Invalid device\n", __func__); + return -ENODEV; + } +#define CVP0_CVP_SS_FDU_SECURE_ENABLE 0x90 +#define CVP0_CVP_SS_MPU_SECURE_ENABLE 0x94 +#define CVP0_CVP_SS_ARP_THREAD_0_SECURE_ENABLE 0xA0 +#define CVP0_CVP_SS_ARP_THREAD_1_SECURE_ENABLE 0xA4 +#define CVP0_CVP_SS_ARP_THREAD_2_SECURE_ENABLE 0xA8 +#define CVP0_CVP_SS_ARP_THREAD_3_SECURE_ENABLE 0xAC + + val = __read_register(dev, CVP0_CVP_SS_FDU_SECURE_ENABLE); + dprintk(CVP_ERR, "FDU_SECURE_ENABLE %#x\n", val); + + val = __read_register(dev, CVP0_CVP_SS_MPU_SECURE_ENABLE); + dprintk(CVP_ERR, "MPU_SECURE_ENABLE %#x\n", val); + + val = __read_register(dev, CVP0_CVP_SS_ARP_THREAD_0_SECURE_ENABLE); + dprintk(CVP_ERR, "ARP_THREAD_0_SECURE_ENABLE %#x\n", val); + + val = __read_register(dev, CVP0_CVP_SS_ARP_THREAD_1_SECURE_ENABLE); + dprintk(CVP_ERR, "ARP_THREAD_1_SECURE_ENABLE %#x\n", val); + + val = __read_register(dev, CVP0_CVP_SS_ARP_THREAD_2_SECURE_ENABLE); + dprintk(CVP_ERR, "ARP_THREAD_2_SECURE_ENABLE %#x\n", val); + + val = __read_register(dev, CVP0_CVP_SS_ARP_THREAD_3_SECURE_ENABLE); + dprintk(CVP_ERR, "ARP_THREAD_3_SECURE_ENABLE %#x\n", val); + + return 0; +} + static int iris_hfi_session_init(void *device, void *session_id, void **new_session) { @@ -4870,6 +4907,7 @@ static void iris_init_hfi_callbacks(struct cvp_hfi_device *hdev) hdev->noc_error_info = iris_hfi_noc_error_info; hdev->validate_session = iris_hfi_validate_session; hdev->pm_qos_update = iris_pm_qos_update; + hdev->debug_hook = iris_debug_hook; } int cvp_iris_hfi_initialize(struct cvp_hfi_device *hdev, u32 device_id, diff --git a/msm/eva/cvp_hfi_api.h b/msm/eva/cvp_hfi_api.h index e3dea9a61d..705db12cca 100644 --- a/msm/eva/cvp_hfi_api.h +++ b/msm/eva/cvp_hfi_api.h @@ -241,6 +241,7 @@ struct msm_cvp_hfi_defs { unsigned int size; unsigned int type; bool is_config_pkt; + bool checksum_enabled; enum hal_command_response resp; char name[PKT_NAME_LEN]; }; @@ -270,6 +271,7 @@ struct cvp_hfi_device { int (*noc_error_info)(void *dev); int (*validate_session)(void *sess, const char *func); int (*pm_qos_update)(void *device); + int (*debug_hook)(void *device); }; typedef void (*hfi_cmd_response_callback) (enum hal_command_response cmd, diff --git a/msm/eva/cvp_smem.c b/msm/eva/cvp_smem.c index d7f90009f3..2eb0c89a7b 100644 --- a/msm/eva/cvp_smem.c +++ b/msm/eva/cvp_smem.c @@ -211,7 +211,7 @@ int msm_cvp_map_smem(struct msm_cvp_inst *inst, int i, rc = 0; dma_addr_t iova = 0; - u32 temp = 0; + u32 temp = 0, checksum = 0; u32 align = SZ_4K; struct dma_buf *dma_buf; bool is_config_pkt = false; @@ -262,6 +262,20 @@ int msm_cvp_map_smem(struct msm_cvp_inst *inst, /* User persist buffer has no feature config info */ is_config_pkt = cvp_hfi_defs[i].is_config_pkt; + if (i > 0 && cvp_hfi_defs[i].checksum_enabled) { + dma_buf_begin_cpu_access(dma_buf, DMA_BIDIRECTIONAL); + smem->kvaddr = __cvp_dma_buf_vmap(dma_buf); + if (!smem->kvaddr) { + dprintk(CVP_WARN, "%s Fail map into kernel\n", + __func__); + dma_buf_end_cpu_access(dma_buf, DMA_BIDIRECTIONAL); + } else { + for (i = 0; i < 256; i++) + checksum += *(u32 *)(smem->kvaddr + i*sizeof(u32)); + dprintk(CVP_MEM, "Map checksum %#x fd=%d\n", + checksum, smem->fd); + } + } print_smem(CVP_MEM, str, inst, smem); atomic_inc(&inst->smem_count); goto success; @@ -277,7 +291,9 @@ int msm_cvp_unmap_smem(struct msm_cvp_inst *inst, struct msm_cvp_smem *smem, const char *str) { - int rc = 0; + int i, rc = 0; + u32 checksum = 0; + struct dma_buf *dma_buf; if (!smem) { dprintk(CVP_ERR, "%s: Invalid params: %pK\n", __func__, smem); @@ -286,6 +302,23 @@ int msm_cvp_unmap_smem(struct msm_cvp_inst *inst, } print_smem(CVP_MEM, str, inst, smem); + dma_buf = smem->dma_buf; + i = get_pkt_index_from_type(smem->pkt_type); + if (i > 0 && cvp_hfi_defs[i].checksum_enabled) { + if (!smem->kvaddr) { + dprintk(CVP_WARN, "%s DS buf Fail map into kernel\n", + __func__); + dma_buf_end_cpu_access(dma_buf, DMA_BIDIRECTIONAL); + } else { + for (i = 0; i < 256; i++) + checksum += *(u32 *)(smem->kvaddr + i*sizeof(u32)); + dprintk(CVP_MEM, "Unmap checksum %#x fd=%d\n", + checksum, smem->fd); + __cvp_dma_buf_vunmap(dma_buf, smem->kvaddr); + smem->kvaddr = 0; + dma_buf_end_cpu_access(dma_buf, DMA_BIDIRECTIONAL); + } + } rc = msm_dma_put_device_address(smem->flags, &smem->mapping_info); if (rc) { dprintk(CVP_ERR, "Failed to put device address: %d\n", rc); diff --git a/msm/eva/msm_cvp_buf.c b/msm/eva/msm_cvp_buf.c index a4e1e211e1..9d22df2191 100644 --- a/msm/eva/msm_cvp_buf.c +++ b/msm/eva/msm_cvp_buf.c @@ -1794,7 +1794,7 @@ struct cvp_internal_buf *cvp_allocate_arp_bufs(struct msm_cvp_inst *inst, /* PERSIST buffer requires secure mapping * Disable and wait for hyp_assign available */ - smem_flags |= SMEM_SECURE | SMEM_NON_PIXEL; + smem_flags |= SMEM_SECURE | SMEM_NON_PIXEL; buf = cvp_kmem_cache_zalloc(&cvp_driver->buf_cache, GFP_KERNEL); if (!buf) { diff --git a/msm/eva/msm_cvp_debug.c b/msm/eva/msm_cvp_debug.c index 9da81cb07e..e2f7c4481e 100644 --- a/msm/eva/msm_cvp_debug.c +++ b/msm/eva/msm_cvp_debug.c @@ -22,7 +22,7 @@ int msm_cvp_fw_debug = 0x18; int msm_cvp_fw_debug_mode = 1; int msm_cvp_fw_low_power_mode = 0; /*disable during initial stage*/ bool msm_cvp_fw_coverage = !true; -bool msm_cvp_auto_pil = !true; /*disable during initial stage*/ +bool msm_cvp_auto_pil = true; bool msm_cvp_cacheop_enabled = true; bool msm_cvp_thermal_mitigation_disabled = !true; bool msm_cvp_cacheop_disabled = !true; diff --git a/msm/eva/msm_cvp_platform.c b/msm/eva/msm_cvp_platform.c index ae44e53d0f..3d2c88056f 100644 --- a/msm/eva/msm_cvp_platform.c +++ b/msm/eva/msm_cvp_platform.c @@ -247,7 +247,7 @@ static struct msm_cvp_common_data sm8650_common_data[] = { }, { .key = "qcom,dsp-enabled", - .value = 0, /* Disable during initial stage for Rumi 48 bringup */ + .value = 1, } }; diff --git a/msm/eva/msm_cvp_res_parse.c b/msm/eva/msm_cvp_res_parse.c index 8ebae0bcfd..776b0b315f 100644 --- a/msm/eva/msm_cvp_res_parse.c +++ b/msm/eva/msm_cvp_res_parse.c @@ -1019,8 +1019,10 @@ int msm_cvp_smmu_fault_handler(struct iommu_domain *domain, msm_cvp_print_inst_bufs(inst, log); } hdev = core->device->hfi_device_data; - if (hdev) + if (hdev) { hdev->error = CVP_ERR_NOC_ERROR; + call_hfi_op(core->device, debug_hook, hdev); + } mutex_unlock(&core->lock); /* * Return -EINVAL to elicit the default behaviour of smmu driver.