From nobody Mon Apr 6 21:10:30 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010005.outbound.protection.outlook.com [52.101.201.5]) (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 09AD536997D; Wed, 18 Mar 2026 07:14:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773818092; cv=fail; b=tX0GhFbSzLEYj9SWZN9Spoo7/g9IrCZgKXxq8HHU+ZaKvS0svOeMP2lncYXosPPgozHfL7N9cVxElETboOcvwVtWrDOtXL+2ajw0m/czMCmyUJa268nq7Cab/vGlqF8n9hLe5MuLNQ0I1RnhxEII6dGl5EK8shYu3zbsNczxxdA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773818092; c=relaxed/simple; bh=rFp6uaf9zDvzFJeNv6qc955cw2cmnae78iV5G7RMdZY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nWX4eEZWt/5xXuXSKIJWYmDadrOIzqv/waWFd7jQUWtMqEtz3u/mobIVg/B6AVIg5xMt7pXKY2EmHl2v4lS94I1DAVe6bBBXJvEqRlbi1CSwHNLbyyzCZgBLq8I3zoGJx/jkrZbGiwaLzhCqftoUZvb2PIVBlkyEUvIq7Wv+QAA= 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=AKPwnoUf; arc=fail smtp.client-ip=52.101.201.5 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="AKPwnoUf" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VZwaxe37eZJzrem/xRHwVvruq9if46KgMbONy3QTQNnrX0wK0EXllJnZjWNw0PeEpjyudlKMdIFFJTxmKQZo6ss4/ThgvJum5LA6JcfcWP8R4cKYWb9Bn0zhswYuJdUXpjsHkMKxjX6xcpMsHrHXBZcZfirchmcBguLbV5S+gGHw2u8oW6V+MaQ4lTfauA2FFoAtRw2f7EZnEypoHgjDpSBGXijMM+YCkTAku71cvbN/p8hsInBwHVa7Fm90zvTdzmhzPN9sjztmcRO0yaRsBOGQ0XtgdDB4HbjGztfuVssdujB/uDCetIsLB1FTJ+h/fX45rt4uR1n7SB0rHBPyZA== 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=tClHci7fxYft/7PmokBkFk1eAC7nNgP4dW+aJP6036Q=; b=Ffd1yAUzn/1xVpm4LzzuIr/moKUkQqVnCWxDJScW+7TMBSgShqTpWKUplYsGIunMGuwF1P3Qvix5BOEuvexM5cQy40Wqq3or57jBk4sTpS2QHlXnlVCct4n83LLt0M8HFu5O45kw574hTt8TyDsO9HN9A2bbQbReZmL6vAp/7GTAL2dEZgcU7fF4amyhMk41NUUv0CTPyQlncFg8PbG2JSOaXwUWBWjoPBwnyE+L4poYa9T487m3zBktmk0uSIpkyAdYW6KI5VJ9o0VVsdvGnWckradchvtAPcY3zL2n1P1aHvfKJ+jaXBLxtv+zbbk2ytlAJADquObLUQwpLq6wDQ== 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=tClHci7fxYft/7PmokBkFk1eAC7nNgP4dW+aJP6036Q=; b=AKPwnoUfE8WJ3jf5D0UreOGd8SrhrohGCjwBshlmf/XlefRd4ujhrxZtIoLj0AcJ4TOhtMNlgq1MuuzEaS4S5gn9d34wDrWaLqj8j1i2aPoml1t3vwo+zbxqg9z/kpbTrRK+/MWc5eANmgRQbC4WS9SzoR63DthXwLavmRP27K3BG5qLbp1i3HmguQDa0W1R8d+XrQAuiGqvaonRYHvwrM2NV4/71v+Gm5/HiN9e5KvUUDKGDjhyJZXdXsf8IBRcFCNu3luZq9NVGmG7eFGiKZ9EroMRH7Z42u5S+Tw1IdIAnwfKmPTKzAllakoIeEIp4c2qHyDm9F0vt5AgBOG7kw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MN0PR12MB5764.namprd12.prod.outlook.com (2603:10b6:208:377::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.16; Wed, 18 Mar 2026 07:14:43 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9723.016; Wed, 18 Mar 2026 07:14:43 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 16:13:58 +0900 Subject: [PATCH v2 2/9] gpu: nova-core: gsp: add NvStatus enum for RM control errors Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260318-rmcontrol-v2-2-9a9fa6f1c4c3@nvidia.com> References: <20260318-rmcontrol-v2-0-9a9fa6f1c4c3@nvidia.com> In-Reply-To: <20260318-rmcontrol-v2-0-9a9fa6f1c4c3@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.14.3 X-ClientProxiedBy: SJ0PR05CA0048.namprd05.prod.outlook.com (2603:10b6:a03:33f::23) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) 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: BL0PR12MB2353:EE_|MN0PR12MB5764:EE_ X-MS-Office365-Filtering-Correlation-Id: 822e6320-c914-470f-40f6-08de84be0740 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|10070799003|366016|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: nGJtPYYUOW4uz3DiAc3nt3kY/J+LRtuX9Wa+v/kuyc/b8TOkdyjmUJqc7N+MAPWmG5KXOgewUOlo63DRyGOyeiWXxOiREKVWlsLixNXtzF03gzSVatELS9H6M54DxLIMoEx98OE2cSjMb+zSwNhlc1Cn8nLvWRWYMhdnzTnQVrsC+GcSatDhryAjnLCaqyCJaoiEV+otmfVAHt1+9153nSr7QkeeszjBa8pj08kYtzBvJSjyECeUZM6a/4bubMeeAU/mWZGEH9ocPDybpW+JwXr1CqPN0iWDt1uWUQ3bta88vHaKVOTuXv+07B0PuI0pfJu8quADbLOaCPLCf0VnyakH7ow8qemuaSfgWpACXXLv8kdsOIj8RAnRovxpV6gL8e7nOkHJCGKJwqVjyEy/w2Sxze/bcaRmZimq1EsvOOX71AMgGosofscTJI2j2tAxFTwdey2nuu61CKt7AUZJUvGSGa69kpGOkImhJUyPndeyYksiuCb4BqT8dt9Mw16yleA4jPjUSs99ewd9Hl7Bp/DOUpfD7V3rwyZ3NQC8veEC/GOjcwbl/gNYzKwYRky92S8Bfnf7j3YjaOP7hWn8AVOHcoyCcJssDvCZy2i0IInwRVrZxHAPsUfdfv85rtSozqAL5pdeBcyL41mGiCOC0+1GPlXgxyXwkbISbMz7SUO5fqVzf1NNIH/e9D48mdO1gFzHg8sB0pX7RbD1vgtIGza/vOFbcVakMWtwGVGDlWo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(10070799003)(366016)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VkszNlBwU1U1cnlYOW9xMGtzcHR6TTUwcmZJekFnSnFGYkJRQURrL2RxNGFv?= =?utf-8?B?eU1EZ1JLczRYVnpDNWZzbklHRWN0Y2JSZjBPcGNTdEM5ZlhCQ1FmQTFLZVVR?= =?utf-8?B?bjhuWjkyTDh5RFFabUZOaUxXWTB3b3NGTTU1bDhUOTcrQU5XY3dUazJqVUtx?= =?utf-8?B?RHU0NWNEeUt0dVFSb1UwSlN6NGljUjRSRDlnYUVETXNLanRoZXJZazNxWm1i?= =?utf-8?B?NFc5eXlUQXE4Tjl0RWtQK21UVzh0TUhlalRqUk1UbHhXMFR1UWVxUUpueit3?= =?utf-8?B?MXRPSmtLdGhHeE5Oc2lqcnd2a1BPZTZXclh0Z3cvNkpvMU5jUnZQem01bWxK?= =?utf-8?B?bnA3SHUzeXdNakdSWi9GOEhLUlBpTzJmMld1MXl0dEQ3c3NMVkhESjNnQ3FE?= =?utf-8?B?YXZDaFFodDdlUnNBZ1RKYkkzUVFBOElmS28zTktYM0dPMk56QUxVTzR3NTlz?= =?utf-8?B?MWFKQkJ4aHB5SG50Ull4S2JmNnhYbFE2ZURwS1QxdS9saWlWYURCdWVYMjFZ?= =?utf-8?B?eXJkMXdWWlVvVytsaUxCb1JnRFJEVEw3K3RGM25IKzBOeThyV3VWcTRCdUFh?= =?utf-8?B?aGhCcXZFQlBmVGVBd2Znd1JqYW5WQVZMR2tBUnV4amluMWxHUTlLWk81dFV2?= =?utf-8?B?b2xtK1Qwb1pIRUVFcEVnUWJ1bWMxYUw4Q1BtYitCUlFNaDBtbGRkTzNGR1Jr?= =?utf-8?B?OGlYdkRWcFZiT1I1bHRvMEQwdFhmNTVmUG94a3h0M011YUJLS1NoNzhNem54?= =?utf-8?B?NEhwUUhOZjIwTzgxWVBsNHJTN3ZQM1lLWUk3dlJuNmhXS3NXVVRHUURVMm1z?= =?utf-8?B?THNLUVBhd2NiVnZaRXFMektidGxzS1gwVEt5ZDN4eDhhc2Q2RjNycm1WdC84?= =?utf-8?B?T09QU3plbFVYbGZnYzhxakh1bndLNzRBY01tR3FYVS83K25NaEE5TjFOc25X?= =?utf-8?B?RW5qSDZyQnl3eFR1NkxlUGxoZlRoTzgxQWZYTGtPY3AwbUZpcHRWK2tCeVZ6?= =?utf-8?B?M09rVFM1M0ZUSUFETHgwcWlSS0ZlbEJ1c3QzYzllV25jQThQSVZoZkRyYTR6?= =?utf-8?B?ak14UDlORG0wOGl0UlBVc0xrZ1QwK3VQQjVLVDJvY1lja2hSZEExMWtNclZq?= =?utf-8?B?ejlWOWRYODc5MVFxNnBrVVJTT2NpSUR1RnQwZHJ5ME54cVQ5cGQweU1rbzlu?= =?utf-8?B?eE9hZ1FScHdVU3hvekxjQ0xsQzcxakdmb1Y3eExObVFaNktZbFc0YVJqd0Mw?= =?utf-8?B?Y1lwSFFnY3J4TzJhUlhwV01NMlZNcytKd1RQRVVwQ2xrRXZsQjQ5K2VVdzlN?= =?utf-8?B?cmdIMmt0RFBaZTdMZzZpZ0lUeVBFbTFGdTJLVWh2a1lkd3RDeTVQZGYwRFdP?= =?utf-8?B?RnJ2bnhkbTJXekRtYzFha1RzTXRoeS9NY04rOGdnaHUyU2luQUtQZk1VNlNs?= =?utf-8?B?NjNOWEhyN3FKSTVyZDRLVVJ4RHg0RG5vcTRmbThkTmtvSDh4THpoc0F1SnNL?= =?utf-8?B?dmJkSENOa1BscVhSTytuMWhEbHA5cmYyT05lWTBJV2c0Y2ZnRnE0U0JvWDFq?= =?utf-8?B?dmdEbmFTbFhTeXdKczVFcm82NFZWRVNTeFAyMHlmYjlmQnZCdWlGZTVsaDgr?= =?utf-8?B?Uk9ZZU4xQ2ZnK2pDajdUd2d1Q3JQa204cytXamJxMGRiZUxtdjdLYmZCUlhG?= =?utf-8?B?MjNjTWdVaEpjRlhLTU5nU1liZC8yUFcrUDJsOXNITkgxT2M1RkFOaUdaRFVa?= =?utf-8?B?TmZyVFc0QXA3MXMzYkMwZkhkeDBVQVlqTk1jK2s0dHZzZlhGaktTODhIZi9L?= =?utf-8?B?VUJwYUFlU2Q4YlBRenMzcFUrbDNTYko2anVvZ0VhQ1c2QUVMV1lobjQvaXF0?= =?utf-8?B?TE1hejFUcXRMMEoxZGE4alVYT3VYRzlETmZyYVNFTkJUdGIxdStxUkF4SElB?= =?utf-8?B?YVIrZFlla1M1U09YeERtVVRvMDB0ZU5Tcml4OEgzTHpkSVgwek0ycmc4cmdn?= =?utf-8?B?TFFqUkNudmZmTWxjMG9Ma0NRVUZzVzJJRXV5VUcrdE9OekZOUER0Z0IvS3ND?= =?utf-8?B?d3RybUtxSHkvelZzSDMwbjcwbjBYc1FHWWh4YiswWVlodzVrUmhlYUtHd0Fs?= =?utf-8?B?eHJVTkxwMDRBa21sZE5LN3VUNlpMY2cyR2RSKzdpdjY5bVA3dlA3UThtQk9C?= =?utf-8?B?ejc5a0dKMEdyS0JhQ2dXMmZTcjlQdXgzc1N0OWtRYjZCMXlEc3J2K0tjNlhF?= =?utf-8?B?dzBtd0wyNFNHVEFOblBSU2FwRDB1WXVZb3FaZFI1QzNsVEx3Y1VaWnZ0Z2k3?= =?utf-8?B?SlNyMXA2dEdEeUUyRi9vOXdKYVJEY3l5MjZvZllZWnlXZ05wMnpIelM3RVJL?= =?utf-8?Q?d0Cp9v7EsGMWGciJrBkxv53UwZQuhgNS5phtmmEKVDZ9G?= X-MS-Exchange-AntiSpam-MessageData-1: wp3g4ZknM4f5Lg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 822e6320-c914-470f-40f6-08de84be0740 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 07:14:43.6020 (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: apoOCO8BFjINWVW0Q6b7p+8d0SJ68RRQBAWgHaSZsfDDnQOwnoTfFjuToCAFJ77a0CA7VHC2QZlQdmutF8xRCQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5764 Add NvStatus enum that wraps the raw NV_STATUS u32 codes returned by RM control RPCs. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/fw.rs | 401 ++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 401 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index a061131b5412..37831034ec3e 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -112,6 +112,407 @@ pub(in crate::gsp) fn advance_cpu_write_ptr(qs: &Cohe= rentAllocation, cou pub(crate) const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: usize =3D num::u32_as_usize(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX); =20 +/// Status code returned by GSP-RM RPCs. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub(crate) enum NvStatus { + Ok, + AlreadySignalled, + BrokenFb, + BufferTooSmall, + BusyRetry, + CallbackNotScheduled, + CardNotPresent, + CycleDetected, + DmaInUse, + DmaMemNotLocked, + DmaMemNotUnlocked, + DualLinkInuse, + EccError, + FabricManagerNotPresent, + FatalError, + FeatureNotEnabled, + FifoBadAccess, + FlcnError, + FreqNotSupported, + Generic, + GpuDmaNotInitialized, + GpuInDebugMode, + GpuInFullchipReset, + GpuIsLost, + GpuMemoryOnliningFailure, + GpuNotFullPower, + GpuUuidNotFound, + HotSwitch, + I2cError, + I2cSpeedTooHigh, + IllegalAction, + InUse, + InflateCompressedDataFailed, + InsertDuplicateName, + InsufficientPermissions, + InsufficientPower, + InsufficientResources, + InsufficientZbcEntry, + InvalidAccessType, + InvalidAddress, + InvalidArgument, + InvalidBase, + InvalidChannel, + InvalidClass, + InvalidClient, + InvalidCommand, + InvalidData, + InvalidDevice, + InvalidDmaSpecifier, + InvalidEvent, + InvalidFlags, + InvalidFunction, + InvalidHeap, + InvalidIndex, + InvalidIrqLevel, + InvalidLicense, + InvalidLimit, + InvalidLockState, + InvalidMethod, + InvalidObject, + InvalidObjectBuffer, + InvalidObjectHandle, + InvalidObjectNew, + InvalidObjectOld, + InvalidObjectParent, + InvalidOffset, + InvalidOperation, + InvalidOwner, + InvalidParamStruct, + InvalidParameter, + InvalidPath, + InvalidPointer, + InvalidRead, + InvalidRegistryKey, + InvalidRequest, + InvalidState, + InvalidStringLength, + InvalidWrite, + InvalidXlate, + IrqEdgeTriggered, + IrqNotFiring, + KeyRotationInProgress, + LibRmVersionMismatch, + MaxSessionLimitReached, + MemoryError, + MemoryTrainingFailed, + MismatchedSlave, + MismatchedTarget, + MissingTableEntry, + ModuleLoadFailed, + MoreDataAvailable, + MoreProcessingRequired, + MultipleMemoryTypes, + NoFreeFifos, + NoIntrPending, + NoMemory, + NoSuchDomain, + NoValidPath, + NotCompatible, + NotReady, + NotSupported, + NvlinkClockError, + NvlinkConfigurationError, + NvlinkFabricFailure, + NvlinkFabricNotReady, + NvlinkInitError, + NvlinkMinionError, + NvlinkTrainingError, + ObjectNotFound, + ObjectTypeMismatch, + OperatingSystem, + OtherDeviceFound, + OutOfRange, + OverlappingUvmCommit, + PageTableNotAvail, + PidNotFound, + PmuNotReady, + PrivSecViolation, + ProtectionFault, + QueueTaskSlotNotAvailable, + RcError, + ReductionManagerNotAvailable, + RejectedVbios, + ResetRequired, + ResourceLost, + ResourceRetirementError, + RiscvError, + SecureBootFailed, + SignalPending, + StateInUse, + TestOnlyCodeNotEnabled, + Timeout, + TimeoutRetry, + TooManyPrimaries, + UvmAddressInUse, + Unknown(u32), +} + +impl From for Result { + fn from(status: NvStatus) -> Self { + match status { + NvStatus::Ok =3D> Ok(()), + + NvStatus::BufferTooSmall | NvStatus::MoreDataAvailable =3D> Er= r(EMSGSIZE), + + NvStatus::BusyRetry + | NvStatus::DmaInUse + | NvStatus::DualLinkInuse + | NvStatus::GpuInFullchipReset + | NvStatus::InUse + | NvStatus::KeyRotationInProgress + | NvStatus::NotReady + | NvStatus::NvlinkFabricNotReady + | NvStatus::PmuNotReady + | NvStatus::StateInUse + | NvStatus::UvmAddressInUse =3D> Err(EBUSY), + + NvStatus::CardNotPresent + | NvStatus::FabricManagerNotPresent + | NvStatus::InvalidDevice + | NvStatus::ReductionManagerNotAvailable =3D> Err(ENODEV), + + NvStatus::FeatureNotEnabled + | NvStatus::FreqNotSupported + | NvStatus::NotSupported + | NvStatus::TestOnlyCodeNotEnabled =3D> Err(ENOTSUPP), + + NvStatus::GpuUuidNotFound + | NvStatus::MissingTableEntry + | NvStatus::NoSuchDomain + | NvStatus::NoValidPath + | NvStatus::ObjectNotFound =3D> Err(ENOENT), + + NvStatus::I2cSpeedTooHigh + | NvStatus::InvalidAccessType + | NvStatus::InvalidArgument + | NvStatus::InvalidBase + | NvStatus::InvalidChannel + | NvStatus::InvalidClass + | NvStatus::InvalidClient + | NvStatus::InvalidCommand + | NvStatus::InvalidData + | NvStatus::InvalidDmaSpecifier + | NvStatus::InvalidEvent + | NvStatus::InvalidFlags + | NvStatus::InvalidFunction + | NvStatus::InvalidHeap + | NvStatus::InvalidIndex + | NvStatus::InvalidIrqLevel + | NvStatus::InvalidLimit + | NvStatus::InvalidLockState + | NvStatus::InvalidMethod + | NvStatus::InvalidObject + | NvStatus::InvalidObjectBuffer + | NvStatus::InvalidObjectHandle + | NvStatus::InvalidObjectNew + | NvStatus::InvalidObjectOld + | NvStatus::InvalidObjectParent + | NvStatus::InvalidOffset + | NvStatus::InvalidOperation + | NvStatus::InvalidOwner + | NvStatus::InvalidParamStruct + | NvStatus::InvalidParameter + | NvStatus::InvalidPath + | NvStatus::InvalidRegistryKey + | NvStatus::InvalidRequest + | NvStatus::InvalidState + | NvStatus::InvalidStringLength + | NvStatus::InvalidXlate + | NvStatus::LibRmVersionMismatch + | NvStatus::MismatchedSlave + | NvStatus::MismatchedTarget + | NvStatus::MultipleMemoryTypes + | NvStatus::NotCompatible + | NvStatus::ObjectTypeMismatch + | NvStatus::OverlappingUvmCommit + | NvStatus::RejectedVbios =3D> Err(EINVAL), + + NvStatus::IllegalAction =3D> Err(EPERM), + + NvStatus::InsertDuplicateName =3D> Err(EEXIST), + + NvStatus::InsufficientPermissions + | NvStatus::InvalidLicense + | NvStatus::PrivSecViolation =3D> Err(EACCES), + + NvStatus::InsufficientResources | NvStatus::NoMemory | NvStatu= s::PageTableNotAvail =3D> { + Err(ENOMEM) + } + + NvStatus::InsufficientZbcEntry + | NvStatus::MaxSessionLimitReached + | NvStatus::NoFreeFifos + | NvStatus::QueueTaskSlotNotAvailable + | NvStatus::TooManyPrimaries =3D> Err(ENOSPC), + + NvStatus::InvalidAddress | NvStatus::InvalidPointer | NvStatus= ::ProtectionFault =3D> { + Err(EFAULT) + } + + NvStatus::MoreProcessingRequired | NvStatus::TimeoutRetry =3D>= Err(EAGAIN), + + NvStatus::OutOfRange =3D> Err(ERANGE), + + NvStatus::PidNotFound =3D> Err(ESRCH), + + NvStatus::SignalPending =3D> Err(EINTR), + + NvStatus::Timeout =3D> Err(ETIMEDOUT), + + _ =3D> Err(EIO), + } + } +} + +impl From for NvStatus { + fn from(value: u32) -> Self { + match value { + bindings::NV_OK =3D> Self::Ok, + bindings::NV_ERR_ALREADY_SIGNALLED =3D> Self::AlreadySignalled, + bindings::NV_ERR_BROKEN_FB =3D> Self::BrokenFb, + bindings::NV_ERR_BUFFER_TOO_SMALL =3D> Self::BufferTooSmall, + bindings::NV_ERR_BUSY_RETRY =3D> Self::BusyRetry, + bindings::NV_ERR_CALLBACK_NOT_SCHEDULED =3D> Self::CallbackNot= Scheduled, + bindings::NV_ERR_CARD_NOT_PRESENT =3D> Self::CardNotPresent, + bindings::NV_ERR_CYCLE_DETECTED =3D> Self::CycleDetected, + bindings::NV_ERR_DMA_IN_USE =3D> Self::DmaInUse, + bindings::NV_ERR_DMA_MEM_NOT_LOCKED =3D> Self::DmaMemNotLocked, + bindings::NV_ERR_DMA_MEM_NOT_UNLOCKED =3D> Self::DmaMemNotUnlo= cked, + bindings::NV_ERR_DUAL_LINK_INUSE =3D> Self::DualLinkInuse, + bindings::NV_ERR_ECC_ERROR =3D> Self::EccError, + bindings::NV_ERR_FABRIC_MANAGER_NOT_PRESENT =3D> Self::FabricM= anagerNotPresent, + bindings::NV_ERR_FATAL_ERROR =3D> Self::FatalError, + bindings::NV_ERR_FEATURE_NOT_ENABLED =3D> Self::FeatureNotEnab= led, + bindings::NV_ERR_FIFO_BAD_ACCESS =3D> Self::FifoBadAccess, + bindings::NV_ERR_FLCN_ERROR =3D> Self::FlcnError, + bindings::NV_ERR_FREQ_NOT_SUPPORTED =3D> Self::FreqNotSupporte= d, + bindings::NV_ERR_GENERIC =3D> Self::Generic, + bindings::NV_ERR_GPU_DMA_NOT_INITIALIZED =3D> Self::GpuDmaNotI= nitialized, + bindings::NV_ERR_GPU_IN_DEBUG_MODE =3D> Self::GpuInDebugMode, + bindings::NV_ERR_GPU_IN_FULLCHIP_RESET =3D> Self::GpuInFullchi= pReset, + bindings::NV_ERR_GPU_IS_LOST =3D> Self::GpuIsLost, + bindings::NV_ERR_GPU_MEMORY_ONLINING_FAILURE =3D> Self::GpuMem= oryOnliningFailure, + bindings::NV_ERR_GPU_NOT_FULL_POWER =3D> Self::GpuNotFullPower, + bindings::NV_ERR_GPU_UUID_NOT_FOUND =3D> Self::GpuUuidNotFound, + bindings::NV_ERR_HOT_SWITCH =3D> Self::HotSwitch, + bindings::NV_ERR_I2C_ERROR =3D> Self::I2cError, + bindings::NV_ERR_I2C_SPEED_TOO_HIGH =3D> Self::I2cSpeedTooHigh, + bindings::NV_ERR_ILLEGAL_ACTION =3D> Self::IllegalAction, + bindings::NV_ERR_IN_USE =3D> Self::InUse, + bindings::NV_ERR_INFLATE_COMPRESSED_DATA_FAILED =3D> Self::Inf= lateCompressedDataFailed, + bindings::NV_ERR_INSERT_DUPLICATE_NAME =3D> Self::InsertDuplic= ateName, + bindings::NV_ERR_INSUFFICIENT_PERMISSIONS =3D> Self::Insuffici= entPermissions, + bindings::NV_ERR_INSUFFICIENT_POWER =3D> Self::InsufficientPow= er, + bindings::NV_ERR_INSUFFICIENT_RESOURCES =3D> Self::Insufficien= tResources, + bindings::NV_ERR_INSUFFICIENT_ZBC_ENTRY =3D> Self::Insufficien= tZbcEntry, + bindings::NV_ERR_INVALID_ACCESS_TYPE =3D> Self::InvalidAccessT= ype, + bindings::NV_ERR_INVALID_ADDRESS =3D> Self::InvalidAddress, + bindings::NV_ERR_INVALID_ARGUMENT =3D> Self::InvalidArgument, + bindings::NV_ERR_INVALID_BASE =3D> Self::InvalidBase, + bindings::NV_ERR_INVALID_CHANNEL =3D> Self::InvalidChannel, + bindings::NV_ERR_INVALID_CLASS =3D> Self::InvalidClass, + bindings::NV_ERR_INVALID_CLIENT =3D> Self::InvalidClient, + bindings::NV_ERR_INVALID_COMMAND =3D> Self::InvalidCommand, + bindings::NV_ERR_INVALID_DATA =3D> Self::InvalidData, + bindings::NV_ERR_INVALID_DEVICE =3D> Self::InvalidDevice, + bindings::NV_ERR_INVALID_DMA_SPECIFIER =3D> Self::InvalidDmaSp= ecifier, + bindings::NV_ERR_INVALID_EVENT =3D> Self::InvalidEvent, + bindings::NV_ERR_INVALID_FLAGS =3D> Self::InvalidFlags, + bindings::NV_ERR_INVALID_FUNCTION =3D> Self::InvalidFunction, + bindings::NV_ERR_INVALID_HEAP =3D> Self::InvalidHeap, + bindings::NV_ERR_INVALID_INDEX =3D> Self::InvalidIndex, + bindings::NV_ERR_INVALID_IRQ_LEVEL =3D> Self::InvalidIrqLevel, + bindings::NV_ERR_INVALID_LICENSE =3D> Self::InvalidLicense, + bindings::NV_ERR_INVALID_LIMIT =3D> Self::InvalidLimit, + bindings::NV_ERR_INVALID_LOCK_STATE =3D> Self::InvalidLockStat= e, + bindings::NV_ERR_INVALID_METHOD =3D> Self::InvalidMethod, + bindings::NV_ERR_INVALID_OBJECT =3D> Self::InvalidObject, + bindings::NV_ERR_INVALID_OBJECT_BUFFER =3D> Self::InvalidObjec= tBuffer, + bindings::NV_ERR_INVALID_OBJECT_HANDLE =3D> Self::InvalidObjec= tHandle, + bindings::NV_ERR_INVALID_OBJECT_NEW =3D> Self::InvalidObjectNe= w, + bindings::NV_ERR_INVALID_OBJECT_OLD =3D> Self::InvalidObjectOl= d, + bindings::NV_ERR_INVALID_OBJECT_PARENT =3D> Self::InvalidObjec= tParent, + bindings::NV_ERR_INVALID_OFFSET =3D> Self::InvalidOffset, + bindings::NV_ERR_INVALID_OPERATION =3D> Self::InvalidOperation, + bindings::NV_ERR_INVALID_OWNER =3D> Self::InvalidOwner, + bindings::NV_ERR_INVALID_PARAM_STRUCT =3D> Self::InvalidParamS= truct, + bindings::NV_ERR_INVALID_PARAMETER =3D> Self::InvalidParameter, + bindings::NV_ERR_INVALID_PATH =3D> Self::InvalidPath, + bindings::NV_ERR_INVALID_POINTER =3D> Self::InvalidPointer, + bindings::NV_ERR_INVALID_READ =3D> Self::InvalidRead, + bindings::NV_ERR_INVALID_REGISTRY_KEY =3D> Self::InvalidRegist= ryKey, + bindings::NV_ERR_INVALID_REQUEST =3D> Self::InvalidRequest, + bindings::NV_ERR_INVALID_STATE =3D> Self::InvalidState, + bindings::NV_ERR_INVALID_STRING_LENGTH =3D> Self::InvalidStrin= gLength, + bindings::NV_ERR_INVALID_WRITE =3D> Self::InvalidWrite, + bindings::NV_ERR_INVALID_XLATE =3D> Self::InvalidXlate, + bindings::NV_ERR_IRQ_EDGE_TRIGGERED =3D> Self::IrqEdgeTriggere= d, + bindings::NV_ERR_IRQ_NOT_FIRING =3D> Self::IrqNotFiring, + bindings::NV_ERR_KEY_ROTATION_IN_PROGRESS =3D> Self::KeyRotati= onInProgress, + bindings::NV_ERR_LIB_RM_VERSION_MISMATCH =3D> Self::LibRmVersi= onMismatch, + bindings::NV_ERR_MAX_SESSION_LIMIT_REACHED =3D> Self::MaxSessi= onLimitReached, + bindings::NV_ERR_MEMORY_ERROR =3D> Self::MemoryError, + bindings::NV_ERR_MEMORY_TRAINING_FAILED =3D> Self::MemoryTrain= ingFailed, + bindings::NV_ERR_MISMATCHED_SLAVE =3D> Self::MismatchedSlave, + bindings::NV_ERR_MISMATCHED_TARGET =3D> Self::MismatchedTarget, + bindings::NV_ERR_MISSING_TABLE_ENTRY =3D> Self::MissingTableEn= try, + bindings::NV_ERR_MODULE_LOAD_FAILED =3D> Self::ModuleLoadFaile= d, + bindings::NV_ERR_MORE_DATA_AVAILABLE =3D> Self::MoreDataAvaila= ble, + bindings::NV_ERR_MORE_PROCESSING_REQUIRED =3D> Self::MoreProce= ssingRequired, + bindings::NV_ERR_MULTIPLE_MEMORY_TYPES =3D> Self::MultipleMemo= ryTypes, + bindings::NV_ERR_NO_FREE_FIFOS =3D> Self::NoFreeFifos, + bindings::NV_ERR_NO_INTR_PENDING =3D> Self::NoIntrPending, + bindings::NV_ERR_NO_MEMORY =3D> Self::NoMemory, + bindings::NV_ERR_NO_SUCH_DOMAIN =3D> Self::NoSuchDomain, + bindings::NV_ERR_NO_VALID_PATH =3D> Self::NoValidPath, + bindings::NV_ERR_NOT_COMPATIBLE =3D> Self::NotCompatible, + bindings::NV_ERR_NOT_READY =3D> Self::NotReady, + bindings::NV_ERR_NOT_SUPPORTED =3D> Self::NotSupported, + bindings::NV_ERR_NVLINK_CLOCK_ERROR =3D> Self::NvlinkClockErro= r, + bindings::NV_ERR_NVLINK_CONFIGURATION_ERROR =3D> Self::NvlinkC= onfigurationError, + bindings::NV_ERR_NVLINK_FABRIC_FAILURE =3D> Self::NvlinkFabric= Failure, + bindings::NV_ERR_NVLINK_FABRIC_NOT_READY =3D> Self::NvlinkFabr= icNotReady, + bindings::NV_ERR_NVLINK_INIT_ERROR =3D> Self::NvlinkInitError, + bindings::NV_ERR_NVLINK_MINION_ERROR =3D> Self::NvlinkMinionEr= ror, + bindings::NV_ERR_NVLINK_TRAINING_ERROR =3D> Self::NvlinkTraini= ngError, + bindings::NV_ERR_OBJECT_NOT_FOUND =3D> Self::ObjectNotFound, + bindings::NV_ERR_OBJECT_TYPE_MISMATCH =3D> Self::ObjectTypeMis= match, + bindings::NV_ERR_OPERATING_SYSTEM =3D> Self::OperatingSystem, + bindings::NV_ERR_OTHER_DEVICE_FOUND =3D> Self::OtherDeviceFoun= d, + bindings::NV_ERR_OUT_OF_RANGE =3D> Self::OutOfRange, + bindings::NV_ERR_OVERLAPPING_UVM_COMMIT =3D> Self::Overlapping= UvmCommit, + bindings::NV_ERR_PAGE_TABLE_NOT_AVAIL =3D> Self::PageTableNotA= vail, + bindings::NV_ERR_PID_NOT_FOUND =3D> Self::PidNotFound, + bindings::NV_ERR_PMU_NOT_READY =3D> Self::PmuNotReady, + bindings::NV_ERR_PRIV_SEC_VIOLATION =3D> Self::PrivSecViolatio= n, + bindings::NV_ERR_PROTECTION_FAULT =3D> Self::ProtectionFault, + bindings::NV_ERR_QUEUE_TASK_SLOT_NOT_AVAILABLE =3D> Self::Queu= eTaskSlotNotAvailable, + bindings::NV_ERR_RC_ERROR =3D> Self::RcError, + bindings::NV_ERR_REDUCTION_MANAGER_NOT_AVAILABLE =3D> Self::Re= ductionManagerNotAvailable, + bindings::NV_ERR_REJECTED_VBIOS =3D> Self::RejectedVbios, + bindings::NV_ERR_RESET_REQUIRED =3D> Self::ResetRequired, + bindings::NV_ERR_RESOURCE_LOST =3D> Self::ResourceLost, + bindings::NV_ERR_RESOURCE_RETIREMENT_ERROR =3D> Self::Resource= RetirementError, + bindings::NV_ERR_RISCV_ERROR =3D> Self::RiscvError, + bindings::NV_ERR_SECURE_BOOT_FAILED =3D> Self::SecureBootFaile= d, + bindings::NV_ERR_SIGNAL_PENDING =3D> Self::SignalPending, + bindings::NV_ERR_STATE_IN_USE =3D> Self::StateInUse, + bindings::NV_ERR_TEST_ONLY_CODE_NOT_ENABLED =3D> Self::TestOnl= yCodeNotEnabled, + bindings::NV_ERR_TIMEOUT =3D> Self::Timeout, + bindings::NV_ERR_TIMEOUT_RETRY =3D> Self::TimeoutRetry, + bindings::NV_ERR_TOO_MANY_PRIMARIES =3D> Self::TooManyPrimarie= s, + bindings::NV_ERR_UVM_ADDRESS_IN_USE =3D> Self::UvmAddressInUse, + other =3D> Self::Unknown(other), + } + } +} + /// Empty type to group methods related to heap parameters for running the= GSP firmware. enum GspFwHeapParams {} =20 --=20 2.53.0