From: Daniel Vetter <daniel@ffwll.ch> To: Russell King <rmk+kernel@arm.linux.org.uk> Cc: Fabio Estevam <fabio.estevam@freescale.com>, alsa-devel@alsa-project.org, dri-devel@lists.freedesktop.org, Jaroslav Kysela <perex@perex.cz>, Mark Brown <broonie@kernel.org>, Yakir Yang <ykk@rock-chips.com>, linux-arm-kernel@lists.infradead.org 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 [thread overview] Message-ID: <20150527104308.GA8341@phenom.ffwll.local> (raw) In-Reply-To: <E1Yr1yD-0006lK-RC@rmk-PC.arm.linux.org.uk> 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 <rmk+kernel@arm.linux.org.uk> 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 <linux/module.h> > #include <linux/platform_device.h> > #include <drm/bridge/dw_hdmi.h> > +#include <drm/drm_edid.h> > > #include <sound/asoundef.h> > #include <sound/core.h> > #include <sound/initval.h> > #include <sound/pcm.h> > +#include <sound/pcm_drm_eld.h> > #include <sound/pcm_iec958.h> > > #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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: daniel@ffwll.ch (Daniel Vetter) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Date: Wed, 27 May 2015 12:43:08 +0200 [thread overview] Message-ID: <20150527104308.GA8341@phenom.ffwll.local> (raw) In-Reply-To: <E1Yr1yD-0006lK-RC@rmk-PC.arm.linux.org.uk> 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 <rmk+kernel@arm.linux.org.uk> 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 <linux/module.h> > #include <linux/platform_device.h> > #include <drm/bridge/dw_hdmi.h> > +#include <drm/drm_edid.h> > > #include <sound/asoundef.h> > #include <sound/core.h> > #include <sound/initval.h> > #include <sound/pcm.h> > +#include <sound/pcm_drm_eld.h> > #include <sound/pcm_iec958.h> > > #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
next prev parent reply other threads:[~2015-05-27 10:43 UTC|newest] Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-04-02 9:20 [RFC v2 0/13] dw_hdmi cleanups, audio preparation, helpers and ahb audio support Russell King - ARM Linux 2015-04-02 9:20 ` Russell King - ARM Linux 2015-04-02 9:21 ` [PATCH RFC v2 01/13] drm: imx/dw_hdmi: move phy comments Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 02/13] drm: bridge/dw_hdmi: clean up phy configuration Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 03/13] drm: bridge/dw_hdmi: clean up hdmi_set_clk_regenerator() Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 04/13] drm: bridge/dw_hdmi: use drm_hdmi_avi_infoframe_from_display_mode() Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 05/13] drm: bridge/dw_hdmi: simplify hdmi_config_AVI() a little Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 06/13] drm: bridge/dw_hdmi: remove mhsyncpolarity/mvsyncpolarity/minterlaced Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 07/13] drm: bridge/dw_hdmi: introduce interface to setting sample rate Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:21 ` [PATCH RFC v2 08/13] drm: bridge/dw_hdmi: introduce interfaces to enable and disable audio Russell King 2015-04-02 9:21 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 09/13] drm/edid: add function to help find SADs Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 10/13] sound/core: add DRM ELD helper Russell King 2015-04-02 9:22 ` Russell King 2015-04-05 15:57 ` Takashi Iwai 2015-04-05 15:57 ` Takashi Iwai 2015-04-05 16:20 ` Russell King - ARM Linux 2015-04-05 16:20 ` Russell King - ARM Linux 2015-04-05 16:46 ` Takashi Iwai 2015-04-05 16:46 ` Takashi Iwai 2015-04-05 17:26 ` Russell King - ARM Linux 2015-04-05 17:26 ` Russell King - ARM Linux 2015-05-06 17:02 ` Anssi Hannula 2015-05-06 17:02 ` Anssi Hannula 2015-05-07 10:41 ` Russell King - ARM Linux 2015-05-07 10:41 ` Russell King - ARM Linux 2015-05-07 11:11 ` Lars-Peter Clausen 2015-05-07 11:11 ` [alsa-devel] " Lars-Peter Clausen 2015-05-08 10:56 ` Jyri Sarha 2015-05-08 10:56 ` Jyri Sarha 2015-05-08 11:42 ` Russell King - ARM Linux 2015-05-08 11:42 ` Russell King - ARM Linux 2015-05-05 22:35 ` Mark Brown 2015-05-05 22:35 ` Mark Brown 2015-05-06 8:58 ` Liam Girdwood 2015-05-06 8:58 ` [alsa-devel] " Liam Girdwood 2015-05-08 13:16 ` Jyri Sarha 2015-05-08 13:16 ` Jyri Sarha 2015-05-08 13:27 ` Russell King - ARM Linux 2015-05-08 13:27 ` Russell King - ARM Linux 2015-05-08 13:37 ` Jyri Sarha 2015-05-08 13:37 ` [alsa-devel] " Jyri Sarha 2015-04-02 9:22 ` [PATCH RFC v2 11/13] sound/core: add IEC958 channel status helper Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 12/13] drm: bridge/dw_hdmi-ahb-audio: add audio driver Russell King 2015-04-02 9:22 ` Russell King 2015-04-02 9:22 ` [PATCH RFC v2 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Russell King 2015-04-02 9:22 ` Russell King 2015-05-09 10:25 ` [PATCH v3 0/13] dw_hdmi cleanups, audio preparation, helpers and ahb audio support Russell King - ARM Linux 2015-05-09 10:25 ` Russell King - ARM Linux 2015-05-09 10:25 ` [PATCH 01/13] drm: imx/dw_hdmi: move phy comments Russell King 2015-05-09 10:25 ` Russell King 2015-05-09 10:26 ` [PATCH 02/13] drm: bridge/dw_hdmi: clean up phy configuration Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:19 ` Yakir 2015-05-22 15:19 ` Yakir 2015-05-09 10:26 ` [PATCH 03/13] drm: bridge/dw_hdmi: clean up hdmi_set_clk_regenerator() Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:22 ` Yakir 2015-05-22 15:22 ` Yakir 2015-05-09 10:26 ` [PATCH 04/13] drm: bridge/dw_hdmi: use drm_hdmi_avi_infoframe_from_display_mode() Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 05/13] drm: bridge/dw_hdmi: simplify hdmi_config_AVI() a little Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 06/13] drm: bridge/dw_hdmi: remove mhsyncpolarity/mvsyncpolarity/minterlaced Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 07/13] drm: bridge/dw_hdmi: introduce interface to setting sample rate Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:26 ` Yakir 2015-05-22 15:26 ` Yakir 2015-05-09 10:26 ` [PATCH 08/13] drm: bridge/dw_hdmi: introduce interfaces to enable and disable audio Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 15:28 ` Yakir 2015-05-22 15:28 ` Yakir 2015-05-09 10:26 ` [PATCH 09/13] drm/edid: add function to help find SADs Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 10:26 ` [PATCH 10/13] sound/core: add DRM ELD helper Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 12:20 ` [alsa-devel] " Mark Brown 2015-05-22 12:20 ` Mark Brown 2015-05-22 13:15 ` Russell King - ARM Linux 2015-05-22 13:15 ` Russell King - ARM Linux 2015-05-22 13:30 ` Takashi Iwai 2015-05-22 13:30 ` Takashi Iwai 2015-05-22 13:53 ` Russell King - ARM Linux 2015-05-22 13:53 ` Russell King - ARM Linux 2015-05-22 13:54 ` Takashi Iwai 2015-05-22 13:54 ` Takashi Iwai 2015-05-22 14:00 ` Russell King - ARM Linux 2015-05-22 14:00 ` Russell King - ARM Linux 2015-05-22 14:02 ` Takashi Iwai 2015-05-22 14:02 ` Takashi Iwai 2015-05-22 14:05 ` Takashi Iwai 2015-05-22 14:05 ` Takashi Iwai 2015-05-22 16:12 ` Russell King - ARM Linux 2015-05-22 16:12 ` Russell King - ARM Linux 2015-05-09 10:26 ` [PATCH 11/13] sound/core: add IEC958 channel status helper Russell King 2015-05-09 10:26 ` Russell King 2015-05-22 12:40 ` Mark Brown 2015-05-22 12:40 ` Mark Brown 2015-05-09 10:26 ` [PATCH 12/13] drm: bridge/dw_hdmi-ahb-audio: add audio driver Russell King 2015-05-09 10:26 ` Russell King 2015-05-09 16:49 ` [alsa-devel] " Anssi Hannula 2015-05-09 16:49 ` Anssi Hannula 2015-05-09 16:55 ` Russell King - ARM Linux 2015-05-09 16:55 ` Russell King - ARM Linux 2015-05-09 17:07 ` Anssi Hannula 2015-05-09 17:07 ` Anssi Hannula 2015-05-09 17:40 ` Russell King - ARM Linux 2015-05-09 17:40 ` Russell King - ARM Linux 2015-05-09 17:53 ` Russell King - ARM Linux 2015-05-09 17:53 ` Russell King - ARM Linux 2015-05-09 17:55 ` Anssi Hannula 2015-05-09 17:55 ` Anssi Hannula 2015-05-09 18:11 ` Russell King - ARM Linux 2015-05-09 18:11 ` Russell King - ARM Linux 2015-05-10 18:59 ` Anssi Hannula 2015-05-10 18:59 ` Anssi Hannula 2015-05-10 19:33 ` Russell King - ARM Linux 2015-05-10 19:33 ` Russell King - ARM Linux 2015-05-10 20:47 ` Anssi Hannula 2015-05-10 20:47 ` Anssi Hannula 2015-05-11 15:58 ` Mark Brown 2015-05-11 15:58 ` [alsa-devel] " Mark Brown 2015-05-09 10:26 ` [PATCH 13/13] drm: bridge/dw_hdmi-ahb-audio: parse ELD from HDMI driver Russell King 2015-05-09 10:26 ` Russell King 2015-05-27 10:43 ` Daniel Vetter [this message] 2015-05-27 10:43 ` Daniel Vetter 2015-05-27 11:43 ` Mark Brown 2015-05-27 11:43 ` Mark Brown 2015-05-27 17:31 ` Russell King - ARM Linux 2015-05-27 17:31 ` Russell King - ARM Linux 2015-05-27 21:29 ` Daniel Vetter 2015-05-27 21:29 ` Daniel Vetter 2015-05-27 21:44 ` Russell King - ARM Linux 2015-05-27 21:44 ` Russell King - ARM Linux 2015-05-28 6:43 ` Daniel Vetter 2015-05-28 6:43 ` Daniel Vetter 2015-05-28 4:56 ` [alsa-devel] " Takashi Iwai 2015-05-28 4:56 ` Takashi Iwai
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20150527104308.GA8341@phenom.ffwll.local \ --to=daniel@ffwll.ch \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=fabio.estevam@freescale.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=perex@perex.cz \ --cc=rmk+kernel@arm.linux.org.uk \ --cc=ykk@rock-chips.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.