Skip to content

QCLINUX: drm/msm: Auto-detect separate GPU KMS mode based on HW topology#401

Open
naala-qcom wants to merge 1 commit intoqualcomm-linux:qcom-6.18.yfrom
naala-qcom:gpu-kms
Open

QCLINUX: drm/msm: Auto-detect separate GPU KMS mode based on HW topology#401
naala-qcom wants to merge 1 commit intoqualcomm-linux:qcom-6.18.yfrom
naala-qcom:gpu-kms

Conversation

@naala-qcom
Copy link
Copy Markdown

@naala-qcom naala-qcom commented Apr 1, 2026

On platforms with multiple display subsystems, such as SA8775P, the GPU binds to the first display subsystem that probes. This implicit binding prevents subsequent display subsystems from probing successfully, breaking multi-display support.

Use the tristate separate_gpu_kms module parameter with the default value set to auto (-1). In auto mode, the driver selects the binding behavior based on the number of GPUs and display subsystems. This allows display subsystems to probe independently when required, while preserving the existing single-card behavior on simpler systems.

The separate_gpu_kms module parameter has the following semantics:

-1 (auto, default):
Select the binding mode based on hardware topology. If exactly one
GPU and one display subsystem are present, bind them together to
form a single DRM device. Otherwise, expose the GPU and display
subsystems as separate DRM devices.

0:
Always bind the GPU and display together to form a single DRM
device.

1:
Always expose the GPU and display subsystems as separate DRM
devices.

This ensures correct probing on multi-display platforms without affecting single-display, single-GPU systems.

CRs-Fixed: 4443714

@naala-qcom naala-qcom requested a review from a team April 1, 2026 11:24
@qcomlnxci
Copy link
Copy Markdown

Test Matrix

Test Case lemans-evk monaco-evk qcs615-ride qcs6490-rb3gen2 qcs8300-ride qcs9100-ride-r3 sm8750-mtp
0_qcom-next-ci-premerge-tests ◻️ ◻️ ◻️ ◻️ ◻️ ◻️ ❌ Fail
BT_FW_KMD_Service ❌ Fail ❌ Fail ✅ Pass ◻️ ✅ Pass ✅ Pass ❌ Fail
BT_ON_OFF ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ⚠️ skip
BT_SCAN ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
CPUFreq_Validation ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
CPU_affinity ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
DSP_AudioPD ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
Ethernet ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ✅ Pass ⚠️ skip ⚠️ skip
Freq_Scaling ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ❌ Fail
GIC ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
IPA ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
Interrupts ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
OpenCV ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ⚠️ skip ⚠️ skip ◻️
PCIe ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
Probe_Failure_Check ❌ Fail ❌ Fail ✅ Pass ◻️ ✅ Pass ❌ Fail ❌ Fail
RMNET ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
UFS_Validation ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
USBHost ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ❌ Fail
WiFi_Firmware_Driver ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
WiFi_OnOff ✅ Pass ⚠️ skip ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
cdsp_remoteproc ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ❌ Fail
hotplug ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
irq ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
kaslr ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
pinctrl ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
qcom_hwrng ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
remoteproc ✅ Pass ❌ Fail ✅ Pass ◻️ ❌ Fail ✅ Pass ❌ Fail
rngtest ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ❌ Fail
shmbridge ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
smmu ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass
watchdog ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ◻️
wpss_remoteproc ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass ✅ Pass ✅ Pass

On platforms with multiple display subsystems, such as SA8775P, the GPU
binds to the first display subsystem that probes. This implicit binding
prevents subsequent display subsystems from probing successfully,
breaking multi-display support.

Use the tristate separate_gpu_kms module parameter with the default
value set to auto (-1). In auto mode, the driver selects the binding
behavior based on the number of GPUs and display subsystems. This
allows display subsystems to probe independently when required, while
preserving the existing single-card behavior on simpler systems.

The separate_gpu_kms module parameter has the following semantics:

  -1 (auto, default):
     Select the binding mode based on hardware topology. If exactly one
     GPU and one display subsystem are present, bind them together to
     form a single DRM device. Otherwise, expose the GPU and display
     subsystems as separate DRM devices.

   0:
     Always bind the GPU and display together to form a single DRM
     device.

   1:
     Always expose the GPU and display subsystems as separate DRM
     devices.

This ensures correct probing on multi-display platforms without
affecting single-display, single-GPU systems.

Signed-off-by: Mahadevan P <mahap@qti.qualcomm.com>
Signed-off-by: Nabige Aala <naala@qti.qualcomm.com>
@qcomlnxci
Copy link
Copy Markdown

Test Matrix

Test Case lemans-evk monaco-evk qcs615-ride qcs6490-rb3gen2 qcs8300-ride qcs9100-ride-r3 sm8750-mtp
0_qcom-next-ci-premerge-tests ◻️ ◻️ ◻️ ◻️ ◻️ ◻️ ❌ Fail
BT_FW_KMD_Service ❌ Fail ❌ Fail ✅ Pass ✅ Pass ❌ Fail ◻️ ❌ Fail
BT_ON_OFF ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ⚠️ skip
BT_SCAN ❌ Fail ❌ Fail ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
CPUFreq_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
CPU_affinity ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
DSP_AudioPD ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
Ethernet ✅ Pass ✅ Pass ⚠️ skip ⚠️ skip ✅ Pass ◻️ ⚠️ skip
Freq_Scaling ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ❌ Fail
GIC ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
IPA ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
Interrupts ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
OpenCV ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ⚠️ skip ◻️ ◻️
PCIe ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
Probe_Failure_Check ❌ Fail ❌ Fail ✅ Pass ❌ Fail ✅ Pass ◻️ ❌ Fail
RMNET ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
UFS_Validation ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
USBHost ✅ Pass ✅ Pass ✅ Pass ❌ Fail ✅ Pass ◻️ ❌ Fail
WiFi_Firmware_Driver ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
WiFi_OnOff ✅ Pass ⚠️ skip ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
cdsp_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ❌ Fail
hotplug ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
irq ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
kaslr ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
pinctrl ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
qcom_hwrng ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
remoteproc ✅ Pass ❌ Fail ✅ Pass ✅ Pass ❌ Fail ◻️ ❌ Fail
rngtest ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass
shmbridge ❌ Fail ✅ Pass ✅ Pass ✅ Pass ❌ Fail ◻️ ✅ Pass
smmu ✅ Pass ✅ Pass ✅ Pass ✅ Pass ❌ Fail ◻️ ✅ Pass
watchdog ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ◻️
wpss_remoteproc ✅ Pass ✅ Pass ✅ Pass ✅ Pass ✅ Pass ◻️ ✅ Pass

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants