Reviewed-by: Lyude Paul <[email protected]> I will push these upstream in a moment
On Fri, 2025-12-12 at 19:53 -0500, [email protected] wrote: > From: Alex Ramirez <[email protected]> > > * Implement missing DCB connectors in uconn.c previously defined in > conn.h. > * Replace kernel WARN_ON macro with printk message to more gracefully > signify > an unknown connector was encountered. > > With this patch, unknown connectors are explicitly marked with value > 0 > (DCB_CONNECTOR_VGA) to match the tested current behavior. Although > 0xff > (DCB_CONNECTOR_NONE) may be more suitable, I don't want to introduce > a breaking change. > > Fixes: 8b7d92cad953 ("drm/nouveau/kms/nv50-: create connectors based > on nvkm info") > Link: > https://download.nvidia.com/open-gpu-doc/DCB/1/DCB-4.0-Specification.html#_connector_table_entry > Signed-off-by: Alex Ramírez <[email protected]> > --- > .../gpu/drm/nouveau/nvkm/engine/disp/uconn.c | 73 ++++++++++++++--- > -- > 1 file changed, 53 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > index 2dab6612c4fc..d1fed2beee63 100644 > --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > @@ -191,27 +191,60 @@ nvkm_uconn_new(const struct nvkm_oclass > *oclass, void *argv, u32 argc, struct nv > spin_lock(&disp->client.lock); > if (!conn->object.func) { > switch (conn->info.type) { > - case DCB_CONNECTOR_VGA : args->v0.type = > NVIF_CONN_V0_VGA; break; > - case DCB_CONNECTOR_TV_0 : > - case DCB_CONNECTOR_TV_1 : > - case DCB_CONNECTOR_TV_3 : args->v0.type = > NVIF_CONN_V0_TV; break; > - case DCB_CONNECTOR_DMS59_0 : > - case DCB_CONNECTOR_DMS59_1 : > - case DCB_CONNECTOR_DVI_I : args->v0.type = > NVIF_CONN_V0_DVI_I; break; > - case DCB_CONNECTOR_DVI_D : args->v0.type = > NVIF_CONN_V0_DVI_D; break; > - case DCB_CONNECTOR_LVDS : args->v0.type = > NVIF_CONN_V0_LVDS; break; > - case DCB_CONNECTOR_LVDS_SPWG: args->v0.type = > NVIF_CONN_V0_LVDS_SPWG; break; > - case DCB_CONNECTOR_DMS59_DP0: > - case DCB_CONNECTOR_DMS59_DP1: > - case DCB_CONNECTOR_DP : > - case DCB_CONNECTOR_mDP : > - case DCB_CONNECTOR_USB_C : args->v0.type = > NVIF_CONN_V0_DP; break; > - case DCB_CONNECTOR_eDP : args->v0.type = > NVIF_CONN_V0_EDP; break; > - case DCB_CONNECTOR_HDMI_0 : > - case DCB_CONNECTOR_HDMI_1 : > - case DCB_CONNECTOR_HDMI_C : args->v0.type = > NVIF_CONN_V0_HDMI; break; > + /* VGA */ > + case DCB_CONNECTOR_DVI_A : > + case DCB_CONNECTOR_POD_VGA : > + case DCB_CONNECTOR_VGA : args->v0.type = > NVIF_CONN_V0_VGA; break; > + > + /* TV */ > + case DCB_CONNECTOR_TV_0 : > + case DCB_CONNECTOR_TV_1 : > + case DCB_CONNECTOR_TV_2 : > + case DCB_CONNECTOR_TV_SCART : > + case DCB_CONNECTOR_TV_SCART_D : > + case DCB_CONNECTOR_TV_DTERM : > + case DCB_CONNECTOR_POD_TV_3 : > + case DCB_CONNECTOR_POD_TV_1 : > + case DCB_CONNECTOR_POD_TV_0 : > + case DCB_CONNECTOR_TV_3 : args- > >v0.type = NVIF_CONN_V0_TV; break; > + > + /* DVI */ > + case DCB_CONNECTOR_DVI_I_TV_1 : > + case DCB_CONNECTOR_DVI_I_TV_0 : > + case DCB_CONNECTOR_DVI_I_TV_2 : > + case DCB_CONNECTOR_DVI_ADC : > + case DCB_CONNECTOR_DMS59_0 : > + case DCB_CONNECTOR_DMS59_1 : > + case DCB_CONNECTOR_DVI_I : args->v0.type = > NVIF_CONN_V0_DVI_I; break; > + case DCB_CONNECTOR_TMDS : > + case DCB_CONNECTOR_DVI_D : args->v0.type = > NVIF_CONN_V0_DVI_D; break; > + > + /* LVDS */ > + case DCB_CONNECTOR_LVDS : args- > >v0.type = NVIF_CONN_V0_LVDS; break; > + case DCB_CONNECTOR_LVDS_SPWG : args->v0.type = > NVIF_CONN_V0_LVDS_SPWG; break; > + > + /* DP */ > + case DCB_CONNECTOR_DMS59_DP0 : > + case DCB_CONNECTOR_DMS59_DP1 : > + case DCB_CONNECTOR_DP : > + case DCB_CONNECTOR_mDP : > + case DCB_CONNECTOR_USB_C : args->v0.type = > NVIF_CONN_V0_DP; break; > + case DCB_CONNECTOR_eDP : args->v0.type = > NVIF_CONN_V0_EDP; break; > + > + /* HDMI */ > + case DCB_CONNECTOR_HDMI_0 : > + case DCB_CONNECTOR_HDMI_1 : > + case DCB_CONNECTOR_HDMI_C : args->v0.type = > NVIF_CONN_V0_HDMI; break; > + > + /* > + * Dock & unused outputs. > + * BNC, SPDIF, WFD, and detached LVDS go here. > + */ > default: > - WARN_ON(1); > + nvkm_warn(&(disp->engine.subdev), > + "unimplemented connector type > 0x%02x\n", > + conn->info.type); > + args->v0.type = NVIF_CONN_V0_VGA; > ret = -EINVAL; > break; > }
