Re: [PATCH v3 02/12] drm/msm/dpu: add current resource allocation to dumped state
On Wed, 14 Feb 2024 at 20:41, Abhinav Kumar wrote: > > > > On 9/13/2023 10:06 PM, Dmitry Baryshkov wrote: > > 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. > > > > I like this idea ! > > > Signed-off-by: Dmitry Baryshkov > > --- > > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++ > > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 2 ++ > > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 48 + > > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 8 + > > 4 files changed, 62 insertions(+) > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > > index ee84160592ce..172b64dc60e6 100644 > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c > > @@ -362,6 +362,7 @@ static void dpu_kms_global_destroy_state(struct > > drm_private_obj *obj, > > 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_rm_print_state, > > }; > > > > static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) > > @@ -375,6 +376,9 @@ static int dpu_kms_global_obj_init(struct dpu_kms > > *dpu_kms) > > drm_atomic_private_obj_init(dpu_kms->dev, _kms->global_state, > > >base, > > _kms_global_state_funcs); > > + > > + state->rm = _kms->rm; > > + > > return 0; > > } > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > > index ed549f0f7c65..dd2be279b366 100644 > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h > > @@ -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]; > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > > index f9215643c71a..5e3442fb8678 100644 > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > > @@ -652,3 +652,51 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, > > > > return num_blks; > > } > > + > > +void dpu_rm_print_state(struct drm_printer *p, > > + const struct drm_private_state *state) > > +{ > > + const struct dpu_global_state *global_state = > > to_dpu_global_state(state); > > + const struct dpu_rm *rm = global_state->rm; > > + int i; > > + > > + drm_puts(p, "pingpong:"); > > + for (i = 0; i < ARRAY_SIZE(global_state->pingpong_to_enc_id); i++) > > + if (rm->pingpong_blks[i]) > > + drm_printf(p, " %d,", > > global_state->pingpong_to_enc_id[i]); > > + else > > + drm_puts(p, " -,"); > > + drm_puts(p, "\n"); > > + > > + drm_puts(p, "mixer:"); > > + for (i = 0; i < ARRAY_SIZE(global_state->mixer_to_enc_id); i++) > > + if (rm->mixer_blks[i]) > > + drm_printf(p, " %d,", > > global_state->mixer_to_enc_id[i]); > > + else > > + drm_puts(p, " -,"); > > + drm_puts(p, "\n"); > > + > > + drm_puts(p, "ctl:"); > > + for (i = 0; i < ARRAY_SIZE(global_state->ctl_to_enc_id); i++) > > + if (rm->ctl_blks[i]) > > + drm_printf(p, " %d,", global_state->ctl_to_enc_id[i]); > > + else > > + drm_puts(p, " -,"); > > + drm_puts(p, "\n"); > > + > > + drm_puts(p, "dspp:"); > > + for (i = 0; i < ARRAY_SIZE(global_state->dspp_to_enc_id); i++) > > + if (rm->dspp_blks[i]) > > + drm_printf(p, " %d,", > > global_state->dspp_to_enc_id[i]); > > + else > > + drm_puts(p, " -,"); > > + drm_puts(p, "\n"); > > + > > + drm_puts(p, "dsc:"); > > + for (i = 0; i < ARRAY_SIZE(global_state->dsc_to_enc_id); i++) > > + if (rm->dsc_blks[i]) > > + drm_printf(p, " %d,", global_state->dsc_to_enc_id[i]); > > + else > > + drm_puts(p, " -,"); > > + drm_puts(p, "\n"); > > +} > > You also need to include cdm_to_enc_id now. But otherwise LGTM. > > If you have run this before, do you have a sample output to share? No, I don't have a dump at hand. But I can post this patch separately, including the CDM change. > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h > > b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h > > index 2b551566cbf4..913baca81a42 100644 > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h
Re: [PATCH v3 02/12] drm/msm/dpu: add current resource allocation to dumped state
On 9/13/2023 10:06 PM, Dmitry Baryshkov wrote: 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. I like this idea ! Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 2 ++ drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 48 + drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 8 + 4 files changed, 62 insertions(+) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index ee84160592ce..172b64dc60e6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -362,6 +362,7 @@ static void dpu_kms_global_destroy_state(struct drm_private_obj *obj, 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_rm_print_state, }; static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) @@ -375,6 +376,9 @@ static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) drm_atomic_private_obj_init(dpu_kms->dev, _kms->global_state, >base, _kms_global_state_funcs); + + state->rm = _kms->rm; + return 0; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h index ed549f0f7c65..dd2be279b366 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h @@ -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]; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c index f9215643c71a..5e3442fb8678 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -652,3 +652,51 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, return num_blks; } + +void dpu_rm_print_state(struct drm_printer *p, + const struct drm_private_state *state) +{ + const struct dpu_global_state *global_state = to_dpu_global_state(state); + const struct dpu_rm *rm = global_state->rm; + int i; + + drm_puts(p, "pingpong:"); + for (i = 0; i < ARRAY_SIZE(global_state->pingpong_to_enc_id); i++) + if (rm->pingpong_blks[i]) + drm_printf(p, " %d,", global_state->pingpong_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "mixer:"); + for (i = 0; i < ARRAY_SIZE(global_state->mixer_to_enc_id); i++) + if (rm->mixer_blks[i]) + drm_printf(p, " %d,", global_state->mixer_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "ctl:"); + for (i = 0; i < ARRAY_SIZE(global_state->ctl_to_enc_id); i++) + if (rm->ctl_blks[i]) + drm_printf(p, " %d,", global_state->ctl_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "dspp:"); + for (i = 0; i < ARRAY_SIZE(global_state->dspp_to_enc_id); i++) + if (rm->dspp_blks[i]) + drm_printf(p, " %d,", global_state->dspp_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "dsc:"); + for (i = 0; i < ARRAY_SIZE(global_state->dsc_to_enc_id); i++) + if (rm->dsc_blks[i]) + drm_printf(p, " %d,", global_state->dsc_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); +} You also need to include cdm_to_enc_id now. But otherwise LGTM. If you have run this before, do you have a sample output to share? diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h index 2b551566cbf4..913baca81a42 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h @@ -92,6 +92,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 + * @state: private object state + */ +void dpu_rm_print_state(struct drm_printer *p, + const struct drm_private_state *state); + /** *
[Freedreno] [PATCH v3 02/12] 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. Signed-off-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 4 +++ drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 2 ++ drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 48 + drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 8 + 4 files changed, 62 insertions(+) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c index ee84160592ce..172b64dc60e6 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c @@ -362,6 +362,7 @@ static void dpu_kms_global_destroy_state(struct drm_private_obj *obj, 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_rm_print_state, }; static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) @@ -375,6 +376,9 @@ static int dpu_kms_global_obj_init(struct dpu_kms *dpu_kms) drm_atomic_private_obj_init(dpu_kms->dev, _kms->global_state, >base, _kms_global_state_funcs); + + state->rm = _kms->rm; + return 0; } diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h index ed549f0f7c65..dd2be279b366 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h @@ -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]; diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c index f9215643c71a..5e3442fb8678 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c @@ -652,3 +652,51 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, return num_blks; } + +void dpu_rm_print_state(struct drm_printer *p, + const struct drm_private_state *state) +{ + const struct dpu_global_state *global_state = to_dpu_global_state(state); + const struct dpu_rm *rm = global_state->rm; + int i; + + drm_puts(p, "pingpong:"); + for (i = 0; i < ARRAY_SIZE(global_state->pingpong_to_enc_id); i++) + if (rm->pingpong_blks[i]) + drm_printf(p, " %d,", global_state->pingpong_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "mixer:"); + for (i = 0; i < ARRAY_SIZE(global_state->mixer_to_enc_id); i++) + if (rm->mixer_blks[i]) + drm_printf(p, " %d,", global_state->mixer_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "ctl:"); + for (i = 0; i < ARRAY_SIZE(global_state->ctl_to_enc_id); i++) + if (rm->ctl_blks[i]) + drm_printf(p, " %d,", global_state->ctl_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "dspp:"); + for (i = 0; i < ARRAY_SIZE(global_state->dspp_to_enc_id); i++) + if (rm->dspp_blks[i]) + drm_printf(p, " %d,", global_state->dspp_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); + + drm_puts(p, "dsc:"); + for (i = 0; i < ARRAY_SIZE(global_state->dsc_to_enc_id); i++) + if (rm->dsc_blks[i]) + drm_printf(p, " %d,", global_state->dsc_to_enc_id[i]); + else + drm_puts(p, " -,"); + drm_puts(p, "\n"); +} diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h index 2b551566cbf4..913baca81a42 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h @@ -92,6 +92,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 + * @state: private object state + */ +void dpu_rm_print_state(struct drm_printer *p, + const struct drm_private_state *state); + /** * dpu_rm_get_intf - Return a struct dpu_hw_intf instance given it's index. * @rm: DPU Resource Manager handle -- 2.39.2