Message ID | 20241213060317.2674290-3-suraj.kandpal@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Extended Wake Timeout | expand |
Hi Suraj, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-tip/drm-tip v6.13-rc3 next-20241220] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-dp-Add-the-DPCD-register-required-for-Extended-wake-timeout/20241213-140525 base: linus/master patch link: https://lore.kernel.org/r/20241213060317.2674290-3-suraj.kandpal%40intel.com patch subject: [PATCH 2/2] drm/i915/lttpr: Enable Extended Wake Timeout config: i386-randconfig-013-20241220 (https://download.01.org/0day-ci/archive/20241221/202412210137.vRBJlttZ-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241221/202412210137.vRBJlttZ-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412210137.vRBJlttZ-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/gpu/drm/i915/display/intel_dp_link_training.c: In function 'intel_dp_lttpr_wake_timeout_setup': >> drivers/gpu/drm/i915/display/intel_dp_link_training.c:148:69: error: initialized field overwritten [-Werror=override-init] 148 | [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, | ^~ drivers/gpu/drm/i915/display/intel_dp_link_training.c:148:69: note: (near initialization for 'timeout_mapping[1]') cc1: all warnings being treated as errors vim +148 drivers/gpu/drm/i915/display/intel_dp_link_training.c 136 137 void intel_dp_lttpr_wake_timeout_setup(struct intel_dp *intel_dp) 138 { 139 struct intel_display *display = to_intel_display(intel_dp); 140 u8 val = 1; 141 int ret; 142 143 if (intel_dp_lttpr_transparent_mode_enabled(intel_dp)) { 144 static const u8 timeout_mapping[] = { 145 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS] = 1, 146 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 147 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS] = 40, > 148 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 149 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS] = 80, 150 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS] = 100, 151 }; 152 153 ret = drm_dp_dpcd_readb(&intel_dp->aux, 154 DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST, &val); 155 if (ret != 1) { 156 drm_dbg_kms(display->drm, 157 "Failed to read Extended sleep wake timeout request\n"); 158 return; 159 } 160 161 val = (val < sizeof(timeout_mapping) && timeout_mapping[val]) ? 162 timeout_mapping[val] : 1; 163 164 drm_dp_dpcd_writeb(&intel_dp->aux, DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT, 165 DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED); 166 } else { 167 ret = drm_dp_dpcd_readb(&intel_dp->aux, 168 DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &val); 169 if (ret != 1) { 170 drm_dbg_kms(display->drm, 171 "Failed to read Extended sleep wake timeout request\n"); 172 return; 173 } 174 175 val = (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) ? 176 (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) * 10 : 1; 177 178 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, 179 DP_EXTENDED_WAKE_TIMEOUT_GRANT); 180 } 181 } 182
Hi Suraj, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.13-rc3 next-20241220] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-dp-Add-the-DPCD-register-required-for-Extended-wake-timeout/20241213-140525 base: linus/master patch link: https://lore.kernel.org/r/20241213060317.2674290-3-suraj.kandpal%40intel.com patch subject: [PATCH 2/2] drm/i915/lttpr: Enable Extended Wake Timeout config: powerpc-randconfig-001-20241220 (https://download.01.org/0day-ci/archive/20241221/202412210826.fD0cAxev-lkp@intel.com/config) compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241221/202412210826.fD0cAxev-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412210826.fD0cAxev-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/gpu/drm/i915/display/intel_dp_link_training.c:148:48: error: initializer overrides prior initialization of this subobject [-Werror,-Winitializer-overrides] [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, ^~ drivers/gpu/drm/i915/display/intel_dp_link_training.c:146:48: note: previous initialization is here [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, ^~ 1 error generated. vim +148 drivers/gpu/drm/i915/display/intel_dp_link_training.c 136 137 void intel_dp_lttpr_wake_timeout_setup(struct intel_dp *intel_dp) 138 { 139 struct intel_display *display = to_intel_display(intel_dp); 140 u8 val = 1; 141 int ret; 142 143 if (intel_dp_lttpr_transparent_mode_enabled(intel_dp)) { 144 static const u8 timeout_mapping[] = { 145 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS] = 1, 146 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 147 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS] = 40, > 148 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 149 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS] = 80, 150 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS] = 100, 151 }; 152 153 ret = drm_dp_dpcd_readb(&intel_dp->aux, 154 DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST, &val); 155 if (ret != 1) { 156 drm_dbg_kms(display->drm, 157 "Failed to read Extended sleep wake timeout request\n"); 158 return; 159 } 160 161 val = (val < sizeof(timeout_mapping) && timeout_mapping[val]) ? 162 timeout_mapping[val] : 1; 163 164 drm_dp_dpcd_writeb(&intel_dp->aux, DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT, 165 DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED); 166 } else { 167 ret = drm_dp_dpcd_readb(&intel_dp->aux, 168 DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &val); 169 if (ret != 1) { 170 drm_dbg_kms(display->drm, 171 "Failed to read Extended sleep wake timeout request\n"); 172 return; 173 } 174 175 val = (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) ? 176 (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) * 10 : 1; 177 178 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, 179 DP_EXTENDED_WAKE_TIMEOUT_GRANT); 180 } 181 } 182
Hi Suraj, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-tip/drm-tip v6.13-rc3 next-20241220] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Suraj-Kandpal/drm-dp-Add-the-DPCD-register-required-for-Extended-wake-timeout/20241213-140525 base: linus/master patch link: https://lore.kernel.org/r/20241213060317.2674290-3-suraj.kandpal%40intel.com patch subject: [PATCH 2/2] drm/i915/lttpr: Enable Extended Wake Timeout config: x86_64-randconfig-r121-20241220 (https://download.01.org/0day-ci/archive/20241221/202412210956.FV7RWpOY-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241221/202412210956.FV7RWpOY-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202412210956.FV7RWpOY-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/i915/display/intel_dp_link_training.c:146:26: sparse: sparse: Initializer entry defined twice drivers/gpu/drm/i915/display/intel_dp_link_training.c:148:26: sparse: also defined here vim +146 drivers/gpu/drm/i915/display/intel_dp_link_training.c 136 137 void intel_dp_lttpr_wake_timeout_setup(struct intel_dp *intel_dp) 138 { 139 struct intel_display *display = to_intel_display(intel_dp); 140 u8 val = 1; 141 int ret; 142 143 if (intel_dp_lttpr_transparent_mode_enabled(intel_dp)) { 144 static const u8 timeout_mapping[] = { 145 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS] = 1, > 146 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 147 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS] = 40, 148 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, 149 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS] = 80, 150 [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS] = 100, 151 }; 152 153 ret = drm_dp_dpcd_readb(&intel_dp->aux, 154 DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST, &val); 155 if (ret != 1) { 156 drm_dbg_kms(display->drm, 157 "Failed to read Extended sleep wake timeout request\n"); 158 return; 159 } 160 161 val = (val < sizeof(timeout_mapping) && timeout_mapping[val]) ? 162 timeout_mapping[val] : 1; 163 164 drm_dp_dpcd_writeb(&intel_dp->aux, DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT, 165 DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED); 166 } else { 167 ret = drm_dp_dpcd_readb(&intel_dp->aux, 168 DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &val); 169 if (ret != 1) { 170 drm_dbg_kms(display->drm, 171 "Failed to read Extended sleep wake timeout request\n"); 172 return; 173 } 174 175 val = (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) ? 176 (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) * 10 : 1; 177 178 drm_dp_dpcd_writeb(&intel_dp->aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, 179 DP_EXTENDED_WAKE_TIMEOUT_GRANT); 180 } 181 } 182
diff --git a/drivers/gpu/drm/i915/display/intel_ddi.c b/drivers/gpu/drm/i915/display/intel_ddi.c index 4f9c50996446..d092c3ba0ccf 100644 --- a/drivers/gpu/drm/i915/display/intel_ddi.c +++ b/drivers/gpu/drm/i915/display/intel_ddi.c @@ -2624,6 +2624,8 @@ static void mtl_ddi_pre_enable_dp(struct intel_atomic_state *state, if (!is_mst) intel_dp_set_power(intel_dp, DP_SET_POWER_D0); + intel_dp_lttpr_wake_timeout_setup(intel_dp); + intel_dp_configure_protocol_converter(intel_dp, crtc_state); if (!is_mst) intel_dp_sink_enable_decompression(state, diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.c b/drivers/gpu/drm/i915/display/intel_dp_link_training.c index ea9b4730a176..d0f0da78794e 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.c +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.c @@ -134,6 +134,52 @@ static bool intel_dp_lttpr_transparent_mode_enabled(struct intel_dp *intel_dp) DP_PHY_REPEATER_MODE_TRANSPARENT; } +void intel_dp_lttpr_wake_timeout_setup(struct intel_dp *intel_dp) +{ + struct intel_display *display = to_intel_display(intel_dp); + u8 val = 1; + int ret; + + if (intel_dp_lttpr_transparent_mode_enabled(intel_dp)) { + static const u8 timeout_mapping[] = { + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS] = 1, + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS] = 40, + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS] = 20, + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS] = 80, + [DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS] = 100, + }; + + ret = drm_dp_dpcd_readb(&intel_dp->aux, + DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST, &val); + if (ret != 1) { + drm_dbg_kms(display->drm, + "Failed to read Extended sleep wake timeout request\n"); + return; + } + + val = (val < sizeof(timeout_mapping) && timeout_mapping[val]) ? + timeout_mapping[val] : 1; + + drm_dp_dpcd_writeb(&intel_dp->aux, DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT, + DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED); + } else { + ret = drm_dp_dpcd_readb(&intel_dp->aux, + DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &val); + if (ret != 1) { + drm_dbg_kms(display->drm, + "Failed to read Extended sleep wake timeout request\n"); + return; + } + + val = (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) ? + (val & DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK) * 10 : 1; + + drm_dp_dpcd_writeb(&intel_dp->aux, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, + DP_EXTENDED_WAKE_TIMEOUT_GRANT); + } +} + /* * Read the LTTPR common capabilities and switch the LTTPR PHYs to * non-transparent mode if this is supported. Preserve the diff --git a/drivers/gpu/drm/i915/display/intel_dp_link_training.h b/drivers/gpu/drm/i915/display/intel_dp_link_training.h index 2066b9146762..cd4e0d6db6ed 100644 --- a/drivers/gpu/drm/i915/display/intel_dp_link_training.h +++ b/drivers/gpu/drm/i915/display/intel_dp_link_training.h @@ -15,6 +15,7 @@ struct intel_dp; int intel_dp_read_dprx_caps(struct intel_dp *intel_dp, u8 dpcd[DP_RECEIVER_CAP_SIZE]); int intel_dp_init_lttpr_and_dprx_caps(struct intel_dp *intel_dp); +void intel_dp_lttpr_wake_timeout_setup(struct intel_dp *intel_dp); void intel_dp_link_training_set_mode(struct intel_dp *intel_dp, int link_rate, bool is_vrr);
Usually retimers take around 30 to 40ms to exit all devices from sleep state. Extended wake timeout request helps to give additional time by reading the DPCD register through which sink requests the minimal amount of time required to wake the sink up and giving the same amount of wait requested by sink device. Spec: DP v2.1 Section 3.6.12.3 Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com> --- drivers/gpu/drm/i915/display/intel_ddi.c | 2 + .../drm/i915/display/intel_dp_link_training.c | 46 +++++++++++++++++++ .../drm/i915/display/intel_dp_link_training.h | 1 + 3 files changed, 49 insertions(+)