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

drm/i915/cdclk: 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
50 ms.

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

+20 -17
+20 -17
drivers/gpu/drm/i915/display/intel_cdclk.c
··· 22 22 */ 23 23 24 24 #include <linux/debugfs.h> 25 + #include <linux/iopoll.h> 25 26 #include <linux/time.h> 26 27 27 28 #include <drm/drm_fixed.h> ··· 674 673 int cdclk = cdclk_config->cdclk; 675 674 u32 val, cmd = cdclk_config->voltage_level; 676 675 intel_wakeref_t wakeref; 676 + int ret; 677 677 678 678 switch (cdclk) { 679 679 case 400000: ··· 705 703 val &= ~DSPFREQGUAR_MASK; 706 704 val |= (cmd << DSPFREQGUAR_SHIFT); 707 705 vlv_punit_write(display->drm, PUNIT_REG_DSPSSPM, val); 708 - if (wait_for((vlv_punit_read(display->drm, PUNIT_REG_DSPSSPM) & 709 - DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT), 710 - 50)) { 711 - drm_err(display->drm, 712 - "timed out waiting for CDclk change\n"); 713 - } 706 + 707 + ret = poll_timeout_us(val = vlv_punit_read(display->drm, PUNIT_REG_DSPSSPM), 708 + (val & DSPFREQSTAT_MASK) == (cmd << DSPFREQSTAT_SHIFT), 709 + 500, 50 * 1000, false); 710 + if (ret) 711 + drm_err(display->drm, "timed out waiting for CDCLK change\n"); 714 712 715 713 if (cdclk == 400000) { 716 714 u32 divider; ··· 724 722 val |= divider; 725 723 vlv_cck_write(display->drm, CCK_DISPLAY_CLOCK_CONTROL, val); 726 724 727 - if (wait_for((vlv_cck_read(display->drm, CCK_DISPLAY_CLOCK_CONTROL) & 728 - CCK_FREQUENCY_STATUS) == (divider << CCK_FREQUENCY_STATUS_SHIFT), 729 - 50)) 730 - drm_err(display->drm, 731 - "timed out waiting for CDclk change\n"); 725 + ret = poll_timeout_us(val = vlv_cck_read(display->drm, CCK_DISPLAY_CLOCK_CONTROL), 726 + (val & CCK_FREQUENCY_STATUS) == (divider << CCK_FREQUENCY_STATUS_SHIFT), 727 + 500, 50 * 1000, false); 728 + if (ret) 729 + drm_err(display->drm, "timed out waiting for CDCLK change\n"); 732 730 } 733 731 734 732 /* adjust self-refresh exit latency value */ ··· 764 762 int cdclk = cdclk_config->cdclk; 765 763 u32 val, cmd = cdclk_config->voltage_level; 766 764 intel_wakeref_t wakeref; 765 + int ret; 767 766 768 767 switch (cdclk) { 769 768 case 333333: ··· 790 787 val &= ~DSPFREQGUAR_MASK_CHV; 791 788 val |= (cmd << DSPFREQGUAR_SHIFT_CHV); 792 789 vlv_punit_write(display->drm, PUNIT_REG_DSPSSPM, val); 793 - if (wait_for((vlv_punit_read(display->drm, PUNIT_REG_DSPSSPM) & 794 - DSPFREQSTAT_MASK_CHV) == (cmd << DSPFREQSTAT_SHIFT_CHV), 795 - 50)) { 796 - drm_err(display->drm, 797 - "timed out waiting for CDclk change\n"); 798 - } 790 + 791 + ret = poll_timeout_us(val = vlv_punit_read(display->drm, PUNIT_REG_DSPSSPM), 792 + (val & DSPFREQSTAT_MASK_CHV) == (cmd << DSPFREQSTAT_SHIFT_CHV), 793 + 500, 50 * 1000, false); 794 + if (ret) 795 + drm_err(display->drm, "timed out waiting for CDCLK change\n"); 799 796 800 797 vlv_punit_put(display->drm); 801 798