Loading drivers/gpu/drm/msm/sde/sde_encoder.c +20 −49 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ enum sde_enc_rc_states { * @recovery_events_enabled: status of hw recovery feature enable by client * @elevated_ahb_vote: increase AHB bus speed for the first frame * after power collapse * @pm_qos_cpu_req: pm_qos request for cpu frequency */ struct sde_encoder_virt { struct drm_encoder base; Loading Loading @@ -275,77 +276,47 @@ struct sde_encoder_virt { bool recovery_events_enabled; bool elevated_ahb_vote; struct pm_qos_request pm_qos_cpu_req; }; #define to_sde_encoder_virt(x) container_of(x, struct sde_encoder_virt, base) static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc) static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc, struct sde_kms *sde_kms) { struct msm_drm_private *priv; struct sde_kms *sde_kms; struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); struct pm_qos_request *req; u32 cpu_mask; u32 cpu_dma_latency; int cpu; if (!drm_enc->dev || !drm_enc->dev->dev_private) { SDE_ERROR("drm device invalid\n"); return; } priv = drm_enc->dev->dev_private; if (!priv->kms) { SDE_ERROR("invalid kms\n"); return; } sde_kms = to_sde_kms(priv->kms); if (!sde_kms || !sde_kms->catalog) if (!sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) return; cpu_mask = sde_kms->catalog->perf.cpu_mask; cpu_dma_latency = sde_kms->catalog->perf.cpu_dma_latency; if (!cpu_mask) return; if (atomic_inc_return(&sde_kms->pm_qos_counts) == 1) { req = &sde_kms->pm_qos_cpu_req; req = &sde_enc->pm_qos_cpu_req; req->type = PM_QOS_REQ_AFFINE_CORES; cpumask_empty(&req->cpus_affine); for_each_possible_cpu(cpu) { if ((1 << cpu) & cpu_mask) cpumask_set_cpu(cpu, &req->cpus_affine); } pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY, cpu_dma_latency); } pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY, cpu_dma_latency); SDE_EVT32_VERBOSE(DRMID(drm_enc), cpu_mask, cpu_dma_latency); } static void _sde_encoder_pm_qos_remove_request(struct drm_encoder *drm_enc) static void _sde_encoder_pm_qos_remove_request(struct drm_encoder *drm_enc, struct sde_kms *sde_kms) { struct msm_drm_private *priv; struct sde_kms *sde_kms; if (!drm_enc->dev || !drm_enc->dev->dev_private) { SDE_ERROR("drm device invalid\n"); return; } priv = drm_enc->dev->dev_private; if (!priv->kms) { SDE_ERROR("invalid kms\n"); return; } struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); sde_kms = to_sde_kms(priv->kms); if (!sde_kms || !sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) if (!sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) return; atomic_add_unless(&sde_kms->pm_qos_counts, -1, 0); if (atomic_read(&sde_kms->pm_qos_counts) == 0) pm_qos_remove_request(&sde_kms->pm_qos_cpu_req); pm_qos_remove_request(&sde_enc->pm_qos_cpu_req); } static struct drm_connector_state *_sde_encoder_get_conn_state( Loading Loading @@ -2165,11 +2136,11 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, _sde_encoder_irq_control(drm_enc, true); if (is_cmd_mode) _sde_encoder_pm_qos_add_request(drm_enc); _sde_encoder_pm_qos_add_request(drm_enc, sde_kms); } else { if (is_cmd_mode) _sde_encoder_pm_qos_remove_request(drm_enc); _sde_encoder_pm_qos_remove_request(drm_enc, sde_kms); /* disable all the irq */ _sde_encoder_irq_control(drm_enc, false); Loading drivers/gpu/drm/msm/sde/sde_kms.c +0 −1 Original line number Diff line number Diff line Loading @@ -3415,7 +3415,6 @@ static int sde_kms_hw_init(struct msm_kms *kms) mutex_init(&sde_kms->secure_transition_lock); atomic_set(&sde_kms->detach_sec_cb, 0); atomic_set(&sde_kms->detach_all_cb, 0); atomic_set(&sde_kms->pm_qos_counts, 0); /* * Support format modifiers for compression etc. Loading drivers/gpu/drm/msm/sde/sde_kms.h +0 −2 Original line number Diff line number Diff line Loading @@ -224,8 +224,6 @@ struct sde_kms { struct msm_gem_address_space *aspace[MSM_SMMU_DOMAIN_MAX]; struct sde_power_client *core_client; struct pm_qos_request pm_qos_cpu_req; atomic_t pm_qos_counts; struct sde_power_event *power_event; Loading Loading
drivers/gpu/drm/msm/sde/sde_encoder.c +20 −49 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ enum sde_enc_rc_states { * @recovery_events_enabled: status of hw recovery feature enable by client * @elevated_ahb_vote: increase AHB bus speed for the first frame * after power collapse * @pm_qos_cpu_req: pm_qos request for cpu frequency */ struct sde_encoder_virt { struct drm_encoder base; Loading Loading @@ -275,77 +276,47 @@ struct sde_encoder_virt { bool recovery_events_enabled; bool elevated_ahb_vote; struct pm_qos_request pm_qos_cpu_req; }; #define to_sde_encoder_virt(x) container_of(x, struct sde_encoder_virt, base) static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc) static void _sde_encoder_pm_qos_add_request(struct drm_encoder *drm_enc, struct sde_kms *sde_kms) { struct msm_drm_private *priv; struct sde_kms *sde_kms; struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); struct pm_qos_request *req; u32 cpu_mask; u32 cpu_dma_latency; int cpu; if (!drm_enc->dev || !drm_enc->dev->dev_private) { SDE_ERROR("drm device invalid\n"); return; } priv = drm_enc->dev->dev_private; if (!priv->kms) { SDE_ERROR("invalid kms\n"); return; } sde_kms = to_sde_kms(priv->kms); if (!sde_kms || !sde_kms->catalog) if (!sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) return; cpu_mask = sde_kms->catalog->perf.cpu_mask; cpu_dma_latency = sde_kms->catalog->perf.cpu_dma_latency; if (!cpu_mask) return; if (atomic_inc_return(&sde_kms->pm_qos_counts) == 1) { req = &sde_kms->pm_qos_cpu_req; req = &sde_enc->pm_qos_cpu_req; req->type = PM_QOS_REQ_AFFINE_CORES; cpumask_empty(&req->cpus_affine); for_each_possible_cpu(cpu) { if ((1 << cpu) & cpu_mask) cpumask_set_cpu(cpu, &req->cpus_affine); } pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY, cpu_dma_latency); } pm_qos_add_request(req, PM_QOS_CPU_DMA_LATENCY, cpu_dma_latency); SDE_EVT32_VERBOSE(DRMID(drm_enc), cpu_mask, cpu_dma_latency); } static void _sde_encoder_pm_qos_remove_request(struct drm_encoder *drm_enc) static void _sde_encoder_pm_qos_remove_request(struct drm_encoder *drm_enc, struct sde_kms *sde_kms) { struct msm_drm_private *priv; struct sde_kms *sde_kms; if (!drm_enc->dev || !drm_enc->dev->dev_private) { SDE_ERROR("drm device invalid\n"); return; } priv = drm_enc->dev->dev_private; if (!priv->kms) { SDE_ERROR("invalid kms\n"); return; } struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); sde_kms = to_sde_kms(priv->kms); if (!sde_kms || !sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) if (!sde_kms->catalog || !sde_kms->catalog->perf.cpu_mask) return; atomic_add_unless(&sde_kms->pm_qos_counts, -1, 0); if (atomic_read(&sde_kms->pm_qos_counts) == 0) pm_qos_remove_request(&sde_kms->pm_qos_cpu_req); pm_qos_remove_request(&sde_enc->pm_qos_cpu_req); } static struct drm_connector_state *_sde_encoder_get_conn_state( Loading Loading @@ -2165,11 +2136,11 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, _sde_encoder_irq_control(drm_enc, true); if (is_cmd_mode) _sde_encoder_pm_qos_add_request(drm_enc); _sde_encoder_pm_qos_add_request(drm_enc, sde_kms); } else { if (is_cmd_mode) _sde_encoder_pm_qos_remove_request(drm_enc); _sde_encoder_pm_qos_remove_request(drm_enc, sde_kms); /* disable all the irq */ _sde_encoder_irq_control(drm_enc, false); Loading
drivers/gpu/drm/msm/sde/sde_kms.c +0 −1 Original line number Diff line number Diff line Loading @@ -3415,7 +3415,6 @@ static int sde_kms_hw_init(struct msm_kms *kms) mutex_init(&sde_kms->secure_transition_lock); atomic_set(&sde_kms->detach_sec_cb, 0); atomic_set(&sde_kms->detach_all_cb, 0); atomic_set(&sde_kms->pm_qos_counts, 0); /* * Support format modifiers for compression etc. Loading
drivers/gpu/drm/msm/sde/sde_kms.h +0 −2 Original line number Diff line number Diff line Loading @@ -224,8 +224,6 @@ struct sde_kms { struct msm_gem_address_space *aspace[MSM_SMMU_DOMAIN_MAX]; struct sde_power_client *core_client; struct pm_qos_request pm_qos_cpu_req; atomic_t pm_qos_counts; struct sde_power_event *power_event; Loading