drm/amd/display: Fix assert observed when performing dummy p-state check
authorDavid Galiffi <David.Galiffi@amd.com>
Sat, 12 Oct 2019 20:18:32 +0000 (16:18 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Nov 2019 20:29:43 +0000 (15:29 -0500)
[WHY]
V.Active dram clock change workaround need a small modification for DMLv2
to ensure that the dummy p-state check doesn't fail.

Signed-off-by: David Galiffi <David.Galiffi@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn20/display_mode_vba_20v2.c
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h

index 3c70dd5..d63ca4c 100644 (file)
@@ -2611,9 +2611,13 @@ static void dml20v2_DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndP
                        mode_lib->vba.MinActiveDRAMClockChangeMargin
                                        + mode_lib->vba.DRAMClockChangeLatency;
 
+
        if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 50) {
                mode_lib->vba.DRAMClockChangeWatermark += 25;
                mode_lib->vba.DRAMClockChangeSupport[0][0] = dm_dram_clock_change_vactive;
+       } else if (mode_lib->vba.DummyPStateCheck &&
+                               mode_lib->vba.MinActiveDRAMClockChangeMargin > 0) {
+               mode_lib->vba.DRAMClockChangeSupport[0][0] = dm_dram_clock_change_vactive;
        } else {
                if (mode_lib->vba.SynchronizedVBlank || mode_lib->vba.NumberOfActivePlanes == 1) {
                        mode_lib->vba.DRAMClockChangeSupport[0][0] = dm_dram_clock_change_vblank;
index 7f9a562..81db851 100644 (file)
@@ -222,6 +222,8 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
        mode_lib->vba.SRExitTime = soc->sr_exit_time_us;
        mode_lib->vba.SREnterPlusExitTime = soc->sr_enter_plus_exit_time_us;
        mode_lib->vba.DRAMClockChangeLatency = soc->dram_clock_change_latency_us;
+       mode_lib->vba.DummyPStateCheck = soc->dram_clock_change_latency_us == soc->dummy_pstate_latency_us;
+
        mode_lib->vba.Downspreading = soc->downspread_percent;
        mode_lib->vba.DRAMChannelWidth = soc->dram_channel_width_bytes;   // new!
        mode_lib->vba.FabricDatapathToDCNDataReturn = soc->fabric_datapath_to_dcn_data_return_bytes; // new!
index 1540ffb..6c59a33 100644 (file)
@@ -155,6 +155,7 @@ struct vba_vars_st {
        double UrgentLatencySupportUsChroma;
        unsigned int DSCFormatFactor;
 
+       bool DummyPStateCheck;
        bool PrefetchModeSupported;
        enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank; // Mode Support only
        double XFCRemoteSurfaceFlipDelay;