On Mon, 2025-12-08 at 10:27 -0500, Alex Deucher wrote:
> On Mon, Dec 8, 2025 at 10:21 AM <[email protected]> wrote:
> >
> > On Sat, 2025-12-06 at 03:31 +0100, Timur Kristóf wrote:
> > > Just like for other signal types, call the encoder control
> > > command in the VBIOS to setup the DAC encoder.
> > > The DAC doesn't work well without this on some GPUs,
> > > for example the Radeon HD 7790 needs this.
> > >
> > > Fixes: 7d63519cd9ca ("drm/amd/display: Add concept of analog
> > > encoders
> > > (v2)")
> > > Signed-off-by: Timur Kristóf <[email protected]>
> > > ---
> > > .../amd/display/dc/dce/dce_stream_encoder.c | 25
> > > ++++++++++++++++++-
> > > .../amd/display/dc/inc/hw/stream_encoder.h | 4 +++
> > > .../amd/display/dc/link/hwss/link_hwss_dio.c | 4 +++
> > > 3 files changed, 32 insertions(+), 1 deletion(-)
> > >
> > > diff --git
> > > a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
> > > b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
> > > index 574618d5d4a4..1fbf6263c235 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
> > > +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
> > > @@ -693,6 +693,24 @@ static void
> > > dce110_stream_encoder_lvds_set_stream_attribute(
> > > ASSERT(crtc_timing->pixel_encoding == PIXEL_ENCODING_RGB);
> > > }
> > >
> > > +static void dce110_stream_encoder_analog_set_stream_attribute(
> > > + struct stream_encoder *enc,
> > > + struct dc_crtc_timing *crtc_timing)
> > > +{
> > > + struct dce110_stream_encoder *enc110 =
> > > DCE110STRENC_FROM_STRENC(enc);
> > > + struct bp_encoder_control cntl = {0};
> > > +
> > > + cntl.action = ENCODER_CONTROL_SETUP;
> > > + cntl.engine_id = enc110->base.id;
> >
> > Found a mistake here.
> > This should use the analog_id added in the previous patch.
>
> The series looks good to me. Do you want to resend with this fixed?
> I'll apply it.
>
> Thanks,
>
> Alex
Thanks Alex.
I will send a second version with this fixed.
Also I would like to wait for Mauro to test it. The series fixes the
"black screen" issue on my HD 7790, but Mauro told me that it doesn't
fix it for him.
>
> >
> > > + cntl.pixel_clock = crtc_timing->pix_clk_100hz / 10;
> > > +
> > > + if (enc110->base.bp->funcs->encoder_control(
> > > + enc110->base.bp, &cntl) != BP_RESULT_OK)
> > > + return;
> > > +
> > > + ASSERT(crtc_timing->pixel_encoding == PIXEL_ENCODING_RGB);
> > > +}
> > > +
> > > static void dce110_stream_encoder_set_throttled_vcp_size(
> > > struct stream_encoder *enc,
> > > struct fixed31_32 avg_time_slots_per_mtp)
> > > @@ -1521,6 +1539,8 @@ static const struct stream_encoder_funcs
> > > dce110_str_enc_funcs = {
> > > dce110_stream_encoder_dvi_set_stream_attribute,
> > > .lvds_set_stream_attribute =
> > > dce110_stream_encoder_lvds_set_stream_attribute,
> > > + .analog_set_stream_attribute =
> > > + dce110_stream_encoder_analog_set_stream_attribute,
> > > .set_throttled_vcp_size =
> > > dce110_stream_encoder_set_throttled_vcp_size,
> > > .update_hdmi_info_packets =
> > > @@ -1568,7 +1588,10 @@ void dce110_stream_encoder_construct(
> > > enc110->se_mask = se_mask;
> > > }
> > >
> > > -static const struct stream_encoder_funcs dce110_an_str_enc_funcs
> > > =
> > > {};
> > > +static const struct stream_encoder_funcs dce110_an_str_enc_funcs
> > > = {
> > > + .analog_set_stream_attribute =
> > > + dce110_stream_encoder_analog_set_stream_attribute,
> > > +};
> > >
> > > void dce110_analog_stream_encoder_construct(
> > > struct dce110_stream_encoder *enc110,
> > > diff --git
> > > a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
> > > b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
> > > index 27f950ae45ee..9658b06f32f7 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
> > > +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
> > > @@ -153,6 +153,10 @@ struct stream_encoder_funcs {
> > > struct stream_encoder *enc,
> > > struct dc_crtc_timing *crtc_timing);
> > >
> > > + void (*analog_set_stream_attribute)(
> > > + struct stream_encoder *enc,
> > > + struct dc_crtc_timing *crtc_timing);
> > > +
> > > void (*set_throttled_vcp_size)(
> > > struct stream_encoder *enc,
> > > struct fixed31_32 avg_time_slots_per_mtp);
> > > diff --git
> > > a/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_dio.c
> > > b/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_dio.c
> > > index befa67b2b2ae..90ff4fdd79b7 100644
> > > --- a/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_dio.c
> > > +++ b/drivers/gpu/drm/amd/display/dc/link/hwss/link_hwss_dio.c
> > > @@ -148,6 +148,10 @@ void setup_dio_stream_attribute(struct
> > > pipe_ctx
> > > *pipe_ctx)
> > > stream_encoder->funcs->lvds_set_stream_attribute(
> > > stream_encoder,
> > > &stream->timing);
> > > + else if (dc_is_rgb_signal(stream->signal))
> > > + stream_encoder->funcs->analog_set_stream_attribute(
> > > + stream_encoder,
> > > + &stream->timing);
> > >
> > > if (dc_is_dp_signal(stream->signal))
> > > link->dc->link_srv->dp_trace_source_sequence(link,