I'm not sure why some WAs have historically been applied in init_clock_gating
and some others in the engine setup (GT vs. display? context vs. global
registers?) but it does not look like the best place to apply workarounds:
the name is confusing, it's a display function (even though some GT WAs
also go here) and it isn't necessarily called on a GPU reset. This patch
moves these WAs to their rightful place inside i915_workarounds.c.

TODO1: It's straightforward to move things from Gen9 onwards, but in
order to move Gen8 and older, I'd need some guidance on what constitutes
clock gating and what is simply a WA.

TODO2: Do we want to keep display WAs separated from GT ones? In that case,
I would propose another category inside i915_workarounds.c (but I would need
help deciding what goes where).

Signed-off-by: Oscar Mateo <oscar.ma...@intel.com>
Cc: Rodrigo Vivi <rodrigo.v...@intel.com>
Cc: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Mika Kuoppala <mika.kuopp...@linux.intel.com>
---
 drivers/gpu/drm/i915/i915_workarounds.c | 146 ++++++++++++++++++++++++-
 drivers/gpu/drm/i915/intel_pm.c         | 188 +-------------------------------
 2 files changed, 151 insertions(+), 183 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_workarounds.c 
b/drivers/gpu/drm/i915/i915_workarounds.c
index f272b49..9ae89e4 100644
--- a/drivers/gpu/drm/i915/i915_workarounds.c
+++ b/drivers/gpu/drm/i915/i915_workarounds.c
@@ -509,6 +509,14 @@ int i915_ctx_workarounds_emit(struct drm_i915_gem_request 
*req)
        return 0;
 }
 
+static void bdw_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
+{
+}
+
+static void chv_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
+{
+}
+
 static void gen9_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
 {
        if (HAS_LLC(dev_priv)) {
@@ -521,8 +529,40 @@ static void gen9_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
                           I915_READ(MMCD_MISC_CTRL) |
                           MMCD_PCLA |
                           MMCD_HOTSPOT_EN);
+
+               /*
+                * WaCompressedResourceDisplayNewHashMode:skl,kbl
+                * Display WA#0390: skl,kbl
+                *
+                * Must match Sampler, Pixel Back End, and Media. See
+                * WaCompressedResourceSamplerPbeMediaNewHashMode.
+                */
+               I915_WRITE(CHICKEN_PAR1_1,
+                          I915_READ(CHICKEN_PAR1_1) |
+                          SKL_DE_COMPRESSED_HASH_MODE);
        }
 
+       /* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl,cfl */
+       I915_WRITE(CHICKEN_PAR1_1,
+                  I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP);
+
+       I915_WRITE(GEN8_CONFIG0,
+                  I915_READ(GEN8_CONFIG0) | GEN9_DEFAULT_FIXES);
+
+       /* WaEnableChickenDCPR:skl,bxt,kbl,glk,cfl */
+       I915_WRITE(GEN8_CHICKEN_DCPR_1,
+                  I915_READ(GEN8_CHICKEN_DCPR_1) | MASK_WAKEMEM);
+
+       /* WaFbcTurnOffFbcWatermark:skl,bxt,kbl,cfl */
+       /* WaFbcWakeMemOn:skl,bxt,kbl,glk,cfl */
+       I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
+                  DISP_FBC_WM_DIS |
+                  DISP_FBC_MEMORY_WAKE);
+
+       /* WaFbcHighMemBwCorruptionAvoidance:skl,bxt,kbl,cfl */
+       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
+                  ILK_DPFC_DISABLE_DUMMY0);
+
        /* WaContextSwitchWithConcurrentTLBInvalidate:skl,bxt,kbl,glk,cfl */
        I915_WRITE(GEN9_CSFE_CHICKEN1_RCS,
                   _MASKED_BIT_ENABLE(GEN9_PREEMPT_GPGPU_SYNC_SWITCH_DISABLE));
