[Nouveau] [PATCH 2/3] drm/nouveau/disp: PIOR DP uses GPIO for HPD, not PMGR AUX interrupts

Karol Herbst kherbst at redhat.com
Wed Jul 19 09:01:00 UTC 2023


On Wed, Jul 19, 2023 at 6:41 AM Ben Skeggs <skeggsb at gmail.com> wrote:
>
> From: Ben Skeggs <bskeggs at redhat.com>
>
> Fixes crash on boards with ANX9805 TMDS/DP encoders.
>
> Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
> ---
>  .../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 at redhat.com>



More information about the Nouveau mailing list