From: Gustavo Sousa <gustavo.sousa@intel.com>
To: "Bhadane, Dnyaneshwar" <dnyaneshwar.bhadane@intel.com>,
<intel-gfx@lists.freedesktop.org>,
<intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH] drm/i915/cdclk: Incorporate Xe3_LPD changes for CD2X divider
Date: Mon, 5 Jan 2026 14:53:25 -0300 [thread overview]
Message-ID: <176763560584.9480.18038205129249216011@intel.com> (raw)
In-Reply-To: <5f2fab48-06b8-4bc2-ac59-041f85bbe2ff@intel.com>
Quoting Bhadane, Dnyaneshwar (2025-12-31 08:54:21-03:00)
>
>
>On 23-Dec-25 3:43 AM, Gustavo Sousa wrote:
>> On Xe3_LPD, there is no instruction to program the CD2X divider anymore
>> and the hardware is expected to always use the default value of 0b00,
>> meaning "divide by 1".
>>
>> With that, the CDCLK_CTL register was changed so that:
>>
>> (1) The field "CD2X Divider Select" became a debug-only field.
>> Because we are programming CDCLK_CTL with a direct write instead
>> of read-modify-write operation, we still need to program "CD2X
>> Divider Select" in order to keep the field from deviating from its
>> default value. Let's, however, throw a warning if we encounter a
>> CDCLK value that would result in an unexpected value for that
>> field.
>>
>> (2) The field "CD2X Pipe Select" has been removed. In fact, some
>> debugging in a PTL machine showed that such field comes back as
>> zero after writing a non-zero value to it. As such, do not
>> program it starting with Xe3_LPD.
>>
>> Bspec: 68864, 69090
>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_cdclk.c | 27 ++++++++++++++++++++++-----
>> 1 file changed, 22 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c b/drivers/gpu/drm/i915/display/intel_cdclk.c
>> index 0aa59d624095..684b8437951b 100644
>> --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
>> +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
>> @@ -1933,6 +1933,8 @@ static u32 bxt_cdclk_cd2x_pipe(struct intel_display *display, enum pipe pipe)
>> static u32 bxt_cdclk_cd2x_div_sel(struct intel_display *display,
>> int cdclk, int vco, u16 waveform)
>> {
>> + u32 ret;
>> +
>> /* cdclk = vco / 2 / div{1,1.5,2,4} */
>> switch (cdclk_divider(cdclk, vco, waveform)) {
>> default:
>> @@ -1941,14 +1943,27 @@ static u32 bxt_cdclk_cd2x_div_sel(struct intel_display *display,
>> drm_WARN_ON(display->drm, vco != 0);
>> fallthrough;
>> case 2:
>> - return BXT_CDCLK_CD2X_DIV_SEL_1;
>> + ret = BXT_CDCLK_CD2X_DIV_SEL_1;
>> + break;
>> case 3:
>> - return BXT_CDCLK_CD2X_DIV_SEL_1_5;
>> + ret = BXT_CDCLK_CD2X_DIV_SEL_1_5;
>> + break;
>> case 4:
>> - return BXT_CDCLK_CD2X_DIV_SEL_2;
>> + ret = BXT_CDCLK_CD2X_DIV_SEL_2;
>> + break;
>> case 8:
>> - return BXT_CDCLK_CD2X_DIV_SEL_4;
>> + ret = BXT_CDCLK_CD2X_DIV_SEL_4;
>> + break;
>> }
>> +
>> + /*
>> + * On Xe3_LPD onward, the expectation is to always have
>> + * BXT_CDCLK_CD2X_DIV_SEL_1 as the default.
>> + */
>> + if (DISPLAY_VER(display) >= 30)
>> + drm_WARN_ON(display->drm, ret != BXT_CDCLK_CD2X_DIV_SEL_1);
>> +
>> + return ret;
>> }
>>
>> static u16 cdclk_squash_waveform(struct intel_display *display,
>> @@ -2136,7 +2151,9 @@ static u32 bxt_cdclk_ctl(struct intel_display *display,
>>
>> waveform = cdclk_squash_waveform(display, cdclk);
>>
>> - val = bxt_cdclk_cd2x_div_sel(display, cdclk, vco, waveform) |
>> + val = bxt_cdclk_cd2x_div_sel(display, cdclk, vco, waveform);
>> +
>> + if (DISPLAY_VER(display) < 30)
>> bxt_cdclk_cd2x_pipe(display, pipe);
>Hey Gustavo,
>Please update this line, function’s return value should be ORed with val.
>
>i.e. val |= bxt_cdclk_cd2x_pipe(display, pipe);
Oops... Thanks for catching that!
--
Gustavo Sousa
>
>BR,
>Dnyaneshwar
>>
>> /*
>>
>> ---
>> base-commit: f2a0e58c77845e1a5cb6c549dc02b2670042e588
>> change-id: 20251222-xe3_lpd-no-cd2x-divider-48f9f0972f98
>>
>> Best regards,
>> --
>> Gustavo Sousa <gustavo.sousa@intel.com>
>>
>
prev parent reply other threads:[~2026-01-05 17:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-22 22:13 [PATCH] drm/i915/cdclk: Incorporate Xe3_LPD changes for CD2X divider Gustavo Sousa
2025-12-23 2:49 ` ✓ CI.KUnit: success for " Patchwork
2025-12-23 3:26 ` ✓ Xe.CI.BAT: " Patchwork
2025-12-23 14:02 ` ✗ Xe.CI.Full: failure " Patchwork
2025-12-31 11:54 ` [PATCH] " Bhadane, Dnyaneshwar
2026-01-05 17:53 ` Gustavo Sousa [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=176763560584.9480.18038205129249216011@intel.com \
--to=gustavo.sousa@intel.com \
--cc=dnyaneshwar.bhadane@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox