From mboxrd@z Thu Jan 1 00:00:00 1970 From: jani.nikula@linux.intel.com (Jani Nikula) Date: Thu, 09 Nov 2017 10:27:02 +0200 Subject: [PATCH] drm/bridge: dw-hdmi: fix EDID parsing In-Reply-To: References: Message-ID: <87tvy3amcp.fsf@intel.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, 07 Nov 2017, Russell King wrote: > Parsing the EDID for HDMI and audio information in the get_modes() > callback is incorrect - this only parses the EDID read from the > connector, not any override or firmware provided EDID. > > The correct place to parse the EDID for these parameters is the > fill_modes() callback, after we've called the helper. Move the parsing > there. This caused problems for Lu?s Mendes. > > Cc: > Reported-by: Lu?s Mendes > Tested-by: Lu?s Mendes > Signed-off-by: Russell King Is this still needed after 53fd40a90f3c ("drm: handle override and firmware EDID at drm_do_get_edid() level") that is headed for v4.15? I'm thinking this might be applicable only for current Linus master and stable. BR, Jani. > --- > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 28 ++++++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > index 9fe407f49986..2516a1c18a10 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > @@ -1905,10 +1905,7 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) > dev_dbg(hdmi->dev, "got edid: width[%d] x height[%d]\n", > edid->width_cm, edid->height_cm); > > - hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); > - hdmi->sink_has_audio = drm_detect_monitor_audio(edid); > drm_mode_connector_update_edid_property(connector, edid); > - cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); > ret = drm_add_edid_modes(connector, edid); > /* Store the ELD */ > drm_edid_to_eld(connector, edid); > @@ -1920,6 +1917,29 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) > return ret; > } > > +static int dw_hdmi_connector_fill_modes(struct drm_connector *connector, > + uint32_t maxX, uint32_t maxY) > +{ > + struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, > + connector); > + int ret; > + > + ret = drm_helper_probe_single_connector_modes(connector, maxX, maxY); > + > + if (connector->edid_blob_ptr) { > + struct edid *edid = (void *)connector->edid_blob_ptr->data; > + > + hdmi->sink_is_hdmi = drm_detect_hdmi_monitor(edid); > + hdmi->sink_has_audio = drm_detect_monitor_audio(edid); > + cec_notifier_set_phys_addr_from_edid(hdmi->cec_notifier, edid); > + } else { > + hdmi->sink_is_hdmi = false; > + hdmi->sink_has_audio = false; > + } > + > + return ret; > +} > + > static void dw_hdmi_connector_force(struct drm_connector *connector) > { > struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, > @@ -1933,7 +1953,7 @@ static void dw_hdmi_connector_force(struct drm_connector *connector) > } > > static const struct drm_connector_funcs dw_hdmi_connector_funcs = { > - .fill_modes = drm_helper_probe_single_connector_modes, > + .fill_modes = dw_hdmi_connector_fill_modes, > .detect = dw_hdmi_connector_detect, > .destroy = drm_connector_cleanup, > .force = dw_hdmi_connector_force, -- Jani Nikula, Intel Open Source Technology Center From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [PATCH] drm/bridge: dw-hdmi: fix EDID parsing Date: Thu, 09 Nov 2017 10:27:02 +0200 Message-ID: <87tvy3amcp.fsf@intel.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D03A6E158 for ; Thu, 9 Nov 2017 08:25:39 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Russell King , Andrzej Hajda , Archit Taneja , David Airlie , dri-devel@lists.freedesktop.org, Laurent Pinchart Cc: =?utf-8?Q?Lu=C3=ADs?= Mendes , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCAwNyBOb3YgMjAxNywgUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9y Zy51az4gd3JvdGU6Cj4gUGFyc2luZyB0aGUgRURJRCBmb3IgSERNSSBhbmQgYXVkaW8gaW5mb3Jt YXRpb24gaW4gdGhlIGdldF9tb2RlcygpCj4gY2FsbGJhY2sgaXMgaW5jb3JyZWN0IC0gdGhpcyBv bmx5IHBhcnNlcyB0aGUgRURJRCByZWFkIGZyb20gdGhlCj4gY29ubmVjdG9yLCBub3QgYW55IG92 ZXJyaWRlIG9yIGZpcm13YXJlIHByb3ZpZGVkIEVESUQuCj4KPiBUaGUgY29ycmVjdCBwbGFjZSB0 byBwYXJzZSB0aGUgRURJRCBmb3IgdGhlc2UgcGFyYW1ldGVycyBpcyB0aGUKPiBmaWxsX21vZGVz KCkgY2FsbGJhY2ssIGFmdGVyIHdlJ3ZlIGNhbGxlZCB0aGUgaGVscGVyLiAgTW92ZSB0aGUgcGFy c2luZwo+IHRoZXJlLiAgVGhpcyBjYXVzZWQgcHJvYmxlbXMgZm9yIEx1w61zIE1lbmRlcy4KPgo+ IENjOiA8c3RhYmxlQHZnZXIua2VybmVsLm9yZz4KPiBSZXBvcnRlZC1ieTogTHXDrXMgTWVuZGVz IDxsdWlzLnAubWVuZGVzQGdtYWlsLmNvbT4KPiBUZXN0ZWQtYnk6IEx1w61zIE1lbmRlcyA8bHVp cy5wLm1lbmRlc0BnbWFpbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsr a2VybmVsQGFybWxpbnV4Lm9yZy51az4KCklzIHRoaXMgc3RpbGwgbmVlZGVkIGFmdGVyIDUzZmQ0 MGE5MGYzYyAoImRybTogaGFuZGxlIG92ZXJyaWRlIGFuZApmaXJtd2FyZSBFRElEIGF0IGRybV9k b19nZXRfZWRpZCgpIGxldmVsIikgdGhhdCBpcyBoZWFkZWQgZm9yIHY0LjE1PyBJJ20KdGhpbmtp bmcgdGhpcyBtaWdodCBiZSBhcHBsaWNhYmxlIG9ubHkgZm9yIGN1cnJlbnQgTGludXMgbWFzdGVy IGFuZApzdGFibGUuCgpCUiwKSmFuaS4KCgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdl L3N5bm9wc3lzL2R3LWhkbWkuYyB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPiAg MSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1oZG1pLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWhkbWkuYwo+IGluZGV4IDlmZTQwN2Y0OTk4 Ni4uMjUxNmExYzE4YTEwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lu b3BzeXMvZHctaGRtaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9k dy1oZG1pLmMKPiBAQCAtMTkwNSwxMCArMTkwNSw3IEBAIHN0YXRpYyBpbnQgZHdfaGRtaV9jb25u ZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gIAkJZGV2 X2RiZyhoZG1pLT5kZXYsICJnb3QgZWRpZDogd2lkdGhbJWRdIHggaGVpZ2h0WyVkXVxuIiwKPiAg CQkJZWRpZC0+d2lkdGhfY20sIGVkaWQtPmhlaWdodF9jbSk7Cj4gIAo+IC0JCWhkbWktPnNpbmtf aXNfaGRtaSA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOwo+IC0JCWhkbWktPnNpbmtf aGFzX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwo+ICAJCWRybV9tb2Rl X2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uZWN0b3IsIGVkaWQpOwo+IC0JCWNl Y19ub3RpZmllcl9zZXRfcGh5c19hZGRyX2Zyb21fZWRpZChoZG1pLT5jZWNfbm90aWZpZXIsIGVk aWQpOwo+ICAJCXJldCA9IGRybV9hZGRfZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOwo+ICAJ CS8qIFN0b3JlIHRoZSBFTEQgKi8KPiAgCQlkcm1fZWRpZF90b19lbGQoY29ubmVjdG9yLCBlZGlk KTsKPiBAQCAtMTkyMCw2ICsxOTE3LDI5IEBAIHN0YXRpYyBpbnQgZHdfaGRtaV9jb25uZWN0b3Jf Z2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gIAlyZXR1cm4gcmV0 Owo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGR3X2hkbWlfY29ubmVjdG9yX2ZpbGxfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiArCQkJCQl1aW50MzJfdCBtYXhYLCB1aW50 MzJfdCBtYXhZKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfaGRtaSAqaGRtaSA9IGNvbnRhaW5lcl9vZihj b25uZWN0b3IsIHN0cnVjdCBkd19oZG1pLAo+ICsJCQkJCSAgICBjb25uZWN0b3IpOwo+ICsJaW50 IHJldDsKPiArCj4gKwlyZXQgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9k ZXMoY29ubmVjdG9yLCBtYXhYLCBtYXhZKTsKPiArCj4gKwlpZiAoY29ubmVjdG9yLT5lZGlkX2Js b2JfcHRyKSB7Cj4gKwkJc3RydWN0IGVkaWQgKmVkaWQgPSAodm9pZCAqKWNvbm5lY3Rvci0+ZWRp ZF9ibG9iX3B0ci0+ZGF0YTsKPiArCj4gKwkJaGRtaS0+c2lua19pc19oZG1pID0gZHJtX2RldGVj dF9oZG1pX21vbml0b3IoZWRpZCk7Cj4gKwkJaGRtaS0+c2lua19oYXNfYXVkaW8gPSBkcm1fZGV0 ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7Cj4gKwkJY2VjX25vdGlmaWVyX3NldF9waHlzX2FkZHJf ZnJvbV9lZGlkKGhkbWktPmNlY19ub3RpZmllciwgZWRpZCk7Cj4gKwl9IGVsc2Ugewo+ICsJCWhk bWktPnNpbmtfaXNfaGRtaSA9IGZhbHNlOwo+ICsJCWhkbWktPnNpbmtfaGFzX2F1ZGlvID0gZmFs c2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQgZHdf aGRtaV9jb25uZWN0b3JfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAg ewo+ICAJc3RydWN0IGR3X2hkbWkgKmhkbWkgPSBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1 Y3QgZHdfaGRtaSwKPiBAQCAtMTkzMyw3ICsxOTUzLDcgQEAgc3RhdGljIHZvaWQgZHdfaGRtaV9j b25uZWN0b3JfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiAgfQo+ICAK PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGR3X2hkbWlfY29ubmVj dG9yX2Z1bmNzID0gewo+IC0JLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9j b25uZWN0b3JfbW9kZXMsCj4gKwkuZmlsbF9tb2RlcyA9IGR3X2hkbWlfY29ubmVjdG9yX2ZpbGxf bW9kZXMsCj4gIAkuZGV0ZWN0ID0gZHdfaGRtaV9jb25uZWN0b3JfZGV0ZWN0LAo+ICAJLmRlc3Ry b3kgPSBkcm1fY29ubmVjdG9yX2NsZWFudXAsCj4gIAkuZm9yY2UgPSBkd19oZG1pX2Nvbm5lY3Rv cl9mb3JjZSwKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBD ZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==