Re: [PATCH v3 02/12] drm/msm/dpu: add current resource allocation to dumped state

2024-02-14 Thread Dmitry Baryshkov
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

2024-02-14 Thread Abhinav Kumar




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

2023-09-13 Thread Dmitry Baryshkov
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