From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F243A307ACC; Thu, 6 Nov 2025 23:12:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470725; cv=fail; b=HVYQ0AlI7/aUP6Q7S/H1rTpO/HYsfIxKkAy5NR+2DqXnakunFEpwgb3JWtT0h/1qWVmqkN5uo9yy3DmUl6Y+liIMsxxhCLLJAfCR19gmgxAEYWy6bAFhEgb+UA1aGNgDNXKDOxNiT/8NJmOwqi3CdJK/De/Dai4tUTpLqAc27lo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470725; c=relaxed/simple; bh=HTxdfDImJK/IupkivlcQlw2FnFS1CgfEN9eUl15PTlo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=drFu4Gz+nLryvdQF7N23dZRdXx7BUq1U53TeiCl17jG26L+hD3yO55qDWirvyoMQYK1g7MEc2ppu9IOHeRK97vQkzhvhsY4/OSVNjzEuU+gyAXRGxaDwM3t7DbmzZmMhU3y+XY6WQb8MBa3nk0+NLbSLGp6TAtV8UdhhLf7EaKk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=my3HMRSH; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="my3HMRSH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AvE40SK7HuP6IqVk50h+fphPsgnWO+jHPbL/0JPys96LuhFDT1vxI612lmcO/tM1FZOgNYBpXo3YErkB4a8zXbwml7ZPT3HS1xQl17Pm5qPginMgTBnzlxBE6mSWHkQ7yiQFVSVlC3eRdIhnRMj8z3wZ55dfwQA21glvwArordP89pTwYNSHrnk+A0pEU34lz93UFV4x+WdCUgb8IHv3TeCHdz7YmfjwE/Iv11rAy+lUNpgm3a+1h5RuGaMi0OikHfSHOb6r9V8JXHZ0KJlrmEIKUlVVbGG2eI5cpIgB6I2XzFbx683Bipdo+/I6LLM84OJqo/v8M6COfmqDi+Sg3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=WmLTQeJxdQhuU8LIHyX+gsWBvdoqe/m3vTcn0/8mJjQ=; b=F9c7fHw6WgHOlv7N21p1iDMcITmrJ1ehW+lekViqa9OdTV774RbG/MGIMWwGLNs8GHG+EE24OHEPizXEaa7DyvdGSt/IaNlAIMZFOXSTitoitu2foFP6eljr1k1f5Xw+EKd6mHe3mKULLtCfa769n1NpGaO9WTeLrie9KSPe9l/PTsmxqgUNgNRL6DMgvtwQW6O7Wrf+/cnVXNVtYBKkvw6eyduCi1wjg+ywT1y18lZgxi2Bb79CrnTvr+PlS3xPaonYGpYusmN18A+jYgY9e33Z5WANulQDf6FsQcHKs2Pt68eP1JR/qt+rOfJc775cQkEww6XtI0QxgMK3XkboFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WmLTQeJxdQhuU8LIHyX+gsWBvdoqe/m3vTcn0/8mJjQ=; b=my3HMRSHpHYQYU3S/IVEH2r+Bi7+/ZupJONOnzwkIkxYghYRG50VZzHSnwwfn0eXyE1W2or1rZgVbGJgqhS9i96Wb9ZkoSPbFnbPBfeJzUlFupSEzwEtE8s+m1UboXsO/KMsyyENryg+222HLWx4EeDA2mh3HpX4uRMzZOLIPJtowcuHNmdynFv2AuComqULyE2ePs3pGK8Eoe+kCejXOrlYZR6Aj9wkFWl3bQyNJfEMZ6gUrEJ9uEoHeywcBlVtCrh1zCRfcpgEy0hNMmKMBSSkin/3MgdNXsBdpaR7nizS4r7aTYM31dlO/0aB9nutLX3AnYjKdIuMHe9p+iVBUg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:11:58 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:11:58 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 01/14] gpu: nova-core: falcon: Move waiting until halted to a helper Date: Thu, 6 Nov 2025 18:11:40 -0500 Message-Id: <20251106231153.2925637-2-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0174.namprd03.prod.outlook.com (2603:10b6:208:32f::11) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: 25166dfd-dad7-4ec3-5d9d-08de1d89e2c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?4S2fclYV4gDRmN4Y7IxRrWE654x7cubKvwYvJDMsRFljpnwMmKM/oqT4rIfK?= =?us-ascii?Q?wGyS1mTM10DEArzgMnwYWDATqOGNhS/DUj4Mva/zDBY3CKwa4Ty1ivFQF9uU?= =?us-ascii?Q?t31WXgAkrVemju7ttnp6/rMPX6ljZoTvoftEJcxNsubb4PDFHCdvzSPPVp+E?= =?us-ascii?Q?YUrVSsp5NTCOh1jk66j0QDuC15KPjCyZHCG1IEsj1mII3ZcpToWBO41Nzec+?= =?us-ascii?Q?ZL7TSj1ol8CoIqcvIRd/XV0W2EHH4HDAIHCWYZ623rKEqaJGrGDctQAYwFzg?= =?us-ascii?Q?+kDFSeotCMT/CbuRN7w4su54be9QqByvLJzLaPDR8UvB5uvAeynrWNpFQWMM?= =?us-ascii?Q?0bXAqCGjlqTjio44KGXL/hRmOANZ1pxE6Ds1e1uLe2BV2uHDJ9XzPrI0whe4?= =?us-ascii?Q?XqKlxPlZyd184ytjDpM0SLFtBX1P7u8dS9xPdIC147EB/yid0Oi4D0SYvhwU?= =?us-ascii?Q?m0DkqcBc6DIWfXgCrztIKcp8XjqbnMe/vnQIN9qInYQ2m9WDDs4Kd5m5Xjmu?= =?us-ascii?Q?liSFSV0xW0p+ygMOkGVWvjBWM00xOxTFBbKMc7Jfog59GEGlAnbdw1atLous?= =?us-ascii?Q?TfQlIIh/Q6W9J0Z2+1gxlnUcqR+D12ZEu8vcylVOCQ4CNESGXjxpEe87DNF1?= =?us-ascii?Q?KJtPCQf0gPL43U50g3esx+l5Kur4Z7i2UpLaMMWf+21nMJh4J31bGy3ND9yN?= =?us-ascii?Q?srbzntfHN0aC4hnMV6Kvt8iY/pEm1dxE1suc/g0T9fKzwSfKxwKCMLQ04xR4?= =?us-ascii?Q?sLuyYN8P1EnSZZwezro2Ww9z89NuwfSgn+1NYaSCOjUoG7RBIgqOBpWgemsi?= =?us-ascii?Q?U7AcQg4dhPZgz4XK9h2Q9L63TO8pf1IC7qFdFV9sNNtZZAHVNv4frbhsF0v5?= =?us-ascii?Q?7P/FfSgcThGSHRowccHT1Yj0Y5vzKMK9jsBlTigfkSFBRA/iDJ2wXPDDHI0G?= =?us-ascii?Q?gictVxSD6mDwAnNglwKvTgsOMU7A10fKyiSKUBlg3NxGrt3cEvu/z58dQJue?= =?us-ascii?Q?tSIqnNlGASPNgsrip9FaLONFcTwhqMbThv8D9//GwLjfv0UmMhjIw/qqSeX5?= =?us-ascii?Q?hljU8T9QXquuFkg6IwHEgfaDwYLxJ9k2Bmx0XWqGliI8f4sYdbQkiNZ/q9Di?= =?us-ascii?Q?IdyjLkPQUetnasVS6fgyXx3WnCpcXdTxySOv0L1OnzToNBHswFFOMeLjZHLM?= =?us-ascii?Q?Bgqz0rf3lKMp/gETEjmIwhmXVORM6ORSRsA4+l7hL67ysBez+n5W9pKSOU1c?= =?us-ascii?Q?ca3uwG1ChtwYgbMzSDqf4cTi4jHXBBOuk+RrHLy2/gPiFCEjlipi5OjPOsR5?= =?us-ascii?Q?pa6HKvncJ7B19zfOhbAdJqJIm5JS1kMTIPPsG98wAikUF1qZ6Mq5YQFCDNFd?= =?us-ascii?Q?xY1lBP3aEWp2WRI+GW9sPvjjO25Qe+JUdNoQygvqrrX//AHkI629NmjiFcqV?= =?us-ascii?Q?yyxQUgRCRrZaUN65YUBPNsrNnJJM2Kq5?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9bkn1rJ660/U89U0iTjrVzDnhaPLNwOG6xPpZNApHsgtGqlUcMh4qdoQX1TU?= =?us-ascii?Q?5P/dwstoWy1VrzeGg8GFKXA4KZxq1oKJgGL5drCKSqF6LeACyv03bdx41Njo?= =?us-ascii?Q?SCjPRuvennUvOl8G8Ij1uWB3HXCV4FM0tUSav4d9blL9HBgRou3k72ezhYfi?= =?us-ascii?Q?qF5p0vc+UnR0BEA6Y94g2GITFbTglKhjZhAbkHBr4qoZ/n5R2OeS5F6C5O2J?= =?us-ascii?Q?20t4CtlxxaCUDrz0l6z3t1TVlwJflzoG8XLMQQdvlFEEcqAEqkV1t1hpoGi7?= =?us-ascii?Q?TFrK83fEKC9+vVioKgNAznmdV+/RJP/N+4UZvyB/TaR88GBcWQgKp2Z2+e1i?= =?us-ascii?Q?QiGpFsIURz8kdi1tW09g1HCFoQv9sZzNAh5YVM8h5vVUwX2Ag705LWMdxT6O?= =?us-ascii?Q?oCcrDbu7Z9UDBxx666z308zT/cgCKw/tk2BqYQOOPhsdLhOBmiXbcrUDvhvI?= =?us-ascii?Q?heV6jTT1Q2zSrk855NMZ1KZvyGMhIW2OmImHsJg8p8Ge0pr1SdnsCIqPXixA?= =?us-ascii?Q?z/ln/zULMQ6hpJvI2dVDJHoHvko0EoCQwcc2A63pt2vF/BJ2Zzn3bUs0mqYG?= =?us-ascii?Q?MsM7kAokh/sPyR42hUyWZMW6FTt7J87r5CO6mRDgNMfCYye/u2ztgUZ+i4S6?= =?us-ascii?Q?jxF2sDNeOJEFXHC/o6ofOZD07g8aPPNg+8EAQQKUJRa6iBAns5k/LKoE10L9?= =?us-ascii?Q?6heDpNLqmIONC/+Bh4/tiPAHdKQwgsPIK6ntrg6IF+XjTXTZKPV7fwZL8NBd?= =?us-ascii?Q?eePR7OMf4vo8PquyXWs+o6O4UQ3U3SrzxZuwep0gSxZ+V3i3ELExEjzMCeVq?= =?us-ascii?Q?F8uFxsoiaDqx8SnQScnNCjjn1JL1UOSVIqm+ZWKzMkUQvLiqAWmzpSZbWRSX?= =?us-ascii?Q?DyJAqdpTxdIr3+cWhWbWBAy2V1wkb/HR1iJJRsMb6/eU593GIdgAIoPKZwlr?= =?us-ascii?Q?B94KrO4Pc/UKzKQIRCSN+EyIElxfTV2hH0a1pc7GO5tynPg3ttdcJL96exyd?= =?us-ascii?Q?rusJkezLJdh9CLtjnfyRiqLBeCwrqxY2cbvX+mTOAiVchR94p0NLbwWtJ4Ft?= =?us-ascii?Q?IMa1eVO/nxNc2dfd5W10YUMo52QkVf2/ghGL7zb+OHMKhwkSJ+gWnbRLEauP?= =?us-ascii?Q?7m89iah79I4ZuAQIQrKWfQ+xK5Kh8NoGpChzbk+ZPznjHZbrz+gI5Y8OvCyR?= =?us-ascii?Q?P1SrF6OgIeDB9kTB3kmb3vTgIVk/D0LuB+6KBHpCZI/Q6xi+J1l2OHyHLgLi?= =?us-ascii?Q?QZr1adbJN7R9DYGR8fg/ThSFfU/CZRY6jy8K92olZHCQbwuU9z58ucys79yb?= =?us-ascii?Q?hz7gu4qBQPHMGJfH5KrDHyxNzk0epmja322GpFS4XRa9v3MSMN7fADkG9oQ7?= =?us-ascii?Q?eLI9HB85Px4hQt03Iiyq079ZfzH/fJkcqkrngm5+few+dPWfaGtEjVech/pI?= =?us-ascii?Q?EHxcIZC0Yj+c04uJglGVUMSt9ATNsgFuif2JJKQerl/mt2O9BVv6/iwHIG6g?= =?us-ascii?Q?kPoSqy/OiP6EVoYA3ojDXGMhFw+xnQTwyFyTz7OwMJ7D5fwfbbLP6ZSoVray?= =?us-ascii?Q?Qmj1cLHB0WjWx0d9iA+xk99WoC8w1CJbK4oLfJ7e?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 25166dfd-dad7-4ec3-5d9d-08de1d89e2c1 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:11:58.6939 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: sA3UktBL6vhvYXJvsnlu4rJd8T1zTzWZSSbUAVWBMyfkl3C7Y2cnlv3lyhWkefglZt+CvGVUJWlJHDMLopRItA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Move the "waiting until halted" functionality into a helper so that we can use it in the sequencer, which is a separate sequencer operation. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index dc8c2179935e..dc883ce5f28b 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -540,6 +540,19 @@ pub(crate) fn dma_load= >(&self, bar: &Bar0, fw: &F) Ok(()) } =20 + /// Wait until the falcon CPU is halted. + pub(crate) fn wait_till_halted(&self, bar: &Bar0) -> Result<()> { + // TIMEOUT: arbitrarily large value, firmwares should complete in = less than 2 seconds. + read_poll_timeout( + || Ok(regs::NV_PFALCON_FALCON_CPUCTL::read(bar, &E::ID)), + |r| r.halted(), + Delta::ZERO, + Delta::from_secs(2), + )?; + + Ok(()) + } + /// Runs the loaded firmware and waits for its completion. /// /// `mbox0` and `mbox1` are optional parameters to write into the `MBO= X0` and `MBOX1` registers @@ -574,13 +587,7 @@ pub(crate) fn boot( .write(bar, &E::ID), } =20 - // TIMEOUT: arbitrarily large value, firmwares should complete in = less than 2 seconds. - read_poll_timeout( - || Ok(regs::NV_PFALCON_FALCON_CPUCTL::read(bar, &E::ID)), - |r| r.halted(), - Delta::ZERO, - Delta::from_secs(2), - )?; + self.wait_till_halted(bar)?; =20 let (mbox0, mbox1) =3D ( regs::NV_PFALCON_FALCON_MAILBOX0::read(bar, &E::ID).value(), --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A67522C15A0; Thu, 6 Nov 2025 23:12:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470727; cv=fail; b=XLivfnjfloEeO1BHoH31gpeEEiLBDB2/tjDEKqkMk27i4to++rYDxewMhVCj9YpKmQ2VlwEisYGO2S1LOizsP/2atTCCL4sW8mlzCJRx10ey07L2NyQcj8St0XzTt6fiGoSuSuxUUCnX7XYLxKFdyJnD0MyOnTPn9F36aaJZqeA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470727; c=relaxed/simple; bh=HC+5sA9UQJ2hwGSt2vtk7sN0UV94U+29rZskNsJWN+A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=mniog5s4rbCYTWBX3hOJBDLoUiLNqjO5yOXtyuBwXOQMoYw0fQv5eXMAQPfXWLehsRO9U06hLrtFRy0bgl47YMDAVXr7HehfjuPxvO2yPwOCdndL31EE2DUxNC/cR/B8yklwFOMalBiNx4nxqujRAhb08TMqVslUFGGJnbTbIN8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=qn0f30n7; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="qn0f30n7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jFG3NHBAik4sI/nAQUnMESw6SI0nduSZ/sdYFStl4oSqyjkBAvx+42nkHL71TQ5Vi0BF1ep5Ddr/Iw3/ktT87YMp9YYdjNc1mSBlxrseVJClNzEKD2j/lnWzR6LdCXH/3UAmA9KiUYC1cMIOLPohtd2PPcuQ/UUfb6VRdL0omKdpddNLXaMfQ8UzXObgUH0lmwiF87Dk3kqyz1mrxu97gCBPsEsCS2vVMToY0io/MmajcknXtxgONhfOa454A3TiXEhzFKdzIO89rmuV/7wGVeixd82wBNPLX2tMxPMR/EMJ+m3TekJ/U8l09a/EzGKO3jnu+t0sLQ5zcAKFkXmBFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=BXtaDiMwenpXE/+nTZlHah+JklsO2nSDnHgrNJtMEzc=; b=fgEV7MCCZcvhcngN4SRLJT9Qi8jhdCdN6XklT1zO8QXg3a2L92Gk/qYmacp1KMGxZpYcF1ZQd0PIIWPnPPPL2OQCGLSU+w07P35siW8mJLFvwDlmUqWVRkf0YZZeAodM3AJke4j4t3qLk1n2O3kJEKSEnWE3GIc67YrVUZc5coZ1BK/JNgPxt4t9/1OYO2LKdb8uUc8zUU0I/LAEulRCK1DhLOhjNwBrUwz4+IkptOODDc+JQkDSnMxs4MPU+rmQVR3mTluy8Lu/gDxQZtQCzksO1eRYNztGooiK9h0RgdcaN5Q55nf6wCMIx5u233W7hlV3da7YUeKafxw4IitNvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BXtaDiMwenpXE/+nTZlHah+JklsO2nSDnHgrNJtMEzc=; b=qn0f30n7QKrTtQNnz7YaAZ1YPpgbA+E9eQxuIrB0KbaKBNJ5V6wXwnZPqfzAYOuu5xik5uZqvG3jrXPYuVe0ycnzow/EeHB7B1/q6EiSS4LEB+gl2EbM5xzfciKkxKV7Z8gBUAeRiIIzij5wcQfQUkxwZqOuLkLjq4CB6AaqTIZAIpSHQFavjT7qOYBtfuoMPVwdXjxvUBCqjdewjT1OPUi51yf2Dsli36bh9sDRgPVyX63Rhgohf3tl6qLXhlUp/8o2M0YJ+9x+RlvSMKE+HT473YvPWenvDj/UKDeCnHMgcUp2mmb+vOcXoSYShy9IKy7r3PRjBxHmrCGer1qAIQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:00 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:00 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 02/14] gpu: nova-core: falcon: Move start functionality into separate helper Date: Thu, 6 Nov 2025 18:11:41 -0500 Message-Id: <20251106231153.2925637-3-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR10CA0005.namprd10.prod.outlook.com (2603:10b6:208:120::18) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: 57f618fd-723d-4223-8a41-08de1d89e3ae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?DfDNmQWrJiMPbPyxmVhOkSslN9F3oqipK/mTi1CTONo6C4Q3nPLfioLKJHEG?= =?us-ascii?Q?Ek9RMiatd9uMuaOEI7m+oeZlfn6DI1nTuIYYwaCgvTiBWrsaOnxJ1/28M608?= =?us-ascii?Q?fbNbfbbkqZRqKnyyx/Uvr17QXG78GppYgjVaRT7ds+dmqIy+pyuEMsTTpXnt?= =?us-ascii?Q?JTvDa2b1fjX+jCAcdhK1+UieG5DOrJvQeMU2Y1pEFWUtU/P6vC2J8/e3RWLN?= =?us-ascii?Q?eOjYWZcUV6xQnxvBph8qk2/AsQQDKy3DboALYF1Jzh0kPtQPDPJSeXgP7/88?= =?us-ascii?Q?SkdTF+M1WAm1zu2ZWN3dJV5XD1b1G/9s28VoTuoqKQVox2EEEVsTs9l5acFR?= =?us-ascii?Q?uhy64Mr/LmORgeTaewQsBoI4NQfJM2oKo5khbXVQL0RBCK3mOP7Yus6vdvTn?= =?us-ascii?Q?Yaamc/CTUP931s8OVW+XoXyYZncpRftbilj1h732Awx6hy6mcT0Fz+0QFysK?= =?us-ascii?Q?YIVd7PnvDZu6xrzbz+vNu3vzF5juc0glEOBL1836vPVV6wzQYzLHUeo0C0PM?= =?us-ascii?Q?rXBphXXEYR0aB/wprLsdvq0Kvz5zGqMwKdqbBnaR+MnNbYVRQmbNQq2IwhA3?= =?us-ascii?Q?ld6I+U8H/LPl/bwjzDeMM9E+WJ1/y4YgCgx0jzyNDDtvq735qZW1pgz4tCQ6?= =?us-ascii?Q?B0GiCqG1yR6x8QzqT42KSnfUv2LPd/yQpnTqXQq/bppgb7AO4cASpzbZc/RZ?= =?us-ascii?Q?8HKRimkuxC7WKBBYxM0qdWLa7cZFcmKr4JnXhksf0YDNQf8qCBrW9qEh1Dwq?= =?us-ascii?Q?PG9T0hv3i+dMWPaQ7Q4ST41Iful/hSe1GT3t8Vr1vyMWqRXkCeyKj5924k3b?= =?us-ascii?Q?jugrTn5oMqR6AwuzmwfNyJiA3b0JvdRwylqbeGObrBrDjTcytFQdp2dBvfvW?= =?us-ascii?Q?9apwpWpO2y7cy7BGP2xYF9dU9D9E0j2VUMc+oR9lkYzrM1tbZQ73TWLHHarp?= =?us-ascii?Q?yAn1ZhGipXwDGdothAxTMa03ejyVc3qKECVnPfcJCSsPefSSkcvnCmHCQfdR?= =?us-ascii?Q?23rVJALsny7RlXreaTfYXUeRwTCdIP7+mhxcnbzaWGhPTGNNxTD5G7EIb12j?= =?us-ascii?Q?fDk5or2u8O3X2KfG5FZ/pZFJvwSqOyTuKBlcde5Phk0o5MEvLqel3dfOrZeH?= =?us-ascii?Q?MO6uiedf0fDj75AeyYZohqo+ebAE+DrEvcIdkMnAXmtdlAqLJMbxYLo44ELV?= =?us-ascii?Q?A7z7jc5v4bcYQfYKMpp0Ee908GqGhvUzHNtaP5sQ7neLqwVALmudgyMtBFGF?= =?us-ascii?Q?2bSHLrkVRGycnHY0UMT8F485NBtDX7vU3fyKbSsSuRqOADyc/rwYtFb/oZA0?= =?us-ascii?Q?TCRrdnvD9wAvPbFPVHvzxoDML/qOV5NWklhHO0Yox9l0yjiZ0iPczcq+aiyz?= =?us-ascii?Q?6bDvxRd4sZnnWGEU1qsVMWfDfDceNkgLJqVAjThO1Ec5Hhb+OfjQNcT3lq3m?= =?us-ascii?Q?/6jVhINWnRNYFZTksY6bk4nSjoYD9LvK?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dfFQKDvTO7rO/eBAQUDzsPO6Fq/EdrMq+qpma7U53OS0LyQs7FJmyRIVyBQl?= =?us-ascii?Q?i4Ct/tuKt2xH1wt4mlkidpHcYF75chFQVRpoIBUoF6ZPGKhzgzD3UKcFCTon?= =?us-ascii?Q?iJmMc+jpIJmp9YbDH+f2LOXCN2ijDGA6LPUjqhb/v9ZFIayDd3LK5pldND85?= =?us-ascii?Q?5Q+u+zwcx4C2D62ePWikMxzSrqy9YBxk9s0FNU75tRvTwwt3OAqoFSSlAeLI?= =?us-ascii?Q?8ISW7Gs4Q89qOR/nXzfuVeCqeViQSPWZ7nCjGubSuVrCJ5Oc4RTHKz0dWmXk?= =?us-ascii?Q?e4hxODcXGossxR19deGysXMsyxRcA46pVB2ZQnlk77lv7frwxZwgWXbIgeXG?= =?us-ascii?Q?B9fXPgxmaMCMB/pp9tg0XxHSVJ/FZyA8ANtYn6iqcSyVckslC3tjV91stCfU?= =?us-ascii?Q?r8YY3eYO08IvThdTrBErse/PhsUpDfk3//tB84p8FsaWXxg0DX3Vu/nJ28EK?= =?us-ascii?Q?BPqj0oIL5dwGVKWI1M1+SbGqfmBRSPLqqLpY379pedGCurrIWFdX8WiS+Lga?= =?us-ascii?Q?g284foV6h70fTzPAp0aDssytM1PTUKHx16fdz1DZHAclrhFd3DImlAMZ4KuG?= =?us-ascii?Q?JCuA+O7/zl4Xe7nJU/eYSzGpf0Eila4H46q2Ik6Xm1wfYeYrFUShgl31huEv?= =?us-ascii?Q?tK9nK7gafzc6t6CG6XTKz7ococo6ERdwotfSW2Wc/81OUtdyKz6yw3/6vq88?= =?us-ascii?Q?zdVzrhv0DD3lV7uhopv7pmzDHRxEo3bSlVrNLvxs0Bul6PtbE0Scup/Qv+7S?= =?us-ascii?Q?vK8LeanCQWCSoYBt7DneAc1M2ZPAsGKz/dRouwo8GAqCjJMpOdEDW6uPLO/x?= =?us-ascii?Q?RyV7fXuqPNGXe+iyAWUxhwTKUR1Bdp/M7Yfe8NILQtn2I2k5NCY8OFIAjtrI?= =?us-ascii?Q?qUjuMLgckSVqiPmAZMRJmSCSkrf97JGNVGHzIUsFdjMsejyPsuOcfi2LlXGB?= =?us-ascii?Q?obYhQVhPG5imTRrZdKosuh9lmoX2rBXhil5ajVmOYWBEfRHsfM6Z45yVBQDm?= =?us-ascii?Q?DzuNJKWdexVyx2oI6XsUrBq4fAXrUJy9Ch2GQejUl+kstzQgbYfXCelfvoz5?= =?us-ascii?Q?T8pLxroRmDFAbwYvFepugtgIAxIyScljhDdmt6Hgsks6RFLFOJ1xMYL0scsO?= =?us-ascii?Q?teOYcMxseCHKAoJWbvWgCLGliKVV08fnkEqoPFozyL96oLUmzHNtDeO6eE7N?= =?us-ascii?Q?7yYdculCuDyQVYIM+wgtTrZYqMIsiMi+Mn/7BKvXq7nfvmNHVQkwgFBTqnbL?= =?us-ascii?Q?mOoyVKQj0lxPBVVIbIU2eVek7hY4c798asgT36DYn81rptbt0wZGln6NUcW5?= =?us-ascii?Q?fh2/UcJyEC9OPc+P53OBZiRCuy57WH7Dsoom9EgPWLfhKrVbomR5DY0Mp5WO?= =?us-ascii?Q?UM1M7nrHYtPkyZH1h+HOLKaXSZ1ROYXgYjh9siAIspyK05lTTJFArlkXzyRv?= =?us-ascii?Q?xIHgmgKhJOtxAmDul0f7p3tn1h9gWsMswdSjTgpDroAMTcDq5ZZMtpOJ5DT9?= =?us-ascii?Q?LSot//K3MGmAaYCFw5Tz3fBv6Pk8n+OxG/wNAmzbjIw2/tAJZC6mCdSNQSq8?= =?us-ascii?Q?uwBIkQM0royO+0vTxa3tUvZxLRM3xlyxZNOqvyPz?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57f618fd-723d-4223-8a41-08de1d89e3ae X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:00.1726 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hDU62T4pnDdxutBX1HIF0Lod1nxxU702Rza+bheqoyORkUykIhtfnXk76eiGOPxat8J2GF6IpUkpD0qpbcKzRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Move start functionality into a separate helper so we can use it from the sequencer. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index dc883ce5f28b..1bcee06fdec2 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -553,7 +553,21 @@ pub(crate) fn wait_till_halted(&self, bar: &Bar0) -> R= esult<()> { Ok(()) } =20 - /// Runs the loaded firmware and waits for its completion. + /// Start the falcon CPU. + pub(crate) fn start(&self, bar: &Bar0) -> Result<()> { + match regs::NV_PFALCON_FALCON_CPUCTL::read(bar, &E::ID).alias_en()= { + true =3D> regs::NV_PFALCON_FALCON_CPUCTL_ALIAS::default() + .set_startcpu(true) + .write(bar, &E::ID), + false =3D> regs::NV_PFALCON_FALCON_CPUCTL::default() + .set_startcpu(true) + .write(bar, &E::ID), + } + + Ok(()) + } + + /// Start running the loaded firmware. /// /// `mbox0` and `mbox1` are optional parameters to write into the `MBO= X0` and `MBOX1` registers /// prior to running. @@ -578,15 +592,7 @@ pub(crate) fn boot( .write(bar, &E::ID); } =20 - match regs::NV_PFALCON_FALCON_CPUCTL::read(bar, &E::ID).alias_en()= { - true =3D> regs::NV_PFALCON_FALCON_CPUCTL_ALIAS::default() - .set_startcpu(true) - .write(bar, &E::ID), - false =3D> regs::NV_PFALCON_FALCON_CPUCTL::default() - .set_startcpu(true) - .write(bar, &E::ID), - } - + self.start(bar)?; self.wait_till_halted(bar)?; =20 let (mbox0, mbox1) =3D ( --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F4ED35504F; Thu, 6 Nov 2025 23:12:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470729; cv=fail; b=O3M0ySeYRII7U/euLqZo9ylShqBSQtT2y2DNWORutzOMaNaM73OSSe66DtVm2/4GzshcGMmd1QHD9oTDxyZiu2nLRVjZbPlRJgEVk874JoPM6fIOBaHepSQzAsrlCSHHuZIdJohQprgyKJvhtJVkqdzrQFLBMWDZZ2kyNaTDfmE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470729; c=relaxed/simple; bh=RxumXX0yYRUjy2uetTpfGxX59vd7lPQSKiw3K+W/TKQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=KpWPz+pIcHyuZr417V/sMjjOeQm4n5vOw3hSItB0Pd/MJ2hbERk+C13T0NjYdwgP/OI5EusLzmUoPBTP/oO094eKA1DkzXy/kCn70Ak8zvEBhGMElwbAF0ELZ32v31VpeJVQUzhPIpKUWbS8wwjA/ST4k7g/A15BDvcMmqRYlqc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=CfjL5uLm; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="CfjL5uLm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YZUflgKura7CDoxOoE/ibgGgSzob7/0aBS48k0TkTJNHnFe2q0NGlwMuhWchsxhLdKvVzwu2hNyKu09VbREmMPY5i4LQPhB759SrYotwoAuNhE5XqCMf82eAiDW5Wzz0rv4moDfd02Aj6kQoi3iBPiF8o8PG9B5wMvEcZviONbI4VA/RGUbDHmiV2GH4i/HlaL5qAKGOczBA3zzfFEjcr9++jwVxG9ZHyvdDSTHDu1eYVnWg5W7yqZtovu1QB5NW0gbNkTok71lsHSgfooOfUB+6E9sQ7jluU5OGpefN3vFrhvpb9BDGJaIGKU5Y7KeW/8PRqT0goDomoN+Ng95OxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=SQnRc8hQNy22K5Xma4xC0OmjnaZFggZzqwvUe/Bw5Mg=; b=ZX8rl+v1cV823NM06hXxuTAaalJCt+Blm6u4HsGu0rzczRMGLv9I+Cm+1D2i7I16/Rzv1O9/BB+RWLtGJIRD/y0n8UDvCxhT+afrdAFLGE/ntSOxFiUniizdroPCo9eMA/am/QeZ2owVpBgzYw1Ju9ObA9wTzgR44NGIpkxThLZM57n0ofhQ6Fmk1sWQx8qAnI4ZsfSEXOdcfauzRb+eKBz0UdJa+xfui7dk7nzEcuNZuocBvbO2keRzX5/xF0HwjelEUwJgWTd9BmJ0Oj0ZDm1bI/um/xTszqgZZJmIy+knvZ1G5hbYKyJwWOqwr+NFLOYoh7tek1yCwgXEhj0lKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=SQnRc8hQNy22K5Xma4xC0OmjnaZFggZzqwvUe/Bw5Mg=; b=CfjL5uLm7jvbA6dhdYNamCHyOJEvutcDzeHLEZ1tYl7eDpDj75iqrjswJIUj9F2mfDRgRf2/xXTPfaB5TD6Kocd2QylsFrBWSqSREPzYeGTau6R0sVFwoM/FLCYSqQfiVE+5KeyARDCCtNBMJu4cPEdDRcCnkQJs6MrAU76hsXCTHV07/OILq3GiJ9UJ63vRBaWASM+Xw0+D/DEFXMaiC11N4HWCEGvAFbPEqQ2ip7ceSdu7TAH7JNmrim2osf0KHhlsvhFaptqHaYaC+5TctUo8HCEo5viotabn059z1qoOrEinN8kDedn4dI++qA4PqUJkgJbG2FO8sWV6XpMJlA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:01 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:01 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 03/14] gpu: nova-core: falcon: Move mbox functionalities into helper Date: Thu, 6 Nov 2025 18:11:42 -0500 Message-Id: <20251106231153.2925637-4-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0PR02CA0007.namprd02.prod.outlook.com (2603:10b6:208:530::15) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: d2b22017-1b26-4e1d-2730-08de1d89e468 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?wvfO+YDNrWHqAO14Qlz4OmKVDsjt2Y1rixxD2W2TXGrJEkllSNpbKpNJ64Kf?= =?us-ascii?Q?NI351IIeGXkmuVpQVadrLizEr16d1OilYMWOwSEz88TgT7VKdM5IgRPRfwyo?= =?us-ascii?Q?S0XwYSq9tOKdETy9BZMJbSIOzQgJ8HSfG/HMiHn+d0Z2hd++WcQI+PAQCZpu?= =?us-ascii?Q?SjJvrRa8wk3HvoxF8wcT1LyziDa50cnLTXyi8towCoScLpd/B0UzMER66cTH?= =?us-ascii?Q?oJJSsLxiQmPiW70mNJBrs3LwfUm1HZtPOiel+N42Q8PkyrkmiYq1VQpispzt?= =?us-ascii?Q?XDzwmpcBHRVPvfQVLmi5qMknsJ0YajYLzWY9QTLxci4wt/8fYXylE3+fhe1u?= =?us-ascii?Q?EEGbXQurb33P+frQkjTHUb/esXxk0T3R2j0TPrqT+Tv21ctTA5Hu+shG64Ng?= =?us-ascii?Q?IOW+4vDfDci1LvRlYiovChJoF18P62V7kx3GNYY5h/vO91h90RGHTWDg8SLV?= =?us-ascii?Q?POXDvZ5vTNNMAQ2n/pLOf37/sIOdeZEmAIHYfa6FBcKCTDA6a5zU4MH+KYkT?= =?us-ascii?Q?UzsSdREExRu3LqlC4emn/1kxBnmPzl1oKUi8+SLT4m9XOlMgR13p5iffFMDg?= =?us-ascii?Q?cRyeZOfQseJQqcALFGX2dE3V719nnzODnAADDU0tpWGOn+Sa4meLCoOjn9OU?= =?us-ascii?Q?cWTo1lUfm9UK9x5qDPyqYFZCyECeP0MP69ifdbHoIGzvWMqM3y9T4Z2NciXQ?= =?us-ascii?Q?36fxqlpqaZDOg23v9iNCFeNs8v58ZgknrO2OKUXmH8E9xaexZE7xVyjo1H6B?= =?us-ascii?Q?uH1oyyol9LC1WMgrrD1OZ1A4yRJl9Lo8dqKhVrHWn/mSDoJvcMClxWGAMauM?= =?us-ascii?Q?+XKARpuYUCsWbUnFo8Wj7r5+JYkeD2ZCpsKk0DJuA/yRY6+2hYjpf0c7+tIH?= =?us-ascii?Q?2OwKafjrHLtBJ6i7pkhRtjYeYUwZg+OCEyg9GnzUj1I9bH6Ysp77tLEdtUvX?= =?us-ascii?Q?o+cKDlMf76xp5LdwhPQvGstxgJoFYySJvlwW+oy61locMBrRhpaDn0fxaS5u?= =?us-ascii?Q?OkBf4JH+o/yrpGZPsS1b87KvOrzsTg+jVRle4MohamwYaBkIgpwbfmcyD20h?= =?us-ascii?Q?FvYG1IIoG+l7D8GqiPfIwUP13h8qE9KPdG0ajVnBFj//qkHQnYImt1bNDmiV?= =?us-ascii?Q?L69N8gErK6iRdfkkeE5ulRt43LAUwzFE/ttG4kNPENG15PopmwBg0G/M0VYI?= =?us-ascii?Q?VpUYMzZi7wbdwfAufCziwxH6G5gLpFRXnZFlr6ZY0Z2ShTLyh7YPLn5b/QWJ?= =?us-ascii?Q?4RnSEmUyFTPhwBtFsdNO5cCcdDvRf6cOI+Bg8PalNUY7UKmRLIDFq4ZpV7jg?= =?us-ascii?Q?nhPaU3loH9e/XDIqzKrsyyY5da8K6/WmutfACY6TpDCyvweuhdBzC6Eyrt69?= =?us-ascii?Q?iDvpn5Hc5raLn2Zq7/ucr4knH6VMaHXdfOd1OcwlJ4fT01RNSR/2J60fnt+S?= =?us-ascii?Q?V4zApQvyVEhXyOhDuxQnvCi/DqemdU4C?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IlVZK4vEKl6lIbNfY2mtQjpaUpDg6hdu6DQQNYmv1T2mBRFVZdlec79c5Yns?= =?us-ascii?Q?9iER34TYT1jwDNiygGWYCrwQqJhugS93u4orTHoTrl5NZ7ynAcuLcbJlH6rW?= =?us-ascii?Q?v07Z7iiyGNFgVI1xewtJ/1KVhjmPXFmztJUIdunLOZ1WvgTObPfyF1HvzAsZ?= =?us-ascii?Q?XxBsqMBCHWQ+Fxn7rj50Cl86sYBQ8RHgUNe9/QTUEGd3cWptvMdKzJ7GQyr3?= =?us-ascii?Q?dd0kb/7+1iQ29xHpSLECYQ5Og+BWSVABaT8U/ncHGILL7HoR2eQ+hQBHlDUS?= =?us-ascii?Q?og7r5nFIHkJr5mKc/L8jlAh3GWIsS8gQch0W1J/yC6UKXNy2Nu5NRbL2mzvm?= =?us-ascii?Q?0A1yJCv2CpFPjRltmrVAQryReoXakWO4f5lGWaoZq5bhCTk5RKD/eKj9NiRP?= =?us-ascii?Q?/IkfIpXYA36izDsxw+5qDat3U4aB13LIciys/BXs+MDgTlYEX+Q9RZzpsOVl?= =?us-ascii?Q?hOkluE33LlvdvG9lHe4ee6iJL2PVa5VomvSXOrJtRS0cGUdz3XA6wloHJeQu?= =?us-ascii?Q?mnLCSLZjXHLgglKzH3WxNZ05GzA4EkvUPcHOqlJPFhBPtedt/KxSSd3O2Qps?= =?us-ascii?Q?fpxVeHqn32lbKB0h5eHe0GybiUxB7XcUqzAI/KPeCu9PJZyt/w1dUtxnRzbU?= =?us-ascii?Q?uwACCTMeW+3cp4xnZiMLmoB+znTR92QnhPI3IqTQ2nRG+AcSQp2e8IZOQsOX?= =?us-ascii?Q?RB319AH2PN7EZXX0ApuGxLnNnSfqC+RMXfYjxGlVDuoQvazWBOhoXtpvUwQ/?= =?us-ascii?Q?weaA6qnDnPJMTSO3YSLxcaYXSH6+0VkVb43imjCEHzv3qROiqHrtjUH7fIs6?= =?us-ascii?Q?ER8+R2O4jI+QOBVi3P7/rcaw3bjsgOftZprvgyDab0kVS2+3Y56Jk1e7rsxl?= =?us-ascii?Q?tcuFKSqcE+mAUlpKGws98xKMRoQS2mdFIEVjxOjWPrSCj+A0TThMkOb8lSLd?= =?us-ascii?Q?MDyB09tJbt0Bg+iiJT+v4W6S8o1PJCHS4o9dPj3Co381CaE8fpneincCgBw7?= =?us-ascii?Q?XMMgkK88CpsbcuVuODx0oQymoe5/YwH87s6nGRKzGQG+TKQ7Z8y0VwdvCF7U?= =?us-ascii?Q?lWG8Y+hWUrgquta/atz7MSlr50iaHRbcOTwhk4Fy7EwImcOtiT7mozQUzlSu?= =?us-ascii?Q?n2bWryfGenXC/9Dtsx80BKYs1AhbTxoOH+ADcpitMTsIDKH74eTa02F2UtTe?= =?us-ascii?Q?10IVpksefaRvsq+b7v0sziIEuKK/01Q6v6H3m/jrt9CL/H9Q/SDYnKDH1pvh?= =?us-ascii?Q?uSpMfKcj3/CX0fp+SSEtjnqHCNAZ7eRItCcehIO3iQFjJANjlD7ZcRZHhhFp?= =?us-ascii?Q?oYr5sOVKg18dIxK2raFfmwYtSIRadfBNITOpczAbPaF1tK9zxWuKsIq70Toe?= =?us-ascii?Q?JU/sZ52fUHpkwV3vup2faeQ8FVPJmSGsDLKHocVtloySwg32KfvgpAa2o1Wp?= =?us-ascii?Q?UEW1FvM+T1B2i+zLjcwJckiqUrhCyqziQwcfNf1wNjdBg2lenoHb8bmedGuJ?= =?us-ascii?Q?rFJXqYhl9uGpMg4V+msa02jQ6NOjHD2MfA/kLyPl1R7ufYBtD4/ThT3L7JrA?= =?us-ascii?Q?Grsx7um2dNgwyr/+qeEaXpq+Bsv4sPRsxebkblep?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2b22017-1b26-4e1d-2730-08de1d89e468 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:01.4303 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FxEdv1T9jXTfgDUtC9oXGTBChZZV2GE0EJa3aqKWNqepF45c4YSKTLRGhbEYUUWEC2ZF2WAK23po98aBm+s7Jg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Move falcon reading/writing to mbox functionality into helper so we can use it from the sequencer resume flow. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon.rs | 51 +++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 1bcee06fdec2..181347feb3ca 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -567,19 +567,13 @@ pub(crate) fn start(&self, bar: &Bar0) -> Result<()> { Ok(()) } =20 - /// Start running the loaded firmware. - /// - /// `mbox0` and `mbox1` are optional parameters to write into the `MBO= X0` and `MBOX1` registers - /// prior to running. - /// - /// Wait up to two seconds for the firmware to complete, and return it= s exit status read from - /// the `MBOX0` and `MBOX1` registers. - pub(crate) fn boot( + /// Writes values to the mailbox registers if provided. + pub(crate) fn write_mailboxes( &self, bar: &Bar0, mbox0: Option, mbox1: Option, - ) -> Result<(u32, u32)> { + ) -> Result<()> { if let Some(mbox0) =3D mbox0 { regs::NV_PFALCON_FALCON_MAILBOX0::default() .set_value(mbox0) @@ -591,18 +585,45 @@ pub(crate) fn boot( .set_value(mbox1) .write(bar, &E::ID); } + Ok(()) + } =20 - self.start(bar)?; - self.wait_till_halted(bar)?; + /// Reads the value from mbox0 register. + pub(crate) fn read_mailbox0(&self, bar: &Bar0) -> Result { + Ok(regs::NV_PFALCON_FALCON_MAILBOX0::read(bar, &E::ID).value()) + } =20 - let (mbox0, mbox1) =3D ( - regs::NV_PFALCON_FALCON_MAILBOX0::read(bar, &E::ID).value(), - regs::NV_PFALCON_FALCON_MAILBOX1::read(bar, &E::ID).value(), - ); + /// Reads the value from mbox1 register. + pub(crate) fn read_mailbox1(&self, bar: &Bar0) -> Result { + Ok(regs::NV_PFALCON_FALCON_MAILBOX1::read(bar, &E::ID).value()) + } =20 + /// Reads values from both mailbox registers. + pub(crate) fn read_mailboxes(&self, bar: &Bar0) -> Result<(u32, u32)> { + let mbox0 =3D self.read_mailbox0(bar)?; + let mbox1 =3D self.read_mailbox1(bar)?; Ok((mbox0, mbox1)) } =20 + /// Start running the loaded firmware. + /// + /// `mbox0` and `mbox1` are optional parameters to write into the `MBO= X0` and `MBOX1` registers + /// prior to running. + /// + /// Wait up to two seconds for the firmware to complete, and return it= s exit status read from + /// the `MBOX0` and `MBOX1` registers. + pub(crate) fn boot( + &self, + bar: &Bar0, + mbox0: Option, + mbox1: Option, + ) -> Result<(u32, u32)> { + self.write_mailboxes(bar, mbox0, mbox1)?; + self.start(bar)?; + self.wait_till_halted(bar)?; + self.read_mailboxes(bar) + } + /// Returns the fused version of the signature to use in order to run = a HS firmware on this /// falcon instance. `engine_id_mask` and `ucode_id` are obtained from= the firmware header. pub(crate) fn signature_reg_fuse_version( --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 695563559C4; Thu, 6 Nov 2025 23:12:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470731; cv=fail; b=I//HAzr1nvCe3uZ7k78/TRlrmh3e5OprRkfhdf8dnSrkb0fzz4sKhUUSG5wIqLxF7aKis4mTQWXw4MsHxwkJ1jbxjPhESUZpKxJ4MWvxXfWXQ6vUZdT8MrfsZf5FJ67yj0QvRO/Iqy0A8SK6OpIiE9TdjvCSJ0arjzHk5+UaNNk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470731; c=relaxed/simple; bh=9sy+wda3r6jlYFdsnOPV4HRi8DV+MPWBx+p34cyBsBw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=N4XYEHILdbiakRl18mMCIBgm6CkOgJ9cjTgBbxuqkMlSXk/twbH7M0hxjjfQ+b1a2OSvbFpFvYRU0Xe/NgGZ0qybZJUJfF/eaRK3WRu0aq86oy5WxP4SaTTXsPvCPvjg3RDvoyUISt4BClEmu2sAaX4oQAK1h6nKWVXFbLm/2JY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=BDWOwFve; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="BDWOwFve" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IOqXl74qr7sEE52G49FBySIrkJzOGcjxiKzC2jR53K/zdImW71YOYaNm1v66a6Rrfz+8S1h8QxrFhhXmhSRlzwNUHDbquHibBGw2raGofZCsokrMHGq8X3QaF3E1nEVDIbn7QxmjBpHdqvLIZHooVv7SWkJJ1WLSvGSHADhdRfrESbYo1PzZ5XylkFqIDD/UjjZwNVAzeVVf/bC5XHXLnZNF81VnvurZ27bVKtbGRYcrY/wBk08jzj2Jznvkyn/VzEQKkPQ7P3WEeVdgg2SYGRapoeXqKZRRtpCm+50zrI0X7OHFjkebF2K/HTiyhEV6/lGr5wLj2n5R49AHFhL0kA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=YTVpQvybMtDc9QmIeCrOhBkg0OB+tKPgr98O2xMsdAE=; b=PJpGYyrBeRMV0ZVk4meVxn1w/RMspXQ2x9ITv0xFIq0Z/H31pA1gvnG7LBjHY9+IHeEf7a+LgBdl2ebIOwGrFNv2b5K0Bvysj89fMSgewkH74rb9CJYcxjaw9ZQYNXJ+OKxACdJ5mRnEPJjVwBnzIWkuNle0ncp1SpntkO30KNnfPEjHl/mq0K4XIZXOWO5h5w9W1RR+Ow+4tkvgyd/0Lem6/K9nLDZ7/17GLKUhr4v2B9d4hCd0du3mLm4kRBoWdfj333s5tvUDaU2OhV5gLMjF+UKur1yO6VUCihAjzGWc2EaQRmdgtydu+B7G5dX0si04mkiont1HusJ1JpCWIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YTVpQvybMtDc9QmIeCrOhBkg0OB+tKPgr98O2xMsdAE=; b=BDWOwFveBp2LDEp5tGjPU5Ny1Ehhc+uDseHBElvRC4sR/hsq8dvuJuQMl7/dwdOunnHHbmS9Eg+qgtwB1BFmDZecATzKFK2Bo/kkhK5XMuPYV5VyngOrQYGT9fCyMXI8zORvTSEO3Ph9i6ZK8kVbaWTj3RexLcue9+mrlldiQerIkdxVzP+IngjbaCxZbjunaG0L58LkvtGlj2G/Y48/t6at3a0gpR1H0FNWHxoEc+ASqF8VuyFZK4JeXLdDzY4BlLctfxwJ2DA29OvxIZLlT6teQRCx0OdXgzGAYaPM07yXhat3+0evewY91jcBEbSw6yXWx2iF7X7ntJ4us7MlTQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:03 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:03 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 04/14] gpu: nova-core: falcon: Move dma_reset functionality into helper Date: Thu, 6 Nov 2025 18:11:43 -0500 Message-Id: <20251106231153.2925637-5-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0P223CA0005.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:52b::22) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: cd472e91-c44b-4703-de97-08de1d89e554 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kYM2ut9eOABgUri1HK8RwiT91nMU/1G2n/9Iiv4z3b5eSl6Y3m3jk+99B2+Z?= =?us-ascii?Q?wm96F75G7qiWvJGA06Iwb8fS27/oU8V+et7s7lQlZZOwbkNl94kvJRcXB/Fi?= =?us-ascii?Q?YnGyfC4cAixaVy3Y3bxaEVTo/alGHr5+ZlIm/y+lNtplDJSD2N/uU9FeugCA?= =?us-ascii?Q?Fc07t0Qr5D1hHN9lobH2txjhM/kcCjRA0UUApRIxKZpGRvRob8HYRQrFeYAD?= =?us-ascii?Q?55b5sxT4SdGfxVMAtbmDfN7AbHhYqWjQNFmoCz33Q1LGkvyfROcEECRad8Kh?= =?us-ascii?Q?9bDaDi6Ce6NJuIchHH+7V6u/cGZI5oOznnGe+S9Xaie0AoDgReE3KeosmcAA?= =?us-ascii?Q?daIDdJjNZObecrsN8hXhkNSeDhtvsy0IF1XtHce02P/SYlp51TWYXZnjKib+?= =?us-ascii?Q?FKWKUpzwo3RoW7IZxtvg2s2UT/iiXO7swVcPgyURVxf0d4wPkoL1wd4MADLT?= =?us-ascii?Q?Ele0yvB+SHN+HYltx7FDX6GMwomOLRr4pehkoHv6oiMbxWDBpESBOJA7No7P?= =?us-ascii?Q?wUBZrV2M/y3xL6IbxfhA+SmdgH8JKRqn50+IWKF6j5v1d13+wwTZSybZd+RP?= =?us-ascii?Q?C2t8oBAR4DgiGRsbXK9E4KQnJkcrgCznZSMXGRKMz9uWT1a7SPQXXNGbSM6Z?= =?us-ascii?Q?B8QdYJXdwSzFQoHCKE+leLfBdyo3r2TOR35dWVJyxOTSAJM701ZD4bIwxn0a?= =?us-ascii?Q?CN9NXFJfP8/CI0BABYqelllJFEsZG7DloWsY+TdUoXvQrysKV7luRO7sVS4c?= =?us-ascii?Q?JnvBCaRgEKdPfGaDH1nUpsld752uQu+PGMVFurLKyPRpcnqdmoovzN/4oCB/?= =?us-ascii?Q?p1IGJ+iluHyPwpFXL//b/gW+LQkxCROFoYu5dmVjoOOu3CSxZgRdgKfJWJ0x?= =?us-ascii?Q?O6zsqXmistp74iyAzDvTf6RUalBCzFmTPQ0aOeDF1wW5QnVsIrEDo0fGveDi?= =?us-ascii?Q?v2OntiR/dUb6Op9Eoy+4ob24Vclzc6JnVLK6H166i+mI3WKgNeobYJyVfpLa?= =?us-ascii?Q?Kb8lioetL/GnGr8fuMsj/LoqC9RUk/9pl2VFefh7k/kZ70bUfvOGDn1221J4?= =?us-ascii?Q?N8EtVrGwM3RMKjc2L6XYLH8R5WPFwGhagWRmuLI7tUaBKusVfRhLK81i6zkc?= =?us-ascii?Q?W0bwBYHJ5ScxpOKdDFIRpzyugXE9SxbKwCO9Gb+iI9WWZKaGpekn0ANHCgmh?= =?us-ascii?Q?jw5X0BJS0xXnEpiEw3P2tBDmZ0LmqPHmUrkVk631Tr7R6Op4OafAJvD/xksQ?= =?us-ascii?Q?kZD0iRbbEHAiTOE4xe1tclb0slz4meopK3LvuhEweZEjc6AXQXgfo5ShjYlV?= =?us-ascii?Q?Zc9MgTocZtOdaj/vgpVrHAwoCbfxB3SbPA+hV6WCslwHgs74z2V5M9LCBsBk?= =?us-ascii?Q?0yhGYdb/VhSlfi1Z2jf/jKfgCo3mm8ikGDB4MJ/MvRucgGiIsSurjTIVnTqy?= =?us-ascii?Q?wLMPu6lVF4OW9Kbwr8tppQjqzG6HtQzq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VRT/LDdAvid8sOkY8cmTJFU+hCjpYIZDDzNo+aquLDYPYmjWG5lobADYrRey?= =?us-ascii?Q?IvJ6B6jQyU/kEZjYCjw/gRl3ToDI4wx3iJZYW1AQMtvwlFWltyC+m/NmKgpd?= =?us-ascii?Q?gp0T3Tvz7hlWfRKisMJrIkJXgEtSLMTIzJvjy8OVCGlqETbzFw7X0U3wpSQQ?= =?us-ascii?Q?lDdcFmIEUR3DPyONW6y0c2VnrgmrYV68U/cXOnbvICqvZ9OchhTYMMZrzIw+?= =?us-ascii?Q?0g1+ov6P1cgS3ogJHeNVjo5f7tAk2Wq0pYN9OBdZo378GhWcptYAhOV8LmS3?= =?us-ascii?Q?vAnWr81RvgkpEaS+cQY+iUIW8yHMmTMtn9bNMJhrm2ttFLzDJ5U8mTaQDNlL?= =?us-ascii?Q?y6kzD0ThVSWhQ4h+hq4vtFvsUEoNMKzWaXAEjuR6cPE3sQEWf9aJXGFb8F0c?= =?us-ascii?Q?Mv394ZeUwsbgVs3fykY1ghOKyXMOdh4Mf2i1b1XnuBC7Yqzp4WlX5hbuknis?= =?us-ascii?Q?0IcftuRztJWc8MPLB1Hk/Soc8pPs+DgS1OUKr1ieG8r2GRaRwfguhskdKpiX?= =?us-ascii?Q?MVnWechKSjRGtY4POmD8pzKWT2ZYS52fBeVbeG43DYUcHxv/++Cil7Y6m2l7?= =?us-ascii?Q?T0vBNfSM9ThYhYiBtLO9JZD9zEtdFBWeGJjzcA3hc4sQ+XB+rDbssUILW73F?= =?us-ascii?Q?5d0jza7uDUlwAXS8IAh/cJrt5R7KrmrOwWKRZ66635/T5p4lO0HkLbod4FEn?= =?us-ascii?Q?4c/3w/mQFRWDtRKleXbLlsg1xWU9OfTB5Ef0hN00nF31xRGVNzcIaZIEfFuu?= =?us-ascii?Q?0O6cnjiwUFsY+oQlZ1npuujb1ibroNf88ntO/jIow5PLkGMk8t72eO2PnH2o?= =?us-ascii?Q?aTrj0v6kHIIU3SPNr+AHlNmyI3XF7eFd6VdasFFWmm8W4R6oSzt+rAIXmUSv?= =?us-ascii?Q?gtpSLZwTUByLE8aJdGANhBYU2pygR/shdDW2ak32OoD4ZkjDOip4h4uIpH7D?= =?us-ascii?Q?hoQEgmhTxTqNjuVsgb/y5dFWOdw7c6A2WaCYTZNnSxjjPxOCx/uS85AOgSWJ?= =?us-ascii?Q?4uTPwGNNh4jM08Zh64GqBGSjFbfk4xx4FP51UMddkWwQ5YFVuZa9d2RweMii?= =?us-ascii?Q?VvCQfbEHbYsn1pRNVXIslCTsTKeYxoXfumPyCczZ7mZVUzgU7lAMG7a7iVT4?= =?us-ascii?Q?IPdiSvxSCYworipZZRZ/Ysozf2gkQkbUmfaD3XDUSQauhFfjQTRzzr2NIP05?= =?us-ascii?Q?k/rd0OgIc3LHGL5QTEFtNjye7nOY5Td1C5pr1c4XsaAUAdSE0GC2hGIBrqey?= =?us-ascii?Q?8w/j6PTnvcmrxEyprS+zVitrjxuTbAb7VrxGRNH+n5JtK4pU+a/NLR35+ndZ?= =?us-ascii?Q?ToUx2qc9PLKGUHglB7A9v4w2MicDWP4hUEl8t9gcuXhdboSHpllKlAM29cwR?= =?us-ascii?Q?htmFmWa9u8Lyazk45WNcRu2+f63StQHPETvSp2gCPFVUOSVeeqsFC73Nr925?= =?us-ascii?Q?KwyexDEpvhxEjDSGmwfTgmkkwDhnK86tcfp5cTW+b8DK14TB4W5tN7rzEkvH?= =?us-ascii?Q?fWxzVolDUYySKTrUDOC3asqd7/vI8K7jKDj/iX0ImweyMbpZx9WSZyxBsmKP?= =?us-ascii?Q?OGbIsSRJDQnND/Bg7lqofx8/2HIn40GrBDlJ2k6K?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd472e91-c44b-4703-de97-08de1d89e554 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:02.9652 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dam+4Kn+vw3nphZy+l70VTH3HU14dXn06qV7sc8Ttyzgllxcv63yP3WJypXxlPRUdqx1D3ilHQYLqzDFh5Cp0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Move dma_reset so we can use it for the upcoming sequencer functionality. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 181347feb3ca..964033ded3f2 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -371,6 +371,12 @@ pub(crate) fn new(dev: &device::Device, chipset: Chips= et) -> Result { }) } =20 + /// Resets DMA-related registers. + pub(crate) fn dma_reset(&self, bar: &Bar0) { + regs::NV_PFALCON_FBIF_CTL::update(bar, &E::ID, |v| v.set_allow_phy= s_no_ctx(true)); + regs::NV_PFALCON_FALCON_DMACTL::default().write(bar, &E::ID); + } + /// Wait for memory scrubbing to complete. fn reset_wait_mem_scrubbing(&self, bar: &Bar0) -> Result { // TIMEOUT: memory scrubbing should complete in less than 20ms. @@ -520,8 +526,7 @@ fn dma_wr>( =20 /// Perform a DMA load into `IMEM` and `DMEM` of `fw`, and prepare the= falcon to run it. pub(crate) fn dma_load>(&self, bar: &B= ar0, fw: &F) -> Result { - regs::NV_PFALCON_FBIF_CTL::update(bar, &E::ID, |v| v.set_allow_phy= s_no_ctx(true)); - regs::NV_PFALCON_FALCON_DMACTL::default().write(bar, &E::ID); + self.dma_reset(bar); regs::NV_PFALCON_FBIF_TRANSCFG::update(bar, &E::ID, 0, |v| { v.set_target(FalconFbifTarget::CoherentSysmem) .set_mem_type(FalconFbifMemType::Physical) --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E3C0D2C15A0; Thu, 6 Nov 2025 23:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470734; cv=fail; b=e5COI9tDvl/CAQ1eULCN+8IEhqrbztHSjddONDYHwDupkMm6ib/jj11HS/IiHG9g+GVyYA8edfww5qj1jcICgUqV4x96asafrBonAHk7Vv2y4swZcDYpzhDjENn2KekP/vtriXLtLk49S/VWYXZCAcS2xSXLcgKhc/YccD7sO0k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470734; c=relaxed/simple; bh=pMXZ3AzczXr2yI5iE3x6XIBbqEqpGLPbMccMsKIbaec=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=qlCtpIFVgcG07PFT/gBycLrR+qmIdXjJZzOvmt6T0OyJ4PyVmVVAj0O1/rJuHFbXJnudShJQMo34vlzLnJhrWzctcrjCgCNt4M5Bda0KMEo2aJ6Agl2yXz2KmrwfWOHZylljIupUqdDNr2++brgd/r4MgP25YmhZ5J4sVQf3UYo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=GGYTK+dU; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="GGYTK+dU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Qq8OJPHB/TY7LGFKxn9rb1QFgQwipqOOpRu0wqI3iYOMv24RUnBvf9uz95JXJoYAFdzjPayhX9J7PdIdztNtrvtHw75U2IxsoMc3xF1ZE0FKjE8jDK70YhHytlL5DqkugEZZfsoB0RJb4LNX3pfAYLWrCvHLsQYQIqR+AThMYuEwNy1gd4wZoHmgM8TE344K+g9TjU8mJpVbXOyL/2ek3mhbalbfpD48liP/qUHwOX08PrijToFzMj5HQv6UioTod8WMT/FqBlVXWmwjL6yyJ4cLgcDZWhqOIjDtOX8kXKcQqkKmw/pnsYPA/woW2ejf2ykM86BjjsSvP30pL9wNhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=VgdSgtMW/YTnN3nMZ8exvGPkGhtvwAdRuy1NO1NvmDY=; b=FGt/U6R1gVNicz9hXQ73iy4scMKPfijqAA8/m36smim9wYnRVY09kDiuGrfynwKFgf4zE0dUFs6PciHO/dyx/DObrwZDQvk+JCdzqxOliN/1GILUxJdZl0PahY4He2PEBZtVoJIgAKz4+AObDLtyanAXFD08MT9Zv5Ze4DaKOQIkKJZCBsAADrg3G0umM3i4V3Zu1afzeAzWcmAhB448khVUlgwZzJv/1OHRDVgXC0atFYH3qCI1QO33BjKQrRxK9QTxH4NEVj8Vkz2WTvNDpuuW/5/xpTxY3rKQ46Dyp8ORdk7kvp6exwKRCISyugvnyCf0sI99wUeX9fkBijTcqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VgdSgtMW/YTnN3nMZ8exvGPkGhtvwAdRuy1NO1NvmDY=; b=GGYTK+dUBSItP8GkcAvJZCSU3tT61r09OSdspE4ZhoUY828IbwPDwRCHEzzyWox8usL1sfXW0WlMBojoKmJnyjfS2WM2k72l6ZHBYmYxEZTxwrwm8wnk+qlVDd6HTNs6txS0Q9OYKGHT4cETOvrtA9qNWDTDklvvs1rSxZzhAnoVOe2QsDguKMcPjtMhHLMkU3pO8GwcMDL62iTozSXEQ3HbQKLpbL3bc5TR/Tudr9eQIJvS3tE6T7zHdCMdNRon6mTVMjMBmrvW1pcR2pdl6gdz5Fcu9FGxBikEQhTX3oFnsmrPWYDQIM0nIkAedHwPc1p3Aaz6TgLMkULtfdcrMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:05 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:04 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 05/14] gpu: nova-core: gsp: Add support for checking if GSP reloaded Date: Thu, 6 Nov 2025 18:11:44 -0500 Message-Id: <20251106231153.2925637-6-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0179.namprd03.prod.outlook.com (2603:10b6:208:32f::33) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f734213-e0b3-44e9-86f3-08de1d89e664 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?yPgf5OfV+pg8VjAvrax/mf/M8A3RmzoyYVDOpQ3HbGESli8O1kUuaPEnpBl9?= =?us-ascii?Q?rvQmQETU1rdpD6yXVdaB1PeRNMCIR50+Rqcw8q2ndx+1gzVIHMH3UJgYOacr?= =?us-ascii?Q?TG6zY1Vgx0bA+kUedzKxZaoaEdTvLo7fZ4j1w9v6xwZtw4NF/8f9W4kq7w1F?= =?us-ascii?Q?VSMupummryFFI9Ztalt5Kt7LOUNPBVuPQvyy5sRMdf9rc8n8vwkZ6NQcBh6O?= =?us-ascii?Q?XrrtwArS+WGezUed9L4bIzcRBW90izsBykhIqYQi+iPsxyG6p47GoKT6FOSA?= =?us-ascii?Q?+inKBYYX0v/58i7040QQs+ER9ZNsR5swGzeL5Lh7a/i8ALrFLKA6XYCZIyP3?= =?us-ascii?Q?s9EJBTa6fyTc0q7C1lw952oSKxwRXekQLbO6f7PAtDexL9veksFhOBZy0aHS?= =?us-ascii?Q?FUQfC4kgHN6YgB8Me9cqP3DCqJy+FiB/xryE7nYca+mskXTc8feOwhnFmYiv?= =?us-ascii?Q?dziZmdVQb1aRHl/Tc0FUdR3TcR2fjr6nDFrMI/lbF3fU8sBZVoGIeHMAd++t?= =?us-ascii?Q?5JMLKUdNCw9E/1StEHsLwSkE68184x3ImPUc7uohQ5eB71GHY4MmeZU0ZOGH?= =?us-ascii?Q?asbcxkoliUVT6VqiPjiy2npV/5NTtsNmmN2DpicB1XVYqMmo73qDSMkd6Vq7?= =?us-ascii?Q?Gw2kqaM9VdnjSKHtAQ4Eg74UcJl2y6ze/+Y/bR/6ulmqBzFjaRJm5DeIXCyC?= =?us-ascii?Q?mTZyUhozT4Dd47vah5QU5UrlRDH6vhrCwtAwM0wPJYfV/Tk/zHVzqhkB360t?= =?us-ascii?Q?ZVYJEf/6X/7es0oCzsbxPCVdvlvBtwNBDRy1aWc36tlNP0ohuh0Qy26EcTSj?= =?us-ascii?Q?0KY3qNV56VFZkzYxQRVFr4hU+Komn/VdO0gqmihpZalRX0XcLpcfR7bNvLmO?= =?us-ascii?Q?CXfSYrU/m9Ff8zV8kJ45vhp4OxeIqL0hStcGhTPSWSQ6uTSc1WrJCuRgLBZQ?= =?us-ascii?Q?QUeitj71qTJb/pvhs1NylpPuwFJbA9+4wjpVRKVXcZ6n35mja+p3TYzenkwh?= =?us-ascii?Q?h6ScYrfGp+rkFE+TiztUA1JgVn8gaOUlHjS7SXvI7LVLJelPW6mKhLNAhFGv?= =?us-ascii?Q?msVRkzbrQVF9xoJ3rBsshEjvpvVN5T+D9RpZalCXaVzjZxEuVrtid78FdYgb?= =?us-ascii?Q?jLjCT2HueO5F6ZVzmkVak6PmtMwC9Jl15+qX0a422aD0NhxB9522i7aXu7Zs?= =?us-ascii?Q?9jiT4tJemzMCV/zsdfrnUkjcx950Xdt/HgjNoDLbsqf9V4hWFp4vjsb7DqUl?= =?us-ascii?Q?XlDk7XI759jygycG/co2H8HTvuisjAedrL/9gStLNME8DvL3GVrt7R4sBGwX?= =?us-ascii?Q?f7XJ/WCzuP2VBC4/hCdxmoPDrsxG+DbCpYa+yhfwBkiq04Tt3Wj4asH/u1kY?= =?us-ascii?Q?nUL/2HAiutTr5+Ek7xbGvR0nbiMNO3Orp+wZ7WcdP+NURVXpor/CDT244Ahh?= =?us-ascii?Q?MyrjgI1uBMhmv6oBqKUjNaAikqwNsnVf?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?G0yF2TqMcW2lHL+Ggl0ZdqyueusvEDPfC9Si1DdLyycEJ/y9ov66q9MQ7LdA?= =?us-ascii?Q?oL7ZNwn1azdyIQoaapJAMyM9xhz8P63oqUI+LYerQW6KFHukKu5+IlTAi8B0?= =?us-ascii?Q?3zBsrMaRYzkJEd8iqMlTP7SDHt4xxYARLWu0inzrDeITGrBUKnD6qZiaU7sP?= =?us-ascii?Q?VFCyfOex5plNnhMYVwDks8o7zTW4B5fiP4TwNSwKb5idBRcjTYfzQcGSqKD/?= =?us-ascii?Q?pSGKVxUg1Jy7zqRXshB5BbmZeRpsvRHBkl8wM3qap2/h+fsVNF3H6s1L1SYo?= =?us-ascii?Q?6UKZ+QcI/mfxHgcbq+6scR0YM5QBezjikJAis2cWTp3YKD4m7/Ycjnx2C5Zp?= =?us-ascii?Q?4ZgwU/WNPEjHW7tYhZjvckgLByThhPWan373N5QwKqehtbzdnOWoZhOGl5fp?= =?us-ascii?Q?LF+gQ4v9FBe27pLzPXK28GVNG668hR6v97Tcos6YKsqqpPe34RLnB0egYk5M?= =?us-ascii?Q?LlxN3e7zXvcpR7ML3A4QhTogCZeUObUZ+J+MNQk1VJBDLb2sz80BbCTtg1kj?= =?us-ascii?Q?6e7trpdITQSUpoLMWiX3qmPSVwKpeAWCVkEWVgucCXD9v9i8lJUFyROvgbKa?= =?us-ascii?Q?txjE8a0VgK8SPo4sYirJtcWYRxRV1t1UPwPLuYuQRWJmBMJu3u+NBfbqn1df?= =?us-ascii?Q?AbdKZ7W8y0nD0As/lNaVJYCvdPnx1rQS/zRTQR0si91hW4LgTT0di4+vx2uj?= =?us-ascii?Q?lKTpDlQCACRBhp1tDPeDBRDAmbAvUXh0k5Kxk6iG86hP+dmYJyZ6zgvU3XDk?= =?us-ascii?Q?ywpNLpP3eLS6W7BPnNxHUjnSJqdkEHS+mRE6zrYWw99YqbmTX4kg0b3ft9Z6?= =?us-ascii?Q?1MYQk9f+u74asr03CSiUxc/dbLXWchVbRYQT1I42A8CAPDFm92Tg3q7a+8W2?= =?us-ascii?Q?tmi3QZElAFQqrFcRniQMbuGmgnoBIGJC/Skdtcomr9DWC+CobvWa3awUPFDI?= =?us-ascii?Q?bn8h4RRs9pZ4bhqRfYgs8QHohWGEDtSddPUXSjfqKhY6n5NM999+8CvDUoP2?= =?us-ascii?Q?xcBMdVu6axy0/M2C9azfN08lOcqgyHY5GF6x+yv9MO2heUiI/HEbWRL8OKp+?= =?us-ascii?Q?PhZlhXIIYcaZiX7hJI+lEVq3+Y4s8l3aiY23g1uAKZeOGLh/Y+4rVaCPQ1hP?= =?us-ascii?Q?JswwZfwYfufo39mZqGNgbHhCkVNWVwMQNdwSILG1e1523ym0w56SRZeiEUAK?= =?us-ascii?Q?pJn7mLO0AZIr8NEDpcbmUIjydSJ2fBvoOeZYHK4A6gkzDP0PevZV04/GcGk+?= =?us-ascii?Q?7/h6ZOvlWWR4cFB/Ny6jivIC3HPw5jrZQkrINSe9cFYr3q3EjWaopTiZM9T2?= =?us-ascii?Q?wxgBtYDtKBc8RLJt2wSCFvD6rNwjEQPsA6lw892bQ8fK6tqbFkKhsUQmo7g5?= =?us-ascii?Q?fAEitZhPmHItVKNr9P1rYXKd4ESGZ6eMYgMP6O+CzrMoTy59kpSuZNlQoex8?= =?us-ascii?Q?wNnpRa55TppszYEBIWDi7rUJ47QBId3+sa2bKSyG3RgstF2EzARBjeSDA77I?= =?us-ascii?Q?QQfAppmLJsX9cJrpCkJF2Wsqpf8h8d6WmaRQmrx2kxAXLv7/WKg+e8J65p1+?= =?us-ascii?Q?eqr92WI5v0NFo47XIZZ2nYxLdPET3rCJ8ZGiqTGx?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f734213-e0b3-44e9-86f3-08de1d89e664 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:04.7687 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OUeF5dL4VqQH6igclskkrNRZZh9ee7g6JvllE3r43XopMHcKVlJY1sJvXOEdfJDaGqhwa5B1BKQWgNT2HzS4kQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" During the sequencer process, we need to check if GSP was successfully reloaded. Add functionality to check for the same. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon/gsp.rs | 18 ++++++++++++++++++ drivers/gpu/nova-core/regs.rs | 6 ++++++ 2 files changed, 24 insertions(+) diff --git a/drivers/gpu/nova-core/falcon/gsp.rs b/drivers/gpu/nova-core/fa= lcon/gsp.rs index f17599cb49fa..e0c0b18ec5bf 100644 --- a/drivers/gpu/nova-core/falcon/gsp.rs +++ b/drivers/gpu/nova-core/falcon/gsp.rs @@ -1,5 +1,11 @@ // SPDX-License-Identifier: GPL-2.0 =20 +use kernel::{ + io::poll::read_poll_timeout, + prelude::*, + time::Delta, // +}; + use crate::{ driver::Bar0, falcon::{Falcon, FalconEngine, PFalcon2Base, PFalconBase}, @@ -29,4 +35,16 @@ pub(crate) fn clear_swgen0_intr(&self, bar: &Bar0) { .set_swgen0(true) .write(bar, &Gsp::ID); } + + /// Checks if GSP reload/resume has completed during the boot process. + #[expect(dead_code)] + pub(crate) fn check_reload_completed(&self, bar: &Bar0, timeout: Delta= ) -> Result { + read_poll_timeout( + || Ok(regs::NV_PGC6_BSI_SECURE_SCRATCH_14::read(bar)), + |val| val.boot_stage_3_handoff(), + Delta::ZERO, + timeout, + ) + .map(|_| true) + } } diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index c945adf63b9e..cb7f60a6b911 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -124,6 +124,12 @@ pub(crate) fn higher_bound(self) -> u64 { // These scratch registers remain powered on even in a low-power state and= have a designated group // number. =20 +// Boot Sequence Interface (BSI) register used to determine +// if GSP reload/resume has completed during the boot process. +register!(NV_PGC6_BSI_SECURE_SCRATCH_14 @ 0x001180f8 { + 26:26 boot_stage_3_handoff as bool; +}); + // Privilege level mask register. It dictates whether the host CPU has pri= vilege to access the // `PGC6_AON_SECURE_SCRATCH_GROUP_05` register (which it needs to read GFW= _BOOT). register!(NV_PGC6_AON_SECURE_SCRATCH_GROUP_05_PRIV_LEVEL_MASK @ 0x00118128, --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 95BE33570BD; Thu, 6 Nov 2025 23:12:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470736; cv=fail; b=fypSz61FlLv07LIuoyIjy1sSxbBRo3/7hmZU7CFlRRrc1tRz25PEiUI7tTCk8syOCtH33qf9Qlan8b2IKT0xKdbZsh3zMuaYsg1yLZ0qB7IvT/8ePTxRfKK0TuhYch/Iy3VrezGpQ8eGjzdnCXRHHjcxxYVXbkukBu/MHhgcNeE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470736; c=relaxed/simple; bh=eTnXXX/bb3xm5HG19xkuDpJzIX3Xhc4C0Vn3VtDQHhQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=aozZqxczM2sA2PoXK5w/Oku4l/9am51dNHd7/wpwwrFTptxqpOrhoYJktIS31RwAT5xMvJ4MIScGJvHH8UCXyjeAlSJI6c344xsMtCf/7xKkgl5B7F2EGyQknAu9FSomcWCGOmpy0QR9vXl5Lo/chdSE3GdHT6V/1+6V07LGGb4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=oNv+KDw2; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="oNv+KDw2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=n49bzD7r9qrM5d7qiuBnANwv7v7fYTdiUxVvVwpFBkaAT1AFoZKrsYq7UfS/aZ1LnKjeIg7+0B0VL7nYwceUGkXNNXWAiMQi8Xda9VwysxzW6zfhRPqJMOBUSoO6//C5FlSHvZCNxErRbXIDWoEAoNPxg4oNt2GaIb38r1jDO5Ef0EwA+RwVBcrUE0lm8acnJXicNNWnrOnYkEUgsINyQGlu24rM3l4fb62zwhDaiuxV7WuDiAyJg7uZ7W3WtFfz+pEeZ+1jzZI+Sx7CMZNC6hf4JCCxgsdZ5t0ZraLcgUhxz5dwpjhorqMQpyaQfhkCWVi0OhuBJKUuv/XkGe9uyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=UIYWy+mC0lNnj1/80hqyYzIm96H2ezwjzA+s1p9HpOw=; b=VeSg4ydQ2xWelnpfHe++Hy989y1nC8qOYOtXU2zzeaplYOTzNUG/x0hOdFL+IrTJtt+BjnLszHiR5IfdTFBg6jD64AnLJoYwoKyomVs0ID2MQLzyxiCnpDej+ieG2G0tOLAAeTueSeRAalrxTbDAwRJB+pqPw1wOIHfXIxsuXSbU1+lip7PyxltpOr0Rxu5Q0usQaBRQuW/x9ECKVS44p9gmGSu9AkkCIKu0HfWSPUOdzOiRi/TQKvrAqxHaJvlqQM3CcHvRQTEEMnaMwOFXglGttU9CaPzmYrXuSiFhqTgRNXGEiUnFg6IkF9xXtPojBFcAJtqhzvooUUTIGqaQGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UIYWy+mC0lNnj1/80hqyYzIm96H2ezwjzA+s1p9HpOw=; b=oNv+KDw2i68BpIJ+3bH1Tp7hLi/F9kuq2G77qEZ3uGCjx795ZnO5Rj95LSsjy7EhYrYIN1y9VUMPuMEjZKtVkpupIMM2lrwE4ldKWpL1qGHk96ttpWgcvzOcjb5B8Ts4BJlo6HRF+wY+vQbVaeSDm+Dw70za6dxjHfE6tmllPTEGjUncvcnGafSJdAkV2/UEnbHUl2suMXYvC1fG5nRt/3qGAVDAVNq7kLiwo3jlBwhzOodEzeNza6um0hQXq42fidw9+K5+uv2tC9FI09/kRcTLE8gYaCvnF3YBAUq4k+3IBdDHjz10Ew2iQAIGOCOmnIO+ugnsO308yqi1T78Hlw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:06 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:06 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul Subject: [PATCH v3 06/14] gpu: nova-core: Add bindings required by GSP sequencer Date: Thu, 6 Nov 2025 18:11:45 -0500 Message-Id: <20251106231153.2925637-7-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0P223CA0010.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:52b::16) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: ce93d827-f4fc-4d11-f451-08de1d89e732 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?UKKWYzGzK6QXwQEu1x15dxdWmgHJ6PS9Oo+/GzOFuTKLvHELgaE6e+XgMUtW?= =?us-ascii?Q?uyTHZ7xVYAtjqHuMWmG3QF4WnX56Xw3yw14WuZ9CKcAxokYVEh+ulCEt31tJ?= =?us-ascii?Q?3DVee5JWn7N21tpdaRcl7l84dJcclRAMJA0ZuCQ0AayVs7bwOPc+HuffA//8?= =?us-ascii?Q?e+oxxyTyIHtiIO5GI4r0Q7EffH5Ik8mlenoKzZ6fw/1q7mhCkd4qstx4Fxgk?= =?us-ascii?Q?9VyybsMQgOWIfBAIHtsogMApflIDtM2EqiHHqnmrC1RqmpJcFyLX7yBO5QlZ?= =?us-ascii?Q?eRT8NRniVnAsc+drH6eBExG7/5DM0YeDG3TkfLix06Ao/DkFET8I0Q5UVSt1?= =?us-ascii?Q?fQK/+WIa59Pvlb+EWEOLkAVahl28vqbsyTuN7NODsDp5D1mncU01oGiSYSbT?= =?us-ascii?Q?PgqRlDwX3RRCv7yhxQZr9AFVf4lVgsGnP9OCIsUv38GpxVK5bhgIpDHvdTA2?= =?us-ascii?Q?qnt2C8/x90uIBOZUgKcEE6/7hlekFczw6DFn0PeHs4iRu7SC5+fUnCHrc/Ek?= =?us-ascii?Q?XvJcGLPxanAuo2VXGg02ZqrcWp+98naSTqElI1YvO/YVUbEXp3OJfrJ6GZka?= =?us-ascii?Q?LiOBUNElFqY85ldrUjj0jjcKp11f2T98YC9TBYvbQMTh5ni5rEnqo1QuK4th?= =?us-ascii?Q?NFGv9sgP5U7Z6M4e1zTIQjeBvIkMq2QTLW9IsCJLcToc7OjQTvahWRGlmP+7?= =?us-ascii?Q?BxLOgW5m0FU8jP7F5MuZ73qrBkZ3OHBWNSnBM2vltFcR6OTjVgpD+Sa7+def?= =?us-ascii?Q?cQpDaMSbQD4cymB4IzGe5sroUONQAFF+CxZwfwGPEBneagAUVUGomuiDXPtH?= =?us-ascii?Q?6Ya95DV44aht8ggJJnLXOX4Fk6FrzwwpVyE9ya9vvd2OkLpeTrvy/er5WC/W?= =?us-ascii?Q?yhGiN9+qC/i16hKOok+O9iLdlD6NCugpeWzEUVJdW0qiiUrDrazLhwZs9OI6?= =?us-ascii?Q?UCm+LiXOyeSQ2y+IyeIpLAHqGzycANhKnuz1FfNd4HgLz8zdS4PodeqC4Ewd?= =?us-ascii?Q?OLCEYDXXiD+EVfGka0/tv24vSCbH9OOVJ3/+NZvaK+/rV92ZtE5g7et3FwQW?= =?us-ascii?Q?vpXPH27PuJ0Jsee1c6lPrcW6tVWaYM+GXQBQzIdG6hvGN7+FwrFv78x+EVB1?= =?us-ascii?Q?7GbbJXQHGf/TXaB0n9ChQtSGKGeGaWgvOPROaG47k7a0oovt5+55sPCcBj4q?= =?us-ascii?Q?bR99BAzAcdiY/ocl2q2x9y5u35NmCT05B+iXBvj3KK9pcSFr2ewPXwOofdW7?= =?us-ascii?Q?/EW2fP5c+4sTANMOxsnIEx80MTTz4amuvY+kgFf+0Q0N4tHJkfAK0ekterP8?= =?us-ascii?Q?A0ZPh18PdR003SzAwfVfwPeee7J9XzY8e4ZVGRRhghM/5Zy+NCvMeOr/Nzuk?= =?us-ascii?Q?w8wE2UVg7R1kj62btwMxnp/ZKZNmQGfpK4sYr8bOF/NUE+XK9poa0yO7r4LH?= =?us-ascii?Q?3wB0nM29lK2vNWkKPn6VfLf0IZxQtn56?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?b+pF91FKQj62tNd+IZedvSt+vBG0OEtIhdJQM4Zcl2m8nMYiFjN9yhA+y6E4?= =?us-ascii?Q?j41U6jlpmCCf4BoWXoVeLKVoWW2OlgNz8/+02KlmIJKoya4KxA0Z26RJ8CVM?= =?us-ascii?Q?8+37G/VaqjdMhxIkQHEbPd26012QA/RPF3mL1yprTpkmIU3ji2CNrGc07JBe?= =?us-ascii?Q?eQQebSh2cam1OphQVL9eLqRUjLv9VmQ/js7sFvsDfLvJlLCgS1xS9u+w0WXQ?= =?us-ascii?Q?mXbgC9ZFgg6HgkajLSCIfXMUvHc71Y3KIygcTHmtMs/3awtKEYN8s1mlQRRN?= =?us-ascii?Q?ntJ9BtO9iFut3Ek9Zfd+RPY8hDLsoisF9yO/DSDzwRPwxkclZUOpq08Xi5PT?= =?us-ascii?Q?iLmrVfo81f6PfB+dvi56uSpyLj177nO51tNm0A9AQm6fZzLNmOSHrFvans/t?= =?us-ascii?Q?XwvGEhcxcpzOGTbYDHa+ZQLl3DaepxPgUyNlTT6RlPTTPgExHaDXLPmypUsm?= =?us-ascii?Q?jM4D3qxoW2l9YUhh/EZ2LCN717l6YaenSVROxbR/xfpSMk2VZmGYEn3e8R60?= =?us-ascii?Q?zyeIBn+rC+zDY6DaZqPVqEBsqSeWnkQOBMiX3qiiwyIYDC5vxPTeIa0M/eBw?= =?us-ascii?Q?8OAgySpXABG/2/0IhG0AmC/bZDeK4kP5ayf5DS/OafwFAPddE4Q2gVkQIi6r?= =?us-ascii?Q?Yl0M1wYlc3ZT4+/P5ILJvECm9YNHuLHSp5XJz8vuL9CgGNkYtzgzJL5gpbLt?= =?us-ascii?Q?+3tz2pZ6EMImIpujOsSXjGaYmibX1OJiWV+GzuOnb1WRPorS6wI9Y61JnUnv?= =?us-ascii?Q?9q7LhHmcxoYUwGEThk4SnAFWjfRCI7dcms0r1c9zWy2kTDkEy59p9gCK6aVm?= =?us-ascii?Q?MC4sMBbhX7xp7Uv+avadDFuvxP3evzWM0SkZvj0SlOstcLEcQuAGBZFzx6B7?= =?us-ascii?Q?aSordMjCfuvl/B9mCTQJdjb6gtv8tG131RKjltsguAJOt3AKskkf0Aw8BAD2?= =?us-ascii?Q?K08ei/hDo1Jm88941pNfzAZdTkNyITgd/N6MpJlKERuZ1/gqUGrUEGQgt8mH?= =?us-ascii?Q?xpREYBZnHw5ZFvPSV/kfH7ScrSXLgsHj6Op1tNYFCOgROPezzLUjQftlySgz?= =?us-ascii?Q?KmxKIUR8sIkmO3DHtWnf+9IDNjI7iSbD7omc4XyxEtc35UwjPe9IYdbH9XEx?= =?us-ascii?Q?XgLi4WQlQqI6cU8tHpDzn2b83gTa5rpQRH7TQJNdCSl6W866KnTztPp2c9Vm?= =?us-ascii?Q?4WhLM5oKSrHsYpsmRlOaRfpzZhECCdFs47cVuB3wuABpUIn5HiZPNxxb9W7D?= =?us-ascii?Q?aSQX0TJ6hUrlDl265gBLGeE3U5t1AmGIYtEwV+n0fgtkMwF/IFidHju5VXcL?= =?us-ascii?Q?0K08DA37UkTD8kAf5b+W3L345di2YjKmZyVYpNIbIvX8JvOt4nTfnYjQeUWt?= =?us-ascii?Q?M/L6XrQ3VH0KhbjMqe2MLqXNox7LcEDJMyYLt9qdAAAihtRT6TsrvX24BK6Z?= =?us-ascii?Q?VIDKmKf3x9sE2fcFPilt2sFVGV2DD9S+5CrQ4BoXeM4ZF0OalUWJ+Gahg3Cv?= =?us-ascii?Q?Z7uJyfQ119DsF3jkIlkLbmQAlqXMDBj/xvNiR1j+GJhS8s728H4pMdEOu6Sn?= =?us-ascii?Q?acp2RRCoCDD7Gvn1vV1S7Vt1KI0vIElUQALT/h9A?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce93d827-f4fc-4d11-f451-08de1d89e732 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:06.1414 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Xo2K/5W/Yaw8NBn6BlalG7+ZkAzS+0BgY/fjZ/MWyhs6saDyPW60anPKxGxM16WCaAPuMjsJqNdgfN22x+xIIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Add several firmware bindings required by GSP sequencer code. Co-developed-by: Alistair Popple Signed-off-by: Alistair Popple Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/fw.rs | 45 ++++++++++ .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 85 +++++++++++++++++++ 2 files changed, 130 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 687749bdbb45..53e28458cd7d 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -543,6 +543,51 @@ pub(crate) fn element_count(&self) -> u32 { } } =20 +#[expect(unused)] +pub(crate) use r570_144::{ + // GSP sequencer run structure with information on how to run the sequ= encer. + rpc_run_cpu_sequencer_v17_00, + + // GSP sequencer structures. + GSP_SEQUENCER_BUFFER_CMD, + GSP_SEQ_BUF_OPCODE, + + // GSP sequencer core operation opcodes. + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT, + + // GSP sequencer delay opcode and payload. + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US, + + // GSP sequencer register opcodes. + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE, + GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE, + + // GSP sequencer delay payload structure. + GSP_SEQ_BUF_PAYLOAD_DELAY_US, + + // GSP sequencer register payload structures. + GSP_SEQ_BUF_PAYLOAD_REG_MODIFY, + GSP_SEQ_BUF_PAYLOAD_REG_POLL, + GSP_SEQ_BUF_PAYLOAD_REG_STORE, + GSP_SEQ_BUF_PAYLOAD_REG_WRITE, // +}; + +// SAFETY: This struct only contains integer types for which all bit patte= rns +// are valid. +unsafe impl FromBytes for GSP_SEQUENCER_BUFFER_CMD {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for rpc_run_cpu_sequencer_v17_00 {} + +// SAFETY: This struct only contains integer types for which all bit patte= rns +// are valid. +unsafe impl FromBytes for rpc_run_cpu_sequencer_v17_00 {} + // SAFETY: Padding is explicit and will not contain uninitialized data. unsafe impl AsBytes for GspMsgElement {} =20 diff --git a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs b/drivers/gp= u/nova-core/gsp/fw/r570_144/bindings.rs index 32933874ff97..c5c589c1e2ac 100644 --- a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs +++ b/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs @@ -664,6 +664,7 @@ pub struct PACKED_REGISTRY_TABLE { pub numEntries: u32_, pub entries: __IncompleteArrayField, } + #[repr(C)] #[derive(Debug, Default, Copy, Clone, Zeroable)] pub struct msgqTxHeader { @@ -702,3 +703,87 @@ fn default() -> Self { } } } +#[repr(C)] +#[derive(Debug, Default)] +pub struct rpc_run_cpu_sequencer_v17_00 { + pub bufferSizeDWord: u32_, + pub cmdIndex: u32_, + pub regSaveArea: [u32_; 8usize], + pub commandBuffer: __IncompleteArrayField, +} +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE: GSP_SEQ_BUF_OPC= ODE =3D 0; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY: GSP_SEQ_BUF_OP= CODE =3D 1; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL: GSP_SEQ_BUF_OPCO= DE =3D 2; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US: GSP_SEQ_BUF_OPCO= DE =3D 3; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE: GSP_SEQ_BUF_OPC= ODE =3D 4; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET: GSP_SEQ_BUF_OP= CODE =3D 5; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START: GSP_SEQ_BUF_OP= CODE =3D 6; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT: GSP_SE= Q_BUF_OPCODE =3D 7; +pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME: GSP_SEQ_BUF_O= PCODE =3D 8; +pub type GSP_SEQ_BUF_OPCODE =3D ffi::c_uint; +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct GSP_SEQ_BUF_PAYLOAD_REG_WRITE { + pub addr: u32_, + pub val: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct GSP_SEQ_BUF_PAYLOAD_REG_MODIFY { + pub addr: u32_, + pub mask: u32_, + pub val: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct GSP_SEQ_BUF_PAYLOAD_REG_POLL { + pub addr: u32_, + pub mask: u32_, + pub val: u32_, + pub timeout: u32_, + pub error: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct GSP_SEQ_BUF_PAYLOAD_DELAY_US { + pub val: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct GSP_SEQ_BUF_PAYLOAD_REG_STORE { + pub addr: u32_, + pub index: u32_, +} +#[repr(C)] +#[derive(Copy, Clone)] +pub struct GSP_SEQUENCER_BUFFER_CMD { + pub opCode: GSP_SEQ_BUF_OPCODE, + pub payload: GSP_SEQUENCER_BUFFER_CMD__bindgen_ty_1, +} +#[repr(C)] +#[derive(Copy, Clone)] +pub union GSP_SEQUENCER_BUFFER_CMD__bindgen_ty_1 { + pub regWrite: GSP_SEQ_BUF_PAYLOAD_REG_WRITE, + pub regModify: GSP_SEQ_BUF_PAYLOAD_REG_MODIFY, + pub regPoll: GSP_SEQ_BUF_PAYLOAD_REG_POLL, + pub delayUs: GSP_SEQ_BUF_PAYLOAD_DELAY_US, + pub regStore: GSP_SEQ_BUF_PAYLOAD_REG_STORE, +} +impl Default for GSP_SEQUENCER_BUFFER_CMD__bindgen_ty_1 { + fn default() -> Self { + let mut s =3D ::core::mem::MaybeUninit::::uninit(); + unsafe { + ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } +} +impl Default for GSP_SEQUENCER_BUFFER_CMD { + fn default() -> Self { + let mut s =3D ::core::mem::MaybeUninit::::uninit(); + unsafe { + ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } +} --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010018.outbound.protection.outlook.com [52.101.85.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6FBF9357701; Thu, 6 Nov 2025 23:12:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470738; cv=fail; b=EMHjQZwVhL6Mryi1Iv+9nyhZdgYSzKYTGzY+P6Qg1NBDSIzUsb7SrffvYMOwQzMR6MkP6Wme5vUlmQX3zrbRRhdINt2Has3zoJGtfBn4Zy0w9szJ4X/khQadvITDRxKxqK7UbeMN70wdRh5AEaY+BTjeXY1MwoAWoT6UgK5bQX8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470738; c=relaxed/simple; bh=zStj/S1peGcgIfW2nZ3ZrHPezBcPAUljPy7LFMQ7nI0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=k0FSfFF0MjP5vE8zTMjbPAWjtDqGXjuFAWAB8g0t7h4+s7pMWS3GU/a1pMhIZwSGVHwKMSHly40FR9PX6K7MFYkM5iwwziRlnI1UyA/xW58WwogVq0IlTGD3YHfNOf9efOXvX59SvLe/CY38+gAH7bSj0hRBjmNFIINwsE+Dsqk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=j1L8JjC7; arc=fail smtp.client-ip=52.101.85.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="j1L8JjC7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=THDk8qTCNtl3wnJ078RmFvMJQ5WfMoEU05gPRvNxQrNliTsGdy0NVrWo9LmeKC66vl7Iz3Jwkcv0Vep7stk+OtBphvD3F+lLK7FNNwojvmZaNPzrPXyccg4mME8Jkbr6dLuVZ0X/ofnFVS8SuWont9A8ZSfnuZlluf8GSNzoWcBvBcKHRmeSMMc2Rv6dW4nEvtMq7yZGhmLZP8srFIvaTpgGZFZF0Zp5yOEEG+gFkt3zXInL2iAyne1mqHhg2Uyu3sB/yR6BhErL7aRd32BE1wZdyY6SsflM4zOA54QZW4jUkFqcg9rkKD3zxRMuxN8JkXPfRj7C1cfJUMsXqdJ0dw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=J+6CZiEQUv6MUIO0TL68t28TCq58rxk7ss3oDq525/c=; b=kvub7IUfL26+kZohyXSKlkR4WTK8zQTfD0Eitck3ktU5T3G8v7WQRMqbf8/MU9TyfBrAPSk5dI3U6QUkczvAUNKk5NOM0DXF8HirDfZZNdDImpud3BEW+wPh9tuG+Fha18d9zvLdpFdQq3IH0HB2whDUh8FPIQgs4UIjUATLbz4OQ+cVq30nqrfAYH/jUbko1OcaHS5b3aVc/yIwEvG75mV/1uzJA0lBKkk1RRfAwQgM+VchtZ8983Q7FBrWwUnCgbltyROIaGTyp49HFMbAfb72epHKpp3Vxt7huWMGYLkRpQv6G1E0DjBtMgYCjqh1beugGnbKdgCkyMwvDxZLaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=J+6CZiEQUv6MUIO0TL68t28TCq58rxk7ss3oDq525/c=; b=j1L8JjC7Ix6i0oJaxeR3FbzesxGzcmWNZ5jE23zpfpG4T6NlErkg81l9kpSiXdR48zGgPJuhUXy1gs5O0H+hf27Hc8GnMgAoLmm6IVwGEw+Cd1rUfAXvacz0fUnuw/SpweHswyaZAEzgSHAkH+T32csR0oLnukmauvpqtkXPCv3WxgdxvmZhqV7ki988LjJDmkTwQ8p+8XjBcA2ZaqMvBnQV2TDnpzzeyqztH8Xbdd9Rqqn3KmwgoBcSMc0R1OTBXVydK0m+6Hj4P71OC5/WiCQCI8DmRil5+T+9YvMLHuIcOa4IMDN/5LUiW0dZckFk+49qvqSqmnEKyPL1iNH88g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by PH7PR12MB8014.namprd12.prod.outlook.com (2603:10b6:510:27c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 23:12:07 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:07 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 07/14] gpu: nova-core: Implement the GSP sequencer Date: Thu, 6 Nov 2025 18:11:46 -0500 Message-Id: <20251106231153.2925637-8-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0172.namprd03.prod.outlook.com (2603:10b6:208:32f::12) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|PH7PR12MB8014:EE_ X-MS-Office365-Filtering-Correlation-Id: b518b4d7-fdb8-4f0d-9c55-08de1d89e812 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?MuGkAIYWmrAnGR1ZNaKvio0/rcXPLLK25c4weAAMCY8ScfhJCDaqxDDKSSQb?= =?us-ascii?Q?x851fcqRVpcRIEqQHlhPGZ4NvhkwIme9DT8CT6kmk0g8MzljGAnzb/eKm36A?= =?us-ascii?Q?NQf8uanf4iMxi7FxFrxoY6SCMDOpy1ZJl+EWBSV9cWQdI840Tjr6fzjl/nTi?= =?us-ascii?Q?ZEfuy6uC4E+eOT7MDKG82CTD7CgKO71QJS2gxeIfFJezb4DCEYC9qFg9vcDk?= =?us-ascii?Q?1S+n8kB37moeUZ8hvUrYCDkOUZGSdtxfF5UQSDumzAcEOPdK5oyG7qN8na99?= =?us-ascii?Q?meYof9KoJKVtQ/KUXTiJ3zbqO+yqwv03bcUkKAbo3TQ585E9gto1ufNBZuYf?= =?us-ascii?Q?2po9zVvY2LIsscOcurVDROxvnqfTEQDAQckIpt0rId7vQxcw+Q/pCNOZgTck?= =?us-ascii?Q?a1CcRcRzeyrPzrcLlc7wDN/pkhGqli4qjjRU85/C62XQyhv1t0iur1HtTmfI?= =?us-ascii?Q?GX5+t6Ez//z69HMzW3RgAlierv9WaYnAOwhkPzGC+rjPhwpO0oCCVCwrd1JD?= =?us-ascii?Q?fMjkFhd4Uim4+d4ztEDw6SWl8U+OkAPrD3bUvIclkIBue4T+tErJkl+fHMGE?= =?us-ascii?Q?A6bJZsyPrV6L+Gog52Ejb+i1ipQl3sAmHJvWUwx7Ju4KIuAZF9tYciblWXaW?= =?us-ascii?Q?c6l/14R3Rc5bZmd8fEPFi23oNaOleH2blrLRP+EEDl2LzvTDwnsRRHdcivNC?= =?us-ascii?Q?kcmfn5O7B9xrd20ucq6p1AGGAcf43DiNOtFKiXy1H/CRCPuYrV5QLFWRlIm0?= =?us-ascii?Q?vaALJQp4bkNQZgBw90vUi96jeWg84O/rgwEe0KAZ+dufTztxD2mk+gf8g0Wz?= =?us-ascii?Q?xr3X3PWikT2Q0KIfBLvvxZG1NS9Uv/cKaM12JbEoh9jxwEILHW1efZJT91C/?= =?us-ascii?Q?uq+6tvhkdH9vB+n4ETvuy4aONJhNrDQEG9Y1L6MMa0e9EIZPhZXu5jv/E5LA?= =?us-ascii?Q?w3gKCZMsawXjzphPEPPAyCCHg37/eqTIcHLlacuZ6+Jh/6IrZHb7ls0aqO3U?= =?us-ascii?Q?2i3XR0OlCvcfE5iwLeceG2ms/a9qzqGmvfeRBCtrBdBeyd+FBwrtDDNKQtK7?= =?us-ascii?Q?gQ1loEkO0xnMBFxVxP5AlTeYPNumhmzoIrrkdhPDI0wFSztxfy981q9hFwPE?= =?us-ascii?Q?fieCw1YpRLFJ2WFBLym0pRefv0mZ+LR+/aFlPWq/J7atnd5A3YwE+L0eqQ5f?= =?us-ascii?Q?WFSsUOf0XxYpRbWYliru3bTFAbfCCNUP4zozT3rlcD9Fncqu2+THSnYWiUE8?= =?us-ascii?Q?QgI0GfrfYzeXqeUT6K2TLRzrBVp/vFg2bvGe8CR2uEPElbvv6TWOMRrExcg8?= =?us-ascii?Q?jeZHiggTNcpZmU8HJ3Df/Pi5Ge7rS/BjHFoy8ubz2ToQghrHm6TI1pumPPZ0?= =?us-ascii?Q?LVyc/qzTZfC0a1WTC0bHIEvwRXY48n/IuozPOwatw2YNUIAjhRyrzT988fD8?= =?us-ascii?Q?ZE7iPF65qOnRvEPhsgBMouCvVDOmakMy?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zuve3iuScvuyMeemQG9iyzrLG1zorReySvp77hdDnpZgIze1Sl1lJ2z9/DWV?= =?us-ascii?Q?KzcmbYzz5jBTyYZwxSY2gjjUIn4CWlVUqvvuEwhBX9Y9AGfKe8SXN4lKzRO4?= =?us-ascii?Q?zvMxnVy/Cf3nl7IjB18JGO68OQBm681MC5xDn5jjCvPYE7nLS+4SDJ+skuaq?= =?us-ascii?Q?ZuN1RVLq47Jl8Nbem/RlId9hLP6upNpwAuvp1/sBt6g89P+dDSvrtsCWwtDM?= =?us-ascii?Q?DrWbKYaTeUUsCBfACFjYJeAwJ6pFBKUkFzhOKZ0f7OsLCvWBR71kVDwBhJ9S?= =?us-ascii?Q?jwqn5ZjL99ksbI4On1+tYO4RJUkVnwIsNl+EYwn4TivijYpXoj8/ke1zIiLA?= =?us-ascii?Q?tl/0v1vRD3vB7/yb+pX+VRUHW5rJgcMY5UgVkLM0bqyCilnXppf8DfHbxh4p?= =?us-ascii?Q?0qmS0whLgYaJ7QEhYk1FoqFfB4WYOM9olSBadGwa3QA1dvznjooZDKiejSUU?= =?us-ascii?Q?0LeAeQ5TC+WWDBApg4YDXLwZtVx5GsffXK0SV2Ebbl+qapcjTpSuM5/yy3M6?= =?us-ascii?Q?an+EwHcZkV7cwzf8XGGr2Lk8R23aQIxG0RrdXrUWEp2tlcV4gt9FbXIEYHB6?= =?us-ascii?Q?eUkKaceKo90qHsMltigAPsNopYnXGLr5QWDULCoaPiIfabyO7a9sceG7rJLy?= =?us-ascii?Q?xD+0LNY+1qz2VxPUq2OwE5M6C29WgxRERZ17CvnQsj/Azh8vsgH0CB0Zwy+f?= =?us-ascii?Q?vz2ydfIT1CIT/Oaa5VukniH6fZMzALsONxBLNUaY7UiuBdvw+fZJu1OtsdoE?= =?us-ascii?Q?kSNO/aUvFSJI7knpO8W+7qc/e2rlRh+eE0crtiXNo0DjLmA6OsxBwmaSxDlc?= =?us-ascii?Q?3NNhRQsXlphVZe7N5070ggrbw15STsztsiVW8BQv3QmB8YQ72l6s1puj9KZl?= =?us-ascii?Q?mEOTThPrV/CDmvC4qTAnLZkKr2+iMrQ/s0o70sORDwNaBF86ieDe9FuDHyga?= =?us-ascii?Q?KuVzjHtgWKVH8fjvFnIsevA1rE9Obias64Fxvtv6Cu6krKoy6Vm9vhrAkh0L?= =?us-ascii?Q?EYYgPzmpKzoesTTMTQ1f0/5ySjHmkiLsNqGktPb9lEBd1CYVBxZmTmg/N+VQ?= =?us-ascii?Q?mn7kT1a5FSHY43VY7b/OxWoZ+30coaUFLx1bcAwon/N5vqS6c4asG0vmHsMi?= =?us-ascii?Q?wfFjVXRp8CBPU6/fGTdZugBCacLJ8mkN/5ZfwkxwJU3TKI71qHJE8KMy662u?= =?us-ascii?Q?PhzXw9fIBlI7DpVPelN1wc505C9Z9rIjBtWAGgaT2AeFSeeaxEcXNsVwjtmX?= =?us-ascii?Q?o62pqwzX/PtTOXrS/k61qJ92J3Kh83V4SbCAMrNBYi2fD+AQgODIqk/juOIG?= =?us-ascii?Q?XQiqVvZ8r7jAWjxzdrMTikI6iHFCHowyTrUd+/oS1fXSf8uccBdclW7qOmJp?= =?us-ascii?Q?HXMl4Y6s5JUJ398RdK6QdgYTc9Sm7tmNdWixyo83uQDaNOcz2xcqTX+BhICw?= =?us-ascii?Q?ETI9YCyyb4JhoFXGbjQYsEQhln5c0DflJq99We0TSWJYqA7twGtwDZEFvnQj?= =?us-ascii?Q?mZ64ZWAY4DS0WqNUcPozpb/TrpsKu+e8WQgNiGnH7e5pEiGFJ9F6mY93Cg03?= =?us-ascii?Q?gJ3UNYwNPfDUUXdfUo6N7tqts4zmC3vxPZi6zfcV?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b518b4d7-fdb8-4f0d-9c55-08de1d89e812 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:07.5795 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B5xeUINw1f0fipsWXWU3ALEsFNACnNt+13CYSnaF8b00Z9WgLWA2y/QVZHU2/Uc+VwN71vQxiYRILM4FDWevag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB8014 Content-Type: text/plain; charset="utf-8" Implement the GSP sequencer which culminates in INIT_DONE message being received from the GSP indicating that the GSP has successfully booted. This is just initial sequencer support, the actual commands will be added in the next patches. Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp.rs | 1 + drivers/gpu/nova-core/gsp/boot.rs | 19 ++- drivers/gpu/nova-core/gsp/cmdq.rs | 1 - drivers/gpu/nova-core/gsp/sequencer.rs | 205 +++++++++++++++++++++++++ drivers/gpu/nova-core/sbuffer.rs | 1 - 5 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 drivers/gpu/nova-core/gsp/sequencer.rs diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index 36175eafaf2e..9d62aea3c782 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -16,6 +16,7 @@ pub(crate) mod cmdq; pub(crate) mod commands; mod fw; +mod sequencer; =20 use fw::GspArgumentsCached; use fw::LibosMemoryRegionInitArgument; diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 649c758eda70..761020a11153 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -19,7 +19,13 @@ }; use crate::gpu::Chipset; use crate::gsp::commands::{build_registry, set_system_info}; -use crate::gsp::GspFwWprMeta; +use crate::gsp::{ + sequencer::{ + GspSequencer, + GspSequencerParams, // + }, + GspFwWprMeta, // +}; use crate::regs; use crate::vbios::Vbios; =20 @@ -204,6 +210,17 @@ pub(crate) fn boot( gsp_falcon.is_riscv_active(bar), ); =20 + // Create and run the GSP sequencer. + let seq_params =3D GspSequencerParams { + gsp_fw: &gsp_fw, + libos_dma_handle: libos_handle, + gsp_falcon, + sec2_falcon, + dev: pdev.as_ref(), + bar, + }; + GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10)= )?; + Ok(()) } } diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 0fb8ff26ba2f..0185629a3b5c 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -418,7 +418,6 @@ struct FullCommand { Ok(()) } =20 - #[expect(unused)] pub(crate) fn receive_msg_from_gsp( &mut self, timeout: Delta, diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs new file mode 100644 index 000000000000..ee096c04d9eb --- /dev/null +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -0,0 +1,205 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! GSP Sequencer implementation for Pre-hopper GSP boot sequence. + +use core::mem::size_of; +use kernel::alloc::flags::GFP_KERNEL; +use kernel::device; +use kernel::prelude::*; +use kernel::time::Delta; +use kernel::transmute::FromBytes; + +use crate::driver::Bar0; +use crate::falcon::{ + gsp::Gsp, + sec2::Sec2, + Falcon, // +}; +use crate::firmware::gsp::GspFirmware; +use crate::gsp::cmdq::{ + Cmdq, + MessageFromGsp, // +}; +use crate::gsp::fw; + +use kernel::{ + dev_dbg, + dev_err, // +}; + +impl MessageFromGsp for fw::rpc_run_cpu_sequencer_v17_00 { + const FUNCTION: fw::MsgFunction =3D fw::MsgFunction::GspRunCpuSequence= r; +} + +const CMD_SIZE: usize =3D size_of::(); + +struct GspSequencerInfo<'a> { + info: &'a fw::rpc_run_cpu_sequencer_v17_00, + cmd_data: KVec, +} + +/// GSP Sequencer Command types with payload data. +/// Commands have an opcode and a opcode-dependent struct. +#[allow(dead_code)] +pub(crate) enum GspSeqCmd {} + +impl GspSeqCmd { + /// Creates a new GspSeqCmd from a firmware GSP_SEQUENCER_BUFFER_CMD. + pub(crate) fn from_fw_cmd(_cmd: &fw::GSP_SEQUENCER_BUFFER_CMD) -> Resu= lt { + Err(EINVAL) + } + + pub(crate) fn new(data: &[u8], dev: &device::Device) ->= Result { + let fw_cmd =3D fw::GSP_SEQUENCER_BUFFER_CMD::from_bytes(data).ok_o= r(EINVAL)?; + let cmd =3D Self::from_fw_cmd(fw_cmd)?; + + if data.len() < cmd.size_bytes() { + dev_err!(dev, "data is not enough for command"); + return Err(EINVAL); + } + + Ok(cmd) + } + + /// Get the size of this command in bytes, the command consists of + /// a 4-byte opcode, and a variable-sized payload. + pub(crate) fn size_bytes(&self) -> usize { + 0 + } +} + +#[expect(dead_code)] +pub(crate) struct GspSequencer<'a> { + seq_info: GspSequencerInfo<'a>, + bar: &'a Bar0, + sec2_falcon: &'a Falcon, + gsp_falcon: &'a Falcon, + libos_dma_handle: u64, + gsp_fw: &'a GspFirmware, + dev: &'a device::Device, +} + +pub(crate) trait GspSeqCmdRunner { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result; +} + +impl GspSeqCmdRunner for GspSeqCmd { + fn run(&self, _seq: &GspSequencer<'_>) -> Result { + Ok(()) + } +} + +pub(crate) struct GspSeqIter<'a> { + cmd_data: &'a [u8], + current_offset: usize, // Tracking the current position. + total_cmds: u32, + cmds_processed: u32, + dev: &'a device::Device, +} + +impl<'a> Iterator for GspSeqIter<'a> { + type Item =3D Result; + + fn next(&mut self) -> Option { + // Stop if we've processed all commands or reached the end of data. + if self.cmds_processed >=3D self.total_cmds || self.current_offset= >=3D self.cmd_data.len() { + return None; + } + + // Check if we have enough data for opcode. + let opcode_size =3D size_of::(); + if self.current_offset + opcode_size > self.cmd_data.len() { + return Some(Err(EINVAL)); + } + + let offset =3D self.current_offset; + + // Handle command creation based on available data, + // zero-pad if necessary (since last command may not be full size). + let mut buffer =3D [0u8; CMD_SIZE]; + let copy_len =3D if offset + CMD_SIZE <=3D self.cmd_data.len() { + CMD_SIZE + } else { + self.cmd_data.len() - offset + }; + buffer[..copy_len].copy_from_slice(&self.cmd_data[offset..offset += copy_len]); + let cmd_result =3D GspSeqCmd::new(&buffer, self.dev); + + cmd_result.map_or_else( + |_err| { + dev_err!(self.dev, "Error parsing command at offset {}", o= ffset); + None + }, + |cmd| { + self.current_offset +=3D cmd.size_bytes(); + self.cmds_processed +=3D 1; + Some(Ok(cmd)) + }, + ) + } +} + +impl<'a, 'b> IntoIterator for &'b GspSequencer<'a> { + type Item =3D Result; + type IntoIter =3D GspSeqIter<'b>; + + fn into_iter(self) -> Self::IntoIter { + let cmd_data =3D &self.seq_info.cmd_data[..]; + + GspSeqIter { + cmd_data, + current_offset: 0, + total_cmds: self.seq_info.info.cmdIndex, + cmds_processed: 0, + dev: self.dev, + } + } +} + +/// Parameters for running the GSP sequencer. +pub(crate) struct GspSequencerParams<'a> { + pub(crate) gsp_fw: &'a GspFirmware, + pub(crate) libos_dma_handle: u64, + pub(crate) gsp_falcon: &'a Falcon, + pub(crate) sec2_falcon: &'a Falcon, + pub(crate) dev: &'a device::Device, + pub(crate) bar: &'a Bar0, +} + +impl<'a> GspSequencer<'a> { + pub(crate) fn run(cmdq: &mut Cmdq, params: GspSequencerParams<'a>, tim= eout: Delta) -> Result { + cmdq.receive_msg_from_gsp(timeout, |info, mut sbuf| { + let cmd_data =3D sbuf.flush_into_kvec(GFP_KERNEL)?; + let seq_info =3D GspSequencerInfo { info, cmd_data }; + + let sequencer =3D GspSequencer { + seq_info, + bar: params.bar, + sec2_falcon: params.sec2_falcon, + gsp_falcon: params.gsp_falcon, + libos_dma_handle: params.libos_dma_handle, + gsp_fw: params.gsp_fw, + dev: params.dev, + }; + + dev_dbg!(params.dev, "Running CPU Sequencer commands"); + + for cmd_result in &sequencer { + match cmd_result { + Ok(cmd) =3D> cmd.run(&sequencer)?, + Err(e) =3D> { + dev_err!( + params.dev, + "Error running command at index {}", + sequencer.seq_info.info.cmdIndex + ); + return Err(e); + } + } + } + + dev_dbg!(params.dev, "CPU Sequencer commands completed success= fully"); + Ok(()) + }) + } +} diff --git a/drivers/gpu/nova-core/sbuffer.rs b/drivers/gpu/nova-core/sbuff= er.rs index 4d7cbc4bd060..36890c8610c2 100644 --- a/drivers/gpu/nova-core/sbuffer.rs +++ b/drivers/gpu/nova-core/sbuffer.rs @@ -162,7 +162,6 @@ pub(crate) fn read_exact(&mut self, mut dst: &mut [u8])= -> Result { /// Read all the remaining data into a [`KVec`]. /// /// `self` will be empty after this operation. - #[expect(unused)] pub(crate) fn flush_into_kvec(&mut self, flags: kernel::alloc::Flags) = -> Result> { let mut buf =3D KVec::::new(); =20 --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBFD6357707; Thu, 6 Nov 2025 23:12:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470738; cv=fail; b=f4UgZDf7PwitJYxjI/71igu2cXF8c+lY9BhRaPkNePmrAC4I5RIsUoYSaEXvkkFVepphDeQUDmKvsMnLGIi1FGTC/mLjOvBEPBqENHn4XcbSn66dTom+PRgcPS8rVtkphs1bbWwcVkplVRHCYNhc7Ll+cHx66wleARmwbNIz7nU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470738; c=relaxed/simple; bh=X5+CBBcgn4mpc6b9MRaQhHYMIIwLafVjOr3LVM6OB5Q=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=uesJJ6vuBRmRGpTPTd/BwElcratQSYoZ+udBN/Ff7uRlMxIoSHeiiqcWA30vTByY1pc8XZ9hbCMcMWew4NjwKKfydqWlOnJguXqtLi/U9oTa4iOeqscXHHkbkNWR4+g6XkvJkss1oFyZmk+oX08ed9+6N58ajE2+lEZHWqOn34A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=BAOSUEDU; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="BAOSUEDU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dP6i/RO26FmTH6XSzqNoAceS22CCyDl2atJCSoF5YSQuuS6m/VvLgDjaF8ilcdk8sHVHOxYtWQwuScgS13AelwZ5GTxgd9GpNtxTcX0oZf3i0fOcWTJ1PjRAf1p48M9l0ywjMWW9ImzNJItfbyb0PAwC5cuPjLor3l08VcZJtI/b0chwsMokcSr0lPiw5J4WSAC59KEgDOxb6TWk9v2baSoopdvxt5WFMaRz3TTv70caoSz6nKGJBJ3SzuC+0ofbH6yzNYsinY8UxgefKmAOouDZn3c/iX8EXCXFn7D53f6nd6lOaRq513VtXzkn0CoIMn8fNjWPEvs9J6zsyF8luw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=sS+fLi2cKCNAAGeKazVN45aaRxnRuC0Kr8JdboiMjhs=; b=U4Z/tudr4aPwxfYGhzuZMDpaZDa+06JWdfIMxC8RG4WKGFdqyEskaH1GIJDOUotExwKY5Xs52BbJL8oyKtUtW7yoLG7qDP3gBGQWopnI3Hfw+FMEFEJNs0ele/3yRdD+kEN0KYUDkW9Yj8ZVGDLkmfWkNzNSsZR1lIqbfWlH3s/BDPQpr07EYYGJKDAysvfUEJZkdoSoONxJ1fs+shI+wF/aIZ35MV0yguT6BormHjo033QBoI/dchuaZxOM5XsKe6Icc74xHO3RMnDypsLF/7kDFVI0xilh//od6c8KOs7Moer8Y6ckGz3uFcIpyW6kZIPJmwxT8ZNsxmZG6Kh9jA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sS+fLi2cKCNAAGeKazVN45aaRxnRuC0Kr8JdboiMjhs=; b=BAOSUEDUyeeYRIIU/eSAoc4g4e9maSDkTrW4XDmQ4R6sO9hidyjeCKGBAEFCDEqPvFztiIUNLcMKxZatnG/qE2ebRn7+riKrzKFKwZvGKSkK5gmS5bqoKfKG6M5JfmPp0YwC6ot7jZBPqaANLjwqlXAQtu48THamp/7JUAhU4CBzyUPhjSCZZO/KDfhEaq/dbrzXPcBekT5GwrZDLfoNe2w6PNSnbT8Ee60tDdi/LUuLkJBD1arcF2o1GlsPXr1EaRm8XX5kUhD6+7hOWFTqFFk7z+psPpfttK35oDMwGdQdJGbOjgNZ31m3NtqBN5pKMSgPtOITrQU2IYWAuliwEA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:09 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:09 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 08/14] gpu: nova-core: sequencer: Add register opcodes Date: Thu, 6 Nov 2025 18:11:47 -0500 Message-Id: <20251106231153.2925637-9-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR10CA0013.namprd10.prod.outlook.com (2603:10b6:208:120::26) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: f5e541c6-a8be-400a-54c3-08de1d89e8ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?t1P+CLsthRq+/CwbVj2wLmvb0nZ+ZgbT2DHncXE8ZHGitklc17aeK9LvC+E0?= =?us-ascii?Q?tffH3Ay+N/Mih2+lJeSy6zcgRd7SDuOW7x/eQntJkqnkkhqeCsIKbp30NUO3?= =?us-ascii?Q?nGn201EwPBQScy+YEqLf9JRDp1aKDdWjsF0pbGvvV9+zII+5horjxnip4DLv?= =?us-ascii?Q?yOc6X8F3Kn7fzQNDjNMjIDCBzEBWoCiYWLYsHrz84DcGgOy00IS7WC0i9zp0?= =?us-ascii?Q?ZdKJI0WsMK9xNkBhEHk97+L+CFQ5kid7pSbXvnAcPcIx+581mssMb0M5RA3D?= =?us-ascii?Q?JbgFKRjs5evGDintKeuT8ZTSDd8C1Ol2j9NSpWXYY547h1z+KXj361iVPc4j?= =?us-ascii?Q?VeBuqGBsDaSncRVwIwniMgv+27Q+E4iX18BbGs6QNpcCzRBXi2T702P0dqCj?= =?us-ascii?Q?+wN39srkqVWXh6krzvr+W94oBiq5S1oO1g2OXGCSzLMSizEVZHKMS9LxfDrj?= =?us-ascii?Q?s/pSWFUUy2Pj7ZGF6O/ViDktgDDXMQ2qzF87R5v299tZEo52kcbeJzYBqsHY?= =?us-ascii?Q?61RTGLag3OeqVwG6cEBYOsg7upvEF2lcVOR5hOIx43zB/U/vXlI4yOe+xe5b?= =?us-ascii?Q?uDj2Qj20Khj97MNk3Rmgo3QwVpqm9kbUFfhmtS/RBXDSYnXhNIKHmNeiS4vW?= =?us-ascii?Q?RUCTzEj+wi2q6PN0iVTNMzk3NmF293mzKE0E2ybjJ9qKTeIH9x6Ma2G8orHx?= =?us-ascii?Q?NVmf+uFwZstrKbrG0EFSx1w5qMTrZ9SDTRSIUZvgxiZjRX/hBsPfSz/nuemT?= =?us-ascii?Q?ZywTpMb7M5Sh4yZG6djT9H9dbKncikjF6wearxMAMJMSRRA7E5MsHocJaM1v?= =?us-ascii?Q?4BsluvIgiWAHhrJtyojkuB6L4ZNfrPuOl5nOqEvxQrfX1l/WRviMRZBgghd+?= =?us-ascii?Q?9fBdQhwgpc9E1gvxHypJx2STu28yNMJxDrytHPHJ8TcIWmeMofrxrSYKABND?= =?us-ascii?Q?kAx+VHqmAMKZWms04Dqqh0hB1ycywpRsfsuMs2sEeJqrQuL5jQ81UJQumKPh?= =?us-ascii?Q?r0sxM1An75uQKw80OMzSOnxr+pIe6t21qbE8g5qKgzVuUZ9lC4MkkSHx5m8l?= =?us-ascii?Q?FTPF5j6bHA3KHyYzjaMFXl522LuY3A705e+rie+lZHhtMhuGcRFv5Y4CKYoq?= =?us-ascii?Q?pFyFmTcGtlCMcoRlI0/+7FVUXJ779BxvVcoFJq4d9znLQn46crsQjQOaPopS?= =?us-ascii?Q?YFkLUeu/5EPAGw4aH/lNOA4t6NGdOyl3Uxf6Bv2mdIBBcZoKwLeyGa8AkLkv?= =?us-ascii?Q?6bkDsfvvHGYHzPj0DYu2YeHBuQsTnvVfK/ffWE9EhSeUbbJLPOsxjftLl+Gq?= =?us-ascii?Q?eruSFXUayI8iKqMEaizDbKGIDbIhsO00YdFo5+B14+szepyX4Geh84jWOz+1?= =?us-ascii?Q?51NVgyl8/Ab3xYQVASKSY8yDlnKvdyeIIlveO0yvd315kxl6IkxtzUBiSZUJ?= =?us-ascii?Q?q1UhL6oMLdnYSV/wUMnNniNwfhMh1NFc?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?p3ZNPT4aXe7ikW0jWJCJNA8bsCnrIqdcYnZYWnGnnjOkssl3hBcMV+Wi+BAN?= =?us-ascii?Q?xp24hihciX2SAPti69J+DIgqmRnegjd9+DabIpX3iocrP7wcnU+EQWyAz8Ko?= =?us-ascii?Q?20+u/Gk7VzMHp5R60P4GjyKjij5q11PGAbB8qSi3Me/9p5rdrUosXWVMnEJG?= =?us-ascii?Q?lDvpzkr8CyFqqK3gAL10sIhZQ5DTDxgh7d0nOiFxTHAFpkJ5sWTlp/PCPexb?= =?us-ascii?Q?5AARcjD5hUhR5E99uiY9M6hoYHeMEl9ihBgJ3qXQOp4lIQF/Sj/RopDxeY1H?= =?us-ascii?Q?M7yHg2b8K5OweqK9AV2fs7mt1JrRGXWE1GAoe+KuGioyKoQc7ZQUerYrlvcL?= =?us-ascii?Q?gW0uOxJ9hY+9U9MWx1HH4a0PG/ypxp4U8op2R0fSJJEXE418Lj9sHWHqA4qA?= =?us-ascii?Q?piItcVPY5Pl6oyj4M9qapAQXIuAI9Gag0gGPKNofFvglcX/lhLcd+cEEpMHl?= =?us-ascii?Q?wN5v9NvlNgtHLDVwiIB9ABRs0BtAo2in0vKPWJyY/qwf7+OsWGsIdn25ShxF?= =?us-ascii?Q?/uI6z0G8JWtBTgBmewQg1VoYn6sO/2ORtmuJK5hXr5IRJFSu9S/0cQnL4k+V?= =?us-ascii?Q?IQL63oaWWIYqxOTaLGxpdG+MzU8kNo10vat09UXVTxZsNChKfEBKlCntTOEg?= =?us-ascii?Q?UsNX2O8CsMONs0mLSq3zAgYYhisAMkyiH+75r8/RHchvenli85B+PAOi2lJH?= =?us-ascii?Q?j0LbZ91JhVBvaBwxFVO6EGl9WUKuLWJh6h9+ecWfqcjWopuoanIkWx5NwmP4?= =?us-ascii?Q?6AG+xA4eCHA+668T5/GiSoDAnxavCY0ERC8tMOiRw/T3BZBOy4u3RdynJz/M?= =?us-ascii?Q?yC4Aq5B8E8lxqSdTBmgV68g+sl9TcIS6ca4vxsiFIxenmizNHB2kFNFZeRyZ?= =?us-ascii?Q?9Z8s/n1Cq5iRjo1icjDtk9cchKIdYJ61/c8lj3yPacf4grhogG01QeYJG3M2?= =?us-ascii?Q?paPpNuiUAozr6+8SsYRpAMwzoVWSqS1LmR6FiQKEV1vTCTgWg5esJttz+irY?= =?us-ascii?Q?uaqzVAmQATB21Hj96SlEbuUMa5UTbCpAEQNgyZeRRTfcPpsnBnUk9gxPrf+r?= =?us-ascii?Q?nnGLh9BqXwWgKCQtrIhsxTAamlPPEkhQVQ/k9dBcNko7BTBKVAch4t6yggAk?= =?us-ascii?Q?+EOFubR5XEkpsZ8ohKiGKlyj/0YX9/F7G5vCaOiD/j8hkV0RJpixCxYhFwir?= =?us-ascii?Q?E4/AcaqBU9KfGZ47NWEjyzPkvOAEsVftxByM9QEUGVUDx6C2tFSN3o78AGMQ?= =?us-ascii?Q?2l0LkzZ9Nl7/+NdqM7nlCtoKV4J5Os5rhxgEOT4tXqd90AUd8x0JY7mmWL4M?= =?us-ascii?Q?rPLQDqcEx12ZUq+lPJ3bKK15D6eyf5Uo/tXa+7al8NpneadEvsMaAVmWR/I+?= =?us-ascii?Q?F69x1096Ed51fsKeoket8+JBuAJvtOb9mptthxWUooKHY80ZIoOJZg7kO3IP?= =?us-ascii?Q?MlVYkJ2ZHcKBRHCSKsxSmY+o3+8RqU5QhjkNkTq4OXRdksYkEyUUDOkBab1P?= =?us-ascii?Q?bRK+/RWO1uK07K7u9kJnLj53GkMhrdFdk9AWAZbrdeCloE87PyBXp+CM4ZOC?= =?us-ascii?Q?cghUIo9eocUSzUWGUtFfGYANpeqRfqSVvG+ac5+w?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5e541c6-a8be-400a-54c3-08de1d89e8ea X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:08.9679 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bObcHxZsD8G/rhCuNmaS10fAYUdT8NAE6Sxg92gljESs7wWfJTOOSzfY92L1ILwjo4HPQhDTrJ7ffMXmn4F+Vw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" These opcodes are used for register write, modify, poll and store (save) sequencer operations. Signed-off-by: Joel Fernandes Reviewed-by: Lyude Paul --- drivers/gpu/nova-core/gsp/sequencer.rs | 106 +++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index ee096c04d9eb..32a0446b8c75 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -5,6 +5,7 @@ use core::mem::size_of; use kernel::alloc::flags::GFP_KERNEL; use kernel::device; +use kernel::io::poll::read_poll_timeout; use kernel::prelude::*; use kernel::time::Delta; use kernel::transmute::FromBytes; @@ -40,13 +41,36 @@ struct GspSequencerInfo<'a> { =20 /// GSP Sequencer Command types with payload data. /// Commands have an opcode and a opcode-dependent struct. -#[allow(dead_code)] -pub(crate) enum GspSeqCmd {} +#[allow(clippy::enum_variant_names)] +pub(crate) enum GspSeqCmd { + RegWrite(fw::GSP_SEQ_BUF_PAYLOAD_REG_WRITE), + RegModify(fw::GSP_SEQ_BUF_PAYLOAD_REG_MODIFY), + RegPoll(fw::GSP_SEQ_BUF_PAYLOAD_REG_POLL), + RegStore(fw::GSP_SEQ_BUF_PAYLOAD_REG_STORE), +} =20 impl GspSeqCmd { /// Creates a new GspSeqCmd from a firmware GSP_SEQUENCER_BUFFER_CMD. - pub(crate) fn from_fw_cmd(_cmd: &fw::GSP_SEQUENCER_BUFFER_CMD) -> Resu= lt { - Err(EINVAL) + pub(crate) fn from_fw_cmd(cmd: &fw::GSP_SEQUENCER_BUFFER_CMD) -> Resul= t { + match cmd.opCode { + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE =3D> { + // SAFETY: We're using the union field that corresponds to= the opCode. + Ok(GspSeqCmd::RegWrite(unsafe { cmd.payload.regWrite })) + } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY =3D> { + // SAFETY: We're using the union field that corresponds to= the opCode. + Ok(GspSeqCmd::RegModify(unsafe { cmd.payload.regModify })) + } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL =3D> { + // SAFETY: We're using the union field that corresponds to= the opCode. + Ok(GspSeqCmd::RegPoll(unsafe { cmd.payload.regPoll })) + } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE =3D> { + // SAFETY: We're using the union field that corresponds to= the opCode. + Ok(GspSeqCmd::RegStore(unsafe { cmd.payload.regStore })) + } + _ =3D> Err(EINVAL), + } } =20 pub(crate) fn new(data: &[u8], dev: &device::Device) ->= Result { @@ -64,7 +88,16 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) -> Result usize { - 0 + let opcode_size =3D size_of::(); + match self { + // For commands with payloads, add the payload size in bytes. + GspSeqCmd::RegWrite(_) =3D> opcode_size + size_of::(), + GspSeqCmd::RegModify(_) =3D> { + opcode_size + size_of::() + } + GspSeqCmd::RegPoll(_) =3D> opcode_size + size_of::(), + GspSeqCmd::RegStore(_) =3D> opcode_size + size_of::(), + } } } =20 @@ -83,12 +116,71 @@ pub(crate) trait GspSeqCmdRunner { fn run(&self, sequencer: &GspSequencer<'_>) -> Result; } =20 -impl GspSeqCmdRunner for GspSeqCmd { - fn run(&self, _seq: &GspSequencer<'_>) -> Result { +impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_REG_WRITE { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + let addr =3D self.addr as usize; + let val =3D self.val; + let _ =3D sequencer.bar.try_write32(val, addr); + Ok(()) + } +} + +impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_REG_MODIFY { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + let addr =3D self.addr as usize; + if let Ok(temp) =3D sequencer.bar.try_read32(addr) { + let _ =3D sequencer + .bar + .try_write32((temp & !self.mask) | self.val, addr); + } Ok(()) } } =20 +impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_REG_POLL { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + let addr =3D self.addr as usize; + let mut timeout_us =3D i64::from(self.timeout); + + // Default timeout to 4 seconds. + timeout_us =3D if timeout_us =3D=3D 0 { 4000000 } else { timeout_u= s }; + + // First read. + sequencer.bar.try_read32(addr)?; + + // Poll the requested register with requested timeout. + read_poll_timeout( + || sequencer.bar.try_read32(addr), + |current| (current & self.mask) =3D=3D self.val, + Delta::ZERO, + Delta::from_micros(timeout_us), + ) + .map(|_| ()) + } +} + +impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_REG_STORE { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + let addr =3D self.addr as usize; + let _index =3D self.index; + + let _val =3D sequencer.bar.try_read32(addr)?; + + Ok(()) + } +} + +impl GspSeqCmdRunner for GspSeqCmd { + fn run(&self, seq: &GspSequencer<'_>) -> Result { + match self { + GspSeqCmd::RegWrite(cmd) =3D> cmd.run(seq), + GspSeqCmd::RegModify(cmd) =3D> cmd.run(seq), + GspSeqCmd::RegPoll(cmd) =3D> cmd.run(seq), + GspSeqCmd::RegStore(cmd) =3D> cmd.run(seq), + } + } +} + pub(crate) struct GspSeqIter<'a> { cmd_data: &'a [u8], current_offset: usize, // Tracking the current position. --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AA67354AC7; Thu, 6 Nov 2025 23:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470744; cv=fail; b=mKVbnJypdT5DF0FYz/aKAsnFY6Pl1TedPHZUqR7RnYMGe2HidvluYlih+fuyB5Q6Y/BaPcWozfOiB6lfgOkOSq7Dh0g2RyfNvoxhqhc23ayrNtrbFy56+Gi7RCmm03UNfMLmwlQI1kHOyYe7SEk0Lbznvg6+89KaHoWy7KM7T4E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470744; c=relaxed/simple; bh=Vj097a/cV+GJuXYfQgQTQvZg4KXJVafYvRYf3QvoQZw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PMzTz0wREu/Yb2mfv5USW9WaI4ySK6NMHoUnPNVBw5AZ378KzFXf6KapTMwhmQ7kySGsZHU5hfnRV582d1wLUnQjmOvMI1Q184JgPKnvtAfeiRxNbYlLcQnQfS9xDrI2qRdmIwWd1FqC/zj+j+ViOz05mfngOLQA6RnQcUaGTh4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=ViFqeuIs; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ViFqeuIs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dLGqVGBRiVQ0lDSZKc6riof1nxuMbQdJp5KUAjVSTJdyYs252B/P7kogV0HXNAjYU6DZoX/K02OWzxrGPwWlY5Cz4c712hLpKiGLWk6a/LzPQZk3FSh9hFwUiO7+EeUnVKAjbBv6H24qJR5cVaT2q9INYNeQeij7Nitz8lepqko2MK1IqlV6DU1MZ3Jg6MljfoZfmkOGgqMky6gvrqYCQy0xiV129pGsNXXhWMCal+AnHT7O2ybc6Y99jALoOES1z7eaHT/+Rfbj8bMoNvrB6WFi9Ro+MEWLkZlD7pfZAVmMyXHpFTn0589oA4D/t8am9MhoONTnJJWyR4pzcdRL9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ZPPO9eRjXEejcREJ1vM57xGhXti6IWGp5k7c2LW53aw=; b=woAKSMDLwDMC2DNh6zdR2C3HWD2Iai3MksJE/lk7iFtII6I3vsjXwwLQWUq/g77O7B6sOzsrzCOMeQecb/szba43CBNHsdT/1TrG35KlLao2nhtvMndPRpvoRMV3HO0Sq2tnSgPrjROOjs3/tZj6B7ZQh5XNn8yChFlSIbFICyGgzSDTwnKOVzUB4o0o2Cr6E7XMavmrQwxgDBg6+8K+t0bLxEeotcV8qk+F/kGaAd4cMEME03YLkfdSVLOpN5s4LWNuVHWhgl8sKVnk0FkO6Yz0bjUtgNMkUQ/WAU2wfzg7ngGtaJnSTFvEBvAN+8eklzJgMmcA4sUxk1A9xFRijQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZPPO9eRjXEejcREJ1vM57xGhXti6IWGp5k7c2LW53aw=; b=ViFqeuIsc8lMZ4mCLmJFl7WPQgakSuyZrBNlM3lcGA7FlC8B02A6AzN22P7jnSgiIBnKe5byGNjA7JTdfN83/+SjJWFABeSM1y2FeNoe2bb8HUnSINmFj3zxgQ8LehQEAWD72vjsmasEwNS6niuJEPn5Yipa4FZuvzMGpaJL9+Gaj19DkgyHlUZPqKI0TmhGg93S5TlHA2PDOXSTOPeBYJo69x+0t3Qf2uOB/bgtqsBzkGod90l1a525xWZ6EAdbyg5cDIZRwO5z25urSCJUopUezz7CPpp4L9UBRf7v1Rucb7qlCpXyUiAxmpSk33AMMI3vr7llvugNAuKGFH2KLw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:13 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:10 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 09/14] gpu: nova-core: sequencer: Add delay opcode support Date: Thu, 6 Nov 2025 18:11:48 -0500 Message-Id: <20251106231153.2925637-10-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0PR02CA0019.namprd02.prod.outlook.com (2603:10b6:208:530::34) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 3375472a-ed99-41c6-8ef9-08de1d89e9cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?iOx16Xz0HtssUBmFhPfl0G2Ya1qDYWD887+ccXU7j148yMxReLk+vNlmDsEX?= =?us-ascii?Q?4A3qTIstPKI5gXEZKitxVjBtPIzkdM4qi9P+Pd58tgCKVrXQnvm9WRcp3e/F?= =?us-ascii?Q?gyy01D5R++EcAtfVB+pRH72nMlvlZPOctstM5fpxDkFzrKJkL6f8NaPQG53L?= =?us-ascii?Q?xIX06hunRVLW7M5MLah8qSKpXI9k6knzHfbBQSsdoExSaZnaCSfXErJTN1rE?= =?us-ascii?Q?mVRtkyeGrn4MlhOVjkNjQB45o6AaC2MbG2O5WAHWMerIQnxdYk5nTdEeHNKH?= =?us-ascii?Q?uF6+jYxuZXmlrb4rd4+bt7d1NP17ZMMV5H6Pnq3r852GVe6O1WUvZEVkT0hA?= =?us-ascii?Q?rSrUnSN6lntHEBvMYo40i7MEib0X6uVpZwAfw9FlgncBtP80NRv+k8t/EEHg?= =?us-ascii?Q?vsWTY5gKrYEyXGdjKM9nMMUjcBxzFEwOGqlHOy0eBhkik9y1LLtJ4cp/2ho3?= =?us-ascii?Q?DgDRgcTEDxeJGhirv63RmbuP821LkkHelKf3/zpKtnq03JaLJmR1UVEFHYp2?= =?us-ascii?Q?cb8MULGGtbnVggQ1926Xpw9ZICu6amKOQlqorHkThw2QGBI6Hn9X+jqG6VXg?= =?us-ascii?Q?AZIhOk8v9kk7HQ0DzQRIwhwfr/4iHVuw18q2fbDyiFLHY4ukeWuQ9mMJ6tte?= =?us-ascii?Q?6mdZEIYDw+zry3hgDZ3O0hfEk3ytMgTqtKWy7CDMeD0zHlu7sJCrxtJLLdUP?= =?us-ascii?Q?Dit8nsZdjhJ15Sx9JYD8hP21sgvMDvoyyHZE0vdhDob17aPm/9L0GobBrJtb?= =?us-ascii?Q?7TUHjO/wvQmzFifhaLKq6rHpacH9IKvBw4fsyQnJonSZNL2aiXv4T4c8AKRl?= =?us-ascii?Q?Rf7pVuwnT3nM/TK+WTw5ENmbBu0FVAl0BqCBf/e/Kz4+2GJCE9mRZsvcja6d?= =?us-ascii?Q?UXWTMJkDZRfXjy+HslllIZlbjr0CY2UqczXUodq4fmlvBFi/uWQZet+CL2+F?= =?us-ascii?Q?f2mvt7Ktw/Nxxcw6KiSQWpjzm+HQH1leiqRW7ZGu53eRDYUOaOYJ2vXDm8EM?= =?us-ascii?Q?V0Xb9kQ4pW4ulLyPZ6lYJpPsh+0rOBsC1N7dAFUsSe2OzpeYt2mDIAx0oIA9?= =?us-ascii?Q?jpFa/bnw6hKfI2DS1bcHjFhlOxYSSBYy8fMvngcwlfkgnFXjDR0RASWypUMh?= =?us-ascii?Q?d35BJj5SssjlHTLiy2E0CDnDhLhsfeobgo4Rbb4CfZbshSrNG8GmmqzK5qXB?= =?us-ascii?Q?DB4cQjuiSeDWELhAL1tw5jlpzHOjvnt4llK92EEaXFtPG3yxtAAcq5GpCZza?= =?us-ascii?Q?8bPyU2b/B02NHGCxuy4bwa8bhlvQjsg1w9UjSnDNnWKjGPDZSYuwl0CdBc+m?= =?us-ascii?Q?vOicL3XEW48XXh1jX4HAWbfyMssoHZl3M4EhsDHjfqAbhUUvzwx085wXWyG+?= =?us-ascii?Q?ZBLs25tNdARtXH8VeUzWkqIh9YZiLVpuQIaagUVdnNhE5nsSAtO7pIeorJSu?= =?us-ascii?Q?oDXnAgafeey6klylIflhuEgRrjYtrtCg?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oIutuLE23OdMzyB4ZnDVR6ObIp3rf2lzrrC2exid0VezxpIjHrnoWtCX1v0k?= =?us-ascii?Q?tiDUyxiTsu1s21CCSzGroNtrdNqkAXf3XLh5TgSK3igVYbKUhprjsQ58PfXf?= =?us-ascii?Q?km4IVYjWzf8zm1BT0EzLQGJ6u62bjsLz3UeqmHjaYwiTcnp0weRWN5o2UgWY?= =?us-ascii?Q?562RiW+KA1qYyTL/OOv5UhD9jjCKk2utIEbYsjTx5sKGnwwWbeE1rcvM9fJV?= =?us-ascii?Q?uCCFQZXjPAbTS/AwS/y06ExtiIKKR3Qv9FD6I1BByeAajGIfa9r5ZWDH15Lo?= =?us-ascii?Q?IC0XiWW5mOPzBwyoVIRo1w9QvLPUiR0M1MFtZCevuiiJwxkY37adYdvd6X5X?= =?us-ascii?Q?nRP6WVVWlyCr2AXJV1rRacyw8HhWphieK074hVdhbb7dF9Twn3wuYFsZ/8o9?= =?us-ascii?Q?r68yLhcILf1Ohp8IFpI17PRMy4qen9XJz9uoOqgZ5s97NWVZK6vehh29U+Ke?= =?us-ascii?Q?Ax0QIb5K9i6BjvRz5wCE2aPIho6j7asbaSsAF0ndpDDVfs65h2sl61R3nAqd?= =?us-ascii?Q?Kl13/lHv3OWMG+jfKabYIKySJHlxKlXqUQS76yISCBgwek1uDkdscFEBhjL/?= =?us-ascii?Q?e7htR6iUu5+Ep4O0V0jQ9liJRtOlN1Htfrzt4YlXv6UZTxXcqviegOrW/Gyv?= =?us-ascii?Q?FgeRd2+chhn374ee5cm7p1R3sePkXWxZE2czJ8EGTFyBNwo26CMY67c9KU6k?= =?us-ascii?Q?t3LNXNkwIRNVgAqNgT0c/pKRtvkcv0AvVXTYp6boYM4pfPs7O78U1vdeMuw1?= =?us-ascii?Q?eyjWVysrN4yoej4WtzGZ7InXFgthbf6a4do7yR7RJn/45BVFMmXcBuUwCyGq?= =?us-ascii?Q?Z692bTu+K764qQDLrZDNDxLoWhpKoxlok1E1ZcilXapXb2zWSSz4cBavVFDa?= =?us-ascii?Q?x/KP3Ta01dOfvgsSQ16E84mTuNi1hJN7wFeRQjVq7Cyu4lb9dqIdjZxlTJF/?= =?us-ascii?Q?8YjUkVhT5+lxOwp6eNnAHLddRlmU73B4xfZ3Glswdj4IlPUYFlCrcPmv5EdA?= =?us-ascii?Q?h0t7YOuPhusLyT0+g0Omwpiz3ZTMgtZa7jKq38gWm7n+nc7Q0WdBxHtaWm7G?= =?us-ascii?Q?MkKOipEP5h/6QQldxf3vsbX10qt9XtFpd3zXyi075JGn9y5/LNmG2bWHUnaV?= =?us-ascii?Q?XY1xbprD5Z0UQFqtKyTJPB6G78HzUk6CYUy3W/g3Snhmbj2GoVIMyvd3nbFf?= =?us-ascii?Q?VFMpHRFQHKUTGeVbjixRnuTTylTtuz5toIGxXh3mSAOXbo0NU+zH0Xiq7Xva?= =?us-ascii?Q?683O76FN7LpHTHNRefvrQh8j5JBdrcCO52lOPmkyvStkP10awuzreZpxCISz?= =?us-ascii?Q?IWCuXy2BRwY2VFzfWng/skUQvJd1JfLeECoreC29mUM8+Y9UOeSEh19n/fbA?= =?us-ascii?Q?lg6AE93Obovk2tTv8KjQTrmlpxGJzxchF5g2i5sJCNBkUNcQYgbInFUnL9m/?= =?us-ascii?Q?d7lorIlAvztfWkVJqOeZHB36OHlY5PzZp7EatpS7DBgORAbJ9AReA5v8qwZx?= =?us-ascii?Q?6frkBxCqY1XJ11wFoq4Q/ZPKHigBiNRUIiM0VtNx3KPuuUXsQrmltoyUXh+2?= =?us-ascii?Q?0CNqKYETdPiq7dyuZHvGUuZbL3An7sQV7JlOmFa0?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3375472a-ed99-41c6-8ef9-08de1d89e9cf X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:10.5196 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wPyTJgS6Ikrg+mGmxJ19NJlM07MKO8vy9CA7hUV0+DjVLqjYcOc+D1BqfZSRCiBtDYhmYIEbL6UBhlP5gNuVXA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" Implement a sequencer opcode for delay operations. Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/sequencer.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 32a0446b8c75..17118967a8d4 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -4,6 +4,7 @@ =20 use core::mem::size_of; use kernel::alloc::flags::GFP_KERNEL; +use kernel::bindings; use kernel::device; use kernel::io::poll::read_poll_timeout; use kernel::prelude::*; @@ -46,6 +47,7 @@ pub(crate) enum GspSeqCmd { RegWrite(fw::GSP_SEQ_BUF_PAYLOAD_REG_WRITE), RegModify(fw::GSP_SEQ_BUF_PAYLOAD_REG_MODIFY), RegPoll(fw::GSP_SEQ_BUF_PAYLOAD_REG_POLL), + DelayUs(fw::GSP_SEQ_BUF_PAYLOAD_DELAY_US), RegStore(fw::GSP_SEQ_BUF_PAYLOAD_REG_STORE), } =20 @@ -65,6 +67,10 @@ pub(crate) fn from_fw_cmd(cmd: &fw::GSP_SEQUENCER_BUFFER= _CMD) -> Result { // SAFETY: We're using the union field that corresponds to= the opCode. Ok(GspSeqCmd::RegPoll(unsafe { cmd.payload.regPoll })) } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US =3D> { + // SAFETY: We're using the union field that corresponds to= the opCode. + Ok(GspSeqCmd::DelayUs(unsafe { cmd.payload.delayUs })) + } fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE =3D> { // SAFETY: We're using the union field that corresponds to= the opCode. Ok(GspSeqCmd::RegStore(unsafe { cmd.payload.regStore })) @@ -96,6 +102,7 @@ pub(crate) fn size_bytes(&self) -> usize { opcode_size + size_of::() } GspSeqCmd::RegPoll(_) =3D> opcode_size + size_of::(), + GspSeqCmd::DelayUs(_) =3D> opcode_size + size_of::(), GspSeqCmd::RegStore(_) =3D> opcode_size + size_of::(), } } @@ -159,6 +166,21 @@ fn run(&self, sequencer: &GspSequencer<'_>) -> Result { } } =20 +impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_DELAY_US { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + dev_dbg!(sequencer.dev, "DelayUs: val=3D0x{:x}\n", self.val); + // SAFETY: `usleep_range_state` is safe to call with any parameter. + unsafe { + bindings::usleep_range_state( + self.val as usize, + self.val as usize, + bindings::TASK_UNINTERRUPTIBLE, + ) + }; + Ok(()) + } +} + impl GspSeqCmdRunner for fw::GSP_SEQ_BUF_PAYLOAD_REG_STORE { fn run(&self, sequencer: &GspSequencer<'_>) -> Result { let addr =3D self.addr as usize; @@ -176,6 +198,7 @@ fn run(&self, seq: &GspSequencer<'_>) -> Result { GspSeqCmd::RegWrite(cmd) =3D> cmd.run(seq), GspSeqCmd::RegModify(cmd) =3D> cmd.run(seq), GspSeqCmd::RegPoll(cmd) =3D> cmd.run(seq), + GspSeqCmd::DelayUs(cmd) =3D> cmd.run(seq), GspSeqCmd::RegStore(cmd) =3D> cmd.run(seq), } } --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6F5B3546EF; Thu, 6 Nov 2025 23:12:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470740; cv=fail; b=XG+UQmf7TP/MxcP891W98QMl2M60NkYMxa8Q+3zvszSBkfREmrZiAUncbw3eBb6pyVQL1ph2x/UgrpqOrZj6NepYkr9lPgqmahJkBJjhjYpGsykCpAWLn9Xt8B2NNOjV+IrxSJl0FkHJ5vXTj28WkLYvygRVAduqB52qWa6VwnY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470740; c=relaxed/simple; bh=D/BeQZycyoWuo6l/WNibJwDs4n5v2IMIjlwjVFuivCU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Y4wDoFuJM7QO/W178zeun0tOSVCLKK/OnRElP5vdKpc7jBrQaJoSwaHNSqHDNHM8bOKjL4w71hKIta/DtfY/PDOorERTAieeayl70b1hAA/kgqk8ZZX3DCjqaF2MwT1ExswSffNboKvlKhssTmrUvsuziYwGLIL8TZkkt+Z8NOQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=gguoQZ9Y; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="gguoQZ9Y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U3gDWgYwqhvwVWyUIVXvExL9860mBozWN2kBdPwKl/HMAerlHiogHK+18Dz14yVJKgPllk3cVq3YOGU+Zhp3pwgog7+8Dont4x04fIgP1PGBmml2K6V5+hnci4pAiTUeTjNkWV0VxOTZvau+eZ20GXxtLFyIOi1dpAYW1oxPqzdKu1W6IE4tbjUp5DIcVmsE9spkI899y6m1D5HkGvi6LnYTFOY642dU9UQ5G7DWCfEcLdUt7YieZWC9hjH1zbvH7QJXCflmZeZvv5H2z6fd872BEBAzC2B7CZtohZ8OVA8cQHDco6jeaDWFfbY27Sw9y24LI1125YdzOYr2ha9lEw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=EMhFXvQbaLXL30z0/SDk4Wa0rKIKhrkE/fW07/cVMio=; b=tnLFoca3ePxV1Wo/QCJQrJDlTCrTNrIt2RvBlotgtsyAMbba3mB9YZgtEeE0DJg2cIjc9Hsz+Z/CvK6Du/ojqLfTSeSnfnD7pVUZM3v72iGwZiOoM3Z4yYTBv6SlNVc8rOCPmvnjGIWG8oFiOCfNAEnVOaaZjUfG2BmKS59IqebbKNowacZ1wzfM3XFISlolrPJed0fkiAzQUV5Xu8UB6SoLr7KGoySDjCxs/chTWUOn/M10w7sQXQly43G8y6KjDEoL+/UeHAUjwe4M+P9ywWDVcHvCSlVr/DW7EGPMV3C6BIXbMI4nwa6v3kcMkAESWU5mkywCvGK6OHXj6t8SJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EMhFXvQbaLXL30z0/SDk4Wa0rKIKhrkE/fW07/cVMio=; b=gguoQZ9YcMgNg/KVQ28WdFiRdBqrTKk4jLu+NQtXJoSUZ4nKzeHZKSXfm6bF1fLummD8GiHPdDhPWEhaovIo4THAwz7AcD7ZcjgB2aT3sWVOZyqal63jnr9tQ6AmnBS7LYDNp0qXtdi6OgiL/pgrRDdW9OsXbUOWvnSr5JKm5XxQ7hBKyW/SgDpPJkS+R1ihXa86iGunEwwv77FMUGs26ZnhM7L7J39ekQ0HUKA8gjDjnICuQ8CMwCEEeVvrO6nCcANVYfZJohUQ27cmzoS6VfhtPgm7hyfnkeY8Fwgc+F5wmhkvi79WqarDnXe9o7eyYup6HhWvrKcQXzwd92NS0Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:13 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:13 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 10/14] gpu: nova-core: sequencer: Implement basic core operations Date: Thu, 6 Nov 2025 18:11:49 -0500 Message-Id: <20251106231153.2925637-11-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0P223CA0025.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:52b::20) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: e305b70c-a19d-4e60-198d-08de1d89ea98 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Q4sxyr6a36cQCfTbhyschTbo3jFXvtnGTr+TYQDXYNjhqFJ94udU1HslpeNe?= =?us-ascii?Q?ynySAOz7q3b6Nk4GhkBqSUmOX4MY2Hb0fW7lxBcWzNvgumIeDZFxRozHRRGT?= =?us-ascii?Q?7d+fObBcttx/EsoNfevTPvSyOzT/pG3Ka0vkbTS3SrUoX4ZU2pRMypiEE7La?= =?us-ascii?Q?lb0qqua1/ufGIEhHZAfWinTVjWfJiywHftMAJUX5b8gFSmW28eGhcdVA+Zen?= =?us-ascii?Q?BrIy4yF9nIfJXUxP402GhGnrdvAhCBvqf0rXaT3P8SV/H/fLLgfDax9uwLYA?= =?us-ascii?Q?hoUE3EPtzDgakJsOKkK3q3p4DXInUqZNv4lC5U/WqFE+4KFjvrOHHwI+LjpO?= =?us-ascii?Q?yANeoeTdyeBpqdgVuvyRL1wgICy1E5rtDnxFjiew1ShX+/S05VVE7RR2chkG?= =?us-ascii?Q?P9SEFAwH5QYcw3htShwf2XPga8HynkqDiXvOHBfpGTm1y2/XswtfzwPPRFAp?= =?us-ascii?Q?cOWbmMPuijj/0FtWtxAPd8NklZf/52QfcKHBHEHn09dCJ0aDXjFekgBwjo7a?= =?us-ascii?Q?kc4/0dwgEtv2mZNe0xNv+IhSHpanaKmtuoLYwxtClDGlvUQZbdhPEn3tkRgB?= =?us-ascii?Q?9Nam7ne8Mu2vgyxJQxaAIct36mfyb2FQtcihFzAcyPqZcjbTvC9N9FSoYQUx?= =?us-ascii?Q?pSoAdHEZRzKyBT2ZYa60ixBcDUNZx5pqg7f9PpFiwH6+jWr81UXBhOlMWDjC?= =?us-ascii?Q?o8eR4bpStMlBWasU3MDeE/KbmQ+fA7wC9Q9COCj/OgsXCNq0GoP7WCtN+V/U?= =?us-ascii?Q?wfiksuN+zwNZRk7Sx144KvQhovpbUHJya/cFfICKe9Z3/zTc/DCRWlIOatqB?= =?us-ascii?Q?zJ3zVYAKNPS+P1/QzepNfOuugg7Un6HiAq4ixVKS8GbbD2/hsY5YUhsyORRg?= =?us-ascii?Q?pD3KEiI6g+la87xCqVGCTN8v4l/UdcZvPDwdm5si6WTVeq21SZlXag8WqTkj?= =?us-ascii?Q?J12wPv6UyBx82hKiQ3x8nhmVTe1A0oAEtKDimuVv8Tb5SnFbGVDt4fkkrSgT?= =?us-ascii?Q?qHU5N97xMMijiPJZLlNuEST9kBwmVKOOSIWF0rHerEpjfxfidVz7Jm7YQXIw?= =?us-ascii?Q?TOWIW6VWv6QPZ2b2s7Pczl4wWwKx9WsW4hADum99ay4BKWw7AluoUOKG8BHB?= =?us-ascii?Q?Owl4Pt5AIGVZgASacLzp5w+K6ckkSxDLJqRpxeNIAEykC1Ks5hJhAbGOb9TE?= =?us-ascii?Q?HwG9p3yyoO1Jjb0q+IrEaRmn19Z3qmZ9e5DVqBYq+QM4I5Bgad+RuMeLbCSp?= =?us-ascii?Q?O+hgyQj2WIKIOJ28iIxFDrkz1dH/5qHLo+KCzlfLex4QV5Y/glCbjJ0B4RgE?= =?us-ascii?Q?JNtc/rPryksx5Y+EgdulckjNNuzfGT5/EV6tRZsyD/O7w+IIv+2Q+Yy/1Bmh?= =?us-ascii?Q?5tDjgOoUJweSnukMiKwJ+81C4sMYTw9vhGO+qNI121sRC046ma9Iv8TahvB8?= =?us-ascii?Q?TnPQi6/iQ5S9wy+pq8fYVHtQIxDfTABi?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Dx266i8BPHYzT+yc+axSwoEPytm+QgBeC/T68SIiFY4i9nejUT+m5A9Pa4Hm?= =?us-ascii?Q?QJ4RwZfloyvLxcuZDqeLrRFy/cZJLl7VPiJoYSRwxzskUZdsUwWie4O3R+Wh?= =?us-ascii?Q?73WLS8WdtqGlA7OubyynJLv3pkTN7ub+4ZD4qIi90c8UrcigVImVK6taPFW9?= =?us-ascii?Q?T+I6quNWWgDofZksmeCtAaIyP4xpx/zI6JLwpuGRcQw24aiFj5hdaZHDY0PN?= =?us-ascii?Q?s0sur2QC5JLzMWKlyXhvoQQ77RcdPZVEv347yCaTUHNgxAk2E892XWSm2OvD?= =?us-ascii?Q?p1PCPZY0ovj3rixcyv1jjVdRVWevnRbNILa0JBR2uwyHDY0PocGQso6SOrAI?= =?us-ascii?Q?fJvvTNqeSGdFN9vH6qjRp0uO+YPwbDGU8FGdcCfPu/TDwxoKmMAHy/vlOK64?= =?us-ascii?Q?GjW1M2ynI1gH4steQGJ3P61EUq4vosUkzn9mb4FhZ8Uncj9Gx59yWyTgQ+eQ?= =?us-ascii?Q?37idWkZPrzqZdCBCAj6aVleuQsPRj3LLFshD0lf0WrgV8zgrxn2TWpBeH3NP?= =?us-ascii?Q?wzj3m+5Y9CNEg6UwsfnjgOY2G/d12/XrN4hNLN1wQY5Mxbpf5GWmDA+cP01Q?= =?us-ascii?Q?nq/HuIifcIxEJkwdm9UleO/hjw69IrwjtfbVxuMNHy4J30N/BuQN8HoYg8mj?= =?us-ascii?Q?sNOOVgNRo8sb8GoJY3pgecE7lT69NeePLtk66vrnao9WDM5ZZJkLIDqu+2iJ?= =?us-ascii?Q?V8TqyPGIMy8cZPVTG40U8wp9vT8pX7QHssOvWnU+C+zFLtsxBZFHqGF8kQw0?= =?us-ascii?Q?1fcD/kpojWNXwvUxKpebGizGh4LZx8spU3p1tEq/H7dXjUnOe9EutFLAGdRS?= =?us-ascii?Q?wEJUnlueKSiDukEzYHOQo9/T6RLXm2FuefOrYR7vSCHElBZbeiT62yvTj2wP?= =?us-ascii?Q?auZVPw40M4JhnvhxhzNjFz2+4PnHygX664Y442vj94zGhA48bhI/EMVZGqi8?= =?us-ascii?Q?Lp6QwtOERWB8TnzRXPM/tca9j+B4pN24kqPu7EUKqBlW7585puRuvXISXc1R?= =?us-ascii?Q?2OeBPo7hc7S35e993cnhnDwdthyChIj7oj8Cx/FZV/pWNz6OWJaKtTYvqh6c?= =?us-ascii?Q?gc2x6DlDyVpxc3MQJTOgO2XRysmtsmzDXzO2qguHw9utjvBGYA5RSlUDHVca?= =?us-ascii?Q?mLRHapGH0QBe9oriyV/fj5MEuC467AoRFADVVuxNUEfsFsARSDvAfs7vtc6y?= =?us-ascii?Q?mZEWy8kKNhpBKgGLgXAiQ4OdCQDw7d0fxWS6JyVAIWp1Z1cx5ivetfNROzBM?= =?us-ascii?Q?JIGkNynRCqc6l6dlUv87kIZcPBYoDMtatcoqXKrrUMByRwHtB40VIXWJe0o5?= =?us-ascii?Q?xJgc4s/MyPH282VByKpzQNfZloNSTTp1YRcVpz9gAXERAqLivSVTZCR2+t9q?= =?us-ascii?Q?vuTEUHu8Q+dCi93EBiP8gwOU5wWIompAjhW1RmXGWn+47QvczQ/85jFeXYDv?= =?us-ascii?Q?3N52K1U06+/FyZ7o4GxuPMQQCrgmHMJKKCRGwDQ17AkK3Fm/rEJu3VxRq2FB?= =?us-ascii?Q?owlHgfNHlarfADwhufsfh4w22StYwBQn7UBIxHnRZegjCNmEvt97J/lozCnR?= =?us-ascii?Q?UmAf2TewGA8ZxeRl1NTfWWwPkHNiG8Ci4AiRhv1x?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e305b70c-a19d-4e60-198d-08de1d89ea98 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:11.7984 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xtpPoymIBi95SRdmu8T0iDeC1La+IXQYC8+6JPtm1aWbODzPRlX2Wm5tniOkWaiO/zg8EbCxiCu6FS2XeV78qQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" These opcodes implement various falcon-related boot operations: reset, start, wait-for-halt. Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/sequencer.rs | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 17118967a8d4..0192ac61df4c 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -49,6 +49,9 @@ pub(crate) enum GspSeqCmd { RegPoll(fw::GSP_SEQ_BUF_PAYLOAD_REG_POLL), DelayUs(fw::GSP_SEQ_BUF_PAYLOAD_DELAY_US), RegStore(fw::GSP_SEQ_BUF_PAYLOAD_REG_STORE), + CoreReset, + CoreStart, + CoreWaitForHalt, } =20 impl GspSeqCmd { @@ -75,6 +78,11 @@ pub(crate) fn from_fw_cmd(cmd: &fw::GSP_SEQUENCER_BUFFER= _CMD) -> Result { // SAFETY: We're using the union field that corresponds to= the opCode. Ok(GspSeqCmd::RegStore(unsafe { cmd.payload.regStore })) } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET =3D> Ok(G= spSeqCmd::CoreReset), + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START =3D> Ok(G= spSeqCmd::CoreStart), + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT = =3D> { + Ok(GspSeqCmd::CoreWaitForHalt) + } _ =3D> Err(EINVAL), } } @@ -96,6 +104,9 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) -> Result usize { let opcode_size =3D size_of::(); match self { + // Each simple command type just adds 4 bytes (opcode_size) fo= r the header. + GspSeqCmd::CoreReset | GspSeqCmd::CoreStart | GspSeqCmd::CoreW= aitForHalt =3D> opcode_size, + // For commands with payloads, add the payload size in bytes. GspSeqCmd::RegWrite(_) =3D> opcode_size + size_of::(), GspSeqCmd::RegModify(_) =3D> { @@ -200,6 +211,22 @@ fn run(&self, seq: &GspSequencer<'_>) -> Result { GspSeqCmd::RegPoll(cmd) =3D> cmd.run(seq), GspSeqCmd::DelayUs(cmd) =3D> cmd.run(seq), GspSeqCmd::RegStore(cmd) =3D> cmd.run(seq), + GspSeqCmd::CoreReset =3D> { + dev_dbg!(seq.dev, "CoreReset\n"); + seq.gsp_falcon.reset(seq.bar)?; + seq.gsp_falcon.dma_reset(seq.bar); + Ok(()) + } + GspSeqCmd::CoreStart =3D> { + dev_dbg!(seq.dev, "CoreStart\n"); + seq.gsp_falcon.start(seq.bar)?; + Ok(()) + } + GspSeqCmd::CoreWaitForHalt =3D> { + dev_dbg!(seq.dev, "CoreWaitForHalt\n"); + seq.gsp_falcon.wait_till_halted(seq.bar)?; + Ok(()) + } } } } --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7198C354AED; Thu, 6 Nov 2025 23:12:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470742; cv=fail; b=sNMrYJvz7ulXnyLYPXSx1nRviZPTf7xn/3kckcbRx13jjjZLUscnsuNtZvRqYhD4QLEzjqzRW4xP0e2OiSNU8xaQ2ESPDrS4EhFswrMed+5MuEMlRl8xeSzOVdb38TLGe3Fc0A/EG/hio/mNTqmWRGjif4uF5+h6gPbxfxWelZ4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470742; c=relaxed/simple; bh=eGMfOO/AdYpEM/rFlVV2+YLhUCPylEz0tXiYFuhsofg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rqxC8nGLeRCZ77lBdYn2OyLjhzcca9E4TdRQfUQePV1nDY0v7BKgdkgH/8NE6I11jznueTcYjT68ggakiezufk09P+DBsJdFdnVNMn2VDq4pXWKwM89TgFPY6QFsQLRw7wWFnuBRmgI0joL8U4o2mnMEj8+evRASGR0EEBpV0AQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=IhYvVmmk; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="IhYvVmmk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LuPNuqkU8fTq9AQ9QJg0RSgfFWkekiDj3kFJG5HqYqdq8aktOm5Ee40Jc4qg00J9/5kOIIpS7sukPj4xDMuo8sbnkYsgodaTJ+PomBhI1Qj5uz2G5tnVEgbuoRa9z9nEom7wRhnQ4sIBsRqry7YLMLX5oET+sIVUZRY3Zxrs8lJsvoRqncHcbPE2M0lm6d0sR83Nwq3H1Or1en1CPUg8fsH3cxCivZD8CE8wGBSo9n7oZxZTGgwP0EYXiGDeKVAHcb0wWuqFZPlefWbICf5lJJq6wBMiI2m0CHVge/pJIH64TewiuM2XdL83Y1k61odrD1rYUeb11Z/2N8JVJCYU8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=hXNWnz0rdTSFwjJBYtE54UQFRr73LqcXN7kBSUVya5U=; b=Kov5x1I4KVm0nbF83xrQVHkw29Sm8vh6tqbyDeaJbdEtoZ0Ho9vIYf9lo4Gs2aDnIsxTwdNDPHxxw2MLdJv85q/0JCtpSKFUjxhF/kh/cZSewBX6vffuy65EeUKMQRkFNJjCgEd2zw1dVCrhZ4kT90orljcpX/+cef85PELNXK06xn9o+mS6va6IuWAIUW85weQobViQbsRnOgs/fuVvAJghrX+V1ZIgVC4y39t8lkCyH8bgQKRbNHOtRQjAhXKo52yANtni+VyZ1X5t3SPkREAKURIaQrvsf23yNcmMLqdI0p8CyPkhXWzsAgNQo9eozI19UogStbmshePRrr5zdg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hXNWnz0rdTSFwjJBYtE54UQFRr73LqcXN7kBSUVya5U=; b=IhYvVmmkkfVsNtZTTXhnEsSbcCVuJvRZLCwosqxHIZfoD6D3e5XVJ6Z+W/5ZxUMmSYV9AqpjMIt4ZaxSy+y+t5lKbKqUQWQJ5hMIqeq6Gp056St8MxuLsiuUr4AaneHRRuRFL+KwD6GBC4t1+PpaJ42StwaLuYbMBxvaiWGRaYAA3IWTfzzTdubYx223RFrpjw73GxNdx4hUqIpyJsm1WPW0c0eYKU3+CfLNp5W5YEv0Yn3dJpubbwBGRPMwrpkvA27O3Qb1B8h6L1gfThpZ/psClECEdfFAXpIjF4S8pkt9Q5khRsAUObjoiBePFD7KrCg6qrAXBmvd96tgMgCc3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:13 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:13 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 11/14] gpu: nova-core: sequencer: Implement core resume operation Date: Thu, 6 Nov 2025 18:11:50 -0500 Message-Id: <20251106231153.2925637-12-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0P223CA0008.NAMP223.PROD.OUTLOOK.COM (2603:10b6:208:52b::21) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 1be9f1fa-da9e-4d84-d81f-08de1d89eb72 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0tUmPdevzCGipAQaqQ3soCzrz6SGWf2eAdfBoZyr2Whj37xJZ/b1dv84Dpff?= =?us-ascii?Q?GHs/MhLK/gNpqrz5eorKyuNNcsFgRXTDjqxV+n8KJD7OU6sniqqobOkDFO+e?= =?us-ascii?Q?Oa9SEcy+YAlIvn5OnENThCQasdpyCnLJevxRfETeRxazpc5U2CGYLeZuwIEV?= =?us-ascii?Q?koavk59VmYHjJRtHQYtUQKJcrsuhggEwK8kxTSBJ+Om5DrI06+EW0Z7K9UoA?= =?us-ascii?Q?TBXqmfgwP1HIenjrGInhSS3AvDL73T9oWNCmo8v9SSNRxFajFnse6oMz8eaN?= =?us-ascii?Q?IKWqOh/6ZYvTN+QIpwkXh+JC2xy+ZIZ2PExUo5yRc3e0Ry3N4uWKVKUh51Ml?= =?us-ascii?Q?gfgQJAmdAIJY/ziQfpbklGVEcQxzliNG2+GbE0E2EH7D4tEdBu2irgvF0ObG?= =?us-ascii?Q?E2EnWyUB22Zna/n6/AsCqi7i1zeJtOOhoiwQOkVTDcrv2k/pIyrBk18MfNHh?= =?us-ascii?Q?7CvLodd7Gd5u903v4j//dcAOmhdratxfp7aZixYnQWjgQAof//KLK4ZMH/g0?= =?us-ascii?Q?9fRBHTYS11gCzGN7orQSBN/Cvtsfu5elH113e/lFI3H3avkHbP0pEXnDnLWq?= =?us-ascii?Q?K2fsrdIoi7VUojpJLopSoh4XpzptGELDzk7pVH6t6iiQx3vUjEgigI7CIU8O?= =?us-ascii?Q?cmEy5IL4dPat4V4AHY0G7XqYtStfjkUwKAlwrUPY7P8vmM4G3A/xyerTBW4O?= =?us-ascii?Q?i/WALHd2cvGdirsKw93BJak+wQSgSdRMqXrvmx8ngQaEY1AZRTK3O9kfW/r/?= =?us-ascii?Q?f09FBmDoGfbZhRGtdZescD1LLhWjipAowE9gub5t9twdfmdvN4ALl7bfGZG9?= =?us-ascii?Q?cduy2EoxdvL4QpSetGmV1MkExoGGa+jVuvTnVnOQehQjit0fCQOrL6k0Xl7R?= =?us-ascii?Q?teFkQ1lHbPj/a0DL2+NjTFHe3XwgzjFFziyGcAkZKROg9aScwhNUISHParyR?= =?us-ascii?Q?7fcH+w3p3Qh7csPmQOVeElBCXhwlZFxKxKUF6oG3GeMjGTIDolMxhhqB11ps?= =?us-ascii?Q?5Apn5Lz63VAuQUexQHXB/eyx7Jdq+B5ZWEv5Bl5PiWNcku9AojkQX8cFP6y7?= =?us-ascii?Q?g6FYa18KgzTkIBxZwhBO7glme7N9Jgtz6jx3ZA83UGu0K4IH3ZFuz5sN/gDr?= =?us-ascii?Q?gQmM4XhLQdNaWllljGk9qWv4tVcSbk0XjKowDVNcGFUr307N1JyBMRB6B/4g?= =?us-ascii?Q?C4bzJcaihRuDJjVlE5i9f7zwc0KRNYwv+Xa8oy0g1w7SYOJ9wwg6/a4TiWGl?= =?us-ascii?Q?RYXGoUu/PmsMvvlIR4R7PB7VrffbWy8e7gLQpgKLIEYoey6kjijDvzEt4bTh?= =?us-ascii?Q?7n+9LwDOLjZcrIyvGexfqV/Id+h8MF2HaMg/2XwNQhQGVAQaMbOhrT7fNY4I?= =?us-ascii?Q?aojFQosujBsBkHdpPl9MLOGGZWU+CT3Kjvv7eaLgcTX2pc5ImVZfUnmC+Itm?= =?us-ascii?Q?jLHmfbgMtiJWK8EsHbG+YkECzyt67hwt?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jtmsEjcdVPy0Nm065O6cjUe4T0HWka+KZFbGe9KrKXuEj9aRJTC0kqtNgEtZ?= =?us-ascii?Q?MAqGJHczQb/Yfi7qnG6/+XGMTRS81v4E167TrleULOr1dgjGITd7EL4mJL8g?= =?us-ascii?Q?oW3SUFvZHFcUgnph/Pe9swW9PO7HMEE9vdXF1RdVPOVqx/P+lOxsLsdEeXPg?= =?us-ascii?Q?ICl99wGbNFXT6EOjSMy5B70MguGhXE5OjDVI0LqmaHWMvmtYmhROcDQdoXgZ?= =?us-ascii?Q?vyNhcesGWSKCy8+v85GSOy9uPBGYawECrn4XJ/Fm6uB4tHdslmgWSvqqTlvp?= =?us-ascii?Q?2vLBwKY0zlM3WNGPO78q6hu1r+Pr8Kg5Sjg4vRh0w9GIt+yIabwlwnW1SmNb?= =?us-ascii?Q?jQ0WgQWCOr43adSlPmuNnFCo2tbJ9tJ5bzCAQgW/XsDBud9VHnIHbnRAWEcm?= =?us-ascii?Q?Mhm2qxmBVATtuSwj4GiTO7e+HJMG3J/zx5BB5ondd25xcFt+TIHvy6Vugxhz?= =?us-ascii?Q?vxeKBLnMzw1sNpov5lFZ1B+7j49vXCUKMI8YbYtbjdbovQO66O4OSODktYba?= =?us-ascii?Q?FP2oYrcXWIpyi2lE21kAg9kffb1oFhPDGAVUCV67OuJkeQNTwl7j01IsxAO5?= =?us-ascii?Q?LUHVv4qDd79YjsZfgxvClu/pjyhnUKKqmnXBBYBGxK+D+6vlRbgHBVFK6XKF?= =?us-ascii?Q?hB/qGJFRBv17pLPlh9TgJLDN5vK7hAsdmHo5YUH4uklHbrSgEndnZyzx8r9G?= =?us-ascii?Q?Hdak7W/NDNslNKiGsIOZDCwxtWIg9oHdmFE6wRZN71HYrbXZpb/a7a3km5dR?= =?us-ascii?Q?GXWBPHrqt8amzycuJkliIJIGZSTbjv5ItzBWFOWJQPMnrsr5+YrsMDz6B4on?= =?us-ascii?Q?AP/8b1XPo0KtYVro9g4U8grldsfYzYovxvDKauoWryrONDvYsJaDTFhStKrw?= =?us-ascii?Q?GUWVs+wc/6VsTVA5CH2uFrpapabRIa6ewOSAgavdJ07pTz/NY/b/19PqmR0W?= =?us-ascii?Q?lGP1P7YIPF0jb39JWqCggLbI/OLabEe2/GAlmYWcTTZZ/kyER7Rp60GZWLwM?= =?us-ascii?Q?wnI0SkcxYwDjUQDmZFII12PsMITT5mINcEFdgDUp//VKTUT8mgQ9+b9Vd/qI?= =?us-ascii?Q?PCFS4UC0vSR0Ptd1Otg5PStM5GXWFkC59UA7i0gg0Sm8B7eLOqSHygJdnohB?= =?us-ascii?Q?2vR8PGXN92OjxFKkSN8Zo7N+xJk1GFdKZwtY7336OEdtNJTgu5MgpeQ+A/q5?= =?us-ascii?Q?RD9qd895DjjJQgj9sgrS07gx1mSIGLxi5+QRG1jz7rWj9VfxALymqzsV2ZOp?= =?us-ascii?Q?ffgXsFatL0Ia6DYRmLeEUWSh1VnUq7jdtbkfhBNwtd7JzEASZIUJBa+C4oKE?= =?us-ascii?Q?FLe0GNkEepgQ1gD8P2JD9GOhHil7M7zVg/UHBxu0h5nZsiqVMGgSO4ImQy6h?= =?us-ascii?Q?o1/jEPBVo/EP8lfaAiJJjFg1/eEIYMjFddNPfGGvzWmmyxQtGNc2PXOL4M7S?= =?us-ascii?Q?ucq9hXQ4h5t53Qpyp9o9qH3A34gjErlHrPxbgx7HiheQq2DSFwQ9nlQZQX5U?= =?us-ascii?Q?NwbneWkz4m/9DR7q8mhBuz1Q1NBd25Ih0iCkgYYDyzGaRlzgStviqKjaivXk?= =?us-ascii?Q?8XJOWch8ZJYRaHpMTPrtuUDBFykqUe4p7a49LmQJ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1be9f1fa-da9e-4d84-d81f-08de1d89eb72 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:13.2718 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 62MjhDt2aNi2S6Av2TYNMDWKrZdKnDauIik29Mqr+Rdvj3FUTU9KsAAO6xiVHIHGe9QofgBrs/IsUCaZCJ8gGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" Implement core resume operation. This is the last step of the sequencer resulting in resume of the GSP and proceeding to INIT_DONE stage of GSP boot. Signed-off-by: Joel Fernandes Reviewed-by: Lyude Paul --- drivers/gpu/nova-core/falcon/gsp.rs | 1 - drivers/gpu/nova-core/gsp/fw.rs | 1 - drivers/gpu/nova-core/gsp/sequencer.rs | 49 ++++++++++++++++++++++++-- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/gsp.rs b/drivers/gpu/nova-core/fa= lcon/gsp.rs index e0c0b18ec5bf..391699dc3a8c 100644 --- a/drivers/gpu/nova-core/falcon/gsp.rs +++ b/drivers/gpu/nova-core/falcon/gsp.rs @@ -37,7 +37,6 @@ pub(crate) fn clear_swgen0_intr(&self, bar: &Bar0) { } =20 /// Checks if GSP reload/resume has completed during the boot process. - #[expect(dead_code)] pub(crate) fn check_reload_completed(&self, bar: &Bar0, timeout: Delta= ) -> Result { read_poll_timeout( || Ok(regs::NV_PGC6_BSI_SECURE_SCRATCH_14::read(bar)), diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 53e28458cd7d..bb79f92432aa 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -543,7 +543,6 @@ pub(crate) fn element_count(&self) -> u32 { } } =20 -#[expect(unused)] pub(crate) use r570_144::{ // GSP sequencer run structure with information on how to run the sequ= encer. rpc_run_cpu_sequencer_v17_00, diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 0192ac61df4c..3b4796425d0b 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -52,6 +52,7 @@ pub(crate) enum GspSeqCmd { CoreReset, CoreStart, CoreWaitForHalt, + CoreResume, } =20 impl GspSeqCmd { @@ -83,6 +84,7 @@ pub(crate) fn from_fw_cmd(cmd: &fw::GSP_SEQUENCER_BUFFER_= CMD) -> Result { fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT = =3D> { Ok(GspSeqCmd::CoreWaitForHalt) } + fw::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME =3D> Ok(= GspSeqCmd::CoreResume), _ =3D> Err(EINVAL), } } @@ -105,7 +107,10 @@ pub(crate) fn size_bytes(&self) -> usize { let opcode_size =3D size_of::(); match self { // Each simple command type just adds 4 bytes (opcode_size) fo= r the header. - GspSeqCmd::CoreReset | GspSeqCmd::CoreStart | GspSeqCmd::CoreW= aitForHalt =3D> opcode_size, + GspSeqCmd::CoreReset + | GspSeqCmd::CoreStart + | GspSeqCmd::CoreWaitForHalt + | GspSeqCmd::CoreResume =3D> opcode_size, =20 // For commands with payloads, add the payload size in bytes. GspSeqCmd::RegWrite(_) =3D> opcode_size + size_of::(), @@ -119,7 +124,6 @@ pub(crate) fn size_bytes(&self) -> usize { } } =20 -#[expect(dead_code)] pub(crate) struct GspSequencer<'a> { seq_info: GspSequencerInfo<'a>, bar: &'a Bar0, @@ -227,6 +231,47 @@ fn run(&self, seq: &GspSequencer<'_>) -> Result { seq.gsp_falcon.wait_till_halted(seq.bar)?; Ok(()) } + GspSeqCmd::CoreResume =3D> { + dev_dbg!(seq.dev, "CoreResume\n"); + // At this point, 'SEC2-RTOS' has been loaded into SEC2 by= the sequencer + // but neither SEC2-RTOS nor GSP-RM is running yet. This p= art of the + // sequencer will start both. + + // Reset the GSP to prepare it for resuming. + seq.gsp_falcon.reset(seq.bar)?; + + // Write the libOS DMA handle to GSP mailboxes. + seq.gsp_falcon.write_mailboxes( + seq.bar, + Some(seq.libos_dma_handle as u32), + Some((seq.libos_dma_handle >> 32) as u32), + )?; + + // Start the SEC2 falcon which will trigger GSP-RM to resu= me on the GSP. + seq.sec2_falcon.start(seq.bar)?; + + // Poll until GSP-RM reload/resume has completed (up to 2 = seconds). + seq.gsp_falcon + .check_reload_completed(seq.bar, Delta::from_secs(2))?; + + // Verify SEC2 completed successfully by checking its mail= box for errors. + let mbox0 =3D seq.sec2_falcon.read_mailbox0(seq.bar)?; + if mbox0 !=3D 0 { + dev_err!(seq.dev, "Sequencer: sec2 errors: {:?}\n", mb= ox0); + return Err(EIO); + } + + // Configure GSP with the bootloader version. + seq.gsp_falcon + .write_os_version(seq.bar, seq.gsp_fw.bootloader.app_v= ersion); + + // Verify the GSP's RISC-V core is active indicating succe= ssful GSP boot. + if !seq.gsp_falcon.is_riscv_active(seq.bar) { + dev_err!(seq.dev, "Sequencer: RISC-V core is not activ= e\n"); + return Err(EIO); + } + Ok(()) + } } } } --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 505CA358D03; Thu, 6 Nov 2025 23:12:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470746; cv=fail; b=c/LOfYpd4pI5Ewvaxt9hgaIeWj4jMWDYphggVNbnlCdw7VwWew8iIzmZBZTDwzqDKgS0qJCj7k5i+hMc+OhOyLst6bkvPZH2T+ZWIgPNUZDvRzvtWyEOs/GVGoPgYnqlmlKWfwRbvcMtbOkz08ySBN0k7JpFKAxDSO6vkpDh4do= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470746; c=relaxed/simple; bh=D0cqLMDLLUf9QKVDVzwC2fQcScUcLRwdSomxM9ohf6M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Up5cFaFIS4SDghGX2CzlV3fxfWMmEbHFkTa3UPDfOq7JCAuoAaFHOoGUtns6d3ha38Fm0xqIODVVAiz5GJUHHQuNCjcjMwVzbV0cMLF6tg+a3TQg+PHDXYIfHmbRJ5NPRnzvaIMzEc5GDW8oro6n7JxIjDSHmz7ebdz9Cc+PUw8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=kgAlmRAb; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="kgAlmRAb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dzZfQIWUW4we1sui2o1NDm0377DJX4X7eW16J64i098IcOPc/FyTdbFrbO/VTpTBudO6DNGgwYGZFo/0njVZ3elDG5S+qZjRf3SZT/WQtLLse53uxLW52s+hFiwMiJD+6ktxtv8Y4u9sF4hrQOLBPV2AG58ry+coVQMbG9f0PrgUyJcHZzs6xk2UeNd74CZCmn2RiyowpLxDUbyAe+AYk3PxOvz2pSJFT5a72+BgKggy8d8/5e+AHAvsucOwRItBBtqdwrcAJ8OXUImcuIf3oeEJJ76h0l5iAKwh/aA+sLa6OrswJRs6Tv1+7n2TBqhOabUpeyP6QbcwqZgwgbL6vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=gj22Pju9ZckBsjOOEr6TOSg9HcN1YwNTRPlP9xR51Qw=; b=Fr62HOYC8P0uf5np7TNOLrvHpku6Je3VRBh4RHRzNFPEvtqw1EInXmkdy3VHdcMnR2wDq4j66b8S1uKaj3vqBbRuCNhvtsY752dB/4lejkYUyIjZIOtie1BeutbZYXD5QN5LPSmAgFfrDqIN5uJcogJBbJWowFXw0Jo6ima6vkLE+W46p7w3986RqJce8uD5v5lt1FQtf6XWJTiVmWYJ2pAmRCv/Ps55VsmWeG5U1JWIxVTm4ylbTpRf058JlrxhBtMC5CXWcHP5sT+jFlTOlsou9ohZMbsvnTeNiDyD/dmvA5uzOulNH69aIBfFHMB8Ar9C1z4nw/h3Lx+/nAPw4Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gj22Pju9ZckBsjOOEr6TOSg9HcN1YwNTRPlP9xR51Qw=; b=kgAlmRAbhjEkdZmF/XmdmSvT60vxrgwlCO338Y9D+HLH9lmBpr5Ea29LpPDQGtxPERQopY2H3ku72c8aO2qtwhW/byN4gvj77isa3usxDmZhqlnIQ38QsflXRbsPoj782MwxKJfxEluMLbo1i/SmIgp/7tT1P86PEfNAk0SvCcyxleUC62v3WH8g2Myumb0ZB3QBUClwChCY0F+i2JknTfliknKcsZnHJd6F2zyWk5Vzx24Z6X8HzVBmFaqc28LtbDpqRSCMoyq4vXmCg/wsngsof03AW1sp7bsckp/er34A1ivdr7MZC+2L9x7awJDQc46Jr5hLKtbEOE8OMZADiA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:14 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:14 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 12/14] gpu: nova-core: gsp: Wait for gsp initialization to complete Date: Thu, 6 Nov 2025 18:11:51 -0500 Message-Id: <20251106231153.2925637-13-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR15CA0054.namprd15.prod.outlook.com (2603:10b6:208:237::23) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 78a5165c-a342-4fcd-eee7-08de1d89ec3e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kIPbXap+Uz2w6h3/0jO0PM/UMdTvzXl9nWkujfecC/newrNARIQCMLXrS/vE?= =?us-ascii?Q?qU7FiocjrnA0Fm38qdhdNLNIs/0/YXnSxeQQS3KZvwRtB+SNFgPp30C9LWqK?= =?us-ascii?Q?iwpf6lyAyNUM0zXPN0/CqOdMciUEQhXGedace6YahE4heFCAkEhaXt3n4h3I?= =?us-ascii?Q?19uq0FBZNsu+XYZVCg4fL+Xsr30w8rMoNc6v8hFTgGFk07VGlZhy+HiqXRlA?= =?us-ascii?Q?heemJ5U8LKFbD6dS/OSdBqd73DkwGdmXpZ72EFakXk7rUlpLjlOWd1sfsAou?= =?us-ascii?Q?sf5x1aQv9HJ5bn41kdlbg0C1BgcueAknPqaWsmRSpKPvP8OwaFThwkxv2ENc?= =?us-ascii?Q?RCljZuAurqHWSYLrM2Lfm4jVa98vXT1Rm1dL0W3u3M4b0iJuh/n7aJF/qkwc?= =?us-ascii?Q?qjYuYrEIQVgCe+rnL+/MrT0MVRLsYYqNnNNWDBe1uFRkAgPJb3HyP3kF22v3?= =?us-ascii?Q?rlBGpFNXuJ7kPJtplDQDWlIj8BRXBCD2oNQbP0daBhnR+vhCM5L4crKBd6rx?= =?us-ascii?Q?k2h1icluh6f9pViyFEpH6X3pYFmDAuq4M91OtOSVnktTljnFDVWbL+3SExYW?= =?us-ascii?Q?h7doy5VCdSzEse6h0Yz3mCvClxUxyfYm4lP5g+gQ38Ej2s4KpvzR1YJBvCb1?= =?us-ascii?Q?2agGS6Z4cP7MZKhu1F6L1LCcdHax/JdUQD7YXTx/RkfgLyBr+ixiowjLiAvP?= =?us-ascii?Q?u2Y570qM2/5rC/n/ySmhtXLg80baWaggpRN++c78+yaDue+LBSh0DdMeeGB/?= =?us-ascii?Q?Nzcj7yrOLBERS1NOVcqUhxg7xKYoaB9bTuBIQI4wS+nb8HkJq/+3mnvXzH57?= =?us-ascii?Q?//DKU1BlxNbJtrj1zPpCGAbAZTbka+RnkDVFJtLldrOhYhVcm1/jdE0YuuKn?= =?us-ascii?Q?m7i9JbL/thKuwirfE0VgkZ0zjVfh/IBOC8nyvbd4YcHAt+wGynxhdd7c+Wuq?= =?us-ascii?Q?p+ZSeseu/sM+czQG1dt2MibiNWOwXdZ2OmHTppCiznvae66AOApZecGEbVKy?= =?us-ascii?Q?I5d722h3ZdJBBnfIrjrlCBc+eOediDF6jD/WpCNqm+9lyZxXW04Jv+eXUY7y?= =?us-ascii?Q?y1umVQtGHR0FaqtqSwVZORviBTGeDbXEaVaPcMQSJihSK+NUK/S6Yr6o6T9P?= =?us-ascii?Q?Yil7ap8tuJjI5SdbpIuAWmBM5j52Xxl34FJHbNc/OWbVaJD9nRdiCD/lqRZD?= =?us-ascii?Q?A0qmkOU1fxnvbq8LmkHfKlthlKrm3b5avmYfAVRbfNlFXzBqcYOTBCbWuiy3?= =?us-ascii?Q?mjXLqjO2DkK7WnBTIBAEmO8mcg3tLJrNVeBIORkO9Lq4ENkHDT6zuUZoPulD?= =?us-ascii?Q?6xb4ix0K1jHYtJCkLubfM82Asxb6Oo3jZEwtA2GP+QhmBLHqtMr4h9gTcBZ0?= =?us-ascii?Q?d9P+/jeNDaBCa9ZddB0jLVFmxeU1I/pX3rQmx8yU4ssa1xCuzZyfQ92FG0jD?= =?us-ascii?Q?gZNUONrv3xaMZqXI6VE1EVWrr5toTFUE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yYU+/swinh5dAIerp51mS0g+vMpiIrg4TQKHPG2xZVS2sdrSAsIg7rh3iZOo?= =?us-ascii?Q?lzRBUl2xM8gsd238Wl0r7JIwSQhFIOCID6Iq6Vvwu/iozMCkzH3GvDCaDKDc?= =?us-ascii?Q?NuRQabqRwk1zJbhVa6ZSUuEFULGvHHnXLC9wY6yN9xnYwdS5hf0BYsyVfATS?= =?us-ascii?Q?tXxDxp/wuEotjTFsz3OhAkFfwYQD19bwBUXbs/Fci2OOniALPMGdclKuRzwj?= =?us-ascii?Q?M1XKc1uO9Ul8JFnUMwNU1dZnB3Eh9+cNXDtjQRXajZptcAb7bLsvdQx85J/+?= =?us-ascii?Q?HNvc7RhMYlsIXBx+yhYsxzdmk07AFCbCGt2Tbdgayz3aXa0B3c9ueVLsli8P?= =?us-ascii?Q?++pQvkWdAs13QEIAE+Cuho5ISUnfY3fFLRNxuAGl9l1+IcLZ7aIEyGuUXiDK?= =?us-ascii?Q?Ni73qZVhxEJdxQB6/sN6OcTlJLaXSb4lcKPPDJrpcYC6ihecWrpUfk8YuyuZ?= =?us-ascii?Q?xmWTvqr5SDSP1UHhpJxx89l5rJhYf0vMyxnBnYvrSPP886vbbWkZIs8v8c4a?= =?us-ascii?Q?IOB1YiLtIHYgv7fz30bxEvqVrX/+6wmzF7mr6Q4JFI5S1Tx1x/6cPEcRzKtt?= =?us-ascii?Q?CvVbeIBpuIt/T8i4305TVjjmt5BUMgnFXIlMa7hlMUQHKhdpW8KbLiePHygz?= =?us-ascii?Q?RqOQoIqm89C+wp5yQAkAX46RfCB96Wkmrb2vR9hpxieaVS6nrWWSQTMySjgQ?= =?us-ascii?Q?+OaIdqMJcyDg7ntPbbh7Ql0fA8fOBoI4XofOK0kdzdvTbGYHJnNg4qKHHBqI?= =?us-ascii?Q?8YZtbaN3N9glusiktGI5IdJTgGYmsn2TQNanJPPkpVkCyDbT6kG35Sap447I?= =?us-ascii?Q?EVgQa59YP2VNoi6tJweKnTMiy9E66JrMbsgT6l3T4cyWhoL5NAMKJUP+x6Zt?= =?us-ascii?Q?okjdxxdJRVDSqbIjvq/0wUrF68Nu0mCPX8fMK9dN6qByVXT88i9X11hJ6nqX?= =?us-ascii?Q?lmBBv/aHed2RFTVrk8NipgI2kmcSFzzLZE381O3WgvDOedGVm9d6qKELTWBE?= =?us-ascii?Q?Zue7QoTIfjXxxDDVT5Hy7P8jkbqGokIKksD50y8lfXMWUyyd4jfikQZkcTMj?= =?us-ascii?Q?diGWhWM5mnqCBQSVfB31klZ4NiWSPzvIcBQM2xQVVOhBeSJZnL8T6PMqe9BW?= =?us-ascii?Q?AFCupSM9J5/d0GV38ni7WC1x6E2b8O44UY3AOSysEfiu/aj8ydJzUT7PwXiR?= =?us-ascii?Q?N/jWvoXXR25ISDG5tiS7zAhFr/pILj82fCLpTagvnEENKhMxUcsLVGAiLj/C?= =?us-ascii?Q?C8LDNw93aZ6INQmu21XNoD3RfU5xSh5M6OHqzNc11O2TVPgmLDIaUQPqqvhL?= =?us-ascii?Q?bejXQeKRnaIvdgOLxzsCl4l2P61cNKhgT8PXohF7svSn9TImHcGlEptUkC71?= =?us-ascii?Q?phZ76xX/1X2jJsYD2MGA2wjvMHxFNUN3k0hjI/Xoe8GwnRauuFL72v/X7o5T?= =?us-ascii?Q?r3iMb0FYPEIiQrn+ODHjFsbQhmjxLcCVpR41x9qUHahokku3cBeJx/K6LCD9?= =?us-ascii?Q?ZSx7Fq0R8J433EzN4GOS31QOPFATmZC/sFg+wgio7R0txNowSVjjChhZO0uL?= =?us-ascii?Q?3W9ssZbGg8b0VIz2Es7WrqP+ZofvCV2mvXqSqt6y?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 78a5165c-a342-4fcd-eee7-08de1d89ec3e X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:14.5657 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zjx8NU8Fe9saces9E9rycEQR14m/RtdLg9cKfGF5LBt4jQcsy1rmVX6gSTZApfNQgLUEUpq+2LooVQsZZVA0XA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" From: Alistair Popple This adds the GSP init done command to wait for GSP initialization to complete. Once this command has been received the GSP is fully operational and will respond properly to normal RPC commands. Signed-off-by: Alistair Popple Co-developed-by: Joel Fernandes Signed-off-by: Joel Fernandes Reviewed-by: Lyude Paul --- drivers/gpu/nova-core/gsp/boot.rs | 8 +++++- drivers/gpu/nova-core/gsp/commands.rs | 39 +++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 761020a11153..0dd8099f5f8c 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -18,7 +18,11 @@ FIRMWARE_VERSION, }; use crate::gpu::Chipset; -use crate::gsp::commands::{build_registry, set_system_info}; +use crate::gsp::commands::{ + build_registry, + gsp_init_done, + set_system_info, // +}; use crate::gsp::{ sequencer::{ GspSequencer, @@ -221,6 +225,8 @@ pub(crate) fn boot( }; GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10)= )?; =20 + gsp_init_done(&mut self.cmdq, Delta::from_secs(10))?; + Ok(()) } } diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 338d1695027f..521e252c2805 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -4,16 +4,51 @@ use kernel::device; use kernel::pci; use kernel::prelude::*; -use kernel::transmute::AsBytes; +use kernel::time::Delta; +use kernel::transmute::{ + AsBytes, + FromBytes, // +}; =20 use super::fw::commands::*; use super::fw::MsgFunction; use crate::driver::Bar0; use crate::gsp::cmdq::Cmdq; -use crate::gsp::cmdq::{CommandToGsp, CommandToGspBase, CommandToGspWithPay= load}; +use crate::gsp::cmdq::{ + CommandToGsp, + CommandToGspBase, + CommandToGspWithPayload, + MessageFromGsp, // +}; use crate::gsp::GSP_PAGE_SIZE; use crate::sbuffer::SBufferIter; =20 +/// Message type for GSP initialization done notification. +struct GspInitDone {} + +// SAFETY: `GspInitDone` is a zero-sized type with no bytes, therefore it +// trivially has no uninitialized bytes. +unsafe impl AsBytes for GspInitDone {} + +// SAFETY: `GspInitDone` is a zero-sized type with no bytes, therefore it +// trivially has no uninitialized bytes. +unsafe impl FromBytes for GspInitDone {} + +impl MessageFromGsp for GspInitDone { + const FUNCTION: MsgFunction =3D MsgFunction::GspInitDone; +} + +/// Waits for GSP initialization to complete. +pub(crate) fn gsp_init_done(cmdq: &mut Cmdq, timeout: Delta) -> Result { + loop { + match cmdq.receive_msg_from_gsp::(timeout, |_, _|= Ok(())) { + Ok(()) =3D> break Ok(()), + Err(ERANGE) =3D> continue, + Err(e) =3D> break Err(e), + } + } +} + // For now we hard-code the registry entries. Future work will allow other= s to // be added as module parameters. const GSP_REGISTRY_NUM_ENTRIES: usize =3D 3; --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C623358D34; Thu, 6 Nov 2025 23:12:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470747; cv=fail; b=m4iXgTRYnA5XCMNxNB9VOAMjAGh0KORtAq4+oB6YsEcG93iop/sjLrqBuT/OCokqa9xaLcuZQipg2tZlZDCe6fcxr7o9oob9GMRzJF3TqxxrmUmluWt7ZTc66QPgg2MXHwJjtnhSNpglVP7SaQ3WjU33r4LBCJxVIR0FArmf3Oc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470747; c=relaxed/simple; bh=hU0t9JSdRHeJO7R16NPdUp7TTsgGduiXMsDap4lF0ZA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=maZrBUSwRy5axvYHjnom1mLJeEJS/AcU6JuAS6sMxygB9DjnsdU4rVIP8B0/WAuy+rV+Ki4udaZtpdjNtbODvTPgDTyfBdmy0tOsxrd2QQXC/a5lTflC5MasRaZZNI/zaRdSMPLqBBJ+84ZueHnKdmdan1B/qt0+1IgH//+L/0U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=WSgcbi1i; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="WSgcbi1i" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V9PGyUNp7p1+2lazPjLqx3zY7TjlRMUHCRrWwkzw6/0D7aK67JEIBN8CpoOqao8w43ceKlEor8kRbJ/B30ALwxR7PASrLn5CQHbw42WaSMCuWoJgOJTGKuKvI8nddx9vwLX7dESyatONq0TrOJVDtJIOaoUhiIh5HRarQZ13whyG1yd1cawrIF+buk7Y9QkU7l7M70rhCAM5mI62LhwztgtM38RTB31AgD8KAbswn883dm1HSffevbc9duAFOWF+tqfr6XtE+eFNlx3Qk/Rf0iGYU1op17iw9ITjsMY4PbKuGVa4VLsEwXZ4Ji8p/xPVRgIw+lRjlQ7eipwlWcVuOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=ca4JmZIDvQmcF9Q89mx8WNFiy5po6lEZvuwSEmU7srE=; b=ZA+GOn2i34kmsVp9mQHlZzGKwOAf4MecURmYx5RqlibZ/h+Nl3E7hDTR+lU2KBdNF2hM1UZ05FetgueBM65ypVVbw8BQ8ZRHtEUBh5SQHj191usW7KPLZLFsjGBbXLgaYmdLDpW2ikkRNukRkIrJ4xD+uxX+eqLwOOmvgLeO/a+8ZsK32YnypADlTlx7IhdLcyi8D1OWufsvQc1qU5iAepYnd8t4zq0E67+UtAZOFfmVTdmzRWpNJ48yjaPaB13t+zC14hfjx8/zf7GXWh8vPNEgRSGRt0k8QMUYI4usXTQDlv/SPRFUO2eBeKS3btiUtzxXcn8qbhLR2AkjVDbY0Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ca4JmZIDvQmcF9Q89mx8WNFiy5po6lEZvuwSEmU7srE=; b=WSgcbi1i9S9hfQsf8Q9ZrbgxRYFTAOd9OFX0jQoOD7/Bt7M+x1044p/2oDpI8dwptON43bqo++1oMyFPHhrMj+JyDqrQtrxomMHc+1k++p6vLMrViKv+xbW0krGavf2TJmXwnZrB0Vo5b4/iPprn2+yVekVatbY4KgiUQjEFFZt1DhbhTILPc3j9P+QXX1XCszb6UTSinS+RXnYWSq/o+x+VgnrnDCQwEY5MAa3wCuwkxgEmLqPyvbOT/V+biPymE15kxwpHCH4bQ+xVgv/tEeiPLnwspuWJJhgm/Ly1QRlUXxLs3eTZ0uE9T/i8Zu/ZYzVzAp/b7X2bJvBCEC8nJg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:16 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:15 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 13/14] gpu: nova-core: sequencer: Refactor run() to handle unknown messages Date: Thu, 6 Nov 2025 18:11:52 -0500 Message-Id: <20251106231153.2925637-14-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BLAPR03CA0122.namprd03.prod.outlook.com (2603:10b6:208:32e::7) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b500801-2a20-4e68-2f53-08de1d89ed09 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BeT33RbUDFn8RpILEGdNzFO2KEjf6i/XiMJWShVZlCotcOy9rrtcWKHg2qhQ?= =?us-ascii?Q?wEJsmqvHDSaL4xJfVRhf1SngU4j8GsxlLy7pfNq7fSmzCqaXD6+xbqOgXI6h?= =?us-ascii?Q?4yNHwjfquMQwx1iO7acm9/2iu2uGuDV+lE4hu6kR2xblZIHYC014g9dwNy5s?= =?us-ascii?Q?c3FRCtqhFKFFtlH0DWsXHR8y4gcj6K3Ztb2e1qCQQr89vQ1OTVsTOAILGXta?= =?us-ascii?Q?4482NN3zaa563VBBayIZvIbUXUJtVuLl0dLQntH0DzDJScr3TyhDy/N6U8uh?= =?us-ascii?Q?h7Bz74SzkcXdBoy1Tsoe069a8u/we31zhSTW3pDPS185ULnF+CPnK1000nhu?= =?us-ascii?Q?lK++cRe8dxFdVm7ZXM/NbaC0on8V9O0gF9td6LEJNCm7ZDBZV9LL4WRmZpuP?= =?us-ascii?Q?WzxVjyaormp+Q47vUaO9NbJTB+/txa24RJ3yUw8NAZ1zr0+CbwTL7jHUgfjK?= =?us-ascii?Q?zOrEHn+37yeWPyBDXYAD340PXaPdFMkvJi2r9Ddm0m44YG2KhzL8EWHJvwgL?= =?us-ascii?Q?0Y8ey8S5pb3j2RXWBS9LyntT4XCPD3B2nNeq5FWJNx5GId3xsvK+tAF/oEUo?= =?us-ascii?Q?/7qN3iZi0P4D0uZPXYZG4pIv/azqE5jsQfY/iQByXd/Q7PjlkVW+L9PPCzXw?= =?us-ascii?Q?Sz8mbKltLWmGaSkcvdAjJ8+BHLpzdt8zRxx3/xr1ObzNbhvCdsqsAy6fEYlt?= =?us-ascii?Q?GNo3mPeEnCisBcrajPHcrHlA6Q1yIV6iGeqlzfEokmEvbaTAoWAAoLSFtiGl?= =?us-ascii?Q?zpiD34+WQbdfnjY4tT9i2RQZF+oka1AhuuLZNTOrQz9y3dekgdGs1oeqQn4f?= =?us-ascii?Q?Lb2PQeW/ka2OAsqJAXM8sqctixDUyVf0DqHYqTQhdkIeGygiBps1yk6fN7JJ?= =?us-ascii?Q?QjHwI4db5qdN86AhULmp0mWKx4dhTypK7LVNOIr5/VnUtpExHsmdSwZBMhkX?= =?us-ascii?Q?xmZqUirnO3l0nC7TAh6ozr/KiggJpj7BXx+e4FAeGt6UowAGoVsFhBH+UT3Q?= =?us-ascii?Q?KiBLxWgZtCHJIpQfZE/+JpMCuxycC+oNDkKl86YnQvqbvNN5R0EDkW0eqPHv?= =?us-ascii?Q?hgw2KtvGBOJeh1d7lQsHaJSkPgzquN1xqP9aX0MzgoJBoyI7MfG9KvszJRfd?= =?us-ascii?Q?dnQqW2nCFL1FCkPNHd2KCFOL2QOLSDvzNdd0hsW76xvdZWkittRKSWQnlqNQ?= =?us-ascii?Q?Wmssa4UVeXS11y7k4DrCj06ayUhTgfMiBfzmX0WP2nNeF76mg7o20QiZw1Nr?= =?us-ascii?Q?RSIn+VTmJ0mkPovXknvXhtuoO9k1o+OqON3YqeobRSQl1fbNMVDeBEBkOvX5?= =?us-ascii?Q?F2POgyXSEzpKonKqEmvOLdMs1VBNbgc71lK0pYq/gKuyDMYKer7fwtk5v6y0?= =?us-ascii?Q?QHkbzR7k0qUifz5/fg5WvIFJX0/ri9rHJn6KuWsuEuq4kN54os0hp78KFIFN?= =?us-ascii?Q?AJg7S5MSrKaliquh2l31Zk5aCK20G+Oq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2dlSHG6bK4SQOkjDG2z4fCk/BcFz1KtP6oRI9qWat+lw+cS7xNB04k+niusj?= =?us-ascii?Q?qJ+Uk2xo8vZUZK7KQ9ilfsB2MLdLwcgfdqJJxiW9NoSAuPOZsdCat/twYKNW?= =?us-ascii?Q?hOD57Ex4H2xFsttaQekr/IqfrMnmjrmWf9Qd/u2hfFOT79oOSPICJcS37ibd?= =?us-ascii?Q?zPRJfVhrzzwmTHpr2ArfpCJ0noDySkRz4YDL6RGYzlefy5KUdY3XkYZ3l51U?= =?us-ascii?Q?9ejUn1n28aoYAeqNx0XA9s+7AwHv2iVHTEE/ZzpbUbZ19sZR/w2WwESqtii1?= =?us-ascii?Q?dIMHLpfVpqCpY4gJAg+jzkgXC9SbIvcVJja1o+3bWSLk7uFW+87rv5yce9jv?= =?us-ascii?Q?AutUIjlGMSQLDfmSHWaB9RprUP9PdAC/e6lxVt0XX8urW25aMGbnq+h9Xmyd?= =?us-ascii?Q?Bsjl7PV02z1SnAQjll38aNwJn9Q80Q/vAe46rECaS/6koTZpL69LbkJMIsFb?= =?us-ascii?Q?AtEbn6LVvev4vZKo8vHsC31IzQUbUWo/HfKSNfF6I8WjxqUbO96fh7JkEmcc?= =?us-ascii?Q?aKKy32kX8KydHoJHOl5EaK8EqbyjwZWyXNVBabfZbUeijBXmzyFJ1fksgaMl?= =?us-ascii?Q?Fc9u51JzxRghDSef5SRbDCQVO9/lyvtoCHb/sq4wUo4Wh1fbIjA3FQofcr2y?= =?us-ascii?Q?5XueoYjkIdz7tRzQXmt7+GvwXdj/21nmMwmMXHVkCgKDAXyPhE5rcAGeJX2F?= =?us-ascii?Q?uRsNZKe9nYffWKQ4PVEmBI8wWwmLJRE02HfJite6ksYDWQYQ2UJaMpZjqirQ?= =?us-ascii?Q?D8ebpyLExYD9lmb0KcOx/3JFaAZA3UY2plI/Wza6svgDQ0xOn7oAK8vQIcoB?= =?us-ascii?Q?V5YqFwTdhzIf17o28/J4Pcx+RSdAgjK1py13e39aWgBYSGVr4be3Vmvy/qBP?= =?us-ascii?Q?NujHq9fGnviMXHhen8gYD2GlbOPsgpKib/NK/wsWrABt3/RC/M65fttp4pqb?= =?us-ascii?Q?zR+qmE2vzpzURnktDS34cEyVM/dvdMl3VPwJtNpclAQJeteYnEevkWugBWVN?= =?us-ascii?Q?GgjFCXfyEo8sRYywy+EtxIziPR0DCMzm9u8HawZeS9p879Uh4wIgIwhdkL2Q?= =?us-ascii?Q?AnbCDRC77Zf/MKiS6NdyzuNz2ezND8ZCrqUhioMgQzT1pCzIwYaRspjF+X60?= =?us-ascii?Q?PaFbsEtPFfy8f65qNP7lzPiUzFtr0Mjcya8P/jC5VrtNh4rbyCPeMxIhG7TB?= =?us-ascii?Q?XEi6dH6TeVyG/E3wGKBl0d3b915mVzjRQZuFp2tqqSRKSPVuUd4NFBb9NFMU?= =?us-ascii?Q?tljTq1kCm37A4gb9OgflH/JhYCpDzV8qBFCFvxLHAe3Z8IM/dvURey5dSpWb?= =?us-ascii?Q?j3o5tCsoSjQDJJK/NoxAYdw0bOYRLSVIUxp2jAGz2nIymCKUQDO0lUHXygKf?= =?us-ascii?Q?tCNrUTg/hrf+SI1eLVC/5qgKe98QINHtDaFvdNiMrJUV6Ext1usDt5UTwkKD?= =?us-ascii?Q?9/wamcDc/ApORTTS7bsKMYdl8J2eT6Ddywd0eN2nN7axDbVCvhzbatn79v2Z?= =?us-ascii?Q?Njg3o/3KTExY8oJwkEVLGNBHlqS/8GJkKIdST9h+M1sK92ntxWZQZR53BJNL?= =?us-ascii?Q?jTXebbII0Ax1fMcpDRPmv6xuQ22AHMwSaakYKWQi?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b500801-2a20-4e68-2f53-08de1d89ed09 X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:15.9016 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4tN34yAs5P0fkpfLKMgtpu6ESvuopV1LwqgrNOrTK2Nw8MQOIoRQAu9G1ikncxJ+o5y5fBkH85D2PJhTbrnLHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" Refactor GspSequencer::run() to follow the same pattern as gsp_init_done() by wrapping message reception in a loop that ignores unknown messages (ERANGE errors). Suggested-by: Timur Tabi Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/sequencer.rs | 80 +++++++++++++++----------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 3b4796425d0b..a96a4fa74f29 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -35,8 +35,8 @@ impl MessageFromGsp for fw::rpc_run_cpu_sequencer_v17_00 { =20 const CMD_SIZE: usize =3D size_of::(); =20 -struct GspSequencerInfo<'a> { - info: &'a fw::rpc_run_cpu_sequencer_v17_00, +struct GspSequencerInfo { + cmd_index: u32, cmd_data: KVec, } =20 @@ -125,7 +125,7 @@ pub(crate) fn size_bytes(&self) -> usize { } =20 pub(crate) struct GspSequencer<'a> { - seq_info: GspSequencerInfo<'a>, + seq_info: GspSequencerInfo, bar: &'a Bar0, sec2_falcon: &'a Falcon, gsp_falcon: &'a Falcon, @@ -336,7 +336,7 @@ fn into_iter(self) -> Self::IntoIter { GspSeqIter { cmd_data, current_offset: 0, - total_cmds: self.seq_info.info.cmdIndex, + total_cmds: self.seq_info.cmd_index, cmds_processed: 0, dev: self.dev, } @@ -355,38 +355,50 @@ pub(crate) struct GspSequencerParams<'a> { =20 impl<'a> GspSequencer<'a> { pub(crate) fn run(cmdq: &mut Cmdq, params: GspSequencerParams<'a>, tim= eout: Delta) -> Result { - cmdq.receive_msg_from_gsp(timeout, |info, mut sbuf| { - let cmd_data =3D sbuf.flush_into_kvec(GFP_KERNEL)?; - let seq_info =3D GspSequencerInfo { info, cmd_data }; - - let sequencer =3D GspSequencer { - seq_info, - bar: params.bar, - sec2_falcon: params.sec2_falcon, - gsp_falcon: params.gsp_falcon, - libos_dma_handle: params.libos_dma_handle, - gsp_fw: params.gsp_fw, - dev: params.dev, - }; - - dev_dbg!(params.dev, "Running CPU Sequencer commands"); - - for cmd_result in &sequencer { - match cmd_result { - Ok(cmd) =3D> cmd.run(&sequencer)?, - Err(e) =3D> { - dev_err!( - params.dev, - "Error running command at index {}", - sequencer.seq_info.info.cmdIndex - ); - return Err(e); - } + let seq_info =3D loop { + match cmdq.receive_msg_from_gsp( + timeout, + |info: &fw::rpc_run_cpu_sequencer_v17_00, mut sbuf| { + let cmd_data =3D sbuf.flush_into_kvec(GFP_KERNEL)?; + Ok(GspSequencerInfo { + cmd_index: info.cmdIndex, + cmd_data, + }) + }, + ) { + Ok(seq_info) =3D> break seq_info, + Err(ERANGE) =3D> continue, + Err(e) =3D> return Err(e), + } + }; + + let sequencer =3D GspSequencer { + seq_info, + bar: params.bar, + sec2_falcon: params.sec2_falcon, + gsp_falcon: params.gsp_falcon, + libos_dma_handle: params.libos_dma_handle, + gsp_fw: params.gsp_fw, + dev: params.dev, + }; + + dev_dbg!(params.dev, "Running CPU Sequencer commands"); + + for cmd_result in &sequencer { + match cmd_result { + Ok(cmd) =3D> cmd.run(&sequencer)?, + Err(e) =3D> { + dev_err!( + params.dev, + "Error running command at index {}", + sequencer.seq_info.cmd_index + ); + return Err(e); } } + } =20 - dev_dbg!(params.dev, "CPU Sequencer commands completed success= fully"); - Ok(()) - }) + dev_dbg!(params.dev, "CPU Sequencer commands completed successfull= y"); + Ok(()) } } --=20 2.34.1 From nobody Fri Dec 19 17:18:16 2025 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010060.outbound.protection.outlook.com [52.101.61.60]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0768F3590B4; Thu, 6 Nov 2025 23:12:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470750; cv=fail; b=NLTwfYqq/azmyd5U86KPRUDpQCw9Siinjc7rpwbCcEvrOmuwSr8At8lB8Fvp/ciKpzh7Ed67UYzVLRtDkaaygFFN0dGUS5x5V1N7k5oL4SNd0JBHIG4Lu0W88AMGQ60wy4aleY+HCjh0vhqcuSiqFI++22QVq35SJUTMGgMwj9o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762470750; c=relaxed/simple; bh=s6ND08Gnp1ScdGzgddprmQIOxi3FDYlDEFAIqiLWros=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=IcaEXRUB0WGzgSZCTB/ybqsDHXrQ/hFx3AhEAbs5Ijq9a9/i5lR9g2S6vhHjBiINOvmXUyzdZrlvf3OzjrUWSGXc4E4rLhDa4SAD1t36mwSDZCB+x6ImG10Pz7ve2HdyooZytSF7cdM2wxo4f+C3ljEY9C2LtJnv4GmBiSgxSzw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=WEnxAM9i; arc=fail smtp.client-ip=52.101.61.60 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="WEnxAM9i" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KDwrqdvS+1fGkqNnwuratg60T9jPt8d1KEsVMBywUTS4WoyI9uFfH3hUEe0FgTL0vXG20dYGt8YyzFGqsLMNg6uJZ0NLJ4Oh679qIPAwHQJwKXW61cXeNIWp3RcBZVwICLQT79Kxg7T9SVaGuM7E1pwor5xXDzfMQM5Q1IXUmzIst6U5vYQ8GYHqkGz9yC/YD9oRsgq6l3O2UsfBof6+vXj2VME208T2kfsnGgfiArj3VOcMGcQujcdiYdl4T90L+OR2g6z0lCMfCVtYDGwkn6pZfxk8Gd0+DNoqHBIVKT2+bNmVg9AUQ3kVLpyx411XEPMOhg7cO7pdcIf7EYqx1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=iWh7+tfyLwRl1V3uybEHdZJ6cHsCHGtA3huvF4FE4v4=; b=MxizEfDpfRY8Hr78zztMOnLP7RJpm9R6a8sQNOBh0ArLIIsrpMY5rRd8YuBDXUAaCJnBY4DOBYltO1KTSER7Cr3Ow8tfGx0gGVT3ztGdN0QTo52fVblrwctsabsNp+Ek+2NrwxoR+tJXUJkYTNXzXdqUP4p20CrrhtRUZ5XeAlmGkRnNLhRxp8ADa6eFaKdCLsIi+P7Ypsgx2Jic+qFIMYs+skKePo4GwXiMElWew8eRs3Oq0EvVoljCaKbd/c3Vug/NPkEc4KrD1AuPvhe7lKciB0Y8BXHjLHlJdwvALwLBsMFI63YlQq49mwGwS6116yXhVBZKmxmqnL1+n9Sr6g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iWh7+tfyLwRl1V3uybEHdZJ6cHsCHGtA3huvF4FE4v4=; b=WEnxAM9iNya7+D+GcqpExxmtLoR3s20T5WATnGMs4I+9KV1uYnhufvDnWA8mBnS5Af1ZTD7CBS4BrZug9tpPJX2diEPIQI/+IelAlNlzotK/Xw55zWN6bLpoqMJGjGiik0vE4yH5rjmcXn5/2GFQ+38YhvWZjAyD9MnIwl+Rgjh6k71ECp+bxw9G0PPbS0P7DSi+tG/lOE9lpiF7h+pEZbEEM0RP9W/7Y38atzReaQb7JZ/KvF23Zv1y16L8oG79CaGG7CbWcBpchw+ylQDMDxxRGyaLkltTcOV4CNFdhQx8dHQLbEUA4ocQF/92vNDTrsjkT1JS7pdgfO+WBkF5pw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) by BN7PPF62A0C9A68.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6d2) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Thu, 6 Nov 2025 23:12:17 +0000 Received: from SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91]) by SN7PR12MB8059.namprd12.prod.outlook.com ([fe80::4ee2:654e:1fe8:4b91%2]) with mapi id 15.20.9298.007; Thu, 6 Nov 2025 23:12:17 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, dakr@kernel.org, acourbot@nvidia.com Cc: Alistair Popple , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , bjorn3_gh@protonmail.com, Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , John Hubbard , Joel Fernandes , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org Subject: [PATCH v3 14/14] gpu: nova-core: gsp: Retrieve GSP static info to gather GPU information Date: Thu, 6 Nov 2025 18:11:53 -0500 Message-Id: <20251106231153.2925637-15-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251106231153.2925637-1-joelagnelf@nvidia.com> References: <3b0d776e50fc81797dec2e5d81c86390af78f848.camel@nvidia.com> <20251106231153.2925637-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR05CA0025.namprd05.prod.outlook.com (2603:10b6:208:c0::38) To SN7PR12MB8059.namprd12.prod.outlook.com (2603:10b6:806:32b::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN7PR12MB8059:EE_|BN7PPF62A0C9A68:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ab1bf85-8ba2-4863-78ee-08de1d89eddf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Ib5OlzVVFXYKZ4dZvbnBJZhhx7XijDdH3vIHpRwitt03oFhO53nsi1cgxfKF?= =?us-ascii?Q?gMSWU/sKPuCLDDD5qzpkGXgB/AbQwg+5Rfy0TmAiRunwrH1sZLbLAQqsiZPO?= =?us-ascii?Q?ePsjtHKqUDp/4aiuVQltU1qJOEpgPeCxuKM9+3SiNBkE4vrnD8s8CjC8c6+i?= =?us-ascii?Q?d27WFQHSvp4ZlSVeJw+bMLsmezsTTXCKX94WvE3VwRuyY1GyPwcfhY479hry?= =?us-ascii?Q?IEwWPYaA3gqWztZT+7f19pjQ6v1Rk46C/uy0HiCmpNlrn/vtkHcKc41Dhn4C?= =?us-ascii?Q?jIDpJJDV0h0cgHKjdOTL0SFsv1zyUv5ZE4uurfGAV/KEATzWjMHr823a/pR5?= =?us-ascii?Q?XEclDigx+1HxLg+Ek8zvq8es/FSANlkmi5rlNE6ep9ZbcFC8I+Rd4B4vE0IM?= =?us-ascii?Q?FKdk1sKxpWS1EgkUhTvuTOE//n7gSNZkgzjt/SJgele80M4s/s8NoEc8bIxd?= =?us-ascii?Q?BcZivUIHunjLRYZU2meRrD1irE5BXonAJN+sOAgmphoTmgyJfLbA1BJnEjvc?= =?us-ascii?Q?AapWqvoT/Hc7ejau3FTY+BPe59J4rXYYqIBMgujRd5dTTWaDHmLl7XlQ1Jz5?= =?us-ascii?Q?g4ENfANLpVWKrs9MACcnRyZK8IM+6Twvt/twYaTwU0SSXC9KXfcPvNmExx6P?= =?us-ascii?Q?hXgUcU2MDR5cEuCJiNvUVW3xmHy/A/lAsXas9g5p05uWgT6SgGP/Xz1zWEph?= =?us-ascii?Q?3GKvHAnvP4Hl4CzZ3W5Xl3+vm3lvOkxDCvYa4XUPtI45H9RNpgzUKEP+L2/r?= =?us-ascii?Q?7vwKanp1NylJIp59VQRiXwrMVbO4dsvvjVCNXL5mbapw2bKLqhcCBcNCWMWw?= =?us-ascii?Q?9o+XRdC5TyyHznITCigug4peLHDyy5MZvffKtgnVoq1qNxKwyzqdJUa5DLej?= =?us-ascii?Q?aU0+9nDSvlUkqQHDt1LAu9CkEmqnN+TGiwrvDFH9o6n+bVo2ZDAcQT4+n/2W?= =?us-ascii?Q?CkyIHNxSqVdkQzudQfGWIzqdrzV93wDYJ22HSDdV2q43XTbM460JlzLlxqXU?= =?us-ascii?Q?PBb+XbKV+WnNyhhCAPsky14DztGf/JMnHrufMutfYTy44KFuXqbIE82QlNmw?= =?us-ascii?Q?ENpmjgmg9l4kCoyymQm8XKaABCuwz3J52oU8X+t/X/lQDaYjM4g8hnCvJOzS?= =?us-ascii?Q?Unz5zZy4eZFv3sJ4Mf92vpMQBUFQD4IjSBNucJJQIM7KHyJ3asvRMN2w1Rn2?= =?us-ascii?Q?E4zca/lSPzeN1mksuRVgGhWW/iHMXZ2F+QTvNyKJ1+Uzt42Ml4csodRL5PCp?= =?us-ascii?Q?pVRP/Bkzm+oADKOVhHYaZmGD0WEzpREnF9Vlc08MrapJGbPWG0653040eQxJ?= =?us-ascii?Q?9sCokJ+I8sGBG+L5dShogiBAGwc/OB0w+HdsHWKXDoHX2ciP5UOcap14/IgX?= =?us-ascii?Q?7zlzrEH0eKDKy9G1ELXIp8u6jKTbSqYNuYzqfkYD9RTbkGPmrVi6isP5/Xqo?= =?us-ascii?Q?4Ry1gcJRfneyqxY4w8W8XtKI3TX9dim6?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN7PR12MB8059.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?I9W0Vg4k2MahnnvCjcQ79x8T5koQEpMlNT/W1EsIWCkBB+liRVP04lqnJqxj?= =?us-ascii?Q?5TkqJDqEopiP/Jf3f/ygk8GrYQlEDMAhRPN7DxcsQR2hzlqYBLddpuZHNZbT?= =?us-ascii?Q?+iFwtyhYsqB+rjhrHNRZnMs1cJcF4XLczZ9jUL5F8HRaNRxd3VcH/QiSbHrz?= =?us-ascii?Q?PJhj/hcTwzAGh8UCq/z+5AmTvxe9rXA5GQA+08j98102mW1cSnYlvE4xw3h/?= =?us-ascii?Q?wxYCduPdOZVg1VNwAPX1EO8Zfqly634uj19//HlDuRnmseRsuLydtH/vAJpP?= =?us-ascii?Q?99Yam6qOfP52ixH4/ExPJdaDt2Z7HtUaQwbBDHasyo39bgvlGyc5Qt8iV8pS?= =?us-ascii?Q?YkgCXC+U7rM5Nb3eQyzgZ7YzKsrx+SUeX8L1K9t011TC9UztgfKBOIAPqvGp?= =?us-ascii?Q?HTMa9TimNvTtqonwLTKVLu7VJu+bd5HNZZQmxByCzxmxlijRMvKYrDi18sLy?= =?us-ascii?Q?AD39EU1QVjM7S0U7fty1fPVaCsPlCRMf9/O0cnI63T67tdOcyiop2X9GTbmc?= =?us-ascii?Q?3CMkdYhMV+GYxRev+LWduCxtCYXXl7ag1pyYPlKllwsEEPTbFWgbODL1Hfe4?= =?us-ascii?Q?uummxq60/yOwk5piIjilOjyDHQcvyV/DKB/t+k6VEDoqBvXSbCKbojB5swHU?= =?us-ascii?Q?6sYdf69bYmXtnyu1f0xJDEef7S+urDc5dYH2jZJEKTDlXekhKEhqCkJ5lEKu?= =?us-ascii?Q?isIgrZKGcrti+M4BWxQznnJUtVFJ0px1eSvz9HuFj/Snz8j32/GgqHhHzEkC?= =?us-ascii?Q?o1gTorfsul8hABvUAB52Glc5/p7c3cOc8RcJd8zIJf+/QusCX4I4mHWzKZx3?= =?us-ascii?Q?2bSgmnfNV5n6UONA+v0QxMSAopN0oyexEU1kXrlvKmp0QMUk6+9c2g6AfWBB?= =?us-ascii?Q?Xt4GL0jX96gYWV+OKhPkddO6eIOTu3eBuS8Y3iis32oz46G3aqTxP7vkxonR?= =?us-ascii?Q?Yn6K7mTJF5qQwSMHVv4ANxyBhd7XaRHsdWccEy1dF9fIlCPGTLuC1ijLhLLj?= =?us-ascii?Q?vnr5YUNEwlQ71yDC4/84UC9zZxDJY1cMUQFyQGBSTSSW44Rzj7qs7emCRzvC?= =?us-ascii?Q?1DxeR7Vz/tVAz8N4qnAM26qGef8IhFT7W9rAIy+K7eRbJ+HbOPpKm/nyaryT?= =?us-ascii?Q?4gk5gMEUlG2fkMQCdsIbG0faui4/HGJWZ7wi4i6whadqFpvvuJDEPbloiz7u?= =?us-ascii?Q?biAY/50GYPi+HAxTcGBpNMgMzxj/gBcEseswRigP/p/2DZVkybfP8iJdwpRL?= =?us-ascii?Q?2AIehhUsMI0j5hiUVwBril4V8F/pPwH+Mdbfy5l9TzLNdtx2+zL07zpwhAwx?= =?us-ascii?Q?KS7qG+GBAJkyle1lMzXvyGuzNnDpT1DIuPsaflND6gm3y8ehCL/jicJ/NHOZ?= =?us-ascii?Q?5M/OAvyaJJiHxnWNCbyNL/o9YP4+mTinyxcOp50HiHZcIKvucZydbn7xuaWU?= =?us-ascii?Q?uvDd+pxeiqGEa1XBTiKsRT974/5D0F74v3ymdrPAsv3nj2MvVnYYK0YZULeg?= =?us-ascii?Q?PsxGmZYaCXHqPQxpyneXY/L2UoiDbqs5THsLDxLLcDQav7xrRn16Xmrb1Ua6?= =?us-ascii?Q?0vOiXCau+66R/uF2EyWrExmZ5u7h+RPUDFryK1eZ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ab1bf85-8ba2-4863-78ee-08de1d89eddf X-MS-Exchange-CrossTenant-AuthSource: SN7PR12MB8059.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 23:12:17.3134 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OUWbCAQows+WHtc3SbGTS6C6sAZiCzs3EFIR3a4WrgVpS8GsGnLoqyQc284TPNnh9tZ/l2e1E6HCTF5bC8ZuWw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF62A0C9A68 Content-Type: text/plain; charset="utf-8" From: Alistair Popple After GSP initialization is complete, retrieve the static configuration information from GSP-RM. This information includes GPU name, capabilities, memory configuration, and other properties. On some GPU variants, it is also required to do this for initialization to complete. Signed-off-by: Alistair Popple Co-developed-by: Joel Fernandes Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/boot.rs | 8 + drivers/gpu/nova-core/gsp/commands.rs | 63 +++++++ drivers/gpu/nova-core/gsp/fw.rs | 3 + .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 163 ++++++++++++++++++ drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/util.rs | 16 ++ 6 files changed, 254 insertions(+) create mode 100644 drivers/gpu/nova-core/util.rs diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 0dd8099f5f8c..b8588ff8d21e 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -20,6 +20,7 @@ use crate::gpu::Chipset; use crate::gsp::commands::{ build_registry, + get_gsp_info, gsp_init_done, set_system_info, // }; @@ -31,6 +32,7 @@ GspFwWprMeta, // }; use crate::regs; +use crate::util; use crate::vbios::Vbios; =20 impl super::Gsp { @@ -226,6 +228,12 @@ pub(crate) fn boot( GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10)= )?; =20 gsp_init_done(&mut self.cmdq, Delta::from_secs(10))?; + let info =3D get_gsp_info(&mut self.cmdq, bar)?; + dev_info!( + pdev.as_ref(), + "GPU name: {}\n", + util::str_from_null_terminated(&info.gpu_name) + ); =20 Ok(()) } diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 521e252c2805..e70067a49d85 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -11,6 +11,7 @@ }; =20 use super::fw::commands::*; +use super::fw::GspStaticConfigInfo_t; use super::fw::MsgFunction; use crate::driver::Bar0; use crate::gsp::cmdq::Cmdq; @@ -23,6 +24,17 @@ use crate::gsp::GSP_PAGE_SIZE; use crate::sbuffer::SBufferIter; =20 +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for GspStaticConfigInfo_t {} + +// SAFETY: This struct only contains integer types for which all bit patte= rns +// are valid. +unsafe impl FromBytes for GspStaticConfigInfo_t {} + +pub(crate) struct GspStaticConfigInfo { + pub gpu_name: [u8; 40], +} + /// Message type for GSP initialization done notification. struct GspInitDone {} =20 @@ -49,6 +61,57 @@ pub(crate) fn gsp_init_done(cmdq: &mut Cmdq, timeout: De= lta) -> Result { } } =20 +impl MessageFromGsp for GspStaticConfigInfo_t { + const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; +} + +impl CommandToGspBase for GspStaticConfigInfo_t { + const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; +} + +impl CommandToGsp for GspStaticConfigInfo_t {} + +// SAFETY: This struct only contains integer types and fixed-size arrays f= or which +// all bit patterns are valid. +unsafe impl Zeroable for GspStaticConfigInfo_t {} + +impl GspStaticConfigInfo_t { + fn init() -> impl Init { + init!(GspStaticConfigInfo_t { + ..Zeroable::init_zeroed() + }) + } +} + +pub(crate) fn get_gsp_info(cmdq: &mut Cmdq, bar: &Bar0) -> Result { + cmdq.send_gsp_command(bar, GspStaticConfigInfo_t::init())?; + cmdq.receive_msg_from_gsp::( + Delta::from_secs(5), + |info, _| { + let gpu_name_str =3D info + .gpuNameString + .get( + 0..=3Dinfo + .gpuNameString + .iter() + .position(|&b| b =3D=3D 0) + .unwrap_or(info.gpuNameString.len() - 1), + ) + .and_then(|bytes| CStr::from_bytes_with_nul(bytes).ok()) + .and_then(|cstr| cstr.to_str().ok()) + .unwrap_or("invalid utf8"); + + let mut gpu_name =3D [0u8; 40]; + let bytes =3D gpu_name_str.as_bytes(); + let copy_len =3D core::cmp::min(bytes.len(), gpu_name.len()); + gpu_name[..copy_len].copy_from_slice(&bytes[..copy_len]); + gpu_name[copy_len] =3D b'\0'; + + Ok(GspStaticConfigInfo { gpu_name }) + }, + ) +} + // For now we hard-code the registry entries. Future work will allow other= s to // be added as module parameters. const GSP_REGISTRY_NUM_ENTRIES: usize =3D 3; diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index bb79f92432aa..62bac19fcdee 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -547,6 +547,9 @@ pub(crate) fn element_count(&self) -> u32 { // GSP sequencer run structure with information on how to run the sequ= encer. rpc_run_cpu_sequencer_v17_00, =20 + // GSP static configuration information. + GspStaticConfigInfo_t, + // GSP sequencer structures. GSP_SEQUENCER_BUFFER_CMD, GSP_SEQ_BUF_OPCODE, diff --git a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs b/drivers/gp= u/nova-core/gsp/fw/r570_144/bindings.rs index c5c589c1e2ac..f081ac1708e6 100644 --- a/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs +++ b/drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs @@ -320,6 +320,77 @@ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) ->= ::core::fmt::Result { pub const NV_VGPU_MSG_EVENT_NUM_EVENTS: _bindgen_ty_3 =3D 4131; pub type _bindgen_ty_3 =3D ffi::c_uint; #[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS { + pub totalVFs: u32_, + pub firstVfOffset: u32_, + pub vfFeatureMask: u32_, + pub FirstVFBar0Address: u64_, + pub FirstVFBar1Address: u64_, + pub FirstVFBar2Address: u64_, + pub bar0Size: u64_, + pub bar1Size: u64_, + pub bar2Size: u64_, + pub b64bitBar0: u8_, + pub b64bitBar1: u8_, + pub b64bitBar2: u8_, + pub bSriovEnabled: u8_, + pub bSriovHeavyEnabled: u8_, + pub bEmulateVFBar0TlbInvalidationRegister: u8_, + pub bClientRmAllocatedCtxBuffer: u8_, + pub bNonPowerOf2ChannelCountSupported: u8_, + pub bVfResizableBAR1Supported: u8_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS { + pub BoardID: u32_, + pub chipSKU: [ffi::c_char; 9usize], + pub chipSKUMod: [ffi::c_char; 5usize], + pub skuConfigVersion: u32_, + pub project: [ffi::c_char; 5usize], + pub projectSKU: [ffi::c_char; 5usize], + pub CDP: [ffi::c_char; 6usize], + pub projectSKUMod: [ffi::c_char; 2usize], + pub businessCycle: u32_, +} +pub type NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG =3D [u8_; = 17usize]; +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO { + pub base: u64_, + pub limit: u64_, + pub reserved: u64_, + pub performance: u32_, + pub supportCompressed: u8_, + pub supportISO: u8_, + pub bProtected: u8_, + pub blackList: NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS { + pub numFBRegions: u32_, + pub fbRegion: [NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO; 16usiz= e], +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct NV2080_CTRL_GPU_GET_GID_INFO_PARAMS { + pub index: u32_, + pub flags: u32_, + pub length: u32_, + pub data: [u8_; 256usize], +} +impl Default for NV2080_CTRL_GPU_GET_GID_INFO_PARAMS { + fn default() -> Self { + let mut s =3D ::core::mem::MaybeUninit::::uninit(); + unsafe { + ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } +} +#[repr(C)] #[derive(Debug, Default, Copy, Clone, Zeroable)] pub struct DOD_METHOD_DATA { pub status: u32_, @@ -367,6 +438,19 @@ pub struct ACPI_METHOD_DATA { pub capsMethodData: CAPS_METHOD_DATA, } #[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS { + pub headIndex: u32_, + pub maxHResolution: u32_, + pub maxVResolution: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS { + pub numHeads: u32_, + pub maxNumHeads: u32_, +} +#[repr(C)] #[derive(Debug, Default, Copy, Clone, Zeroable)] pub struct BUSINFO { pub deviceID: u16_, @@ -395,6 +479,85 @@ pub struct GSP_PCIE_CONFIG_REG { pub linkCap: u32_, } #[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct EcidManufacturingInfo { + pub ecidLow: u32_, + pub ecidHigh: u32_, + pub ecidExtended: u32_, +} +#[repr(C)] +#[derive(Debug, Default, Copy, Clone)] +pub struct FW_WPR_LAYOUT_OFFSET { + pub nonWprHeapOffset: u64_, + pub frtsOffset: u64_, +} +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct GspStaticConfigInfo_t { + pub grCapsBits: [u8_; 23usize], + pub gidInfo: NV2080_CTRL_GPU_GET_GID_INFO_PARAMS, + pub SKUInfo: NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS, + pub fbRegionInfoParams: NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS, + pub sriovCaps: NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS, + pub sriovMaxGfid: u32_, + pub engineCaps: [u32_; 3usize], + pub poisonFuseEnabled: u8_, + pub fb_length: u64_, + pub fbio_mask: u64_, + pub fb_bus_width: u32_, + pub fb_ram_type: u32_, + pub fbp_mask: u64_, + pub l2_cache_size: u32_, + pub gpuNameString: [u8_; 64usize], + pub gpuShortNameString: [u8_; 64usize], + pub gpuNameString_Unicode: [u16_; 64usize], + pub bGpuInternalSku: u8_, + pub bIsQuadroGeneric: u8_, + pub bIsQuadroAd: u8_, + pub bIsNvidiaNvs: u8_, + pub bIsVgx: u8_, + pub bGeforceSmb: u8_, + pub bIsTitan: u8_, + pub bIsTesla: u8_, + pub bIsMobile: u8_, + pub bIsGc6Rtd3Allowed: u8_, + pub bIsGc8Rtd3Allowed: u8_, + pub bIsGcOffRtd3Allowed: u8_, + pub bIsGcoffLegacyAllowed: u8_, + pub bIsMigSupported: u8_, + pub RTD3GC6TotalBoardPower: u16_, + pub RTD3GC6PerstDelay: u16_, + pub bar1PdeBase: u64_, + pub bar2PdeBase: u64_, + pub bVbiosValid: u8_, + pub vbiosSubVendor: u32_, + pub vbiosSubDevice: u32_, + pub bPageRetirementSupported: u8_, + pub bSplitVasBetweenServerClientRm: u8_, + pub bClRootportNeedsNosnoopWAR: u8_, + pub displaylessMaxHeads: VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS, + pub displaylessMaxResolution: VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAM= S, + pub displaylessMaxPixels: u64_, + pub hInternalClient: u32_, + pub hInternalDevice: u32_, + pub hInternalSubdevice: u32_, + pub bSelfHostedMode: u8_, + pub bAtsSupported: u8_, + pub bIsGpuUefi: u8_, + pub bIsEfiInit: u8_, + pub ecidInfo: [EcidManufacturingInfo; 2usize], + pub fwWprLayoutOffset: FW_WPR_LAYOUT_OFFSET, +} +impl Default for GspStaticConfigInfo_t { + fn default() -> Self { + let mut s =3D ::core::mem::MaybeUninit::::uninit(); + unsafe { + ::core::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } +} +#[repr(C)] #[derive(Debug, Default, Copy, Clone, Zeroable)] pub struct GspSystemInfo { pub gpuPhysAddr: u64_, diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index c1121e7c64c5..b98a1c03f13d 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -16,6 +16,7 @@ mod num; mod regs; mod sbuffer; +mod util; mod vbios; =20 pub(crate) const MODULE_NAME: &kernel::str::CStr =3D ::NAME; diff --git a/drivers/gpu/nova-core/util.rs b/drivers/gpu/nova-core/util.rs new file mode 100644 index 000000000000..f1a4dea44c10 --- /dev/null +++ b/drivers/gpu/nova-core/util.rs @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 + +/// Converts a null-terminated byte array to a string slice. +/// +/// Returns "invalid" if the bytes are not valid UTF-8 or not null-termina= ted. +pub(crate) fn str_from_null_terminated(bytes: &[u8]) -> &str { + use kernel::str::CStr; + + // Find the first null byte, then create a slice that includes it. + bytes + .iter() + .position(|&b| b =3D=3D 0) + .and_then(|null_pos| CStr::from_bytes_with_nul(&bytes[..=3Dnull_po= s]).ok()) + .and_then(|cstr| cstr.to_str().ok()) + .unwrap_or("invalid") +} --=20 2.34.1