diff mbox series

[07/10] drm/i915/display: change display probe to identify GMD ID based platforms

Message ID e26f6a1a0aa2b051f49d76242194f819be3d83fd.1716399081.git.jani.nikula@intel.com (mailing list archive)
State New, archived
Headers show
Series drm/i915: identify all platforms in display probe | expand

Commit Message

Jani Nikula May 22, 2024, 5:33 p.m. UTC
We'll need to identify all platforms, including the ones that have
display defined by GMD ID. Add MTL and LNL. Their display info will
still be probed via GMD ID.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 .../drm/i915/display/intel_display_device.c   | 44 +++++++++++--------
 1 file changed, 26 insertions(+), 18 deletions(-)

Comments

Rodrigo Vivi May 23, 2024, 6:39 p.m. UTC | #1
On Wed, May 22, 2024 at 08:33:44PM +0300, Jani Nikula wrote:
> We'll need to identify all platforms, including the ones that have
> display defined by GMD ID. Add MTL and LNL. Their display info will
> still be probed via GMD ID.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  .../drm/i915/display/intel_display_device.c   | 44 +++++++++++--------
>  1 file changed, 26 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
> index d1e03437abb3..416853ed50df 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_device.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_device.c
> @@ -21,7 +21,7 @@ __diag_push();
>  __diag_ignore_all("-Woverride-init", "Allow field initialization overrides for display info");
>  
>  struct platform_desc {
> -	const struct intel_display_device_info *info;
> +	const struct intel_display_device_info *info; /* NULL for GMD ID */
>  };
>  
>  static const struct intel_display_device_info no_display = {};
> @@ -871,6 +871,17 @@ static const struct intel_display_device_info xe2_hpd_display = {
>  		BIT(PORT_TC1) | BIT(PORT_TC2) | BIT(PORT_TC3) | BIT(PORT_TC4),
>  };
>  
> +/*
> + * Do not initialize the .info member of the platform desc for GMD ID based
> + * platforms. Their display will be probed automatically based on the IP version
> + * reported by the hardware.
> + */
> +static const struct platform_desc mtl_desc = {
> +};
> +
> +static const struct platform_desc lnl_desc = {
> +};
> +
>  __diag_pop();
>  
>  /*
> @@ -937,12 +948,8 @@ static const struct {
>  	INTEL_RPLU_IDS(INTEL_DISPLAY_DEVICE, &adl_p_desc),
>  	INTEL_RPLP_IDS(INTEL_DISPLAY_DEVICE, &adl_p_desc),
>  	INTEL_DG2_IDS(INTEL_DISPLAY_DEVICE, &dg2_desc),
> -
> -	/*
> -	 * Do not add any GMD_ID-based platforms to this list.  They will
> -	 * be probed automatically based on the IP version reported by
> -	 * the hardware.
> -	 */
> +	INTEL_MTL_IDS(INTEL_DISPLAY_DEVICE, &mtl_desc),
> +	INTEL_LNL_IDS(INTEL_DISPLAY_DEVICE, &lnl_desc),
>  };
>  
>  static const struct {
> @@ -995,20 +1002,15 @@ probe_gmdid_display(struct drm_i915_private *i915, struct intel_display_ip_ver *
>  	return NULL;
>  }
>  
> -static const struct intel_display_device_info *
> -probe_display(struct drm_i915_private *i915)
> +static const struct platform_desc *find_platform_desc(struct pci_dev *pdev)
>  {
> -	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
>  	int i;
>  
>  	for (i = 0; i < ARRAY_SIZE(intel_display_ids); i++) {
>  		if (intel_display_ids[i].devid == pdev->device)
> -			return intel_display_ids[i].desc->info;
> +			return intel_display_ids[i].desc;
>  	}
>  
> -	drm_dbg(&i915->drm, "No display ID found for device ID %04x; disabling display.\n",
> -		pdev->device);
> -
>  	return NULL;
>  }
>  
> @@ -1017,6 +1019,7 @@ void intel_display_device_probe(struct drm_i915_private *i915)
>  	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
>  	const struct intel_display_device_info *info;
>  	struct intel_display_ip_ver ip_ver = {};
> +	const struct platform_desc *desc;
>  
>  	/* Add drm device backpointer as early as possible. */
>  	i915->display.drm = &i915->drm;
> @@ -1028,12 +1031,17 @@ void intel_display_device_probe(struct drm_i915_private *i915)
>  		goto no_display;
>  	}
>  
> -	if (HAS_GMD_ID(i915))
> -		info = probe_gmdid_display(i915, &ip_ver);
> -	else
> -		info = probe_display(i915);
> +	desc = find_platform_desc(pdev);
> +	if (!desc) {
> +		drm_dbg_kms(&i915->drm, "Unknown device ID %04x; disabling display.\n",
> +			    pdev->device);
> +		goto no_display;
> +	}
>  
> +	info = desc->info;
>  	if (!info)
> +		info = probe_gmdid_display(i915, &ip_ver);
> +        if (!info)
>  		goto no_display;
>  
>  	DISPLAY_INFO(i915) = info;
> -- 
> 2.39.2
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
index d1e03437abb3..416853ed50df 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.c
+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
@@ -21,7 +21,7 @@  __diag_push();
 __diag_ignore_all("-Woverride-init", "Allow field initialization overrides for display info");
 
 struct platform_desc {
-	const struct intel_display_device_info *info;
+	const struct intel_display_device_info *info; /* NULL for GMD ID */
 };
 
 static const struct intel_display_device_info no_display = {};
