Re: [PATCH] drm/i915/dp/mst: Validate modes against the available link bandwidth

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

Looking forward for more reviews comments and concerns if any, regarding this patch. 

Regards,
Anusha

>-----Original Message-----
>From: Jim Bride [mailto:jim.bride@xxxxxxxxxxxxxxx]
>Sent: Tuesday, September 6, 2016 11:57 AM
>To: Srivatsa, Anusha <anusha.srivatsa@xxxxxxxxx>
>Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx
>Subject: Re:  [PATCH] drm/i915/dp/mst: Validate modes against the
>available link bandwidth
>
>On Tue, Sep 06, 2016 at 06:39:12PM +0000, Srivatsa, Anusha wrote:
>> Sending to the list again since Ville's review comment  didn't hit the mailing list
>last time.
>>
>> Regards,
>> Anusha
>>
>> -----Original Message-----
>> From: Ville Syrjälä [mailto:ville.syrjala@xxxxxxxxxxxxxxx]
>> Sent: Monday, September 5, 2016 4:39 AM
>> To: Srivatsa, Anusha <anusha.srivatsa@xxxxxxxxx>
>> Cc: intel-gfx@xxxxxxxxxxxxxxxxxxxxx
>> Subject: Re:  [PATCH] drm/i915/dp/mst: Validate modes
>> against the available link bandwidth
>>
>> On Thu, Aug 18, 2016 at 05:11:31PM -0700, Anusha Srivatsa wrote:
>> > Change intel_dp_mst_mode_valid() to use available link bandwidth
>> > rather than the link's maximum supported bandwidth to evaluate
>> > whether modes are legal for the current configuration. This takes
>> > into account the fact that link bandwidth may already be dedicated
>> > to other virtual channels.
>>
>> We can't do this. Results of mode_valid() aren't supposed to change like this
>depending on what else is happening in the system. The only thing mode_valid()
>tells us is whether it's possible to use the mode under *some* circumstances.
>Only if the mode can't be used under *any* circumstances should it be filtered
>out.
>>
>> If we wanted to change this, we'd at the very least have to synthesize hotplug
>uevents whenever the conditions changed. But doing that would be a fairly big
>behavioural change, so I'm not sure how people feel about it. It also doesn't
>really solve the problem since eg. atomic can go directly from 0->n active pipes,
>so there's no way to know upfront which modes we can pick for each pipe.
>>
>
>I won't dispute that this won't help for all cases, but it does make hotplugs, at a
>minimum, more sane.  For that reason alone, I'd like to see this patch land.
>Longer term I think we should look at how we can make user space and atomic
>better handle MST (IMHO in multi-modeset operations on MST atomic should
>ensure that the aggregate dotclock of the modes being set are less than the link
>bandwidth that's configured.)  I think that user space also needs to be more MST
>aware and update what's available based on the current configuration at any
>given time.  I'm not sure what the precise solution should look like here, but I'd
>think that what we want is for user space to fetch the list of available resolutions
>based on the current configuration any time we plug or unplug a device on a DP
>MST topology.  In an ideal world it would be nice to have some sort of
>information about the total link bandwidth, and how much bandwidth each mode
>is taking up so that the user could have a guide to tweaking their setup in such a
>way to maximize how they choose to configure their monitors based on the
>available link bandwidth.
>
>Jim
>
>
>> >
>> > Signed-off-by: Anusha Srivatsa <anusha.srivatsa@xxxxxxxxx>
>> > ---
>> >  drivers/gpu/drm/i915/intel_dp_mst.c | 12 +++++++++---
>> >  1 file changed, 9 insertions(+), 3 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c
>> > b/drivers/gpu/drm/i915/intel_dp_mst.c
>> > index 629337d..39c58eb 100644
>> > --- a/drivers/gpu/drm/i915/intel_dp_mst.c
>> > +++ b/drivers/gpu/drm/i915/intel_dp_mst.c
>> > @@ -352,16 +352,22 @@ static enum drm_mode_status
>> > intel_dp_mst_mode_valid(struct drm_connector *connector,
>> >  			struct drm_display_mode *mode)
>> >  {
>> > -	int max_dotclk = to_i915(connector->dev)->max_dotclk_freq;
>> > +	int req_pbn = 0;
>> > +	int slots = 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;
>> > +
>> > +	req_pbn = drm_dp_calc_pbn_mode(mode->clock, 24);
>> > +	slots = drm_dp_find_vcpi_slots(mgr, req_pbn);
>> >
>> > -	/* TODO - validate mode against available PBN for link */
>> >  	if (mode->clock < 10000)
>> >  		return MODE_CLOCK_LOW;
>> >
>> >  	if (mode->flags & DRM_MODE_FLAG_DBLCLK)
>> >  		return MODE_H_ILLEGAL;
>> >
>> > -	if (mode->clock > max_dotclk)
>> > +	if (slots == -ENOSPC)
>> >  		return MODE_CLOCK_HIGH;
>> >
>> >  	return MODE_OK;
>> > --
>> > 2.7.4
>> >
>> > _______________________________________________
>> > Intel-gfx mailing list
>> > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
>> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>> --
>> Ville Syrjälä
>> Intel OTC
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux