Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7968531 authored by Imre Deak's avatar Imre Deak
Browse files

drm/i915/bxt: Reject DMC firmware versions with known bugs



DMC version 1.06 has a known bug, where the firmware polls forever for a
port PLL to lock, if the PLL was disabled when entering DC5, which locks
up the machine. Version 1.07 fixes this, so make that the minimum
required version on BXT.

CC: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarMika Kuoppala <mika.kuoppala@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1459515767-29228-2-git-send-email-imre.deak@intel.com
parent 560ce1dc
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ MODULE_FIRMWARE(I915_CSR_SKL);
MODULE_FIRMWARE(I915_CSR_BXT);

#define SKL_CSR_VERSION_REQUIRED	CSR_VERSION(1, 23)
#define BXT_CSR_VERSION_REQUIRED	CSR_VERSION(1, 7)

#define CSR_MAX_FW_SIZE			0x2FFF
#define CSR_DEFAULT_FW_OFFSET		0xFFFFFFFF
@@ -281,6 +282,7 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
	uint32_t dmc_offset = CSR_DEFAULT_FW_OFFSET, readcount = 0, nbytes;
	uint32_t i;
	uint32_t *dmc_payload;
	uint32_t required_min_version;

	if (!fw)
		return NULL;
@@ -296,15 +298,23 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,

	csr->version = css_header->version;

	if ((IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) &&
	    csr->version < SKL_CSR_VERSION_REQUIRED) {
		DRM_INFO("Refusing to load old Skylake DMC firmware v%u.%u,"
	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)) {
		required_min_version = SKL_CSR_VERSION_REQUIRED;
	} else if (IS_BROXTON(dev_priv)) {
		required_min_version = BXT_CSR_VERSION_REQUIRED;
	} else {
		MISSING_CASE(INTEL_REVID(dev_priv));
		required_min_version = 0;
	}

	if (csr->version < required_min_version) {
		DRM_INFO("Refusing to load old DMC firmware v%u.%u,"
			 " please upgrade to v%u.%u or later"
			   " [" FIRMWARE_URL "].\n",
			 CSR_VERSION_MAJOR(csr->version),
			 CSR_VERSION_MINOR(csr->version),
			 CSR_VERSION_MAJOR(SKL_CSR_VERSION_REQUIRED),
			 CSR_VERSION_MINOR(SKL_CSR_VERSION_REQUIRED));
			 CSR_VERSION_MAJOR(required_min_version),
			 CSR_VERSION_MINOR(required_min_version));
		return NULL;
	}