Hi Maxime On Thu, 3 Dec 2020 at 07:46, Maxime Ripard <maxime@xxxxxxxxxx> wrote: > > The infoframes are sent at a regular interval as a data island packet, > so we don't need to wait for them to be sent when we're setting them up. > > However, we do need to poll when we're enabling since the we can't > update the packet RAM until it has been sent. > > Let's add a boolean flag to tell whether we want to poll or not to > support both cases. > > Suggested-by: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx> > Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx> That looks like it should do what was intended - thanks. Reviewed-by: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx> > --- > > Changes from v1: > - Inverted when to poll > --- > drivers/gpu/drm/vc4/vc4_hdmi.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c > index a2c5b5e9786a..d3c4a9b5bb6d 100644 > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c > @@ -265,7 +265,8 @@ static int vc4_hdmi_connector_init(struct drm_device *dev, > } > > static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, > - enum hdmi_infoframe_type type) > + enum hdmi_infoframe_type type, > + bool poll) > { > struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); > u32 packet_id = type - 0x80; > @@ -273,6 +274,9 @@ static int vc4_hdmi_stop_packet(struct drm_encoder *encoder, > HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, > HDMI_READ(HDMI_RAM_PACKET_CONFIG) & ~BIT(packet_id)); > > + if (!poll) > + return 0; > + > return wait_for(!(HDMI_READ(HDMI_RAM_PACKET_STATUS) & > BIT(packet_id)), 100); > } > @@ -299,7 +303,7 @@ static void vc4_hdmi_write_infoframe(struct drm_encoder *encoder, > if (len < 0) > return; > > - ret = vc4_hdmi_stop_packet(encoder, frame->any.type); > + ret = vc4_hdmi_stop_packet(encoder, frame->any.type, true); > if (ret) { > DRM_ERROR("Failed to wait for infoframe to go idle: %d\n", ret); > return; > @@ -1056,7 +1060,7 @@ static void vc4_hdmi_audio_reset(struct vc4_hdmi *vc4_hdmi) > int ret; > > vc4_hdmi->audio.streaming = false; > - ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO); > + ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false); > if (ret) > dev_err(dev, "Failed to stop audio infoframe: %d\n", ret); > > -- > 2.28.0 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel