From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=52.101.48.44 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1793840850; b=0AC/w5Qc+ElIUpnNJ1/4ud7FLHocAle0BohnBg+jguHdh7ug5I2tz2OTYpHSQVZRYoNL g22P82pssPp9Xh94eqYaTOhZ+Y79Jg0UWZka5e62f9lyqcqoUPuj3jGshXese509HKl33 Ms6hAH+0132bVUR5tmUXKAzY0+0fsXxI89jH616R7jREL10946mtsbk7r1hbSRrjoPZpj Sqw3TgGn+o0kqO4ozAPjmdL/jESY66sDJq3EFXJHwTNJ7W7BJJOlHYgdm7cx8tb6RfJ3g 1NoxB6zs4UOknFX+59A0NUwgb4ODTByoJldjXDSNm0wB1uKjN6EXjKjO4BoYcHXSPPg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793840850; h=DMARC-Filter:DKIM-Signature:Received:Received: Content-Transfer-Encoding:Content-Type:Date:Message-Id:Subject:From: To:Cc:X-Mailer:References:In-Reply-To:X-ClientProxiedBy:MIME-Version: X-MS-PublicTrafficType:X-MS-TrafficTypeDiagnostic: X-MS-Office365-Filtering-Correlation-Id:X-MS-Exchange-SenderADCheck: X-MS-Exchange-AntiSpam-Relay:X-Microsoft-Antispam: X-Microsoft-Antispam-Message-Info:X-Forefront-Antispam-Report: X-MS-Exchange-AntiSpam-MessageData-ChunkCount: X-MS-Exchange-AntiSpam-MessageData-0: X-MS-Exchange-AntiSpam-MessageData-1:X-OriginatorOrg: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-AuthSource:X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-OriginalArrivalTime: X-MS-Exchange-CrossTenant-FromEntityHeader: X-MS-Exchange-CrossTenant-Id:X-MS-Exchange-CrossTenant-MailboxType: X-MS-Exchange-CrossTenant-UserPrincipalName: X-MS-Exchange-Transport-CrossTenantHeadersStamped; bh=rPALfvKcghhgzvA7CVhpdKISszem6NDocCuBj2A+hSM=; b=MK190w5l9D9rDChcUZ2QIhIslaGifjN6AfKDA5t0iZx5QH96kTklShthqkAJrqAgUv4/ H/f5b1l4gKgiMXZCHU1NXrv6LkWjKFOuWV2noFqGVmGGfTDBdRcQO9v83xwT/uQmx3XVB wxeDa/bMizicMW/KdoEtclZCMSVLk4GVbZLjZdXalWhFVc2EtVgeRHi+SSl4AAXPRxnps kMDAYCj9jrN+FSgk/5mOtOoBp/xjFqAl1yZqmwLkV5Me/CS5mp8831jXrgOTGBUdEHjF4 CQEoyuM8otASWvmz0/NSyhkDR7AcC4R0AqkoeL2ydSsusmtMmHic0mC77zdqLCNcxNQ== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=oWmZcaMM; arc=pass header.oldest-pass=0 smtp.remote-ip=52.101.48.44 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012044.outbound.protection.outlook.com [52.101.48.44]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (secp384r1) server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74721606A326; Thu, 5 Nov 2026 01:07:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 74721606A326 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, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=oWmZcaMM ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RNdydGhPmcnqMBZysUGkitzmoPWhMIqc6QB5f/ABzd9uVFXXYFW41H+11AfEFpOYR+rOuEKmgHdyszI1k8qVcKM/I+NjQXjZohzxNODLycqwfWDuE5i8+kfRtEQKYuY3mOo/H1oyB/GhXrFy3WTJt7e154mFJZyJs+V7UBeFterAneVGFgFcWILHtVn0KGoq+TsvmyXhnUKGJ+c/d61yp9CiBqEMkI3FAYqV8LCCeNp6gzdDR86qJm9bVLmBDE0VIMBbZVbDRB2ed0BmJ1HdQXCL1+Wc0bgTX7iR3c0GuFotHTdTXqqIMuITJHhjfmYEQsaYdVny72J+kcAoQvkR7w== 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=rPALfvKcghhgzvA7CVhpdKISszem6NDocCuBj2A+hSM=; b=QO15KigadnUT5y/L8N9m6l1uJn+9GBbdYkHuS1EyIJGhabeA2Ou3mOmZF2h62XmUcaa97jDrLq37JlZhDf46vPKSGaSvsXTWNjv+8t5SfiWZl3Jj6JL8xY0UHmeLR/ASbBsgqRXs7o4jyjuEvC6typhaJBg1WTf7ONE3N7nCpLyssFxYHQBdwYdxfsL9PpU4yo2V+rlcHtisySSNjzAMRCIVN/ApxCXnraipscIirjwJI00Qp2zPyHIKFqudsJy8oqBAgX/KpuDzhuLFsRSgsUF6xz06PL8A8q2gl1aV7ufZLfoRCHQ2V5LYAvpkBL+NprmmFSeSdijkkhDaQW5x6A== 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=rPALfvKcghhgzvA7CVhpdKISszem6NDocCuBj2A+hSM=; b=oWmZcaMMoSVT6iW/9IPnHMpmlBLBQi/kWUpgDSsoWw7y3fvR13bbeChrA6pWJCYSW3yC8aUfJq100zm8JTvsUOY6veY64ymbbRbydiN+Ys74/j3Imp50dhWTFsDWZphnBS9HyndCvPSszbBa5/x46FqblN9OPhw37j+wX57W45W2uiJBCtulZ3njWlGeEz9B6B4fBA6rrXtfXfesl6QOX3qZ41iSHDS/zQVERSBHNV42VsO7Ajf9SUxLSUWnn9AGadJInz9p0KGelYC5gUa8GQYSdUZTtVvKs0+gKjt0iwhOoSvCmB2nx4IIAb8Y/0GTQif/OUMI6dkCff9ReS+ALw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by IA3PR12MB246477.namprd12.prod.outlook.com (2603:10b6:208:70e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.592.10; Thu, 5 Nov 2026 01:07:26 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0592.009; Thu, 5 Nov 2026 01:07:26 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Thu, 05 Nov 2026 10:07:22 +0900 Message-Id: Subject: Re: [PATCH 3/4] gpu: nova-core: gsp: cmdq: add the GMC send path From: "Eliot Courtney" To: "Alexandre Courbot" , "Danilo Krummrich" , "Alice Ryhl" , "David Airlie" , "Simona Vetter" , "Benno Lossin" , "Gary Guo" Cc: "John Hubbard" , "Alistair Popple" , "Timur Tabi" , "Eliot Courtney" , "Zhi Wang" , , , X-Mailer: aerc 0.22.0-0-gc2f86b7abde3 References: <20261103-r000_rebase_on_cmdq-rpc-v1-0-189f9ff3bfd2@nvidia.com> <20261103-r000_rebase_on_cmdq-rpc-v1-3-189f9ff3bfd2@nvidia.com> In-Reply-To: <20261103-r000_rebase_on_cmdq-rpc-v1-3-189f9ff3bfd2@nvidia.com> X-ClientProxiedBy: TY4P301CA0002.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::15) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6413:EE_|IA3PR12MB246477:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c5a7f60-95d7-40f1-e051-08df3ad927e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|23010399003|366016|10070799003|1800799024|22082099003|18002099003|6133799003|10067099003|3023799007|4143699003|56012099006|11063799006|5023799004|261026140227099003|261026121527099003|261028144727099003|261021121427099003|261021123027099003|261022075727099003|261009223027099003|261102123227099003|261022113327099003|261022105027099003; X-Microsoft-Antispam-Message-Info: 2CCORKXyntxiTzd+5ggOaJQ2/O6D6YtYe6s3GVjqRUOdZgo6DpL2KiXrhT1+Gt++bA+oP24Mgz0o8O765uB7lBaVc8kh99NQEu7pn3frToLBI0qE9XGMLH4j4a1ASv7lU9Swy33STtTQTnnPKlttlAgHCwaJ0E2/Bua0V56ZdXXeD973H+bqNx+wEr7tpbETel2VfUDXYlFvad9TPOEFqkz+CsmkhBXgNcEMfqjVnpbo+abQCE4JA7tJbG0JtK7kp2e7q17gXCyMjLK72If4Sqd41D38RR0m320CVYoQEISGCDfRYfiGaAJCKoaWaippGblwXaseP51/ANrIE7DWDdVsDG3SloHQUP9yi499vTcFYchs2CKW+1HfQkRjvfIA6mdhqYfwkn7niJwOItQIskzi/cMVIpwFNBVR5lF2FSoncwH5m9pn3mcKRZDSHc/MRc9Snp5Su8ZXKqNIAgPs35QA5evokKfQw3duSbKdavb3DxTa4f2PDIK2a2A+kPDq2hFxmdpkvwKQuXHqB+quht19U2c6ayIVWmE/6Gr2wgFLBYoXlEUXIJ+bHneoS+NesJ1GMfoG5HIGsGFv9dmBfsyi8G4XsY+ENPwxuN3Lm0CG6HgsSieDoZ24cH97M/T8e1tLQVNR6dMvJf7iixF1MwawF34vn0IhpKYYol+ph9I= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(366016)(10070799003)(1800799024)(22082099003)(18002099003)(6133799003)(10067099003)(3023799007)(4143699003)(56012099006)(11063799006)(5023799004)(261026140227099003)(261026121527099003)(261028144727099003)(261021121427099003)(261021123027099003)(261022075727099003)(261009223027099003)(261102123227099003)(261022113327099003)(261022105027099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZU1YU0hwV2Y2eWpkSmJ5RlFjT20zTUJidEJMOUt2eDFpbVMyb21yd2lSZStK?= =?utf-8?B?V0NraFozbW1wdndXajZ0ekY4c0RTZ29QQ3dTVy91SVZIREtmTm94c0J1aWlP?= =?utf-8?B?ZGg5RVJpSkNNT3RReEhockZPVmx2aW5xeE9BaG5oYk1NWG4wc0FreXlBM0JU?= =?utf-8?B?d1VLd01rRlB0ZU00Q0VZZ0drNGhIeW4wKzFMaHVEaUhhdkIxN3ZIM3ZEVG9L?= =?utf-8?B?MTVGcmlYd29lai9LUjJNcTQwUXM0MGQzZ2x6WlRnaXQyMzgwNXN0S3B6OC9j?= =?utf-8?B?eDRUQVRvdFJMSjNBeTlwUVZDZVVIZmZQaTVxTEFaYitUTk1BaEtqb0NoK0g3?= =?utf-8?B?RS83RGJ2bkNmYWdkMlFtS20xTEdFYjByWWRBeXBQa0k0ZEV1V0sySEhBSHk1?= =?utf-8?B?QWNVSzhCbnd5VE9yV1dKbXBjZXFicVBqY2Q2NENBcTNzZE4xOUtXV1Nlb1Vs?= =?utf-8?B?UUN3Vk5rbU5DWXNEaHAyV2NwSTFHZUtwaGZPczBHUXdjRE0rWFpaUDVWWkda?= =?utf-8?B?YWRUVHZjTHBoanRuUVRXeFAxcnJhaUtweHAxUlY0dXAzVnJYVHM4M0xPUG52?= =?utf-8?B?K0hJRVlRcjk3TDBqUHBYa3Y4UWZnN1VOazM1VXRqMkI5NmR6YnhObHF4M0Jw?= =?utf-8?B?N0ozUFJsTCtHVS9sTnRycGQwWTlXdVZjbHVrVmkxN1RlTWE0ZFBPN1JDVWY3?= =?utf-8?B?cHlMeS9ZeDZFRUttaXRkRkxuYjUzaWU1bkFBT09hTzBwaFRDQ29wTEhvTy9w?= =?utf-8?B?VnZEQ2FYWXAwbG9waThXZndVaGppWXlKeEhlS01oMHdCTnJ6ekpqTUhta2pU?= =?utf-8?B?RnBOVUUxcjE2a2IreGF3ZDBMRkkxT0hobWVaOVdxRUtGU0xaa29LK3FCQnNz?= =?utf-8?B?L1Qra04xZHF5QjlESjV2VEJQRUFXY0ZnZlhhOCtpQ053cTVOclYwaHEwWlkr?= =?utf-8?B?aUhTZldrN2lwUmFsOHQ2UUNaSGRqMHY3SmszZjMxVkpxM3NxYTdkaEE4RXNi?= =?utf-8?B?eG11OHJkdlpjazFYN0pJZ1BmME1hYlFlVTB1RTI2cWJJTmxPYkw4amNML1JZ?= =?utf-8?B?QTg1Z21WQjM3RklBL3lPQmNWY1Z0czkzTkpiMlUvM2lKVm1oNjNrNitnbGNv?= =?utf-8?B?YXRSb1B4dlpQZzFtcHVpT09oYWt5bUViMS9KVE0yeGUrbE14QmlGMDJLOS9R?= =?utf-8?B?RUtYQ2RKek1DQ3M1VTBZVjRWUUJwRE8rUVJRK1ozT2ZoTXR1OGJ1YW5TdjVi?= =?utf-8?B?Z29RS2hCMDVzYUFIV2dCSThoRThTdk9hd2U1SUIxOVBhU2RQU3BUbEx2aFV3?= =?utf-8?B?bzlyR1kyK1RaUjVJeEh1WVNzMTBjKzBGUGd2NXVJUXZtWTVhbmZOSnlZYkhr?= =?utf-8?B?eGhmWlRoTmwzTTgzMFRodmVQaHkraHFKVlVEL3krQWZvd29VamZFTEFSamVt?= =?utf-8?B?cVIycHB6WFhXMVhQbUFrUzIzcEVWajZqVEVaQzVtUmZyN2lIYTQrdnF0SC9y?= =?utf-8?B?Qk5RSEtMRXZ2UGNjdDZtNVI5R25JK3BteCtlTE9TK05OelNvbVlPc3VXc294?= =?utf-8?B?eEtMVDBzb1gySWJXYUgwZ2k2T3JKdFV3UnRhUG5FNWFsUTVGMTRQWi8zQ2tU?= =?utf-8?B?aGc3S2h5NUlrWGZmVUtKYmllMzE4ZWZCakpRYUpUUlJyVnNwc2tJSDE4N0F2?= =?utf-8?B?S2I2Y285ZGV5NVQwOWVxVFEyOHVyK0VtL2UzdzNrTlYrS1VHdXpyZlArS0hr?= =?utf-8?B?QzdETmNKbWxqM3RMMTd2NGFWdjlEWExVSllxS0FZeEJPVXpramRxaDNTTFB6?= =?utf-8?B?c01YVndaQThVd29zWDVmdmpiejExRFlBME5nUWlmR24xUnR2Ly9XR0UyN0ZE?= =?utf-8?B?YXcxS1dDb081RnZJWFRXV0xEd2xOczJETUR1Vkh1L0QzMFBpbGtUejRjRkU3?= =?utf-8?B?anBlOXZESU93V1M3WVFGbUordU1kV0FLK3ZSSy9sTDV2MEszNkliblZRVVNF?= =?utf-8?B?aGl1Z1JaNDZ0T0VNTkNIRUZ4V0IvaHlNb3NOa0V0azlxTVRFMlNDVW9wSUVZ?= =?utf-8?B?cGcxb0VtZllldkxTamluVVFhVDVtZ2hBUE9FdU16emw0WXNObmo4SGFqSFl6?= =?utf-8?B?Skh1QnVLd09wc3l6ci9GNzJ2QTFVYUdqaVFlOUdpOEtKZm1UM3h2VExVQXpt?= =?utf-8?B?dFRKclNsbU84cU1UNytHOTBPZ3RmbnJWK09JV0hFeHN2Ui9aTFhyOG53aGtT?= =?utf-8?B?L0Nzc1plZGsxbHBUdGVxMW11b3N6Z0hQRFoxUXQvZVJtY0Rtam5SV2dsMXNo?= =?utf-8?B?WTA4Uit3b0pzUmNURzFzSy9zTHNpcWgvRkRCV1U2L3h1NUhtWlNUc0dST2Mv?= =?utf-8?Q?LlVQrdLR2riqwpWb6i8DgdO5dSimUdyC+QN4jZT/RhfA3?= X-MS-Exchange-AntiSpam-MessageData-1: 9sN1bHkD+f0DeQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c5a7f60-95d7-40f1-e051-08df3ad927e2 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2026 01:07:26.3134 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yBIjRTjFMs3+nhAqw9HIkNBjNnuNE+xIpbWxlizRMmFudP+as7v34DzV8m0SBne11rSCvdpqyNi01TGr9v576w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR12MB246477 On Tue Nov 3, 2026 at 9:02 AM JST, Alexandre Courbot wrote: > From: John Hubbard > > The r000 boot protocol has the driver send GSP_INIT, the request that > carries the driver's configuration to GSP-RM, as a GMC (GPU Management > Controller) API command. GMC and RPC commands share the command queue > and its sequence counter. A GMC command always fits in one element, as > the GMC API has no continuation records. > > Add the gmc sub-module of the command queue, sibling of rpc, traits and > types definitions mirroring those of rpc and adding support for GMC messa= ges. > > The module has no user yet, and is built as dead code until the switch > to r000. > > Assisted-by: LLM > Signed-off-by: John Hubbard > Co-developed-by: Alexandre Courbot > Signed-off-by: Alexandre Courbot > --- > drivers/gpu/nova-core/gsp/cmdq.rs | 4 + > drivers/gpu/nova-core/gsp/cmdq/gmc.rs | 194 ++++++++++++++++++++++++++++= ++++++ > 2 files changed, 198 insertions(+) > > diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gs= p/cmdq.rs > index c8b103a0785d..629ab8d35f87 100644 > --- a/drivers/gpu/nova-core/gsp/cmdq.rs > +++ b/drivers/gpu/nova-core/gsp/cmdq.rs > @@ -1,6 +1,10 @@ > // SPDX-License-Identifier: GPL-2.0 > // SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & = AFFILIATES. All rights reserved. > =20 > +// The transport header of the r570 firmware carries no message type, so= nothing can produce or > +// consume a GMC message before the switch to r000. Until then the modul= e is built as dead code. > +#[expect(dead_code)] > +pub(super) mod gmc; > pub(super) mod rpc; > =20 > use core::mem; > diff --git a/drivers/gpu/nova-core/gsp/cmdq/gmc.rs b/drivers/gpu/nova-cor= e/gsp/cmdq/gmc.rs > new file mode 100644 > index 000000000000..b035f30479a8 > --- /dev/null > +++ b/drivers/gpu/nova-core/gsp/cmdq/gmc.rs > @@ -0,0 +1,194 @@ > +// SPDX-License-Identifier: GPL-2.0 > +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFIL= IATES. All rights reserved. > + > +//! Support for the GMC (GPU Management Controller) API message type on = the GSP command queue. > + > +use kernel::{ > + device, > + prelude::*, > + transmute::{ > + AsBytes, > + FromBytes, // > + }, > +}; > + > +use crate::{ > + gsp::{ > + cmdq::{ > + GspCommand, > + NoReply, // > + }, > + fw::{ > + GmcApiHeader, > + GmcCommandId, // > + }, > + }, > + sbuffer::SBufferIter, > +}; > + > +use super::{ > + Cmdq, > + CmdqInner, > + CommandElement, // > +}; nit: importing from the same module through both crate:: and super::? > + > +/// Trait implemented by types representing a GMC command to send to the= GSP. > +/// > +/// The main purpose of this trait is to provide [`Cmdq`] with the infor= mation it needs to send > +/// a given command. > +/// > +/// [`CommandToGsp::init`] in particular is responsible for initializing= the command directly > +/// into the space reserved for it in the command queue buffer. > +/// > +/// Some commands may be followed by a variable-length payload. For thes= e, the > +/// [`CommandToGsp::variable_payload_len`] and [`CommandToGsp::init_vari= able_payload`] need to be > +/// defined as well. > +pub(crate) trait CommandToGsp { > + /// Id identifying this command to the GSP. > + const COMMAND: GmcCommandId; > + > + /// Type generated by [`CommandToGsp::init`], to be written into the= command queue buffer right > + /// after the GMC API header. > + type Command: FromBytes + AsBytes; > + > + /// Type of the reply expected from the GSP, or [`NoReply`] for comm= ands that don't have a > + /// reply. > + type Reply; > + > + /// Largest reply this command accepts, in bytes. Zero for commands = that the GSP does not > + /// answer. > + const MAX_REPLY_SIZE: u32; Same issue here as patch 2 - max reply size 0 and no reply are not the same IIUC. I considered the idea of putting this on the Reply type instead. It would be simpler now, but conceptually the max reply size depends on the content of the command, not just the reply type. And in the future we might want to make this into a trait method not a constant. So lgtm. [...] > + fn write(&self, dev: &device::Device, seq: u32, dst: &mut GspCommand= <'_>) -> Result { > + let command =3D &self.0; > + let payload_size =3D command.size(); > + // Extract the areas for the GMC API header and the command itse= lf. The GSP message > + // header, the GMC API header and the command header together ar= e guaranteed to fit > + // entirely into a single page, so it's ok to only look at `dst.= contents.0` here. optional nit: add const assert for checking the sizing fits in one slot here, since it's a protocol constraint that we can check statically. Reviewed-by: Eliot Courtney