From: sashiko-bot@kernel.org
To: "Daniel Golle" <daniel@makrotopia.org>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH v2 1/2] drm/bridge: it6505: Add audio support
Date: Mon, 20 Jul 2026 16:01:18 +0000 [thread overview]
Message-ID: <20260720160118.9A4BA1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <47c469b0e62513997236b8c4f6779159c1998143.1784561622.git.daniel@makrotopia.org>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
New issues:
- [High] Concurrent execution of audio hardware configuration sequences without serialization.
- [High] The AUDIO_FIFO_ERROR threaded IRQ blindly re-enables the audio stream, circumventing ALSA's requested mute state.
- [Low] The debug log for unsupported channel counts prints the old/driver-configured channel count instead of the requested invalid count.
Pre-existing issues:
- [High] Missing cancellation for pre-existing workqueues in `it6505_i2c_remove` leads to Use-After-Free.
--
--- Patch [1]: [PATCH v2 1/2] drm/bridge: it6505: Add audio support ---
commit 368cb1a1072339bd0c22621289d60b4bd60b3bc6
Author: Jiaxin Yu <jiaxin.yu@mediatek.com>
drm/bridge: it6505: Add audio support
This commit adds audio support for the it6505 by bridging to the hdmi-codec
and registering an "hdmi-audio-codec" platform device. It wires up the
audio setup and shutdown helpers via hdmi_codec_ops.
Link: https://lore.kernel.org/all/20230730180803.22570-4-jiaxin.yu@mediatek.com/
> diff --git a/drivers/gpu/drm/bridge/ite-it6505.c b/drivers/gpu/drm/bridge/ite-it6505.c
> index 8ecb43611dba8..d84441926e8e0 100644
> --- a/drivers/gpu/drm/bridge/ite-it6505.c
> +++ b/drivers/gpu/drm/bridge/ite-it6505.c
[ ... ]
> @@ -2974,9 +2968,9 @@ static void __maybe_unused it6505_delayed_audio(struct work_struct *work)
> it6505_enable_audio(it6505);
> }
>
> -static int __maybe_unused it6505_audio_setup_hw_params(struct it6505 *it6505,
> - struct hdmi_codec_params
> - *params)
> +static int it6505_audio_setup_hw_params(struct it6505 *it6505,
> + struct hdmi_codec_params
> + *params)
> {
[Severity: Low]
Does the error logging in this function print the wrong variable?
When an unsupported channel count is passed in params, the code errors out:
if (params->cea.channels <= 1 || params->cea.channels > 8) {
DRM_DEV_DEBUG_DRIVER(dev, "channel number: %d not support",
it6505->audio.channel_count);
return -EINVAL;
}
Should this log the invalid requested channel count (params->cea.channels)
instead of the previously configured or uninitialized driver state
(it6505->audio.channel_count)?
> struct device *dev = it6505->dev;
> int i = 0;
[ ... ]
> @@ -3031,18 +3025,52 @@ static int __maybe_unused it6505_audio_setup_hw_params(struct it6505 *it6505,
> +static int it6505_audio_mute(struct device *dev, void *data,
> + bool enable, int direction)
> +{
> + struct it6505 *it6505 = dev_get_drvdata(dev);
> +
> + DRM_DEV_DEBUG_DRIVER(dev, "mute: %d", enable);
> +
> + /*
> + * Some DP-to-HDMI dongles get into a bad state if the InfoFrame is
> + * sent without audio data, so only enable it6505's audio once the
> + * stream is unmuted (i.e. actually playing).
> + */
> + if (enable) {
> + cancel_delayed_work_sync(&it6505->delayed_audio);
> + if (it6505->powered)
> + it6505_disable_audio(it6505);
[Severity: High]
The commit message asks for input on whether a lock is warranted since
it6505_enable_audio() and it6505_disable_audio() can run concurrently.
Could this lack of serialization leave the hardware in a corrupted state?
These functions perform multi-step, non-atomic sequences of register writes,
such as toggling AUDIO_RESET and EN_AUD_MUTE. If it6505_audio_mute() calls
it6505_disable_audio() asynchronously while the IRQ handler or delayed work
is calling it6505_enable_audio(), they could interleave and break audio
playback.
[Severity: High]
Does the AUDIO_FIFO_ERROR IRQ handler respect the mute state requested here?
If the stream is muted by ALSA, it6505_audio_mute() disables audio. However,
if an AUDIO_FIFO_ERROR IRQ fires, it6505_irq_audio_fifo_error() appears to
blindly restart the audio stream:
drivers/gpu/drm/bridge/ite-it6505.c:it6505_irq_audio_fifo_error() {
...
if (it6505_audio_input(it6505))
it6505_enable_audio(it6505);
}
Could this bypass the software mute state and send InfoFrames without audio
data, potentially triggering the DP-to-HDMI dongle failure this
delayed-enable workaround was meant to prevent?
> + } else {
> + queue_delayed_work(system_wq, &it6505->delayed_audio,
> + msecs_to_jiffies(180));
> + }
> +
> + return 0;
> +}
> +
[ ... ]
> @@ -3644,6 +3711,8 @@ static void it6505_i2c_remove(struct i2c_client *client)
> {
> struct it6505 *it6505 = i2c_get_clientdata(client);
>
> + platform_device_unregister(it6505->audio_pdev);
> + cancel_delayed_work_sync(&it6505->delayed_audio);
> drm_bridge_remove(&it6505->bridge);
> drm_dp_aux_unregister(&it6505->aux);
> it6505_debugfs_remove(it6505);
[Severity: High]
This is a pre-existing issue, but is it possible for other background
works to trigger a use-after-free here?
it6505_i2c_remove() cancels the newly added delayed_audio work, but
struct it6505 is allocated via devm_drm_bridge_alloc(). Once this function
returns, devres will immediately free the it6505 memory.
If any of the previously existing works (link_works, hdcp_wait_ksv_list, or
hdcp_work) are pending or executing, could they dereference the freed struct
it6505 memory?
--
Sashiko AI review · https://sashiko.dev/#/patchset/cover.1784561622.git.daniel@makrotopia.org?part=1
next prev parent reply other threads:[~2026-07-20 16:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 15:42 [PATCH v2 0/2] drm/bridge: it6505: DP audio support + shared-DAI hw_params fix Daniel Golle
2026-07-20 15:43 ` [PATCH v2 1/2] drm/bridge: it6505: Add audio support Daniel Golle
2026-07-20 16:01 ` sashiko-bot [this message]
2026-07-20 15:44 ` [PATCH v2 2/2] drm/bridge: it6505: Don't reject audio hw_params without an encoder Daniel Golle
2026-07-20 16:06 ` sashiko-bot
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=20260720160118.9A4BA1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=daniel@makrotopia.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=sashiko-reviews@lists.linux.dev \
/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: link
Be 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.