From nobody Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 B2CD02BDC14; Thu, 13 Nov 2025 01:41:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998094; cv=fail; b=bH71B1MRZGqDp3eZArAqCRQ2lOQqsisBC63GBozrNtDF1zAIsoaAOMa+OKJSkOOlp26y70CTFL8GmCauNbQfmZ7oMKJVm7kLE7Xnt45HvhJ1mWqx46QvgIXtWF4SaQvJaEdsd/HHdEuKsKSHcU/8sRXEjBhM/F2anIDjJV3tOxQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998094; c=relaxed/simple; bh=LRtwJKiHAFb8XOH7T/nfB0lN5ucOfx5h8YY7e/XkWEo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=Ta6W4CuCCvl87JJylsnnP4WaiucoWv8iOGHc2LMyr6mswrQFe/JITiy888WUrON5iox11aDq/2DHhKVa9trH5ahf/Ih2oVeCPkpISPysfX6igwRoat2oUndKZkV9xPH5Tbr90/ylA5PckJ6wdaXVhXjDrqFUn9GmA/5/XbVziqg= 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=TkrGtKmV; arc=fail smtp.client-ip=40.93.195.70 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="TkrGtKmV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NoedmXlpP+0IoKRv2ssOBF/qcISHkg8vvWPGAfGRVXcDB+sbsjJ/ExO6z+4JTqt8zoBp1Kz9LpJLOyDUaNLow0k2ImZULoH26UuXYoq6bDl3S32mAIkMshSgtGsRlRPoXc4tZHUV1867Q5gEZ83LoLx3jlwxvdaVKlcnWUeB7dwq5IKcwiyBR8VaizULDgvm1oSZZM/hnpbXKMzqyVbNW2/EyTCO1l3klU4eBJA5UMx/oPvMCWs6BBz4ql2LAmkC8UsZHm3uuSoZcVp/lQOTlhv8QvaqNEVGOxuzfjfts+vJNyZb/tYBkcn1Cu+fL7O62Y+pmMKARHVPZcyFYF8C9g== 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=3AAu1lYzxbvovD97emd8njkeSBmyc+qV0jKIF608lrw=; b=nASryJ5Dcbnf0vdY+37yasRGhsh7lKO0gFYyu2Ps4nLzjk4YB9Ap2R4oKWlgzZ3r0w8D62aPk9VkSilz8HO6l53I+2KkKCPILfUVjKlu3fFUj3bkVs0ZKgVm6CVxtB8nSPbZUyJKKZ+MhIa6LiXfHJwAASaeJHBj3+qnzHqa3YbD34CF2iQLGbmQssUtJd5lem2o+4viy9CneaD/OGjCcBBTnNDirY+x1+XTMm1gnZspAX+5gGOLX3+U7M7rN8hI25GxiOmKBVKM/mu6HS5y69i80TYrssAxMXf401X++GWcGqrDQgi4/HXRXPlmjuZX9LWD4Mp2wLwsjVc3PMGofg== 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=3AAu1lYzxbvovD97emd8njkeSBmyc+qV0jKIF608lrw=; b=TkrGtKmVwP+S0NtGzQz1rfMQJxyte66M+LUqbxqWt1iXmwHmHyj5+MT80av1HunMjyg5hxYcdDCTYRq92JOd77etEvwRndokobYB0kerWpCp4ycWJmRGxT1vRG9A3L6sDGLAGHDYQxsMMD122UGniBvihfzOZze4S1ZZQvhcs1RQ0tqql6QpIGpb6lQpUWvzlNOUoYpKsFGjYKC3Dr+WZC87Ri0Hi4HAM91WU/JvhI4bD0eQPJ0vAF1Zmb1alNkfFKD4Ygc0ggwuDLCsXrDOUDv50Kyh+7PRsrpuHKFPkFKXOfTY3sPPbJ3yvzRDpyRmjNfSJQ7WcnZv5pmh3Aq6HQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:24 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:24 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 01/13] gpu: nova-core: falcon: Move waiting until halted to a helper Date: Wed, 12 Nov 2025 20:41:07 -0500 Message-Id: <20251113014119.1286886-2-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0PR05CA0024.namprd05.prod.outlook.com (2603:10b6:208:52c::32) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: 0f151bca-6ade-4917-9017-08de2255c11d 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?Gcsc38WaVEppv56glAC0CT3dsIimU7XoMZ41jAjJagkbV+hbSHq8Vz4MdtPw?= =?us-ascii?Q?jjo4gwADP7515fdzllDvAMIl/gFHNDECTcG/nrJ5klVUI4gYM0o+5oumzn98?= =?us-ascii?Q?ssqV1gdNvOEvpB+aeygumb6QsTQHnevTDjITUCu1+QkfWDbUrbmyCq/Om9oj?= =?us-ascii?Q?eEgq0yZY9n5IAmS93BPo3h8bvegZFTHiGx1J5AIRi+i85m8QbQ35JIPPIHDT?= =?us-ascii?Q?y34DvXQOwa9HHC9h1AXOCL8yxGVXJlRtsY3KIdRGsLavKpm0xWaGo7f+O6Hi?= =?us-ascii?Q?vK1mNJ+wWRR5EQ+VdXoAzL6cG1jqnOFJrf9Ycs97Wo8TeULbCpulgC5eD3lj?= =?us-ascii?Q?l7FGMDrgYrdLaX85B8V08jeyVrvSncGxQ+pLEv5DiA7TMn26yEC+tafB4IbQ?= =?us-ascii?Q?ZurfoS32WHjdeq4nGgNRDAJ0BewDzmwzSFwnvhI5aQMEiisV2uoFN8nm6Iny?= =?us-ascii?Q?BoW/HDnvr8Ax4eiPmwrdgxOvCIAmRKdNaaiuKBuJ1QfO3+7cttfJ0zmb4sGa?= =?us-ascii?Q?Y+2OG6CRN1MTIY8NlAAaH+gI/rhvX4VD9cflsTOST5qlsCx5uaucSZw3avtt?= =?us-ascii?Q?AkFWl0dD8epvGWTZa6w/PS8srnPALeJVLH8xbXRgNu1EzJPQ4f8TBmbIQt2M?= =?us-ascii?Q?uzP3+8JCeG+ZUQFwJ4PGgjuCwDY3SNV2lC0BLKD0Y7PJif+6HMxrBXCBZbFg?= =?us-ascii?Q?WColpuBnjHXY4smJV7Hq7GbRocNtt3W7C+f9Uh2ZL3VcxI7OlCQtbhZd4Tmz?= =?us-ascii?Q?dzv8xI2N+ihLI7hM5NcDz5qo9F7xv3lFWLDuPn2nknMukUz2HwpiojgUtno3?= =?us-ascii?Q?E/W6d9vDCBYw0akK253p+OF8QfMAsTF1ShGSvvsA8F5iJhFoWkLoJfu4kgAs?= =?us-ascii?Q?ZpPwgBKctM63CoEmoJCE9MpbDywJctdBrAj5WIr/dDZdVyR9Qi04uhb+BzCa?= =?us-ascii?Q?FsCARVbhYAq86JuRa6eVDSGj4Q6cp4SuPVNHTCrpciY26htP/NZUhnTwTJTm?= =?us-ascii?Q?7HWr7DchKzmdXJtv1GpwdmSPf2G0nvmTi9lpv/GqdxL42mvIryURRFInh7dx?= =?us-ascii?Q?Ut3FgmxNvxd21te5h5xAhZ/Nk0rVHbHbm+ldFhSnnCOx9EVXyh9V7LUOxliK?= =?us-ascii?Q?1NXdK2t2kceRoDbwzwhY5EQ7DUr04kkbh0F7Gx386eqF61bKC/l1q2MBp0Od?= =?us-ascii?Q?Wf6iCrcRSk/Ojl1qBytlGnPHe8JBYXNU3Dze5zIbPt/72PmtrL1ZKUlC+zsW?= =?us-ascii?Q?DiIW0OcDbBQWnZOqCzm4T69qpC/DeSp+55Tc4pTHUQkcJL2f+TCCRx6KZoKF?= =?us-ascii?Q?Zzb6PVxKwI0KGKZ/XFSAl0uP5STHdYRbug13vbD3xQQOLtyCDhAG1zWiAXmu?= =?us-ascii?Q?CPxFYtjjR+gdHcANpqxyhVM3e7vHfxK6C5/ozQ5HQibNfkChK7uKcb+JFA5o?= =?us-ascii?Q?knT/IdsifwoWk94VYA0pKrAauRLifpaH?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?1wZuDkICWrs1L5n8TJZT2MS6JcUIrCuLpSCUn1YBm7fMU7pSE7Te/Pt9Y4mB?= =?us-ascii?Q?4BOsyGqfjshJX5gNFrOJ972Di16l9kprX5sOBNRyIp02I7aFVk6fXdbHHvSP?= =?us-ascii?Q?R+C2k5eYfXJ5rLFTJhoy/ulObWsTjdq3/efTHSi6RCJFEhKF7+Q9xiy0OaW5?= =?us-ascii?Q?7/9BM/CuAcUW8jfjYlDASr+/Q+28rfVI8q3hshcdsE59uN9wK81eCWsVOJXb?= =?us-ascii?Q?mOza0I2UfO2ngtEyB/OFxdsPm80D30Fdd6jlJXrSIzbKYL+90hzlj5nNM+gN?= =?us-ascii?Q?G0x9e/qsqBRFOmOKByjZZW2W6M/e9lVqTZ3TMiYekCXtSCXZqjSsljIeX2MZ?= =?us-ascii?Q?fjRtDG8A7ViHCGv4JaFcTqZ/nhCPuyT7lReeWeg0LBSN2ULOicLTwA6dCqHD?= =?us-ascii?Q?TY39DN9Lmldl52/lXUMnZr/wjJIioKvZTarkk9skbf5VlbH061phm/qGE4Wj?= =?us-ascii?Q?rhCDbvtfj8MB3CikMk/oqH48egW3s1cHk+Aen9KGmyNhecFkYczpwlhJn4HK?= =?us-ascii?Q?0NgH0KBTUJ4/C/vy24UQwt+AtrSblwfYTXC3tAH2XFaOuGIPbVBsGefoKFyj?= =?us-ascii?Q?AKLBhawOfVrfpLKg9C7pPRwU3w56lCQjBxEHWsWB7nw9aLjzFtXMSSV5FjWu?= =?us-ascii?Q?KiqlxFT1kgOV79V4jPIvnw0cH48P95rb2PIrsMLHbFDLKKM9xtw/sut7cG7c?= =?us-ascii?Q?2Lv9qjgnMp+hVnWq9D066yy48IQAGxJObT9jkb4vD0mXEpNJv4J1aZmTUpGN?= =?us-ascii?Q?HnzC0yfjKdg91PrD5MVfcwE+rOGKwrB935NTo0vVGh5Ysa57xxag/hsWJjNQ?= =?us-ascii?Q?lPp1itwHLVB4+JZAAnH01j6nFYNiFk1MHBMiaKgikauDngBkNV5w2lmeg0Vy?= =?us-ascii?Q?hG+/yQX1Od+/59NHyzBECeyYYfQMmxmTO1DXWk7T4PTAxgTFJs4aOrvZLNrC?= =?us-ascii?Q?FhN8sbNBeR7R0JdwcHQOWs4YIcteBQmUzHt1eY+z9zhmV1yB75zj7/RTftdO?= =?us-ascii?Q?pcRThrOukJxGIx7eztLvQWScS/aFWEcntCXHUdNLkHoI4zngNoMenjodpup4?= =?us-ascii?Q?zmV2avHCGJOhivHts+oz5rgrywqRjVGU7+95yZ5LanQM+xBRUdM6HZM2qoJo?= =?us-ascii?Q?5YNpa2MQVBN7CQBM7AZOmRwMFDn2hKOMBs4yazbHl/u1SCAhVgKGCoy+GVE1?= =?us-ascii?Q?N7LhjofqQTPhAHoFFunPkJSzSgQaIOqQ14Xwkr9mgX8UfbFzXUwdAsqSlU8Z?= =?us-ascii?Q?N32iTFioJImXfqy7mrPBcqya4JmaDJ1/26yxYc6LyPlJdMp6i7FzOpdqXVFg?= =?us-ascii?Q?ZAdKEOI18XARHXxQ5/6BahRDXyFmsyv6WjRwoiQFWLJW/AulDwzr02ZHEqHR?= =?us-ascii?Q?dZv0fQocKxjeqMRc1PC7Aqos5CxnND8O9j8xok+gl6OA6UEqdTvqnK7h75n/?= =?us-ascii?Q?7Pl4LUbC+ztddI2pYn5b+0Mx5xza0H/IJ8JPeOwWA7P70moZI2y238bdD+mf?= =?us-ascii?Q?zmIygBr0DEURL9oodVajCPLaEH+HZ21nDVCuqEDq2P6HzVihyjP5kui5lOX3?= =?us-ascii?Q?MV780mS8sDJ0npnnd2Fh3lYBdts6kkbr4IHjA8B4?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f151bca-6ade-4917-9017-08de2255c11d X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:24.1440 (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: WS4XOcQuwqsBRnSx0z9AdJWvC4KWIkCMAl/Xam2vBL2rIHu4IpC6RGLv3ZAhLiDaj9v4/2grrAa3UosMdMk1ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 05b124acbfc1..1e51b94d9585 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -551,6 +551,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 @@ -585,13 +598,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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 EE80C29E11A; Thu, 13 Nov 2025 01:41:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998092; cv=fail; b=HzQvvecRwF4WkxB6YbDVVwmiY7FYCGDDsw4Up3U8LyLlNDLEd59oVPug6YKRiLAGyF0kco1a/PrmcWYRFS3w/nkMbVa49Ev/UBjmqHHCsTWCCD+b0Bvnm71IhwQ0PbdiT9g0LeDVtobjK3PQpbR3BWbB/OYl/ad1Z5L+7Z4UhVA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998092; c=relaxed/simple; bh=qK5ygn8gX/SxuNsblc8Q6lkv+TPBqNGox6wyj4djn6Y=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rN4YwFZlmuPuHw5f5wjiwkoh4nlBYhSj7hhBOotSEnF3P+4gMAW/wxu1lVATaoPer24i0BrgVnm5a8zU8DN/elMkizWRJYEJ0lX91NUq9kc8qnQAt/MSq332aSk7su+gkqquPN6sgWpwWKp1zFGI71FnvjWoAH6wE5QXIolQ5Mo= 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=mGM88M3p; arc=fail smtp.client-ip=40.93.195.70 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="mGM88M3p" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AxCqcgJvPgIKidX0cvXY/Fzw9iPwJ2NErWm4IIWClhI35px5rp0BiNAx/dWmPiukZYBvZYdEa5gYCvAvI8xYqNErJSJfLFFGAQo+Htu4yK6tZLo6yTbX+z6Kfaatr/ExhOJNOvBnMAiYQ+dQ/Sn544/GxfTT8B2HXE+VVMYywocyeRlf8Dm3EEe5X0Ei76oqJfa7taqrdjnsoSSlTJw7aypU+yHrriRXzC9wPFpY24bP8zqayIVhmyd49cvVs0/xoepW7CfHUx09zJlXO2BMDrcqFeq5gYPrHeFHxtyYnCf7HoTN3++Iy7jAeYFuzbOyIGbJPfxL/M2AjU7qYx6QkQ== 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=1/hvaSNHC4bPtuuj8lVto8lopzd5JopMTiTYLyMVd3I=; b=NTi9Nq5rCeU1/iraGldvSjKcYscPTIDmzapcx24m5uufq5FJh+lyzpBnTICFh5ip33b+rJR20f7v0S5dT9hGChDnYIb31M1+rI5ZvPyGO3fs/mGvTZe6KHghItz9bvXN4rLlym9I8lAIE6tsGHK2HWaVn+2AvIsnXrKavdyOsj2Yb+4bcGcBW6/F/Rab+uICf2jqU5lPtHuUu3/ijhz99TYnbrqaOdQUeEPxdXh1Nh8f7TSldVAYLtR7To6dJiXIuGnTFbznVL6zH6Oq5rctYXmWIG7JVA+GkeRyT5AVhnTpB7w4mDM25qJpKDo13NVzY5ypYJrs/WpX3wWd5l85mg== 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=1/hvaSNHC4bPtuuj8lVto8lopzd5JopMTiTYLyMVd3I=; b=mGM88M3p+qJ9sktcijdpInPyVR2t6fW1vcw1cuxD+FkUjzWZpNhmH4snqnuzngMqIrSHN3eH1CL/UFBA+2uYPx66wW5F7RAnXQqqKWk9JA93JElIEs46kPhNHgaHo8BxC5Jgd5q2k7gDPGQik4y3iMaZouno8tdsMngGeF40+CkWC0QMBWQkWfwXKkNRnsZgCgNKr6Bm7zRCZagCvVAYTSrkJAoRqCIWtyQdnuMyBmsdb4eRV05A5tRrTX6XgBNw4L39NypLHUStomZTlCBvZOaajhYpLbqflXSSWVQsnzlNZgTGGVMQ4p99on+ADmfSISr/Srl8jxPSRktYE8XUsQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:25 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:25 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 02/13] gpu: nova-core: falcon: Move start functionality into separate helper Date: Wed, 12 Nov 2025 20:41:08 -0500 Message-Id: <20251113014119.1286886-3-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR16CA0043.namprd16.prod.outlook.com (2603:10b6:208:234::12) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: da4b423c-0cd3-4a3a-27bb-08de2255c218 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?81IpFb9FKVwqPYL5P2psVusF/J0PGFjC2pCLMzNHy7Ump2/zKpllYa9W6rXF?= =?us-ascii?Q?gdd6ijWnnq6MmxBJgKLcPNRspFOUBz3RZllSgAkrN5jn60b7Ds7LQ+Y4SQJB?= =?us-ascii?Q?dew9YJuNWmvFjhQWlixY5PkGrCx+mdH8jd/HtXOByFq93ashJhDC20vb7hzo?= =?us-ascii?Q?2BJoh9BChkPygbrrF+Stl/cGBD4zEYHQv8rTJJ+6skVI4eyuGh782AXMrVsa?= =?us-ascii?Q?i8o4oSn++vDcIv24UgfI5Xb1smkmWqw++rrcn9E4sX76Xcf8ZWxvHrzChi+4?= =?us-ascii?Q?8vBcfBS3m7Bn4nXOO687r6FRABCfvB73g0TyO9BaQEDL3n6IXF/qU6TmHvp7?= =?us-ascii?Q?UpWon396HbR8LfmMUqiQF1IaNgsyt+CVmrfshW0rQqfFgt081lWInD98Z+jD?= =?us-ascii?Q?e5j/6ThsFetSJialx5kiOo5jahfYZhZePUFGqGBUokPRhPzRgFvJl7DKVk8Z?= =?us-ascii?Q?Cfa8E1St1ub+vDH0Xf0TdbVWJpq6uwm9LFg/3eds8jCJUp2yVirmq95/P5bl?= =?us-ascii?Q?3A02awMNA9DiGkLXdSLXBF9CgFWxm0F/75lvAHCvLw9Efig2JQ4WycDFQPl7?= =?us-ascii?Q?lb+mHl03eK+2ZMDpuicVQows0m11wvM0Ba+DDa4oS/W9yNkDEb6Nkzkx6t6s?= =?us-ascii?Q?QveGi/eKkN+pb+QnURpyg4mclpMk8Ay3VbutiwD3Ye1BSncG3sWuTZExlSuQ?= =?us-ascii?Q?7VaS+ZnfQaHceCYo5RDEgsN+Uv6Ci7s0jYTANkmKVaCaHfFh1+xYG60u3y1x?= =?us-ascii?Q?CcApD14is5g3m8H06xdNBhnTr78ghPPnsBHVEi9aahKB2wwn3xA1cTz8b7tL?= =?us-ascii?Q?OFW1Gl+sm/GNc9H1JlyH/FXS9ac4ObhlGhQR1XExKNtkLmkB46eaSKn2Iz8p?= =?us-ascii?Q?Kf9fd22DKFVOakKi7Be2JSUNaZ9OdGZOsHoGYIr/qG1T4zQR6rwcjpgME2fH?= =?us-ascii?Q?k3Cw5itZY+NE5w5GJ0EY+xwTmdm6Nt8x4iVW2nYhwfF8PggIth7N3Bw1lLd3?= =?us-ascii?Q?uk8NLlFhSLJ4BzebflKGZQ2BkvEAstxTpahORO5TLid2ph2JjrA01MkF1nqW?= =?us-ascii?Q?EayVJSM65Ax74fDuf77/h4hQlJouIGow6H0WjmlPqS6X1lsR4IL7j/xLyLSj?= =?us-ascii?Q?M6RPB2GkTcvRTI/EZUXz1TBSe1vW7VcpPI4ji7vuTSpxL1wqkLX8kpZ67lE0?= =?us-ascii?Q?mtR6v+hI5Jq61ZMV0NeKfETau3xEi4vv3l4NeA4bAckk1PBCTS1EauLL7+1A?= =?us-ascii?Q?ArgGUlH2eBNI6iWp1Xx0DLksx4BV+IY7nLThqzzLJ4M+ZY0kejI+PsqETq9y?= =?us-ascii?Q?1OOBbscV9grP3/8Nezvcf1E6jGS/ciHSpzY+TFLIXDjRy3qx2XhOvoKLO3z1?= =?us-ascii?Q?DuwCdFWiZTmbYu4oZ7xnZxu1iStQm3n9vEBUJZ6q8ojcRZkHVmZH5Lvlg6cc?= =?us-ascii?Q?1Xm9tE2kwLCNdo7Zkr8aEW1drB3q2MWZ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?Jwe80xPyygR4NRYbVN1rU74fkHlqKJTFm9OyEKJFvMe1kB/y5Y0oXU6IgOj/?= =?us-ascii?Q?mlVGiQEp/cg1NmsX3C/8SpJgj+Df7MZt04FmBR5R1eqU769d3XJYYLnO1bZC?= =?us-ascii?Q?y1R2g3q5vpho7Fvhlc0AdsiBkoh1+tgR9dpgjhtkpGjlYa74wfE3x5aYDRJ6?= =?us-ascii?Q?biaPx4mbH6+baJohKpLfoduMHu1DZFAei+D2Nmm1I7P9wIeWSv3qzEZlHPGY?= =?us-ascii?Q?KXFd4L93jFTmKI/FABoEDJsqXajEvEjDvTKFEXN9/Xe7oWGmdjvCQQUTsnpb?= =?us-ascii?Q?h//alAYSy8nMVmXKAhbHAcRrsHoriqCQ4MPhFVz9SXMrOw8tEG8FuES9jpzm?= =?us-ascii?Q?in1ZO/LkLgKxCBf2tvdCpi5UScrxpfdIwx1u7zibmNUQWi4ryhQiea4giNok?= =?us-ascii?Q?uZslcSxsYCHupK/OOpL1ehRJOklII5oIW1lexIe4ZbQ+RU7dSDCFG6KG03KT?= =?us-ascii?Q?DoilGykl+2adVk2K3NtqMXISZ8xhC7wBENC++/VSxlY6op3Jwl/O1Wts3ddD?= =?us-ascii?Q?cNX0NiCFzAkDJ0Q79JmlYOE39vekgFmcx3XSl+ytxV5wNe4ILte/ft7lF1+A?= =?us-ascii?Q?cmkHr11wZabPNDkoFoP/vMLUpC5fME5Nx6YqqitPMPK1fvlfV2a4fgoBPYO5?= =?us-ascii?Q?hX1CELhfl9vvT2k9OERPRc/UgOdjH/AmMNQe7dr3AXCrryLyOCnUjeqCBUyg?= =?us-ascii?Q?QaESJk1s6TdW3bpEjrDJrL2SPFc8XYqcxQgX5sK4q7eICH3G2Dg7QYce/up8?= =?us-ascii?Q?aUrW400esBCj0KTxjI8ytgbR5bqozrHNVTJUfvl4+1qC2GR1CiLpIO23wfbO?= =?us-ascii?Q?rdzVX56nNft5SSGUllU2iPWzbEDJzNxw55r1jmJb3/tHw0eObTklU2GORo39?= =?us-ascii?Q?4XVx16CqdjvWLheAVrONLpAxjv/b8bFQueIWVjF6v0suHLz6FXKuCL2xf/ez?= =?us-ascii?Q?38GoZVY11iC4cNpr0UUKsrurE1KIQohvNNTygZBqT9zXSLNg7DrYTnESXBIO?= =?us-ascii?Q?NqiAbMfh6gegQxH8CGEbotIYQVtEzjVbc9SBB6Dzaf1SoFt3u6Nww9XX30x7?= =?us-ascii?Q?MMF4lvbPfb8fbL72FxnSioNliW9A3M7syZi7JKJDdshme+E61rMLZLVu9pmv?= =?us-ascii?Q?nvufxKM4W7pdO7Ep8TGSZjLjdwqQs+OyX2elAu5ewn75HgcWPueRdbR7ULn3?= =?us-ascii?Q?Rf0AnsB1zU2gmwTlk6ppAe+bd25Pb/xUH0esRu74H2YTHoUvVlijUmKXSPAW?= =?us-ascii?Q?2ZepH0AvkJO6vYsx0q73brC+gPk/TNyGGt904S2PPFCZS6Dx2GbEA1knZ9H0?= =?us-ascii?Q?muGOfvjbgnfeES3fHnn0Oqe3nUwNIGh5JTgnfro6ZqyhNfSpAo8TFrGkQycW?= =?us-ascii?Q?3IC7myGrKw56Ev6XINV80a+Rbe4gT/B38dY8ide1WjMCuwWOIcBCR5eVz9HS?= =?us-ascii?Q?S3fV2W3a35swJHzKI9Ym+sZ5wOpa4VwbfeobKZPZ4lb0oRi3YoWeVMiaFbdD?= =?us-ascii?Q?/1AbRWhaiTqkolOLsqjg3L8lMWk51c1RtOWBwsLgsUvMgm0r3UEB94b1fuN8?= =?us-ascii?Q?he7jNOzqsRTkwP+lxP7ghhgdU6wey6uC6qT3XQCh?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: da4b423c-0cd3-4a3a-27bb-08de2255c218 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:25.7878 (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: p0Dlq18qne9wzrNfqg1gvDTidOGDiho6iURf1/IxP8KQoEf1UWX9/DoGjOgPL2nPG1v91Kk3W8IETTX4/qeeeg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 1e51b94d9585..30af7fc2814d 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -564,7 +564,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. @@ -589,15 +603,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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 DF5F02C21E6; Thu, 13 Nov 2025 01:41:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998099; cv=fail; b=MFcSF69UiruCswhGnlv7LFQfM+6K2q2sQcVLpD8zQda1UdZaiGmujY9oSR35ncrU87CWHk8ccqS3BhECEZqRPStdoffB0NXu+FptolpMOfMdg0BqnBTp5Cvxxm1t3KoB10RIAqoUij60XO3vuwe/8MXSAz1BiQbdrhhJo9x76d0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998099; c=relaxed/simple; bh=pocHwGLWVWbRkq3EPOZPdefaZu8MrsuADQ2g8A5qVWo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=JpA9Ds+U791DL8DI/lhLAMteaMvMBESgaB/77NkMa/kFHvhIvVTBoKDe4qXTMeJ/d5NyPFgwNb/ow5nwBx8KgQW/S8kJ/59T8/Rv8YUVdxdoAf4kxq4eS2PMYlfe7yFICVEP07CaWtj43bdItllXG17h0KrnSYr6MqwHrLUbu5w= 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=nQqQyWp/; arc=fail smtp.client-ip=40.93.195.70 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="nQqQyWp/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jKhbqsWgQeftlTMLNBQcRLBkDb+OJ9z6a29/8CBObQaMDKIlTkHML+u7UU2uyQiVS6fdlz5XfKuIgm4p8oXh0gA84H4Cfo+Q2D4MVwW3m2KxSmGokMKJCL9Z0TEfx78mrmIhYksOAw4B6cP7PMDU5vo2rNkmy/slvFxBJmWd0rnDpk8Xn9HjANniao9y16GFTXaadGl2L7n3usXZf5N+p+QGu6mwQC9FoVr67geItQxZQob2poMDDWXSFz246HHUo2hP+YYKB+tpz6fhjOibm+HBasTEf8ajrAgTIesZfC/ycvKdQb27jSkS3dReCPcQ5wlZcxYj3VB+roEbKStqDQ== 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=1wsRU60PxIXA5Wylvi0b3QhRKsGEyoIycqgg24m6cNI=; b=Bp8pL/iCc6hM2fTt4gkNNX13OFGSgzN51l7Gms0umX7/XprH8jF/8IOxvFVOGj5xaZnac7sd8A2eczu2lkS9GExoIA3FCp40Gu144385Lp30ESctiF2iIWVFNoHNoFafjW4pXv8Q9haf0RNSEDokZ+zaoBWryELobuJg3SVe31VLIpWZEAbbXYyNaxZBid6qz5dahY8L7rlDuMcbx3Q1gOr5UZ7sXlimtvA58/Zyj1cAEG458TMnV1uz4xZzXvuagtVuwP+bEeEyUwoPrbdD/up/hgWTyFYG6EzbI1MmqeVE/SpuxrKmXER7SuGTzD/ifQnMvcjDBkuFWO2qOS/iPA== 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=1wsRU60PxIXA5Wylvi0b3QhRKsGEyoIycqgg24m6cNI=; b=nQqQyWp/CLrS4Ujegohw9REs7WibkvWEfsKllIifVtbAsS+tqoG9bRkpGzmDFz13RXosLLhNNLVj4WUjfnu9/v3mZw1HjQVIDaOdvX0DKhAT1jVUeFaM4pSeHiow8ioNFlffKBlSxX3IrI7DXqxDrPg5EW9o7QLFynDN3Y4usv6Y96hKtjr6VmFN+HWFqCN8WDMQHNQRPNX4unAiQ+A3XNO4GDK2qqJzixyi76zVibDp4zwWOGsBlA48MP+YDtJfXXxkpL2RC/cZlilJqvR1ksOyhMaRJhF7nt8wBi/vmf1TYUDzMJQGxoLTrNo2LIZb5PBU/iR6xJJN4kWFV5Z0AQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:29 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:27 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 03/13] gpu: nova-core: falcon: Move mbox functionalities into helper Date: Wed, 12 Nov 2025 20:41:09 -0500 Message-Id: <20251113014119.1286886-4-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0P220CA0006.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:52e::30) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: 6a9e712a-4461-4495-096d-08de2255c31e 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?0aNPCqhIWEJW0GVUwThBCTQFJ/YrzNQ693XjItAso0YUfGnq+85pc/i+5Zlh?= =?us-ascii?Q?0rpcZmjjebwwxJZmp7b1+aW9hFZF7MYYsk+mwui1Towc+GL3Zl0An41Y6vNt?= =?us-ascii?Q?od1rzks6kV0hYA9twJdqTt3zQbPW5j9AT251UV5X4sy34AlHw59V1+EiBUq8?= =?us-ascii?Q?CSDIrf2RCNNobZfx0GLAqrFY+cCbAeH0gbXhe+p88DfmSGLm3thXBm1HXPdb?= =?us-ascii?Q?0fbdAipVIOlcQrZDOVlFSb1eD/wxIHDjWIK8CRFikAvsmWofa06TJi3G68ma?= =?us-ascii?Q?O7036BQbt+4a1o7e44WOtxdnGVYspk44divEO58ALw8a0ySB2++FZenUaniq?= =?us-ascii?Q?vrZAFWVOHZ0CyoLYUbGf/SuPEPiie3pDnQgXhgGyiO2qyRyWY49DntesQ9jR?= =?us-ascii?Q?rjM7thHJh1v/DqpiJiqnkRUrMiYrEDNdmpbS0ev35/MJ8gZx1u+zx1UGwzkU?= =?us-ascii?Q?fDDeYgrIW6rKl2atR08+I6e638xLFif3HleFhhdjac7KjTuhKnRGEAhLxVK+?= =?us-ascii?Q?fHH+FA4DjbJKKan3oI/bnO9rS59deVnkVStTOVAzvID5995JjtRQBS5qoSWc?= =?us-ascii?Q?CCUqB+Voz1Zt/JLWOyOvCiP/g8iJzh2A3sIshW9Ckr4m1YpOHryfBK0zYqGw?= =?us-ascii?Q?RB6RKPCGOKLeSrBQKg1qE22gnSloReRTgmA3QVUhDX6bnE9Iu6KXE5LpZrk4?= =?us-ascii?Q?MOsRE5NRXf0yPj7LGxnnWdXTdl3A+gRs4Gy7CkZHv8GwCMwZiAYwg1zrKmEA?= =?us-ascii?Q?YCEI1bFIlb4cdJA3dW3vst6lboBwefdmaKhNSqQ/bGDWt2tge7N43ODpf9V+?= =?us-ascii?Q?9mixEg5px1roHD8wCVIinuslpGMKJ3CQfK7qRtzCiZ+z16aL49a6tFOZ/TO/?= =?us-ascii?Q?cWgVnGd9/ZlijsKmZDyZUSVbLZb6q03+B9r2neBoFgX5FrREW6g0ffOKXAYH?= =?us-ascii?Q?Jx8nGMMqjMUV7y7VihZGVHLQ15CpyKAtX65gLIcIG7HWg2rcFRHQAz5ixF8m?= =?us-ascii?Q?AuHKmX0Do9yWFlXG/wHIFsMrVuK9JGM+yhl17fhR8xugyQfmI3Mnn2Q71yF3?= =?us-ascii?Q?oGMZQpiPSj9OfJlLXtR2ZnKwNyZ8rwtOR9bgDxkPz8c4GI4dr6QbfZXjwBvb?= =?us-ascii?Q?DIuNJs/jGQyxR6DHBE17CYPmZH8XcVK8vTGm/tHgqeqqDU4+CFI8xtgeBJV0?= =?us-ascii?Q?kRzmyZPBFPRvUjgYsjE9fqIQNkM92v7bUCSewEpJvmoBVcBIdzfSaCdqOy8R?= =?us-ascii?Q?4eG1IUjSJ1o89JYblqndqLKlBNkppq0Q4f1aqNUvJfxf8kOn2ETU9x2tjl2g?= =?us-ascii?Q?9rur/1hEfVJ+8wtDj91ksAM9lHTcg6PXh+gPQFxqzm/y2WiOFkqTOc3kZwmy?= =?us-ascii?Q?M7gNC902AHS6BwVEZBN+e0i76Pg5qvGjClBJjhEn4XdTYNCDtGu9PZf0SweT?= =?us-ascii?Q?WE6RJOoQd/SCJENBlPCiumO5Hmn1bZdY?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?ekS0Z04LV52Py8q6ZeJV64S8Q97RNTEwzV99g6AO5bvycQi5YzSKbEoahIX1?= =?us-ascii?Q?B3+QNvjKcQCqozI0/9lUFJAYKKqWMPnusGoPekZ2FmvSEGLBW8aeSECCobor?= =?us-ascii?Q?hLX+aAkB5vMWnA4eqJmv3WMQgFRtKiCAd0Q8Rrec21Tcm2yroXBC4p0WCCd6?= =?us-ascii?Q?1nBF4WivrNeiYy47HxlIJMjVxbjHhXxx1LgRY4fKEs7tejQMTYSS+iFx+FrG?= =?us-ascii?Q?Qtgs+uu+Sl+TZv2shV+zSbTjJ5pTzn74eYwGrnQ4KC1RIpFYa7Vlu57lp8HH?= =?us-ascii?Q?QycYL3fgZuKUPo24z45rtuyZtVQXV+zfEN/GgDJWnPRQhd+wHpveIBt2wEQL?= =?us-ascii?Q?QXg+Y/6DSjWFHfqjPDQgQFc1xODbUgBbdcWDVwut9BMaHrggWTQUArxaGbYy?= =?us-ascii?Q?qCEZhHsMdVP1zSw7Cl1wa8VZqXewVTvPpDwTIftEYpjK5yHew70cwwd8qSW6?= =?us-ascii?Q?wWb+BxSktYxvNseb3A+KNXsFw7ewWY608ghHjwGL/gmCQTkOt5q5m8z3l9ub?= =?us-ascii?Q?0pUxtWhdFTYiu29ZVKV7MeHXT4JAGBr2q1/OtbSNGdtHjP1B2QSy8FJI9YzK?= =?us-ascii?Q?yR4XY/v83xBT7XvKOPRy7OUY1txGbaHOOTVDSIJJngN7Wqj6Ypvn6vB9lTLK?= =?us-ascii?Q?tLMrETaPe4T2nZkllnU35qdqt/ZLaCejiAaOKBhkQxoWxA5SmNVKvSpsxje5?= =?us-ascii?Q?YLByfuM5/xxBIGe0N2ujyo+ow1JYPcwe5E7jcfAMSd8aNiJfecSCo1fFUuKr?= =?us-ascii?Q?YIo70+18bK2xpPEMmNRIPuYjGkLYAr2m35E1SimPMbbnSVLfP6/qnkQo6YMu?= =?us-ascii?Q?cHyHCJfwbZw1T+g760K/y3wG8zDIGMFYBKiuiabyL0xyFEnTXxyoomUK7sMk?= =?us-ascii?Q?nDMm5DtZMh36JhnVriMQaV8mgaxT2O592fEY9jLkQqyZ9gTLbLJcbYpGzG+j?= =?us-ascii?Q?dKVaq+TCebTnHgRNsCsO1jTNTXFWExanYv0C57x5qv225k00hduWJmTNsrhj?= =?us-ascii?Q?Qnmqrsw2Ku9Ac2EQB9N4Oq6YFNSLtwhaqEYHzTeP2nac47dXNPzuPxhZ7uUA?= =?us-ascii?Q?pK8mOg54SVF6wuLWg4TmNw0MREW3vIhTcrED1dfA/0OTOxWFyfgvVr3JlvaJ?= =?us-ascii?Q?OiZoACsgVdhisJo5axNTs3BiL2ZYSkaxCBOpeLuZorZSyzbn/IbSlvo0/bRR?= =?us-ascii?Q?Mn7bby3prxzpppiQ9If9dVgsqPFDZUXSwpp7xYWp+4cbMKcKnbv8WU5IklmN?= =?us-ascii?Q?rWUie29AkJXw89PmS4MRzD6/CZi+4v4CxEu89Po7MCnk8jkDJF32r7t7P3+k?= =?us-ascii?Q?HWArAPWMl7BCrcOZ92dp7F71f6EKHMGHhhNS3Z8RehjnZehQzn2Mr5qBsOWw?= =?us-ascii?Q?3djd8C3qsqk4iJmxhRnLWfMmtBMobU2NSJxfvxBfqo3Ze6pCRI7olnlZy//S?= =?us-ascii?Q?Fdedy3SsOPNVytkz5FaQeof11m8MXiNRaKFzGVOIzKmKxNBu7Bbavz5iiELS?= =?us-ascii?Q?z/eIyOvskI1CrS/NIRMdgLL7AJ6kyKqcB3e+yb7zuvc/cuPsDkWOUvidCBhE?= =?us-ascii?Q?RoL6yIkvaTAyE7XPr4V/fyulnOOnRxQ2DwDzWMUh?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a9e712a-4461-4495-096d-08de2255c31e X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:27.5215 (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: 1/fr3JWSsdQzgAZtTPMRmOHpuPwZo9UrxMQXZERA9liwyqa0cr6xsbKJ8GgFd81gLKFxP8KaCWce60ZJ7dW+GQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 30af7fc2814d..5c9f054a0f42 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -578,19 +578,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) @@ -602,18 +596,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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 777A12BE64C; Thu, 13 Nov 2025 01:41:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998096; cv=fail; b=R3IuCQ6sFFLAWJl4cd70iflzuNk5K0W5a4Xht3J7y5xpYYhlfP6l9Fmk7uOciP6yJBTIForwk5fGVjrBE8tbZso/lhdQIidD9V5AUYUlxE3e8d9L4mOH/n8RAIkbprXPygHeY86aHqEAp55SDVEcDorK+7FfbWNxRoVqQBZVKAs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998096; c=relaxed/simple; bh=96gtBreaAvtbyyaDFzbgaDmEO/5FkOoAZkdfg4uKCsc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=TAW5Gbta+lDQO6eLjhVACm4WkDq8kGHGj6PIazBcFFc25ZHnsR3l7EYYgutQaa3DUOcT4R2cXLQ8leQhpH9AUoY1soaLo1a3e8NSDbn2onNVYqzj9sHJvdqTIYYi8f7uS/TeUYGH2Bk1JuxgG/+AbaXVlEooJ/iNdn/V62vy7hc= 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=VbVLIOfU; arc=fail smtp.client-ip=40.93.195.70 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="VbVLIOfU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MDQ71PK/IbRMqMymUgXVZc8dHlXGwUnbwnBZ0vIn0CiANhj7NQppco+/SAM+QwrEIY4MYcLA62tHst3kUu2yZHeKrKUzuwXmZJs7owoSawR88ZE/pXM+9MnbdlpppzoBRftfN7AnZrzleKFLRaoCbHEMExiXrhbxjUEjGTB8oHHTNGe5q7rQpMS2M/Ahy17LNpKpaExa7vL9RQZy+J5jl7fWpXX/KIghshwg0z5eeFJfZ41JYfb5eOreAvItO05Vx0UHbJBQMVrBTsM6LipqxwSODPjDoWQ+l97bvL+oDk+EnyuONyuApr+BbTfGBrcgbQV1kA0yOEO5i8jd7pbkCw== 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=lEBi1k5SgLHkTKuoOqb9XpFTy/pWVE9M3JAtmRSOuB8=; b=Nkko0xy+pX3ll1MnIqV1yyRUtu9ivvmcDyItP8w6A1NqZNspiBy/B18prhUY6oZweb7m0n4TQGd1B9aAEcSU0YaX/uiwiBnaFGy2hUp5DjwkD7q0lAWPWIg5Q0qFKZYLCB7J9xMgGwUc0EsZ9rHkxkZoU/XtDkT1QEwnal40Bc63h2FoOkJwb6Qs7bn2FaVs+wbPzhojr1OQs6ngOySi449U72gEdOl2uwl07XPftC789/I+ZOC127GQRjoLJE6S0UKAMwmJAGcUhG2TdSXNgL/Lok7t79GRGQ9n2Nlo/0ZrcEgoMYrjzR+zm8C66zIoJjlQZ35WuUK1Pu00DrbRCQ== 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=lEBi1k5SgLHkTKuoOqb9XpFTy/pWVE9M3JAtmRSOuB8=; b=VbVLIOfUFWGEgJkHtL2OO3xFg1a5OQmfE2S+H8tNULItu6dnoPTTxvWNrPmNpQVVZ38/4d2/V+ZQBE/iQxKZ63wqA2K0u4E4W4I4vZPWZeCdjPTBVtm3fI+I8dQGHDkevhgmFkb3CviZFU6iWcVVcOZI/NHxKQDZabC8YUChKKzz/k8HFP9bfatTAo3ooK6oLaunjP5M7jOWFoY1jGb7OgTPlxBr+SGQf/rviIg1iqAocGBIPHqeSCwtZ9gfF3SrExZN842fEo41kjfKir6aCrYCrPQclyyQbreSQUhnpKQiNMel+QFw9omGBNvW9wWgBXSwF5ddUNj6NstXB8OMkA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:29 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:29 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 04/13] gpu: nova-core: falcon: Move dma_reset functionality into helper Date: Wed, 12 Nov 2025 20:41:10 -0500 Message-Id: <20251113014119.1286886-5-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0261.namprd13.prod.outlook.com (2603:10b6:208:2ba::26) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: dab5d00b-7269-4624-f535-08de2255c42f 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?xWkzvH1KzECEHDyz/FSPLxb1avOKv1alN4dVyH0PG8wXPcNGAPIPaJZJefPh?= =?us-ascii?Q?kmqb7o5kew4xVyhkQ6xvBdrwY4Q8i5A2hRdftXJuIi/utQ0g0LdapDCMRLxk?= =?us-ascii?Q?tzYgH+7HVRg5BH/CkfFEU/uGwtE1ZuWY7CTjTPjXHSjcE0xNU5bRVOqS02NV?= =?us-ascii?Q?M85e5MvY2Yohi62qJ5W2o2LT9PvMEAmYr6g6TOm85HM0EAcPb5mXl4XuXh2N?= =?us-ascii?Q?NisOyGnhiNxBUM28moKg8+3fdc/FTzCW19p1cmzT0pyhhMhL5hSZahk6pkZf?= =?us-ascii?Q?FNUhAqfHNBhTzB/ADdPEbVHWIP7hd3p4QogStaHGjqNhheI1Fzn8gHYxDRyR?= =?us-ascii?Q?om1mrDr7a2RB9p8qLKj5U3hJ6LD8sOrUgd63oQAznwMmXCo/5+pqovhRnTgl?= =?us-ascii?Q?cnSPtW6B6PLLj8r369ACj/NCSDqAbgbzOJauFjORmnKcQ1ekQAJziXl2yCat?= =?us-ascii?Q?u+FQ0dy3V/fscUBzmgPKAYx1/pnWO8uCrpJsZp5daNuaCmgwrPIFj5PUaiqq?= =?us-ascii?Q?8YRvgZ9zY2OF+e7ceLC2RojrIT6r/E9G20Y1cRKXC9XHnraS1daKwuNxKnMC?= =?us-ascii?Q?RlplUNEVOBLF6R1FU3J98YTubwoRuuvgAzBvchwqcxmro0IWrjpNiqiHSR2W?= =?us-ascii?Q?IJpaV8i0zDxJfCpMfrEwOjn6J3ysmvQKOI3+6quPKHaeUpAXYupySt7Is/Wk?= =?us-ascii?Q?5Yp1HoTugHupTqd9EK8Bg6+XH+mvNipaGGPKqpst5DKrnW9vy9a4G7spOseS?= =?us-ascii?Q?d8+LFNPqj9lb8nbMouXmo/XufdCF2PuScOO2K/pptszxX14c2g8nsYN5Py7n?= =?us-ascii?Q?tXmvvW+2OmXiyNuED+jyKGV1z7d/1Z52zv+IQ6b16KJ5LH31Hh/Pcl3c+NfW?= =?us-ascii?Q?sUkHbBJQQtiKnuIU1Jqtcfp1tq79wsmpIzP/KlfeOwW9e5IMsL5H9pEsxQjJ?= =?us-ascii?Q?BGPTceFJzcawTUPgChk3lbAxAYoV6ZfM3dI6gRrUAgrtjAwYGhv6NsLVlYH7?= =?us-ascii?Q?IiZpXv56kNZ+y1bhPXLD4/2K4YFnZ5qXVPOY0lSNQuxz6GQvqCB8dr3W4UuQ?= =?us-ascii?Q?Y9Is2HzxK7QOe+isU35qnyL0Tx0gVXYXruDs4SlB5CXsMhMWUOxWvnINnGJg?= =?us-ascii?Q?oAgxd5p9sNPJT4xznES27VK7L23Ojp/if04oeNHVvYeW+UM7BlPxK/oHQ8ob?= =?us-ascii?Q?ljesUzd1KiNGu7Bilh4V7oicJ0n9CxTeIr3Jj+CKWekDf9O/cXdMT+8w865j?= =?us-ascii?Q?KRlNn5bqvQ8NvhMdD6QeVB4tP7jZOznO0ezw6qy2TSt8DF2PXekGTnU5JIxa?= =?us-ascii?Q?1mMxNJZ3AijT0u7aNv30D1NcwSVL3B7lav/N6x9k6wtKzZC72bkf2Gv4vuWE?= =?us-ascii?Q?+NcIu2JemZ8/aMzGl4vc6A9j/iyeyrvXy72ggw0/95mdauhCo1GEcSBQV8Yh?= =?us-ascii?Q?gQ/NCHWPTTaPR/8wCsUN4L1vKtDQhXDG?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?EH05V8ugDFMTEAO5Xf10bMlCtmg+sPph98co7IxUA4XtMCGGxrt/cGND/1TC?= =?us-ascii?Q?0BL9FS3Jb9AuDMyXtzFrIXime/++x+YNv0ugThzs8zqw0vy6aB0QOjovzbM6?= =?us-ascii?Q?Nz+xd6LNH9fMSNPoFLlV4VRkMXpq49xz3THuFt3uA0iYbD79X6BTtzYoTEAL?= =?us-ascii?Q?AdAZ5Jw0JtPEFlAXcs2fTAkm4xQVakyYsjqIKAdVM2sZwRPQjEucb7FSF7MA?= =?us-ascii?Q?OteEul4I0nuJ3sQTza49kln+wvmqCpbYklxJ6IK8KOIkeB8dZ1VnckPRg57/?= =?us-ascii?Q?5d7VLByAtg8RxW8bDZ8GZmPD5DHKL5V8/90WoLXbiKm5vvh16V6JYhUXsEQH?= =?us-ascii?Q?vdTHRRx3H9VsuEBOaPEhQC6GwYPJhvu71DjQUVjPpv/9m+L8wQP0DWDgyzqq?= =?us-ascii?Q?3T/CeffL7evRldlFJVR4wjB2dbRCCjvbk0Lkz9Kyh1iDzhKsmxop2tnQ+Gvz?= =?us-ascii?Q?sIGy19W2u3JamCPO0SfhSWsOTAvl61xT9AqWvr8L9xiBiA0PQqWD1eEXwsXx?= =?us-ascii?Q?ZoSRhgGA4vyee6l2NK1Wh1+d+yja2Ecx0R7YCGPoq3aq1ClBREADBDa3Y9Eq?= =?us-ascii?Q?9QeEVKneXRLGsxAFz6hfWt4B6TRR00rLer84FHz7/MC9gn+eTmAKQVHFS8+L?= =?us-ascii?Q?zjCMk+V9cRilsxWJ8xk2WE/IDeEZe+gY8WIioDCKokWT/8bXw/RM0JZEBu2x?= =?us-ascii?Q?VUqiI6akW//SYWsBpjt3DhdE6BijaJ05xTex5Z1whOvdLliOIV+7D6eD0ka5?= =?us-ascii?Q?m80wGEVxdP0Pud27VQfh70W2fESZHeLg21Kt5EIMkFSiNkNDgCs1wkyiK+2o?= =?us-ascii?Q?I4lC7szDxr1LecoWaS14Q4SFELcMzMnd4qw/cWq8P0HockwcJfhNiS4StFjP?= =?us-ascii?Q?KTD+wEwLbofq/Zp0rEL0QKsiqoaF8/USDVZP7z13t1wdyyYmHw6lgivRDB3J?= =?us-ascii?Q?TIqhnJRLYRplaEcF6BYxr8e1GlQQY6P5JCAREvvpKoyIOLTXwJ2jgrJ4vJ2m?= =?us-ascii?Q?tvNK/cTL9aEx217IMCG9GB9yyLEHEacLlDt1wmQrLeoYzu3A2OsFO7uR1zti?= =?us-ascii?Q?0eI9hICmeyYhdYCh7QWe6rmxw+yIdvzJMXGVyrdv4C3jYsmR8aLcuh2/iSYm?= =?us-ascii?Q?J6W4RnBx1VIL2AwYw2KQARKtF2geuYBHiRjTGo+aZc3X2hX1Qh8HcT2uKQV5?= =?us-ascii?Q?fuVwMUjKXHMAXV6IsrNy4w2I6teFdwCssI6eAUyK2RPmBCCIoN75Q0P1qAAi?= =?us-ascii?Q?gSyy3iYZ/o0tcgysx0dzZ9uysNuwy4AGCYrERwnRas3HD/VL3SL70enDzSfd?= =?us-ascii?Q?bxqVWv7FJLExWWfQAPSKHyrb5SrU3BH0j0SHQEDWAGH6LT10VFJoHIovniK+?= =?us-ascii?Q?3seZuoUXk2sLRIhIuCoxdFukT+fk1LgAtsJ53GN+LP3XgQ/RZ6mkekLaAzcU?= =?us-ascii?Q?8PoFts7VCBeiuexMkdupT7/6aq7b300ZF8cIchIb9HdWmTSeIF44ozN/TGaw?= =?us-ascii?Q?c6mdPwxj1BUIQ1gjRBxiRdbsntL0BfoBViGrEwY48J2SscXG//88c7X+H1Fi?= =?us-ascii?Q?cybxjTSslm5lkBwdR7TjjJ03vjnQdWGpPK+fqAXZ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: dab5d00b-7269-4624-f535-08de2255c42f X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:29.2967 (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: 8/as3IkRNoLai0S1rXc8otdYZaZnlPMQsftjZaO64EFP3U0evz4rBX6vaVZIjBPU7y0iwQ9JhVzWT71c9yRhJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 5c9f054a0f42..695e87370cc7 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -382,6 +382,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. @@ -531,8 +537,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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 2884C2BFC7B; Thu, 13 Nov 2025 01:41:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998097; cv=fail; b=kmr85WPQ3IYTGgmv2gadIr3XURcmEWfe/gOjxX/5CHN+8WwRywTRCGtzCx0JMieIR6aKHq4Ose5ozeHr8801XoTuzXBMcUJhUh0/3RDpFXuYqtgMs2/hJ+LdZAus09xuKHr5b7UYnQ7R8p+kXwOl9Vd8Krn/fkwzizV+r6o05FE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998097; c=relaxed/simple; bh=Cb5G+LAmQ/UQC+8VUgFRklKopTNHVYzq4t5C5Zq40Xw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=B5JEQl/hGxASwCmi8OoNyi0cQkL6P+ciH6+9MGwhgokHzXdUAoWzXV5YbrMFKuQpE2fYmnv4HWdzwcOLPU698Svqcx3Wsc0aNMymIIUYY3dAVTkLEmuhm+hoJnpytMeZmtSZshGksFKDxQyR2dcJaNhT2I8XmN9KYMcUYE1vlfo= 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=BEYCVXG/; arc=fail smtp.client-ip=40.93.195.70 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="BEYCVXG/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Qd2fqHVJ/K6x1OEljSrX233d45WvTZGs4uLPKMO0z231Bwui5GX6uo98xl0EJ2ru0VLq7FFqV/JQv0qdtHzriqHMTmMRxFbyIaYfUjWCm5yNbMHBa4FiI572V/P+LRTPVlz1GTrwcR3bOUSp/9VAt+kMuC8vZa5ZKiTxFYXXj3rMxwQ4BCmfxLcLyrZ5WN6DEysuVmRB6rrJWZoaCQTgPnv+vxSlFAt3souGwoECt35i38kEKJ+4pen5SkmiD81GeD8hXii0VfCnHWUWoIhyYA8rNyTweFcKlLO+96h/eyC3XJEzDWfI6oQ93RCuAqqiOmyOMKuTKlS32WB+lQmEmw== 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=TguzUso4/U46nef4p/COrF1bhFUDyd+2t6kEYKT5xBU=; b=IebaQIsqYvc9bNM1/bIHJmakpyirRGx1YM+nLaBxr7XltwPs1dW+akAuSOXx8yKQbMdhCXEwBBw56JAtOVkQbpIC2ZvoDZGpODciRXFdRl8RsFr/y6RC5Rcua7ZIU1u3zPcKVY1vvA+mtV+oEn9vdH/Cw8UfhHluNDvaFOPBg8yAZMfmbmQnpZf+zGvwR5SpcnTgeTLzmBIO7S68wSarWMGT4peSZs/Zd0b2rYXrxi3oqgJgknFqcdEfqaWtZAeZH5O0VxUJ5++d8OFxv0NegazubLX8MBKLXFNoURZp4AG0criksIjEB+MHvrcJ/9Wex5b4bbj+wRmYL6GXvOXMdQ== 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=TguzUso4/U46nef4p/COrF1bhFUDyd+2t6kEYKT5xBU=; b=BEYCVXG/8I4T7mCdkDg6XPJswA+tYGsNmE5c5Z3E9YjtCt5wjekrkpHxX6EPk9BehZnkgtTEdiVxyvBFsB2Po+n03ytmu3HdjY5J+NDXFO5agKabmlWUYW7GJqhYyeFI8Bw5mNwJdGZNX/FydX2bQZvD4DwqrLYv8AQKptghgooX5TJi93+1gb1BLdXNoX4sIUxn8Uo11jRp5PkH09piLbQQWr2oveKwPSOR3uOtsY0wMsNjzFhZnDtYy1/TPDnqVi42aj1i50cGuy0+VVBuY6oTcgC5CXqnkXHIQ9LILlaqcw3S3VKvpL6Y9IiP907MYO7Y/nZ99oOo6Uq/MXm0iA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:31 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:31 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 05/13] gpu: nova-core: gsp: Add support for checking if GSP reloaded Date: Wed, 12 Nov 2025 20:41:11 -0500 Message-Id: <20251113014119.1286886-6-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN0PR04CA0010.namprd04.prod.outlook.com (2603:10b6:208:52d::25) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: e6026602-369f-4410-b48f-08de2255c534 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?EOLz9NolPG6OMpB3C1o8GXig8ZZm2Hy/7NXYK4rfIYrYlondqvVXOC8dDkoJ?= =?us-ascii?Q?ExjzdEFgJ/Sq+lpX2YNgA3AA2g4tNyVJWbvjmnHjKgEJG6qU1muClv9tIWkZ?= =?us-ascii?Q?ffSH6OwGAncbCXmePKYdcUCLn42BAozRdA4axyTI6Squc2A5Sc2Ez/QJUeJp?= =?us-ascii?Q?YcOi5jPngq9qi+570gOUcaz7u/afJ+HtGt+G0uFXMJLjlJbxgwgiIvmFJF3o?= =?us-ascii?Q?NzZjEtLUPEw7m5QalUJ1KUSsdKgW9Unah6/kGJ5glISbabmvz9EbJ7EX/FOL?= =?us-ascii?Q?H1Zxktxazzs86VeEv0T8fQ8juRs9XCO8l3G0zm79IN/nL/6atI86Q4qerOJw?= =?us-ascii?Q?JiaP7lgMO00NOx5h5PsUDVSHRUmMbdmRR8l0nCWR30HGZ2fXeIfKpEGI7EzT?= =?us-ascii?Q?qWd5ut6B/rB9s/ZgsgGMdP2t9yfsmErY3K9xAt5QlpPLtlrQ6wZy1FfIYL2w?= =?us-ascii?Q?nIWCWDxmvIElCSX2OjiZ7a57HdniPPaT+YQ0s2fBbRo120FMCcyjQ7RZDkCd?= =?us-ascii?Q?SpdtMWzGiokKAjIzn+29w9qprS4dqgdRTsRAfRdlrGOOToq+lAFP2gVhuh92?= =?us-ascii?Q?iMu8/JanXcswjjq6F+74uuBpNRuOHHDHYHENuTR8QFR0qidnwqEHp7gtib97?= =?us-ascii?Q?H2B4zyao0JfDKnmbuucCCArYAlZ9Xjf6BwQiC3rzCMlisVXdM26CqBC8QbzU?= =?us-ascii?Q?wNwhP9X+jJ9UQx5Ud/OKBMEDqhhSZ2HhsSKftPTLD/M5+MdjyQv3X82k6X2U?= =?us-ascii?Q?ih5IzcMwz8Sc8wiL9DMOcwsJlSW5K8UVJmFO1vFVPxauESUih4YpPo1jEW9F?= =?us-ascii?Q?zsf8LAQDpMLWU8wbHfxZV9DsEtuaGCZERoHBvgmrQzFW76198auHI1AYSY/c?= =?us-ascii?Q?0CvLO9x0XYfytp7L3+0wgZK5ty3nfZJOyUwtO1ODm97n2zxCDtLDbt+efCyB?= =?us-ascii?Q?smhbd2n1EQaoNLxCz78URWyK7QzXEhltSc0ZHawKAfybqW1VfBmod7fWPPvi?= =?us-ascii?Q?LobkWhGSPJ3fUZZoSDSFd4nfOaIQUKHoEAI0jklMs+1rOH9i/iPqg5Fi8I4S?= =?us-ascii?Q?VZYEmDxfCEdZ1Dp9gB/4fYZYT7uA/M/cjK8rVsyeIKM1EpgGPuJMua4uPEMM?= =?us-ascii?Q?QIRdoWW9mOd7dipdoNm0i/QuMR2AqnxPVDgFVw8lA0CHRdH3kQoGY0A61peh?= =?us-ascii?Q?EPyQsP6ziAXe54dZgHU2q6tTQlKt63ElaxtXx+PtLsWzqUDOZjLLhP5OHAYO?= =?us-ascii?Q?hJza0nhf1b8/IKvg2mJOXPsSNznukr0jSkrvY6ebkWfeURmVxkqzNFBSgfdQ?= =?us-ascii?Q?LdqzpzMMi95XftSqXHOsRyaoBoebofAbHRsE+Xar2DRYBLDm9yJUfulnD6pS?= =?us-ascii?Q?MmYrCObrT1uZRQcXoGkouesS5onaOSyJByNMVgbqAAq2L3CrNnM4HtyIiD+a?= =?us-ascii?Q?NvWGYZcezwF7OqcF2hNaRkGwCOI22UBL?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?xWP+KESA579UR276P7DIjbDmzWGB5rm4H1IHQJG9R03SI9bqjUUGsghMFSia?= =?us-ascii?Q?k3Ld7etwqDw2IFDdm9DC4VMew3G88P8WKw8HMkUh6Nfm/RjiSxRF+F7cqO5S?= =?us-ascii?Q?hgvM27nsS5gfzLIZwrubXy1FyBwUrNl5WGsAiqBD5LsqDU4PlCGNeTqMqmjc?= =?us-ascii?Q?3dv8oMsatUK/VXkxcFVo67BEBTttFURaZt4x1uBLb+jlb81/rRiDMFaPoN1g?= =?us-ascii?Q?I5j01DkqJLvLxpVejxQb7npty/yL9sBcJj4/BMUDa1pwy0oN42wv1iGvtiXM?= =?us-ascii?Q?iAZuoD5cREpRbgG7i4EBF4Ddwk1nEr2HeVCH1iJgC7V70ZeBVoInz5DXVfR3?= =?us-ascii?Q?aKqglv/TB2xkKt5FbWHsU4vSomfmk0WgbZvvL7AnW5KAxwXzE/nP/aPlHUFj?= =?us-ascii?Q?zHKcaJNmAgu3Lax7RUl1/qU3F1eqCd9FnJqNg+4x6Qd7q/k3plQlGvJZhN51?= =?us-ascii?Q?YhyZ0FKww5ErnWlOVA1Tov3DDlHk9U1MorrDkIRET9AjeKGfYx5MyY6G/5AV?= =?us-ascii?Q?i1Y4UQnSyep3Cj+mLFVr0Uo0802/gLYaLNORL6/cTLWLQFZ5FKrDokVe33/Q?= =?us-ascii?Q?O9i5MOyVjgA8Tsus6kbeSlWp4r6T0RcaHmoEO5lI1S/70uyGfqm3+C7nU6tE?= =?us-ascii?Q?3WvKGso3qzRaVbUnKOr/fqNOSeYsCX5SxfJuyDiE5IsJx5uKBtnd909uRrKM?= =?us-ascii?Q?KZLRmcgbQSMMmF2qXcP97nw7hpUXsmKJuemF33vnVwmD3KofaDgu6GmFbZJU?= =?us-ascii?Q?gOwzd6srCIfOXOGNXusSOyJLtQNXRnVqROF0OeyV2mMYofVQLG6GUV6+nSes?= =?us-ascii?Q?1q8xz7uCrSVF0e2PXsv/gE1yQEM5VqZm5RyEFffObDn7YiisR2RPKwy7I5+7?= =?us-ascii?Q?Wz666+7G+UkzjbkFSqHrdMYFirXr6XNZ+qjyUwBH6TuaB4WDekXuM+xOOb4Q?= =?us-ascii?Q?p4pnHCeUIvLx38KfXlZQVQXZE6eT0QGd0FuEV0mz7oLsSd5LY5rUhv/OJGda?= =?us-ascii?Q?EpCnAhipUda/jy1lbtQ74bdz6b79L9Qnv9zCc/e5i40iKUg6dTlWs4XgYsut?= =?us-ascii?Q?lXSbcIkYCW6H8IRpAa0TLclNKN8fLp2oEzN/mw4xGps7dm3/mZ+GYSXckZ2N?= =?us-ascii?Q?GiPo7zJDiiR1+V0Nzw9WvnP5EiEcPJFlw6gsutr7797nuga82iM3gDjK66/K?= =?us-ascii?Q?jeBOGZ+fjZJ3nEUR/gXubq04QuZ4YzEmV8cVtFdEWBHbvnVCPkOK+d21bTUp?= =?us-ascii?Q?Tx3INDDyiZTsfdY1LGEDi7A2CLnW8AQfpWrF+oa5Mt3Dp/2tXyg6+IkiZtY8?= =?us-ascii?Q?9hiu+889ShQJtdsgR906cLQgYU8QXtmMtkMLjlk0vJrjAWQYNY0K/Sr/oqYR?= =?us-ascii?Q?g7aEWrxo1UHOjRTk33Y1xj8vCPtMaufNfMqUvGFEAInjeg+rYAqFYULwF720?= =?us-ascii?Q?IDZBB9aSqo2MeYwZyQE/rd2rkBrvhXIarU6QixGviFvzD8yB4X6b4IWBQ+zk?= =?us-ascii?Q?0AfFRrf/TekXD6kcgjqD+PmiI562ZmtkJU+cyGwqXfFv6LH+x+63Kv1Gz2q/?= =?us-ascii?Q?MYvaDEWvUX5IhM+hrhrKFMw5b48dCi+iYqLDKydP?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e6026602-369f-4410-b48f-08de2255c534 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:31.0119 (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: Deih/OlAYca/1OvZO597JSdTy0cTbaQVFfp8H77Yny97spVBk1UFkx6bvmXfzFto6yXKqsTuIAas6aRJB4FUYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 93d4eca65631..9ef1fbae141f 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::{ @@ -37,4 +43,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 274e53a1a44d..b32c07092f93 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -138,6 +138,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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 AF4242D0C95; Thu, 13 Nov 2025 01:41:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998101; cv=fail; b=UjtuR/EC5JUQhMc4vgV9NiyhkmSG/KiczGsgn5qhZ5xi2tLYI4mCO/omzw/KjM9i/mJsLfsdQO3UihPlb28UDfa9NzZLH17D3EBvOrvn70XJnkGvqt3phpXzoqvp8Mi/Vs6qtdKYu0JeF/o+/Ypltu0R+/cQ90nTq+r9LnK+4vE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998101; c=relaxed/simple; bh=f99vRLH3HeL4Me7+nWmNZLG+C9//Rm4AXp/w3putbzw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=P7iitZC1lSh3uaEb8TRQPTmrocOSJbuf/tEiPFrXiqtC2EbBnkIedwqHLY5w7bpkGj/qwzDeKwMyPD77UnhxcLT4UatJfumIctn/IqTVDRKvUIBCvRltlapHzd7KyhqzGtniA1S8Dfgx7O1K2zC7VnKk6BMdqLJwE1DKGkuQMQY= 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=hYZHGzj0; arc=fail smtp.client-ip=40.93.195.70 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="hYZHGzj0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S2a6GAH0OmMTBP4Gy/Wg0lmqKfPMhuj2NOVTmw4kvuT01Vs0PuEolHTCa2f3/5qeXssYWoEEIlECuuFyUxKIewqoz4kuXAc7BTisRnyCxQub6cDS/k7sKiY7ltldJkb3hAhFPMRBfsf475oB8REea1QMBrRYPUS1rDAw1NN5zlCqG4wchlwHKQ0YyuIoruTIWcKs8UzjDryKJ0XAglB970TCd747ZJJE1RstBzNbpOrp+RPripkut4euEHRTHLtVu8x8MyT+Lh5+C2+3060brvsKsNpYvQVOTvYw91CZFQqtuXntALkW4XxHxNOIk6Khx2l2HyXQ8asWWhPUAXLfpA== 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=DP5otf60/2STHoOSeuFVJ4Bsz8XiwqpnjDBe5nG+LiY=; b=YIE3Ep8AVe2NPHk2t6+VYRf/+enqu9NkXIF/jk8tk9XEOg4O2d0inPQ82ibHwhxR4dJgOm7h/+/t/rkVDQnS9+kuntPHQmaTmOkE9eB3ZDZTmBcxmmwYZY3c3r0H6OeDXPojPE3FfNJ+b5QuL9QJlWUTl1z5fIzQJKWtaqUxN7Uc2ap6oKXyIkzQQ23mF5toABSYABpGoU8+XvynXjCQYOtunoDokknhjUb2dYU0QC1hLr7jurEiGIFrFUXMbBxX3EmBi5cuX1dIYC6ugG2UANO2slUiD7kW4f6CEeImrW1RbymgO++eQ693NK/1zklDo4QAC/lDjzjqwT+ePKFL5w== 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=DP5otf60/2STHoOSeuFVJ4Bsz8XiwqpnjDBe5nG+LiY=; b=hYZHGzj0RCwbEIfTKEkFzlMsWeEKCN+XlGce2iSqsOHZ2vFL29JEPQ7fTIgapdFdXqso3V7EhIT/LTdADtIEBIjacF7QRTxFh5iVHb6CNaSYEGU2kcNetenRilom5QxZHynfpa5poYHdLEMsPC/GPF7RpWTtXDSTCNdb1mqY5/Av1+gTvaJXaT3CaqobWz+jiEWlqPG132StGGfd9u84Vg0/Dtq5Ut/7tKfaIOJznCt112UXsLLoo53oWVRJjEKMMoi5wHRUDB2T20DCg1ACX8+Fz6aVrMUkoQeIiZgTahcx5EbnGcgsjP9yn07W7THCyn6i9qex7jGEHxoIUhs4sg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:32 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:32 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 06/13] gpu: nova-core: Add bindings required by GSP sequencer Date: Wed, 12 Nov 2025 20:41:12 -0500 Message-Id: <20251113014119.1286886-7-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR11CA0019.namprd11.prod.outlook.com (2603:10b6:208:23b::24) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: ed9f3151-afe9-4d91-d47c-08de2255c619 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?3a8GbqvYnm3uoZ+QCOblZ33EZq/TALUmc5Y6pgi3K80S4toDLE//oj7TsCOB?= =?us-ascii?Q?N5Y8bQlOa87puUXvukZawXbnx0vzxLLzEYYm1KyPTG69HH3XBaFE7/NVhep+?= =?us-ascii?Q?nv24KYvAg+857v1uLuwKe1tlR0WQ1d92OiNrKX7Wac17LCe1U5vzF9ZRLkgN?= =?us-ascii?Q?NxML6YnUnhi8KQP1jS3x5IgIa4ke2cuDRJA6TW9k1OYlnBTujmK9ZilUChdO?= =?us-ascii?Q?tA9D96rTj0HTPFxpWcFSfVQ54bYTt12+DqvDnVqwH1b7ZSEDaO4DyuPzsGu0?= =?us-ascii?Q?74OSznjUCffZtkXiZkVcc7YugkDvCYPe6OoiW09xbEJzDAKXHeg2DZuzZsZM?= =?us-ascii?Q?FL6aCtdnDJwqehmRE763I1yTW9aTM73cZLafB28+KOGkSl28zYnc4Df8B1sr?= =?us-ascii?Q?ek70BNKkKe3O222b0qWjDV53pymP2JEvzEHQk5g2AlmYyd6+ioXWztZQ3zuO?= =?us-ascii?Q?2+74B3fmR+brHrIdsg+2nUi88HVAj5RairE0Ng+r+rivqzbKt8ZTTZJQ9ezk?= =?us-ascii?Q?uTNb1dF4KnFXed3/dzpZmx47A7/p8Xd6P+H+DQin/4iMG9bOdDSbOjekzWCs?= =?us-ascii?Q?7xv2BF5jYB4QlGjG+PULl3FmKDurxhKYiz5MFAbtYreQa1NRxDeT0BMh89Y/?= =?us-ascii?Q?WOwaSMcHX5Gcm5GbjoKss0srMtOvetYXViYKq9AGnBW1vzVtuDnneRLU8zNe?= =?us-ascii?Q?onkeuwIpgeuzKWTzMzHOAdZ+0STZFR7IDWVg1N9wrDxnxn+Wqxqj/xzw9kJ3?= =?us-ascii?Q?ckwHoYIqxTgB5gK9vPR003xxcPCAc7htly1Mp7xZcs/pZlAGs1y/AApf6woC?= =?us-ascii?Q?amF/zvZ2F4iORU300C+iOJdpUISyYGeK3VkCdqECJFoCP203WwHmeflCElsS?= =?us-ascii?Q?rZoA+VtPIqHNXHTR5Tc5eje7z6Q4MPhad1tCMrRjblHNylMM3/VAdKOpLhR8?= =?us-ascii?Q?BUiCA5l/eTwg98futzNsG8ctGFVWRCiRQDVTWGH8wJwk7TJ7IPsOZUZptYt8?= =?us-ascii?Q?EZeO+4LpXC0LwQkgCh33Ky3hv5Z3C2aHKIo8eVRLgR8NOczvAP0NOIiEzo3O?= =?us-ascii?Q?+CUNfx4ZzDNu/iYFckpQ8T2yVckDS7T2FT+aRXkJcO9t/mSqK0DlNmt5gLXW?= =?us-ascii?Q?ODFPIFBkQtbJPnj41xwMxjeUhNPGau2nsMF43KYiQSxZc7yQG6s2/cnFHFIh?= =?us-ascii?Q?3p4bSiCb9kHfgzrCRhsfyuiAV9YJ4hc4Z5bKCrz6NRz+wqFlS9kqvBpYaCNJ?= =?us-ascii?Q?+sWJnawCARSk/5bRVhdtNnLX8bxdR4n95Bq63fSfN7uEzPdEjtBqt9BomKf3?= =?us-ascii?Q?ce8IMEvrc4FBFVOg+6pZzvKwpL9qxjYRymUL+cFEQjXGWw3jEa3/OpykSqLW?= =?us-ascii?Q?7gsZqDkBBWrGWjVYfpqqXNuWVqCcpjXtHHcDz0J70Jwz4s0ic2wc87Dtl4UZ?= =?us-ascii?Q?TtVUyedW2pjE4n+8DnSwbHc9vGUE4Twv?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?aR4neDAtwh752GoK0Z0oBMfWSKiTWYGGWyz2bxfFI8AGGjrs7yKkPGPnFqQZ?= =?us-ascii?Q?7K0VGHM4+EOD7DeKzJ6MUI81nD1Z+6TsqPMw2KmYSVFuT2LZ8tNfB75SJFNr?= =?us-ascii?Q?W9oag3VecGMiyGjqnQAg0Ao8tKF5zaZWUF4/fRIqeGvh+oLiKjDQemurjiOB?= =?us-ascii?Q?fBWSBnDWIPTI6A77vT8uLSonhI9sJ6DhE5/sgslHdkRevnQhT/vUOaYOFuO3?= =?us-ascii?Q?+HZxucCF6UjJnB4t4wCX4KJqktZed9PrCzrDnPD9Fbar9Ijh/rpnf6btccTd?= =?us-ascii?Q?9DSO5uPbPs0G4FMJrH5twYuLgPYkWV0Ko5yecISY2iaPBxOGwjpljLr8JpeH?= =?us-ascii?Q?KQYGe2rSr73MN0IBAdJZ6hEUwvEdLPx2cKnD1P33mTxGjcv9Rv7XYYanmnvB?= =?us-ascii?Q?MwSZNDEwnR6uv1WZPmzAqhBv0Awj/if7CTKfzU5tUPM7EeYynoPqqr2Ntat9?= =?us-ascii?Q?aaet1JGPMjbO4AXftOiwKEKPM0om3/fCArAr1wKag6ALyvYiTGgIYd1lrRH7?= =?us-ascii?Q?09RWKC96WC3dwJSJl6UBeMGXtjhPIeTiarjW3y4ZzB8GDm0Rv52IvaarDPPz?= =?us-ascii?Q?Rykt41dq6qmXgd5SJLyNuR/MjFoQJjVMYYarkFBUUy8agJq+TyJZ1W4whHtt?= =?us-ascii?Q?p2Dq60DEFzjyC+sW+m4HBH607zv6j2PV7y8sjqWf7P2meoSBEnl0aoylViZD?= =?us-ascii?Q?US9xGI0PSolQpB8XxNMxAGzKVFgPpNjYi5geT3xOgwjgzIUBqtm8pzF5qPCI?= =?us-ascii?Q?5X9RKMFSX3uEkvidx1ZccH131oomu3Ov7pmkRAqyklXVs4duKL7fukqGe4kP?= =?us-ascii?Q?6pcPrRwqD3/TAsJB1OiRp72ntmmubC4W/4jUS7/4QfxkP0pljOrb9W6IsaoN?= =?us-ascii?Q?Zn/ZFICEMCgBqVE2gHbDOXubf09ZK4BoX2aXDf8fblw8dA9R/BRAMjxUpAOd?= =?us-ascii?Q?cdmwVOZxjPhQz33g2YQETYyuHq0ykbXQGS4Lv0GiCukG7caSsNHbgXsUPW7L?= =?us-ascii?Q?yxXOGpMRSOKwHzmw9yup8xtRjTU5l6saHVad3ojDlPRg24YKUhakKaqm3cFH?= =?us-ascii?Q?D9R6WzzOQNHij6eZDyZUhz0+Burq/3ySTlEAvovRWFpVCD/X0DZfBA0iimSX?= =?us-ascii?Q?XVyjgx4jtfuPXDr+N+PELGxMhRJ8vapfupTvDOiSFm5wi5EPzAXDjneX4Qtv?= =?us-ascii?Q?Smw2at/beJON+rC1lEteOyPLzu1RR662BQiO65zsTYB4znNDqB3AjGG1Db0E?= =?us-ascii?Q?Rw9gEsNK4CM+HPGdkXCdPDtc3uNUOlbCrIRRe06riVMazfg8p7WWHeTU8beH?= =?us-ascii?Q?1g7jHfeXzpw1Ve38x/O9zWc8Y2urM8EMUqVSW2pu1KfV20rZxKMXfDbsydV+?= =?us-ascii?Q?zZSFRooJiI+LybCK70bjh68XuL0TaKZP164m4jC2SaR9q7fLnhopV1YOSEOu?= =?us-ascii?Q?1bPkXpMW0HGjyvtzhwWy/xYG/IYSZtg5p2HsgIga9+iGRgCqagbToAToTXZF?= =?us-ascii?Q?ubFMyv0ogQk9Sd0JN4ABrMh5VrvFua/UGlT+NF38WwZfdMkGjNZ1GMzKtyI9?= =?us-ascii?Q?4L4XTUj/MO+iKCj6Tmj9Q9RZ7bAZZf3a74pPDfoM?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed9f3151-afe9-4d91-d47c-08de2255c619 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:32.5836 (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: RyP9nmhXYgUiFKVQoe4WpicluNzuz+CcjJqN6OizBC8fLDlomkSrigXyG4e4Z6D7DuFMN2KOBD7ACMQqREAwxQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 | 328 +++++++++++++++++- .../gpu/nova-core/gsp/fw/r570_144/bindings.rs | 85 +++++ 2 files changed, 412 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index cacdfb2d4810..05add7cfca44 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -312,6 +312,332 @@ fn from(value: MsgFunction) -> Self { } } =20 +/// Sequencer buffer opcode for GSP sequencer commands. +#[derive(Copy, Clone, Debug, PartialEq)] +#[repr(u32)] +pub(crate) enum SeqBufOpcode { + // Core operation opcodes + CoreReset =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RES= ET, + CoreResume =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RE= SUME, + CoreStart =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_STA= RT, + CoreWaitForHalt =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CO= RE_WAIT_FOR_HALT, + + // Delay opcode + DelayUs =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US, + + // Register operation opcodes + RegModify =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODI= FY, + RegPoll =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL, + RegStore =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE, + RegWrite =3D r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE, +} + +impl fmt::Display for SeqBufOpcode { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + SeqBufOpcode::CoreReset =3D> write!(f, "CORE_RESET"), + SeqBufOpcode::CoreResume =3D> write!(f, "CORE_RESUME"), + SeqBufOpcode::CoreStart =3D> write!(f, "CORE_START"), + SeqBufOpcode::CoreWaitForHalt =3D> write!(f, "CORE_WAIT_FOR_HA= LT"), + SeqBufOpcode::DelayUs =3D> write!(f, "DELAY_US"), + SeqBufOpcode::RegModify =3D> write!(f, "REG_MODIFY"), + SeqBufOpcode::RegPoll =3D> write!(f, "REG_POLL"), + SeqBufOpcode::RegStore =3D> write!(f, "REG_STORE"), + SeqBufOpcode::RegWrite =3D> write!(f, "REG_WRITE"), + } + } +} + +impl TryFrom for SeqBufOpcode { + type Error =3D kernel::error::Error; + + fn try_from(value: u32) -> Result { + match value { + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET =3D= > { + Ok(SeqBufOpcode::CoreReset) + } + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME = =3D> { + Ok(SeqBufOpcode::CoreResume) + } + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START =3D= > { + Ok(SeqBufOpcode::CoreStart) + } + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_= HALT =3D> { + Ok(SeqBufOpcode::CoreWaitForHalt) + } + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US =3D> = Ok(SeqBufOpcode::DelayUs), + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY =3D= > { + Ok(SeqBufOpcode::RegModify) + } + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL =3D> = Ok(SeqBufOpcode::RegPoll), + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE =3D>= Ok(SeqBufOpcode::RegStore), + r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE =3D>= Ok(SeqBufOpcode::RegWrite), + _ =3D> Err(EINVAL), + } + } +} + +impl From for u32 { + fn from(value: SeqBufOpcode) -> Self { + // CAST: `SeqBufOpcode` is `repr(u32)` and can thus be cast lossle= ssly. + value as u32 + } +} + +/// Wrapper for GSP sequencer register write payload. +#[repr(transparent)] +#[derive(Copy, Clone)] +pub(crate) struct RegWritePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_WRITE); + +#[expect(unused)] +impl RegWritePayload { + /// Returns the register address. + pub(crate) fn addr(&self) -> u32 { + self.0.addr + } + + /// Returns the value to write. + pub(crate) fn val(&self) -> u32 { + self.0.val + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for RegWritePayload {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for RegWritePayload {} + +/// Wrapper for GSP sequencer register modify payload. +#[repr(transparent)] +#[derive(Copy, Clone)] +pub(crate) struct RegModifyPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_MODIF= Y); + +#[expect(unused)] +impl RegModifyPayload { + /// Returns the register address. + pub(crate) fn addr(&self) -> u32 { + self.0.addr + } + + /// Returns the mask to apply. + pub(crate) fn mask(&self) -> u32 { + self.0.mask + } + + /// Returns the value to write. + pub(crate) fn val(&self) -> u32 { + self.0.val + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for RegModifyPayload {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for RegModifyPayload {} + +/// Wrapper for GSP sequencer register poll payload. +#[repr(transparent)] +#[derive(Copy, Clone)] +pub(crate) struct RegPollPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_POLL); + +#[expect(unused)] +impl RegPollPayload { + /// Returns the register address. + pub(crate) fn addr(&self) -> u32 { + self.0.addr + } + + /// Returns the mask to apply. + pub(crate) fn mask(&self) -> u32 { + self.0.mask + } + + /// Returns the expected value. + pub(crate) fn val(&self) -> u32 { + self.0.val + } + + /// Returns the timeout in microseconds. + pub(crate) fn timeout(&self) -> u32 { + self.0.timeout + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for RegPollPayload {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for RegPollPayload {} + +/// Wrapper for GSP sequencer delay payload. +#[repr(transparent)] +#[derive(Copy, Clone)] +pub(crate) struct DelayUsPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_DELAY_US); + +#[expect(unused)] +impl DelayUsPayload { + /// Returns the delay value in microseconds. + pub(crate) fn val(&self) -> u32 { + self.0.val + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for DelayUsPayload {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for DelayUsPayload {} + +/// Wrapper for GSP sequencer register store payload. +#[repr(transparent)] +#[derive(Copy, Clone)] +pub(crate) struct RegStorePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_STORE); + +#[expect(unused)] +impl RegStorePayload { + /// Returns the register address. + pub(crate) fn addr(&self) -> u32 { + self.0.addr + } + + /// Returns the storage index. + pub(crate) fn index(&self) -> u32 { + self.0.index + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for RegStorePayload {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for RegStorePayload {} + +/// Wrapper for GSP sequencer buffer command. +#[repr(transparent)] +pub(crate) struct SequencerBufferCmd(r570_144::GSP_SEQUENCER_BUFFER_CMD); + +#[expect(unused)] +impl SequencerBufferCmd { + /// Returns the opcode as a `SeqBufOpcode` enum, or error if invalid. + pub(crate) fn opcode(&self) -> Result { + self.0.opCode.try_into() + } + + /// Returns the register write payload by value. + /// + /// Returns an error if the opcode is not `SeqBufOpcode::RegWrite`. + pub(crate) fn reg_write_payload(&self) -> Result { + if self.opcode()? !=3D SeqBufOpcode::RegWrite { + return Err(EINVAL); + } + // SAFETY: Opcode is verified to be `RegWrite`, so the union conta= ins valid + // `RegWritePayload`. + let payload_bytes =3D unsafe { + core::slice::from_raw_parts( + core::ptr::addr_of!(self.0.payload.regWrite).cast::(), + core::mem::size_of::(), + ) + }; + Ok(*RegWritePayload::from_bytes(payload_bytes).ok_or(EINVAL)?) + } + + /// Returns the register modify payload by value. + /// + /// Returns an error if the opcode is not `SeqBufOpcode::RegModify`. + pub(crate) fn reg_modify_payload(&self) -> Result { + if self.opcode()? !=3D SeqBufOpcode::RegModify { + return Err(EINVAL); + } + // SAFETY: Opcode is verified to be `RegModify`, so the union cont= ains valid + // `RegModifyPayload`. + let payload_bytes =3D unsafe { + core::slice::from_raw_parts( + core::ptr::addr_of!(self.0.payload.regModify).cast::(), + core::mem::size_of::(), + ) + }; + Ok(*RegModifyPayload::from_bytes(payload_bytes).ok_or(EINVAL)?) + } + + /// Returns the register poll payload by value. + /// + /// Returns an error if the opcode is not `SeqBufOpcode::RegPoll`. + pub(crate) fn reg_poll_payload(&self) -> Result { + if self.opcode()? !=3D SeqBufOpcode::RegPoll { + return Err(EINVAL); + } + // SAFETY: Opcode is verified to be `RegPoll`, so the union contai= ns valid `RegPollPayload`. + let payload_bytes =3D unsafe { + core::slice::from_raw_parts( + core::ptr::addr_of!(self.0.payload.regPoll).cast::(), + core::mem::size_of::(), + ) + }; + Ok(*RegPollPayload::from_bytes(payload_bytes).ok_or(EINVAL)?) + } + + /// Returns the delay payload by value. + /// + /// Returns an error if the opcode is not `SeqBufOpcode::DelayUs`. + pub(crate) fn delay_us_payload(&self) -> Result { + if self.opcode()? !=3D SeqBufOpcode::DelayUs { + return Err(EINVAL); + } + // SAFETY: Opcode is verified to be `DelayUs`, so the union contai= ns valid `DelayUsPayload`. + let payload_bytes =3D unsafe { + core::slice::from_raw_parts( + core::ptr::addr_of!(self.0.payload.delayUs).cast::(), + core::mem::size_of::(), + ) + }; + Ok(*DelayUsPayload::from_bytes(payload_bytes).ok_or(EINVAL)?) + } + + /// Returns the register store payload by value. + /// + /// Returns an error if the opcode is not `SeqBufOpcode::RegStore`. + pub(crate) fn reg_store_payload(&self) -> Result { + if self.opcode()? !=3D SeqBufOpcode::RegStore { + return Err(EINVAL); + } + // SAFETY: Opcode is verified to be `RegStore`, so the union conta= ins valid + // `RegStorePayload`. + let payload_bytes =3D unsafe { + core::slice::from_raw_parts( + core::ptr::addr_of!(self.0.payload.regStore).cast::(), + core::mem::size_of::(), + ) + }; + Ok(*RegStorePayload::from_bytes(payload_bytes).ok_or(EINVAL)?) + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for SequencerBufferCmd {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for SequencerBufferCmd {} + +/// Wrapper for GSP run CPU sequencer RPC. +#[repr(transparent)] +pub(crate) struct RunCpuSequencer(r570_144::rpc_run_cpu_sequencer_v17_00); + +#[expect(unused)] +impl RunCpuSequencer { + /// Returns the command index. + pub(crate) fn cmd_index(&self) -> u32 { + self.0.cmdIndex + } +} + +// SAFETY: This struct only contains integer types for which all bit patte= rns are valid. +unsafe impl FromBytes for RunCpuSequencer {} + +// SAFETY: Padding is explicit and will not contain uninitialized data. +unsafe impl AsBytes for RunCpuSequencer {} + /// Struct containing the arguments required to pass a memory buffer to th= e GSP /// for use during initialisation. /// @@ -566,7 +892,7 @@ pub(crate) fn element_count(&self) -> u32 { } } =20 -// SAFETY: Padding is explicit and does not contain uninitialized data. +// SAFETY: Padding is explicit and will not contain uninitialized data. unsafe impl AsBytes for GspMsgElement {} =20 // SAFETY: This struct only contains integer types for which all bit patte= rns 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 Tue Dec 9 03:07:29 2025 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012070.outbound.protection.outlook.com [40.93.195.70]) (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 0BB682D3737; Thu, 13 Nov 2025 01:41:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998104; cv=fail; b=QOo/M1/GVzGdzHB3Az2Eet3mdaXljF9kdMhmiY5AlALI2/vQ4bOwFy9J25cPRbIQgX17fQpLUIhYr5OO0IXwRwWOE/4YlLYVTuGwkx6FBA3LOPc+en81qIHkjzskFewaD2sFa5KyCqiOEL4nHr6xra53LStmqOopAHj4ktpvx/A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998104; c=relaxed/simple; bh=JCIKIHsoWcMY3iwI1cUiBITB6r+N2R4+ivq5uEbxWAA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=pxvHQx/hiyuS5SDJ1Tn0+2z7nPS0ZlMrOB5kvKCg/aFvA0qxbEUP0/66jgQF1GM2llGiW1KY9Y6RaQEdl3bSWosGlz6EnQdqtgvIKnOIvPVClyU0AzaGzp8d9QH/Qq5KzKG9vdZQyKcqWpYl4+D6TGx3PknDmgCk2K5P8o4i3ws= 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=hvngo93y; arc=fail smtp.client-ip=40.93.195.70 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="hvngo93y" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AoIdcA0Z3Nbo2vHntmEZccq+6aVvlb10q+YQr4OebikLNsRk+bn2TAILVgyGJVvp2Zr2R96Oc0qZeXZw+E3SQXkarcs2Sdvb+alwbMNXKvoqjLtzySBceyJJdUDoS+2muObd/wd04i7+1rpa+CEbokuXNTWRHHVQadq4arhR6wOvpANB1A0OaByAbT87/3MvWkHytYflhXIxNx0qI/fn4YdxpBLhS5KzJYIOMcBjxLFZv6PLs5QLS4ffgxfGHVEqRw2kizOB6E3Bg+sbE60eSWrAPtC906eYd9VBLaEeH8eQ3SYrIFgLpPE0+4I6dYSx8wQTo1l/DtGt3WHuFjgKlQ== 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=0bwMd+KhsTnIdmUM2e7VbiT8BXRIPn013QJ41uoNMH4=; b=jX+tVbkiStCbtwbhlyI/uanFQumfOZsLo9qmJQgf5REpIeS7Q6vvlVFs3Wi3sth87RBwh3sfJUOyCgxPB7s+dIDwGhm2m2WFwnWmeBG8t+G/zLf+kw5ngIly4nsTnCDGQDbS7vwkmONOIyWQX2P/Igdf0NNckGyLHsRzZfNPwqOz/ecKwm7xLjgRyC0Mzl56uoPnOEPm1DOITk7VojFDDVnAHGfNrH4DbmS9K3y2fFTZ1N8QZBxM8MohoQChAYKKNZ2ETNYPmWrsyRQurjpn3XpbJZIN5OMkHpgOtQAX2jzdMgKr7CK45oDJLod5XchoWdiVpvJIw3afMhqpVd+riA== 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=0bwMd+KhsTnIdmUM2e7VbiT8BXRIPn013QJ41uoNMH4=; b=hvngo93ycE4eW2xgW6jHFODUXqRo9+b9LTsw5BsXX+bKkTHbizzQO/O17PSo2NbxBsNa6DawOu17jnJfl4R0umMdqxmLKOZ0zFq61zquoOBi00LZ6lORizyEUqFu4SBbNQ2tBia1/Ao15nxc653Cfq/+7giaY6PU/aaW6UKT/qgmd590fHHNCb/ZiJaIByIz1hMvVdaLJ0FqnakIEKFzpl5k6csyeXY14/fvQEuisUqVS3YukzMGKuhcUrNypGMxdPwt6UnUFU3kTyQ/gSNzdqq157AJHbJ6XpeprFyYZ5Uw/HLNp9XGNGjSgY233t6bt0B3eFjERtocUkTFeMFroQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.16; Thu, 13 Nov 2025 01:41:34 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:34 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes Subject: [PATCH v4 07/13] gpu: nova-core: Implement the GSP sequencer Date: Wed, 12 Nov 2025 20:41:13 -0500 Message-Id: <20251113014119.1286886-8-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0233.namprd13.prod.outlook.com (2603:10b6:208:2bf::28) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: 59051e33-947e-48fd-d413-08de2255c707 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?bU3XH2uASIlvLWjriHwibIrwQNYza/KPqlciAPhJ6+H8yvw+fehDgynvE/9y?= =?us-ascii?Q?ycKPcefCw0eSyosWieb8GyxTENwMCWJGBA11jFD3wPcQ7uNXhqvjcdQvIndK?= =?us-ascii?Q?42dPQ31KIld0sgkJyb+S+kqGd9K23J0fzYFFjFLbL4M6LOYjg5ws8nUNzO44?= =?us-ascii?Q?vfd75ABfw3jPa2VhflcexZbiveDgS/KLHd6+h1me8Hh8prWvCS5WCh5l3D6e?= =?us-ascii?Q?GMup2CT6Z5AbGgnsCpFjwXB+yo/2LJjRAc5Mhm/Vr0AExCsAFXYdrxtIpICr?= =?us-ascii?Q?baVQNfV4ZwMu3pIJj8/TK4RoIXCFXiOGpwKgAhgJKQRVxcWY2f6GzKFSlTzS?= =?us-ascii?Q?MP5EVD0lNZDY6/OuRx25aG2/N+4n57yLmxk2GMUbXFMXOZlnzV/s5rdCVK9H?= =?us-ascii?Q?F7eaLFyGI2fiGovwktakb/NQzSev/vPyJYQyk+v+gJX1/THfmdQvlydLEehq?= =?us-ascii?Q?8NP8S1Kn5+UWUlmeaUnAnN+ZtYZQZ5DybJtOZ5sglwQVbRypG+th/p2NJRJI?= =?us-ascii?Q?Pa4++MqGDmuIxE5kU/8f9cQrvO+HvEG1yIomXYYQ95rIS7QNqHMrOUT5KT3e?= =?us-ascii?Q?XDQXGKsV01TiV+KomXS1q94v/WTc8nN2S7bq4pcggrL7lpvGdBXui/855fEN?= =?us-ascii?Q?1T8iQqNCgtwU2ZdxPyH+ealvjKivSTk2uJ1LKOIGxd7oixPazUY3LrEMtINK?= =?us-ascii?Q?drjmK9SkQaWyHp7IFrEN8OTzgqnhrME9jz2kXppv8lmdbuGhxztGWy/sQqMV?= =?us-ascii?Q?e0h9kjLHSNISy2Xb/sC3dEnZUgqEweidsCRPRptyC5o8dGIkrJhZr5pf4lPS?= =?us-ascii?Q?FgYcYpWYeyaGevwA57d4lCrAw8o+6dVvVsshROrT4e6LY9M2p2j8A6AsAe0Y?= =?us-ascii?Q?2EVX1sWjCDt2jTpa4YNOMmb65PAA5woEBLzfJkntmCmta3M4UQATcWDYQD4e?= =?us-ascii?Q?0NP+KRUs3bhBC3cpyST4arLeIXv3kI3v6kWF+SclKwUYqc2rhic/NJS2wfoG?= =?us-ascii?Q?mtdd56WOVgpyrDDkS+ls7iarBJYE8JlffWu78UB9O0cuxTzCP0pZI6dWgaBS?= =?us-ascii?Q?aGhfEM5+Yu6gbUwjECr1rXgOkdabCWkgYdVwRYdWlhOSF0qkDP1bz9J9QVeS?= =?us-ascii?Q?2FR0zMMOj0O5Cb2Hp/2PDGyTq1gUJo1BUssF59YIF4KXS7vbMcsm1g+H6Akp?= =?us-ascii?Q?M9hWHi+zOKGdqnNa8ByzCAfTvyiiRsz2pNJYTvmYJtF4eNBhn5YPidyU8jvR?= =?us-ascii?Q?zIB6K1NLqJ/FxZd2RkPG4ypEr6npX3JEqGRmqjuH131Q1KcQE5/pUhWnpHs5?= =?us-ascii?Q?SbmDvcvjRb0+Tcam4ElaXrrMJYLU9CtHPlN9pHZQeWc+okfWX/IoQBVEN2sQ?= =?us-ascii?Q?7pGsX8JhehwFMAuhYAUW2ZtX+hJfzMkBrSEQE1fvyrjPgJ1b+CWFPNgqx0gt?= =?us-ascii?Q?6OGgBG6N0IcDyCl1vYSFMiJm5pA6CuII?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.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?kyfGDq0UqfGrspMNbCNxF2secWr7y+kgxMvrqGDdnD5tMrQ3BRroZ0Tg+n/S?= =?us-ascii?Q?CPTwzYylitmVllw2rCx3Wca5ETmtS4oH7Nyqn1bhKQMqAr/l66PIWAfalexS?= =?us-ascii?Q?e6onRpsuAGwGYgCN1g7QAosDgoEkGExwVo46Jgt2hC4eMY9S0tOo/0owzIpD?= =?us-ascii?Q?0XDaiS+nSPzywWkyDFadzI6xYUIvIXEfHYnO+b1P3oevYVOo+qVoFlR2rE1o?= =?us-ascii?Q?t9p+PPUd332hBLU9LsfMuHI+4ibr6QLDgcgdmD88OXlSvqy2f28nmjd+b5L2?= =?us-ascii?Q?b3evuvfkrzs+JvCWyyRtUKUhGRRUT09zHjpKXUt9DoPKqkhfEUeyGQYV7u5D?= =?us-ascii?Q?Eh+LfqBai+kP3rd/t3tQLXf+wmRCQnp4EQhca2/x0Wr/uWPIMgSCBbdLi56K?= =?us-ascii?Q?uYeroOg7ydV4BaQUjBiOVNorF0/EzENHjrsaoNCyIFia5XMkUryXzFjMJe8u?= =?us-ascii?Q?bA+2sIUr5X4BzwzvtBm/ygg7XRGHNop+VCDOgYM5J/XkJ5aj4dnDF88eG04x?= =?us-ascii?Q?HD10VJSc3g8hKWJIO9pbx2dxYVfnCCgxMno3X3PkePzX0WZdPEmb6AWdrhAZ?= =?us-ascii?Q?ywQSx6qNwMkXQnvZby9LBhmEPx5ZMrudWuYyHH1mllNZQGOkDIjGSgIKHXqU?= =?us-ascii?Q?XCdCg8bB4DizRuTyUSZ736ai+9NrN9UTd22tV4bVURFj5IhHMRN+G9C4KnaW?= =?us-ascii?Q?0ktEMZRJtzC1We1kLw2nsD0gq+Isl27vcUcswy0B1AcxXQ3rn80OoMgtD3Of?= =?us-ascii?Q?WzNXyzuuZXm2eKhxNGIagIgTWjQI/wvijImFToJnztcYY+f3elzhM9+8fNYO?= =?us-ascii?Q?q2WEC6PSmLFKutRRp0k2if1zaGviaSLh7FRQBgaIuep0S/uyvg+pxiBO+F0N?= =?us-ascii?Q?w/OQJhoBZ7kDnyVNnNThwoXkkBLa2uXnNQlR8hMk7pnQdvDh/ZHQY/3C6nlV?= =?us-ascii?Q?hYrA11ouKIFm9R4HV7v+V/4Ap7wr1bPaw1Wyrgm7MUd0itkkeVwv9YwIob1M?= =?us-ascii?Q?rB+qQKn0gWeAfcyLWXhhyppU0Eu8fH6XfItxyAkRxO7WmSF9ahy7ZO9fNjG2?= =?us-ascii?Q?o7XfjK6T1eb9Uj9ICjLy4fFPnrDE9ViPeqUy4KzfZBoJCuoyQTTT6ozaUwdW?= =?us-ascii?Q?uHA7lOMoNDc5NnrRF+Tidae7dPRjPJpTqyl61H2yAZO/2Wn5fNCPMtr/seKq?= =?us-ascii?Q?M8ekg7KAoAqck5BX/ySQfvrsQQxJUiO6gmsHpcFqsP3Ibv8DbffgjopdYN20?= =?us-ascii?Q?O/MDlkqzFz03veanZY5wQGUpFdzPgGKymCBsnGD1uwBaFqEZ/SOy1NbODinn?= =?us-ascii?Q?2CKCNQVQ7nhl8mYBS+XWP0t3vvZj+V95oHow6eS39A64FbxybM/Mu7GLAUkp?= =?us-ascii?Q?1tL/YLMh4wuUz+ZUqvcpCr+rLwaDn8FYUQ3T1gCPhAYDuIe8mShVy8X1eHEp?= =?us-ascii?Q?eA8lJoNa2b3djgUO8bGsXKTT4H9tPeSrvDwHwYf87XDO09JsqiiMqB9ZnJg/?= =?us-ascii?Q?9eyb+6AWb5zO90k6e/PFXR+eWwBVGTbjUXY91UxFe08vjnWe70GuMNLhyX8n?= =?us-ascii?Q?MaaKO30pkOHZFPknWdaleQ+g+9xwIaOvWncWGGSd?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59051e33-947e-48fd-d413-08de2255c707 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:34.1483 (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: dVnB8zG+rImm9xbF76VF5atFeLMbiGhrICIgDgyC8b16CVsaNOtRfA93rHB40WJy/0Nftxs7bKqJZuS5z+nxZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 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 | 15 ++ drivers/gpu/nova-core/gsp/cmdq.rs | 1 - drivers/gpu/nova-core/gsp/fw.rs | 1 - drivers/gpu/nova-core/gsp/sequencer.rs | 251 +++++++++++++++++++++++++ drivers/gpu/nova-core/sbuffer.rs | 1 - 6 files changed, 267 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 e40354c47608..fb6f74797178 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -17,6 +17,7 @@ pub(crate) mod cmdq; pub(crate) mod commands; mod fw; +mod sequencer; =20 pub(crate) use fw::{ GspFwWprMeta, diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index eb0ee4f66f0c..e9be10374c51 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -33,6 +33,10 @@ gpu::Chipset, gsp::{ commands, + sequencer::{ + GspSequencer, + GspSequencerParams, // + }, GspFwWprMeta, // }, regs, @@ -221,6 +225,17 @@ pub(crate) fn boot( gsp_falcon.is_riscv_active(bar), ); =20 + // Create and run the GSP sequencer. + let seq_params =3D GspSequencerParams { + bootloader_app_version: gsp_fw.bootloader.app_version, + libos_dma_handle: libos_handle, + gsp_falcon, + sec2_falcon, + dev: pdev.as_ref().into(), + 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 c0f3218f2980..6f946d14868a 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -645,7 +645,6 @@ fn wait_for_msg(&self, timeout: Delta) -> Result> { /// - `EIO` if there was some inconsistency (e.g. message shorter than= advertised) on the /// message queue. /// - `EINVAL` if the function of the message was unrecognized. - #[expect(unused)] pub(crate) fn receive_msg(&mut self, timeout: Delta= ) -> Result where // This allows all error types, including `Infallible`, to be used= for `M::InitError`. diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 05add7cfca44..bca89f3969d4 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -624,7 +624,6 @@ unsafe impl AsBytes for SequencerBufferCmd {} #[repr(transparent)] pub(crate) struct RunCpuSequencer(r570_144::rpc_run_cpu_sequencer_v17_00); =20 -#[expect(unused)] impl RunCpuSequencer { /// Returns the command index. pub(crate) fn cmd_index(&self) -> u32 { diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs new file mode 100644 index 000000000000..de0a7137dcdc --- /dev/null +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! GSP Sequencer implementation for pre-Hopper GSP boot sequence. +//! +//! The sequencer is an interpreter that executes instructions on the CPU = to perform operations +//! on behalf of the GSP firmware. GSP firmware sends a sequence of opcode= s, some of them with +//! payloads, and expects the CPU to perform these operations in order. +//! +//! The main reason for a sequencer stage on pre-Hopper GSP-enabled GPUs i= s that there is a need +//! to run an HS (High Secure) binary on the GSP. However, the GSP is alre= ady running GSP-RM +//! firmware in LS (Low Secure) mode. There is no one but the CPU that can= load the HS binary on +//! the GSP due to root-of-trust establishment. +//! +//! First the GSP (still in LS mode) sends the sequence of instructions to= the CPU via RPC. Then +//! the CPU sequencer executes these instructions. This causes the GSP to= switch to HS mode, +//! execute this binary, and switch GSP back to running GSP-RM (LS mode). +//! +//! For Hopper and later, the sequencer is avoided by an additional dedica= ted controller. + +use core::{ + array, + mem::size_of, // +}; + +use kernel::{ + device, + prelude::*, + time::Delta, + transmute::FromBytes, + types::ARef, // +}; + +use crate::{ + driver::Bar0, + falcon::{ + gsp::Gsp, + sec2::Sec2, + Falcon, // + }, + gsp::{ + cmdq::{ + Cmdq, + MessageFromGsp, // + }, + fw, + }, + sbuffer::SBufferIter, +}; + +impl MessageFromGsp for GspSequencerInfo { + const FUNCTION: fw::MsgFunction =3D fw::MsgFunction::GspRunCpuSequence= r; + type InitError =3D Error; + type Message =3D fw::RunCpuSequencer; + + fn read( + msg: &Self::Message, + sbuffer: &mut SBufferIter>, + ) -> Result { + let cmd_data =3D sbuffer.flush_into_kvec(GFP_KERNEL)?; + Ok(GspSequencerInfo { + cmd_index: msg.cmd_index(), + cmd_data, + }) + } +} + +const CMD_SIZE: usize =3D size_of::(); + +/// GSP Sequencer information containing the command sequence and data. +struct GspSequencerInfo { + /// Current command index for error reporting. + cmd_index: u32, + /// Command data buffer containing the sequence of commands. + cmd_data: KVec, +} + +/// GSP Sequencer Command types with payload data. +/// Commands have an opcode and an opcode-dependent struct. +#[allow(dead_code)] +pub(crate) enum GspSeqCmd {} + +impl GspSeqCmd { + /// Creates a new `GspSeqCmd` from raw data returning the command and = its size in bytes. + pub(crate) fn new(data: &[u8], _dev: &device::Device) -> Result<(Self,= usize)> { + let _fw_cmd =3D fw::SequencerBufferCmd::from_bytes(data).ok_or(EIN= VAL)?; + let _opcode_size =3D core::mem::size_of::(); + + // NOTE: At this commit, NO opcodes exist yet, so just return erro= r. + // Later commits will add match arms here. + Err(EINVAL) + } +} + +/// GSP Sequencer for executing firmware commands during boot. +#[expect(dead_code)] +pub(crate) struct GspSequencer<'a> { + /// Sequencer information with command data. + seq_info: GspSequencerInfo, + /// `Bar0` for register access. + bar: &'a Bar0, + /// SEC2 falcon for core operations. + sec2_falcon: &'a Falcon, + /// GSP falcon for core operations. + gsp_falcon: &'a Falcon, + /// LibOS DMA handle address. + libos_dma_handle: u64, + /// Bootloader application version. + bootloader_app_version: u32, + /// Device for logging. + dev: ARef, +} + +/// Trait for running sequencer commands. +pub(crate) trait GspSeqCmdRunner { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result; +} + +impl GspSeqCmdRunner for GspSeqCmd { + fn run(&self, _seq: &GspSequencer<'_>) -> Result { + Ok(()) + } +} + +/// Iterator over GSP sequencer commands. +pub(crate) struct GspSeqIter<'a> { + /// Command data buffer. + cmd_data: &'a [u8], + /// Current position in the buffer. + current_offset: usize, + /// Total number of commands to process. + total_cmds: u32, + /// Number of commands processed so far. + cmds_processed: u32, + /// Device for logging. + dev: ARef, +} + +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. + if self.current_offset + core::mem::size_of::() > self.cmd_da= ta.len() { + return Some(Err(EIO)); + } + + 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, size)| { + self.current_offset +=3D size; + self.cmds_processed +=3D 1; + Some(Ok(cmd)) + }, + ) + } +} + +impl<'a> GspSequencer<'a> { + fn iter(&self) -> GspSeqIter<'_> { + let cmd_data =3D self.seq_info.cmd_data.as_slice(); + + GspSeqIter { + cmd_data, + current_offset: 0, + total_cmds: self.seq_info.cmd_index, + cmds_processed: 0, + dev: self.dev.clone(), + } + } +} + +/// Parameters for running the GSP sequencer. +pub(crate) struct GspSequencerParams<'a> { + /// Bootloader application version. + pub(crate) bootloader_app_version: u32, + /// LibOS DMA handle address. + pub(crate) libos_dma_handle: u64, + /// GSP falcon for core operations. + pub(crate) gsp_falcon: &'a Falcon, + /// SEC2 falcon for core operations. + pub(crate) sec2_falcon: &'a Falcon, + /// Device for logging. + pub(crate) dev: ARef, + /// BAR0 for register access. + pub(crate) bar: &'a Bar0, +} + +impl<'a> GspSequencer<'a> { + pub(crate) fn run(cmdq: &mut Cmdq, params: GspSequencerParams<'a>, tim= eout: Delta) -> Result { + let seq_info =3D loop { + match cmdq.receive_msg::(timeout) { + 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, + bootloader_app_version: params.bootloader_app_version, + dev: params.dev, + }; + + dev_dbg!(sequencer.dev, "Running CPU Sequencer commands"); + + for cmd_result in sequencer.iter() { + match cmd_result { + Ok(cmd) =3D> cmd.run(&sequencer)?, + Err(e) =3D> { + dev_err!( + sequencer.dev, + "Error running command at index {}", + sequencer.seq_info.cmd_index + ); + return Err(e); + } + } + } + + dev_dbg!( + sequencer.dev, + "CPU Sequencer commands completed successfully" + ); + Ok(()) + } +} diff --git a/drivers/gpu/nova-core/sbuffer.rs b/drivers/gpu/nova-core/sbuff= er.rs index 7a5947b8be19..64758b7fae56 100644 --- a/drivers/gpu/nova-core/sbuffer.rs +++ b/drivers/gpu/nova-core/sbuffer.rs @@ -168,7 +168,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 Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 5668B2D2390; Thu, 13 Nov 2025 01:41:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998102; cv=fail; b=CkyRK0kmCLcEXsHirOcGrYOKWYeVbKrC9ygvFhFtpGfaKbvjcpudmSh3SfFZBbNiJdgKSrtqkEu/OIk9RE56LSFiKWEI0PJopGnaiAdOU1hipyIP1d1TRdAkxZYAKhPohuzr+5M0k5dTlWPwb4R9/T3KwX/djPIh8gm0wwT5OBs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998102; c=relaxed/simple; bh=68o62kubMDW/HGkAGHbEb/JmiMot2kz1Nq26WgwTjAI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=gYi65V+CrgTBbM1LoEM2xF7AN1AiEYRLnPIFeUuh591SRGskFS8hB6E9GvbayntHrxZ+dUBtKdrGn62WkWfvYZO4IEJDr1xxlAhouh8twyi1bLh8DSs9GDzNNs4rzG2Soh2Z4hu8rJ1am/0t49xDrMBbpx8AuhJ/5jVwt5B9BCo= 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=LuvWaz8j; arc=fail smtp.client-ip=52.101.53.45 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="LuvWaz8j" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lpfTF3VjH03P5W72+nHC27Z4CKBUqKcRsGFPbzIzs10QVSzkwbGV5CDn2cVK+dqQY/B3Zlj8AVgkQtj7SlpdkYLLMu/lfOKxcx19bx7xqDK+53YY1nrUkCse/IyQEMxv0nkOL/9NQC4irjrX7EwSXU1i3xfTBwUtUuRVrOHz/HiXq7UH/pjkHG8OFilwR5unokzhcmLt2x8WSTLNljBVUZnygCDupvNdxldl5ZiWGe3c+2asJ5E8mJeuIwPRm0h9xOfgNTIPqGrmEMJi8gk6vJSc5T/0cxXUA+CwBI+6E4BnE4Qk8tONYv3jGdchtlxCNUfgAkYduM+cSOHGmKhvyw== 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=KaB4Gd1jAXk6KaIymHnqEdxbV0T/ZAIQg+39dJpH/gc=; b=whe+KX49D7Gk9ui2YFOwH76kPX7Ek3aT55IVmAqdfQEyXz1H0d+Z+wfv6RPDfbNtNP7eNcciDruNGYZ3Bfe7CyeZ/+06KTcVfXaomOdf3MFO/NR+2/+bUwWAR9xcQCjz8gH+tDM1HZ2hbtc9WKJgWXrUNzQZt1GLqScEF679AgLGizuAZFu2MsqHFbRRSehZZhV+9YZFiwHs5CQOV5bEXUv9XtwIvcyaLmEj3fUNQ1uiNlYGbaermwwxfCsCQjh3Zz6CflZen+Ew6uOkoEj6xBPArlnUNlZarkofu/+IlrIDotaF6kFT35AtXhHITBpB7luFYyLyZcdy0qkJQfH7Tw== 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=KaB4Gd1jAXk6KaIymHnqEdxbV0T/ZAIQg+39dJpH/gc=; b=LuvWaz8j4BmihTAgI6JMjegQ8WS4oK44lUoKSbY6ihn539pLxJQTOXBNbtbBHmsSavgQsMz0M8GfzTlnROxtSv3gOaBsuhC61+4L7GxrItq6E/+wIL4zysGWG8yTh9kgeRYj8s1ii/0aTJX5yxt69sOaQc+GRBCm7cTcNzQizdiZfw9T4jXbnrVDm/+VrHrr7LICEL0UJZZfoQ99XehFhj5KO+jRgF5PqASOZ2OoHhGBqvJlDhoSZcUIeiar36mG4uXceY3KCd8c7oQ3fd12Pj2aowUuESrxfHYzt+fTfknpIrjjPOaW4b7NQj2uvIjeKMpj5AyiytrcDvO2lbaoQQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:36 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:35 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 08/13] gpu: nova-core: sequencer: Add register opcodes Date: Wed, 12 Nov 2025 20:41:14 -0500 Message-Id: <20251113014119.1286886-9-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR11CA0015.namprd11.prod.outlook.com (2603:10b6:208:23b::20) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: 5cc43ef7-df9a-4316-a04c-08de2255c806 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?EsoAI4b48UhIq3JQlE/hchv3BcEszt5VBrllcwwaN9Asre/TK+Z9raj598Aa?= =?us-ascii?Q?Vibn+pzoU4Eq5SjrVOGTlUBzk3A2FdE9b2/QtSVAhC5owQ5p7rH59MGsiV4i?= =?us-ascii?Q?NzFO3t/sj35/KCi8CGiz8fuCZBv+LnQM/IK0YGGjZqUMEE7a9C4Ddj7c+N75?= =?us-ascii?Q?aQ8rD3wanSzjKoUUye5hA8am3Q4fIlDVJOM5qiZA9fkCFvQhbZAgfp+UU4+b?= =?us-ascii?Q?oQHuEgkBZrTVRot4qmqvnePObutzFXlFZJhS8gg+/knCbcNf+8xni6LOb2io?= =?us-ascii?Q?LFTYkp6G2J40/FhTPMrOlRmqxU4ea6+kRC8OOLsVe8qMVZ0NZa9rr7ZDAwYb?= =?us-ascii?Q?PEwGn18RUpSAv6sCePke5lnPOsudp5VtXDtta9A/px4Ispf7Q2znANZFU5kE?= =?us-ascii?Q?ACI9J1/VoyH5BIWCF9ckfmM1IFXluqKR8xVL1VxS2wwrloFLUBdj2F6mm5Gp?= =?us-ascii?Q?rN32StH7VWI4AqXLmopcU9jSb7jGwnMtVXib6okEdKUgxC9xGKxcEfcu8KLw?= =?us-ascii?Q?hHrdIKyOFFezPRmGnI77jyz8jDR1yBQqR3cYuGu0VhncbjzblvehKSudoOHd?= =?us-ascii?Q?LEy3QlmxHiGWYK3oXDFCI2vdd9vS9uaTBBOFg78T/+XMxctce0SfPbbxcVoC?= =?us-ascii?Q?t9K5mJ5R6wk7oJH3VedrRXlXC0jByoLq4KVcdP8bffPy0WvR0FBKSk3nAa2E?= =?us-ascii?Q?8PuSL5pAx5h/t3cp96rMAcCDo8d0y6Hk1JcuZlOGIQPPwlf4IO5G4p/Bdgic?= =?us-ascii?Q?AB/TMijziv5oxTPUmKFGsl8pogmTLFmHc4d0mMmE8/O6TmEszq4XWOo+bzik?= =?us-ascii?Q?Ywh5t3lQuq++pPefJs6akHkIz/Siacx+VyNXYT9d12ToDz2K+Q0NvKDXqCa8?= =?us-ascii?Q?8gnSa2R5z6UmwvDql56iIY0pgOoFnhBJyu5Si1Qk5ZX94wdHLFCZoFmhOg6a?= =?us-ascii?Q?zEPshPFBSRPJxYsU2rL0AXvS+bxMsqqvSq3kpLsEz2S91A+e4iHDBbu0AgnK?= =?us-ascii?Q?QBQ0ERzWc38NwjV8t0Kl44L9VF51anAEggNOZqXNYhH0xP/m+XdMIQP3UaLE?= =?us-ascii?Q?2Mpbs/jXabTFP/kbFghZAviPj88BVQLRZELc8ZbBnH2sQfZFYX6tGxfpKR3v?= =?us-ascii?Q?Ing6Hpf+BjOGgA16FxEaBf+KIqqjRSq22McGosWMwOoTT0ohfYLxpUftjz4f?= =?us-ascii?Q?51CNmK4KWG1akJ9b6YdGQct55pbIagiN8vI6GPvo1DVZxvjTRTgEQi5Uq9dV?= =?us-ascii?Q?eOq/WYYUB4pS8GfDunIDoaRv4wAnI6b3R8nnTqu/YVhIAq6nlXhqM80a3KoG?= =?us-ascii?Q?ri3Tx5CLMrGuNPJyXSLcQWFWLE/ZA0xjb1GpNqjfMSg6BBUUYtt5qHhYHMG+?= =?us-ascii?Q?TcKRrzXJQTwFMGurjzvhBaxUtrB4WbxjOdTe6LqowOrU0pRWmTiVk+UUAlZS?= =?us-ascii?Q?C2aJc8fLut5N/4oYvYMPcVRcDn+zaI0O?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2OwPGf2qlrK8qlJy+Jcstt8Z3mO8cRnTaKCVPVOrrKuo8CaE+FNlIHLrwRxA?= =?us-ascii?Q?+w9DsrH5mxTjFlQAUz2pm9jBmbs+J6XXIELVlAWd+JZ16E2q5AWj+ZYmxJoO?= =?us-ascii?Q?vTaNPi1OKsiBJWgGNgx1QgT9jUvW9Xl4PCZ+yrTQa238Ib7rNBrVQpiSAFej?= =?us-ascii?Q?AR2g7nwd7WAztQ6BSC/0ktVsUy9Q0sBNmXQjKFwpyPKBuhrUMGIEfZJJ6tjf?= =?us-ascii?Q?9bNk8W6VAskmvTlrbKI7FisGBd3QoCp2j3pjg8ILSuUT6ik4fuwCJQ2uSFwE?= =?us-ascii?Q?gmCBITXN8245wNCsggSu/UUXfy/rKLn3r4GlNA82b8bwRG94JYoo2Q7TyQJV?= =?us-ascii?Q?ZgqlIwr1BXbUxGne3UUfoVvR7LUXK8gvca3npWDTqHIzTbDB7w7X6U4qynqG?= =?us-ascii?Q?yfZghOkd+DbbgOqpfjxYlVM2Zhx4UTD7QvAhdmn0BZVaJtYcpxNv1VafmAqU?= =?us-ascii?Q?XyRwhuk1YobGTvVMDN9xDYmYNx1UBDMIwNnP4I+z9xCD2XrSIYVN7jqOEuKI?= =?us-ascii?Q?5M9+ESN76U1IbUl2XyDhVeI/1ooVzwTz8NExw+xAXnrXfGfhrKfCnA/fKptX?= =?us-ascii?Q?up9QcqgMeL+vE/tAatuXu6/I6+LDIZ8trtp9QL/Kbv4zQacTz37UpYViV7qA?= =?us-ascii?Q?Iw9D6St18sDs3RVb+wnxNA5Qs7W/L8fIxR+Q5owwfuHYuLzZumdb+AhkgrDj?= =?us-ascii?Q?inH0qHss/0QZCJqXKi/6amHsyR1k2TSqaRXmDh1hHC23wEAKYEHjarF4kIEa?= =?us-ascii?Q?sMcug6QvMD2giWq2MEDB5Xa4UbUthgRdkqsYZksn7Sn/gat3rCj1EkHsLxrq?= =?us-ascii?Q?HjJWd5pL78AnSHSZWsLvpT2KadSAbp8leGFdtLLRYs9JGZc1CWQiTzfkDdhp?= =?us-ascii?Q?mfKRT19Kh+60ZnrblaXVbo8In2rqcn8fh2S/eSYCLya4txjI09lqTCZThixc?= =?us-ascii?Q?UyYGyASpvJdoRIxXB+ccph4mKXP9M3d5m+p/Wy3f05mokyaU2xMdZ7htEr9m?= =?us-ascii?Q?z/rACbjqjIdtFb+nyjeOwj8z9F/JxY1CFJIpVuCSEk0hQzgd8ezWRZWJyOEJ?= =?us-ascii?Q?s6nPxJgf+BBygf3x6FHtTstU0/un8iNmQVNQ2zK3qQqICBe8TErrywbUngYf?= =?us-ascii?Q?3AqHBs3MNzsRJ3CnhDc0dlsCskR1MZVNJPmIMy/vuTOUGUAeQB2LAiQImSu2?= =?us-ascii?Q?1IYrRLLv5xT4n4cZOk6j5pGcCNArakHEIqGvRV24OvlhjBKadDrvrd4M31mo?= =?us-ascii?Q?/OHn66mHIlzV3W3kBbyRVvbr5/96Owhatkkr+SLDXw7zCjqrPym4WSyzFfey?= =?us-ascii?Q?ECXXwbsvPxY6JYBXrvaskWIzp8ujZVwGaMNwVEoqUiZ+uR6NJF9VujV4tQ18?= =?us-ascii?Q?Hm2hLudxRMlCI8/CMiwtOSjmH1skk44vGGbPeC1+l918Etyl8Jb0z2hio3Iw?= =?us-ascii?Q?nVcBFonKA7qYKuOxKimPuqIHzlNO6J6Np7JtF61VAjwjjA5s08lUfLFBhlHW?= =?us-ascii?Q?9XtpM1oIM7qIpC7RtMUsUllTM0SC2Rqd/b/wIiWoyKjV9aeYTkCRv9ObXPpC?= =?us-ascii?Q?7B5aTqq8IyTvvA+8kgyYXhvC3waezw76NiA1KesM?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5cc43ef7-df9a-4316-a04c-08de2255c806 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:35.7566 (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: DuNs6sqgRigapj2CIYXg7FFMD1AvC1jB8PsVHj5ZZwVjr1L+uoTIPms541FZkXhGFG+JcmDPhg4Srm72Mpzx5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 Content-Type: text/plain; charset="utf-8" These opcodes are used for register write, modify, poll and store (save) sequencer operations. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/fw.rs | 4 - drivers/gpu/nova-core/gsp/sequencer.rs | 120 ++++++++++++++++++++++--- 2 files changed, 109 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index bca89f3969d4..4717c12a8666 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -389,7 +389,6 @@ fn from(value: SeqBufOpcode) -> Self { #[derive(Copy, Clone)] pub(crate) struct RegWritePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_WRITE); =20 -#[expect(unused)] impl RegWritePayload { /// Returns the register address. pub(crate) fn addr(&self) -> u32 { @@ -413,7 +412,6 @@ unsafe impl AsBytes for RegWritePayload {} #[derive(Copy, Clone)] pub(crate) struct RegModifyPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_MODIF= Y); =20 -#[expect(unused)] impl RegModifyPayload { /// Returns the register address. pub(crate) fn addr(&self) -> u32 { @@ -442,7 +440,6 @@ unsafe impl AsBytes for RegModifyPayload {} #[derive(Copy, Clone)] pub(crate) struct RegPollPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_POLL); =20 -#[expect(unused)] impl RegPollPayload { /// Returns the register address. pub(crate) fn addr(&self) -> u32 { @@ -495,7 +492,6 @@ unsafe impl AsBytes for DelayUsPayload {} #[derive(Copy, Clone)] pub(crate) struct RegStorePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_STORE); =20 -#[expect(unused)] impl RegStorePayload { /// Returns the register address. pub(crate) fn addr(&self) -> u32 { diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index de0a7137dcdc..b011609c6804 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -19,11 +19,15 @@ =20 use core::{ array, - mem::size_of, // + mem::{ + size_of, + size_of_val, // + }, }; =20 use kernel::{ device, + io::poll::read_poll_timeout, prelude::*, time::Delta, transmute::FromBytes, @@ -76,18 +80,50 @@ struct GspSequencerInfo { =20 /// GSP Sequencer Command types with payload data. /// Commands have an opcode and an opcode-dependent struct. -#[allow(dead_code)] -pub(crate) enum GspSeqCmd {} +#[allow(clippy::enum_variant_names)] +pub(crate) enum GspSeqCmd { + RegWrite(fw::RegWritePayload), + RegModify(fw::RegModifyPayload), + RegPoll(fw::RegPollPayload), + RegStore(fw::RegStorePayload), +} =20 impl GspSeqCmd { /// Creates a new `GspSeqCmd` from raw data returning the command and = its size in bytes. - pub(crate) fn new(data: &[u8], _dev: &device::Device) -> Result<(Self,= usize)> { - let _fw_cmd =3D fw::SequencerBufferCmd::from_bytes(data).ok_or(EIN= VAL)?; - let _opcode_size =3D core::mem::size_of::(); + pub(crate) fn new(data: &[u8], dev: &device::Device) -> Result<(Self, = usize)> { + let fw_cmd =3D fw::SequencerBufferCmd::from_bytes(data).ok_or(EINV= AL)?; + let opcode_size =3D size_of::(); + + let (cmd, size) =3D match fw_cmd.opcode()? { + fw::SeqBufOpcode::RegWrite =3D> { + let payload =3D fw_cmd.reg_write_payload()?; + let size =3D opcode_size + size_of_val(&payload); + (GspSeqCmd::RegWrite(payload), size) + } + fw::SeqBufOpcode::RegModify =3D> { + let payload =3D fw_cmd.reg_modify_payload()?; + let size =3D opcode_size + size_of_val(&payload); + (GspSeqCmd::RegModify(payload), size) + } + fw::SeqBufOpcode::RegPoll =3D> { + let payload =3D fw_cmd.reg_poll_payload()?; + let size =3D opcode_size + size_of_val(&payload); + (GspSeqCmd::RegPoll(payload), size) + } + fw::SeqBufOpcode::RegStore =3D> { + let payload =3D fw_cmd.reg_store_payload()?; + let size =3D opcode_size + size_of_val(&payload); + (GspSeqCmd::RegStore(payload), size) + } + _ =3D> return Err(EINVAL), + }; + + if data.len() < size { + dev_err!(dev, "Data is not enough for command"); + return Err(EINVAL); + } =20 - // NOTE: At this commit, NO opcodes exist yet, so just return erro= r. - // Later commits will add match arms here. - Err(EINVAL) + Ok((cmd, size)) } } =20 @@ -115,12 +151,74 @@ 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::RegWritePayload { + 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::RegModifyPayload { + 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(()) + } +} + +impl GspSeqCmdRunner for fw::RegPollPayload { + fn run(&self, sequencer: &GspSequencer<'_>) -> Result { + let addr =3D self.addr() as usize; + + // Default timeout to 4 seconds. + let timeout_us =3D if self.timeout() =3D=3D 0 { + 4_000_000 + } else { + i64::from(self.timeout()) + }; + + // 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::RegStorePayload { + 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(()) } } =20 +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), + } + } +} + /// Iterator over GSP sequencer commands. pub(crate) struct GspSeqIter<'a> { /// Command data buffer. --=20 2.34.1 From nobody Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 63CC62D46B6; Thu, 13 Nov 2025 01:41:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998104; cv=fail; b=CMc7Kuzv3FCAKiPekZ8M4gSDhkF24rsSNOE3tNCQOSRHEylCMnJsbPEh99KvL4fik6kF591hPtKkXldtWrouTMNi5gV59n8tQMidWToIks+NLTeNB78tuKfWbDBh8VyvVVCsbzpJD/0mdFOQVjutaS4P1wdX9oWoJmU09y0RZgQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998104; c=relaxed/simple; bh=eLagbJEpXkxzxbUh03FTcHvEPbfyOGTgo60DQN2fvaQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=rwXR7ehuwYmiCeWW4SrxN6/EtNNJWCADkONWZN4qAYVueY5ErDDYAk3GPmmBlUbkAtN1WMhpHy7UEgGFRI3bgRQS+SXP2mC3aXYDa5VfsnYYbKfuWhB1RnOhtQsUV5RE4OQFYXBEOduxRrWP6O+91Z4SFf6B9RkJwVALRq5XAKk= 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=DIcVa6yj; arc=fail smtp.client-ip=52.101.53.45 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="DIcVa6yj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fNpR+KFOicaIsvp4BXjWaURw3GaHoLgwOX8RufNIVC1m+SFhcWSmRR1hcQU546LGitL/PZwyyd0IvQR079ZH3gJ/B5gIiWkG63qIHqGkpEJVyCgY+mySlAMFcLSU7NEBIysNEbOOOjLU7VoXseeAbcOrJvPmF2AYrOtLfgD19KMCP3x/U1g9tJNXVpUnG26iZfeapokJUcFS0vOxwJu3x8Wh/ez9D5W5UuPC6Izm4/LirFonmBykzqy/CjesbkupmtX1LrOEENoPl2UZbMWmU++EyXGokl3H+1Or5Y9uDC0vTeR1F7S+/0d1luKXNRoG3j4rB2t9hOmmTaq+JL57Zg== 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=igiluqk0XUlv+f3LRdGTq6kmxq2YzbffhW7QC1nMqh8=; b=CbO32Sj4CgayO1G53WQQBow/DWSQfn4Ypo/tO6MujD3+W91leAZwD3ZIZ/klXTiygPOE+BtApnuGvwA1gJN9lKVoeRkHrIjYO1xix7+/Eplxo7x8uyWZU6Q0VQGi5yrUh4xYh7VPY5OPzhl5kkHtY5LqBflK20yO64lCKROlYgnpLcKbr5gVfvBH5ftIhnKFhtEv6q+fVN14JUQinjZf9Dxutb3rMG/A2RyXy/2ucptUk12hZCFEntfk8uspqroC8OsZBacE576h9Y4ZXTyeHMO60foWsq6vPAeTlLQJsuVSIqdHcAyvAfbr1pcCxS80Odr0g7c9tv20s6nERx1ehQ== 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=igiluqk0XUlv+f3LRdGTq6kmxq2YzbffhW7QC1nMqh8=; b=DIcVa6yjy9BcivN0ucxS3Bm7c9ul2xE7nSFyVuvAEQtohB3ROdGGAs8GK5Jkxg28MdSqomvQwdklRC0b6kWDY2GrM/AF6zijJoPcGYECZ2vNADrPG+4EMB2mgF4JeXqGiOOPJp/Q4PpnMmC4ZjYnDUuG2IAT7rFRGO1n/PI6WEODccau5EwHKQZTpfna6vroSEoK4hsUbxZ1S2howXNaZ0zi8Z22qwQKd7r7DdY7HsiQ9ptNzJO3YTsdPKypAd2XkKK6U6sX0yE7tT8M5AK8hNbfYxzB+r325kA4mSJgt81jhC+/uinCZiVycvUs1+5u5BwtGPdKYv8gvTb+q3HDzg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:37 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:37 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes Subject: [PATCH v4 09/13] gpu: nova-core: sequencer: Add delay opcode support Date: Wed, 12 Nov 2025 20:41:15 -0500 Message-Id: <20251113014119.1286886-10-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LV3P220CA0017.NAMP220.PROD.OUTLOOK.COM (2603:10b6:408:234::6) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: e21c95a4-9208-43c0-2d6c-08de2255c8fc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hIwJXnA1nDI6o4NWpdn6Rfn6R5a3pXY/vT7aKHRIfIBi77G8r908kn+z7mEK?= =?us-ascii?Q?w4psXk34h6AeWFe8UaEocNfVqhpHIM6dAJVSkX3/7B720/K9sC7uXKfhlGEP?= =?us-ascii?Q?fcYKVt9wxGhavRujBQy58H663520ienScZLKBeLwAUu1cv5hkO/3Yq2bZigK?= =?us-ascii?Q?bnYLLdXXN5ENIrkKz+qj5ug4jBGRHhxM4XM+/M2pjdgoAT5Dd0ypAlYTUWsw?= =?us-ascii?Q?xc4yJiba+T+0OcNR8TVE5Yf6ZYtb2CAlN+i0dxdjSDPTNN3d0Zccr9lBVgkC?= =?us-ascii?Q?H3t1T3deZ2xwJD99gAZKZA0CMTegOD5Rv4v9jUjOw9vDDWqR7Q7hFS/boKW2?= =?us-ascii?Q?CmvVF/N6nfCe7E9/TqXYRoymN7WfKg896FSMmRjuEyCanv2YI29jrqoxZLxN?= =?us-ascii?Q?u2KznihUx5chZizEoLVyApr3zknFX4X8uzGV2UExjGwZwz6aY1oDltLuF4lx?= =?us-ascii?Q?zpGykGKZ6kkWa8QX4qu+eerrz7/gaA1r0WEWySzEHAit1OzoQ5rstJdfSRsx?= =?us-ascii?Q?pyMvZHQtZW46skroJVAt6qKQzGMMAAqVF0zjv1oAFLQWyZdKBGVUZ0O5NRdw?= =?us-ascii?Q?y91gMoHTB+Z8NvQxW9kN3dfF7CR8JnkjB+fd23qdI1n4UAJGSCw1EoiH/lkK?= =?us-ascii?Q?d8mKHGh37+Zrr/yglHKVbDcGW9mu+ZzTNnOf9udrv+E+eyF2+CvHAFgwypqr?= =?us-ascii?Q?kWhODICG7qLjbWuoL7f4aTb38xe7H83P75o1GgNiqFHKPWJ+QqLCbsI5IabC?= =?us-ascii?Q?qfgfdq6NpWJe8PIcvDH7T37H9pMBbE8hFQeP+Y5mENF9Qr1FJsVHowEpRHF7?= =?us-ascii?Q?mfNtOEwWi4DXy1fBesJ6+uomsDMM26Wyknv9ZENlYwkybLnvmYQKr+avuF3R?= =?us-ascii?Q?gA4goMZXKaTtJbN7/b3rQ6PsKSV4hJNXiSCXuOBr1LEnQrzUDS9CCJdiCVlF?= =?us-ascii?Q?+KxHhPtztk/JELia1pzRV3m6lIRbXXv7nCledFvMH8XKyOPwE7LqoOY6hOy7?= =?us-ascii?Q?REu9ctIe5k8UWUkfMU4cu0758x2xaLVPVvrRBfHjak2xsxIaubjkHyBzaJq1?= =?us-ascii?Q?w7x+JNWHP+YxJMbyzOLC4+MQdeeIOexxzrK6c+H11XsY2EPWdhbST0uWrGLA?= =?us-ascii?Q?KfmKKQqsR56C2oTFhKU9dTl845in4lprAbMVd8S/7w9listwp24PXxZ44yqU?= =?us-ascii?Q?gJWFwdn4n+yRwt7mm202R4F8ISND1C/bzbif9+hnnmM3AO/R6bf3NpBHd1w0?= =?us-ascii?Q?jYw45vEupMgPFYoDkR139410Ge4c3vG3eg1iFtKZe92yHBv+uoVzJfK/+2gf?= =?us-ascii?Q?QQQ2TEfKKUAFPGjF++LsJkJ/Q28g4bOBtMS8MArDK6zIBluVks1z55in9BzN?= =?us-ascii?Q?XarSTWcJi6cOYSZOGUn+d0G/5Q9P9EMzyxBR/MYts9PTzppBYtoERtGI/29p?= =?us-ascii?Q?6BzwxNPNYpVw+p2pjzasa6vZW+Sqz/tL?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GlmYCU0XmRA5T0PG7YFcnUwXgjguDf9MqK0fPYhIPfWHwGRgcSp+J4pcy1J5?= =?us-ascii?Q?c8lrbnlbQa/W1j3nghXHO/aoIw7XOnIQH2eO1dEq0GFACmX7UYiL6dI6xaoa?= =?us-ascii?Q?yP04FK7kptwMemHSOttDo8hbPe3XoP3ejMDERub1hNOXSEL9ct7QfAH4GMaG?= =?us-ascii?Q?r+CmZT0JmNriFg/619JdeNfF7RAKG+ICOac1G7yArMj96gIS4LBAia98qgd2?= =?us-ascii?Q?V77H1sgFlBeYIEVA7ervHCsT4hhLnoJ07Hlc71rtri/rk6Yufe5+5xpb/ZhG?= =?us-ascii?Q?tBUYknLdwqr8aJ+0pjVefje0dh/hLEJhTU8HPtCf1izsYZf49B/78BGXOA3w?= =?us-ascii?Q?fARqY/aMwxfyfCWAd/gLjCazXMpikJEP5bLQbPhhBbwnOhD3p48QGUw0v/Mh?= =?us-ascii?Q?H4WIK+JcoCkpC/EDbIKvAVK1LDvffN6xPDH3JAMEZOAoplqub/Gqzme2vhMl?= =?us-ascii?Q?h4ZF4REl529ACcWMy2hzX/I2TU9HIjkih7EJCz+QdjvA0j5k1gi9pUom1rXe?= =?us-ascii?Q?TzuFwGonAmnrqfqwvPe4orGQ2AZWzL8+WGFi7dyTGvd68R+gJwFvw6HGBotn?= =?us-ascii?Q?Mr8g5kgGHjAbtJIasHxfSQTo2cU5vZGxcDYAVRDniSEOFWlWE5VWYQAq8EbW?= =?us-ascii?Q?IH+H2dnciuSeg8RPzwsdjyBpX86Zg67r7b4lVKsDjsLTeqT/gbo8STZB/lsH?= =?us-ascii?Q?nlmvjChl9QyHUzC1w553tIoGpozDCwt26QPYJnmsduqGH8tQ7Bp6tHZsSxur?= =?us-ascii?Q?y4B7nkgJXf4K/T8CwvkivgDRYHd0UAKS6ezVa8GLIt4EnfC/+oTrMrv7WmEK?= =?us-ascii?Q?xdx34pYkmLCm4iIroXD2MC8srCqisAY255xG/bc5bZcJoFp6Gyr4pomzUmuq?= =?us-ascii?Q?aw0KMf4DwpV7JRkp7STqWOd6Ktdj9fZ+z0w1pw769rRgUgQi3rpzYFTaWYm2?= =?us-ascii?Q?fg5hMgn4/PTek1UEywQTXoENmULShtLEWIee6kRqM9tEMJAn7HoYcQX3LkBM?= =?us-ascii?Q?6ortZ9b2RyqwVq5sn6Uwv0/80J/m0nF1gS+2dwuB7hOHRqUG6PR4boFxqkw2?= =?us-ascii?Q?GrDU+c10UuoL7B2tLkNt94ihqat6I4BObiiG7GCpPGN/6cldhCK1n43jDvsK?= =?us-ascii?Q?hMEpaR9Q961TrRAJ8fslChU+DZmrsLweJlbJcDBjL1v5qMETHPHA0RMhSQmr?= =?us-ascii?Q?rrO8ct0frjZIV+vHgJHdTz2KE8pIT0oqRCbL1ejPw+5wRPsA0LxCgO70UBex?= =?us-ascii?Q?YkLVK4CTTCK5mC/eh054SHcyhXz+3YreQ8vYkssUuSaxPSHiVThqs+AoVgtb?= =?us-ascii?Q?aBT1KaethY94BAOfeuj0WPfSRsvaSfyyIuw9ojkC7Dv0jmjPeMpRitx/IVmv?= =?us-ascii?Q?uwDhjkCK5YS7uRqc2868uTU6HdIok2iPyT+FOmP1zdUr79xG/nPReUzUlwhA?= =?us-ascii?Q?VjM+CoYlmps+V3f/LZ96Xcmhj2JHy9+t7fEuHUVUZjxdUisxoVnQ+CBmPZmW?= =?us-ascii?Q?3ZVxlx7JZZpHp/wX+L/ASKilVhPtzu72YNNdvGKr7P2sTenDWO+nDfwgCoxO?= =?us-ascii?Q?nQygTvgiGcutjJIGuMPmm9BAYtItl3vaTG2fwiFn?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e21c95a4-9208-43c0-2d6c-08de2255c8fc X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:37.4275 (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: ttWg5GqdNBm74T7tRR29Qy0u2wcxizfLPTeDrvJLxPrGPoruenNghiGwc9ikOrIJ0Ta/yIwYp87AtAA6WATQ2A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 Content-Type: text/plain; charset="utf-8" Implement a sequencer opcode for delay operations. Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/fw.rs | 2 -- drivers/gpu/nova-core/gsp/sequencer.rs | 21 +++++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 4717c12a8666..538bec7d7c2f 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -473,7 +473,6 @@ unsafe impl AsBytes for RegPollPayload {} #[derive(Copy, Clone)] pub(crate) struct DelayUsPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_DELAY_US); =20 -#[expect(unused)] impl DelayUsPayload { /// Returns the delay value in microseconds. pub(crate) fn val(&self) -> u32 { @@ -514,7 +513,6 @@ unsafe impl AsBytes for RegStorePayload {} #[repr(transparent)] pub(crate) struct SequencerBufferCmd(r570_144::GSP_SEQUENCER_BUFFER_CMD); =20 -#[expect(unused)] impl SequencerBufferCmd { /// Returns the opcode as a `SeqBufOpcode` enum, or error if invalid. pub(crate) fn opcode(&self) -> Result { diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index b011609c6804..787db395dd2f 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -29,9 +29,12 @@ device, io::poll::read_poll_timeout, prelude::*, - time::Delta, + time::{ + delay::fsleep, + Delta, // + }, transmute::FromBytes, - types::ARef, // + types::ARef, }; =20 use crate::{ @@ -85,6 +88,7 @@ pub(crate) enum GspSeqCmd { RegWrite(fw::RegWritePayload), RegModify(fw::RegModifyPayload), RegPoll(fw::RegPollPayload), + DelayUs(fw::DelayUsPayload), RegStore(fw::RegStorePayload), } =20 @@ -110,6 +114,11 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) -= > Result<(Self, usize)> { let size =3D opcode_size + size_of_val(&payload); (GspSeqCmd::RegPoll(payload), size) } + fw::SeqBufOpcode::DelayUs =3D> { + let payload =3D fw_cmd.delay_us_payload()?; + let size =3D opcode_size + size_of_val(&payload); + (GspSeqCmd::DelayUs(payload), size) + } fw::SeqBufOpcode::RegStore =3D> { let payload =3D fw_cmd.reg_store_payload()?; let size =3D opcode_size + size_of_val(&payload); @@ -197,6 +206,13 @@ fn run(&self, sequencer: &GspSequencer<'_>) -> Result { } } =20 +impl GspSeqCmdRunner for fw::DelayUsPayload { + fn run(&self, _sequencer: &GspSequencer<'_>) -> Result { + fsleep(Delta::from_micros(i64::from(self.val()))); + Ok(()) + } +} + impl GspSeqCmdRunner for fw::RegStorePayload { fn run(&self, sequencer: &GspSequencer<'_>) -> Result { let addr =3D self.addr() as usize; @@ -214,6 +230,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 Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 8ED382D6E75; Thu, 13 Nov 2025 01:41:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998106; cv=fail; b=it+QOnMlMsDp9INHRhdfM1oBmFanziM3WyNRIX6vEi2H+z8iCXP/XLHTz99uvOsyXELcquYgwcyCp6B1p/TpZuWe7Yc+OPGz1qdO9yVk1P2zXrYabrDVycXLA7M0HR6F2b7pOIgYweiA88j1CPTzcGLj8Q5z1vv3bHAXY3PlgfE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998106; c=relaxed/simple; bh=pjRv3SYGmArvenVdXr1v18dk0mRFUsS8juCB6LOpYdU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=PBqDGoBJVIsQV05i2lNW/xT5SNtN3ezLntv/KOp4jQ012QN1OVNZxAquAIE79goEWB6IMMQDklmWVag4O6MKKG3PRRZaasuTNlEY2X8SZypFocQViybNhK1xpxJ3Ko91U6NKk9n20l0dfoiZA3J6O0VLeI2ZqmeLzMB3uxfEVps= 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=ecg3ZB69; arc=fail smtp.client-ip=52.101.53.45 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="ecg3ZB69" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pXcEHXpoQFO4BIpi+CZvoKWGmqjglh/VP8Zi45RaasrHebX7MyhngGvrpfc22Ic6B1SLa1yuLQnHlZ6OU+edbcIevX4mFBMUze9HfOFd3jQ1X6ye8vtTxau0NhenGouo1YREn6tCRua30wCidskTeJZ4Tlg1FY83WLnIKyi4p+ShXIS1s07V6dsicsXOibfKgiNbxANDD1awKRL0XgVHjyiWXe/+XnDITrmmNR+exLUM35mSb3PuEJSVSxXC/hYzzn/NVlQqVnYztgrhSPbwztfvoj4HmRqP10/OPqKy6IbIoGL9HUeS238LkfkcfRmjkBovlXh7OWqhoDsOkruVfw== 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=Zoq9NYeoydj42DOr1wPB1vI7nscLUwSltYIUe63b5gE=; b=DKdncyDcdFlqkCPPfnlil+WSvvkBAZgFYCtTysOqObh+WzNi+jEyvDa2Y73AULvHdGMUCu/cBxKGf5lY4oW13/rDIbNL7hl8yCnabAPfLL/H6iS/ra6lpbSBXwwwcA8korcR1FFkKtQz2P1IopdqBCtH+LMZamxtMQ4KJ3hg79znQlrOLtfljmSbfhaQi2ucPmLnCmVq+x9kWYGIzYyuVYrXYBv8QG1H19xrbSOIQNzkwWpOb5es1i1pdxHpiyGlC8Fxf0wc3jln5ffc38nC2Q/7hPshZOMROI+2wybmjeeuwSwrXPHUQnOScN8B0ISx5XKDSaZeJ5Iy230qJwcG1Q== 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=Zoq9NYeoydj42DOr1wPB1vI7nscLUwSltYIUe63b5gE=; b=ecg3ZB69zB634I/Irx320AlpnG0a7KlBm0nUZPs0pHw6QxZenY1+1wQiMciHHJm7wsunvoqcccq7GTbpMgsflHz92x7P+jCRnudWyV42AwxdT18Nwnj/i0CbZdovUMMzHEPSVnENXX0rHhqKeNNwMn4++bJYronpizTBazEh1AN1W872VXiJVp+CoUbzqtsOqx0Eyl/SXaVmqHp+BZRTzt8r/JWnH2XwPc5by4tirj9WPyznkIZVbrbDKiQiBndzA4KKrTzw8GgCbuUnp2Z+K+GZBiDBJwZFBqRLVn4c3oXHs1KbFdwp/T4EGoizqu3cEfRZUMdfSxnVTIIlaCAzgw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:39 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:39 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 10/13] gpu: nova-core: sequencer: Implement basic core operations Date: Wed, 12 Nov 2025 20:41:16 -0500 Message-Id: <20251113014119.1286886-11-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0007.namprd13.prod.outlook.com (2603:10b6:208:256::12) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: 3509d55d-9cb8-4b12-0235-08de2255c9fb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ltXIrCSkVKwEjYOIUBOSNvGPBFP87gGFE+wiIXYOUWA74ItJNUPPwkxQ139N?= =?us-ascii?Q?ZA1HZcXXbww7bRHLQaIDhHTnzUOQ/zcixsh27MKX0AEg9hDlI55DdcnsGeh3?= =?us-ascii?Q?nP0exTphB/HF9wdiPDS/Xj2wh1dvKIubTaG7bmrDwYbJydg/UIksZNmkerie?= =?us-ascii?Q?JJPsbXvJJbo0uUjULqz1vv++2V2s172Pver0frxujRdQ6YAm/u7c9Mgw/i0G?= =?us-ascii?Q?LY7XC7/e5Ysxsct9vGPJekkemHos9sD6HjHiNtevIvHvTRdJiCFXiiZostF4?= =?us-ascii?Q?ViF+BY4XSy1njeIVbzyEadvG7SMVaNLBm6TnHKojs1EVRyrxmvs084kCCOnA?= =?us-ascii?Q?1d4r01d5saSlKCfppiP+e4rdTsfAAIHoAOImnWJ0efRMNbdV1wj/sjSD5qji?= =?us-ascii?Q?8bTrFCASLtLswmVEd57efHzQYohdSNrA9bk3C20Q2gWmF0g2TmdDIcMRz9QJ?= =?us-ascii?Q?b4O0x4uSbniG3Ye6ToDXL9GjC6wCgPkbjLbWln5c41QgM0gn0E4mu3ayQSEn?= =?us-ascii?Q?PS9x3o6uPGrmaBUNRAs9SQJ1NaY+9fq8Hxf3JsDEh/JQmA6Nz2cl+1ryCXj9?= =?us-ascii?Q?hO5Ye9SBUMPxU/PD7/tmzThOkkSNxT1o8o8S0ptbJ8we0ULe0oCpaYTC0it8?= =?us-ascii?Q?2yUy0cbGBZ7wQS3ao3BrGuj1/idVMHwlbQOCOz1wLiVe4sS9B0NIFyxu+QKH?= =?us-ascii?Q?9ZqcIeCN1Pgdcu8UdlwuagscMQWK6ZY5oNGQXIfXQ/4I035EgvF+zcJLaLAt?= =?us-ascii?Q?BjXtPmUUoNgOoKyaqtjwjPDI/pPjWUM0lfU9pn210xTLtPhPzKzegHn3qu1d?= =?us-ascii?Q?JVdndmJgCUE96GfYF7btDvJULn5n4HkEk0ULR20kaCsmIm4qJwoTVxF1x6r1?= =?us-ascii?Q?ij3Rj8NV0yTdYclpKKRpeLXqg9MGofL/fu8l8oIAF/4uQTEF5CunRDXeu+q/?= =?us-ascii?Q?q7+l4FK+5XOCwQZSYXboVKwhF7Di6HY0vMbnFo95D4dPgZ+nbyBZRkKw1R43?= =?us-ascii?Q?PE+Yk+NkLeql6rO7QVKjOQR5UXT77REeAJNUPs7VUpY9tZyb5due/AYHsMQu?= =?us-ascii?Q?c6E0LPw/CxwRx/RNwVojpOVj+0mdQ9LR0+qThp4MYbnr8YEouVfe6L+XExwG?= =?us-ascii?Q?eYka6pojCF/4g3f4Cxev49NRvbpVhulXwB+WX81DYIgWC8pm+nC/gZIW3DVk?= =?us-ascii?Q?nYNylFajp7LjM/X2z7icKbl5pxA34vo9fyoA8/VIucFAE68kIZsoiugf0Y9f?= =?us-ascii?Q?WuPv2yZEGQAhlre095HrMW8Ao6VUNiSm0DuTvM/0c3QcA5IPcXZd7MF2o7JF?= =?us-ascii?Q?ptk5teR8qEqrXwx/hAX8A0adClnhk4zLYvf8R31oT5XyBWwAjuE3sX9Y+w9i?= =?us-ascii?Q?8ppqahOSnODHO80df+g80wU5PaJ66iQMxsitawvJqRjrXu72nqII3Pm2/7Hf?= =?us-ascii?Q?Q1BLZHfzeoSBMjJiIVZrbzU+B+qNrO57?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?f/xax4hVb7TlIHre4TS2UlMPlrpNa7KAxyHHeql6UBjs9K404Rrq+zmSaLQp?= =?us-ascii?Q?cKd7Oqx1dMibkQcnDZXFSLVbKkt58phneuy5j+9IVFlRO4X+jbXSeAoOOaTG?= =?us-ascii?Q?FIkCIGClmym7WuT0vsdUZuVB/+v/Btej7tKuzxWu69oB0AJvYYOFgv0TbZvF?= =?us-ascii?Q?Qr/GPTzfHV1o/+ZEqiIxdT87Ma80vK3wMjPXoD7qz7ZKgqdnxDEH6rpYiqNn?= =?us-ascii?Q?vkN2PNLjuBiFCreM0I6hf32n1rkvh1ctHks7t3p//QiyS6gGlRbR2CK8hYWd?= =?us-ascii?Q?jg6E+6s3QxvjvU2A6lQOHcDo6VNSRpWfZCDNmq5K/fi2UBXk7vR3xl7oV9MX?= =?us-ascii?Q?I49HuJ4yasuWimFCQ8yNidEF//u4JRAX49WwypOzLcFi87cBb3ND0LqIwv7Q?= =?us-ascii?Q?bpADGA2iw9gCy0qdwgCmuQsFu60Chb+ADvFv3jq2VtkHfHrQXjMiU2psuQMR?= =?us-ascii?Q?HGuQ5eEnFTtnv7ElJhDTNSDDCz+nNxNGJ41yf/v3t/Z6JdhyBVXgsVGJiEJK?= =?us-ascii?Q?uzXfbeHUVPs3gMiJuuvbiwNTBlLor99Vaf7VrLPPf9dDQqewBgrwsZ1q9a/6?= =?us-ascii?Q?QFdrtMvd1hy4dmPtVrgW0yoBWDaGXcXYFL/TG7eAbr7+e9G7JUipDM0fJshd?= =?us-ascii?Q?ze9wojNheusZfezdpzYL5aCrpXLFHO5iV59Ivkr827sMJLOgvvey8IUlhvxW?= =?us-ascii?Q?JwMzJCwDIWMm3R8svbeyFIZZ1pMgam/rXn1HJS9oVXaJ+nV5OjerCtcKyZty?= =?us-ascii?Q?640lUNMev8iyol9pBmC/7xqnSWYw6OWZBFgLh1VNYoBT4T3HPP/hSgTEqUC/?= =?us-ascii?Q?mFEruppzv2eI6rjDAXeYeJIpEaFERbd2Hr7xCNjFUO2jdLEw8EPuGsq/9RaR?= =?us-ascii?Q?hqQ/Gy9BtwIO8kcGL0qQWknHJpRRq18ctyy/Jnyi6qyQM3sGKPpeKUGyCYYJ?= =?us-ascii?Q?PQqDydDfK/aLqLiwmBkhguz5TOQK3/Vua0iMLAsTwRo9i/S0BlFEfsU+yNx8?= =?us-ascii?Q?lULah6LNtnqB3d80RCGz9NNKXxp5JdZgyW+TSkjj4sGoJ5gu8bL6nUhWYJ84?= =?us-ascii?Q?FvvPuY+BO0EIu4+u7KZ3HRccgLqpRRSTEiGYcAUrYW8M7+U8jDbp/uRYBu/l?= =?us-ascii?Q?bZNp5ZSKp+awFNuEpU8hWxKlW49jKHnhEft1DAVJ8IA3jdrRy7mRcDUDk4Vh?= =?us-ascii?Q?vS6BnNzOUJgbcNz14P+Utjrghk0CLDpJSqAc5yyR7jxtO7c8dWlEy9EiM5CA?= =?us-ascii?Q?LJo8yMv6Dprs2xFiobSW2Q/rN1uov3/WxjpOSSKbCTrCe3bRGu+a/y11MKWd?= =?us-ascii?Q?fE9wWM3S/ttTi79AKzds9Uq9xxEqUx1aBLxMqulfeeemVlmmxPMKXjDJUba8?= =?us-ascii?Q?8CJZ0Kkyd5xoL6A2OGvWzZODL02lpsYsOvYvVRXQSupntB7zCaqdVO/8JiCO?= =?us-ascii?Q?y5C+LaMWUmV5E6En2+ueutiaavjDZ2O5nLzgAv7BsObmu9avxP6sEJZYvbu1?= =?us-ascii?Q?LFNAySGdI2oazoAkk5S1ezKhzIUEPFOTwmtvzbwxEzLHePvTOeP1/vB0zQin?= =?us-ascii?Q?jlbqMZnefg5VeOG9w5C/jDo5yfrMIT+esMX3fd57?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3509d55d-9cb8-4b12-0235-08de2255c9fb X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:39.0186 (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: EcTm7V/Vu0P49cWsevo0nIpYchzGNEunIfLpKVC6TQoFY4ZW7PhQ/EyQFZoDk2gacD+0rHFgv2wNZOx0khQl4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 Content-Type: text/plain; charset="utf-8" These opcodes implement various falcon-related boot operations: reset, start, wait-for-halt. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/sequencer.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 787db395dd2f..93c8f84e032b 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -90,6 +90,9 @@ pub(crate) enum GspSeqCmd { RegPoll(fw::RegPollPayload), DelayUs(fw::DelayUsPayload), RegStore(fw::RegStorePayload), + CoreReset, + CoreStart, + CoreWaitForHalt, } =20 impl GspSeqCmd { @@ -124,6 +127,9 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) ->= Result<(Self, usize)> { let size =3D opcode_size + size_of_val(&payload); (GspSeqCmd::RegStore(payload), size) } + fw::SeqBufOpcode::CoreReset =3D> (GspSeqCmd::CoreReset, opcode= _size), + fw::SeqBufOpcode::CoreStart =3D> (GspSeqCmd::CoreStart, opcode= _size), + fw::SeqBufOpcode::CoreWaitForHalt =3D> (GspSeqCmd::CoreWaitFor= Halt, opcode_size), _ =3D> return Err(EINVAL), }; =20 @@ -232,6 +238,19 @@ 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> { + seq.gsp_falcon.reset(seq.bar)?; + seq.gsp_falcon.dma_reset(seq.bar); + Ok(()) + } + GspSeqCmd::CoreStart =3D> { + seq.gsp_falcon.start(seq.bar)?; + Ok(()) + } + GspSeqCmd::CoreWaitForHalt =3D> { + seq.gsp_falcon.wait_till_halted(seq.bar)?; + Ok(()) + } } } } --=20 2.34.1 From nobody Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 6231A2DC33F; Thu, 13 Nov 2025 01:41:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998110; cv=fail; b=rA76aMnhGmlljSRy4L1WZaqqpOyv0nLnhj23M7pg2gO5TLB5/rKdBzpcQf49Dm/Bwxnxl7Ui9fEPoKMHDEfr3ViXcgUmmgxwO7yg0U3CKYBVAeZIPqHhJA4lqC3ANqsmaOsUqKYMhV+QSZB7tEzOaDoo6QzUvTtbN+YuTxYT64A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998110; c=relaxed/simple; bh=IhgaAx+Rwrvt+sSL2dvFwOH0OyGZMbirLfaVUz2O1DE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=CMWtLqtJlg4ntltam0vjXaVlen/saDNPx0UwFSVvoFUgFXR0dSDdhprsFkEHbi1i29DezTTtYZ8ffAqnmOUGa9ti6Ao2SP/GrRzPRqclHsw8o+q3zsWp8dnfFl+Px67+SQb1nQ9ao19Di5ubJLObbPaXmW9jsKOgbKM2fSrW5Wk= 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=hR8H1lzh; arc=fail smtp.client-ip=52.101.53.45 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="hR8H1lzh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oYHG/6TVEPVfzP9R4MesMqZuGHj6OcnEIshb0vSuYMJB37uiMCYMMJ1qqDqZOa5H9eOyhFt8vDP5irUuxEmW2lAiM1/g1bAWmlREks287IrJrxnda+uG8b4mxz/bescN5AMr58vkBD2jWhkDmUnXhcbA0fUzJ8SONGrWbc0rIzpLxsc0ORJFnh9F8yLX5ITYKoj47KnW1YTdyTY3XRA1ZcsBOuPlnZWerLXyRiSe4wSMjhEGhRpaIkWwIse0Wmv2vKQ4zte9Jreh/aNjtsGGRIRXFcU2lLlHWZAj1I8xj0jZ8K/G14pufYDMqPYJj4l4z2LQepUpkSLh9FXjs4tLjQ== 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=LtwYgIbgoGgteX+Qot2C3R83ESfTueZX8TrYabxZtUQ=; b=TyDIs11Ha4VsE0sHNXjHulmPaGffWyEeo4EsoMsPgDJEF8Vw9p0v5f9cEEFgF5KpeOd/VLLtVmskVDc+zwAutiyHxHN4evdDbyMKjmt4USzc5JRicHIJZv77fOxTcdA/C9X7jFNG/eBgSfBZthjC8jAOHoPlpGSORoM67wzhIeGj5DsF7Q0ldsAfZOAabqWRDfj25saQuDCVBkG5o3GnkDGvdXun9KQ4LB4PsDfL7okSihEUpqwOPkpRC96CaNzksXb43RSpJWU2GGLxwXWYKR/gSgBlnjj4z8jJtfRg56CpVlhPwv1PQU+AK+vySJX2PJDiGzCrovxc0MDsZ+Qj2Q== 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=LtwYgIbgoGgteX+Qot2C3R83ESfTueZX8TrYabxZtUQ=; b=hR8H1lzhikI/oBoGLan7c1XccWwkufmY+prXlSfExX0QkIMBAc04tjus0ia3Rn+IrcN2vfFFcYRjmm+OUPNyyR0UkKas1Ran7wIvjQPsIz5u/X1eEptKYBJrxfNpw0pwf7P4SnT2bGMbPo6ua/eNhYM8NMFnGBlVfSbBaoldV9lheMq5sMHejfiHFSgeMTIHt/1tnbZ3NGLfLQ5pg/suPeqmSwBXjKfo2qfjDAVhBOOl3VkW3zyJRBvjr+YYqlrn93GXtsRKLWSd2ixcfjUzU1znSwb/9J256SrDyTNNmkcd0zt5fvE1YWWX30DRdNrEsIT8HwtZcAiP3FrKtTDUCQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:40 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:40 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes , Lyude Paul Subject: [PATCH v4 11/13] gpu: nova-core: sequencer: Implement core resume operation Date: Wed, 12 Nov 2025 20:41:17 -0500 Message-Id: <20251113014119.1286886-12-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0023.namprd13.prod.outlook.com (2603:10b6:208:256::28) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: 81cab5d6-e1d0-4874-40d2-08de2255cae5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?IgSEse3QGvQtGEolmDS6leGZ5vOXCAOT/6JGwd3tpBbM2eUKxpGwv/bQC0OQ?= =?us-ascii?Q?nX7waQRT+vqOUuKYcdl7zxBiNsUl/Pf9wVAW+VHDPwHwAgdYfcNSFd69c1RI?= =?us-ascii?Q?btpYLS7lYRZ+ZnZoFaawmw2bXTL34UF2gKjhOfujbypNw7BidvWhwvBWOJCU?= =?us-ascii?Q?IUstjxcYE1YstwpRmhKZInWefpvcGpAvcv3FZIwG9kotSjUnFxzH7GZccfSP?= =?us-ascii?Q?oLU+llJ4S+bgKF2WYJ5Zsag+0V/bjMl2zvAMn5sqPCpxbX4v2hGKr9HmRx1j?= =?us-ascii?Q?ftb93Gac6XULFtiIb/o+Qp0PN/epuaCljpzBTm9Gu9MmIGIltambxhYM1bmu?= =?us-ascii?Q?cTzUU4PrCzOV8ex/XTIdWgplD9nqm4/B/jJf2Lwp755jer+5AzDntswX85CT?= =?us-ascii?Q?PxPz1QC+a4APQX9kKwxGoPXutQHRE4x2smYWisimWOddsRiYuNBlC5gB68OW?= =?us-ascii?Q?istOn5MvojKFLcg7e9DatuXzsZk4gih0oUzHuqkxZmPSXaXFIdhavwOQg08X?= =?us-ascii?Q?kF3ch/tqaZZiwy5YgvMyG14h/ZWhoTxVbypmtDigQMrTqY16mDPxdkeU8wyE?= =?us-ascii?Q?IK9+edTAYLeJXi53EnHX9YYNRV14l1h9pyY60Ak+rcSVzRY5kYvNAuV1Fw4G?= =?us-ascii?Q?Vz0IbRMG6qbhL+SmqZ11ZJ2FGDjI7IYQ4Fr0ovZvhp6yJKR08z7Efi3GnqGx?= =?us-ascii?Q?V0xaT9QjWBcszu2hHiSYyu0+PpL9SjHB7y+BkwWPuO/6HHQpY113fH0UWDt0?= =?us-ascii?Q?GZwsz1BBu63N1sG89Rgy2+/V12yXbd76qNU0w4DIlwRqCBfsmVWiNdpAaTc4?= =?us-ascii?Q?N9vxgbULl+4mIeyKhTb42VlYXeI4dcfkXnrroW4NQFkSw9I5zLpbaWYQVLle?= =?us-ascii?Q?L7G74QPqz3fUfzzKSOvsPGhllIK/13XXw2qBlbXyBSR/YuVBtMQgs+NJrbuc?= =?us-ascii?Q?mtdOPPVWxiVN79epprZR+eIGR54t5OyXZKX3arZSQmjM/JsMgLtm2rDD/QSh?= =?us-ascii?Q?+yz/jH4ALNEvjPCsGTbeCEwYPWyA1xVfu6IgXyi3pgqA2ZvdR1Ifb5Y8EnwG?= =?us-ascii?Q?VKFuVtoLJCWB+djX5C6Dufp4YipPqaTk+JtnIUtOoYchp0wKm5pQh/w9Xafl?= =?us-ascii?Q?BJFNlev92c9POLSPVh2C8fZDzXhFGMie5XT36ZDKk4tmDXHQxiC7+VAIPSoY?= =?us-ascii?Q?+r48QWSzndZnH2QEDNuSFTJYuAJDrfZsmO02Ab6w5JBgYEKDOal9f+61wGpL?= =?us-ascii?Q?4ctYzi4qVYMGKPhsxTJTBFRvle0FjGx28oonV6SEex4Hgb3Et6hTP5Ntn8NQ?= =?us-ascii?Q?HaS5/m0BTwlPSQazWKLt1/EC/3il3C7xjBnf9LRwUPmxvFKAPFgQZKe3nq51?= =?us-ascii?Q?SaTYqJ/o0kHGgSvYE8yB/rs8XBd5i9qoLnkGMLkEg1RBZS2BTvUocF1bgf3l?= =?us-ascii?Q?UzCmXp3n7ndIbsehsc0LbKPLEUNllIAt?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ib90MPP/FQbJybtUyUbFcJ8cfacHdwOvl3cn8SjEKFjlYu9J3RP1slk2Z2pG?= =?us-ascii?Q?UxZ1OXXl7shnTuBtwmYSAQMGpenJ2Gh5CtTUhXlf7h7z2ZGkMbrkOangKSrZ?= =?us-ascii?Q?uKMIsav1Bb/spE7VbHN7fwh/McreVwnVj+xA12dYG++m92aoVc6qr+C0BmOT?= =?us-ascii?Q?7+jQONepnzAD0MJaUq+Fd8QvkOSdxb1wyqK4H8ZaTifu1slXQ1wQhOgpJrgi?= =?us-ascii?Q?lrujf7/9V5MnbAQsQ6j3D7OnBjV9vqGxSyML/sQGlydgXXPwtCHC+rMv9vpw?= =?us-ascii?Q?1zMvQkLUmCmRbfoxOMQMvHpSNBCqqunxnRs19ddVTON563AvquwjdNy82eFy?= =?us-ascii?Q?V6+9kuXHAeh6jzZhhFt0uoXFj2rpezceuRE+B4Q3a1D1GK6K9cML3avcSHFR?= =?us-ascii?Q?g0il/rxXo/mCcxjl9q8mvadVm5Wbp1xr1nYx/n9WR4CfTtcODoY8H9z3eZ5U?= =?us-ascii?Q?g67WNvxPHG52iC2Mh7wi+rGj+rHz0brMmOwCc7xmMmp2+VsN8+AqhPGOR3e7?= =?us-ascii?Q?MyAavzCe4SQHj3M9JHvBPLD+OKDHCs4Tf0hj07H7yGPM1ctu16rF+QerPbb+?= =?us-ascii?Q?tNQ2C0xxRsUlIcjEOUuqYehVVF53ckwtduqLZy6vOvlp3GzSFpcD5MYivPkG?= =?us-ascii?Q?+vDnFxg1RkT+U3iFJ6DGnx84PK7jeHOYusauPe/Y8JQqYFEkPPa3OMT4a9cN?= =?us-ascii?Q?a9SEloOefqTFNdT/UYKkabtvYriI9hxK+yxXZ33msngHpcgUvOvTSNad9qtX?= =?us-ascii?Q?gpRigV02uMu3bUD/Es2WVbcvpfLoXfKUefl0uBsKbq7QZCU1yWZwo5ExBxOz?= =?us-ascii?Q?nB3SfRNQ4kZJedN+BpedT7q8J3EYjvj9Fs39vHdpQmOII9rFn+QTJcNkS+7P?= =?us-ascii?Q?7x5gE1fxvGxrRq4QaCFm919j/PYW8cKDkx6iT1UQ6EDguFt3w86t9eHqyoSF?= =?us-ascii?Q?QwcStKM2viUThmczIWMMDx7dQyksMVQAa0+IcuwQKyC/S69FtvWIM6bJkCiL?= =?us-ascii?Q?nPhxnomY/mLqMJ2lDBK0vDtmULtY/xGbfrruzSev/6GttixjrmnzqRoTcX4a?= =?us-ascii?Q?ZnmSf2RduwNUxgsYiXTykXy2ITU1shtWywnQ5ihSSJPYUvRPYz8tZ4q7UrS3?= =?us-ascii?Q?gyZ+pwVn6dJlfZgUFQ4Eg4i4u6hTutUl9mv3zqP2+kLv+vjTFl9bojiKrWI3?= =?us-ascii?Q?aE2Frph5uceXcNewQZL8Udw69aGMpTCo+azvNluRNu6PhQCVrrZaOOY9qFoC?= =?us-ascii?Q?jAJxJRfIojtnYQwvXttZ2LrVqcxpI7wFjcqsRQBM1EZX6VMzjY76Bzc5awu/?= =?us-ascii?Q?jb19xQY4P8rq+dH6XtRJ2MfRd8ZAsCALBz5pr+dztOAjpTyKQql3CtSFMrSQ?= =?us-ascii?Q?plb9FLiHPHB7BpH0KVAu3cH7xFQ5OXOGGeeMHm/7gt5c0mBQgcmRkQwwantt?= =?us-ascii?Q?cvmI8AsXB5QKkb0G8IY8cclDJor7YqM8Y2a+ku9DtCNHM8u/XHCCNH+F/E2e?= =?us-ascii?Q?evuJ74nMKXSRdQoPCRo4BGACseDcEP1mZJ0EsosDD3EPYANZSAi1voj9PkuP?= =?us-ascii?Q?3/bQPQd3bjWND9wDHwUB9a2At9G9kgr/pwHWIDYZ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81cab5d6-e1d0-4874-40d2-08de2255cae5 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:40.5929 (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: ZN9rMWTcMo8fmRTR8JIKPKecy7XPwFurwgvZori2UqfHZzcF3DO94Mgc4mdYX/3rqDpcASXbuWkEYPpFmSfqZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 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. Reviewed-by: Lyude Paul Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/falcon/gsp.rs | 1 - drivers/gpu/nova-core/gsp/sequencer.rs | 44 ++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/falcon/gsp.rs b/drivers/gpu/nova-core/fa= lcon/gsp.rs index 9ef1fbae141f..67edef3636c1 100644 --- a/drivers/gpu/nova-core/falcon/gsp.rs +++ b/drivers/gpu/nova-core/falcon/gsp.rs @@ -45,7 +45,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/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 93c8f84e032b..a10758ffa5e8 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -93,6 +93,7 @@ pub(crate) enum GspSeqCmd { CoreReset, CoreStart, CoreWaitForHalt, + CoreResume, } =20 impl GspSeqCmd { @@ -130,7 +131,7 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) ->= Result<(Self, usize)> { fw::SeqBufOpcode::CoreReset =3D> (GspSeqCmd::CoreReset, opcode= _size), fw::SeqBufOpcode::CoreStart =3D> (GspSeqCmd::CoreStart, opcode= _size), fw::SeqBufOpcode::CoreWaitForHalt =3D> (GspSeqCmd::CoreWaitFor= Halt, opcode_size), - _ =3D> return Err(EINVAL), + fw::SeqBufOpcode::CoreResume =3D> (GspSeqCmd::CoreResume, opco= de_size), }; =20 if data.len() < size { @@ -143,7 +144,6 @@ pub(crate) fn new(data: &[u8], dev: &device::Device) ->= Result<(Self, usize)> { } =20 /// GSP Sequencer for executing firmware commands during boot. -#[expect(dead_code)] pub(crate) struct GspSequencer<'a> { /// Sequencer information with command data. seq_info: GspSequencerInfo, @@ -251,6 +251,46 @@ fn run(&self, seq: &GspSequencer<'_>) -> Result { seq.gsp_falcon.wait_till_halted(seq.bar)?; Ok(()) } + GspSeqCmd::CoreResume =3D> { + // 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.bootloader_app_version); + + // 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 Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 5F08E2DF144; Thu, 13 Nov 2025 01:41:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998112; cv=fail; b=aOYFAxIgRoPWLg5ScfO+J0JmolBdXBh27clzRMeqJwiDILMVkL/HAuTDZU5zG1KU5B2gLMnkxjxJDsz4uqCny9YNxsBB0J9soSh0NoETxv+S3j4uMNNKo/ER+yGVqCwHmZ1HSnRXBK6xjhtN6JPbjEeSt0OHgi5LvkqL7DH4Q2U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998112; c=relaxed/simple; bh=ZFuCjNCrd/wa4YhOndsHWblFuO+ANpdp9+l83br6vfc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=cz7GLOaDT40d/kxJT8xoNHR1anOh4iqDY0qpnKKv/2eb/MHIqO6O9ASfFIZbFSLr4C3KC2MutIukydl41UqLHcCqhIxzvkwl7bmWwDraxWI/yKfSrHUW5UMEuqh2Z393tJyHBJKNWxlfNkww5n06TEdNMaZJS4nxOaWrhzJ/FpA= 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=O77MT/Qs; arc=fail smtp.client-ip=52.101.53.45 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="O77MT/Qs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oe2NeSu566Fd4mMXuXaaZacM9N9mVujU/Av0KFMC4L6M6vGxHFNyRt+qKmZbfALDkqyHyNIYD+8Sq+s+B2+qQ8Fpp67+3XchGnixx2M4hUOEkx7qh9SQ8NgPgodhVIzgEzmxWE89Nuy+0qHDrqEOkcskLCnG4mhhIfMjzLBcn/MAJZDkS0OfxC/rGf6Esd0k4Yx0dMV/oK9gsEZMbK1BXNEEycOOmn6MquM3Q/NLtxFGenN7NbMxnYZJyt5yeusAbQYH/thhPeOdLrnl7BEoIj+Bfi7PMG1Y991YVsxf8AzTzYFu4gQKIK1iYo0e8ydUvCQiFQJpeyGC4fxm6w5o1A== 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=bp00N5dClxG538EfaYlg41mNFkmIdIxdw0IBM26edZU=; b=Pd2cQ469R9uraYXCvYaHPIaexT90jhFQY4uYm7CHUKivJIf74euCis24l/Bs1ENKwfqNlzvG7vz9iwrm6uZWAxieb3sUGQmOjvCqQjkqg9r30oU4jgFHqN46MNTHu8yBbJHpSOVUqB6p15B0q695HGVZqs9Se0vqPlikqVGKIE3Pak/VqSl9UqFvt5J+sudBSRlZVStrSdzfI5H0PubN5LZ4xJA6V1/xXVTm2+B6+qI6Jm4VRZ7e/QoAirz6iwXVpCa/8K+rIjok/wPPpkUkqj2zOLahFptZIRPeEL8HmY7IHGl2eZ5fThGRgkFguZcqNZ17A8SeL4+LRPVPncc6/Q== 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=bp00N5dClxG538EfaYlg41mNFkmIdIxdw0IBM26edZU=; b=O77MT/QsfHSA1JNm41sVjF9XDmMQ4BUeh/OdpbFVAOGkNE3GywgArYsH7zulnjDap276DXcyFL6wUZ84HpMiOXqN6Lagwg69y44hjcVKeg6kpNwVxrg0XBvYemDGhq3eIfOr5htaSrneMrF3VyrKIKD3hfDdp8jMvzA938RtY31J9odlIn5wSkfVYA93fJJd5UiVnLtyOJh9N0R8EtVaal86QZEsPGneTPAGaFeU9nMIcr+ysVCwa1nWDd1X/EDk1ThIMHBJS5ZW15Dn98YCbb6f4aXDb8wFpo6G4y2YC+arm+bkGFJ1qnsvOMGVGykmACqc6sUI47hUqXWc6kr5tA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:42 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:42 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Lyude Paul , Joel Fernandes Subject: [PATCH v4 12/13] gpu: nova-core: gsp: Wait for gsp initialization to complete Date: Wed, 12 Nov 2025 20:41:18 -0500 Message-Id: <20251113014119.1286886-13-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LV3P220CA0018.NAMP220.PROD.OUTLOOK.COM (2603:10b6:408:234::19) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: 85fa815f-e274-47fd-e948-08de2255cbd9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?f1yOYKSd2cH+OanzDSa1evnmxFJLn8V8PRvF9wpvLubEQA6VnmpvGweumK8s?= =?us-ascii?Q?mU0ltlyBpW8T50gOREBB6i5PJAGo2h/HurE3KAlwmCdlvGxr4LYKl+FiQ3JZ?= =?us-ascii?Q?dR4rdUKuNCmTXJ+o3fo3+yeFA5t9aQ1wJk1h8Nz1sd9LSJQcg6Ebu36KKegq?= =?us-ascii?Q?5fY0n6qN880VqdR6qVMLDCWHWKKqgsVJ2hgxOHgqZNoHVTa54GsaeOzy8EEE?= =?us-ascii?Q?5lcAa3NfhXRjqgrRLZF8B2d42c5xH91C1qVlHl9O7HkkDaE9fuAwyWZbzdhq?= =?us-ascii?Q?Di3pyvD+nEsLDKqlone/g0HuyY2cNhzeOJa+NrZSRiWHc4Bnpj7vGdWEb7MW?= =?us-ascii?Q?0quHmWHZcT1/BkJX6i7xR8Yf2qLLk3+umLMH7Y6h4nx9X4G25WWnP6bZNvY/?= =?us-ascii?Q?FAERbATNipQ2m+W5+c9dxTWU4VdodKGN1oo8yEdbCsKbTRKEWP7FMcKsmOgt?= =?us-ascii?Q?xB+aXxCPFoO9bLpFKmBDmGdDlieAUaGqvEcNQNJbvGyOVowSteP+LnCghQoy?= =?us-ascii?Q?OBjsAK0Yjyl6lrYv8WJbFZ5M48U7mDHG2k6HkvMGcHzJVBLEK1KarODjOO1b?= =?us-ascii?Q?u1AmeeCZTMLlXSOz23nWCey4ETpwcKF/JaUthFpjB2fe3nPa8Jqke841UxBC?= =?us-ascii?Q?krRHGShbOZAalVyeSuwffb94iv2YCtS8OP215N0IkARpwVdPO2L/PjaWO2v8?= =?us-ascii?Q?1oyy9Xn3aA58Mvf0ovcyqWUDs/93doSX56labR37b/SNyj3r7SoCqa+8yrcj?= =?us-ascii?Q?gmSaibF8PrqW/tRc3G4FABHP/54VJV7dpS3TQgR1II45eTIFHBPrwB+Kz7ez?= =?us-ascii?Q?AhPbxt3vSR5K9gg6rHBIxPotUM+2lVc5J/4TrLvmsMeqNKJ/YlL7QisqSCgH?= =?us-ascii?Q?YE4KhKM0Qj1odKlaOP7La0aU7zH5z6n7fcsgd32Fc5SUQa5qQbM9aPtUB72m?= =?us-ascii?Q?BKPDIPPOff43CONUO0ZfXa/hp5RPVtLfo8X134kUMnVCUGnUzWcCGnVZ5M6x?= =?us-ascii?Q?6WkbI5XdodiO9ZwX43mo61TaOr0DPxHvmUSrGU9QmgtKv79YS9IuqYmmhd/h?= =?us-ascii?Q?z3xHQPeEwAaSDJGB8cWdbDPQGQZqwiJZ4swUaBvGFW7FNsv31toWSVs6a/jZ?= =?us-ascii?Q?S2I+wrOyf8hR0kA8vF2aUAg6rrnd+SwmgWzGvw9dEjcNqPwvDvNh+82TUbRR?= =?us-ascii?Q?pdvwYw+kauabFnwCndSh9Pv1aqxKYhcsx0/oV/JH6CmYnbeixGBfCBH2ecOS?= =?us-ascii?Q?E4aFCN5OEkBZhvDudf7MonNSsGd0+5hU1S4haGBJGVJBLpc526LWyznYJ8wF?= =?us-ascii?Q?OTNY862MJX5Vo2xMlyGVmbN7PIcSpAVCzMGOCYUxF8SHx9J2Txcxoe7ef091?= =?us-ascii?Q?9c9cvGDPz848F/LeGL4hozR1Vfb/bjVFUSvdRbIkgx90qhflWdsLfN7acdH+?= =?us-ascii?Q?KOEg6/Wu8PIUHOt9XQgD1JkdvkP1wemH?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2U3o7Ty5rvy9n2Kjg1Wq96VBMDd8n8/hH35Ku61O1iXIf27JflxB+87zoIG/?= =?us-ascii?Q?PUzZytcpZGD02/4jbiuh8j6FogGAQ8WIqEEQRuWFERdWb8vQ8DBRjkQFLqhu?= =?us-ascii?Q?6T1aw2XyABRNe7CoATNrUadZSAXLA7Gbq2n4FMIQMqdxbzTLQ4xo80OqsvwX?= =?us-ascii?Q?0nUB2sr1oOpxRbjey7T0DbVyhtl6DdJDAZmNy6aWhnLyTnM99zPdMHAy9Jsz?= =?us-ascii?Q?VrP11//kYYROu0RKEMHu55ovmK2EfD31NV9wFZAAAqxiZkZmjgEJUoZil4pq?= =?us-ascii?Q?SGtaA2ROlCXO0kLk/ohizY1vWazgigK0frAKsG6wTFe7oUeK52Vh5zmaoNI6?= =?us-ascii?Q?l5IRw1z//oorhzS/MKC3jLYksJCBj8Pm/qu9r5v2pmgzc+3JA+YBikLSrF3t?= =?us-ascii?Q?vgZRpRHt3tSPLUDRm/4AJo1qrAgG+eR+k4oAf/XQc042tRT7X03cs550f+u9?= =?us-ascii?Q?Bps1MqFTeRB/ouqJjmtXstldTf4WQM9mIWalpey0EkPKitCUn8lWqsTTs8DS?= =?us-ascii?Q?jlqmJDfv8lLnQIRW+B9EdeT/8YSf1o9+FAraaEs7vAQVMWB9bVDgu+Zc3xag?= =?us-ascii?Q?XD0xgXoPWUx75gV06jBT8Q8JMdmMqSLeNAIai2X1ZNRy153u0PmEEvDQ51kj?= =?us-ascii?Q?sWqdAhfA8o15HXNsrzRdKm0nirCHWVIi5kzXhmxJzl0nOGJJeL9imcKI0RTc?= =?us-ascii?Q?UX+cVkNkvIkkRPGyW8XlPiRu1HK8OS8ouZa59CvFFQvJUCO/R904ximnnnkx?= =?us-ascii?Q?gbb/413wvKistha13t3yHFFYQjERPMV8IhQMCV8vrMRWn3nJeiXuVbDPKS5N?= =?us-ascii?Q?Io+Qql+9q8GhOd/CK+emPMIiWD8jtsNMcdvPgoQp8O79N5PVLd0hokL8pPtE?= =?us-ascii?Q?DQ2Tl/ROo+jn0PvpJMUedfool0ArZkSZ9mjI/bWBNnSJFE7YDZ7dSVDcL4V2?= =?us-ascii?Q?C/8Pty74B0pkHUKn89mPhtvBYV4fRnHgnwCQfvnOQB0n+wQdvcLjmYH80EWO?= =?us-ascii?Q?Bad7DZ+GjWAOsduCdXQQjqyQOpBSR09VwN/nBLjTDh6dTYDEVlD6H64Hx3K0?= =?us-ascii?Q?7fHlE2sILfWfimXaK2cWr0P/t76v881WpbCONdocBtKFr05xVkcOpdnFs9/W?= =?us-ascii?Q?LJUDNxAMbGRP51m67F2HCBxX7hwzD/EU7yxmSi5MwugFCk7+zIBtqZT5mgHi?= =?us-ascii?Q?5B38PkGjwD08U5Lg6JUqJsHf01N6RtTKlLPecGasmcBvFmnyNQH35DGzFu16?= =?us-ascii?Q?KfTOFdQapDIxsMUisv/p6sVEKw3K9Kl/VYNP/5Tz091qLs8eS/oeSBouvPna?= =?us-ascii?Q?yFVMLzXKN5TUDetCTyiF8T3xrV2fvPUtSWcC+Nslmygq79FjsW2vO8yeirNB?= =?us-ascii?Q?ZfNttiIZoo+iAm782KUP6wE14ybz9obfoaeVyRmR6CHbdvcW31RZh3Fjf7RD?= =?us-ascii?Q?bC2bvunvDOSFerO5D9Ib7KkMzhPJKHcea14yS64q7b+/jApnYRZIKyFP7sTm?= =?us-ascii?Q?o0vVYXfmN/1eQ6mlMzw91WseEvgBWSOVt53xU/Uo5zJr7apb5GQM8AlILJN7?= =?us-ascii?Q?KA0r0y71PFct6B625Oksbpxa5XmdS4p5SyIF702g?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85fa815f-e274-47fd-e948-08de2255cbd9 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:42.1926 (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: HCijXmZeAg79qUz80ExUKbp1LghltXxn42XBg5Xaw9dBHjgzIshtZX1IV9O4rLU7sPBX2keZ9Oq+t+MLEdazJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 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. Reviewed-by: Lyude Paul Signed-off-by: Alistair Popple Co-developed-by: Joel Fernandes Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/boot.rs | 2 ++ drivers/gpu/nova-core/gsp/commands.rs | 48 +++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index e9be10374c51..c0afafbf35f6 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -236,6 +236,8 @@ pub(crate) fn boot( }; GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10)= )?; =20 + commands::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 d5be3bf10684..07abfb54f9d7 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -1,17 +1,28 @@ // SPDX-License-Identifier: GPL-2.0 =20 -use core::convert::Infallible; +use core::{ + array, + convert::Infallible, // +}; =20 use kernel::{ device, pci, prelude::*, - transmute::AsBytes, // + time::Delta, + transmute::{ + AsBytes, + FromBytes, // + }, // }; =20 use crate::{ gsp::{ - cmdq::CommandToGsp, + cmdq::{ + Cmdq, + CommandToGsp, + MessageFromGsp, // + }, fw::{ commands::*, MsgFunction, // @@ -20,6 +31,37 @@ 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 FromBytes for GspInitDone {} + +impl MessageFromGsp for GspInitDone { + const FUNCTION: MsgFunction =3D MsgFunction::GspInitDone; + type InitError =3D Infallible; + type Message =3D GspInitDone; + + fn read( + _msg: &Self::Message, + _sbuffer: &mut SBufferIter>, + ) -> Result { + Ok(GspInitDone {}) + } +} + +/// Waits for GSP initialization to complete. +pub(crate) fn gsp_init_done(cmdq: &mut Cmdq, timeout: Delta) -> Result { + loop { + match cmdq.receive_msg::(timeout) { + Ok(_) =3D> break Ok(()), + Err(ERANGE) =3D> continue, + Err(e) =3D> break Err(e), + } + } +} + /// The `GspSetSystemInfo` command. pub(crate) struct SetSystemInfo<'a> { pdev: &'a pci::Device, --=20 2.34.1 From nobody Tue Dec 9 03:07:29 2025 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012045.outbound.protection.outlook.com [52.101.53.45]) (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 6CD672E2822; Thu, 13 Nov 2025 01:41:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998114; cv=fail; b=WHWI7c1P4oPD5ZT2U7RDebX3ZkO2wIXnBNmdoOYdrG5ydcme/5OwLQYsfwbe+OsllAWxD9X9pLErO//RVgtFdvtS8E7POVz59+LbwQvCgA+5ZGtUxx4wft+LEatG5yg9Vq0pCE2DC6y9q07+tauwihw/QPPqPtOPcxPGH1p+vAY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762998114; c=relaxed/simple; bh=wnVrEyQghAdJ1L4/ACq3/E0Fip5FgGWA5sLidxvXUU0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=iJk8ZhQDh23UZHnEYlXG+WxdjwQR7j9DVlmu/tIE5MehIYp6nXYC8ARR2ycgw4ch9aT/oQcIjJeaeF1+PYz4KWY/VaW44kcHGzf4amtLHmN2Z0ueiH3pcTGISWGXC05/sDJzBhh7FzUXesOLLmFB0J56x6RSQfNfeVYK/nTEIzM= 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=owbWP3BB; arc=fail smtp.client-ip=52.101.53.45 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="owbWP3BB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OUnxcby6xAFqk/yt7plFtXqHxpaSBd7RdPB6+NBe9nv3PCVnaX7w0Po9JRkiaf8m85CES0nFXomxFw/K4Kd23x6qWj+xPjDW/YlHrzbBhgeZk+849I1PhkWnyA3UkyeCbPvHxHLSBrTRt0X3F2TCMOT5rq/Zs3CT28Y5F2XPU7u5zggVz426hwyoeK4RDw4DLqz3XkD6i+GPZ2QRrlDa22igMy1gt81/xP7GblzTWQ8VcDqq5IUhc4lsZqn0tc1sfVaJFzs4h4JP5w/qOvaBaUq2tozo5iprb/8YB5o5FzoRPF5/O6G/0tIU7UhJyv23X+ztcKEuBe7AI/uujrfWTw== 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=h9NmFC0N/iu1esBSrdIf4Io6f+p9SS9rMPx691ZtSi0=; b=mUgeQ3VnZStVe8NEMy1SFw4NDoqOFbJRuETSvk8z5FG2bEME6NKo5W6p7ejo6Fen3wALZ2/+Z5mc7KQQs/9iTX1Igzhql6UiE3F6TrGbGP4WZrLXb6Bu23eYc1ulz3Hs0Jw67VrqTOZse8DZCSyRk7lK9v1zT1WghZw53NrxR+wpBc7wBwrMYWlwxw1qSc6qDojzh/4jIO5eYjfPeKI8vQZmOWEZGWkhgQVwB7fMPOsKDoIYhMOJJjMMn7Yc5I+7lIUf8bZGIMGm/suQMPVT1xYS+GqUO/YLubYYzqgB8n9w/n6QNRmF8Si6YqSbZFgiCg2CcD1Y0uFFvjk5EThU1w== 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=h9NmFC0N/iu1esBSrdIf4Io6f+p9SS9rMPx691ZtSi0=; b=owbWP3BBAIArD08rE0PellPmoQiyt6Ks1I3L9WTS9TQVGUB6Lri1kdbL+BaevQyuKMVZekr76Is2Dvea4ImyUyUPHOTEdnnv3VZRxJiyAnQj1mpoDaM26Ko9G7NbAr8dGppjEV2Cnp+NE09lalcChlsOzOrfVi9JEmJbC3N3r/2z8Qy1ZTkXD6YtUZ/zpW5RvOYandVhFIf6K322nbSAB7d4BMsh+TBDB4ptVD3iN+u5PPBPf/xkouoB56GVbIxAQ5oSCZdJbMxOgN62wrFf/NPjJ5+Tx/sy0vIUO8V6AX7uV5sK1bivGmFtfD9SAWKD74ZumrEkXmy9Cx+1SqSOfg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) by SA5PPFD8C5D7E64.namprd12.prod.outlook.com (2603:10b6:80f:fc04::8e3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.16; Thu, 13 Nov 2025 01:41:43 +0000 Received: from PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6]) by PH7PR12MB8056.namprd12.prod.outlook.com ([fe80::5682:7bec:7be0:cbd6%4]) with mapi id 15.20.9320.013; Thu, 13 Nov 2025 01:41:43 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, Danilo Krummrich , Alexandre Courbot 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 , Timur Tabi , joel@joelfernandes.org, Daniel Almeida , nouveau@lists.freedesktop.org, Joel Fernandes Subject: [PATCH v4 13/13] gpu: nova-core: gsp: Retrieve GSP static info to gather GPU information Date: Wed, 12 Nov 2025 20:41:19 -0500 Message-Id: <20251113014119.1286886-14-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251113014119.1286886-1-joelagnelf@nvidia.com> References: <20251113014119.1286886-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0009.namprd13.prod.outlook.com (2603:10b6:208:256::14) To PH7PR12MB8056.namprd12.prod.outlook.com (2603:10b6:510:269::21) 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: PH7PR12MB8056:EE_|SA5PPFD8C5D7E64:EE_ X-MS-Office365-Filtering-Correlation-Id: 6239a811-c5ae-4016-4950-08de2255ccc9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?oORnyKyE+FjSR2woVEfdGk38WrYVUBNvMQgcbaKRpipLduO3YHV1G98Jokxe?= =?us-ascii?Q?srtqJ320GZWHfpx03RHz1brPu46tKKyZ2KlC/3hYAvoBQTdCmggbtov4o67M?= =?us-ascii?Q?5h4fTTelJb5Yfn749dFHmQNQ4Va7TW+Td+nDspOOmY2y4uCj6Vhe/LDA2UA/?= =?us-ascii?Q?jw+TT0Icvc4y/ffaLPpMGhYWSmGYCZIbajFB31DYDOWEOp8wqXvjrGn4Eewp?= =?us-ascii?Q?XwWudgjLrzgLirr9JJEl57KLeaA/amjRIsD+yWrxDomRQoJrEpDgNlTsPXPj?= =?us-ascii?Q?wIEhzEBhoDod8kkqVAsSWceZp87I35rqQX0nJW6pswIubQXNKgxKtlu4Wyl6?= =?us-ascii?Q?Ayn7WCHRdHCQu/xlAR5IriyKP66q8EI9jYB3ZfGNId9UEedcoPeXdq6C5Us1?= =?us-ascii?Q?avL+QjzqeaK2nyKBIG0E8iIcYEKx4ZgvbG7mop1sYhE7oNtKFKoRFYsoYa8B?= =?us-ascii?Q?P+xN86D37OjYoRK/5mLTxQRHXW9obcEa/q+2Y1GDZr0VfAEWJrtAKIEAASav?= =?us-ascii?Q?CE+DI+SIzO0+F7UpjBEpSloSgCS4pn0NCqt4l59gedPiTXm3f5ky2FsfcKlu?= =?us-ascii?Q?VKWovNmHkoBK1AJJlrmr8pjxFqBAEum/ttGtv7fVLdHX20sSF0a6lZfKs7wO?= =?us-ascii?Q?VrLG3FWv8sRwb7xe5vyPjDNxiCtpfZE5efsWrysffsGMssmf2V3CznHF/M0f?= =?us-ascii?Q?GtBqCK3MRu7nXXKS9FND4bav+d1vb6TuS/E8dSh52iEDr3mJ3ZJM/wEM3S2y?= =?us-ascii?Q?LLRnILNoByzL+oOqPZDSU+3KV2K1v3N/hITLHIET7IqXR6U79AplL2AYV/1t?= =?us-ascii?Q?/62tbxXg4FhHiYpPGnQP4UYlNZgugkXEdiTJSQZBICRQLq5qYMYNbIfYSMmm?= =?us-ascii?Q?IwMLtahp3rJ/fS/YjcFjqn0Acv27xqIm9Z/iWXYfkgydf+MtazSy73KK4sPw?= =?us-ascii?Q?7MKNyLzE/CcVjDJu0+RyJnhC27EigodhbXsKfTBh5fU/TixAPsthUAK4ANAR?= =?us-ascii?Q?3jD90unXLvl5G/KPgnIQnfIXVUkzyvQSR3RX2RdchjjnSS5MeZ8FiJrExW0B?= =?us-ascii?Q?AHpzG+/TKKqFI6mi+bwhYq2mwtP8PPazpvEvVb2pGUdyQQqSnLSDBXZGtZ5M?= =?us-ascii?Q?ki3O7YkCDHJk5B8dYEPoG+6ETvSGh7vFPExAQCcJgFA60azctLISul5ZiBwz?= =?us-ascii?Q?+3PHmKJw87DrvHkWo+IBnt054LkIEdqjX/ljYXNUYdiRv3VtcLHx9BuaRwSV?= =?us-ascii?Q?HJiZo2DTBCns5G9PDUvN6hHdlyAfnZzS8jYkq4fQI2N4Vr2Md2ILXp9lj54W?= =?us-ascii?Q?ybvyKsNAPUHMKzUafkhVWWAQAQ5+reGo2ehF1DFyI7hfdJij7UdXCYSo1sdp?= =?us-ascii?Q?aBXgbEtLidsvpQXsQv8r+gvkeRZoNJ4Qew5OLP8M5AjPB0ikjQG4TCdRp6qI?= =?us-ascii?Q?7rW1PVfbLSajRcDt7KO0LpGAZf7BpPH4?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB8056.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vAJcvHDn8yGR11CZ+uxaAIH9twd2tygb+pEed310Y/CRdkJcf0htwGm4uuYN?= =?us-ascii?Q?AOc0j0rlFwRkBggGltGN3cvRVjUKivcYU0u/vYOSnJKcil/5yDeUXOotolF4?= =?us-ascii?Q?BSP/oDWqIj7NjzJy5P9psTq+erd9V4nu/EqlaFNgobaFvTpYofNUGt5eg/FT?= =?us-ascii?Q?F+BnUEBgh/ZAXYC9tGz5EtWN4sU9HWtfrRhhqxXBe86iajOgiW50Z6oEyXil?= =?us-ascii?Q?yVWLLQz19JgWKj89KQXA4m1Nlz6cJwIhd4gksJsqx0hQisKaESkbJkXDQzrw?= =?us-ascii?Q?mEQQRBgqC192BBlw67tYNgC3SoVJHPHUfroJDGzzNoLLA3gQ3tj9FK2PN1yd?= =?us-ascii?Q?OMc9k0zEpdD7O3vK/oWPP8/eVIRCpIcRnAL2JeJH3MqpAbUrcbsSktTKmwco?= =?us-ascii?Q?gVeWbJvz76QO7H0nXca3yg2RKkHFTxD8Vi5Zj2aVGj6usym9nWnJb/7X+vN8?= =?us-ascii?Q?0IUPS2CmSyKOeVRb1YIfaGwJKWA7E50MVHflnElzjiVOBqnMmhZKfDUI6Exx?= =?us-ascii?Q?diOI6E+uZcM5ohfM0yQVNRiVp+4eVYPvcT8QUc4iWS7zzPcG/QkJZa0VZ32z?= =?us-ascii?Q?uUPzQXMxki/uMblp9AhXxVhe6u7+IG4K1wm1a1aapVH8zvHh7OfOOYGEnD7i?= =?us-ascii?Q?em+nFiS2tdKxATdPxHBYZnoQv7GWR/dHmW9TQPlAI0BTyqDU3ykVCJ/J9BwC?= =?us-ascii?Q?6efWEk6GfFXp2M86xL1+r01hG8w6rrLtG5ztR4ih1q+DWTGWl+gxQ6/BGtQ/?= =?us-ascii?Q?nmgMPJEoHrWeMHdzdA8B0DkE3u5cMPwI2eno7ILeuxQIkNp9ywbw8j5SJtVB?= =?us-ascii?Q?beX4jGpRzSZP7ZfhvOkRF0L7iQ8lP4xiUkJrU11USV2FCsZKC5aUn4jX5Kwt?= =?us-ascii?Q?xUhP2wL1WCH+MZgcYALhnkLT1onSw6y+SDKCOyhbBCzm/+3Sq3QPQM4pLOlF?= =?us-ascii?Q?Pr0k5Eiy5EGtzbHoChDnHYvySmc53Y4+DQxEUoQRSTMdmFhlMMSpmFyJrXPu?= =?us-ascii?Q?GkppLeYy/0jhb1zKZnfO3HHEv07c+6st3mKIEGYiXCFvyA+Cu8vg6bpobGGS?= =?us-ascii?Q?0CUsgl+QSIg+o/qLgUWOMV8a9NskRzfi9YqrEW+36LkKyTdd1s6TbfxNdyI/?= =?us-ascii?Q?+bFagM17Sg9U9h2S5ZAtsRnO0i2IjropG6dXxf8qnywGFt/z2LAu409ZFNKQ?= =?us-ascii?Q?8Ommzm+70z4KWTgI0ZYQuieb1U6L/XmFwk0eyGeHzN9msLoLN3OMlVrQQ+E0?= =?us-ascii?Q?mtz98VOJ7m4P0P2K4UXlSG0iGzeYdq7G7yKVff21DCPZd8rG+/CXh6KpJ2Zf?= =?us-ascii?Q?dcH0GozeiNYdRJZC/329EpSLQOHRpFZkJkmp18/7+tXkLLO94Dtpt+KODM7F?= =?us-ascii?Q?V4H1PmscEaQQJY3zkvtxT+6gqTSXEgEymcQXUnpKLS2PSw8vEqnGrdmYLtLS?= =?us-ascii?Q?rtHVycvFSnvCYqmIRQwA4Pbrx1UCS6uHGEaEIWBnIMgVKChu4cGe0kj8jn9T?= =?us-ascii?Q?5uaQrZGwdV4TFTb4mSbC3h0hKObGQk7z25eqN008iJwC7BS4arinKFmS+SzE?= =?us-ascii?Q?ZWcSOsjbULXdQKbJXc5dCqQtBYzKOLjo6cWM53yO?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6239a811-c5ae-4016-4950-08de2255ccc9 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB8056.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Nov 2025 01:41:43.7338 (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: HReF1OnpZ42tLDYMPULPFrthwkB2F2GJWSu4expqXtTl3kqAjNkvqYjT7MmfHEP6iG4iiPa+i+7Dw/rTWABT/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA5PPFD8C5D7E64 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 | 7 + drivers/gpu/nova-core/gsp/commands.rs | 67 +++++++ drivers/gpu/nova-core/gsp/fw.rs | 5 + .../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, 259 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 c0afafbf35f6..42a3abb9243d 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -40,6 +40,7 @@ GspFwWprMeta, // }, regs, + util, // vbios::Vbios, }; =20 @@ -237,6 +238,12 @@ pub(crate) fn boot( GspSequencer::run(&mut self.cmdq, seq_params, Delta::from_secs(10)= )?; =20 commands::gsp_init_done(&mut self.cmdq, Delta::from_secs(10))?; + let info =3D commands::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 07abfb54f9d7..dcbd8a3da89e 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -17,6 +17,7 @@ }; =20 use crate::{ + driver::Bar0, gsp::{ cmdq::{ Cmdq, @@ -25,12 +26,26 @@ }, fw::{ commands::*, + GspStaticConfigInfo_t, MsgFunction, // }, }, sbuffer::SBufferIter, + util, }; =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 {} + +/// Static configuration information retrieved from GSP-RM. +pub(crate) struct GspStaticConfigInfo { + pub gpu_name: [u8; 40], +} + /// Message type for GSP initialization done notification. struct GspInitDone {} =20 @@ -62,6 +77,58 @@ pub(crate) fn gsp_init_done(cmdq: &mut Cmdq, timeout: De= lta) -> Result { } } =20 +impl MessageFromGsp for GspStaticConfigInfo { + const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; + type InitError =3D Infallible; + type Message =3D GspStaticConfigInfo_t; + + fn read( + msg: &Self::Message, + _sbuffer: &mut SBufferIter>, + ) -> Result { + let gpu_name_str =3D util::str_from_null_terminated(&msg.gpuNameSt= ring); + + 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 }) + } +} + +// 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 {} + +struct GetGspInfo; + +impl CommandToGsp for GetGspInfo { + const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; + type Command =3D GspStaticConfigInfo_t; + type InitError =3D Infallible; + + fn init(&self) -> impl Init { + init!(GspStaticConfigInfo_t { + ..Zeroable::init_zeroed() + }) + } +} + +/// Retrieves static configuration information from GSP-RM. +pub(crate) fn get_gsp_info(cmdq: &mut Cmdq, bar: &Bar0) -> Result { + cmdq.send_command(bar, GetGspInfo)?; + + loop { + match cmdq.receive_msg::(Delta::from_secs(5))= { + Ok(info) =3D> return Ok(info), + Err(ERANGE) =3D> continue, + Err(e) =3D> return Err(e), + } + } +} + /// The `GspSetSystemInfo` command. pub(crate) struct SetSystemInfo<'a> { pdev: &'a pci::Device, diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 538bec7d7c2f..6f7afd18f25e 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -885,6 +885,11 @@ pub(crate) fn element_count(&self) -> u32 { } } =20 +pub(crate) use r570_144::{ + // GSP static configuration information. + GspStaticConfigInfo_t, // +}; + // 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 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