[PATCH v2 00/21] drm/dp: Various helper improvements and cleanups

Thierry Reding thierry.reding at gmail.com
Wed Oct 2 16:14:19 UTC 2019


On Mon, Sep 23, 2019 at 04:52:02PM +0200, Thierry Reding wrote:
> On Mon, Sep 23, 2019 at 04:52:50PM +0300, Jani Nikula wrote:
> > On Fri, 20 Sep 2019, Thierry Reding <thierry.reding at gmail.com> wrote:
> > > On Mon, Sep 02, 2019 at 01:31:00PM +0200, Thierry Reding wrote:
> > >> From: Thierry Reding <treding at nvidia.com>
> > >> 
> > >> Hi,
> > >> 
> > >> this series of patches improves the DP helpers a bit and cleans up some
> > >> inconsistencies along the way.
> > >> 
> > >> v2 incorporates all review comments add collects Reviewed-bys from v1.
> > >> 
> > >> Thierry
> > >> 
> > >> Thierry Reding (21):
> > >>   drm/dp: Sort includes alphabetically
> > >>   drm/dp: Add missing kerneldoc for struct drm_dp_link
> > >>   drm/dp: Add drm_dp_link_reset() implementation
> > >>   drm/dp: Track link capabilities alongside settings
> > >>   drm/dp: Turn link capabilities into booleans
> > >>   drm/dp: Probe link using existing parsing helpers
> > >>   drm/dp: Read fast training capability from link
> > >>   drm/dp: Read TPS3 capability from sink
> > >>   drm/dp: Read channel coding capability from sink
> > >>   drm/dp: Read alternate scrambler reset capability from sink
> > >>   drm/dp: Read eDP version from DPCD
> > >>   drm/dp: Read AUX read interval from DPCD
> > >>   drm/dp: Do not busy-loop during link training
> > >>   drm/dp: Use drm_dp_aux_rd_interval()
> > >>   drm/dp: Add helper to get post-cursor adjustments
> > >>   drm/dp: Set channel coding on link configuration
> > >>   drm/dp: Enable alternate scrambler reset when supported
> > >>   drm/dp: Add drm_dp_link_choose() helper
> > >>   drm/dp: Add support for eDP link rates
> > >>   drm/dp: Remove a gratuituous blank line
> > >>   drm/bridge: tc358767: Use DP nomenclature
> > >
> > > Anyone interested in reviewing these?
> > 
> > Thierry, I don't quite know how to put this nicely, but I also don't
> > think it's nice to not reply at all. So I'll try to be fair but it'll be
> > blunt. Fair enough?
> 
> Fair enough.
> 
> > I've glanced over the series, already before you pinged for reviews. It
> > looks like you've put effort into it, and it all looks nice. However, it
> > does not look like we could use this in i915, without significant effort
> > both on top of this work and in i915. It does not feel like there's any
> > incentive for us to review this in detail.
> > 
> > It also feels like there's an increasing disconnect between "small" and
> > "big" drivers (*) when it comes to handling DP link and training. It
> > scares me a bit that this work is being done on the terms of the "small"
> > drivers, and that later in time this might be considered the One True
> > Way of handling DP.
> 
> I'm not sure I understand your concern here. The goal of the series is
> primarily to extend the existing support for DP. It follows the pattern
> established by existing helpers and then goes one step further and
> provides some common way of actually storing the values that are being
> read from the sink so that they can be used.
> 
> These are meant to be helpers and in no way should anyone feel obliged
> to use them. If you've got this all figured out already, great! If you
> do this already much better in i915, by all means stay away from this.
> 
> At the same time it seems counter-productive to write all of this code
> as part of the Tegra DRM driver. In my opinion subsystems should provide
> generic helpers that can help multiple drivers share code. This is
> especially true for things that are defined in a specification because
> there's not a lot of room for interpretation. The helpers in these
> patches are meant to be that kind of helpers.
> 
> > One of the technical observations is that you fill the struct
> > drm_dp_link and struct drm_dp_link_caps from the sink. It's not clear
> > that the link caps really are an intersection of the source and sink
> > caps. The eDP 1.4 link rates are the prime example. I think you should
> > have sets of source and sink rates, and you should intersect those to
> > find out the available link rates. The max rate is the highest number in
> > that set. Similarly for many things, like training pattern support. I
> > think it's only going to get more complicated with DP 2.0.
> 
> The idea here was to provide only helpers to collect the DPCD data
> defined by the specification. Anything specific to the source is meant
> to be handled by display driver. In case of eDP 1.4 link rates the code
> will only add the rates read from DPCD. It's up to the driver to filter
> out rates that it doesn't support from that list.
> 
> I think the fact that things will keep getting more complicated is an
> argument in favour of sharing code rather than keep doing the same
> (complicated) thing over and over again in every driver.
> 
> > Another pain point is the caching of the caps as bits in
> > drm_dp_link_caps. How far are you going to take it? There's an insane
> > and growing amount of things in the DPCD that describe the link in one
> > way or another. Should they all be added to caps? Where do you draw the
> > line? Do we add both the bit and the helper for getting that bit from
> > the DPCD? And are you then going to add support for intersecting all
> > those cap bits between the source and the sink?
> 
> Like I said the primary goal here is to have common code to read the
> common values from DPCD. Once the link has been "probed" it is up to the
> driver to do whatever it wants with that data.
> 
> Originally I had intended this shared code to do much more, but this was
> shot down during review (I think by Daniel and yourself) for many of the
> same reasons that you're pointing out. Initially there was code in this
> series to standardize the link training sequence, for example. This was
> all strictly according to the specification, so I thought that would
> give us enough common ground for shared code. But you guys didn't agree,
> so I've moved that out into Tegra specific patches since then.
> 
> As for how far to take this, I think the most sensible is to do what we
> do everywhere else. We add to this whatever is needed on an on-demand
> basis. The current series here adds what I found to be necessary to
> support DP on Tegra. There's not a lot of fancy stuff here, I know, but
> that doesn't mean this code is useless for everyone else.
> 
> So, can i915 use this? Probably yes. Would that be a good idea? Probably
> not. And that's perfectly fine. But I could imagine that others may very
> well want to use some shared code to avoid having to copy/paste code and
> then later fix up cargo-culted bugs in every driver.
> 
> I'm also fully aware that this is not a lot and it may not be perfect.
> But most helpers aren't initially. The point here is to start collecting
> the common bits in one location and evolve them, just like we do for so
> many other helpers.
> 
> Note also that I haven't made any attempt here to convert any drivers to
> these helpers. That's because these are meant to be opt-in to simplify
> drivers. If you want to do everything yourself, feel free to do that. It
> is perfectly legit to do everything yourself if these helpers aren't
> flexible enough to do what you want. The better option would be to help
> improve the helpers to make them work for a wider range of drivers, but
> if you don't want to, then don't.
> 
> > Overall I think there is value in unifying how we handle DP in drm. Even
> > if just by providing helpers to simplify things in drivers. It's just
> > that I feel this series isn't taking us closer to that goal, except for
> > a subset of drivers. In the big picture, it may be increasing the
> > divide.
> 
> So the bulk of this series is stuff that's purely parsing values from
> DPCD, which is very much in line with existing helpers. I don't think
> those are in any way contentious. There's also a bit of cleanup here
> where new helpers are used to simplify existing ones. Maybe a handful
> of these patches are what you claim might be "increasing the divide".
> 
> But I really don't understand where this is coming from. i915 doesn't
> use a myriad of the other helpers (TTM, CMA, simple KMS, ...) and yet
> these are not increasing any divide, are they? Why do you think these
> helpers here are different?
> 
> Again, if you've got all of this implemented in i915 (or any of the
> other "big" drivers), you probably want to stay away from these. But
> does that mean everyone else has to go and figure all of this out from
> scratch? Shouldn't we at least attempt to write common code? Or should
> we all go and write our own DP stacks like the big drivers? I don't see
> any advantage in that.
> 
> > If we get a confirmation from our drm overlords that drivers doing
> > things the way they see fit in this regard is fine, then I'm okay with
> > this. But I'm definitely not committing to switching to using the
> > drm_dp_link structures and helpers in i915, quite the opposite actually.
> 
> I don't think anyone's going to force you to convert to the drm_dp_link
> helpers if you don't want to. It's definitely not my intention to make
> this "The One And Only Way To Do DP in DRM". The goal here is to create
> helpers that can simplify adding DP support.
> 
> Now, if everyone else thinks the drm_dp_link helpers are a bad idea, I
> will get over it and move this into Tegra code. But since we're being
> blunt, I'd like to get a third (and ideally fourth) opinion on whether
> we really want this stuff to be reinvented in every driver or whether
> we want to try and come up with something that works for more than one
> driver.
> 
> Thierry
> 
> > BR,
> > Jani.
> > 
> > 
> > (*) Please don't read too much into "small" and "big", just two groups
> > of drivers handling things differently.

