Commit 3cfcd130 authored by Dmitry Baryshkov's avatar Dmitry Baryshkov

drm/msm/dpu: introduce struct dpu_sw_pipe

Wrap SSPP and multirect index/mode into a single structure that
represents software view on the pipe used.
Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
Tested-by: Abhinav Kumar <quic_abhinavk@quicinc.com> # sc7280
Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/527326/
Link: https://lore.kernel.org/r/20230316161653.4106395-8-dmitry.baryshkov@linaro.orgSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent 19e98654
...@@ -432,7 +432,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, ...@@ -432,7 +432,7 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
pstate = to_dpu_plane_state(state); pstate = to_dpu_plane_state(state);
fb = state->fb; fb = state->fb;
sspp_idx = pstate->hw_sspp->idx; sspp_idx = pstate->pipe.sspp->idx;
set_bit(sspp_idx, fetch_active); set_bit(sspp_idx, fetch_active);
DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d\n", DRM_DEBUG_ATOMIC("crtc %d stage:%d - plane %d sspp %d fb %d\n",
...@@ -451,11 +451,10 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc, ...@@ -451,11 +451,10 @@ static void _dpu_crtc_blend_setup_mixer(struct drm_crtc *crtc,
stage_cfg->stage[pstate->stage][stage_idx] = stage_cfg->stage[pstate->stage][stage_idx] =
sspp_idx; sspp_idx;
stage_cfg->multirect_index[pstate->stage][stage_idx] = stage_cfg->multirect_index[pstate->stage][stage_idx] =
pstate->multirect_index; pstate->pipe.multirect_index;
trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane), trace_dpu_crtc_setup_mixer(DRMID(crtc), DRMID(plane),
state, pstate, stage_idx, state, pstate, stage_idx,
sspp_idx - SSPP_VIG0,
format->base.pixel_format, format->base.pixel_format,
fb ? fb->modifier : 0); fb ? fb->modifier : 0);
...@@ -1227,7 +1226,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc, ...@@ -1227,7 +1226,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
pstates[cnt].dpu_pstate = dpu_pstate; pstates[cnt].dpu_pstate = dpu_pstate;
pstates[cnt].drm_pstate = pstate; pstates[cnt].drm_pstate = pstate;
pstates[cnt].stage = pstate->normalized_zpos; pstates[cnt].stage = pstate->normalized_zpos;
pstates[cnt].pipe_id = to_dpu_plane_state(pstate)->hw_sspp->idx; pstates[cnt].pipe_id = to_dpu_plane_state(pstate)->pipe.sspp->idx;
dpu_pstate->needs_dirtyfb = needs_dirtyfb; dpu_pstate->needs_dirtyfb = needs_dirtyfb;
...@@ -1500,7 +1499,7 @@ static int _dpu_debugfs_status_show(struct seq_file *s, void *data) ...@@ -1500,7 +1499,7 @@ static int _dpu_debugfs_status_show(struct seq_file *s, void *data)
state->crtc_x, state->crtc_y, state->crtc_w, state->crtc_x, state->crtc_y, state->crtc_w,
state->crtc_h); state->crtc_h);
seq_printf(s, "\tmultirect: mode: %d index: %d\n", seq_printf(s, "\tmultirect: mode: %d index: %d\n",
pstate->multirect_mode, pstate->multirect_index); pstate->pipe.multirect_mode, pstate->pipe.multirect_index);
seq_puts(s, "\n"); seq_puts(s, "\n");
} }
......
...@@ -158,15 +158,11 @@ struct dpu_hw_pixel_ext { ...@@ -158,15 +158,11 @@ struct dpu_hw_pixel_ext {
* @src_rect: src ROI, caller takes into account the different operations * @src_rect: src ROI, caller takes into account the different operations
* such as decimation, flip etc to program this field * such as decimation, flip etc to program this field
* @dest_rect: destination ROI. * @dest_rect: destination ROI.
* @index: index of the rectangle of SSPP
* @mode: parallel or time multiplex multirect mode
*/ */
struct dpu_hw_sspp_cfg { struct dpu_hw_sspp_cfg {
struct dpu_hw_fmt_layout layout; struct dpu_hw_fmt_layout layout;
struct drm_rect src_rect; struct drm_rect src_rect;
struct drm_rect dst_rect; struct drm_rect dst_rect;
enum dpu_sspp_multirect_index index;
enum dpu_sspp_multirect_mode mode;
}; };
/** /**
...@@ -201,6 +197,18 @@ struct dpu_hw_pipe_ts_cfg { ...@@ -201,6 +197,18 @@ struct dpu_hw_pipe_ts_cfg {
u64 time; u64 time;
}; };
/**
* struct dpu_sw_pipe - software pipe description
* @sspp: backing SSPP pipe
* @index: index of the rectangle of SSPP
* @mode: parallel or time multiplex multirect mode
*/
struct dpu_sw_pipe {
struct dpu_hw_sspp *sspp;
enum dpu_sspp_multirect_index multirect_index;
enum dpu_sspp_multirect_mode multirect_mode;
};
/** /**
* struct dpu_hw_sspp_ops - interface to the SSPP Hw driver functions * struct dpu_hw_sspp_ops - interface to the SSPP Hw driver functions
* Caller must call the init function to get the pipe context for each pipe * Caller must call the init function to get the pipe context for each pipe
......
This diff is collapsed.
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* struct dpu_plane_state: Define dpu extension of drm plane state object * struct dpu_plane_state: Define dpu extension of drm plane state object
* @base: base drm plane state object * @base: base drm plane state object
* @aspace: pointer to address space for input/output buffers * @aspace: pointer to address space for input/output buffers
* @hw_sspp: pointer to corresponding SSPP instance * @pipe: software pipe description
* @stage: assigned by crtc blender * @stage: assigned by crtc blender
* @needs_qos_remap: qos remap settings need to be updated * @needs_qos_remap: qos remap settings need to be updated
* @multirect_index: index of the rectangle of SSPP * @multirect_index: index of the rectangle of SSPP
...@@ -32,11 +32,9 @@ ...@@ -32,11 +32,9 @@
struct dpu_plane_state { struct dpu_plane_state {
struct drm_plane_state base; struct drm_plane_state base;
struct msm_gem_address_space *aspace; struct msm_gem_address_space *aspace;
struct dpu_hw_sspp *hw_sspp; struct dpu_sw_pipe pipe;
enum dpu_stage stage; enum dpu_stage stage;
bool needs_qos_remap; bool needs_qos_remap;
uint32_t multirect_index;
uint32_t multirect_mode;
bool pending; bool pending;
u64 plane_fetch_bw; u64 plane_fetch_bw;
......
...@@ -633,9 +633,9 @@ TRACE_EVENT(dpu_enc_phys_vid_irq_ctrl, ...@@ -633,9 +633,9 @@ TRACE_EVENT(dpu_enc_phys_vid_irq_ctrl,
TRACE_EVENT(dpu_crtc_setup_mixer, TRACE_EVENT(dpu_crtc_setup_mixer,
TP_PROTO(uint32_t crtc_id, uint32_t plane_id, TP_PROTO(uint32_t crtc_id, uint32_t plane_id,
struct drm_plane_state *state, struct dpu_plane_state *pstate, struct drm_plane_state *state, struct dpu_plane_state *pstate,
uint32_t stage_idx, enum dpu_sspp sspp, uint32_t pixel_format, uint32_t stage_idx, uint32_t pixel_format,
uint64_t modifier), uint64_t modifier),
TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx, sspp, TP_ARGS(crtc_id, plane_id, state, pstate, stage_idx,
pixel_format, modifier), pixel_format, modifier),
TP_STRUCT__entry( TP_STRUCT__entry(
__field( uint32_t, crtc_id ) __field( uint32_t, crtc_id )
...@@ -659,9 +659,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer, ...@@ -659,9 +659,9 @@ TRACE_EVENT(dpu_crtc_setup_mixer,
__entry->dst_rect = drm_plane_state_dest(state); __entry->dst_rect = drm_plane_state_dest(state);
__entry->stage_idx = stage_idx; __entry->stage_idx = stage_idx;
__entry->stage = pstate->stage; __entry->stage = pstate->stage;
__entry->sspp = sspp; __entry->sspp = pstate->pipe.sspp->idx;
__entry->multirect_idx = pstate->multirect_index; __entry->multirect_idx = pstate->pipe.multirect_index;
__entry->multirect_mode = pstate->multirect_mode; __entry->multirect_mode = pstate->pipe.multirect_mode;
__entry->pixel_format = pixel_format; __entry->pixel_format = pixel_format;
__entry->modifier = modifier; __entry->modifier = modifier;
), ),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment