From nobody Fri Apr 3 02:58:17 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010011.outbound.protection.outlook.com [52.101.56.11]) (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 132943D903E; Wed, 25 Mar 2026 12:14:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774440845; cv=fail; b=cGWVecMUqJABz1pIv4XA/zzR7ZUXVDB7504c4TvhuMwWU5zP8hMMM7BRmzN0bWtpTfzwtnyFWdaUDsoB0lJwVx5S5qFt83IQbledCsLH2YymObdu2UhF4U0a2swpHDJz4FEOFTmWF+yHQ+/sOdXaNS4yB1FTLBUq42QUxfEYtUI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774440845; c=relaxed/simple; bh=gOPcGgnOHWqoCnzn5aAOLPlUKdEEEzU/Wrm0WLrLij4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=dYIEDU0inAEA7lKGCRPdEhCGBJ7fLLNeoTWnBKiJgdPn40IfvftxyMr//2EF0ZHYPmMKQPf9LhymHCO17REaRcmJcoENpUU8GJ7S1wXL+6OfpVqNtPi05btC+whrgbF0FuXd3wshhv9ePvLLoE35x+zGQHZR8QXQ2OfAnRPRWx8= 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=FDYLL/8I; arc=fail smtp.client-ip=52.101.56.11 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="FDYLL/8I" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fseDHAnvtezJ5TWbM0rL3F473Tn5Q/6lMzC1TPkb1hdCwwQwSqY7T/m3D87ZCTFOEFAFOSBThql51WRLN6uW1YDJ2hegmDTrw5fLer+m/be9UA72eLB8XQVMX5A815ga5UfDEQaha7DkfGuRLxaauFwIWjc2WY+Yx1R0akJXJKOs46yyeZKbH95MfCeO2YDDK0L2eEdoQ/+ZdG0B8LjXkmeZvUaIcsAge1gsFcmWLURo50FUSqml0hapHteL3XKWUtVC22bsscDE+uvUZZeg329Dg7w/iH5bUlgRNAl6MA59A3I8ZUbhulsmN092pXlZVFQlmmz4HMnX/Ti93XA6XQ== 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=d3rhb5WgWWz6atyvtVrDptA1s76ZL3JwNecug9mDQ4Y=; b=rXyvnRhM0PpU1TCOYSQkmQtERp7OFm4vKJTt+OGTMnTf4knlGsX+qWHUH/JUjGjplsTKPntViT/hpfaYOTfMsPt79ojOk/aN2qYD3Dog/nkYuf4pE0IU7z7TBMWtFZIuw99WF6Ko82zoFtFoN/ECn1vgYWncTSqn409/rSpMSBIyMquaJ59JyQ21EJ51KBpzNSlDS+ydQd8HWQUdieFu5nP+28Rf68o04V7ydifCEWT9hS10FBcfHW4pBODMJZEKslHkxzTK75CUI1IaFKbHH1qt3m/YG6SdAxwSjBevzOvzWPK2X+3xdQ59sTmbYxAEQ149zs3ZtTT8GtpmI09aCQ== 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=d3rhb5WgWWz6atyvtVrDptA1s76ZL3JwNecug9mDQ4Y=; b=FDYLL/8IVhc32VTMRONcn/e4oLx/+wwepGKneYVC3hXFlPFNjZ/rP8Devc60Nuho/ecfJU19E14r0C38nEchzlFcV6elpZ2k5ZR8fERGm12hkDcE5PVDiUGZVhLGypCyj+gTOhjCoRgBYSMVH8DQF8msIAchL0YmkOR6T6OXrPfyAygQk85HdKQ2DRNPW7+ogire1XyRctYdOIP53yIilTGLLlDrUIERDWLL4ZDo8c/yE6aszm/ALqe/h1ImDd9W3Alcx1XIoCEU0DG/pRf8u55BOkQRAYpa+Amj8gtwk9o3Pr6bm33cxwT2iFnlfhNdkW5PzVrxAPhzicxURLZVRw== 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 DM6PR12MB4298.namprd12.prod.outlook.com (2603:10b6:5:21e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Wed, 25 Mar 2026 12:13:56 +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.9769.006; Wed, 25 Mar 2026 12:13:56 +0000 From: Eliot Courtney Date: Wed, 25 Mar 2026 21:13:40 +0900 Subject: [PATCH v3 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: <20260325-rmcontrol-v3-2-f3101093484e@nvidia.com> References: <20260325-rmcontrol-v3-0-f3101093484e@nvidia.com> In-Reply-To: <20260325-rmcontrol-v3-0-f3101093484e@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.15.0 X-ClientProxiedBy: BY5PR13CA0022.namprd13.prod.outlook.com (2603:10b6:a03:180::35) 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_|DM6PR12MB4298:EE_ X-MS-Office365-Filtering-Correlation-Id: 33f10fb9-4115-45ba-184d-08de8a67fcd9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: PnUmt0JkEXwyia+XQ3Jp9jpnnqj4k3qhDI//gkMEx7uHYNZDgssv2vTa+ZlyG26qDGqQQ2+EoJKOitCxpkXNaKlclwvQfRpKqt15SbncFr19D3quMT5+h/5+RvEzVz+iwmS9WqXnV6cE6fhHJjrvoi/usQnPT/9nkqF+k7TkJ4eS+iOLBYoBV3XnAA69UdJMe6PLTNo7FtLOgJ88PdH8Zj6lzYuqbOpm7V6aPOKqoLdTnXrZNt6nTK4jRU0qJJ0dc5N/oxSNH1ypwJfBDBi9TL5jHmUYglSiWxIXYbzgbyF02lq1AG33TYLvri65SlO4OGN9yMFvhBaVdj1qlh36qDWGr9GOiKCv73g+FNav+bvQgyuz9v3qy+GIU9aciK0Ipvgpd+2K+d7QxHMFfWFPIfXtSbwEm3QK+guMil6hPeGEHVvefG6OgHJMJtmfGcZ7BrittSD4kYCJbiVB9by4xz+z13Ch921NghrBhgOUgpNxDzq9FkWeFWC5fhC96DPEzkcr6LdZHZLDgxi7vIEJ63e1oBXXDRErUIAOGoUzQ1IbKalYe3J1BCurevuNZ6lIyjUgLspCN0Vnju3KeKnBbs5BMyNFJrymxe/qn/0XBgmNxnNMDahjet20aEnUi/HWTAQE+IS6fATkUPXq33LJBzRwULPUFsWgoJE9q2CntW+5qZeHNmbWqTSVNuXduBiyiofzU2E5PHN0LRwXVZjYpHCRR8MpKTs77r0WGKGXZVI= 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)(376014)(366016)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cGtpcjNwTFk1TG9mRjU2UXh3MFJ3MmtlSFRuL20rTDVYeGY4ZXAvdFk2S3F5?= =?utf-8?B?U0l0TldTVXFyNUJUUWhqcnltQ0RGK0NVWFRXZ3I1SWxXbDFhUEdlRGJhV3pP?= =?utf-8?B?UXNXaFZvRVg1SjQxMmlmM3V0clVOS1F4MUlsdFFaYUpYR1R1VmcwTGQ4UzNG?= =?utf-8?B?cDFKRytWUlJOU2NBZzFMTHFnbEI1bkdOOUMxdHp5ZEltSlBOS2NkV1M1L3RY?= =?utf-8?B?cXYyaGQ0QkdsLzJuSlcrbkdEekpZMnFUOFYweTZsMHUrY0VCRVUxdEVLMUly?= =?utf-8?B?Sjljbk9mV2JVZFVZQ3hlakQybTl4NkVMeklqM2NteXhnK1JtcERoQXE1OWhO?= =?utf-8?B?dm9qb0JtaHdDVXNjZU0wU0R5U21oUEoyd0dxYTFKa0pDM1NCNVUwb0s1ZFpN?= =?utf-8?B?NDdjakRsT3pKU2VmdExaaFNkcURFcG0wN0k4S3o5eDNJTW01ZVExTjdjdWF4?= =?utf-8?B?QUpWYU85UFQ1NkxTU1FZRDUxTXdoQUVJT2hmUzlaUE1wbnh6QjFJbDdxcnJs?= =?utf-8?B?SGFLeWErTDZnNlVSZ3dFZkh5WnkzRU9CeWpiQ3RsK0xQL2lpcmhLeFlGN1Nk?= =?utf-8?B?b3FnQnJMbjdTN1RhcStRSGV3WmtNdmZxajZwRDlCZGhQTkRMYzZDT1I5VjN0?= =?utf-8?B?QkxKR1RFdUYxaGZ5U0t6VTMyWGhTZWpsTnkrNldyMGVBMVJFcHFiMFNlUmRm?= =?utf-8?B?M3czbUZJdndQYjV2d200emlwUTE2Z1IzcnhwT2pOb3VHOW5lb1AzSHBRc01w?= =?utf-8?B?YjN1ZUVleTF5L0VoUThEbTd3UTVBbHlvWkduaGUzUmloVHRoVjg1SFhJQWZ2?= =?utf-8?B?UHYrUnVoSHA2ekZYSUYzdzMxRk4rL2JsbExRTDROSFcxcGVMWDlNUUZUS2lR?= =?utf-8?B?SDN5RjJmVitvdVo5N1lwWGRvNGllNG1QL2ZUZlR3em1xSFdmOEh4V3hYWlhH?= =?utf-8?B?TUFkRFdQa3JUWHBURDhveENmdkF6a1J2T1NFMTFRb2x1ajFVRW5aNHhjS0x5?= =?utf-8?B?Nm90cHFYSk5IZTFZeVk5Y1JOM1ltRWFTbW1ZVFkyWnRnejNWSktUb3pmdUZo?= =?utf-8?B?bnRvTHR4SmxTd0EyN2drd1BpR2VwUlFaVjMvcHZ6QVlqRXdQSkdmcGczL3pJ?= =?utf-8?B?N2F0S3Z4cjVpbVIxbmpsUXh0QTJ3M0Nvd3VBR2ppL3gvYzl5TnB2Z1I4UWJW?= =?utf-8?B?NlpveVU2Sm95bHE0SERDQmtQU2lFY09GdkVyZVlXZUpsNHNFT2Y3VXY5dURt?= =?utf-8?B?R2NzS1ZWWW9ZdkV0bHh6bmNUcGpFeUNmNDIySGYwZ0pVYmhSaDFUUHcxWWJG?= =?utf-8?B?SEVnYVhtRXpVcFZaOHFFd2dDOHVXZ2szSWFXQUNMeVV1WFU5K2FFN2RHWDk3?= =?utf-8?B?bjFOT3NWMmJ0K1pwS0RQdXJKWVBjYTZYUzFsYU5mcUlhZmQvVWR6a0V0dVBl?= =?utf-8?B?blFlcnhNYjdtd0tzQ0k1bmhVM093U3NWTGhTelhVcUJHdFlsbGJyalRrMk8r?= =?utf-8?B?dCtSbEdYYkQ0WFQvems5T3Z2VXI2Z3BrLzVrTTQwcGdndmxLbjBqQ0p2b3I0?= =?utf-8?B?VXd4cXg2UTZrMzY0S2JxdmRJdU85bkdwSktEeHlUeDNPUjVKY1h1R3NDZjI3?= =?utf-8?B?bE1KMElqb0NFQVc1UllGNVByRlF3VmRTUlZnRnFVc2RJN3NpYUg5YUhEd1pm?= =?utf-8?B?U3ZxOWEyQVc0VmVaTW5kTHNIcC9OTlNFUzRDRXFldFNPRmxaMnNYd1g5NE1a?= =?utf-8?B?U3pEOTdsZGNReU1OQVVTQ3JsY3AzaDd0NTBlRkpNZVIxRUoxR3ZEZmoyUUhL?= =?utf-8?B?OHNCMkFHL0tGZTNvVm81MnZJVkhDcXVveGk3akptQzd3YnBLdGszdTJydGdE?= =?utf-8?B?NXVnd1ZzRkxINkduVTdZaDlkTG1BUnhCVEhQS3FRSXBHaHFzckF1cGttRXh3?= =?utf-8?B?bWFtOHJneGRTUGFXQUZpU0RZckp3Vkw0OXk4aFN3YlE4c3hCb0JFZDhycnpJ?= =?utf-8?B?MkU3NE1WMjlSSzJPRndLWll2blJxMVpHYkJiOHliOVN5S2tuZnJBeTNvOS9h?= =?utf-8?B?TVpja1pkSWZBb2RGUTFWZnR6cFptWEZaVStpTXBINUYrcExnVDdQZTZwUFVt?= =?utf-8?B?cUhpOThremNabm5xSWg1Ly9rSC9LSGJ4a2VydEVoUHJGN1BGSm5nSytGMWxm?= =?utf-8?B?Z2FBUjN5Y0YzcmFicXRtUnRHYjFMN2QxY3ljNm10ZjNEWm1MU1o2MWgzaTd6?= =?utf-8?B?SWhjVWRzYVN6TXlTRjBvMjVlZEVzNXY3NGR6NkxCOC9GMWhLd3NvTG5TOUds?= =?utf-8?B?NlJMNWM3RWltK0RCV2Q2bXREQTBTL1pxTU00QlJaMCtVRkhOY1U0cjF0TDZz?= =?utf-8?Q?1nrZvQsFJSFg2+OAbg9ri7cHBtOgJLdDHKu7CEspzfbfz?= X-MS-Exchange-AntiSpam-MessageData-1: F3QiCcBO76DGCQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 33f10fb9-4115-45ba-184d-08de8a67fcd9 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2026 12:13:56.3648 (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: Qw7YTheuBb8bS1/m+jbIPpvbA/A0TVtW6VbrcoMnZOBp2r4BjMCOseX9saIcwLryyWsyv0WbJ2ZvKn4aC89NAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4298 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 0c8a74f0e8ac..cb4bda253193 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -97,6 +97,407 @@ pub(in crate::gsp) fn advance_cpu_write_ptr(qs: &Cohere= nt, count: u32) { 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