From: Randy Wright rwright@hpe.com
For several months, I've been experiencing GPU hangs when starting Cinnamon on an HP Pavilion Mini 300-020 if I try to run an upstream kernel. I reported this recently in https://gitlab.freedesktop.org/drm/intel/-/issues/2413 where I have attached the requested evidence including the state collected from /sys/class/drm/card0/error and debug output from dmesg.
I ran a bisect to find the problem, which indicates this is the troublesome commit:
[47f8253d2b8947d79fd3196bf96c1959c0f25f20] drm/i915/gen7: Clear all EU/L3 residual contexts
The nature of that commit suggested to me that reducing the batch size used in the context clear operation might help this relatively low-powered system to avoid the hang.... and it did! I simply forced this system to take the smaller batch length that is already used for non-Haswell systems.
The first two versions of this patch were posted as RFC patches to the Intel-gfx list, implementing the same algorithmic change in function batch_get_defaults, but without employing a properly constructed quirk.
I've now cleaned up the patch to employ a new QUIRK_RENDERCLEAR_REDUCED. The quirk is presently set only for the aforementioned HP Pavilion Mini 300-020. The patch now touches three files to define the quirk, set it, and then check for it in function batch_get_defaults.
Randy Wright (3): drm/i915: Introduce quirk QUIRK_RENDERCLEAR_REDUCED drm/i915/display: Add function quirk_renderclear_reduced drm/i915/gt: Force reduced batch size if new QUIRK_RENDERCLEAR_REDUCED is set.
drivers/gpu/drm/i915/display/intel_quirks.c | 13 +++++++++++++ drivers/gpu/drm/i915/gt/gen7_renderclear.c | 2 +- drivers/gpu/drm/i915/i915_drv.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-)
From: Randy Wright rwright@hpe.com
Introduce quirk QUIRK_RENDERCLEAR_REDUCED, which will be used to force a limited batch buffer size for clearing residual contexts in gen7_renderclear.c.
Signed-off-by: Randy Wright rwright@hpe.com --- drivers/gpu/drm/i915/i915_drv.h | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index e4f7f6518945..e8873462eb2c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -525,6 +525,7 @@ struct i915_psr { #define QUIRK_PIN_SWIZZLED_PAGES (1<<5) #define QUIRK_INCREASE_T12_DELAY (1<<6) #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7) +#define QUIRK_RENDERCLEAR_REDUCED (1<<8)
struct intel_fbdev; struct intel_fbc_work;
From: Randy Wright rwright@hpe.com
Added function quirk_renderclear_reduced to set QUIRK_RENDERCLEAR_REDUCED for designated platforms. Applying QUIRK_RENDERCLEAR_REDUCED for the HP Pavilion Mini 300-020 prevents a GPU hang.
Signed-off-by: Randy Wright rwright@hpe.com --- drivers/gpu/drm/i915/display/intel_quirks.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c index 46beb155d835..630b984ba49c 100644 --- a/drivers/gpu/drm/i915/display/intel_quirks.c +++ b/drivers/gpu/drm/i915/display/intel_quirks.c @@ -53,6 +53,16 @@ static void quirk_increase_ddi_disabled_time(struct drm_i915_private *i915) drm_info(&i915->drm, "Applying Increase DDI Disabled quirk\n"); }
+/* + * Force use of smaller batch size in gen7_renderclear.c + * Needed on (at least) HP Pavilion Mini 300-020 to avoid GPU hang. + */ +static void quirk_renderclear_reduced(struct drm_i915_private *i915) +{ + i915->quirks |= QUIRK_RENDERCLEAR_REDUCED; + drm_info(&i915->drm, "Applying Renderclear Reduced quirk\n"); +} + struct intel_quirk { int device; int subsystem_vendor; @@ -141,6 +151,9 @@ static struct intel_quirk intel_quirks[] = { /* HP Chromebook 14 (Celeron 2955U) */ { 0x0a06, 0x103c, 0x21ed, quirk_backlight_present },
+ /* HP Mini 300-020 */ + { 0x0a06, 0x103c, 0x2b38, quirk_renderclear_reduced }, + /* Dell Chromebook 11 */ { 0x0a06, 0x1028, 0x0a35, quirk_backlight_present },
dri-devel@lists.freedesktop.org