@@ -553,6 +593,18 @@ static void skl_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 {
        gen9_mmio_workarounds_apply(dev_priv);
 
+       /* WaDisableDopClockGating */
+       I915_WRITE(GEN7_MISCCPCTL, I915_READ(GEN7_MISCCPCTL)
+                  & ~GEN7_DOP_CLOCK_GATE_ENABLE);
+
+       /* WAC6entrylatency:skl */
+       I915_WRITE(FBC_LLC_READ_CTRL, I915_READ(FBC_LLC_READ_CTRL) |
+                  FBC_LLC_FULLY_OPEN);
+
+       /* WaFbcNukeOnHostModify:skl */
+       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
+                  ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
+
        /* WaEnableGapsTsvCreditFix:skl */
        I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
                                   GEN9_GAPS_TSV_CREDIT_DISABLE));
@@ -572,6 +624,24 @@ static void bxt_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 {
        gen9_mmio_workarounds_apply(dev_priv);
 
+       /* WaDisableSDEUnitClockGating:bxt */
+       I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
+                  GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
+
+       /*
+        * FIXME:
+        * GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ applies on 3x6 GT SKUs only.
+        */
+       I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
+                  GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ);
+
+       /*
+        * Wa: Backlight PWM may stop in the asserted state, causing backlight
+        * to stay fully on.
+        */
+       I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) |
+                  PWM1_GATING_DIS | PWM2_GATING_DIS);
+
        /* WaStoreMultiplePTEenable:bxt */
        /* This is a requirement according to Hardware specification */
        if (IS_BXT_REVID(dev_priv, 0, BXT_REVID_A1))
@@ -605,6 +675,20 @@ static void kbl_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 {
        gen9_mmio_workarounds_apply(dev_priv);
 
+       /* WaDisableSDEUnitClockGating:kbl */
+       if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
+               I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
+                          GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
+
+       /* WaDisableGamClockGating:kbl */
+       if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
+               I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) |
+                          GEN6_GAMUNIT_CLOCK_GATE_DISABLE);
+
+       /* WaFbcNukeOnHostModify:kbl */
+       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
+                  ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
+
        /* WaEnableGapsTsvCreditFix:kbl */
        I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
                                   GEN9_GAPS_TSV_CREDIT_DISABLE));
