Commit 3036b4ce authored by Alex Ramírez's avatar Alex Ramírez Committed by Lyude Paul
Browse files

drm/nouveau: add missing DCB connector types

* Add missing DCB connectors in conn.h as per the NVIDIA DCB specification.

A lot of connector logic was rewritten for Linux v6.5; some display connector types
went unaccounted-for which caused kernel warnings on devices with the now-unsupported
DCB connectors. This patch adds all of the DCB connectors as defined by NVIDIA to the
dcb_connector_type enum to bring back support for these connectors to the new logic.

Fixes: 8b7d92ca ("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: default avatarAlex Ramírez <lxrmrz732@rocketmail.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
[Lyude: Clarify DCB_CONNECTOR_HDMI_0 weirdness in comments]
Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patch.msgid.link/20251213005327.9495-2-lxrmrz732@gmail.com
parent 1a0f69e3
Loading
Loading
Loading
Loading
+74 −21
Original line number Diff line number Diff line
/* SPDX-License-Identifier: MIT */
#ifndef __NVBIOS_CONN_H__
#define __NVBIOS_CONN_H__

/*
 * An enumerator representing all of the possible VBIOS connector types defined
 * by Nvidia at
 * https://nvidia.github.io/open-gpu-doc/DCB/DCB-4.x-Specification.html.
 *
 * [1] Nvidia's documentation actually claims DCB_CONNECTOR_HDMI_0 is a "3-Pin
 *     DIN Stereo Connector". This seems very likely to be a documentation typo
 *     or some sort of funny historical baggage, because we've treated this
 *     connector type as HDMI for years without issue.
 *     TODO: Check with Nvidia what's actually happening here.
 */
enum dcb_connector_type {
	DCB_CONNECTOR_VGA = 0x00,
	DCB_CONNECTOR_TV_0 = 0x10,
	DCB_CONNECTOR_TV_1 = 0x11,
	DCB_CONNECTOR_TV_3 = 0x13,
	DCB_CONNECTOR_DVI_I = 0x30,
	DCB_CONNECTOR_DVI_D = 0x31,
	DCB_CONNECTOR_DMS59_0 = 0x38,
	DCB_CONNECTOR_DMS59_1 = 0x39,
	DCB_CONNECTOR_LVDS = 0x40,
	DCB_CONNECTOR_LVDS_SPWG = 0x41,
	DCB_CONNECTOR_DP = 0x46,
	DCB_CONNECTOR_eDP = 0x47,
	DCB_CONNECTOR_mDP = 0x48,
	DCB_CONNECTOR_HDMI_0 = 0x60,
	DCB_CONNECTOR_HDMI_1 = 0x61,
	DCB_CONNECTOR_HDMI_C = 0x63,
	DCB_CONNECTOR_DMS59_DP0 = 0x64,
	DCB_CONNECTOR_DMS59_DP1 = 0x65,
	DCB_CONNECTOR_WFD	= 0x70,
	DCB_CONNECTOR_USB_C = 0x71,
	DCB_CONNECTOR_NONE = 0xff
	/* Analog outputs */
	DCB_CONNECTOR_VGA = 0x00,		// VGA 15-pin connector
	DCB_CONNECTOR_DVI_A = 0x01,		// DVI-A
	DCB_CONNECTOR_POD_VGA = 0x02,		// Pod - VGA 15-pin connector
	DCB_CONNECTOR_TV_0 = 0x10,		// TV - Composite Out
	DCB_CONNECTOR_TV_1 = 0x11,		// TV - S-Video Out
	DCB_CONNECTOR_TV_2 = 0x12,		// TV - S-Video Breakout - Composite
	DCB_CONNECTOR_TV_3 = 0x13,		// HDTV Component - YPrPb
	DCB_CONNECTOR_TV_SCART = 0x14,		// TV - SCART Connector
	DCB_CONNECTOR_TV_SCART_D = 0x16,	// TV - Composite SCART over D-connector
	DCB_CONNECTOR_TV_DTERM = 0x17,		// HDTV - D-connector (EIAJ4120)
	DCB_CONNECTOR_POD_TV_3 = 0x18,		// Pod - HDTV - YPrPb
	DCB_CONNECTOR_POD_TV_1 = 0x19,		// Pod - S-Video
	DCB_CONNECTOR_POD_TV_0 = 0x1a,		// Pod - Composite

	/* DVI digital outputs */
	DCB_CONNECTOR_DVI_I_TV_1 = 0x20,	// DVI-I-TV-S-Video
	DCB_CONNECTOR_DVI_I_TV_0 = 0x21,	// DVI-I-TV-Composite
	DCB_CONNECTOR_DVI_I_TV_2 = 0x22,	// DVI-I-TV-S-Video Breakout-Composite
	DCB_CONNECTOR_DVI_I = 0x30,		// DVI-I
	DCB_CONNECTOR_DVI_D = 0x31,		// DVI-D
	DCB_CONNECTOR_DVI_ADC = 0x32,		// Apple Display Connector (ADC)
	DCB_CONNECTOR_DMS59_0 = 0x38,		// LFH-DVI-I-1
	DCB_CONNECTOR_DMS59_1 = 0x39,		// LFH-DVI-I-2
	DCB_CONNECTOR_BNC = 0x3c,		// BNC Connector [for SDI?]

	/* LVDS / TMDS digital outputs */
	DCB_CONNECTOR_LVDS = 0x40,		// LVDS-SPWG-Attached [is this name correct?]
	DCB_CONNECTOR_LVDS_SPWG = 0x41,		// LVDS-OEM-Attached (non-removable)
	DCB_CONNECTOR_LVDS_REM = 0x42,		// LVDS-SPWG-Detached [following naming above]
	DCB_CONNECTOR_LVDS_SPWG_REM = 0x43,	// LVDS-OEM-Detached (removable)
	DCB_CONNECTOR_TMDS = 0x45,		// TMDS-OEM-Attached (non-removable)

	/* DP digital outputs */
	DCB_CONNECTOR_DP = 0x46,		// DisplayPort External Connector
	DCB_CONNECTOR_eDP = 0x47,		// DisplayPort Internal Connector
	DCB_CONNECTOR_mDP = 0x48,		// DisplayPort (Mini) External Connector

	/* Dock outputs (not used) */
	DCB_CONNECTOR_DOCK_VGA_0 = 0x50,	// VGA 15-pin if not docked
	DCB_CONNECTOR_DOCK_VGA_1 = 0x51,	// VGA 15-pin if docked
	DCB_CONNECTOR_DOCK_DVI_I_0 = 0x52,	// DVI-I if not docked
	DCB_CONNECTOR_DOCK_DVI_I_1 = 0x53,	// DVI-I if docked
	DCB_CONNECTOR_DOCK_DVI_D_0 = 0x54,	// DVI-D if not docked
	DCB_CONNECTOR_DOCK_DVI_D_1 = 0x55,	// DVI-D if docked
	DCB_CONNECTOR_DOCK_DP_0 = 0x56,		// DisplayPort if not docked
	DCB_CONNECTOR_DOCK_DP_1 = 0x57,		// DisplayPort if docked
	DCB_CONNECTOR_DOCK_mDP_0 = 0x58,	// DisplayPort (Mini) if not docked
	DCB_CONNECTOR_DOCK_mDP_1 = 0x59,	// DisplayPort (Mini) if docked

	/* HDMI? digital outputs */
	DCB_CONNECTOR_HDMI_0 = 0x60,		// HDMI? See [1] in top-level enum comment above
	DCB_CONNECTOR_HDMI_1 = 0x61,		// HDMI-A connector
	DCB_CONNECTOR_SPDIF = 0x62,		// Audio S/PDIF connector
	DCB_CONNECTOR_HDMI_C = 0x63,		// HDMI-C (Mini) connector

	/* Misc. digital outputs */
	DCB_CONNECTOR_DMS59_DP0 = 0x64,		// LFH-DP-1
	DCB_CONNECTOR_DMS59_DP1 = 0x65,		// LFH-DP-2
	DCB_CONNECTOR_WFD = 0x70,		// Virtual connector for Wifi Display (WFD)
	DCB_CONNECTOR_USB_C = 0x71,		// [DP over USB-C; not present in docs]
	DCB_CONNECTOR_NONE = 0xff		// Skip Entry
};

struct nvbios_connT {