On Wed, Jul 19, 2023 at 6:41 AM Ben Skeggs <skeggsb@xxxxxxxxx> wrote: > > From: Ben Skeggs <bskeggs@xxxxxxxxxx> > > Fixes crash on boards with ANX9805 TMDS/DP encoders. > > Signed-off-by: Ben Skeggs <bskeggs@xxxxxxxxxx> > --- > .../gpu/drm/nouveau/nvkm/engine/disp/uconn.c | 27 ++++++++++++------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > index dad942be6679..46b057fe1412 100644 > --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c > @@ -81,20 +81,29 @@ nvkm_uconn_uevent(struct nvkm_object *object, void *argv, u32 argc, struct nvkm_ > return -ENOSYS; > > list_for_each_entry(outp, &conn->disp->outps, head) { > - if (outp->info.connector == conn->index && outp->dp.aux) { > - if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG; > - if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_I2C_UNPLUG; > - if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ; > + if (outp->info.connector == conn->index) > + break; > + } > > - return nvkm_uevent_add(uevent, &device->i2c->event, outp->dp.aux->id, bits, > - nvkm_uconn_uevent_aux); > - } > + if (&outp->head == &conn->disp->outps) > + return -EINVAL; > + > + if (outp->dp.aux && !outp->info.location) { > + if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_I2C_PLUG; > + if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_I2C_UNPLUG; > + if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ ) bits |= NVKM_I2C_IRQ; > + > + return nvkm_uevent_add(uevent, &device->i2c->event, outp->dp.aux->id, bits, > + nvkm_uconn_uevent_aux); > } > > if (args->v0.types & NVIF_CONN_EVENT_V0_PLUG ) bits |= NVKM_GPIO_HI; > if (args->v0.types & NVIF_CONN_EVENT_V0_UNPLUG) bits |= NVKM_GPIO_LO; > - if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ) > - return -EINVAL; > + if (args->v0.types & NVIF_CONN_EVENT_V0_IRQ) { > + /* TODO: support DP IRQ on ANX9805 and remove this hack. */ > + if (!outp->info.location) > + return -EINVAL; > + } > > return nvkm_uevent_add(uevent, &device->gpio->event, conn->info.hpd, bits, > nvkm_uconn_uevent_gpio); > -- > 2.41.0 > Reviewed-by: Karol Herbst <kherbst@xxxxxxxxxx>