diff mbox

[v2,1/2] drm/i915/mst: Validate modes against available link bandwidth

Message ID 1471035647-5384-1-git-send-email-anusha.srivatsa@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Srivatsa, Anusha Aug. 12, 2016, 9 p.m. UTC
Validate the modes against available link bandwidth rather than
maximum link bandwidth so that we have a better idea as to whether
a proposed mode can truly run beside existing stream.

v2: Put the Signed-off to the end of the commit message

Cc: dhinakaran.pandiyan@intel.com

Signed-off-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
---
 drivers/gpu/drm/i915/intel_dp_mst.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

kernel test robot Aug. 12, 2016, 9:53 p.m. UTC | #1
Hi Anusha,

[auto build test ERROR on drm/drm-next]
[also build test ERROR on v4.8-rc1 next-20160812]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Anusha-Srivatsa/drm-i915-mst-Validate-modes-against-available-link-bandwidth/20160813-050818
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
config: i386-randconfig-x014-201632 (attached as .config)
compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

Note: the linux-review/Anusha-Srivatsa/drm-i915-mst-Validate-modes-against-available-link-bandwidth/20160813-050818 HEAD 413b1bb45dc2c58540a17c5ca642b6aee2c97405 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   drivers/gpu/drm/i915/intel_dp_mst.c: In function 'intel_dp_mst_mode_valid':
>> drivers/gpu/drm/i915/intel_dp_mst.c:363:14: error: implicit declaration of function 'drm_dp_mst_get_avail_pbn' [-Werror=implicit-function-declaration]
     avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
                 ^~~~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/drm_dp_mst_get_avail_pbn +363 drivers/gpu/drm/i915/intel_dp_mst.c

   357		struct intel_connector *intel_connector = to_intel_connector(connector);
   358		struct intel_dp *intel_dp = intel_connector->mst_port;
   359		struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
   360		struct drm_dp_mst_port *port = (struct drm_dp_mst_port *) (intel_connector->port);
   361		int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
   362	
 > 363		avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
   364		req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
   365		if (req_pbn > avail_pbn)
   366			return MODE_H_ILLEGAL;

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Jani Nikula Aug. 16, 2016, 11:19 a.m. UTC | #2
On Sat, 13 Aug 2016, kbuild test robot <lkp@intel.com> wrote:
> Hi Anusha,
>
> [auto build test ERROR on drm/drm-next]
> [also build test ERROR on v4.8-rc1 next-20160812]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url:    https://github.com/0day-ci/linux/commits/Anusha-Srivatsa/drm-i915-mst-Validate-modes-against-available-link-bandwidth/20160813-050818
> base:   git://people.freedesktop.org/~airlied/linux.git drm-next
> config: i386-randconfig-x014-201632 (attached as .config)
> compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=i386 
>
> Note: the linux-review/Anusha-Srivatsa/drm-i915-mst-Validate-modes-against-available-link-bandwidth/20160813-050818 HEAD 413b1bb45dc2c58540a17c5ca642b6aee2c97405 builds fine.
>       It only hurts bisectibility.

The patches are in the wrong order.

BR,
Jani.

>
> All errors (new ones prefixed by >>):
>
>    drivers/gpu/drm/i915/intel_dp_mst.c: In function 'intel_dp_mst_mode_valid':
>>> drivers/gpu/drm/i915/intel_dp_mst.c:363:14: error: implicit declaration of function 'drm_dp_mst_get_avail_pbn' [-Werror=implicit-function-declaration]
>      avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
>                  ^~~~~~~~~~~~~~~~~~~~~~~~
>    cc1: some warnings being treated as errors
>
> vim +/drm_dp_mst_get_avail_pbn +363 drivers/gpu/drm/i915/intel_dp_mst.c
>
>    357		struct intel_connector *intel_connector = to_intel_connector(connector);
>    358		struct intel_dp *intel_dp = intel_connector->mst_port;
>    359		struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
>    360		struct drm_dp_mst_port *port = (struct drm_dp_mst_port *) (intel_connector->port);
>    361		int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
>    362	
>  > 363		avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
>    364		req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
>    365		if (req_pbn > avail_pbn)
>    366			return MODE_H_ILLEGAL;
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Jani Nikula Aug. 16, 2016, 11:23 a.m. UTC | #3
On Sat, 13 Aug 2016, Anusha Srivatsa <anusha.srivatsa@intel.com> wrote:
> Validate the modes against available link bandwidth rather than
> maximum link bandwidth so that we have a better idea as to whether
> a proposed mode can truly run beside existing stream.

But if the existing link was trained for the existing stream, there
isn't necessarily any bandwidth left. I'd think this is something that
the up front link training + atomic mode setting will take care of.

BR,
Jani.



