Ping? This fixes a regression on LVDS systems. Alex
On Mon, Mar 23, 2026 at 11:41 AM Alex Deucher <[email protected]> wrote: > > LVDS does not use an HPD pin so it may be invalid. Handle > this case correctly in link encoder creation. > > Fixes: 7c8fb3b8e9ba ("drm/amd/display: Add hpd_source index check for > DCE60/80/100/110/112/120 link encoders") > Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5012 > Cc: Srinivasan Shanmugam <[email protected]> > Cc: Roman Li <[email protected]> > Signed-off-by: Alex Deucher <[email protected]> > --- > .../display/dc/resource/dce100/dce100_resource.c | 6 ++---- > .../display/dc/resource/dce110/dce110_resource.c | 5 +++-- > .../display/dc/resource/dce112/dce112_resource.c | 5 +++-- > .../display/dc/resource/dce120/dce120_resource.c | 5 +++-- > .../amd/display/dc/resource/dce60/dce60_resource.c | 14 ++++++-------- > .../amd/display/dc/resource/dce80/dce80_resource.c | 6 ++---- > 6 files changed, 19 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c > index 05f7ff60f8f5a..2b884e28727ba 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce100/dce100_resource.c > @@ -651,9 +651,6 @@ static struct link_encoder *dce100_link_encoder_create( > return &enc110->base; > } > > - if (enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs)) > - return NULL; > - > link_regs_id = > > map_transmitter_id_to_phy_instance(enc_init_data->transmitter); > > @@ -662,7 +659,8 @@ static struct link_encoder *dce100_link_encoder_create( > &link_enc_feature, > &link_enc_regs[link_regs_id], > > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > return &enc110->base; > } > > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c > index 7c09825cd9bd3..d957598911cbc 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce110/dce110_resource.c > @@ -672,7 +672,7 @@ static struct link_encoder *dce110_link_encoder_create( > kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL); > int link_regs_id; > > - if (!enc110 || enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs)) > + if (!enc110) > return NULL; > > link_regs_id = > @@ -683,7 +683,8 @@ static struct link_encoder *dce110_link_encoder_create( > &link_enc_feature, > &link_enc_regs[link_regs_id], > > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > return &enc110->base; > } > > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c > index 3f0a6bc4dcc23..1cce903d477aa 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce112/dce112_resource.c > @@ -633,7 +633,7 @@ static struct link_encoder *dce112_link_encoder_create( > kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL); > int link_regs_id; > > - if (!enc110 || enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs)) > + if (!enc110) > return NULL; > > link_regs_id = > @@ -644,7 +644,8 @@ static struct link_encoder *dce112_link_encoder_create( > &link_enc_feature, > &link_enc_regs[link_regs_id], > > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > return &enc110->base; > } > > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c > index 92890784caa6e..8b568be20a77b 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce120/dce120_resource.c > @@ -717,7 +717,7 @@ static struct link_encoder *dce120_link_encoder_create( > kzalloc(sizeof(struct dce110_link_encoder), GFP_KERNEL); > int link_regs_id; > > - if (!enc110 || enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs)) > + if (!enc110) > return NULL; > > link_regs_id = > @@ -728,7 +728,8 @@ static struct link_encoder *dce120_link_encoder_create( > &link_enc_feature, > &link_enc_regs[link_regs_id], > > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > > return &enc110->base; > } > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c > index d41d24b76c11f..2f5ee9d8536af 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce60/dce60_resource.c > @@ -747,18 +747,16 @@ static struct link_encoder *dce60_link_encoder_create( > return &enc110->base; > } > > - if (enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs)) > - return NULL; > - > link_regs_id = > > map_transmitter_id_to_phy_instance(enc_init_data->transmitter); > > dce60_link_encoder_construct(enc110, > - enc_init_data, > - &link_enc_feature, > - &link_enc_regs[link_regs_id], > - > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data, > + &link_enc_feature, > + &link_enc_regs[link_regs_id], > + > &link_enc_aux_regs[enc_init_data->channel - 1], > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > return &enc110->base; > } > > diff --git a/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c > b/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c > index a68e799d58854..406705fac7d64 100644 > --- a/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c > +++ b/drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c > @@ -753,9 +753,6 @@ static struct link_encoder *dce80_link_encoder_create( > return &enc110->base; > } > > - if (enc_init_data->hpd_source >= ARRAY_SIZE(link_enc_hpd_regs)) > - return NULL; > - > link_regs_id = > > map_transmitter_id_to_phy_instance(enc_init_data->transmitter); > > @@ -764,7 +761,8 @@ static struct link_encoder *dce80_link_encoder_create( > &link_enc_feature, > &link_enc_regs[link_regs_id], > > &link_enc_aux_regs[enc_init_data->channel - 1], > - > &link_enc_hpd_regs[enc_init_data->hpd_source]); > + enc_init_data->hpd_source >= > ARRAY_SIZE(link_enc_hpd_regs) ? > + NULL : > &link_enc_hpd_regs[enc_init_data->hpd_source]); > return &enc110->base; > } > > -- > 2.53.0 >
