Re: [PATCH] drm/i915: cache the EDID for eDP panels

Chris Wilson
2012-06-15T10:55:33Z

On Fri, 15 Jun 2012 13:52:04 +0300, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Fri, 15 Jun 2012, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> > They aren't going anywhere, and probing on DDC can cause the panel to
> > blank briefly, so read them up front and cache them for later queries.
> >
> > Jesse's patch revamped. Gotta love those display_info.raw_edid = NULL!
> > ---
> > drivers/gpu/drm/i915/intel_dp.c | 48 +++++++++++++++++++++++++++---------
> > drivers/gpu/drm/i915/intel_drv.h | 1 +
> > drivers/gpu/drm/i915/intel_modes.c | 24 ++++++++++++------
> > 3 files changed, 54 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> > index eb57ec7..207e25f 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -67,6 +67,7 @@ struct intel_dp {
> > struct drm_display_mode *panel_fixed_mode; /* for eDP */
> > struct delayed_work panel_vdd_work;
> > bool want_panel_vdd;
> > + struct edid *edid; /* cached for eDP */
> > };
> >
> > /**
> > @@ -2095,26 +2096,50 @@ g4x_dp_detect(struct intel_dp *intel_dp)
> > }
> >
> > static struct edid *
> > -intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter)
> > +_drm_edid_duplicate(struct edid *edid)
> > +{
> > + struct edid *copy;
> > + int size;
> > +
> > + if (edid == NULL)
> > + return NULL;
> > +
> > + size = EDID_LENGTH * (1 + edid->extensions);
> > + *copy = kmalloc(size, GFP_KERNEL);
>
> You may want to remove that '*' there...

And free the cached edid upon destroy. :)
Mainly seeing if I could convince Jesse that we could do a nice patch
for -fixes.
-Chris

--
Chris Wilson, Intel Open Source Technology Centre