]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/amd/display: Create debug option to disable v.active clock change policy.
authorDavid Galiffi <David.Galiffi@amd.com>
Tue, 1 Oct 2019 22:29:56 +0000 (18:29 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 13 Nov 2019 20:29:43 +0000 (15:29 -0500)
[WHY]
It has been a useful option in debugging GFXOFF and P.State Change issues.
May be required as for platform specific workaround.

[HOW]
Create option in enum dc_debug_options, "disable_vactive_clock_change".
When it is set, dm_dram_clock_change_vactive, will translate into
p_state_change_support: false.

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/dc.h
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
drivers/gpu/drm/amd/display/dc/dml/dcn20/display_mode_vba_20.c
drivers/gpu/drm/amd/display/dc/dml/dcn20/display_mode_vba_20v2.c
drivers/gpu/drm/amd/display/dc/dml/display_mode_structs.h
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h

index 5d47871ff19cd0cbe60d9acdc4c8615996d0fa92..cc45d77a3b0d9f0529354169e6ce3f07effd4d05 100644 (file)
@@ -423,6 +423,7 @@ struct dc_debug_options {
        int force_clock_mode;/*every mode change.*/
 
        bool nv12_iflip_vm_wa;
+       bool disable_dram_clock_change_vactive_support;
 };
 
 struct dc_debug_data {
index bbd1c98564be50c0928af800ffb08841fda18ab2..e73a65606a4a954d605f5b5e0190193e25ba7ba2 100644 (file)
@@ -2850,6 +2850,7 @@ bool dcn20_validate_bandwidth(struct dc *dc, struct dc_state *context,
        bool full_pstate_supported = false;
        bool dummy_pstate_supported = false;
        double p_state_latency_us = context->bw_ctx.dml.soc.dram_clock_change_latency_us;
+       context->bw_ctx.dml.soc.disable_dram_clock_change_vactive_support = dc->debug.disable_dram_clock_change_vactive_support;
 
        if (fast_validate)
                return dcn20_validate_bandwidth_internal(dc, context, true);
index 6c6c486b774a4ea8d043ba8cae61a4ac6a36cbd9..77b7574c63cb98df873b30f92c567b0c8e87e942 100644 (file)
@@ -2577,7 +2577,8 @@ static void dml20_DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPer
                        mode_lib->vba.MinActiveDRAMClockChangeMargin
                                        + mode_lib->vba.DRAMClockChangeLatency;
 
-       if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 50) {
+       if (mode_lib->vba.DRAMClockChangeSupportsVActive &&
+                       mode_lib->vba.MinActiveDRAMClockChangeMargin > 50) {
                mode_lib->vba.DRAMClockChangeWatermark += 25;
                mode_lib->vba.DRAMClockChangeSupport[0][0] = dm_dram_clock_change_vactive;
        } else {
index d63ca4ccf7cf7ad83199058a5e2faa1c5332e34c..62dfd36d830a760b9f7c807b564a528f99ca0b41 100644 (file)
@@ -2611,12 +2611,12 @@ static void dml20v2_DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndP
                        mode_lib->vba.MinActiveDRAMClockChangeMargin
                                        + mode_lib->vba.DRAMClockChangeLatency;
 
-
-       if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 50) {
+       if (mode_lib->vba.DRAMClockChangeSupportsVActive &&
+               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.MinActiveDRAMClockChangeMargin > 0) {
                mode_lib->vba.DRAMClockChangeSupport[0][0] = dm_dram_clock_change_vactive;
        } else {
                if (mode_lib->vba.SynchronizedVBlank || mode_lib->vba.NumberOfActivePlanes == 1) {
index cfacd602746756a8563a9d476bbd841eae5c78a2..19356180cbb67ebdab63c1d20938577bcbb94e21 100644 (file)
@@ -112,6 +112,7 @@ struct _vcs_dpi_soc_bounding_box_st {
        bool do_urgent_latency_adjustment;
        double urgent_latency_adjustment_fabric_clock_component_us;
        double urgent_latency_adjustment_fabric_clock_reference_mhz;
+       bool disable_dram_clock_change_vactive_support;
 };
 
 struct _vcs_dpi_ip_params_st {
index 81db8517a6900742eb69c91f932882d913ce4bae..da5e9d2fd6b694ad576db3a8cf77578a8656bc8b 100644 (file)
@@ -223,6 +223,8 @@ static void fetch_socbb_params(struct display_mode_lib *mode_lib)
        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.DRAMClockChangeSupportsVActive = !soc->disable_dram_clock_change_vactive_support ||
+                       mode_lib->vba.DummyPStateCheck;
 
        mode_lib->vba.Downspreading = soc->downspread_percent;
        mode_lib->vba.DRAMChannelWidth = soc->dram_channel_width_bytes;   // new!
index 6c59a332093aed93a589597d038a57e0118e4c22..6d8b5c61de689264879f26a61baa4a1ec8773bbf 100644 (file)
@@ -156,6 +156,7 @@ struct vba_vars_st {
        unsigned int DSCFormatFactor;
 
        bool DummyPStateCheck;
+       bool DRAMClockChangeSupportsVActive;
        bool PrefetchModeSupported;
        enum self_refresh_affinity AllowDRAMSelfRefreshOrDRAMClockChangeInVblank; // Mode Support only
        double XFCRemoteSurfaceFlipDelay;