#define DMC_VERSION_MAJOR(version)     ((version) >> 16)
 #define DMC_VERSION_MINOR(version)     ((version) & 0xffff)
 
-#define DMC_PATH(platform, major, minor) \
-       "i915/"                          \
-       __stringify(platform) "_dmc_ver" \
-       __stringify(major) "_"           \
+#define DMC_PATH(platform) \
+       "i915/" __stringify(platform) "_dmc.bin"
+
+/*
+ * New DMC additions should not use this. This is used solely to remain
+ * compatible with systems that have not yet updated DMC blobs to use
+ * unversioned file names.
+ */
+#define DMC_LEGACY_PATH(platform, major, minor) \
+       "i915/"                                 \
+       __stringify(platform) "_dmc_ver"        \
+       __stringify(major) "_"                  \
        __stringify(minor) ".bin"
 
 #define DISPLAY_VER13_DMC_MAX_FW_SIZE  0x20000
 
 #define DISPLAY_VER12_DMC_MAX_FW_SIZE  ICL_DMC_MAX_FW_SIZE
 
-#define DG2_DMC_PATH                   DMC_PATH(dg2, 2, 08)
+#define DG2_DMC_PATH                   DMC_LEGACY_PATH(dg2, 2, 08)
 MODULE_FIRMWARE(DG2_DMC_PATH);
 
-#define ADLP_DMC_PATH                  DMC_PATH(adlp, 2, 16)
+#define ADLP_DMC_PATH                  DMC_LEGACY_PATH(adlp, 2, 16)
 MODULE_FIRMWARE(ADLP_DMC_PATH);
 
-#define ADLS_DMC_PATH                  DMC_PATH(adls, 2, 01)
+#define ADLS_DMC_PATH                  DMC_LEGACY_PATH(adls, 2, 01)
 MODULE_FIRMWARE(ADLS_DMC_PATH);
 
-#define DG1_DMC_PATH                   DMC_PATH(dg1, 2, 02)
+#define DG1_DMC_PATH                   DMC_LEGACY_PATH(dg1, 2, 02)
 MODULE_FIRMWARE(DG1_DMC_PATH);
 
-#define RKL_DMC_PATH                   DMC_PATH(rkl, 2, 03)
+#define RKL_DMC_PATH                   DMC_LEGACY_PATH(rkl, 2, 03)
 MODULE_FIRMWARE(RKL_DMC_PATH);
 
-#define TGL_DMC_PATH                   DMC_PATH(tgl, 2, 12)
+#define TGL_DMC_PATH                   DMC_LEGACY_PATH(tgl, 2, 12)
 MODULE_FIRMWARE(TGL_DMC_PATH);
 
-#define ICL_DMC_PATH                   DMC_PATH(icl, 1, 09)
+#define ICL_DMC_PATH                   DMC_LEGACY_PATH(icl, 1, 09)
 #define ICL_DMC_MAX_FW_SIZE            0x6000
 MODULE_FIRMWARE(ICL_DMC_PATH);
 
-#define GLK_DMC_PATH                   DMC_PATH(glk, 1, 04)
+#define GLK_DMC_PATH                   DMC_LEGACY_PATH(glk, 1, 04)
 #define GLK_DMC_MAX_FW_SIZE            0x4000
 MODULE_FIRMWARE(GLK_DMC_PATH);
 
-#define KBL_DMC_PATH                   DMC_PATH(kbl, 1, 04)
+#define KBL_DMC_PATH                   DMC_LEGACY_PATH(kbl, 1, 04)
 #define KBL_DMC_MAX_FW_SIZE            BXT_DMC_MAX_FW_SIZE
 MODULE_FIRMWARE(KBL_DMC_PATH);
 
-#define SKL_DMC_PATH                   DMC_PATH(skl, 1, 27)
+#define SKL_DMC_PATH                   DMC_LEGACY_PATH(skl, 1, 27)
 #define SKL_DMC_MAX_FW_SIZE            BXT_DMC_MAX_FW_SIZE
 MODULE_FIRMWARE(SKL_DMC_PATH);
 
-#define BXT_DMC_PATH                   DMC_PATH(bxt, 1, 07)
+#define BXT_DMC_PATH                   DMC_LEGACY_PATH(bxt, 1, 07)
 #define BXT_DMC_MAX_FW_SIZE            0x3000
 MODULE_FIRMWARE(BXT_DMC_PATH);
 
        intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
 }
 
+static const char *dmc_fallback_path(struct drm_i915_private *i915)
+{
+       /* No fallback paths for now. */
+       return NULL;
+}
+
 static void dmc_load_work_fn(struct work_struct *work)
 {
        struct drm_i915_private *dev_priv;
        struct intel_dmc *dmc;
        const struct firmware *fw = NULL;
+       const char *fallback_path;
+       int err;
 
        dev_priv = container_of(work, typeof(*dev_priv), display.dmc.work);
        dmc = &dev_priv->display.dmc;
 
-       request_firmware(&fw, dev_priv->display.dmc.fw_path, dev_priv->drm.dev);
+       err = request_firmware(&fw, dev_priv->display.dmc.fw_path, dev_priv->drm.dev);
+
+       if (err == -ENOENT && !dev_priv->params.dmc_firmware_path) {
+               fallback_path = dmc_fallback_path(dev_priv);
+               if (fallback_path) {
+                       drm_dbg_kms(&dev_priv->drm,
+                                   "%s not found, falling back to %s\n",
+                                   dmc->fw_path,
+                                   fallback_path);
+                       err = request_firmware(&fw, fallback_path, dev_priv->drm.dev);
+                       if (err == 0)
+                               dev_priv->display.dmc.fw_path = fallback_path;
+               }
+       }
+
        parse_dmc_fw(dev_priv, fw);
 
        if (intel_dmc_has_payload(dev_priv)) {