Skip to content

Commit 2b5d1c2

Browse files
Ben Skeggskarolherbst
authored andcommitted
drm/nouveau/disp: PIOR DP uses GPIO for HPD, not PMGR AUX interrupts
Fixes crash on boards with ANX9805 TMDS/DP encoders. Cc: stable@vger.kernel.org # 6.4+ Signed-off-by: Ben Skeggs <bskeggs@redhat.com> Reviewed-by: Karol Herbst <kherbst@redhat.com> Signed-off-by: Karol Herbst <kherbst@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230719044051.6975-2-skeggsb@gmail.com
1 parent 752a281 commit 2b5d1c2

File tree

1 file changed

+18
-9
lines changed
  • drivers/gpu/drm/nouveau/nvkm/engine/disp

1 file changed

+18
-9
lines changed

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,29 @@ nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_
8181
return -ENOSYS;
8282

8383
list_for_each_entry(outp, &conn->disp->outps, head) {
84-
if (outp->info.connector == conn->index && outp->dp.aux) {
85-
if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG;
86-
if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_I2C_UNPLUG;
87-
if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ;
84+
if (outp->info.connector == conn->index)
85+
break;
86+
}
8887

89-
return nvkm_uevent_add(uevent, &device->i2c->event, outp->dp.aux->id, bits,
90-
nvkm_uconn_uevent_aux);
91-
}
88+
if (&outp->head == &conn->disp->outps)
89+
return -EINVAL;
90+
91+
if (outp->dp.aux && !outp->info.location) {
92+
if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG;
93+
if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_I2C_UNPLUG;
94+
if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ;
95+
96+
return nvkm_uevent_add(uevent, &device->i2c->event, outp->dp.aux->id, bits,
97+
nvkm_uconn_uevent_aux);
9298
}
9399

94100
if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_GPIO_HI;
95101
if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_GPIO_LO;
96-
if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ)
97-
return -EINVAL;
102+
if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ) {
103+
/* TODO: support DP IRQ on ANX9805 and remove this hack. */
104+
if (!outp->info.location)
105+
return -EINVAL;
106+
}
98107

99108
return nvkm_uevent_add(uevent, &device->gpio->event, conn->info.hpd, bits,
100109
nvkm_uconn_uevent_gpio);

0 commit comments

Comments
 (0)