Loading drivers/gpu/msm/adreno_a6xx_gmu.c +2 −2 Original line number Diff line number Diff line Loading @@ -1365,7 +1365,7 @@ void a6xx_gmu_register_config(struct adreno_device *adreno_dev) /* Log size is encoded in (number of 4K units - 1) */ gmu_log_info = (gmu->gmu_log->gmuaddr & 0xFFFFF000) | ((LOGMEM_SIZE/SZ_4K - 1) & 0xFF); ((GMU_LOG_SIZE/SZ_4K - 1) & 0xFF); gmu_core_regwrite(device, A6XX_GPU_GMU_CX_GMU_PWR_COL_CP_MSG, gmu_log_info); Loading Loading @@ -1564,7 +1564,7 @@ int a6xx_gmu_memory_init(struct adreno_device *adreno_dev) /* GMU master log */ if (IS_ERR_OR_NULL(gmu->gmu_log)) gmu->gmu_log = reserve_gmu_kernel_block(gmu, 0, SZ_4K, gmu->gmu_log = reserve_gmu_kernel_block(gmu, 0, GMU_LOG_SIZE, GMU_NONCACHED_KERNEL); return PTR_ERR_OR_ZERO(gmu->gmu_log); Loading drivers/gpu/msm/adreno_a6xx_gmu.h +3 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ struct gmu_block_header { #define GMU_BLK_TYPE_PREALLOC_PERSIST_REQ 7 /* For GMU Logs*/ #define LOGMEM_SIZE SZ_4K #define GMU_LOG_SIZE SZ_16K /* GMU memdesc entries */ #define GMU_KERNEL_ENTRIES 16 Loading Loading @@ -205,6 +205,8 @@ struct a6xx_gmu_device { void __iomem *rdpm_cx_virt; /** @rdpm_mx_virt: Pointer where the RDPM MX block is mapped */ void __iomem *rdpm_mx_virt; /** @log_stream_enable: GMU log streaming enable */ bool log_stream_enable; }; /* Helper function to get to a6xx gmu device from adreno device */ Loading drivers/gpu/msm/adreno_a6xx_hfi.c +21 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,27 @@ int a6xx_hfi_send_feature_ctrl(struct adreno_device *adreno_dev, return ret; } int a6xx_hfi_send_set_value(struct adreno_device *adreno_dev, u32 type, u32 subtype, u32 data) { struct a6xx_gmu_device *gmu = to_a6xx_gmu(adreno_dev); struct hfi_set_value_cmd cmd = { .type = type, .subtype = subtype, .data = data, }; int ret; CMD_MSG_HDR(cmd, H2F_MSG_SET_VALUE); ret = a6xx_hfi_send_generic_req(adreno_dev, &cmd); if (ret) dev_err(&gmu->pdev->dev, "Unable to set HFI Value %d, %d to %d, error = %d\n", type, subtype, data, ret); return ret; } static int a6xx_hfi_send_dcvstbl_v1(struct adreno_device *adreno_dev) { struct a6xx_gmu_device *gmu = to_a6xx_gmu(adreno_dev); Loading drivers/gpu/msm/adreno_a6xx_hfi.h +13 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ #define HFI_VALUE_LOG_EVENT_OFF 113 #define HFI_VALUE_DCVS_OBJ 114 #define HFI_VALUE_LM_CS0 115 #define HFI_VALUE_LOG_STREAM_ENABLE 119 #define HFI_VALUE_PREEMPT_COUNT 120 #define HFI_VALUE_GLOBAL_TOKEN 0xFFFFFFFF Loading Loading @@ -664,6 +665,18 @@ int a6xx_receive_ack_cmd(struct a6xx_gmu_device *gmu, void *rcvd, int a6xx_hfi_send_feature_ctrl(struct adreno_device *adreno_dev, u32 feature, u32 enable, u32 data); /** * a6xx_hfi_send_set_value - Send gmu set_values via hfi * @adreno_dev: Pointer to the adreno device * @type: GMU set_value type * @subtype: GMU set_value subtype * @data: Value to set * * Return: 0 on success or negative error on failure */ int a6xx_hfi_send_set_value(struct adreno_device *adreno_dev, u32 type, u32 subtype, u32 data); /** * a6xx_hfi_send_core_fw_start - Send the core fw start hfi * @adreno_dev: Pointer to the adreno device Loading drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c +4 −0 Original line number Diff line number Diff line Loading @@ -807,6 +807,10 @@ int a6xx_hwsched_hfi_start(struct adreno_device *adreno_dev) if (ret) goto err; if (gmu->log_stream_enable) a6xx_hfi_send_set_value(adreno_dev, HFI_VALUE_LOG_STREAM_ENABLE, 0, 1); ret = a6xx_hfi_send_core_fw_start(adreno_dev); if (ret) goto err; Loading Loading
drivers/gpu/msm/adreno_a6xx_gmu.c +2 −2 Original line number Diff line number Diff line Loading @@ -1365,7 +1365,7 @@ void a6xx_gmu_register_config(struct adreno_device *adreno_dev) /* Log size is encoded in (number of 4K units - 1) */ gmu_log_info = (gmu->gmu_log->gmuaddr & 0xFFFFF000) | ((LOGMEM_SIZE/SZ_4K - 1) & 0xFF); ((GMU_LOG_SIZE/SZ_4K - 1) & 0xFF); gmu_core_regwrite(device, A6XX_GPU_GMU_CX_GMU_PWR_COL_CP_MSG, gmu_log_info); Loading Loading @@ -1564,7 +1564,7 @@ int a6xx_gmu_memory_init(struct adreno_device *adreno_dev) /* GMU master log */ if (IS_ERR_OR_NULL(gmu->gmu_log)) gmu->gmu_log = reserve_gmu_kernel_block(gmu, 0, SZ_4K, gmu->gmu_log = reserve_gmu_kernel_block(gmu, 0, GMU_LOG_SIZE, GMU_NONCACHED_KERNEL); return PTR_ERR_OR_ZERO(gmu->gmu_log); Loading
drivers/gpu/msm/adreno_a6xx_gmu.h +3 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ struct gmu_block_header { #define GMU_BLK_TYPE_PREALLOC_PERSIST_REQ 7 /* For GMU Logs*/ #define LOGMEM_SIZE SZ_4K #define GMU_LOG_SIZE SZ_16K /* GMU memdesc entries */ #define GMU_KERNEL_ENTRIES 16 Loading Loading @@ -205,6 +205,8 @@ struct a6xx_gmu_device { void __iomem *rdpm_cx_virt; /** @rdpm_mx_virt: Pointer where the RDPM MX block is mapped */ void __iomem *rdpm_mx_virt; /** @log_stream_enable: GMU log streaming enable */ bool log_stream_enable; }; /* Helper function to get to a6xx gmu device from adreno device */ Loading
drivers/gpu/msm/adreno_a6xx_hfi.c +21 −0 Original line number Diff line number Diff line Loading @@ -439,6 +439,27 @@ int a6xx_hfi_send_feature_ctrl(struct adreno_device *adreno_dev, return ret; } int a6xx_hfi_send_set_value(struct adreno_device *adreno_dev, u32 type, u32 subtype, u32 data) { struct a6xx_gmu_device *gmu = to_a6xx_gmu(adreno_dev); struct hfi_set_value_cmd cmd = { .type = type, .subtype = subtype, .data = data, }; int ret; CMD_MSG_HDR(cmd, H2F_MSG_SET_VALUE); ret = a6xx_hfi_send_generic_req(adreno_dev, &cmd); if (ret) dev_err(&gmu->pdev->dev, "Unable to set HFI Value %d, %d to %d, error = %d\n", type, subtype, data, ret); return ret; } static int a6xx_hfi_send_dcvstbl_v1(struct adreno_device *adreno_dev) { struct a6xx_gmu_device *gmu = to_a6xx_gmu(adreno_dev); Loading
drivers/gpu/msm/adreno_a6xx_hfi.h +13 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ #define HFI_VALUE_LOG_EVENT_OFF 113 #define HFI_VALUE_DCVS_OBJ 114 #define HFI_VALUE_LM_CS0 115 #define HFI_VALUE_LOG_STREAM_ENABLE 119 #define HFI_VALUE_PREEMPT_COUNT 120 #define HFI_VALUE_GLOBAL_TOKEN 0xFFFFFFFF Loading Loading @@ -664,6 +665,18 @@ int a6xx_receive_ack_cmd(struct a6xx_gmu_device *gmu, void *rcvd, int a6xx_hfi_send_feature_ctrl(struct adreno_device *adreno_dev, u32 feature, u32 enable, u32 data); /** * a6xx_hfi_send_set_value - Send gmu set_values via hfi * @adreno_dev: Pointer to the adreno device * @type: GMU set_value type * @subtype: GMU set_value subtype * @data: Value to set * * Return: 0 on success or negative error on failure */ int a6xx_hfi_send_set_value(struct adreno_device *adreno_dev, u32 type, u32 subtype, u32 data); /** * a6xx_hfi_send_core_fw_start - Send the core fw start hfi * @adreno_dev: Pointer to the adreno device Loading
drivers/gpu/msm/adreno_a6xx_hwsched_hfi.c +4 −0 Original line number Diff line number Diff line Loading @@ -807,6 +807,10 @@ int a6xx_hwsched_hfi_start(struct adreno_device *adreno_dev) if (ret) goto err; if (gmu->log_stream_enable) a6xx_hfi_send_set_value(adreno_dev, HFI_VALUE_LOG_STREAM_ENABLE, 0, 1); ret = a6xx_hfi_send_core_fw_start(adreno_dev); if (ret) goto err; Loading