diff mbox series

[1/1,SRU,J] UBUNTU: SAUCE: i915: force disable fastboot quirk

Message ID 20231229013824.7215-2-ivan.hu@canonical.com
State New
Headers show
Series Add quirk to disable i915 fastboot on B&R PC | expand

Commit Message

Ivan Hu Dec. 29, 2023, 1:38 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/2047630

Some displays connect to the B&R PC device got the garbled display, it
need to disable the fastboot to fix the issue. Add quirk to force 
disable i915 fastboot on the B&R PC when no i915.fastboot parameter was set.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 drivers/gpu/drm/i915/display/intel_display.c |  3 +++
 drivers/gpu/drm/i915/display/intel_quirks.c  | 25 ++++++++++++++++++++
 drivers/gpu/drm/i915/i915_drv.h              |  1 +
 3 files changed, 29 insertions(+)
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 11695b4db3b3..325040afa9c3 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -8133,6 +8133,9 @@  static bool fastboot_enabled(struct drm_i915_private *dev_priv)
 	if (dev_priv->params.fastboot != -1)
 		return dev_priv->params.fastboot;
 
+	if (dev_priv->quirks & QUIRK_FORCE_DISABLE_FASTBOOT)
+		return false;
+
 	/* Enable fastboot by default on Skylake and newer */
 	if (DISPLAY_VER(dev_priv) >= 9)
 		return true;
diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c b/drivers/gpu/drm/i915/display/intel_quirks.c
index 015e5b806b6d..9c9ae04c38c3 100644
--- a/drivers/gpu/drm/i915/display/intel_quirks.c
+++ b/drivers/gpu/drm/i915/display/intel_quirks.c
@@ -59,6 +59,12 @@  static void quirk_no_pps_backlight_power_hook(struct drm_i915_private *i915)
 	drm_info(&i915->drm, "Applying no pps backlight power quirk\n");
 }
 
+static void quirk_force_disable_fastboot_hook(struct drm_i915_private *i915)
+{
+	i915->quirks |= QUIRK_FORCE_DISABLE_FASTBOOT;
+	drm_info(&i915->drm, "Applying force disable fastboot quirk\n");
+}
+
 struct intel_quirk {
 	int device;
 	int subsystem_vendor;
@@ -84,6 +90,12 @@  static int intel_dmi_no_pps_backlight(const struct dmi_system_id *id)
 	return 1;
 }
 
+static int intel_dmi_force_disable_fastboot(const struct dmi_system_id *id)
+{
+	DRM_INFO("Force disable fastboot on %s\n", id->ident);
+	return 1;
+}
+
 static const struct intel_dmi_quirk intel_dmi_quirks[] = {
 	{
 		.dmi_id_list = &(const struct dmi_system_id[]) {
@@ -130,6 +142,19 @@  static const struct intel_dmi_quirk intel_dmi_quirks[] = {
 		},
 		.hook = quirk_no_pps_backlight_power_hook,
 	},
+	{
+		.dmi_id_list = &(const struct dmi_system_id[]) {
+			{
+				.callback = intel_dmi_force_disable_fastboot,
+				.ident = "B&R Industrial Automation APC2200",
+				.matches = {DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "B&R Industrial Automation"),
+					    DMI_EXACT_MATCH(DMI_BOARD_NAME, "APC2200"),
+				},
+			},
+			{ }
+		},
+		.hook = quirk_force_disable_fastboot_hook,
+	},
 };
 
 static struct intel_quirk intel_quirks[] = {
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0e610715ec71..e692111de6c7 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -524,6 +524,7 @@  struct i915_drrs {
 #define QUIRK_INCREASE_T12_DELAY (1<<6)
 #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7)
 #define QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK (1<<8)
+#define QUIRK_FORCE_DISABLE_FASTBOOT (1<<9)
 
 struct intel_fbdev;
 struct intel_fbc_work;