From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 76374C5475B for ; Mon, 11 Mar 2024 11:09:09 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3329F10E8FF; Mon, 11 Mar 2024 11:09:09 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="eDlNlpeF"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) by gabe.freedesktop.org (Postfix) with ESMTPS id 07D1610E8FF for ; Mon, 11 Mar 2024 11:09:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1710155348; x=1741691348; h=message-id:date:subject:to:references:from:in-reply-to: mime-version; bh=fzQBH5ICBEpTRSlJuwMNw4PtZai/NoAlXBGYgc0KfoY=; b=eDlNlpeFeyd6iktpSLDTUNYMEkaH54JueCMVGJWdd+mV0GWq4g01O1VG K6LtFHldwJgHsykUkpL2S2RJjcdiu2KDhZ3kQwoGsevKXd0LFH/S2j+YG Y4/ZqnyfcwsMw9lgwU+o/nWQaEwlSIXj6VJJQMif3J6ChFemDtNXGguOI DoNhoxnDkj3NA+rqWdJIYSOtk3jlFIggqDFHbogNWcnJiSKxOPSDk6s15 5DpYGLjFzAVg3q/pmOeSm0jcyp83EbzCh8HYAkMM2XghknxZkCK2vDlO8 65lfL2g+eyLDMYmIhJAsObGCjJiaKIHBXRUe5ltTli+iaiyy/oNcz0Sdf Q==; X-IronPort-AV: E=McAfee;i="6600,9927,11009"; a="15949717" X-IronPort-AV: E=Sophos;i="6.07,116,1708416000"; d="scan'208,217";a="15949717" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Mar 2024 04:09:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,116,1708416000"; d="scan'208,217";a="42116286" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa001.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 11 Mar 2024 04:09:07 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 11 Mar 2024 04:09:06 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 11 Mar 2024 04:09:06 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Mon, 11 Mar 2024 04:09:06 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.100) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 11 Mar 2024 04:09:06 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MfB8IAOoohncbi7Rtr+CIaBfLNlm7mRubEl9xliBeIhUdSfN3a0IIc2b25Lb5Gi7NBXNQLSMKxO9U5/C9l30Ck7MLh60I1rXTHtM38Wd6eiqM9hQb6q/6efXfhZ+LvMwO7I+Xv/3HyBs3Nqnp0cRF9DtCTgpytw38zduJA2J2ysEaZLbBy7uCEEQRG8344Eo2wQTuNe/dW8YOog3VC8om3PTeCBz56c47845rbWqQ4q0SkrprdhZsuQFiQTJdxVZAbm3FeNmNX1QIWepb3UyZWjGpO4SO1LrPeQMeCuCwrcG0rIuSX3mNV8Ro2EXtYCIclxuhDXivXDDoXbL+C8a4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=uFem4fY/oxVLNTuQlIHZvFFV/b0C/FC7gS0hK5BKNso=; b=W1NnN+oXuJ7elAwftZDLKJzruXkxW1laZElT696AA5htoOU4K+myIFIvJxr02rUcE/aOBZ5doAlwlqa73j8gi67NtMGJJ40FpedbW0ZTW/YnGAi4V6h1E7uM4waxFyTF+0g3po3VVic+Fm72C4vMmK2KaZqe4IVFD6sZlREmmPXO4LIdT7iq66/kd8LP35Ba8Y/JnDXBZMW3QFPj60WE6d64VUno3ZI+LZMRM/lJSbpkhXDrx5lRckU3gHRPmf309OU3kZF6PnDORIYiJxPrJzE/401tiD84JV/nQ3Y1LfLuppZ114WUgxfF8uXn4u4g3ZAcgC/Uax7+Eglpy+sjPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from MW4PR11MB7056.namprd11.prod.outlook.com (2603:10b6:303:21a::12) by DM6PR11MB4756.namprd11.prod.outlook.com (2603:10b6:5:2a7::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7386.16; Mon, 11 Mar 2024 11:09:04 +0000 Received: from MW4PR11MB7056.namprd11.prod.outlook.com ([fe80::8664:8749:8357:f11a]) by MW4PR11MB7056.namprd11.prod.outlook.com ([fe80::8664:8749:8357:f11a%7]) with mapi id 15.20.7386.016; Mon, 11 Mar 2024 11:09:04 +0000 Content-Type: multipart/alternative; boundary="------------Ig0Die4MOpTKvMQy0sgXPAZ3" Message-ID: Date: Mon, 11 Mar 2024 16:38:58 +0530 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] RFC drm/xe: re-order lmem init check and wait for initialization to complete Content-Language: en-US To: References: <20240308085517.2030484-1-riana.tauro@intel.com> <20240308085517.2030484-3-riana.tauro@intel.com> From: "Ghimiray, Himal Prasad" In-Reply-To: <20240308085517.2030484-3-riana.tauro@intel.com> X-ClientProxiedBy: PN3PR01CA0026.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c01:97::17) To MW4PR11MB7056.namprd11.prod.outlook.com (2603:10b6:303:21a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW4PR11MB7056:EE_|DM6PR11MB4756:EE_ X-MS-Office365-Filtering-Correlation-Id: 951ca3a4-a845-4ef1-52da-08dc41bba98e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UxcgWU2Vyu987cZj4iE6AOljU1VrwISwxT/zjdqq8n0+QKupxsQGP7vS0PcLF0MP/PNRwoFhz+0z1NVwIqadJzHVHgL5hiJ3f2QYmCyGHfcCWjuZ5UhdryJBTj4wq1Ifbg0BuK+VG4K0eGuDJQRqrcYaQBvjkLmaUMjb6oLGXTZyIZAOflEpeMcyknQau3HcrGRnHXzmfSbgIuBGdghMpK6X4QM2D8b2ZbC0vB7v+fujSVuEn/FnK59b2OHIF2x5mh4Iw3nZsjuvalmflfd06SMJucwYllw7bJrcFxGGdAs6318X9v7KryDwTPOjVLeEFkouA04Sm4zQV29SREBYzycqadwfAJ1AE7rEiRGL+Nel6KF9aEjZHG9nfTUvW07TQZcBI5pIiPSeaZ4rYJq6CYssp2yU0t8TEW52+u14ns/AjSNdaZpjESuuH6bhliKkq6R7Svk0xy3YioLzYxtNkm2OkP3eeN51TUkNAfMe0UJdbKhYbIuffUk/XdLOzN9rJYX+u1nvbqXlFcgOpGlxrlH3l2sWWJT0pI36aLyz4rB9bGwi27lIKiKk6D97j3+XmNC1AS1yhvJKpjuPdc1GJlPFpUkCNZluu3eIRrochhV1KH9Hd468z/vwYpyrNqk75oXOFYpmQ3w44ugD5/UVr6FC/V7kVF3Q+fRdbVwAlII= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW4PR11MB7056.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(1800799015); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MXNtOWVaei9Xc0d0d2Y1RmMyelRNWHQ0bnQ5SUg3aHZXWXdPWlRTUi9DSVVE?= =?utf-8?B?dXRvS1dhM2pQYTRjZnJqT0t0ZzJTbDlhN0Z4Q0pDVVhaaXdveGhrVW01dnBZ?= =?utf-8?B?U0NGbjd4VXZrKzY2YkRuUTRlRVBJNDdzdzY3VnR2TGFNTUdYVHR2b3YyVURZ?= =?utf-8?B?QzVETkxXVGx6KzNnTmdFZFN5SW1kcWwvOE9iQUgrSjk4T1p1VmxCdDNiZTNx?= =?utf-8?B?RzFQcVduZG83QzV3cXFOWGpOTnRXc1BVUDB0ZVNIeWFKR01hMjJyd0RjdllN?= =?utf-8?B?KzY0UHZzUW85ZlNtWjhjTUhJelIwYi9XNjFsMm9YQytyNjVrQ3d1aXdkMXFp?= =?utf-8?B?OTFhL3h5UU10dURJMkNPZERrdXBRRWVoZzRoMjFIZE5RYUpQby9ITW1KWjlJ?= =?utf-8?B?WTRmYXdvYjhNYUNieUZlYTg3SVlqSW1vNmRXSUNkNVg5RTNrZ3c5UkpidjZi?= =?utf-8?B?QzJ0aWRwQWF0Rk5QbWFTdFA5OHVoeDhEMC9xT1JVcElaZ1ZBVGd2TzNtQ0tH?= =?utf-8?B?TldOR1NpU1VCZXJuTEEwMm00NnhEdmNHVXhFa29GWlljR2dZTEdqTzcyVmht?= =?utf-8?B?NDArcTc3M0J2NktONUM5Q0FhZFhlVjRWYUVTVWVlZFlIT1YyOGVEVjZ3TW9J?= =?utf-8?B?T0dTMHlWSWhPSktVcXc0cHQxUUgwT2JXa1N5cUJnV2krc2xKMmFaMzlNMEdN?= =?utf-8?B?TzUyeW9uYnpJNGd4a3pvR0tXbGNld1NhV0ZYbEtlY2ZQL2REdGYzVjlZaTc4?= =?utf-8?B?QVRLMlR5cWtPOVB3d1FoOWxIN1d4UTNRZCtmQ09DZlk2QlgxNnRQNFp5SUJL?= =?utf-8?B?K2VnZzlseXFkbWx0NkZDMTNCQnBuOXJyNEtjTWdVMTJIaGN3cjF2ODJkbzJl?= =?utf-8?B?Q05LaGlTZThiNTFRak5ETnRFRHpqbXBQNERaT09NY0JjWXJKUUZxazhLc1dR?= =?utf-8?B?U2RSbUwxckNOWGpNaVVCQ2tTc1YyOGxNR284Q0hhcHdETm9SMDVGc3JsZG5U?= =?utf-8?B?OHloZnAvY294dzhlTEpOZUF0VmtYTkRZOXRCZi9BY20yOWd0bE1VaDRtTHEv?= =?utf-8?B?VGRDMzU3VjN3d0pwTitld1FPbVJLN0FmTy84OEI2V25qbDI1a3Z2Z2JMVUVu?= =?utf-8?B?WTFVM2kzdStuektMbWMzWmg3YXdvM2dGN0c3TGgyMTVRZ3hOV0FxdkNsaFZP?= =?utf-8?B?S0c1U3JmVlo1djc5NUhaUTgwRllDTnc3QkJJOTRyVnlqaHdzN1VkUm5GR29P?= =?utf-8?B?L2loQWpEYzIzNEdNazMrUERlSzgyUmZBa2o4MCt4QXpjRWp3dnlycjdmTDdM?= =?utf-8?B?TkUxOGx5R0lDTFBZQVh3dGtISUtNZ3BsVkVLd1hOU24wclVUaDhpNjJPNVZE?= =?utf-8?B?eWd2L2ovYUtyd0lKNGttaUtnS0dJUlFJMjNZMys2R0tORkwrb21rNXlwbms0?= =?utf-8?B?L3dSbk9qSUR6QTIvSTQ3Z3IxWkE5aHI5alQwa0FpYW51MEVtd0NlL2hqbFFl?= =?utf-8?B?bnRHVVRhZEpvdnBIK2NlTU13ZjgwOWNLbjZxRjFVeFNJY3NsczdVTVhOWldY?= =?utf-8?B?aUQ2MVRiSzUzQ201ZVdmZk0veWVDci85dTVvOGFVVkdqaThEUW41Q0dVcE9W?= =?utf-8?B?dzFmQndBcHFuSGRWakV4cGtTV2dnN1gxVG83Q1l0WVRyVnFyOGtNRWxqZkti?= =?utf-8?B?aDIzUWY4ck1IcDNtQUFPL3J4YnBtSm1mMkFURlUxdkF3RTk5MExZeHBjdldh?= =?utf-8?B?NGtXQVVVNm5odzcwazg2akFlZ21BeGhKVXo0V2FTdXNtcm90Tnlpb2JJRkZl?= =?utf-8?B?T0ZVS2VpOU5oWmpLdlpoL0t3YytFWEl2NVRIMGY5K0RndGtaU2xyZkZ2WFZz?= =?utf-8?B?SmFrNlRrVkEydnVtWVdmRnY1aEtPN2dxUUNiZFhxRnp5aXdoalBhQ3ltVWps?= =?utf-8?B?emR1THJpMjV6d05yaTc0bXZkdXRVakN3Zkkya0hmOUkzL1pBakk2ZWtRMGVn?= =?utf-8?B?aEtNZCtmdFMvc1RXOEFPemE5Q3JSMUdNK0lKUGxJRmc2VENsdzlHUU9VTVIv?= =?utf-8?B?M01obHRBZ0g5TktoUkhsZU11UkY4Wit4RjdXSldndGpING5DVmlodGZDc0xx?= =?utf-8?B?YTk1cU1EVXRkTEdLSkxlbVlkUEkzWTA4TVJHU1ZRS0NJK091WjY5WXNnTXpi?= =?utf-8?B?a2c9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 951ca3a4-a845-4ef1-52da-08dc41bba98e X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB7056.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2024 11:09:04.1944 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uhaDR6iaNvSAG30LSyfn+G1bUgu/9WQYdF18pC3l2sO/UDVIC3KbE5PXzVfdh2MBH0xQsfdAXT/QEGO7IagI+3tzmDffDqcKjvIsJVtwlAg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4756 X-OriginatorOrg: intel.com X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" --------------Ig0Die4MOpTKvMQy0sgXPAZ3 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 08-03-2024 14:25, Riana Tauro wrote: > Lmem init check should be done only after pcode initialization > status is complete. Move lmem init check after pcode status > check. Also wait for a short while after pcode status check > to allow completion of the task. > > Failing to do so, can lead to aborting the module load > leaving the system unusable. Wait until the lmem initialization > is complete within a timeout (60s) or till the user aborts. > > Signed-off-by: Riana Tauro > --- > drivers/gpu/drm/xe/xe_device.c | 53 +++++++++++++++++++++++++++++++++- > drivers/gpu/drm/xe/xe_mmio.c | 29 ------------------- > 2 files changed, 52 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c > index 83dd60f68566..4806e7806be5 100644 > --- a/drivers/gpu/drm/xe/xe_device.c > +++ b/drivers/gpu/drm/xe/xe_device.c > @@ -413,12 +413,59 @@ static int xe_set_dma_info(struct xe_device *xe) > return err; > } > > +static int verify_lmem_ready(struct xe_gt *gt) > +{ > + return xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT; > +} > + > +static int wait_for_lmem_ready(struct xe_device *xe) > +{ > + struct xe_gt *gt = xe_root_mmio_gt(xe); > + unsigned long timeout, start; > + > + if (!IS_DGFX(xe)) > + return 0; > + > + if (IS_SRIOV_VF(xe)) > + return 0; > + /* > + * 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 (verify_lmem_ready(gt)) > + return 0; > + > + drm_dbg(&xe->drm, "Waiting for lmem initialisation\n"); > + > + start = jiffies; > + timeout = start + msecs_to_jiffies(60 * 1000); /* 60 sec! */ > + > + do { > + if (signal_pending(current)) > + return -EINTR; > + > + if (time_after(jiffies, timeout)) > + return -EPROBE_DEFER; How about adding reason for deferred probing? lmem initialization timedout ? Reviewed-by: Himal Prasad Ghimiray > + > + msleep(20); > + > + } while (!verify_lmem_ready(gt)); > + > + drm_dbg(&xe->drm, "lmem ready after %ums", > + jiffies_to_msecs(jiffies - start)); > + > + return 0; > +} > + > /** > * xe_device_probe_early: Device early probe > * @xe: xe device instance > * > * Initialize MMIO resources that don't require any > - * knowledge about tile count. Also initialize pcode > + * knowledge about tile count. Also initialize pcode and > + * check vram initialization on root tile. > * > * Return: 0 on success, error code on failure > */ > @@ -438,6 +485,10 @@ int xe_device_probe_early(struct xe_device *xe) > if (err) > return err; > > + err = wait_for_lmem_ready(xe); > + if (err) > + return err; > + > return 0; > } > > diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c > index 7ba2477452d7..7fc0c5453b21 100644 > --- a/drivers/gpu/drm/xe/xe_mmio.c > +++ b/drivers/gpu/drm/xe/xe_mmio.c > @@ -360,30 +360,6 @@ 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); > - > - if (!IS_DGFX(xe)) > - return 0; > - > - if (IS_SRIOV_VF(xe)) > - return 0; > - > - /* > - * 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 (!(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 pci_dev *pdev = to_pci_dev(xe->drm.dev); > @@ -407,16 +383,11 @@ int xe_mmio_init(struct xe_device *xe) > int xe_mmio_root_tile_init(struct xe_device *xe) > { > struct xe_tile *root_tile = xe_device_get_root_tile(xe); > - int err; > > /* Setup first tile; other tiles (if present) will be setup later. */ > root_tile->mmio.size = SZ_16M; > root_tile->mmio.regs = xe->mmio.regs; > > - err = xe_verify_lmem_ready(xe); > - if (err) > - return err; > - > return 0; > } > --------------Ig0Die4MOpTKvMQy0sgXPAZ3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: 7bit