Dave, Daniel,

how can we make progress on this? Is it okay to go forward with this
series if we agree that it's not going to be required for drivers to
adopt it if they already have a working DP implementation?

If we can't agree on the struct drm_dp_link helpers, perhaps I should go
and at least merge the additional DPCD parsing helpers. Those are very
much in line with existing helpers. I could then move the drm_dp_link
helpers into the Tegra driver and add replacement code to the other
drivers that already use struct drm_dp_link. It'd be a shame to
duplicate the code, but I'm willing to invest that additional work so
that I can finally make progress on this series and the Tegra DP support
that depends on this.

Thierry

> > 
> > 
> > 
> > 
> > >
> > > Thierry
> > >
> > >> 
> > >>  drivers/gpu/drm/bridge/tc358767.c      |  22 +-
> > >>  drivers/gpu/drm/drm_dp_helper.c        | 327 ++++++++++++++++++++++---
> > >>  drivers/gpu/drm/msm/edp/edp_ctrl.c     |  12 +-
> > >>  drivers/gpu/drm/rockchip/cdn-dp-core.c |   8 +-
> > >>  drivers/gpu/drm/rockchip/cdn-dp-reg.c  |  13 +-
> > >>  drivers/gpu/drm/tegra/dpaux.c          |   8 +-
> > >>  drivers/gpu/drm/tegra/sor.c            |  32 +--
> > >>  include/drm/drm_dp_helper.h            | 124 +++++++++-
> > >>  8 files changed, 459 insertions(+), 87 deletions(-)
> > >> 
> > >> -- 
> > >> 2.22.0
> > >> 
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel at lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> > -- 
> > Jani Nikula, Intel Open Source Graphics Center


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20191002/d0301d43/attachment.sig>


More information about the dri-devel mailing list