All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Gustavo Sousa <gustavo.sousa@intel.com>,
	intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915/xe2lpd: Update C20 HDMI TMDS algorithm to include tx_misc
Date: Mon, 21 Oct 2024 16:15:25 +0300	[thread overview]
Message-ID: <87plnty4uq.fsf@intel.com> (raw)
In-Reply-To: <172951555814.2472.7619896990957879815@gjsousa-mobl2>

On Mon, 21 Oct 2024, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
> Quoting Jani Nikula (2024-10-21 09:29:30-03:00)
>>On Thu, 17 Oct 2024, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
>>> There has been an update to the Bspec in which we need to set
>>> tx_misc=0x5 field for C20 TX Context programming for HDMI TMDS for
>>> Xe2_LPD and newer. That field is mapped to the bits 7:0 of
>>> SRAM_GENERIC_<A/B>_TX_CNTX_CFG_1, which in turn translates to tx[1] of
>>> our state struct. Update the algorithm to reflect this change.
>>>
>>> Bspec: 74489
>>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>>> ---
>>>  drivers/gpu/drm/i915/display/intel_cx0_phy.c    | 17 ++++++++++++++---
>>>  .../gpu/drm/i915/display/intel_cx0_phy_regs.h   |  2 ++
>>>  2 files changed, 16 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy.c b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
>>> index f73d576fd99e..22184b2d5a11 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_cx0_phy.c
>>> +++ b/drivers/gpu/drm/i915/display/intel_cx0_phy.c
>>> @@ -2142,8 +2142,12 @@ static void intel_c10pll_dump_hw_state(struct drm_i915_private *i915,
>>>                              i + 2, hw_state->pll[i + 2], i + 3, hw_state->pll[i + 3]);
>>>  }
>>>  
>>> -static int intel_c20_compute_hdmi_tmds_pll(u64 pixel_clock, struct intel_c20pll_state *pll_state)
>>> +static int intel_c20_compute_hdmi_tmds_pll(struct intel_encoder *encoder,
>>> +                                           u64 pixel_clock,
>>> +                                           struct intel_c20pll_state *pll_state)
>>>  {
>>> +        struct drm_i915_private *i915 = to_i915(encoder->base.dev);
>>
>>No new struct drm_i915_private local variables or parameters, please.
>>
>>struct intel_display *display = to_intel_display(encoder);
>
> I actually had thought about this when writing this patch, but then I
> concluded that a future major refactor in the entire file would make
> more sense, since we are not using struct intel_display anywhere in this
> file yet...

I actually don't mind having files with mixed i915/display usage because
it's going to be a somewhat gradual conversion anyway, and there are
bound to be i915 stragglers even in the files that we mass convert.

> I can send a v2 to use struct intel_display here. Or maybe I could send
> a series containing preparatory patch to convert everything related to
> C10/C20 to use the new struct and then this patch as the second in the
> series (although those two patches would not be not totally related to
> each other).
>
> Let me know what is preferred.

Up to you, really.

BR,
Jani.


>
> --
> Gustavo Sousa
>
>>
>>> +
>>>          u64 datarate;
>>>          u64 mpll_tx_clk_div;
>>>          u64 vco_freq_shift;
>>> @@ -2154,6 +2158,7 @@ static int intel_c20_compute_hdmi_tmds_pll(u64 pixel_clock, struct intel_c20pll_
>>>          u64 mpll_fracn_rem;
>>>          u8  mpllb_ana_freq_vco;
>>>          u8  mpll_div_multiplier;
>>> +        u16  tx_misc;
>>>  
>>>          if (pixel_clock < 25175 || pixel_clock > 600000)
>>>                  return -EINVAL;
>>> @@ -2171,6 +2176,11 @@ static int intel_c20_compute_hdmi_tmds_pll(u64 pixel_clock, struct intel_c20pll_
>>>          mpll_div_multiplier = min_t(u8, div64_u64((vco_freq * 16 + (datarate >> 1)),
>>>                                                    datarate), 255);
>>>  
>>> +        if (DISPLAY_VER(i915) >= 20)
>>> +                tx_misc = 0x5;
>>> +        else
>>> +                tx_misc = 0x0;
>>> +
>>>          if (vco_freq <= DATARATE_3000000000)
>>>                  mpllb_ana_freq_vco = MPLLB_ANA_FREQ_VCO_3;
>>>          else if (vco_freq <= DATARATE_3500000000)
>>> @@ -2182,7 +2192,7 @@ static int intel_c20_compute_hdmi_tmds_pll(u64 pixel_clock, struct intel_c20pll_
>>>  
>>>          pll_state->clock        = pixel_clock;
>>>          pll_state->tx[0]        = 0xbe88;
>>> -        pll_state->tx[1]        = 0x9800;
>>> +        pll_state->tx[1]        = 0x9800 | C20_PHY_TX_MISC(tx_misc);
>>>          pll_state->tx[2]        = 0x0000;
>>>          pll_state->cmn[0]        = 0x0500;
>>>          pll_state->cmn[1]        = 0x0005;
>>> @@ -2266,7 +2276,8 @@ static int intel_c20pll_calc_state(struct intel_crtc_state *crtc_state,
>>>  
>>>          /* try computed C20 HDMI tables before using consolidated tables */
>>>          if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_HDMI)) {
>>> -                if (intel_c20_compute_hdmi_tmds_pll(crtc_state->port_clock,
>>> +                if (intel_c20_compute_hdmi_tmds_pll(encoder,
>>> +                                                    crtc_state->port_clock,
>>
>>Alternatively you could just pass crtc_state. *shrug*.
>>
>>>                                                      &crtc_state->dpll_hw_state.cx0pll.c20) == 0)
>>>                          return 0;
>>>          }
>>> diff --git a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>>> index ab3ae110b68f..c1949aa1b909 100644
>>> --- a/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>>> +++ b/drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
>>> @@ -280,6 +280,8 @@
>>>  #define PHY_C20_B_TX_CNTX_CFG(i915, idx) \
>>>                  ((_IS_XE2HPD_C20(i915) ? _XE2HPD_C20_B_TX_CNTX_CFG : _MTL_C20_B_TX_CNTX_CFG) - (idx))
>>>  #define   C20_PHY_TX_RATE                REG_GENMASK(2, 0)
>>> +#define   C20_PHY_TX_MISC_MASK                REG_GENMASK(7, 0)
>>> +#define   C20_PHY_TX_MISC(val)                REG_FIELD_PREP16(C20_PHY_TX_MISC_MASK, (val))
>>
>>REG_FIELD_PREP16 should have a mask of REG_GENMASK16, and all the masks
>>and fields and bits for a register should all use the same width.
>>
>>BR,
>>Jani.
>>
>>
>>>  
>>>  #define PHY_C20_A_CMN_CNTX_CFG(i915, idx) \
>>>                  ((_IS_XE2HPD_C20(i915) ? _XE2HPD_C20_A_CMN_CNTX_CFG : _MTL_C20_A_CMN_CNTX_CFG) - (idx))
>>
>>-- 
>>Jani Nikula, Intel

-- 
Jani Nikula, Intel

  reply	other threads:[~2024-10-21 13:15 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-17 20:53 [PATCH] drm/i915/xe2lpd: Update C20 HDMI TMDS algorithm to include tx_misc Gustavo Sousa
2024-10-17 21:00 ` ✓ CI.Patch_applied: success for " Patchwork
2024-10-17 21:00 ` ✓ CI.checkpatch: " Patchwork
2024-10-17 21:01 ` ✓ CI.KUnit: " Patchwork
2024-10-17 21:13 ` ✓ CI.Build: " Patchwork
2024-10-17 21:15 ` ✓ CI.Hooks: " Patchwork
2024-10-17 21:16 ` ✗ CI.checksparse: warning " Patchwork
2024-10-17 21:35 ` ✓ CI.BAT: success " Patchwork
2024-10-17 23:01 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-10-18  6:00   ` Saarinen, Jani
2024-10-21 11:14     ` Gustavo Sousa
2024-10-18 13:22 ` ✗ CI.FULL: " Patchwork
2024-10-18 14:16 ` [PATCH] " Pottumuttu, Sai Teja
2024-10-18 15:59   ` Gustavo Sousa
2024-10-18 16:48     ` Pottumuttu, Sai Teja
2024-10-21 12:29 ` Jani Nikula
2024-10-21 12:59   ` Gustavo Sousa
2024-10-21 13:15     ` Jani Nikula [this message]
2024-10-22 22:29   ` Gustavo Sousa
2024-10-21 20:09 ` Bhadane, Dnyaneshwar
2024-10-22 22:32   ` Gustavo Sousa

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=87plnty4uq.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=gustavo.sousa@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.