On 08-03-2024 14:25, Riana Tauro wrote:
Lmem init check should be done only after pcode initialization
status is complete. Move lmem init check after pcode status
check. Also wait for a short while after pcode status check
to allow completion of the task.

Failing to do so, can lead to aborting the module load
leaving the system unusable. Wait until the lmem initialization
is complete within a timeout (60s) or till the user aborts.

Signed-off-by: Riana Tauro <riana.tauro@intel.com>
---
 drivers/gpu/drm/xe/xe_device.c | 53 +++++++++++++++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_mmio.c   | 29 -------------------
 2 files changed, 52 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 83dd60f68566..4806e7806be5 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -413,12 +413,59 @@ static int xe_set_dma_info(struct xe_device *xe)
 	return err;
 }
 
+static int verify_lmem_ready(struct xe_gt *gt)
+{
+	return xe_mmio_read32(gt, GU_CNTL) & LMEM_INIT;
+}
+
+static int wait_for_lmem_ready(struct xe_device *xe)
+{
+	struct xe_gt *gt = xe_root_mmio_gt(xe);
+	unsigned long timeout, start;
+
+	if (!IS_DGFX(xe))
+		return 0;
+
+	if (IS_SRIOV_VF(xe))
+		return 0;
+	/*
+	 * 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 (verify_lmem_ready(gt))
+		return 0;
+
+	drm_dbg(&xe->drm, "Waiting for lmem initialisation\n");
+
+	start = jiffies;
+	timeout = start + msecs_to_jiffies(60 * 1000); /* 60 sec! */
+
+	do {
+		if (signal_pending(current))
+			return -EINTR;
+
+		if (time_after(jiffies, timeout))
+			return -EPROBE_DEFER;

How about adding reason for deferred probing? lmem initialization timedout ?

Reviewed-by: Himal Prasad Ghimiray<himal.prasad.ghimiray@intel.com>

+
+		msleep(20);
+
+	} while (!verify_lmem_ready(gt));
+
+	drm_dbg(&xe->drm, "lmem ready after %ums",
+		jiffies_to_msecs(jiffies - start));
+
+	return 0;
+}
+
 /**
  * xe_device_probe_early: Device early probe
  * @xe: xe device instance
  *
  * Initialize MMIO resources that don't require any
- * knowledge about tile count. Also initialize pcode
+ * knowledge about tile count. Also initialize pcode and
+ * check vram initialization on root tile.
  *
  * Return: 0 on success, error code on failure
  */
@@ -438,6 +485,10 @@ int xe_device_probe_early(struct xe_device *xe)
 	if (err)
 		return err;
 
+	err = wait_for_lmem_ready(xe);
+	if (err)
+		return err;
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 7ba2477452d7..7fc0c5453b21 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -360,30 +360,6 @@ 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);
-
-	if (!IS_DGFX(xe))
-		return 0;
-
-	if (IS_SRIOV_VF(xe))
-		return 0;
-
-	/*
-	 * 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 (!(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 pci_dev *pdev = to_pci_dev(xe->drm.dev);
@@ -407,16 +383,11 @@ int xe_mmio_init(struct xe_device *xe)
 int xe_mmio_root_tile_init(struct xe_device *xe)
 {
 	struct xe_tile *root_tile = xe_device_get_root_tile(xe);
-	int err;
 
 	/* Setup first tile; other tiles (if present) will be setup later. */
 	root_tile->mmio.size = SZ_16M;
 	root_tile->mmio.regs = xe->mmio.regs;
 
-	err = xe_verify_lmem_ready(xe);
-	if (err)
-		return err;
-
 	return 0;
 }
 
--------------Ig0Die4MOpTKvMQy0sgXPAZ3--