lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 0393/1095] drm/vc4: hdmi: Clear unused infoframe packet RAM registers
    Date
    From: Dom Cobley <popcornmix@gmail.com>

    [ Upstream commit b6079d1578dc4b4b8050d613a5449a63def7d1dd ]

    Using a hdmi analyser the bytes in packet ram
    registers beyond the length were visible in the
    infoframes and it flagged the checksum as invalid.

    Zeroing unused words of packet RAM avoids this

    Fixes: 21317b3fba54 ("drm/vc4: Set up the AVI and SPD infoframes.")
    Signed-off-by: Dom Cobley <popcornmix@gmail.com>
    Link: https://lore.kernel.org/r/20220613144800.326124-20-maxime@cerno.tech
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/vc4/vc4_hdmi.c | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
    index 2ff53482d5d1..0fe04b1f9782 100644
    --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
    +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
    @@ -439,9 +439,11 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder,
    const struct vc4_hdmi_register *ram_packet_start =
    &vc4_hdmi->variant->registers[HDMI_RAM_PACKET_START];
    u32 packet_reg = ram_packet_start->offset + VC4_HDMI_PACKET_STRIDE * packet_id;
    + u32 packet_reg_next = ram_packet_start->offset +
    + VC4_HDMI_PACKET_STRIDE * (packet_id + 1);
    void __iomem *base = __vc4_hdmi_get_field_base(vc4_hdmi,
    ram_packet_start->reg);
    - uint8_t buffer[VC4_HDMI_PACKET_STRIDE];
    + uint8_t buffer[VC4_HDMI_PACKET_STRIDE] = {};
    unsigned long flags;
    ssize_t len, i;
    int ret;
    @@ -477,6 +479,13 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder,
    packet_reg += 4;
    }

    + /*
    + * clear remainder of packet ram as it's included in the
    + * infoframe and triggers a checksum error on hdmi analyser
    + */
    + for (; packet_reg < packet_reg_next; packet_reg += 4)
    + writel(0, base + packet_reg);
    +
    HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
    HDMI_READ(HDMI_RAM_PACKET_CONFIG) | BIT(packet_id));

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-15 23:09    [W:4.019 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site