[Intel-gfx] [PATCH v4 2/4] drm/i915: Add i915_lpsp_capability debugfs

Manna, Animesh animesh.manna at intel.com
Tue Apr 14 15:46:00 UTC 2020


On 09-04-2020 11:36, Anshuman Gupta wrote:
> New i915_pm_lpsp igt solution approach relies on connector specific
> debugfs attribute i915_lpsp_capability, it exposes whether an output is
> capable of driving lpsp.
>
> v2:
> - CI fixup.
> v3:
> - register i915_lpsp_info only for supported connector. [Jani]
> - use intel_display_power_well_is_enabled() instead of looking
>    inside power_well count. [Jani]
> - fixes the lpsp capable conditional logic. [Jani]
> - combined the lpsp capable and enable info. [Jani]
> v4:
> - Separate out connector based debugfs i915_lpsp_capability
>    lpsp enable status would be exposes by different entry. [Animesh]
>
> Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> ---
>   .../drm/i915/display/intel_display_debugfs.c  | 63 +++++++++++++++++++
>   1 file changed, 63 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_debugfs.c b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> index bdeea2e02642..402b89daff62 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_debugfs.c
> @@ -611,6 +611,28 @@ static void intel_hdcp_info(struct seq_file *m,
>   	seq_puts(m, "\n");
>   }
>   
> +#define LPSP_CAPABLE(COND) (COND ? seq_puts(m, "LPSP: capable\n") : \
> +				seq_puts(m, "LPSP: incapable\n"))
> +
> +static bool intel_have_edp_dsi_panel(struct drm_connector *connector)
> +{
> +	return connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
> +		connector->connector_type == DRM_MODE_CONNECTOR_eDP;
> +}
> +
> +static bool intel_have_dp_edp_dsi_panel(struct drm_connector *connector)
> +{
> +	return intel_have_edp_dsi_panel(connector) ||
> +		connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort;
> +}
> +
> +static bool intel_have_hdmi_dp_edp_dsi_panel(struct drm_connector *connector)
> +{
> +	return intel_have_dp_edp_dsi_panel(connector) ||
> +		connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
> +		connector->connector_type == DRM_MODE_CONNECTOR_HDMIB;
> +}
> +
>   static void intel_dp_info(struct seq_file *m,
>   			  struct intel_connector *intel_connector)
>   {
> @@ -1991,6 +2013,42 @@ static int i915_hdcp_sink_capability_show(struct seq_file *m, void *data)
>   }
>   DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability);
>   
> +static int i915_lpsp_capability_show(struct seq_file *m, void *data)
> +{
> +	struct drm_connector *connector = m->private;
> +	struct intel_encoder *encoder =
> +			intel_attached_encoder(to_intel_connector(connector));
> +	struct drm_i915_private *i915 = to_i915(connector->dev);
> +
> +	if (connector->status != connector_status_connected)
> +		return -ENODEV;
> +
> +	switch (INTEL_GEN(i915)) {
> +	case 12:
> +		/*
> +		 * Actually TGL can drive LPSP on port till DDI_C
> +		 * but there is no physical connected DDI_C on TGL sku's,
> +		 * even driver is not initilizing DDI_C port for gen12.
> +		 */
> +		LPSP_CAPABLE(encoder->port <= PORT_B);
> +		break;
> +	case 11:
> +		LPSP_CAPABLE(intel_have_edp_dsi_panel(connector));
> +		break;
> +	case 10:
> +	case 9:
> +		LPSP_CAPABLE(encoder->port == PORT_A &&
> +			     intel_have_dp_edp_dsi_panel(connector));
> +		break;
> +	default:
> +		if (IS_HASWELL(i915) || IS_BROADWELL(i915))
> +			LPSP_CAPABLE(connector->connector_type == DRM_MODE_CONNECTOR_eDP);
> +	}
> +
> +	return 0;
> +}
> +DEFINE_SHOW_ATTRIBUTE(i915_lpsp_capability);
> +
>   static int i915_dsc_fec_support_show(struct seq_file *m, void *data)
>   {
>   	struct drm_connector *connector = m->private;
> @@ -2134,5 +2192,10 @@ int intel_connector_debugfs_add(struct drm_connector *connector)
>   		debugfs_create_file("i915_dsc_fec_support", S_IRUGO, root,
>   				    connector, &i915_dsc_fec_support_fops);
>   
> +	/* Legacy panels doesn't lpsp on any platform */
> +	if (intel_have_hdmi_dp_edp_dsi_panel(connector))
> +		debugfs_create_file("i915_lpsp_capability", 0444, root,
> +				    connector, &i915_lpsp_capability_fops);

Need a condition check of INTEL_GEN(dev_priv), for older platform the entry will get created and later in i915_lpsp_capability_show() will not print anything.
With the above fix, Reviewed-by: Animesh Manna <animesh.manna at intel.com>
Nitpick: imo adding function for different combination of connector type check maybe overdoing. In i915_lpsp_capability_show(), can have <gen>_lpsp_cap_check() for different generation.

Regards,
Animesh

> +
>   	return 0;
>   }


More information about the Intel-gfx mailing list