drm/vc4: hdmi: Skip writes to disabled packet RAM
authorDom Cobley <popcornmix@gmail.com>
Mon, 13 Jun 2022 14:47:52 +0000 (16:47 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Tue, 28 Jun 2022 12:56:01 +0000 (14:56 +0200)
This path actually occurs when audio is started during a hdmi mode set.
As the data will be written by vc4_hdmi_set_infoframes when packet RAM
is enabled again, don't treat as an error

Signed-off-by: Dom Cobley <popcornmix@gmail.com>
Link: https://lore.kernel.org/r/20220613144800.326124-26-maxime@cerno.tech
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
drivers/gpu/drm/vc4/vc4_hdmi.c
drivers/gpu/drm/vc4/vc4_hdmi.h

index 900ebfe78248abeb7301813986030e66c50e44ce..d5aa70a1cd9d1234d4efe4626b1c70f83bb27c5a 100644 (file)
@@ -602,7 +602,9 @@ static void vc4_hdmi_set_audio_infoframe(struct drm_encoder *encoder)
        union hdmi_infoframe frame;
 
        memcpy(&frame.audio, audio, sizeof(*audio));
-       vc4_hdmi_write_infoframe(encoder, &frame);
+
+       if (vc4_hdmi->packet_ram_enabled)
+               vc4_hdmi_write_infoframe(encoder, &frame);
 }
 
 static void vc4_hdmi_set_hdr_infoframe(struct drm_encoder *encoder)
@@ -742,6 +744,8 @@ static void vc4_hdmi_encoder_post_crtc_disable(struct drm_encoder *encoder,
 
        mutex_lock(&vc4_hdmi->mutex);
 
+       vc4_hdmi->packet_ram_enabled = false;
+
        spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
 
        HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0);
@@ -1352,6 +1356,7 @@ static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
                           VC4_HDMI_RAM_PACKET_ENABLE);
 
                spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
+               vc4_hdmi->packet_ram_enabled = true;
 
                vc4_hdmi_set_infoframes(encoder);
        }
index 1159b2992fb1e0fd26abda70000676d2461c359b..c3ed2b07df235527992f51e66511366855c94924 100644 (file)
@@ -212,6 +212,12 @@ struct vc4_hdmi {
         */
        struct drm_display_mode saved_adjusted_mode;
 
+       /**
+        * @packet_ram_enabled: Is the HDMI controller packet RAM currently
+        * on? Protected by @mutex.
+        */
+       bool packet_ram_enabled;
+
        /**
         * @scdc_enabled: Is the HDMI controller currently running with
         * the scrambler on? Protected by @mutex.