@@ -627,13 +711,43 @@ static void kbl_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 
 static void glk_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
 {
+       u32 val;
+
        gen9_mmio_workarounds_apply(dev_priv);
+
+       /*
+        * WaDisablePWMClockGating:glk
+        * Backlight PWM may stop in the asserted state, causing backlight
+        * to stay fully on.
+        */
+       I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) |
+                  PWM1_GATING_DIS | PWM2_GATING_DIS);
+
+       /* WaDDIIOTimeout:glk */
+       if (IS_GLK_REVID(dev_priv, 0, GLK_REVID_A1)) {
+               u32 val = I915_READ(CHICKEN_MISC_2);
+               val &= ~(GLK_CL0_PWR_DOWN |
+                        GLK_CL1_PWR_DOWN |
+                        GLK_CL2_PWR_DOWN);
+               I915_WRITE(CHICKEN_MISC_2, val);
+       }
+
+       /* Display WA #1133: WaFbcSkipSegments:glk */
+       val = I915_READ(ILK_DPFC_CHICKEN);
+       val &= ~GLK_SKIP_SEG_COUNT_MASK;
+       val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1);
+       I915_WRITE(ILK_DPFC_CHICKEN, val);
 }
 
 static void cfl_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
 {
        gen9_mmio_workarounds_apply(dev_priv);
 
+       /* WaFbcNukeOnHostModify:cfl */
+       I915_WRITE(ILK_DPFC_CHICKEN,
+                  I915_READ(ILK_DPFC_CHICKEN) |
+                            ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
+
        /* WaEnableGapsTsvCreditFix:cfl */
        I915_WRITE(GEN8_GARBCNTL, (I915_READ(GEN8_GARBCNTL) |
                                   GEN9_GAPS_TSV_CREDIT_DISABLE));
@@ -650,6 +764,32 @@ static void cfl_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 
 static void cnl_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
 {
+       u32 val;
+
+       /* This is not an Wa. Enable for better image quality */
+       I915_WRITE(_3D_CHICKEN3,
+                  _MASKED_BIT_ENABLE(_3D_CHICKEN3_AA_LINE_QUALITY_FIX_ENABLE));
+
+       /* WaEnableChickenDCPR:cnl */
+       I915_WRITE(GEN8_CHICKEN_DCPR_1,
+                  I915_READ(GEN8_CHICKEN_DCPR_1) | MASK_WAKEMEM);
+
+       /* WaFbcWakeMemOn:cnl */
+       I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
+                  DISP_FBC_MEMORY_WAKE);
+
+       /* WaSarbUnitClockGatingDisable:cnl (pre-prod) */
+       if (IS_CNL_REVID(dev_priv, CNL_REVID_A0, CNL_REVID_B0))
+               I915_WRITE(SLICE_UNIT_LEVEL_CLKGATE,
+                          I915_READ(SLICE_UNIT_LEVEL_CLKGATE) |
+                          SARBUNIT_CLKGATE_DIS);
+
+       /* Display WA #1133: WaFbcSkipSegments:cnl */
+       val = I915_READ(ILK_DPFC_CHICKEN);
+       val &= ~GLK_SKIP_SEG_COUNT_MASK;
+       val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1);
+       I915_WRITE(ILK_DPFC_CHICKEN, val);
+
        /* WaDisableI2mCycleOnWRPort:cnl (pre-prod) */
        if (IS_CNL_REVID(dev_priv, CNL_REVID_B0, CNL_REVID_B0))
                I915_WRITE(GAMT_CHKN_BIT_REG,
@@ -668,7 +808,11 @@ static void cnl_mmio_workarounds_apply(struct 
drm_i915_private *dev_priv)
 
 void i915_mmio_workarounds_apply(struct drm_i915_private *dev_priv)
 {
-       if (IS_SKYLAKE(dev_priv))
+       if (IS_BROADWELL(dev_priv))
+               bdw_mmio_workarounds_apply(dev_priv);
+       else if (IS_CHERRYVIEW(dev_priv))
+               chv_mmio_workarounds_apply(dev_priv);
+       else if (IS_SKYLAKE(dev_priv))
                skl_mmio_workarounds_apply(dev_priv);
        else if (IS_BROXTON(dev_priv))
                bxt_mmio_workarounds_apply(dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 9d0ca26..243e4b8 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -56,101 +56,6 @@
 #define INTEL_RC6p_ENABLE                      (1<<1)
 #define INTEL_RC6pp_ENABLE                     (1<<2)
 
-static void gen9_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       if (HAS_LLC(dev_priv)) {
-               /*
-                * WaCompressedResourceDisplayNewHashMode:skl,kbl
-                * Display WA#0390: skl,kbl
-                *
-                * Must match Sampler, Pixel Back End, and Media. See
-                * WaCompressedResourceSamplerPbeMediaNewHashMode.
-                */
-               I915_WRITE(CHICKEN_PAR1_1,
-                          I915_READ(CHICKEN_PAR1_1) |
-                          SKL_DE_COMPRESSED_HASH_MODE);
-       }
-
-       /* See Bspec note for PSR2_CTL bit 31, Wa#828:skl,bxt,kbl,cfl */
-       I915_WRITE(CHICKEN_PAR1_1,
-                  I915_READ(CHICKEN_PAR1_1) | SKL_EDP_PSR_FIX_RDWRAP);
-
-       I915_WRITE(GEN8_CONFIG0,
-                  I915_READ(GEN8_CONFIG0) | GEN9_DEFAULT_FIXES);
-
-       /* WaEnableChickenDCPR:skl,bxt,kbl,glk,cfl */
-       I915_WRITE(GEN8_CHICKEN_DCPR_1,
-                  I915_READ(GEN8_CHICKEN_DCPR_1) | MASK_WAKEMEM);
-
-       /* WaFbcTurnOffFbcWatermark:skl,bxt,kbl,cfl */
-       /* WaFbcWakeMemOn:skl,bxt,kbl,glk,cfl */
-       I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
-                  DISP_FBC_WM_DIS |
-                  DISP_FBC_MEMORY_WAKE);
-
-       /* WaFbcHighMemBwCorruptionAvoidance:skl,bxt,kbl,cfl */
-       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
-                  ILK_DPFC_DISABLE_DUMMY0);
-
-       if (IS_SKYLAKE(dev_priv)) {
-               /* WaDisableDopClockGating */
-               I915_WRITE(GEN7_MISCCPCTL, I915_READ(GEN7_MISCCPCTL)
-                          & ~GEN7_DOP_CLOCK_GATE_ENABLE);
-       }
-}
-
-static void bxt_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       gen9_init_clock_gating(dev_priv);
-
-       /* WaDisableSDEUnitClockGating:bxt */
-       I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
-                  GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
-
-       /*
-        * FIXME:
-        * GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ applies on 3x6 GT SKUs only.
-        */
-       I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
-                  GEN8_HDCUNIT_CLOCK_GATE_DISABLE_HDCREQ);
-
-       /*
-        * Wa: Backlight PWM may stop in the asserted state, causing backlight
-        * to stay fully on.
-        */
-       I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) |
-                  PWM1_GATING_DIS | PWM2_GATING_DIS);
-}
-
-static void glk_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       u32 val;
-       gen9_init_clock_gating(dev_priv);
-
-       /*
-        * WaDisablePWMClockGating:glk
-        * Backlight PWM may stop in the asserted state, causing backlight
-        * to stay fully on.
-        */
-       I915_WRITE(GEN9_CLKGATE_DIS_0, I915_READ(GEN9_CLKGATE_DIS_0) |
-                  PWM1_GATING_DIS | PWM2_GATING_DIS);
-
-       /* WaDDIIOTimeout:glk */
-       if (IS_GLK_REVID(dev_priv, 0, GLK_REVID_A1)) {
-               u32 val = I915_READ(CHICKEN_MISC_2);
-               val &= ~(GLK_CL0_PWR_DOWN |
-                        GLK_CL1_PWR_DOWN |
-                        GLK_CL2_PWR_DOWN);
-               I915_WRITE(CHICKEN_MISC_2, val);
-       }
-
-       /* Display WA #1133: WaFbcSkipSegments:glk */
-       val = I915_READ(ILK_DPFC_CHICKEN);
-       val &= ~GLK_SKIP_SEG_COUNT_MASK;
-       val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1);
-       I915_WRITE(ILK_DPFC_CHICKEN, val);
-}
-
 static void i915_pineview_get_mem_freq(struct drm_i915_private *dev_priv)
 {
        u32 tmp;
@@ -8379,78 +8284,6 @@ static void cnp_init_clock_gating(struct 
drm_i915_private *dev_priv)
                   CNP_PWM_CGE_GATING_DISABLE);
 }
 
