From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Date: Wed, 27 May 2015 12:43:08 +0200 Message-ID: <20150527104308.GA8341@phenom.ffwll.local> References: <20150509102501.GO2067@n2100.arm.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline 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 Cc: Fabio Estevam , alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, Jaroslav Kysela , Mark Brown , Yakir Yang , linux-arm-kernel@lists.infradead.org List-Id: alsa-devel@alsa-project.org T24gU2F0LCBNYXkgMDksIDIwMTUgYXQgMTE6MjY6NTdBTSArMDEwMCwgUnVzc2VsbCBLaW5nIHdy b3RlOgo+IFBhcnNlIHRoZSBFTEQgKEVESUQgbGlrZSBkYXRhKSBzdG9yZWQgZnJvbSB0aGUgSERN SSBkcml2ZXIgdG8gcmVzdHJpY3QKPiB0aGUgc2FtcGxlIHJhdGVzIGFuZCBjaGFubmVscyB3aGlj aCBhcmUgYXZhaWxhYmxlIHRvIEFMU0EuICBUaGlzIGNhdXNlcwo+IHRoZSBBTFNBIGRldmljZSB0 byByZWZsZWN0IHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIG92ZXJhbGwgYXVkaW8gcGF0aCwKPiBu b3QganVzdCB3aGF0IGlzIHN1cHBvcnRlZCBhdCB0aGUgSERNSSBzb3VyY2UgaW50ZXJmYWNlIGxl dmVsLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm0ubGlu dXgub3JnLnVrPgoKSSBjb21wbGV0ZWx5IG1pc3NlZCB0aGUgbmV3IGVsZCBoZWxwZXJzIGluIHRo aXMgc2VyaWVzLCBzbyBmYWlybHkgbGF0ZQp3aXRoIGEgZmV3IHF1ZXN0aW9ucyBoZXJlLgoKSW4g eDg2L2Rlc2t0b3AgZ3B1cyB3ZSBwYXNzIGFyb3VuZCB0aGUgZWxkIGluIGh3LCBhbmQgdGhlcmUn cyBhbiBpbnRlcnJ1cHQKb24gdGhlIHNuZCBzaWRlIGV2ZXJ5IHRpbWUgdGhhdCBtYXRlcmlhbGx5 IGNoYW5nZXMuIFNhbWUgZ29lcyBmb3Igb3RoZXIKc3RhdGUgY2hhbmdlcyBsaWtlIHRoZSBkaXNw bGF5IHBpcGUgZ2V0dGluZyBsaXQgdXAvZGlzYWJsZWQgYWdhaW4uCgpIb3cgaXMgaG90cGx1ZyBo YW5kbGluZyBkb25lIGhlcmU/IFlvdSB1cGRhdGUgdGhlIGVsZCBpbiBnZXRfbW9kZXMsIGJ1dCBJ CmRvbid0IHNlZSBhbnkgbm90aWZpY2F0aW9uIGZyb20gaGRtaS0+YXVkaW8gKGl0IG9ubHkgc2Vl bXMgdG8gZ2V0IHVwZGF0ZWQKYXQgb3BlbiB0aW1lLCBubyBpZGVhIHdoZXRoZXIgdGhhdCdzIGVu b3VnaCkuIEFuZCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYQpwb3RlbnRpYWwgdXNlLWFmdGVyLWZy ZWUgd2hlbiB0aGUgZHJtIHNpZGUgdXBkYXRlcyB0aGUgZWxkIGFuZCBmcmVlcyB0aGUKb2xkIG9u ZSwgd2hpbGUgdGhlIHNuZCBzaWRlIHRyaWVzIHRvIGFjY2VzcyB0aGlzLgoKSnVzdCBjdXJpb3Vz IHF1ZXN0aW9ucyByZWFsbHksIEkgcHJvYmFibHkgZG9uJ3QgdW5kZXJzdGFuZCB3aGF0J3MgZXhh Y3RseQpnb2luZyBvbi4gQnV0IEkgZG8gdGhpbmsgdGhhdCB3ZSBuZWVkIGEgbW9yZSBmb3JtYWwg d2F5IGZvciBkcm0vc25kIHRvCnRhbGsgdG8gZWFjaCBhbm90aGVyIChpOTE1IGlzIGdyb3dpbmcg cXVpdGUgYSBmZXcgaGFpcnkgdGhpbmdzIGluIHRoYXQKYXJlYSBvdXRzaWRlIG9mIGVsZCBhdG0p LiBQcm9ibGVtcyB3ZSBoYXZlIGFyZSBhcm91bmQgc2hhcmVkIHBvd2VyIHdlbGxzCmFuZCBjbG9j a3MgKHg4NiBkb2Vzbid0IGhlbHAgaGVyZSB3aXRob3V0IGFsbCB0aGUgZHQgZ29vZG5lc3MpLiBC dXQKdGhlcmUncyBhbHNvIHN0dWZmIGxpa2UgZmlndXJpbmcgb3V0IHRoZSByaWdodCBkaXZpZGVy cyBmb3IgYSBnaXZlbgphdWRpby92aWRlbyBjbG9jay4gZWxkIGFuZCBob3RwbHVnIGlzIHN0aWxs IGRvbmUgaW4gaHcsIGJ1dCBJJ3ZlIGhlYXJkCm5vaXNlcyB0aGF0IHdlIG5lZWQgdG8gaGF2ZSBh IHN3IGFwcHJvYWNoIHRvbyBvbiBzb21lIHBsYXRmb3JtcyBhdCBsZWFzdC4KCkNoZWVycywgRGFu aWVsCj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAgICAgICAgICB8 IDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWktYWhiLWF1ZGlvLmMgfCA2ICsr KysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWktYWhiLWF1ZGlvLmggfCAxICsK PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMgICAgICAgICAgIHwgMyArKysKPiAg NCBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZp Zwo+IGluZGV4IDU2ZWQzNWZlMDczNC4uMjA0ODYxYmZiODY3IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv S2NvbmZpZwo+IEBAIC03LDYgKzcsNyBAQCBjb25maWcgRFJNX0RXX0hETUlfQUhCX0FVRElPCj4g IAl0cmlzdGF0ZSAiU3lub3BzaXMgRGVzaWdud2FyZSBBSEIgQXVkaW8gaW50ZXJmYWNlIgo+ICAJ ZGVwZW5kcyBvbiBEUk1fRFdfSERNSSAmJiBTTkQKPiAgCXNlbGVjdCBTTkRfUENNCj4gKwlzZWxl Y3QgU05EX1BDTV9FTEQKPiAgCXNlbGVjdCBTTkRfUENNX0lFQzk1OAo+ICAJaGVscAo+ICAJICBT dXBwb3J0IHRoZSBBSEIgQXVkaW8gaW50ZXJmYWNlIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFN5bm9w c2lzCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfaGRtaS1haGItYXVk aW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHdfaGRtaS1haGItYXVkaW8uYwo+IGluZGV4 IGU5OGMyOTEyNjhmNC4uMmJiNjhiZGEzY2IwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvZHdfaGRtaS1haGItYXVkaW8uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvZHdfaGRtaS1haGItYXVkaW8uYwo+IEBAIC0xMiwxMSArMTIsMTMgQEAKPiAgI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g ICNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X2hkbWkuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZWRp ZC5oPgo+ICAKPiAgI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+Cj4gICNpbmNsdWRlIDxzb3Vu ZC9jb3JlLmg+Cj4gICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Cj4gICNpbmNsdWRlIDxzb3Vu ZC9wY20uaD4KPiArI2luY2x1ZGUgPHNvdW5kL3BjbV9kcm1fZWxkLmg+Cj4gICNpbmNsdWRlIDxz b3VuZC9wY21faWVjOTU4Lmg+Cj4gIAo+ICAjaW5jbHVkZSAiZHdfaGRtaS1haGItYXVkaW8uaCIK PiBAQCAtMjg0LDYgKzI4NiwxMCBAQCBzdGF0aWMgaW50IGR3X2hkbWlfb3BlbihzdHJ1Y3Qgc25k X3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKPiAgCj4gIAlydW50aW1lLT5odyA9IGR3X2hkbWlf aHc7Cj4gIAo+ICsJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X2VsZChydW50aW1lLCBkdy0+ ZGF0YS5lbGQpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAlyZXQg PSBzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHJ1bnRpbWUpOwo+ICAJaWYgKHJldCA8IDApCj4gIAkJ cmV0dXJuIHJldDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1p LWFoYi1hdWRpby5oIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLWFoYi1hdWRpby5o Cj4gaW5kZXggMWU4NDAxMThkOTBhLi45MWY2MzFiZWVjYzcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLWFoYi1hdWRpby5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9kd19oZG1pLWFoYi1hdWRpby5oCj4gQEAgLTgsNiArOCw3IEBAIHN0cnVjdCBk d19oZG1pX2F1ZGlvX2RhdGEgewo+ICAJdm9pZCBfX2lvbWVtICpiYXNlOwo+ICAJaW50IGlycTsK PiAgCXN0cnVjdCBkd19oZG1pICpoZG1pOwo+ICsJdTggKmVsZDsKPiAgfTsKPiAgCj4gICNlbmRp Zgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWkuYyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvZHdfaGRtaS5jCj4gaW5kZXggMWNiNDI3OTM1ZWQyLi5kYzBhZWQx ODAxOWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kd19oZG1pLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2R3X2hkbWkuYwo+IEBAIC0xNDQ2LDYgKzE0NDYs OCBAQCBzdGF0aWMgaW50IGR3X2hkbWlfY29ubmVjdG9yX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+ICAKPiAgCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2Vk aWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKPiAgCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9k ZXMoY29ubmVjdG9yLCBlZGlkKTsKPiArCQkvKiBTdG9yZSB0aGUgRUxEICovCj4gKwkJZHJtX2Vk aWRfdG9fZWxkKGNvbm5lY3RvciwgZWRpZCk7Cj4gIAkJa2ZyZWUoZWRpZCk7Cj4gIAl9IGVsc2Ug ewo+ICAJCWRldl9kYmcoaGRtaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCBlZGlkXG4iKTsKPiBAQCAt MTcyNSw2ICsxNzI3LDcgQEAgaW50IGR3X2hkbWlfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2UgKm1hc3RlciwKPiAgCQlhdWRpby5iYXNlID0gaGRtaS0+cmVnczsKPiAgCQlh dWRpby5pcnEgPSBpcnE7Cj4gIAkJYXVkaW8uaGRtaSA9IGhkbWk7Cj4gKwkJYXVkaW8uZWxkID0g aGRtaS0+Y29ubmVjdG9yLmVsZDsKPiAgCj4gIAkJcGRldmluZm8ubmFtZSA9ICJkdy1oZG1pLWFo Yi1hdWRpbyI7Cj4gIAkJcGRldmluZm8uZGF0YSA9ICZhdWRpbzsKPiAtLSAKPiAxLjguMy4xCj4g Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0t IApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRw Oi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel@ffwll.ch (Daniel Vetter) Date: Wed, 27 May 2015 12:43:08 +0200 Subject: [PATCH 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver In-Reply-To: References: <20150509102501.GO2067@n2100.arm.linux.org.uk> Message-ID: <20150527104308.GA8341@phenom.ffwll.local> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Sat, May 09, 2015 at 11:26:57AM +0100, Russell King wrote: > Parse the ELD (EDID like data) stored from the HDMI driver to restrict > the sample rates and channels which are available to ALSA. This causes > the ALSA device to reflect the capabilities of the overall audio path, > not just what is supported at the HDMI source interface level. > > Signed-off-by: Russell King I completely missed the new eld helpers in this series, so fairly late with a few questions here. In x86/desktop gpus we pass around the eld in hw, and there's an interrupt on the snd side every time that materially changes. Same goes for other state changes like the display pipe getting lit up/disabled again. How is hotplug handling done here? You update the eld in get_modes, but I don't see any notification from hdmi->audio (it only seems to get updated at open time, no idea whether that's enough). And it looks like there's a potential use-after-free when the drm side updates the eld and frees the old one, while the snd side tries to access this. Just curious questions really, I probably don't understand what's exactly going on. But I do think that we need a more formal way for drm/snd to talk to each another (i915 is growing quite a few hairy things in that area outside of eld atm). Problems we have are around shared power wells and clocks (x86 doesn't help here without all the dt goodness). But there's also stuff like figuring out the right dividers for a given audio/video clock. eld and hotplug is still done in hw, but I've heard noises that we need to have a sw approach too on some platforms at least. Cheers, Daniel > --- > drivers/gpu/drm/bridge/Kconfig | 1 + > drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.c | 6 ++++++ > drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.h | 1 + > drivers/gpu/drm/bridge/dw_hdmi.c | 3 +++ > 4 files changed, 11 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig > index 56ed35fe0734..204861bfb867 100644 > --- a/drivers/gpu/drm/bridge/Kconfig > +++ b/drivers/gpu/drm/bridge/Kconfig > @@ -7,6 +7,7 @@ config DRM_DW_HDMI_AHB_AUDIO > tristate "Synopsis Designware AHB Audio interface" > depends on DRM_DW_HDMI && SND > select SND_PCM > + select SND_PCM_ELD > select SND_PCM_IEC958 > help > Support the AHB Audio interface which is part of the Synopsis > diff --git a/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.c b/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.c > index e98c291268f4..2bb68bda3cb0 100644 > --- a/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.c > +++ b/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.c > @@ -12,11 +12,13 @@ > #include > #include > #include > +#include > > #include > #include > #include > #include > +#include > #include > > #include "dw_hdmi-ahb-audio.h" > @@ -284,6 +286,10 @@ static int dw_hdmi_open(struct snd_pcm_substream *substream) > > runtime->hw = dw_hdmi_hw; > > + ret = snd_pcm_hw_constraint_eld(runtime, dw->data.eld); > + if (ret < 0) > + return ret; > + > ret = snd_pcm_limit_hw_rates(runtime); > if (ret < 0) > return ret; > diff --git a/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.h b/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.h > index 1e840118d90a..91f631beecc7 100644 > --- a/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.h > +++ b/drivers/gpu/drm/bridge/dw_hdmi-ahb-audio.h > @@ -8,6 +8,7 @@ struct dw_hdmi_audio_data { > void __iomem *base; > int irq; > struct dw_hdmi *hdmi; > + u8 *eld; > }; > > #endif > diff --git a/drivers/gpu/drm/bridge/dw_hdmi.c b/drivers/gpu/drm/bridge/dw_hdmi.c > index 1cb427935ed2..dc0aed18019d 100644 > --- a/drivers/gpu/drm/bridge/dw_hdmi.c > +++ b/drivers/gpu/drm/bridge/dw_hdmi.c > @@ -1446,6 +1446,8 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector) > > drm_mode_connector_update_edid_property(connector, edid); > ret = drm_add_edid_modes(connector, edid); > + /* Store the ELD */ > + drm_edid_to_eld(connector, edid); > kfree(edid); > } else { > dev_dbg(hdmi->dev, "failed to get edid\n"); > @@ -1725,6 +1727,7 @@ int dw_hdmi_bind(struct device *dev, struct device *master, > audio.base = hdmi->regs; > audio.irq = irq; > audio.hdmi = hdmi; > + audio.eld = hdmi->connector.eld; > > pdevinfo.name = "dw-hdmi-ahb-audio"; > pdevinfo.data = &audio; > -- > 1.8.3.1 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch