drm/i915/dmc: Load DMC on MTL
authorMadhumitha Tolakanahalli Pradeep <madhumitha.tolakanahalli.pradeep@intel.com>
Tue, 7 Mar 2023 19:51:11 +0000 (16:51 -0300)
committerMatt Roper <matthew.d.roper@intel.com>
Thu, 9 Mar 2023 18:57:15 +0000 (10:57 -0800)
Add support to load DMC on MTL.

According to the spec and based on tests done on real hardware, 0x7000
is a reasonable size limit that covers each possible payload.

v2:
  - Tighten payload size limit. (Matt, Rodrigo)
  - Use a better name for the defined payload limit. (Rodrigo)

Signed-off-by: Madhumitha Tolakanahalli Pradeep <madhumitha.tolakanahalli.pradeep@intel.com>
Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Cc: Anusha Srivatsa <anusha.srivatsa@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230307195111.90767-1-gustavo.sousa@intel.com
drivers/gpu/drm/i915/display/intel_dmc.c

index ae24749..8a88de6 100644 (file)
@@ -89,10 +89,13 @@ static struct intel_dmc *i915_to_dmc(struct drm_i915_private *i915)
        __stringify(major) "_"                  \
        __stringify(minor) ".bin"
 
+#define XELPDP_DMC_MAX_FW_SIZE         0x7000
 #define DISPLAY_VER13_DMC_MAX_FW_SIZE  0x20000
-
 #define DISPLAY_VER12_DMC_MAX_FW_SIZE  ICL_DMC_MAX_FW_SIZE
 
+#define MTL_DMC_PATH                   DMC_PATH(mtl)
+MODULE_FIRMWARE(MTL_DMC_PATH);
+
 #define DG2_DMC_PATH                   DMC_LEGACY_PATH(dg2, 2, 08)
 MODULE_FIRMWARE(DG2_DMC_PATH);
 
@@ -995,7 +998,10 @@ void intel_dmc_init(struct drm_i915_private *i915)
 
        INIT_WORK(&dmc->work, dmc_load_work_fn);
 
-       if (IS_DG2(i915)) {
+       if (IS_METEORLAKE(i915)) {
+               dmc->fw_path = MTL_DMC_PATH;
+               dmc->max_fw_size = XELPDP_DMC_MAX_FW_SIZE;
+       } else if (IS_DG2(i915)) {
                dmc->fw_path = DG2_DMC_PATH;
                dmc->max_fw_size = DISPLAY_VER13_DMC_MAX_FW_SIZE;
        } else if (IS_ALDERLAKE_P(i915)) {