-static void cnl_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       u32 val;
-       cnp_init_clock_gating(dev_priv);
-
-       /* This is not an Wa. Enable for better image quality */
-       I915_WRITE(_3D_CHICKEN3,
-                  _MASKED_BIT_ENABLE(_3D_CHICKEN3_AA_LINE_QUALITY_FIX_ENABLE));
-
-       /* WaEnableChickenDCPR:cnl */
-       I915_WRITE(GEN8_CHICKEN_DCPR_1,
-                  I915_READ(GEN8_CHICKEN_DCPR_1) | MASK_WAKEMEM);
-
-       /* WaFbcWakeMemOn:cnl */
-       I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
-                  DISP_FBC_MEMORY_WAKE);
-
-       /* WaSarbUnitClockGatingDisable:cnl (pre-prod) */
-       if (IS_CNL_REVID(dev_priv, CNL_REVID_A0, CNL_REVID_B0))
-               I915_WRITE(SLICE_UNIT_LEVEL_CLKGATE,
-                          I915_READ(SLICE_UNIT_LEVEL_CLKGATE) |
-                          SARBUNIT_CLKGATE_DIS);
-
-       /* Display WA #1133: WaFbcSkipSegments:cnl */
-       val = I915_READ(ILK_DPFC_CHICKEN);
-       val &= ~GLK_SKIP_SEG_COUNT_MASK;
-       val |= GLK_SKIP_SEG_EN | GLK_SKIP_SEG_COUNT(1);
-       I915_WRITE(ILK_DPFC_CHICKEN, val);
-}
-
-static void cfl_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       cnp_init_clock_gating(dev_priv);
-       gen9_init_clock_gating(dev_priv);
-
-       /* WaFbcNukeOnHostModify:cfl */
-       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
-                  ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
-}
-
-static void kbl_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       gen9_init_clock_gating(dev_priv);
-
-       /* WaDisableSDEUnitClockGating:kbl */
-       if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
-               I915_WRITE(GEN8_UCGCTL6, I915_READ(GEN8_UCGCTL6) |
-                          GEN8_SDEUNIT_CLOCK_GATE_DISABLE);
-
-       /* WaDisableGamClockGating:kbl */
-       if (IS_KBL_REVID(dev_priv, 0, KBL_REVID_B0))
-               I915_WRITE(GEN6_UCGCTL1, I915_READ(GEN6_UCGCTL1) |
-                          GEN6_GAMUNIT_CLOCK_GATE_DISABLE);
-
-       /* WaFbcNukeOnHostModify:kbl */
-       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
-                  ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
-}
-
-static void skl_init_clock_gating(struct drm_i915_private *dev_priv)
-{
-       gen9_init_clock_gating(dev_priv);
-
-       /* WAC6entrylatency:skl */
-       I915_WRITE(FBC_LLC_READ_CTRL, I915_READ(FBC_LLC_READ_CTRL) |
-                  FBC_LLC_FULLY_OPEN);
-
-       /* WaFbcNukeOnHostModify:skl */
-       I915_WRITE(ILK_DPFC_CHICKEN, I915_READ(ILK_DPFC_CHICKEN) |
-                  ILK_DPFC_NUKE_ON_ANY_MODIFICATION);
-}
-
 static void bdw_init_clock_gating(struct drm_i915_private *dev_priv)
 {
        /* The GTT cache must be disabled if the system is using 2M pages. */
@@ -8892,24 +8725,15 @@ static void nop_init_clock_gating(struct 
drm_i915_private *dev_priv)
  * @dev_priv: device private
  *
  * Setup the hooks that configure which clocks of a given platform can be
- * gated and also apply various GT and display specific workarounds for these
- * platforms. Note that some GT specific workarounds are applied separately
- * when GPU contexts or batchbuffers start their execution.
+ * gated.
  */
 void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv)
 {
-       if (IS_CANNONLAKE(dev_priv))
-               dev_priv->display.init_clock_gating = cnl_init_clock_gating;
-       else if (IS_COFFEELAKE(dev_priv))
-               dev_priv->display.init_clock_gating = cfl_init_clock_gating;
-       else if (IS_SKYLAKE(dev_priv))
-               dev_priv->display.init_clock_gating = skl_init_clock_gating;
-       else if (IS_KABYLAKE(dev_priv))
-               dev_priv->display.init_clock_gating = kbl_init_clock_gating;
-       else if (IS_BROXTON(dev_priv))
-               dev_priv->display.init_clock_gating = bxt_init_clock_gating;
-       else if (IS_GEMINILAKE(dev_priv))
-               dev_priv->display.init_clock_gating = glk_init_clock_gating;
+       if (IS_CANNONLAKE(dev_priv) || IS_COFFEELAKE(dev_priv))
+               dev_priv->display.init_clock_gating = cnp_init_clock_gating;
+       else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv) ||
+                IS_BROXTON(dev_priv) || IS_GEMINILAKE(dev_priv))
+               dev_priv->display.init_clock_gating = nop_init_clock_gating;
        else if (IS_BROADWELL(dev_priv))
                dev_priv->display.init_clock_gating = bdw_init_clock_gating;
        else if (IS_CHERRYVIEW(dev_priv))
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to