RE: [PATCH 2/4] drm/amd/display: Set minimum requirement for using PSR-SU on Rembrandt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[AMD Official Use Only - General]

> -----Original Message-----
> From: Li, Sun peng (Leo) <Sunpeng.Li@xxxxxxx>
> Sent: Friday, June 23, 2023 2:27 PM
> To: Limonciello, Mario <Mario.Limonciello@xxxxxxx>; amd-
> gfx@xxxxxxxxxxxxxxxxxxxxx
> Cc: Lin, Tsung-hua (Ryan) <Tsung-hua.Lin@xxxxxxx>; Rossi, Marc
> <Marc.Rossi@xxxxxxx>; Wang, Sean <sean.ns.wang@xxxxxxx>; Mahfooz,
> Hamza <Hamza.Mahfooz@xxxxxxx>
> Subject: Re: [PATCH 2/4] drm/amd/display: Set minimum requirement for
> using PSR-SU on Rembrandt
>
>
>
>
> On 6/22/23 14:25, Mario Limonciello wrote:
> > A number of parade TCONs are causing system hangs when utilized with
> > older DMUB firmware and PSR-SU. Some changes have been introduced into
> > DMUB firmware to add resilience against these failures.
> >
> > Don't allow running PSR-SU unless on the newer firmware.
> >
> > Cc: Sean Wang <sean.ns.wang@xxxxxxx>
> > Cc: Marc Rossi <Marc.Rossi@xxxxxxx>
> > Cc: Hamza Mahfooz <Hamza.Mahfooz@xxxxxxx>
> > Cc: Tsung-hua (Ryan) Lin <Tsung-hua.Lin@xxxxxxx>
> > Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2443
> > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
> > ---
> >   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c |  3 ++-
> >   drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c          |  7 +++++++
> >   drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h          |  1 +
> >   drivers/gpu/drm/amd/display/dmub/dmub_srv.h           |  2 ++
> >   drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.c     |  5 +++++
> >   drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.h     |  2 ++
> >   drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c       | 10 ++++++----
> >   7 files changed, 25 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
> > index d647f68fd563..4f61d4f257cd 100644
> > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
> > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_psr.c
> > @@ -24,6 +24,7 @@
> >    */
> >
> >   #include "amdgpu_dm_psr.h"
> > +#include "dc_dmub_srv.h"
> >   #include "dc.h"
> >   #include "dm_helpers.h"
> >   #include "amdgpu_dm.h"
> > @@ -50,7 +51,7 @@ static bool link_supports_psrsu(struct dc_link *link)
> >         !link->dpcd_caps.psr_info.psr2_su_y_granularity_cap)
> >             return false;
> >
> > -   return true;
> > +   return dc_dmub_check_min_version(dc->ctx->dmub_srv->dmub);
> >   }
> >
> >   /*
> > diff --git a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
> b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
> > index c52c40b16387..c753c6f30dd7 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
> > +++ b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.c
> > @@ -1011,3 +1011,10 @@ void dc_send_update_cursor_info_to_dmu(
> >             dm_execute_dmub_cmd_list(pCtx->stream->ctx, 2, cmd,
> DM_DMUB_WAIT_TYPE_WAIT);
> >     }
> >   }
> > +
> > +bool dc_dmub_check_min_version(struct dmub_srv *srv)
> > +{
> > +   if (!srv->hw_funcs.is_psrsu_supported)
> > +           return true;
> > +   return srv->hw_funcs.is_psrsu_supported(srv);
> > +}
> > diff --git a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h
> b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h
> > index a5196a9292b3..099f94b6107c 100644
> > --- a/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h
> > +++ b/drivers/gpu/drm/amd/display/dc/dc_dmub_srv.h
> > @@ -86,4 +86,5 @@ void dc_dmub_setup_subvp_dmub_command(struct
> dc *dc, struct dc_state *context, b
> >   void dc_dmub_srv_log_diagnostic_data(struct dc_dmub_srv
> *dc_dmub_srv);
> >
> >   void dc_send_update_cursor_info_to_dmu(struct pipe_ctx *pCtx, uint8_t
> pipe_idx);
> > +bool dc_dmub_check_min_version(struct dmub_srv *srv);
> >   #endif /* _DMUB_DC_SRV_H_ */
> > diff --git a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
> b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
> > index 2a66a305679a..4585e0419da6 100644
> > --- a/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
> > +++ b/drivers/gpu/drm/amd/display/dmub/dmub_srv.h
> > @@ -367,6 +367,8 @@ struct dmub_srv_hw_funcs {
> >
> >     bool (*is_supported)(struct dmub_srv *dmub);
> >
> > +   bool (*is_psrsu_supported)(struct dmub_srv *dmub);
> > +
> >     bool (*is_hw_init)(struct dmub_srv *dmub);
> >
> >     void (*enable_dmub_boot_options)(struct dmub_srv *dmub,
> > diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.c
> b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.c
> > index ebf7aeec4029..c8445d474107 100644
> > --- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.c
> > +++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.c
> > @@ -302,6 +302,11 @@ bool dmub_dcn31_is_supported(struct dmub_srv
> *dmub)
> >     return supported;
> >   }
> >
> > +bool dmub_dcn31_is_psrsu_supported(struct dmub_srv *dmub)
> > +{
> > +   return dmub->fw_version >= DMUB_FW_VERSION(4, 0, 58);
> > +}
> > +
> >   void dmub_dcn31_set_gpint(struct dmub_srv *dmub,
> >                       union dmub_gpint_data_register reg)
> >   {
> > diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.h
> b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.h
> > index 7d5c10ee539b..89c5a948b67d 100644
> > --- a/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.h
> > +++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_dcn31.h
> > @@ -221,6 +221,8 @@ bool dmub_dcn31_is_hw_init(struct dmub_srv
> *dmub);
> >
> >   bool dmub_dcn31_is_supported(struct dmub_srv *dmub);
> >
> > +bool dmub_dcn31_is_psrsu_supported(struct dmub_srv *dmub);
> > +
> >   void dmub_dcn31_set_gpint(struct dmub_srv *dmub,
> >                       union dmub_gpint_data_register reg);
> >
> > diff --git a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
> b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
> > index 9e9a6a44a7ac..fd5b043dd32d 100644
> > --- a/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
> > +++ b/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
> > @@ -226,14 +226,16 @@ static bool dmub_srv_hw_setup(struct
> dmub_srv *dmub, enum dmub_asic asic)
> >     case DMUB_ASIC_DCN314:
> >     case DMUB_ASIC_DCN315:
> >     case DMUB_ASIC_DCN316:
> > -           if (asic == DMUB_ASIC_DCN314)
> > +           if (asic == DMUB_ASIC_DCN314) {
> >                     dmub->regs_dcn31 = &dmub_srv_dcn314_regs;
> > -           else if (asic == DMUB_ASIC_DCN315)
> > +                   funcs->is_psrsu_supported =
> dmub_dcn314_is_psrsu_supported;
> > +           } else if (asic == DMUB_ASIC_DCN315) {
> >                     dmub->regs_dcn31 = &dmub_srv_dcn315_regs;
> > -           else if (asic == DMUB_ASIC_DCN316)
> > +           } else if (asic == DMUB_ASIC_DCN316) {
> >                     dmub->regs_dcn31 = &dmub_srv_dcn316_regs;
> > -           else
> > +           } else {
> >                     dmub->regs_dcn31 = &dmub_srv_dcn31_regs;
> > +           }
>
> Should these hunks be rolled into 3/4? dmub_dcn314_is_psrsu_supported is
> defined there.
>

Ah yup; I mixed the two up when I split the patch in half.  Will fix, thanks.

> Thanks,
> Leo
> >             funcs->reset = dmub_dcn31_reset;
> >             funcs->reset_release = dmub_dcn31_reset_release;
> >             funcs->backdoor_load = dmub_dcn31_backdoor_load;




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux