[PATCH 1/3] drm/nouveau/devinit/tu102-: wait for GFW_BOOT_PROGRESS == COMPLETED

Lyude Paul lyude at redhat.com
Mon Jan 30 23:19:27 UTC 2023


For the whole series:

Reviewed-by: Lyude Paul <lyude at redhat.com>

Will push to drm-misc-fixes in just a moment

On Tue, 2023-01-31 at 08:37 +1000, Ben Skeggs wrote:
> Starting from Turing, the driver is no longer responsible for initiating
> DEVINIT when required as the GPU started loading a FW image from ROM and
> executing DEVINIT itself after power-on.
> 
> However - we apparently still need to wait for it to complete.
> 
> This should correct some issues with runpm on some systems, where we get
> control of the HW before it's been fully reinitialised after resume from
> suspend.
> 
> Signed-off-by: Ben Skeggs <bskeggs at redhat.com>
> ---
>  .../drm/nouveau/nvkm/subdev/devinit/tu102.c   | 23 +++++++++++++++++++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c
> index 634f64f88fc8..81a1ad2c88a7 100644
> --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c
> +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.c
> @@ -65,10 +65,33 @@ tu102_devinit_pll_set(struct nvkm_devinit *init, u32 type, u32 freq)
>  	return ret;
>  }
>  
> +static int
> +tu102_devinit_wait(struct nvkm_device *device)
> +{
> +	unsigned timeout = 50 + 2000;
> +
> +	do {
> +		if (nvkm_rd32(device, 0x118128) & 0x00000001) {
> +			if ((nvkm_rd32(device, 0x118234) & 0x000000ff) == 0xff)
> +				return 0;
> +		}
> +
> +		usleep_range(1000, 2000);
> +	} while (timeout--);
> +
> +	return -ETIMEDOUT;
> +}
> +
>  int
>  tu102_devinit_post(struct nvkm_devinit *base, bool post)
>  {
>  	struct nv50_devinit *init = nv50_devinit(base);
> +	int ret;
> +
> +	ret = tu102_devinit_wait(init->base.subdev.device);
> +	if (ret)
> +		return ret;
> +
>  	gm200_devinit_preos(init, post);
>  	return 0;
>  }

-- 
Cheers,
 Lyude Paul (she/her)
 Software Engineer at Red Hat



More information about the dri-devel mailing list