We've had many silent hangs where the kernel would look like it just
stalled due to the access to one of the HDMI registers while the
controller was disabled.

Add a warning if we're about to do that so that it's at least not silent
anymore.

Signed-off-by: Maxime Ripard <max...@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h 
b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
index 19d2fdc446bc..99dde6e06a37 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
@@ -1,6 +1,8 @@
 #ifndef _VC4_HDMI_REGS_H_
 #define _VC4_HDMI_REGS_H_
 
+#include <linux/pm_runtime.h>
+
 #include "vc4_hdmi.h"
 
 #define VC4_HDMI_PACKET_STRIDE                 0x24
@@ -412,6 +414,8 @@ static inline u32 vc4_hdmi_read(struct vc4_hdmi *hdmi,
        const struct vc4_hdmi_variant *variant = hdmi->variant;
        void __iomem *base;
 
+       WARN_ON(!pm_runtime_active(&hdmi->pdev->dev));
+
        if (reg >= variant->num_registers) {
                dev_warn(&hdmi->pdev->dev,
                         "Invalid register ID %u\n", reg);
@@ -438,6 +442,8 @@ static inline void vc4_hdmi_write(struct vc4_hdmi *hdmi,
        const struct vc4_hdmi_variant *variant = hdmi->variant;
        void __iomem *base;
 
+       WARN_ON(!pm_runtime_active(&hdmi->pdev->dev));
+
        if (reg >= variant->num_registers) {
                dev_warn(&hdmi->pdev->dev,
                         "Invalid register ID %u\n", reg);
-- 
2.31.1

Reply via email to