[Intel-xe] [PATCH] drm/xe: move the lmem verification code into a separate function

Upadhyay, Tejas tejas.upadhyay at intel.com
Wed Oct 25 10:31:19 UTC 2023



> -----Original Message-----
> From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Koby
> Elbaz
> Sent: Wednesday, October 25, 2023 12:43 PM
> To: intel-xe at lists.freedesktop.org
> Cc: obitton at intel.com; De Marchi, Lucas <lucas.demarchi at intel.com>
> Subject: [Intel-xe] [PATCH] drm/xe: move the lmem verification code into a
> separate function
> 
> If lmem (VRAM) is not fully initialized, the punit will power down the GT,
> which will prevent register access from the driver side.
> That code moved into a corresponding function (xe_verify_lmem_ready) to
> make the code clearer.
> 
> Signed-off-by: Koby Elbaz <kelbaz at habana.ai>
> ---
>  drivers/gpu/drm/xe/xe_mmio.c | 33 ++++++++++++++++++++++-----------
>  1 file changed, 22 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
> index 0da4f75c07bf..d10230bd0c1a 100644
> --- a/drivers/gpu/drm/xe/xe_mmio.c
> +++ b/drivers/gpu/drm/xe/xe_mmio.c
> @@ -381,10 +381,27 @@ static void mmio_fini(struct drm_device *drm, void
> *arg)
>  		iounmap(xe->mem.vram.mapping);
>  }
> 
> +static int xe_verify_lmem_ready(struct xe_device *xe) {
> +	struct xe_gt *gt = xe_root_mmio_gt(xe);
> +
> +	/*
> +	 * The boot firmware initializes local memory and assesses its health.
> +	 * If memory training fails, the punit will have been instructed to
> +	 * keep the GT powered down; we won't be able to communicate
> with it
> +	 * and we should not continue with driver initialization.
> +	 */
> +	if (IS_DGFX(xe) && !(xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT)) {
> +		drm_err(&xe->drm, "VRAM not initialized by firmware\n");
> +		return -ENODEV;
> +	}
> +
> +	return 0;
> +}
> +
>  int xe_mmio_init(struct xe_device *xe)
>  {
>  	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
> -	struct xe_gt *gt = xe_root_mmio_gt(xe);
>  	const int mmio_bar = 0;
>  	int err;
> 
> @@ -409,16 +426,10 @@ int xe_mmio_init(struct xe_device *xe)
>  	root_tile->mmio.size = xe->mmio.size;
>  	root_tile->mmio.regs = xe->mmio.regs;
> 
> -	/*
> -	 * The boot firmware initializes local memory and assesses its health.
> -	 * If memory training fails, the punit will have been instructed to
> -	 * keep the GT powered down; we won't be able to communicate
> with it
> -	 * and we should not continue with driver initialization.
> -	 */
> -	if (IS_DGFX(xe) && !(xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT)) {
> -		drm_err(&xe->drm, "VRAM not initialized by firmware\n");
> -		return -ENODEV;
> -	}

Does not look like required thing  as comment above if() already talking about condition check and action. But let other comment too.

Thanks,
Tejas
> +	/* lmem verification must be done before mmio-probing the other
> tiles */
> +	err = xe_verify_lmem_ready(xe);
> +	if (err)
> +		return err;
> 
>  	err = xe_set_dma_info(xe);
>  	if (err)
> --
> 2.34.1



More information about the Intel-xe mailing list