Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/wm: use generic poll_timeout_us() instead of wait_for()

Prefer generic poll helpers over i915 custom helpers.

The functional change is losing the exponentially growing sleep of
wait_for(), which used to be 10, 20, 40, ..., 640, and 1280 us.

Use an arbitrary constant 500 us sleep instead. The timeout remains at 3
ms.

Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://lore.kernel.org/r/52c80860ea7b98e84f2386ed6cdd761f03190b1e.1756383233.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+12 -4
+12 -4
drivers/gpu/drm/i915/display/i9xx_wm.c
··· 3 3 * Copyright © 2023 Intel Corporation 4 4 */ 5 5 6 + #include <linux/iopoll.h> 7 + 6 8 #include "soc/intel_dram.h" 7 9 8 10 #include "i915_drv.h" ··· 114 112 static void chv_set_memory_dvfs(struct intel_display *display, bool enable) 115 113 { 116 114 u32 val; 115 + int ret; 117 116 118 117 vlv_punit_get(display->drm); 119 118 ··· 127 124 val |= FORCE_DDR_FREQ_REQ_ACK; 128 125 vlv_punit_write(display->drm, PUNIT_REG_DDR_SETUP2, val); 129 126 130 - if (wait_for((vlv_punit_read(display->drm, PUNIT_REG_DDR_SETUP2) & 131 - FORCE_DDR_FREQ_REQ_ACK) == 0, 3)) 127 + ret = poll_timeout_us(val = vlv_punit_read(display->drm, PUNIT_REG_DDR_SETUP2), 128 + (val & FORCE_DDR_FREQ_REQ_ACK) == 0, 129 + 500, 3000, false); 130 + if (ret) 132 131 drm_err(display->drm, 133 132 "timed out waiting for Punit DDR DVFS request\n"); 134 133 ··· 3910 3905 struct vlv_wm_values *wm = &display->wm.vlv; 3911 3906 struct intel_crtc *crtc; 3912 3907 u32 val; 3908 + int ret; 3913 3909 3914 3910 vlv_read_wm_values(display, wm); 3915 3911 ··· 3937 3931 val |= FORCE_DDR_FREQ_REQ_ACK; 3938 3932 vlv_punit_write(display->drm, PUNIT_REG_DDR_SETUP2, val); 3939 3933 3940 - if (wait_for((vlv_punit_read(display->drm, PUNIT_REG_DDR_SETUP2) & 3941 - FORCE_DDR_FREQ_REQ_ACK) == 0, 3)) { 3934 + ret = poll_timeout_us(val = vlv_punit_read(display->drm, PUNIT_REG_DDR_SETUP2), 3935 + (val & FORCE_DDR_FREQ_REQ_ACK) == 0, 3936 + 500, 3000, false); 3937 + if (ret) { 3942 3938 drm_dbg_kms(display->drm, 3943 3939 "Punit not acking DDR DVFS request, " 3944 3940 "assuming DDR DVFS is disabled\n");