From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: "Shankar, Uma" <uma.shankar@intel.com>
Cc: "intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Subject: Re: [PATCH v4 12/21] drm/i915/dmc: Reload PIPEDMC MMIO registers for pipe C/D on PTL+
Date: Wed, 11 Jun 2025 17:25:46 +0300 [thread overview]
Message-ID: <aEmR6oxcFPhNOod4@intel.com> (raw)
In-Reply-To: <DM4PR11MB63609BA53894388FB862C0E8F46AA@DM4PR11MB6360.namprd11.prod.outlook.com>
On Tue, Jun 10, 2025 at 11:24:58PM +0000, Shankar, Uma wrote:
>
>
> > -----Original Message-----
> > From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Ville
> > Syrjala
> > Sent: Monday, June 9, 2025 7:41 PM
> > To: intel-gfx@lists.freedesktop.org
> > Cc: intel-xe@lists.freedesktop.org
> > Subject: [PATCH v4 12/21] drm/i915/dmc: Reload PIPEDMC MMIO registers for
> > pipe C/D on PTL+
> >
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> >
> > On PTL+ the PIPEDMC on pipes C/D loses its MMIO state occasionally.
> > Not quite sure what the specific sequence is that makes this happen (eg. simply
> > disbling PG2 doesn't seem to be enough to trigger this on its own).
>
> Nit: Typo in disabling
>
> > Reload the MMIO registers for the affected pipes when enabling the PIPEDMC. So
> > far I've not see this happen on PTL pipe A/B, nor on any pipe on any other
> > platform.
> >
> > The DMC program RAM doesn't appear to need manual restoring, though Windows
> > appears to be doing exactly that on most platforms (for some of the pipes). None
> > of this is properly documented anywhere it seems.
>
> Yeah can't find any documentation for the same. Lets go with the empirical behaviour,
> will try to get this updated in spec as well.
CI did catch the fact that TGL/derivatives lose the entire pipe DMC state
when PG1 is disabled, and the main DMC does not restore any of it. I'll
cook up some extra patches to deal with that. The pipe DMC is only
needed for LACE on these platforms, so could perhaps just not load it at
all, but I think I'll keep it around just in case we ever want to
implement some LACE stuff at some point.
>
> Looks Good to me.
> Reviewed-by: Uma Shankar <uma.shankar@intel.com>
>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> > drivers/gpu/drm/i915/display/intel_dmc.c | 23 +++++++++++++++++------
> > 1 file changed, 17 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c
> > b/drivers/gpu/drm/i915/display/intel_dmc.c
> > index 5a43298cd0e7..247e88265cf3 100644
> > --- a/drivers/gpu/drm/i915/display/intel_dmc.c
> > +++ b/drivers/gpu/drm/i915/display/intel_dmc.c
> > @@ -578,6 +578,17 @@ static u32 dmc_mmiodata(struct intel_display *display,
> > return dmc->dmc_info[dmc_id].mmiodata[i];
> > }
> >
> > +static void intel_dmc_load_mmio(struct intel_display *display, enum
> > +intel_dmc_id dmc_id) {
> > + struct intel_dmc *dmc = display_to_dmc(display);
> > + int i;
> > +
> > + for (i = 0; i < dmc->dmc_info[dmc_id].mmio_count; i++) {
> > + intel_de_write(display, dmc->dmc_info[dmc_id].mmioaddr[i],
> > + dmc_mmiodata(display, dmc, dmc_id, i));
> > + }
> > +}
> > +
> > void intel_dmc_enable_pipe(struct intel_display *display, enum pipe pipe) {
> > enum intel_dmc_id dmc_id = PIPE_TO_DMC_ID(pipe); @@ -585,6
> > +596,10 @@ void intel_dmc_enable_pipe(struct intel_display *display, enum pipe
> > pipe)
> > if (!is_valid_dmc_id(dmc_id) || !has_dmc_id_fw(display, dmc_id))
> > return;
> >
> > + /* on PTL pipe C/D PIPEDMC MMIO state is lost sometimes */
> > + if (DISPLAY_VER(display) >= 30 && pipe >= PIPE_C)
> > + intel_dmc_load_mmio(display, dmc_id);
> > +
> > if (DISPLAY_VER(display) >= 20) {
> > intel_de_write(display, PIPEDMC_INTERRUPT(pipe),
> > pipedmc_interrupt_mask(display));
> > intel_de_write(display, PIPEDMC_INTERRUPT_MASK(pipe),
> > ~pipedmc_interrupt_mask(display));
> > @@ -710,12 +725,8 @@ void intel_dmc_load_program(struct intel_display
> > *display)
> >
> > preempt_enable();
> >
> > - for_each_dmc_id(dmc_id) {
> > - for (i = 0; i < dmc->dmc_info[dmc_id].mmio_count; i++) {
> > - intel_de_write(display, dmc-
> > >dmc_info[dmc_id].mmioaddr[i],
> > - dmc_mmiodata(display, dmc, dmc_id, i));
> > - }
> > - }
> > + for_each_dmc_id(dmc_id)
> > + intel_dmc_load_mmio(display, dmc_id);
> >
> > power_domains->dc_state = 0;
> >
> > --
> > 2.49.0
>
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-06-11 14:25 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-09 14:10 [PATCH v4 00/21] drm/i915/flipq: Rough flip queue implementation Ville Syrjala
2025-06-09 14:10 ` [PATCH v4 01/21] drm/i915/dsb: Use intel_dsb_ins_align() in intel_dsb_align_tail() Ville Syrjala
2025-06-10 21:24 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 02/21] drm/i915/dsb: Provide intel_dsb_head() and intel_dsb_size() Ville Syrjala
2025-06-10 21:28 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 03/21] drm/i915/dsb: Introduce intel_dsb_exec_time_us() Ville Syrjala
2025-06-10 21:32 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 04/21] drm/i915/dsb: Garbage collect the MMIO DEwake stuff Ville Syrjala
2025-06-10 21:41 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 05/21] drm/i915/dsb: Move the DSB_PMCTRL* reset out of intel_dsb_finish() Ville Syrjala
2025-06-10 21:50 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 06/21] drm/i915/dsb: Disable the GOSUB interrupt Ville Syrjala
2025-06-10 21:53 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 07/21] drm/i915/dmc: Limit PIPEDMC clock gating w/a to just ADL/DG2/MTL Ville Syrjala
2025-06-10 22:06 ` Shankar, Uma
2025-06-11 13:30 ` Ville Syrjälä
2025-06-12 5:12 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 08/21] drm/i915/dmc: Parametrize MTL_PIPEDMC_GATING_DIS Ville Syrjala
2025-06-10 22:07 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 09/21] drm/i915: Set PKG_C_LATENCY.added_wake_time to 0 Ville Syrjala
2025-06-10 22:18 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 10/21] drm/i915: Try to program PKG_C_LATENCY more correctly Ville Syrjala
2025-06-09 14:10 ` [PATCH v4 11/21] drm/i915/dmc: Shuffle code around Ville Syrjala
2025-06-10 22:20 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 12/21] drm/i915/dmc: Reload PIPEDMC MMIO registers for pipe C/D on PTL+ Ville Syrjala
2025-06-10 23:24 ` Shankar, Uma
2025-06-11 14:25 ` Ville Syrjälä [this message]
2025-06-12 5:05 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 13/21] drm/i915/dmc: Assert DMC is loaded harder Ville Syrjala
2025-06-09 14:10 ` [PATCH v4 14/21] drm/i915/dmc: Define flip queue related PIPEDMC registers Ville Syrjala
2025-06-19 7:29 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 15/21] drm/i915/flipq: Provide the nuts and bolts code for flip queue Ville Syrjala
2025-06-23 19:54 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 16/21] drm/i915/flipq: Implement flip queue based commit path Ville Syrjala
2025-06-23 19:58 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 17/21] drm/i915/flipq: Implement Wa_18034343758 Ville Syrjala
2025-06-23 20:05 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 18/21] drm/i915/flipq: Implement Wa_16018781658 for LNL-A0 Ville Syrjala
2025-06-23 20:08 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 19/21] drm/i915/flipq: Add intel_flipq_dump() Ville Syrjala
2025-06-23 20:09 ` Shankar, Uma
2025-06-09 14:10 ` [PATCH v4 20/21] drm/i915/flipq: Enable flipq by default for testing Ville Syrjala
2025-06-09 14:10 ` [PATCH v4 21/21] drm/i915/flipq: Disable PSR for extra flip queue coverage Ville Syrjala
2025-06-09 19:22 ` ✓ CI.Patch_applied: success for drm/i915/flipq: Rough flip queue implementation (rev6) Patchwork
2025-06-09 19:23 ` ✗ CI.checkpatch: warning " Patchwork
2025-06-09 19:24 ` ✓ CI.KUnit: success " Patchwork
2025-06-09 19:35 ` ✓ CI.Build: " Patchwork
2025-06-09 19:37 ` ✓ CI.Hooks: " Patchwork
2025-06-09 19:39 ` ✗ CI.checksparse: warning " Patchwork
2025-06-09 20:01 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-06-09 21:50 ` ✗ Xe.CI.Full: " Patchwork
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=aEmR6oxcFPhNOod4@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=uma.shankar@intel.com \
/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