>
> v2: Put the Signed-off to the end of the commit message
>
> Cc: dhinakaran.pandiyan@intel.com
>
> Signed-off-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dp_mst.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..e7e87d7 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -352,13 +352,23 @@ static enum drm_mode_status
>  intel_dp_mst_mode_valid(struct drm_connector *connector,
>  			struct drm_display_mode *mode)
>  {
> +	int req_pbn = 0;
> +	int avail_pbn = 0;
> +	struct intel_connector *intel_connector = to_intel_connector(connector);
> +	struct intel_dp *intel_dp = intel_connector->mst_port;
> +	struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
> +	struct drm_dp_mst_port *port = (struct drm_dp_mst_port *) (intel_connector->port);
>  	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
>  
> -	/* TODO - validate mode against available PBN for link */
> +	avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
> +	req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
> +	if (req_pbn > avail_pbn)
> +		return MODE_H_ILLEGAL;
> +
>  	if (mode->clock < 10000)
>  		return MODE_CLOCK_LOW;
>  
> -	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> +        if (mode->flags & DRM_MODE_FLAG_DBLCLK)
>  		return MODE_H_ILLEGAL;
>  
>  	if (mode->clock > max_dotclk)
Srivatsa, Anusha Aug. 17, 2016, 5:42 p.m. UTC | #4
-----Original Message-----
From: Jani Nikula [mailto:jani.nikula@linux.intel.com] 
Sent: Tuesday, August 16, 2016 4:24 AM
To: Srivatsa, Anusha <anusha.srivatsa@intel.com>; intel-gfx@lists.freedesktop.org
Cc: Pandiyan, Dhinakaran <dhinakaran.pandiyan@intel.com>
Subject: Re: [Intel-gfx] [PATCH v2 1/2] drm/i915/mst: Validate modes against available link bandwidth

On Sat, 13 Aug 2016, Anusha Srivatsa <anusha.srivatsa@intel.com> wrote:
> Validate the modes against available link bandwidth rather than 
> maximum link bandwidth so that we have a better idea as to whether a 
> proposed mode can truly run beside existing stream.

But if the existing link was trained for the existing stream, there isn't necessarily any bandwidth left. I'd think this is something that the up front link training + atomic mode setting will take care of.

The link training is done once for the link and not everytime we add a new sink device. In MST mode, as and when a new sink device is added, the total link bandwidth reduces and hence we need to compare with the available bandwidth rather than the total link bandwidth.

-Anusha

BR,
Jani.



>
> v2: Put the Signed-off to the end of the commit message
>
> Cc: dhinakaran.pandiyan@intel.com
>
> Signed-off-by: Anusha Srivatsa <anusha.srivatsa@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_dp_mst.c | 14 ++++++++++++--
>  1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c 
> b/drivers/gpu/drm/i915/intel_dp_mst.c
> index 629337d..e7e87d7 100644
> --- a/drivers/gpu/drm/i915/intel_dp_mst.c
> +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
> @@ -352,13 +352,23 @@ static enum drm_mode_status  
> intel_dp_mst_mode_valid(struct drm_connector *connector,
>  			struct drm_display_mode *mode)
>  {
> +	int req_pbn = 0;
> +	int avail_pbn = 0;
> +	struct intel_connector *intel_connector = to_intel_connector(connector);
> +	struct intel_dp *intel_dp = intel_connector->mst_port;
> +	struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
> +	struct drm_dp_mst_port *port = (struct drm_dp_mst_port *) 
> +(intel_connector->port);
>  	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
>  
> -	/* TODO - validate mode against available PBN for link */
> +	avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
> +	req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
> +	if (req_pbn > avail_pbn)
> +		return MODE_H_ILLEGAL;
> +
>  	if (mode->clock < 10000)
>  		return MODE_CLOCK_LOW;
>  
> -	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
> +        if (mode->flags & DRM_MODE_FLAG_DBLCLK)
>  		return MODE_H_ILLEGAL;
>  
>  	if (mode->clock > max_dotclk)

--
Jani Nikula, Intel Open Source Technology Center
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 629337d..e7e87d7 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -352,13 +352,23 @@  static enum drm_mode_status
 intel_dp_mst_mode_valid(struct drm_connector *connector,
 			struct drm_display_mode *mode)
 {
+	int req_pbn = 0;
+	int avail_pbn = 0;
+	struct intel_connector *intel_connector = to_intel_connector(connector);
+	struct intel_dp *intel_dp = intel_connector->mst_port;
+	struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
+	struct drm_dp_mst_port *port = (struct drm_dp_mst_port *) (intel_connector->port);
 	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
 
-	/* TODO - validate mode against available PBN for link */
+	avail_pbn = drm_dp_mst_get_avail_pbn(mgr, port);
+	req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
+	if (req_pbn > avail_pbn)
+		return MODE_H_ILLEGAL;
+
 	if (mode->clock < 10000)
 		return MODE_CLOCK_LOW;
 
-	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+        if (mode->flags & DRM_MODE_FLAG_DBLCLK)
 		return MODE_H_ILLEGAL;
 
 	if (mode->clock > max_dotclk)