drm/msm/dpu: add current resource allocation to dumped state
Provide atomic_print_state callback to the DPU's private object. This way the debugfs/dri/0/state will also include RM's internal state. Example output (RB5 board, HDMI and writeback encoder enabled) resource mapping: pingpong=31 36 # # # # - - - - - mixer=31 36 # # # # - ctl=# # 31 36 # # dspp=# # # # dsc=# # # # - - cdm=# Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com> Patchwork: https://patchwork.freedesktop.org/patch/579648/ Link: https://lore.kernel.org/r/20240222-fd-rm-state-v5-1-4a6c81e87f63@linaro.org
This commit is contained in:
parent
22578178e5
commit
83bb87d128
@ -348,9 +348,18 @@ static void dpu_kms_global_destroy_state(struct drm_private_obj *obj,
|
||||
kfree(dpu_state);
|
||||
}
|
||||
|
||||
static void dpu_kms_global_print_state(struct drm_printer *p,
|
||||
const struct drm_private_state *state)
|
||||
{
|
||||
const struct dpu_global_state *global_state = to_dpu_global_state(state);
|
||||
|
||||
dpu_rm_print_state(p, global_state);
|
||||
}
|
||||
|
||||
static const struct drm_private_state_funcs dpu_kms_global_state_funcs = {
|
||||
.atomic_duplicate_state = dpu_kms_global_duplicate_state,
|
||||
.atomic_destroy_state = dpu_kms_global_destroy_state,
|
||||
.atomic_print_state = dpu_kms_global_print_state,
|
||||
};
|
||||
|
||||
static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms)
|
||||
@ -364,6 +373,9 @@ static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms)
|
||||
drm_atomic_private_obj_init(dpu_kms->dev, &dpu_kms->global_state,
|
||||
&state->base,
|
||||
&dpu_kms_global_state_funcs);
|
||||
|
||||
state->rm = &dpu_kms->rm;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -130,6 +130,8 @@ struct vsync_info {
|
||||
struct dpu_global_state {
|
||||
struct drm_private_state base;
|
||||
|
||||
struct dpu_rm *rm;
|
||||
|
||||
uint32_t pingpong_to_enc_id[PINGPONG_MAX - PINGPONG_0];
|
||||
uint32_t mixer_to_enc_id[LM_MAX - LM_0];
|
||||
uint32_t ctl_to_enc_id[CTL_MAX - CTL_0];
|
||||
|
@ -758,3 +758,59 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm,
|
||||
|
||||
return num_blks;
|
||||
}
|
||||
|
||||
static void dpu_rm_print_state_helper(struct drm_printer *p,
|
||||
struct dpu_hw_blk *blk,
|
||||
uint32_t mapping)
|
||||
{
|
||||
if (!blk)
|
||||
drm_puts(p, "- ");
|
||||
else if (!mapping)
|
||||
drm_puts(p, "# ");
|
||||
else
|
||||
drm_printf(p, "%d ", mapping);
|
||||
}
|
||||
|
||||
|
||||
void dpu_rm_print_state(struct drm_printer *p,
|
||||
const struct dpu_global_state *global_state)
|
||||
{
|
||||
const struct dpu_rm *rm = global_state->rm;
|
||||
int i;
|
||||
|
||||
drm_puts(p, "resource mapping:\n");
|
||||
drm_puts(p, "\tpingpong=");
|
||||
for (i = 0; i < ARRAY_SIZE(global_state->pingpong_to_enc_id); i++)
|
||||
dpu_rm_print_state_helper(p, rm->pingpong_blks[i],
|
||||
global_state->pingpong_to_enc_id[i]);
|
||||
drm_puts(p, "\n");
|
||||
|
||||
drm_puts(p, "\tmixer=");
|
||||
for (i = 0; i < ARRAY_SIZE(global_state->mixer_to_enc_id); i++)
|
||||
dpu_rm_print_state_helper(p, rm->mixer_blks[i],
|
||||
global_state->mixer_to_enc_id[i]);
|
||||
drm_puts(p, "\n");
|
||||
|
||||
drm_puts(p, "\tctl=");
|
||||
for (i = 0; i < ARRAY_SIZE(global_state->ctl_to_enc_id); i++)
|
||||
dpu_rm_print_state_helper(p, rm->ctl_blks[i],
|
||||
global_state->ctl_to_enc_id[i]);
|
||||
drm_puts(p, "\n");
|
||||
|
||||
drm_puts(p, "\tdspp=");
|
||||
for (i = 0; i < ARRAY_SIZE(global_state->dspp_to_enc_id); i++)
|
||||
dpu_rm_print_state_helper(p, rm->dspp_blks[i],
|
||||
global_state->dspp_to_enc_id[i]);
|
||||
drm_puts(p, "\n");
|
||||
|
||||
drm_puts(p, "\tdsc=");
|
||||
for (i = 0; i < ARRAY_SIZE(global_state->dsc_to_enc_id); i++)
|
||||
dpu_rm_print_state_helper(p, rm->dsc_blks[i],
|
||||
global_state->dsc_to_enc_id[i]);
|
||||
drm_puts(p, "\n");
|
||||
|
||||
drm_puts(p, "\tcdm=");
|
||||
dpu_rm_print_state_helper(p, rm->cdm_blk,
|
||||
global_state->cdm_to_enc_id);
|
||||
drm_puts(p, "\n");
|
||||
}
|
||||
|
@ -89,6 +89,14 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm,
|
||||
struct dpu_global_state *global_state, uint32_t enc_id,
|
||||
enum dpu_hw_blk_type type, struct dpu_hw_blk **blks, int blks_size);
|
||||
|
||||
/**
|
||||
* dpu_rm_print_state - output the RM private state
|
||||
* @p: DRM printer
|
||||
* @global_state: global state
|
||||
*/
|
||||
void dpu_rm_print_state(struct drm_printer *p,
|
||||
const struct dpu_global_state *global_state);
|
||||
|
||||
/**
|
||||
* dpu_rm_get_intf - Return a struct dpu_hw_intf instance given it's index.
|
||||
* @rm: DPU Resource Manager handle
|
||||
|
Loading…
x
Reference in New Issue
Block a user