mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 19:26:01 -04:00
drm/msm/dpu: separate common function to init physical encoder
Move common DPU physical encoder initialization code to the new function dpu_encoder_phys_init(). Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Tested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> # sc7280 Patchwork: https://patchwork.freedesktop.org/patch/540630/ Link: https://lore.kernel.org/r/20230601172236.564445-3-dmitry.baryshkov@linaro.org Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
This commit is contained in:
@@ -2366,8 +2366,6 @@ static int dpu_encoder_setup_display(struct dpu_encoder_virt *dpu_enc,
|
||||
|
||||
for (i = 0; i < dpu_enc->num_phys_encs; i++) {
|
||||
struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i];
|
||||
atomic_set(&phys->vsync_cnt, 0);
|
||||
atomic_set(&phys->underrun_cnt, 0);
|
||||
|
||||
if (phys->intf_idx >= INTF_0 && phys->intf_idx < INTF_MAX)
|
||||
phys->hw_intf = dpu_rm_get_intf(&dpu_kms->rm, phys->intf_idx);
|
||||
@@ -2569,3 +2567,30 @@ unsigned int dpu_encoder_helper_get_dsc(struct dpu_encoder_phys *phys_enc)
|
||||
|
||||
return dpu_enc->dsc_mask;
|
||||
}
|
||||
|
||||
void dpu_encoder_phys_init(struct dpu_encoder_phys *phys_enc,
|
||||
struct dpu_enc_phys_init_params *p)
|
||||
{
|
||||
int i;
|
||||
|
||||
phys_enc->hw_mdptop = p->dpu_kms->hw_mdp;
|
||||
phys_enc->intf_idx = p->intf_idx;
|
||||
phys_enc->wb_idx = p->wb_idx;
|
||||
phys_enc->parent = p->parent;
|
||||
phys_enc->dpu_kms = p->dpu_kms;
|
||||
phys_enc->split_role = p->split_role;
|
||||
phys_enc->enc_spinlock = p->enc_spinlock;
|
||||
phys_enc->enable_state = DPU_ENC_DISABLED;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(phys_enc->irq); i++)
|
||||
phys_enc->irq[i] = -EINVAL;
|
||||
|
||||
atomic_set(&phys_enc->vblank_refcount, 0);
|
||||
atomic_set(&phys_enc->pending_kickoff_cnt, 0);
|
||||
atomic_set(&phys_enc->pending_ctlstart_cnt, 0);
|
||||
|
||||
atomic_set(&phys_enc->vsync_cnt, 0);
|
||||
atomic_set(&phys_enc->underrun_cnt, 0);
|
||||
|
||||
init_waitqueue_head(&phys_enc->pending_kickoff_wq);
|
||||
}
|
||||
|
||||
@@ -407,4 +407,7 @@ void dpu_encoder_frame_done_callback(
|
||||
struct drm_encoder *drm_enc,
|
||||
struct dpu_encoder_phys *ready_phys, u32 event);
|
||||
|
||||
void dpu_encoder_phys_init(struct dpu_encoder_phys *phys,
|
||||
struct dpu_enc_phys_init_params *p);
|
||||
|
||||
#endif /* __dpu_encoder_phys_H__ */
|
||||
|
||||
@@ -756,7 +756,7 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(
|
||||
{
|
||||
struct dpu_encoder_phys *phys_enc = NULL;
|
||||
struct dpu_encoder_phys_cmd *cmd_enc = NULL;
|
||||
int i, ret = 0;
|
||||
int ret = 0;
|
||||
|
||||
DPU_DEBUG("intf %d\n", p->intf_idx - INTF_0);
|
||||
|
||||
@@ -767,28 +767,17 @@ struct dpu_encoder_phys *dpu_encoder_phys_cmd_init(
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
phys_enc = &cmd_enc->base;
|
||||
phys_enc->hw_mdptop = p->dpu_kms->hw_mdp;
|
||||
phys_enc->intf_idx = p->intf_idx;
|
||||
|
||||
dpu_encoder_phys_init(phys_enc, p);
|
||||
|
||||
dpu_encoder_phys_cmd_init_ops(&phys_enc->ops);
|
||||
phys_enc->parent = p->parent;
|
||||
phys_enc->dpu_kms = p->dpu_kms;
|
||||
phys_enc->split_role = p->split_role;
|
||||
phys_enc->intf_mode = INTF_MODE_CMD;
|
||||
phys_enc->enc_spinlock = p->enc_spinlock;
|
||||
cmd_enc->stream_sel = 0;
|
||||
phys_enc->enable_state = DPU_ENC_DISABLED;
|
||||
for (i = 0; i < ARRAY_SIZE(phys_enc->irq); i++)
|
||||
phys_enc->irq[i] = -EINVAL;
|
||||
|
||||
phys_enc->has_intf_te = test_bit(DPU_INTF_TE,
|
||||
&phys_enc->dpu_kms->catalog->intf[p->intf_idx - INTF_0].features);
|
||||
|
||||
atomic_set(&phys_enc->vblank_refcount, 0);
|
||||
atomic_set(&phys_enc->pending_kickoff_cnt, 0);
|
||||
atomic_set(&phys_enc->pending_ctlstart_cnt, 0);
|
||||
atomic_set(&cmd_enc->pending_vblank_cnt, 0);
|
||||
init_waitqueue_head(&phys_enc->pending_kickoff_wq);
|
||||
init_waitqueue_head(&cmd_enc->pending_vblank_wq);
|
||||
|
||||
DPU_DEBUG_CMDENC(cmd_enc, "created\n");
|
||||
|
||||
@@ -699,7 +699,6 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init(
|
||||
struct dpu_enc_phys_init_params *p)
|
||||
{
|
||||
struct dpu_encoder_phys *phys_enc = NULL;
|
||||
int i;
|
||||
|
||||
if (!p) {
|
||||
DPU_ERROR("failed to create encoder due to invalid parameter\n");
|
||||
@@ -712,24 +711,12 @@ struct dpu_encoder_phys *dpu_encoder_phys_vid_init(
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
|
||||
phys_enc->hw_mdptop = p->dpu_kms->hw_mdp;
|
||||
phys_enc->intf_idx = p->intf_idx;
|
||||
|
||||
DPU_DEBUG_VIDENC(phys_enc, "\n");
|
||||
|
||||
dpu_encoder_phys_vid_init_ops(&phys_enc->ops);
|
||||
phys_enc->parent = p->parent;
|
||||
phys_enc->dpu_kms = p->dpu_kms;
|
||||
phys_enc->split_role = p->split_role;
|
||||
phys_enc->intf_mode = INTF_MODE_VIDEO;
|
||||
phys_enc->enc_spinlock = p->enc_spinlock;
|
||||
for (i = 0; i < ARRAY_SIZE(phys_enc->irq); i++)
|
||||
phys_enc->irq[i] = -EINVAL;
|
||||
dpu_encoder_phys_init(phys_enc, p);
|
||||
|
||||
atomic_set(&phys_enc->vblank_refcount, 0);
|
||||
atomic_set(&phys_enc->pending_kickoff_cnt, 0);
|
||||
init_waitqueue_head(&phys_enc->pending_kickoff_wq);
|
||||
phys_enc->enable_state = DPU_ENC_DISABLED;
|
||||
dpu_encoder_phys_vid_init_ops(&phys_enc->ops);
|
||||
phys_enc->intf_mode = INTF_MODE_VIDEO;
|
||||
|
||||
DPU_DEBUG_VIDENC(phys_enc, "created intf idx:%d\n", p->intf_idx);
|
||||
|
||||
|
||||
@@ -685,7 +685,6 @@ struct dpu_encoder_phys *dpu_encoder_phys_wb_init(
|
||||
struct dpu_encoder_phys *phys_enc = NULL;
|
||||
struct dpu_encoder_phys_wb *wb_enc = NULL;
|
||||
int ret = 0;
|
||||
int i;
|
||||
|
||||
DPU_DEBUG("\n");
|
||||
|
||||
@@ -703,28 +702,16 @@ struct dpu_encoder_phys *dpu_encoder_phys_wb_init(
|
||||
}
|
||||
|
||||
phys_enc = &wb_enc->base;
|
||||
phys_enc->hw_mdptop = p->dpu_kms->hw_mdp;
|
||||
phys_enc->wb_idx = p->wb_idx;
|
||||
|
||||
dpu_encoder_phys_init(phys_enc, p);
|
||||
|
||||
dpu_encoder_phys_wb_init_ops(&phys_enc->ops);
|
||||
phys_enc->parent = p->parent;
|
||||
phys_enc->dpu_kms = p->dpu_kms;
|
||||
phys_enc->split_role = p->split_role;
|
||||
phys_enc->intf_mode = INTF_MODE_WB_LINE;
|
||||
phys_enc->wb_idx = p->wb_idx;
|
||||
phys_enc->enc_spinlock = p->enc_spinlock;
|
||||
|
||||
atomic_set(&wb_enc->wbirq_refcount, 0);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(phys_enc->irq); i++)
|
||||
phys_enc->irq[i] = -EINVAL;
|
||||
|
||||
atomic_set(&phys_enc->pending_kickoff_cnt, 0);
|
||||
atomic_set(&phys_enc->vblank_refcount, 0);
|
||||
wb_enc->wb_done_timeout_cnt = 0;
|
||||
|
||||
init_waitqueue_head(&phys_enc->pending_kickoff_wq);
|
||||
phys_enc->enable_state = DPU_ENC_DISABLED;
|
||||
|
||||
DPU_DEBUG("Created dpu_encoder_phys for wb %d\n",
|
||||
phys_enc->wb_idx);
|
||||
|
||||
Reference in New Issue
Block a user