@@ -871,6 +871,17 @@  static const struct intel_display_device_info xe2_hpd_display = {
 		BIT(PORT_TC1) | BIT(PORT_TC2) | BIT(PORT_TC3) | BIT(PORT_TC4),
 };
 
+/*
+ * Do not initialize the .info member of the platform desc for GMD ID based
+ * platforms. Their display will be probed automatically based on the IP version
+ * reported by the hardware.
+ */
+static const struct platform_desc mtl_desc = {
+};
+
+static const struct platform_desc lnl_desc = {
+};
+
 __diag_pop();
 
 /*
@@ -937,12 +948,8 @@  static const struct {
 	INTEL_RPLU_IDS(INTEL_DISPLAY_DEVICE, &adl_p_desc),
 	INTEL_RPLP_IDS(INTEL_DISPLAY_DEVICE, &adl_p_desc),
 	INTEL_DG2_IDS(INTEL_DISPLAY_DEVICE, &dg2_desc),
-
-	/*
-	 * Do not add any GMD_ID-based platforms to this list.  They will
-	 * be probed automatically based on the IP version reported by
-	 * the hardware.
-	 */
+	INTEL_MTL_IDS(INTEL_DISPLAY_DEVICE, &mtl_desc),
+	INTEL_LNL_IDS(INTEL_DISPLAY_DEVICE, &lnl_desc),
 };
 
 static const struct {
@@ -995,20 +1002,15 @@  probe_gmdid_display(struct drm_i915_private *i915, struct intel_display_ip_ver *
 	return NULL;
 }
 
-static const struct intel_display_device_info *
-probe_display(struct drm_i915_private *i915)
+static const struct platform_desc *find_platform_desc(struct pci_dev *pdev)
 {
-	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(intel_display_ids); i++) {
 		if (intel_display_ids[i].devid == pdev->device)
-			return intel_display_ids[i].desc->info;
+			return intel_display_ids[i].desc;
 	}
 
-	drm_dbg(&i915->drm, "No display ID found for device ID %04x; disabling display.\n",
-		pdev->device);
-
 	return NULL;
 }
 
@@ -1017,6 +1019,7 @@  void intel_display_device_probe(struct drm_i915_private *i915)
 	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
 	const struct intel_display_device_info *info;
 	struct intel_display_ip_ver ip_ver = {};
+	const struct platform_desc *desc;
 
 	/* Add drm device backpointer as early as possible. */
 	i915->display.drm = &i915->drm;
@@ -1028,12 +1031,17 @@  void intel_display_device_probe(struct drm_i915_private *i915)
 		goto no_display;
 	}
 
-	if (HAS_GMD_ID(i915))
-		info = probe_gmdid_display(i915, &ip_ver);
-	else
-		info = probe_display(i915);
+	desc = find_platform_desc(pdev);
+	if (!desc) {
+		drm_dbg_kms(&i915->drm, "Unknown device ID %04x; disabling display.\n",
+			    pdev->device);
+		goto no_display;
+	}
 
+	info = desc->info;
 	if (!info)
+		info = probe_gmdid_display(i915, &ip_ver);
+        if (!info)
 		goto no_display;
 
 	DISPLAY_INFO(i915) = info;