Skip to content

Commit d0bd107

Browse files
Alex RamírezLyude
authored andcommitted
drm/nouveau: implement missing DCB connector types; gracefully handle unknown connectors
* 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: 8b7d92c ("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 <lxrmrz732@rocketmail.com> Reviewed-by: Lyude Paul <lyude@redhat.com> [Lyude: Remove unneeded parenthesis around nvkm_warn()] Signed-off-by: Lyude Paul <lyude@redhat.com> Link: https://patch.msgid.link/20251213005327.9495-3-lxrmrz732@gmail.com
1 parent 3036b4c commit d0bd107

1 file changed

Lines changed: 53 additions & 20 deletions

File tree

  • drivers/gpu/drm/nouveau/nvkm/engine/disp

drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -191,27 +191,60 @@ nvkm_uconn_new(const struct nvkm_oclass *oclass, void *argv, u32 argc, struct nv
191191
spin_lock(&disp->client.lock);
192192
if (!conn->object.func) {
193193
switch (conn->info.type) {
194-
case DCB_CONNECTOR_VGA : args->v0.type = NVIF_CONN_V0_VGA; break;
195-
case DCB_CONNECTOR_TV_0 :
196-
case DCB_CONNECTOR_TV_1 :
197-
case DCB_CONNECTOR_TV_3 : args->v0.type = NVIF_CONN_V0_TV; break;
198-
case DCB_CONNECTOR_DMS59_0 :
199-
case DCB_CONNECTOR_DMS59_1 :
200-
case DCB_CONNECTOR_DVI_I : args->v0.type = NVIF_CONN_V0_DVI_I; break;
201-
case DCB_CONNECTOR_DVI_D : args->v0.type = NVIF_CONN_V0_DVI_D; break;
202-
case DCB_CONNECTOR_LVDS : args->v0.type = NVIF_CONN_V0_LVDS; break;
203-
case DCB_CONNECTOR_LVDS_SPWG: args->v0.type = NVIF_CONN_V0_LVDS_SPWG; break;
204-
case DCB_CONNECTOR_DMS59_DP0:
205-
case DCB_CONNECTOR_DMS59_DP1:
206-
case DCB_CONNECTOR_DP :
207-
case DCB_CONNECTOR_mDP :
208-
case DCB_CONNECTOR_USB_C : args->v0.type = NVIF_CONN_V0_DP; break;
209-
case DCB_CONNECTOR_eDP : args->v0.type = NVIF_CONN_V0_EDP; break;
210-
case DCB_CONNECTOR_HDMI_0 :
211-
case DCB_CONNECTOR_HDMI_1 :
212-
case DCB_CONNECTOR_HDMI_C : args->v0.type = NVIF_CONN_V0_HDMI; break;
194+
/* VGA */
195+
case DCB_CONNECTOR_DVI_A :
196+
case DCB_CONNECTOR_POD_VGA :
197+
case DCB_CONNECTOR_VGA : args->v0.type = NVIF_CONN_V0_VGA; break;
198+
199+
/* TV */
200+
case DCB_CONNECTOR_TV_0 :
201+
case DCB_CONNECTOR_TV_1 :
202+
case DCB_CONNECTOR_TV_2 :
203+
case DCB_CONNECTOR_TV_SCART :
204+
case DCB_CONNECTOR_TV_SCART_D :
205+
case DCB_CONNECTOR_TV_DTERM :
206+
case DCB_CONNECTOR_POD_TV_3 :
207+
case DCB_CONNECTOR_POD_TV_1 :
208+
case DCB_CONNECTOR_POD_TV_0 :
209+
case DCB_CONNECTOR_TV_3 : args->v0.type = NVIF_CONN_V0_TV; break;
210+
211+
/* DVI */
212+
case DCB_CONNECTOR_DVI_I_TV_1 :
213+
case DCB_CONNECTOR_DVI_I_TV_0 :
214+
case DCB_CONNECTOR_DVI_I_TV_2 :
215+
case DCB_CONNECTOR_DVI_ADC :
216+
case DCB_CONNECTOR_DMS59_0 :
217+
case DCB_CONNECTOR_DMS59_1 :
218+
case DCB_CONNECTOR_DVI_I : args->v0.type = NVIF_CONN_V0_DVI_I; break;
219+
case DCB_CONNECTOR_TMDS :
220+
case DCB_CONNECTOR_DVI_D : args->v0.type = NVIF_CONN_V0_DVI_D; break;
221+
222+
/* LVDS */
223+
case DCB_CONNECTOR_LVDS : args->v0.type = NVIF_CONN_V0_LVDS; break;
224+
case DCB_CONNECTOR_LVDS_SPWG : args->v0.type = NVIF_CONN_V0_LVDS_SPWG; break;
225+
226+
/* DP */
227+
case DCB_CONNECTOR_DMS59_DP0 :
228+
case DCB_CONNECTOR_DMS59_DP1 :
229+
case DCB_CONNECTOR_DP :
230+
case DCB_CONNECTOR_mDP :
231+
case DCB_CONNECTOR_USB_C : args->v0.type = NVIF_CONN_V0_DP; break;
232+
case DCB_CONNECTOR_eDP : args->v0.type = NVIF_CONN_V0_EDP; break;
233+
234+
/* HDMI */
235+
case DCB_CONNECTOR_HDMI_0 :
236+
case DCB_CONNECTOR_HDMI_1 :
237+
case DCB_CONNECTOR_HDMI_C : args->v0.type = NVIF_CONN_V0_HDMI; break;
238+
239+
/*
240+
* Dock & unused outputs.
241+
* BNC, SPDIF, WFD, and detached LVDS go here.
242+
*/
213243
default:
214-
WARN_ON(1);
244+
nvkm_warn(&disp->engine.subdev,
245+
"unimplemented connector type 0x%02x\n",
246+
conn->info.type);
247+
args->v0.type = NVIF_CONN_V0_VGA;
215248
ret = -EINVAL;
216249
break;
217250
}

0 commit comments

Comments
 (0)