public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@linux.intel.com>
To: Vandana Kannan <vandana.kannan@intel.com>,
	intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v10 2/6] drm/i915: Parse EDID probed modes for DRRS support
Date: Fri, 04 Apr 2014 13:55:42 +0300	[thread overview]
Message-ID: <87wqf59xe9.fsf@intel.com> (raw)
In-Reply-To: <1396608465-5688-1-git-send-email-vandana.kannan@intel.com>

On Fri, 04 Apr 2014, Vandana Kannan <vandana.kannan@intel.com> wrote:
> From: Pradeep Bhat <pradeep.bhat@intel.com>
>
> This patch and finds out the lowest refresh rate supported for the resolution
> same as the fixed_mode.
> It also checks the VBT fields to see if panel supports seamless DRRS or not.
> Based on above data it marks whether eDP panel supports seamless DRRS or not.
> This information is needed for supporting seamless DRRS switch for certain
> power saving usecases. This patch is tested by enabling the DRM logs and
> user should see whether Seamless DRRS is supported or not.
>
> v2: Daniel's review comments
> Modified downclock deduction based on intel_find_panel_downclock
>
> v3: Chris's review comments
> Moved edp_downclock_avail and edp_downclock to intel_panel
>
> v4: Jani's review comments.
> Changed name of the enum edp_panel_type to drrs_support type.
> Change is_drrs_supported to drrs_support of type enum drrs_support_type.
>
> v5: Incorporated Jani's review comments
> Modify intel_dp_drrs_initialize to return downclock mode. Support for Gen7
> and above.
>
> v6: Incorporated Chris's review comments.
> Changed initialize to init in intel_drrs_initialize
>
> v7: Incorporated Jani's review comments.
> Removed edp_downclock and edp_downclock_avail. Return NULL explicitly.
> Make drrs_state and unnamed struct. Move Gen based check inside drrs_init.
>
> v8: Made changes to track PSR enable/disable throughout system use (instead
> of just in the init sequence) for disabling/enabling DRRS. Jani's review
> comments.
>
> v9: PSR tracking will be done as part of idleness detection patch. Removed
> PSR state tracker in i915_drrs. Jani's review comments.
>
> v10: Added log for DRRS not supported in drrs_init
>
> Signed-off-by: Pradeep Bhat <pradeep.bhat@intel.com>
> Signed-off-by: Vandana Kannan <vandana.kannan@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dp.c  | 45 +++++++++++++++++++++++++++++++++++++++-
>  drivers/gpu/drm/i915/intel_drv.h | 16 ++++++++++++++
>  2 files changed, 60 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index e48d47c..9f110bd 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -3632,6 +3632,43 @@ intel_dp_init_panel_power_sequencer_registers(struct drm_device *dev,
>  		      I915_READ(pp_div_reg));
>  }
>  
> +static struct drm_display_mode *
> +intel_dp_drrs_init(struct intel_digital_port *intel_dig_port,
> +			struct intel_connector *intel_connector,
> +			struct drm_display_mode *fixed_mode)
> +{
> +	struct drm_connector *connector = &intel_connector->base;
> +	struct intel_dp *intel_dp = &intel_dig_port->dp;
> +	struct drm_device *dev = intel_dig_port->base.base.dev;
> +	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct drm_display_mode *downclock_mode = NULL;
> +
> +	if (INTEL_INFO(dev)->gen <= 6) {
> +		DRM_DEBUG_KMS("DRRS supported for Gen7 and above\n");
> +		return NULL;
> +	}
> +
> +	if (dev_priv->vbt.drrs_type == DRRS_NOT_SUPPORTED) {
> +		DRM_INFO("VBT doesn't support DRRS\n");
> +		return NULL;
> +	}
> +
> +	downclock_mode = intel_find_panel_downclock
> +					(dev, fixed_mode, connector);
> +
> +	if (downclock_mode != NULL &&
> +		dev_priv->vbt.drrs_type == SEAMLESS_DRRS_SUPPORT) {
> +		intel_dp->drrs_state.type = dev_priv->vbt.drrs_type;
> +
> +		intel_dp->drrs_state.refresh_rate_type = DRRS_HIGH_RR;
> +		DRM_INFO("seamless DRRS supported for eDP panel.\n");
> +		return downclock_mode;
> +	} else {
> +		DRM_INFO("DRRS not supported\n");
> +		return NULL;
> +	}

The above now leaks downclock_mode on the return NULL path. Please try
to be more careful.

Please let's try to bring this patchset and review into
conclusion. We'll both end up frustrated otherwise.

How about this instead?

	if (dev_priv->vbt.drrs_type != SEAMLESS_DRRS_SUPPORT) {
		DRM_INFO("VBT doesn't support DRRS\n");
		return NULL;
	}

	downclock_mode = intel_find_panel_downclock(dev, fixed_mode, connector);
	if (!downclock_mode) {
		DRM_INFO("DRRS not supported\n");
		return NULL;
	}

	intel_dp->drrs_state.type = dev_priv->vbt.drrs_type;
	intel_dp->drrs_state.refresh_rate_type = DRRS_HIGH_RR;
	DRM_INFO("seamless DRRS supported for eDP panel.\n");

	return downclock_mode;


BR,
Jani.


> +}
> +
>  static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  				     struct intel_connector *intel_connector,
>  				     struct edp_power_seq *power_seq)
> @@ -3641,10 +3678,13 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  	struct drm_device *dev = intel_dig_port->base.base.dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct drm_display_mode *fixed_mode = NULL;
> +	struct drm_display_mode *downclock_mode = NULL;
>  	bool has_dpcd;
>  	struct drm_display_mode *scan;
>  	struct edid *edid;
>  
> +	intel_dp->drrs_state.type = DRRS_NOT_SUPPORTED;
> +
>  	if (!is_edp(intel_dp))
>  		return true;
>  
> @@ -3687,6 +3727,9 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  	list_for_each_entry(scan, &connector->probed_modes, head) {
>  		if ((scan->type & DRM_MODE_TYPE_PREFERRED)) {
>  			fixed_mode = drm_mode_duplicate(dev, scan);
> +			downclock_mode = intel_dp_drrs_init(
> +						intel_dig_port,
> +						intel_connector, fixed_mode);
>  			break;
>  		}
>  	}
> @@ -3700,7 +3743,7 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
>  	}
>  	mutex_unlock(&dev->mode_config.mutex);
>  
> -	intel_panel_init(&intel_connector->panel, fixed_mode, NULL);
> +	intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode);
>  	intel_panel_setup_backlight(connector);
>  
>  	return true;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 42762b7..286d4fb 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -482,6 +482,17 @@ struct intel_hdmi {
>  
>  #define DP_MAX_DOWNSTREAM_PORTS		0x10
>  
> +/**
> + * HIGH_RR is the highest eDP panel refresh rate read from EDID
> + * LOW_RR is the lowest eDP panel refresh rate found from EDID
> + * parsing for same resolution.
> + */
> +enum edp_drrs_refresh_rate_type {
> +	DRRS_HIGH_RR,
> +	DRRS_LOW_RR,
> +	DRRS_MAX_RR, /* RR count */
> +};
> +
>  struct intel_dp {
>  	uint32_t output_reg;
>  	uint32_t aux_ch_ctl_reg;
> @@ -520,6 +531,11 @@ struct intel_dp {
>  				     bool has_aux_irq,
>  				     int send_bytes,
>  				     uint32_t aux_clock_divider);
> +	struct {
> +		enum drrs_support_type type;
> +		enum edp_drrs_refresh_rate_type refresh_rate_type;
> +	} drrs_state;
> +
>  };
>  
>  struct intel_digital_port {
> -- 
> 1.9.1
>

-- 
Jani Nikula, Intel Open Source Technology Center

  reply	other threads:[~2014-04-04 10:55 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-28  4:44 [PATCH 0/6] v7: Enabling DRRS in the kernel Vandana Kannan
2014-03-28  4:44 ` [PATCH 1/6] drm/i915: Adding VBT fields to support eDP DRRS feature Vandana Kannan
2014-04-01 13:04   ` Jani Nikula
2014-04-01 17:26     ` Daniel Vetter
2014-03-28  4:44 ` [PATCH 2/6] drm/i915: Parse EDID probed modes for DRRS support Vandana Kannan
2014-04-01 13:17   ` Jani Nikula
2014-04-03 11:10     ` [PATCH v8 " Vandana Kannan
2014-04-03 11:46       ` Jani Nikula
2014-04-04  4:57         ` [PATCH v9 " Vandana Kannan
2014-04-04 10:47           ` [PATCH v10 " Vandana Kannan
2014-04-04 10:55             ` Jani Nikula [this message]
2014-04-04 11:13               ` Vandana Kannan
2014-04-05  6:42                 ` [PATCH v11 " Vandana Kannan
2014-04-10  8:42                   ` Jani Nikula
2014-04-10  8:55                     ` Daniel Vetter
2014-03-28  4:44 ` [PATCH 3/6] drm/i915: Add support for DRRS to switch RR Vandana Kannan
2014-04-01 13:25   ` Jani Nikula
2014-04-02  5:58     ` Vandana Kannan
2014-04-03 11:14       ` [PATCH v9 " Vandana Kannan
2014-04-04  4:58         ` Vandana Kannan
2014-04-05  6:43           ` Vandana Kannan
2014-04-10  8:43             ` Jani Nikula
2014-04-10  8:56               ` Daniel Vetter
2014-04-10  8:58               ` Daniel Vetter
2014-04-11  9:18                 ` Vandana Kannan
2014-04-11  9:26                   ` Daniel Vetter
2014-04-11 11:21                     ` Vandana Kannan
2014-04-21  4:28                       ` Vandana Kannan
2014-03-28  4:45 ` [PATCH 4/6] drm/i915: Idleness detection for DRRS Vandana Kannan
2014-04-01 13:36   ` Jani Nikula
2014-04-03 11:17     ` [PATCH v9 " Vandana Kannan
2014-04-04  5:00       ` [PATCH v10 " Vandana Kannan
2014-04-04  6:54         ` Jani Nikula
2014-04-04 10:53           ` [PATCH v11 " Vandana Kannan
2014-04-05  6:44             ` Vandana Kannan
2014-04-10  8:52               ` Jani Nikula
2014-03-28  4:45 ` [PATCH 5/6] drm/i915/bdw: Add support for DRRS to switch RR Vandana Kannan
2014-04-01 13:37   ` Jani Nikula
2014-03-28  4:45 ` [PATCH 6/6] drm/i915: Support for RR switching on VLV Vandana Kannan
2014-04-01 13:41   ` Jani Nikula

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wqf59xe9.fsf@intel.com \
    --to=jani.nikula@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=vandana.kannan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox