From nobody Thu Apr 2 19:00:05 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010055.outbound.protection.outlook.com [40.93.198.55]) (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 BCADA23F424; Thu, 12 Feb 2026 08:26:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.55 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884793; cv=fail; b=Rh3+5VjtGL3ZjlDh4IZ+fz3ohSjTJG4QyS3zJ9sC+YIiqme6bPDtSTn36reqWg13jAqi9PtUCqAw33gkqD4C7emcypWm9JgABD9Bx8kncOHE2pVi5wV0ovNomOnk0sdbh4SxsMZvXbSAyRa4Y4UCaNmD7ygrbTZ84310yiD4Gks= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884793; c=relaxed/simple; bh=GAKBiA/JiXMAUPFEXERETzeQZZDrtMnPYXj8i5lFme8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HaWdQ7351wqNZXFU+8O00vo4Fee6Dn2RBAl7COzth2nKnxFxSIQiuo4hPI4XqA80lWz2InPrMUAKIbnx3XVDITBCV4jBmBoFSmStrDTmBPvXg5StymifRkBvIRw6zrwUxv2DNKZFwiSYZ8Fe6m3FscE32j+K23ZaFxzS8bTCzE4= 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=nD7rAX65; arc=fail smtp.client-ip=40.93.198.55 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="nD7rAX65" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AO2OFkM6XzPxnZwbvorg3tnTjo4ZlQ7TxrPtCKyjIXmaDUkGcxyOx+g1ryTIpQnZFLfZs33aQOBq+Wxg3SYdZY77Ga1Qmaz/2AwlDZlVryTbSjz0YgshcanG1OdK8UQ9qctK7tqEMku6AnrGpAdQc0d6cov8C7A6bBv7NAOI/dqnvRR7t4tdMryZ9PY3atIk21s3Ay7TK5sm1tdOf84e55rRh8JGqBW/HQHFAQmoNJraHX6cnUCHO1SF9/xgEdhHP3LRd1npqMP56ekOdcf6mHpcjtmg95OY5hmhyQWlmc9noLqx0Fe0Z/TXymNmWT9oTujxfFTp9HfgqHAQu2JRHg== 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=90m5jPhxtCWUXiCfhay7QaOlQ8SICoxGQ7mFzD8NTpY=; b=CeDi+s1dq1hNJkjuicT0DFW+L9MY+KAMltgvkC82leEnbDz5/CUA5M+vfHK63p6zsnqOoID+WgjVnHlFKxXH2CYw2GCqcGgh6bRrA/hnPq0J7bQRcycRUL0uHRyixho8vc0Z9xZyBYBKJBjb1IWtr+t5a6umB6PrsrFEKkJEEthxOa3qe9ABacm8pFk4Y59up2WT/PoFUKLa+yWOzkoJ+a0B0dq98bM8YuDj8ZRDfJi4j5b6jvoFxYe2oJx/1UUa1KzNAfOViF0ql/DvLEBwSpDso2/iQn2CCaYxZUBT0DbkT2XdViMQZoziUrV/xv7dQ3YQVEhuBgNQE+zPwpdEAQ== 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=90m5jPhxtCWUXiCfhay7QaOlQ8SICoxGQ7mFzD8NTpY=; b=nD7rAX65CQSghJZdjFew/7nx4WbiTO5U9mqbKkqyv8nhpyE2oO+owRidgsulPecWJyAsOTHXg3rTEtdDF2FbvZ3UqiFWvuj5ycYDHXLqitLsmFjBcI/zGe9G0AV5UUlNpgpQ5ZYFaRgHsJh1Slj1c/MaOjiJ6RoXmQzkZX2tG5S2ZX7j30TEHmOva5ueqw8lfmFL34Cjj6zLAbKLZMtGx73/obddjVyUPaYxxOjPp7eSkC89T6ao5NVOyRevS6lt5FTMxV6czuMlgCe5m676U/oyFv5GNDEWjdmddmQ5xW2g38GLJhrw8XAfz/iJxaMpMrs/LLZ09trAi+g5Qy7pgw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:27 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:27 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:18 +0900 Subject: [PATCH v9 1/9] gpu: nova-core: falcon: rename load parameters to reflect DMA dependency Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-1-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0071.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36f::10) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: b0c9c55f-f1ea-4342-7759-08de6a106aa1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RFA1SlZTY0JUUkpTZUhaTE1vcVlCTEgvQ0tOSXE3ckdvWjd2Wm50QjY4cDha?= =?utf-8?B?OWpRa1A3L3ZlM0hpMjFHMVlwRmJqYVJ1aldLbGtJbVpSOFVjU1U2ZkhSWFEy?= =?utf-8?B?OEJKT3dvVHp3ajJ5M3VjZWpmRnN2aU9na05xR1BFVGNQcVVEQUwyaU9zSW5Q?= =?utf-8?B?QmJ4OTJsVTQ4Z1l0Vjl3ZGdGWUlhR1dJV01HV3ZlS2gxVDNLQU5qcUxjQUFv?= =?utf-8?B?dklFWmxaR1lWWHdDSjBCdi84Q1pFaXo5NWI0eFN2MmRQRWtHM3VSVnhqdTVJ?= =?utf-8?B?QnlXWjRmYlA5cVZ5Y0w2d0tWZnpPV093OG1xSDQza3UyWlNzWFFGR0x4ajNr?= =?utf-8?B?a1ZxMzJ2ZmZvQ2llTTJ4dGJOMVVOYWt5SjZWYm1WQytIMEpvck1ZUElmMzdi?= =?utf-8?B?NWlRZXoyb083MEpyanNTRkw5N2h4c1BUTnUzdkw4UmR6eHo4VnBMa3lLc0xj?= =?utf-8?B?OUdwS1g4L1FSQnRZZ084QlZadzdiSDBPK2s2ZVdmb3Yxb0JPNlloV0VSLzFZ?= =?utf-8?B?WFBtV0hsZUhGeDdudnU3NHEyNW8xSXVLazBsbEszdHdELzJUTzhOUk1MdjJj?= =?utf-8?B?K2piMjIxelc3MzlMTkdRdGZhQWJsdmFmNEV0YzdjTVI5c3g3cFNKOXVTTjh3?= =?utf-8?B?ZGg5R2JDaXdRUkd5dG9zTWVOaW05cUxQNHdqM1ZWTEk1TzdMVDFLUmdnb2tY?= =?utf-8?B?WXRNZXRxS3JESzl6cTN2UUN1Z1NNUmRManpaUnJOejlpYmlGQXNuTXdPT0Jt?= =?utf-8?B?SjltWHh2dW9zTUlDWXVDUGxIRUNOcWhOU2I5WjljZUl4cHBwUkRjMzEvRFBL?= =?utf-8?B?dVdUZkNZem5lWVRTZG4yWE5Lb0ZLeUFmV3JZTGZyQzBWQXlUZDBkRjE5Q1lz?= =?utf-8?B?QkZBemloRkJxTi9LM09XQTFoUXJzWjkyVWVjdWdTTnFBU3UvZ25IVHBkUEhw?= =?utf-8?B?M3FIT0U2VThDRlJpYm1rMnc0bGY3VDFXM2RrdGlQcnZEZTY4OW9UVnhVWGdq?= =?utf-8?B?dnJ3aWg2enJCMjRkS0hnaUtiOG9qV0d4amowNkRuYUFVNVgyK3Z0b21mTTNr?= =?utf-8?B?Wm80OHVILzNubVNjZmVldjNJUytuVHpVbnJ6ZVByVGxZbFpPS1h2UHZQa2pE?= =?utf-8?B?T0FoS1FzenJqVVl3dlErcVJUSnlSQWFMVjdsL3dOMkovNE9UNjIxNmtZbkZa?= =?utf-8?B?WXhSWmNQRjdWUnRoNHFwSFRWcVZOQTlzUmZDTjI0b1BuZGtrSVdlTW9aa2ZX?= =?utf-8?B?SGZCSzZRYVcyd3YvTW5IemRwcU4zM3l0aFRwSldtVlZCMGRoZWdrYmJCSXJS?= =?utf-8?B?TXZTVmJZRzBiOHdSbm9PM3owRWZHbHRlaTYzYjAxb2xoSzFwTlA2dWxKNnlS?= =?utf-8?B?eVJCS1J1TWtXZTRmOUd4VEd4Q3RLQWFGa2drRkR1d3FEaFVvRktuM0hGclVG?= =?utf-8?B?aHk1TnJTY0p3cWlFVDhMd2F6ZWFpc3owb2IxOXpTT3FhcGppNzZ0cEFpOTdU?= =?utf-8?B?VmxBY1pNSHVMSGlWNTF3c3krYmZRdUtJQXNKVEVXQXFpeTY3Q3JHVHZHb3Jk?= =?utf-8?B?QzlKNWc3b0huQ284N3VjM1ZMZnhqSEd3RFZGSjJzV3o0WFFHWjVRenpHRWhi?= =?utf-8?B?RnkvdmR5R2pYQktnSjVzZ2RTUDlBL3VxTWpTNW1iek1peTAzcTFMY1o3dUVw?= =?utf-8?B?ZE42RzBFdzluZmZqMXBvbUdZK2lhU1ZpbzdpcitndDl0TTIxTUlqcUFtRGlS?= =?utf-8?B?ZnRTalVadlE2azFDM2dUZlZjdG0vL3BWeVJhQmsrS1h0eXh1cnkxVXhPRTF2?= =?utf-8?B?NGNCT1ZrOXFxOGF0SGovOVRCZzhMRmo4b0liQkxmNkwzYVQzaHd5c3draEJP?= =?utf-8?B?OWxBQ0MzZGlYWEIzSGhLSzBYYW1ZR1JGY0xQWjg1SGtBaXFldG9zTUxDVnJR?= =?utf-8?B?MGNzeFlib01Lc0FhQVg4YzllSjhoOW54MzlwQUxxUEdFeTE2R0pFclZYa0VG?= =?utf-8?B?MTRuV2dRMExJVzFLRTdYNEt6cnZWQ3RNa0paRDNGZjR0RUVENnpBVU5tTWFO?= =?utf-8?B?VEFkMEtQWUlXTlRXalIvM3pMUkl2RCtOTlYzb1I4QVJZLytibjgwZzBFY3BJ?= =?utf-8?Q?H2AQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SGtoeW9ZK0VUK095RmlIeG5peW5VemthRE40Y2NxaFVoalBFdXpHaEZUK1pU?= =?utf-8?B?VHBwNHpPZVRnOHNBanhhbSs3SFVvWGpNS2VZem05VUljZGJuVTdJbHpiK3Jl?= =?utf-8?B?YjA2K1RSNkx0emUvbUpUTWdSOEZSaWxjVkwrR2dhVXJDWjU1NGRNUm9oM1Yv?= =?utf-8?B?UEJRVlRDY04vVitMTmNEbjZCRFJjL0h6OGNxaW9GK2I2b0wvZkRiSk83ZXdn?= =?utf-8?B?MVMvbzRHVENpUjU3UkRZMEJ3ckM1ZHdhZFpyY3RWd1JIeXZ5UG41bGlBK1c1?= =?utf-8?B?WlJUSWtLY0JRZzVlVHQxZTZZTmpHWWFsN2t2YzJMR01xa0xUa2hUd0pvZml2?= =?utf-8?B?aTRBcUdyNEs4Mm9aclJ4ajF0L3RMZGhzSTkxczlaOWppUjc1a2NySjU3SGZh?= =?utf-8?B?VUlUaHhwVUhIb2ZGVHhhNm1vT3ZlS0tmT1lJVDFKWDl6TjVBazNXOTJLdnRH?= =?utf-8?B?VmN4OCtONEZvK3lXa1ZhYTVpRUkzclFzVmRkVzJVaEJpYXFoVzhwZjliWkF0?= =?utf-8?B?OEdDRFVabXRPbVU3dzc2U2xhdlEzZGpBZmRJdTJuVC9PNHo4alVFWTNQZmlP?= =?utf-8?B?dGlINGdycTYzOWNkcHZBOTZKN0RjY0lzeXJoM01oN210TnNGUktqN0pncUxZ?= =?utf-8?B?b1NvWVZMbDNmS2VhMm9sOWNiaU9JWUVROGtocXBuUzJmMWFpQ0o0UEFmdlVB?= =?utf-8?B?YXc1WkFSM1NIRjJMYkFNcnZBWE5hZnlISWhyMVhYelV1ZUI1MW9zR3Rmc2hJ?= =?utf-8?B?VWdiT3dzRmpIQTBhMW95cHlRNnlwR01BWlk2b0N1amZpQ2doM0RCMnByL2dW?= =?utf-8?B?dXBTekkrTFFkWFRsaGpLUHVUZ0h3NHpjMDVzSU9keTIxZzJ1QXM3WENwVnhD?= =?utf-8?B?eVNmREhNTE5lc1phbCt2QjNNYU9GUkZua3hIYjNYOFVhdXBRQlp4Qm4yYUlm?= =?utf-8?B?Vk41Mi9TY1BZaGhEbGtVRldkcms3RXBobkQ1YWd0dGZZNU1aZXUydkNjbDI2?= =?utf-8?B?NTcrNFYwOEd0MFlBQWZzYWI0UExReFRkOExSdm9GUXRmOHo2U0toa2pQVFR2?= =?utf-8?B?allHWk15N3R6aUF2clk4OXEwV2RJZzNvY005RG5QN3NUSWttbXJzWUlpTnpW?= =?utf-8?B?UVBIWk9zeWFEVjVSMGgvbS8xR0huallKRFBpN3N1bGx0ZHdNb3VCeTdjMTBt?= =?utf-8?B?U2RUN0VDSnRLeWV6dWk1VWFpazZ0b0ZneVRwQ3FDemFEWEIvUlMzNWFtOHUz?= =?utf-8?B?Y0hUdmY3b2swSkMwNVI1UGxldHdkUEtDVjZyZ0ljOWdGK1l6WnExVGtCQk1w?= =?utf-8?B?KzQvVXZpWkloYkxaNXdMN2VXRXJoVHR6QUZaVURsQTg2ZlBYZjFoZGJnT01R?= =?utf-8?B?NU42UGVPdDhIK1dSWWNnaThGTXV2cDh1a1RkTEhURVo4dzdIUGVVRHg1WW9V?= =?utf-8?B?cUtQdzh3ZGdoMnJpdWNZYWdVbFVvVDBwVk0xMEt6N0hwQ3dBL0NiYlNacUJH?= =?utf-8?B?S2Q2RjlEaWVkbCtIcHZXdFhWZGxCZzBKNGJ3eWxPdSs4S3ZPSyt0OEdWQks5?= =?utf-8?B?TTdKVnZtSzRwdEcxL3N2YTJQN1ArSVFFSW16QzJCQnlITmxPbGRIaTVOMmxV?= =?utf-8?B?QjNJUGs1OWxGVDZzKzJPMVJmenp3TW45cXkvYWRnWHdQYjJmcGZkVkx4ajBv?= =?utf-8?B?Wi9VcTRGdVJrVkQ2aC9oMGNUZkc1ekZLY3lZcmJyN051a3Z2SHZ6MWxKNU1O?= =?utf-8?B?OHRpQzJod3RPKy9VaHo1QXlmK2t6encvNHhOU2FHOFlPVVQrSDY2YmQ3RGUw?= =?utf-8?B?dnNRcms5MnpsTWpmQ3lhQVM0Y016aEEyb2dCOUhIVmRlMG8wNlNjZkwyVThr?= =?utf-8?B?dy9XTjI4L0FhOUhpZUExZWJET3ZDWkxPOHB2S2ZWak83OHV3QXhOU3RtTHRS?= =?utf-8?B?RVc1TDRhV255N1JiVU4yTERUcUlBVjBjaFZDOTJSWGJKVHVSeTFKanBGQ1hX?= =?utf-8?B?dkplSXRyaTNIb1dGUXRWelptWGtyWnI0OUQ4Zjd1NU1BUytzRytheU5sVlQ2?= =?utf-8?B?WGN0MDR1cHk3MThGSW5ZNVgvOHpGY0hGWEZOYWhwZzhzelU2NEt4b0w4K214?= =?utf-8?B?ZnJtNHN1MHFRMEcxdEx2dW82NnJXaWlVZmoycDY3eXJCNlF1cU1LQTlIVmZK?= =?utf-8?B?Vi82RDJsbXg5MFRmdTluQndkRjk1OUNDOCtId0wxRVJzT2Jzc3pUL2U2VzN5?= =?utf-8?B?RUlmZVdsNjAwTkhHTzB0VGxzWGE0VG50UytBTjY2bmt3QlNZSGdZOEVKQW0y?= =?utf-8?B?bmRwVGN1aFlHSVhGcVVTZXNLdFk2c2dIYlV4SzlKMVMxZVFUbXJicUpWaVox?= =?utf-8?Q?gWOoofQ6LZYLCzy1/sYd8I/+T/7iw6a+JZf44QJUI4JlY?= X-MS-Exchange-AntiSpam-MessageData-1: qjaWTUbpH3DYhg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0c9c55f-f1ea-4342-7759-08de6a106aa1 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:27.7280 (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: lUfQ7B/UFq4UG2kTVQEnbwzwoFS+6k12SuJusVEdaLRncWU/GE1Kq586Uf0fR1zibqGKlCym6D6rsrDTqN3+JA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 The current `FalconLoadParams` and `FalconLoadTarget` types are fit for DMA loading, but are going to fall short for PIO loading. Start by renaming them to something that indicates that they are indeed DMA-related, and group their declarations together as we are about to introduce equivalent types for PIO. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 37 ++++++++++++++++------------= ---- drivers/gpu/nova-core/firmware.rs | 30 +++++++++++++------------- drivers/gpu/nova-core/firmware/booter.rs | 24 ++++++++++----------- drivers/gpu/nova-core/firmware/fwsec.rs | 12 +++++------ 4 files changed, 52 insertions(+), 51 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 37bfee1d0949..85918a03b37c 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -327,17 +327,6 @@ pub(crate) trait FalconEngine: const ID: Self; } =20 -/// Represents a portion of the firmware to be loaded into a particular me= mory (e.g. IMEM or DMEM). -#[derive(Debug, Clone)] -pub(crate) struct FalconLoadTarget { - /// Offset from the start of the source object to copy from. - pub(crate) src_start: u32, - /// Offset from the start of the destination memory to copy into. - pub(crate) dst_start: u32, - /// Number of bytes to copy. - pub(crate) len: u32, -} - /// Parameters for the falcon boot ROM. #[derive(Debug, Clone)] pub(crate) struct FalconBromParams { @@ -349,17 +338,29 @@ pub(crate) struct FalconBromParams { pub(crate) ucode_id: u8, } =20 -/// Trait for providing load parameters of falcon firmwares. -pub(crate) trait FalconLoadParams { +/// Represents a portion of the firmware to be loaded into a particular me= mory (e.g. IMEM or DMEM) +/// using DMA. +#[derive(Debug, Clone)] +pub(crate) struct FalconDmaLoadTarget { + /// Offset from the start of the source object to copy from. + pub(crate) src_start: u32, + /// Offset from the start of the destination memory to copy into. + pub(crate) dst_start: u32, + /// Number of bytes to copy. + pub(crate) len: u32, +} + +/// Trait for providing DMA load parameters of falcon firmwares. +pub(crate) trait FalconDmaLoadable { /// Returns the load parameters for Secure `IMEM`. - fn imem_sec_load_params(&self) -> FalconLoadTarget; + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget; =20 /// Returns the load parameters for Non-Secure `IMEM`, /// used only on Turing and GA100. - fn imem_ns_load_params(&self) -> Option; + fn imem_ns_load_params(&self) -> Option; =20 /// Returns the load parameters for `DMEM`. - fn dmem_load_params(&self) -> FalconLoadTarget; + fn dmem_load_params(&self) -> FalconDmaLoadTarget; =20 /// Returns the parameters to write into the BROM registers. fn brom_params(&self) -> FalconBromParams; @@ -372,7 +373,7 @@ pub(crate) trait FalconLoadParams { /// /// A falcon firmware can be loaded on a given engine, and is presented in= the form of a DMA /// object. -pub(crate) trait FalconFirmware: FalconLoadParams + Deref { +pub(crate) trait FalconFirmware: FalconDmaLoadable + Deref { /// Engine on which this firmware is to be loaded. type Target: FalconEngine; } @@ -420,7 +421,7 @@ fn dma_wr>( bar: &Bar0, fw: &F, target_mem: FalconMem, - load_offsets: FalconLoadTarget, + load_offsets: FalconDmaLoadTarget, ) -> Result { const DMA_LEN: u32 =3D 256; =20 diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 68779540aa28..5beb27ac0f51 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -17,8 +17,8 @@ use crate::{ dma::DmaObject, falcon::{ + FalconDmaLoadTarget, // FalconFirmware, - FalconLoadTarget, // }, gpu, num::{ @@ -171,9 +171,9 @@ fn size(&self) -> usize { ((hdr & HDR_SIZE_MASK) >> HDR_SIZE_SHIFT).into_safe_cast() } =20 - fn imem_sec_load_params(&self) -> FalconLoadTarget; - fn imem_ns_load_params(&self) -> Option; - fn dmem_load_params(&self) -> FalconLoadTarget; + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget; + fn imem_ns_load_params(&self) -> Option; + fn dmem_load_params(&self) -> FalconDmaLoadTarget; } =20 impl FalconUCodeDescriptor for FalconUCodeDescV2 { @@ -205,24 +205,24 @@ fn signature_versions(&self) -> u16 { 0 } =20 - fn imem_sec_load_params(&self) -> FalconLoadTarget { - FalconLoadTarget { + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget { + FalconDmaLoadTarget { src_start: 0, dst_start: self.imem_sec_base, len: self.imem_sec_size, } } =20 - fn imem_ns_load_params(&self) -> Option { - Some(FalconLoadTarget { + fn imem_ns_load_params(&self) -> Option { + Some(FalconDmaLoadTarget { src_start: 0, dst_start: self.imem_phys_base, len: self.imem_load_size.checked_sub(self.imem_sec_size)?, }) } =20 - fn dmem_load_params(&self) -> FalconLoadTarget { - FalconLoadTarget { + fn dmem_load_params(&self) -> FalconDmaLoadTarget { + FalconDmaLoadTarget { src_start: self.dmem_offset, dst_start: self.dmem_phys_base, len: self.dmem_load_size, @@ -259,21 +259,21 @@ fn signature_versions(&self) -> u16 { self.signature_versions } =20 - fn imem_sec_load_params(&self) -> FalconLoadTarget { - FalconLoadTarget { + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget { + FalconDmaLoadTarget { src_start: 0, dst_start: self.imem_phys_base, len: self.imem_load_size, } } =20 - fn imem_ns_load_params(&self) -> Option { + fn imem_ns_load_params(&self) -> Option { // Not used on V3 platforms None } =20 - fn dmem_load_params(&self) -> FalconLoadTarget { - FalconLoadTarget { + fn dmem_load_params(&self) -> FalconDmaLoadTarget { + FalconDmaLoadTarget { src_start: self.imem_load_size, dst_start: self.dmem_phys_base, len: self.dmem_load_size, diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-co= re/firmware/booter.rs index 86556cee8e67..9e4f90dff8d0 100644 --- a/drivers/gpu/nova-core/firmware/booter.rs +++ b/drivers/gpu/nova-core/firmware/booter.rs @@ -22,9 +22,9 @@ sec2::Sec2, Falcon, FalconBromParams, + FalconDmaLoadTarget, // + FalconDmaLoadable, FalconFirmware, - FalconLoadParams, - FalconLoadTarget, // }, firmware::{ BinFirmware, @@ -252,12 +252,12 @@ impl<'a> FirmwareSignature for Booter= Signature<'a> {} /// The `Booter` loader firmware, responsible for loading the GSP. pub(crate) struct BooterFirmware { // Load parameters for Secure `IMEM` falcon memory. - imem_sec_load_target: FalconLoadTarget, + imem_sec_load_target: FalconDmaLoadTarget, // Load parameters for Non-Secure `IMEM` falcon memory, // used only on Turing and GA100 - imem_ns_load_target: Option, + imem_ns_load_target: Option, // Load parameters for `DMEM` falcon memory. - dmem_load_target: FalconLoadTarget, + dmem_load_target: FalconDmaLoadTarget, // BROM falcon parameters. brom_params: FalconBromParams, // Device-mapped firmware image. @@ -363,7 +363,7 @@ pub(crate) fn new( let (imem_sec_dst_start, imem_ns_load_target) =3D if chipset <=3D = Chipset::GA100 { ( app0.offset, - Some(FalconLoadTarget { + Some(FalconDmaLoadTarget { src_start: 0, dst_start: load_hdr.os_code_offset, len: load_hdr.os_code_size, @@ -374,13 +374,13 @@ pub(crate) fn new( }; =20 Ok(Self { - imem_sec_load_target: FalconLoadTarget { + imem_sec_load_target: FalconDmaLoadTarget { src_start: app0.offset, dst_start: imem_sec_dst_start, len: app0.len, }, imem_ns_load_target, - dmem_load_target: FalconLoadTarget { + dmem_load_target: FalconDmaLoadTarget { src_start: load_hdr.os_data_offset, dst_start: 0, len: load_hdr.os_data_size, @@ -391,16 +391,16 @@ pub(crate) fn new( } } =20 -impl FalconLoadParams for BooterFirmware { - fn imem_sec_load_params(&self) -> FalconLoadTarget { +impl FalconDmaLoadable for BooterFirmware { + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget { self.imem_sec_load_target.clone() } =20 - fn imem_ns_load_params(&self) -> Option { + fn imem_ns_load_params(&self) -> Option { self.imem_ns_load_target.clone() } =20 - fn dmem_load_params(&self) -> FalconLoadTarget { + fn dmem_load_params(&self) -> FalconDmaLoadTarget { self.dmem_load_target.clone() } =20 diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index bfb7b06b13d1..b98291ec9977 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -34,9 +34,9 @@ gsp::Gsp, Falcon, FalconBromParams, + FalconDmaLoadTarget, // + FalconDmaLoadable, FalconFirmware, - FalconLoadParams, - FalconLoadTarget, // }, firmware::{ FalconUCodeDesc, @@ -222,16 +222,16 @@ pub(crate) struct FwsecFirmware { ucode: FirmwareDmaObject, } =20 -impl FalconLoadParams for FwsecFirmware { - fn imem_sec_load_params(&self) -> FalconLoadTarget { +impl FalconDmaLoadable for FwsecFirmware { + fn imem_sec_load_params(&self) -> FalconDmaLoadTarget { self.desc.imem_sec_load_params() } =20 - fn imem_ns_load_params(&self) -> Option { + fn imem_ns_load_params(&self) -> Option { self.desc.imem_ns_load_params() } =20 - fn dmem_load_params(&self) -> FalconLoadTarget { + fn dmem_load_params(&self) -> FalconDmaLoadTarget { self.desc.dmem_load_params() } =20 --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013050.outbound.protection.outlook.com [40.93.196.50]) (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 91F952D6E60; Thu, 12 Feb 2026 08:26:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884795; cv=fail; b=YyWprXMbEch0I8rpNwhVnBjFyFVhLj6CVzRIcaJomKL/NEE0TzexTdPmc7QbokWNn6IZG1R6W+3AVAMSCxURJaOhF1sQwnMMXpx9X2+yknsZbj+XccaF4gmP6z/JLNefAm1shtZwoBSaJwkaMzHpHOXAVs4ILM0eXLzZeIPaiaU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884795; c=relaxed/simple; bh=tNwRVmA+JvVmAjCoy06/qHg071qfgRhKd5MRBqnYQ04=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=bm0SDmftXhTE9QnTEiKWehNJXD9hT0psY5FsuOabjjFi1a7G8wd+WKSPAAs+BDc+mDCwdpNWhq2dB/yf8yOaAygvpmD0ysfnOdDkaoxoXVgM4lgDLnn7N8YKoYurvWf+uHKlyNIkxqqBroMpCBnJbSOL/P++9Wxgfjq2Y7hJRmE= 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=XGRShGUi; arc=fail smtp.client-ip=40.93.196.50 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="XGRShGUi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xTi+CHmSf3JnkhzIS89nnLBKHTNay4haqI+qDPsY28wlaEROXeh4RZSAIt4cL/qLAer7eqHy99KtVItUyebaj7wzU1t23wKdU7IzjXwhlX7zKc6UwrweGti+5E9YiQVraKhCN3AMLY2HiFq7ulXrZWayOQMl01vkwKuDBcAAYtpg3m5j1OZlfcTUQUxd0Bg2BC0e1utPh/kDA3J/ioSlGuTgN6wd2TW9SKS0VKgOizDECUOgjdVj1sbnuyqJq5s1g0Tsh0hKnsMtYKXPdWIWsnlQ0DNd1+jznT8iQGEk1pyoHDbl6KF93JQXb3Ww/JVjpYEhf1++YUjWgx2PpMO/fw== 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=g2eQqbIIcTVHiCEwvuRjDWxx3kLZ4OaFW4jgCYELI3g=; b=V0y/fmb0VBPH8OUl+Ou0hiEUNHyITfcN1fthAIDo9QszihWhdceNd6U8oB9vn/NMVXWMdVvGyt9qBY8NCWWAtHdkuBEd9oTlxJyzkuHbBIHIW7vrrEmRv1ygnENdVXsVay713xA+2rERdjh2BAcx/unByMjxhNWfjIKUzicveZ02DQCxtuA4Dho2apJsZJzeNxezPfEIfTDmp3o2m9+BvRnL/pAIHUF8E4IUfCHpUFfujhoLSyELotowR2/FyEieFM93emgVDdlEtruLu0gdDiXh6BIn1YWLId928ow5P/GNbhDAWNo3DKWE/QNfUuTO5nWoO4cQgqwmHUaytehlOQ== 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=g2eQqbIIcTVHiCEwvuRjDWxx3kLZ4OaFW4jgCYELI3g=; b=XGRShGUiyG8H/uAKbXV1zwA0e/32XMiDLyCiHl8kNkvYqjttrM0BgJ6zMiyWrD6PqI7UuC7Q2sWtac851wXBHHQSMXmxPvzO7nLMsHEUF2uL/sW+kQL9TRkgbozcFzRDreMfRtKiJC90yTHd+AZxaJV/rH7Z8Eo22c6xv91/opsyTSuMorPJbv1/issB8xJdw94gZvkob2WF6kWZqeUZe1fer0TW7d/OtEX0nRNas4Y5A9ztud3oO08A088gdJyfud2g64w059yQ4Ok82tTfEHHaLSG3lVRDGH13lmwuHmWgCqU9OZSccZer+3k1irn+uhcP+gXFjMmYeGZvZWZOFA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:31 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:31 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:19 +0900 Subject: [PATCH v9 2/9] gpu: nova-core: require DmaObject on FalconDmaLoadable, not FalconFirmware Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-2-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P286CA0137.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:37f::11) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: 0fd6e88a-5b11-48c2-6ab2-08de6a106d0f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZFVkMXBvYW5CcUUrZThBenVaQnlFV2tDZDV1Q2lETjEwM0p0aGYzc0VRKzBh?= =?utf-8?B?MXRFa0p3NnNBaDROdmRDNndvakJZOFBvcU1rQ1Q4TTIyVTVwemtvNlZkUzl5?= =?utf-8?B?RTZwbktLREY3WEVFL05EbnhoZllhTi90b3hqOHJjdG9qaXFsdlBNTGZ2UHBT?= =?utf-8?B?UEQzclExYU45c1RHanhmTnpVTmZHZHIxLzlmWTlNTFg0ZkhjZkN1TFhqY3NY?= =?utf-8?B?NWk5dHcvRHhRaElCdmx6eE85aGFLV05iY0UybldqcmVGcnpzOVVTbU5SbENn?= =?utf-8?B?dHVzWkdYZGxzVncvREFKQldnSE00RDhpa3lGSURzMWVSdEJsWnpRaUJyanFk?= =?utf-8?B?N0l1STJ3VmVtYU5nMDd5cEdCcThGbDBtWHJpY082VjNCTHZYR2tWTTZna3dq?= =?utf-8?B?dnk3TjRVYlRGMEtmUkZDMkVSeSsxcFZFVjAzTjRZcHY1b3N5RDFwaUZlY0ln?= =?utf-8?B?NE5vak8zR3IxSkdJM0IxSHRFb1Z3VXhDYzMzOU05a3o3Lys4RnpVcTJ2L3FD?= =?utf-8?B?MzU3emJRUmFOTWpTSGZ0cDkzVjNHc1hxa05RYnAxV2k5c0RJQTEwblVLWWx3?= =?utf-8?B?Y0VaVkt2WElrMWtvUzRHYTlXb25lcXpqcTFORWoyWmtrWHNzKzh5YjhxOUZF?= =?utf-8?B?SVdrK2prckdiTEhUdVF1aUFSd0tnK3FkbXBnUjhic2JScWprYUJXdEo0bzND?= =?utf-8?B?Y0p5eVVGc3drMXVxL3JlL0RCVVhNMDhiRndvNHRoVm15UFlRMWN5dnQydi9j?= =?utf-8?B?SG5GNWlDUFl4NjBHS1IzNTlaSVJ3NTJkQ1FHUlpXTzRoZytGa1Q2Mno0QkNL?= =?utf-8?B?cjlPdy9mdHJqYlMxTi9GbmZIcmE5LzdpcHNnd0tSM09FMjVEbDdaNXRydHdo?= =?utf-8?B?Z2pNMDIxU3NQZDRlTnVUemIydVRzMVNmTUpEa1FNc3ZwYWw5aUVKSXhyZ0py?= =?utf-8?B?K2hpWThYbkQ4UVVLTVBGbXlZSHVScXpELzVORUgrK2s3c2RSRysyRkJHQjRI?= =?utf-8?B?anFWMzhVOENaTnhCeGZESEozbVVSUlR1cWV4ZGNNMGNEKzlMbUNDb1ljL29S?= =?utf-8?B?MHlSMHBVck1pZjhrSmphT2xvaUNrUFhGdnBqbGtBeUZqQkM2dzVYVXZ6L1JP?= =?utf-8?B?MjJNam9xa3FtdFhneHFhc1NpdnBtblVyOCt6akRmdjNqUnI2clFKY0kxd1lq?= =?utf-8?B?UUJHRFBsVjRRTWtadTdRVXRocFB0dGhVWGdvWE9wRm9odjFDdVB6ZHh6MGVR?= =?utf-8?B?WTBuTE5aWFZEN1lMdWh6WkpNeklidVIvZCt0bjlIYWpzQUJLeS9pNjdsZitL?= =?utf-8?B?VkVZZnRNUDI0RnpyRnBRSTZiM1g0eUJWN3hRRDlTRk14WGRWWnYzNmk0Ui9q?= =?utf-8?B?Y2E3UjV3V2R1bnhQYnNKYWc1aGdvUFpBN1lkcHJid1JhMzEzZ0txdlpuVE93?= =?utf-8?B?a0pLSE8yWDhJUml3cmpZOUxhT2RZb1dYbjg1ZTRVQ0JNb0dtNFFFQWIzRFlQ?= =?utf-8?B?ZExvdE83Z2lja2ZXeXdtU2ZXSHdDcDZ6WTRWNzFwYXVnYnRobWZDT0hPcG1Z?= =?utf-8?B?V1lqN21iVnRQS3RjQlRML1JnbmJWdnhDdE1GZGZMbUJ6Qm5CQUtzekdUdEdy?= =?utf-8?B?WlZxaVdYNG5ieDRWR0NSOFJ6ZXorSVIzU3FUclZSSUNkMU9jWUdjcnAxMGg1?= =?utf-8?B?NS9zNUFqaUMwODVsUURRVmtGbllmZzZ3TGhIV0IybXIxT1ZtZmVxdzJUemNK?= =?utf-8?B?TzEzekpkVTN6c1NOaGpPdWRDWmVZd1A2Sy9sTUdwdzFoT3lQb2RjaC95UVNE?= =?utf-8?B?bUlobGZMejFHVmdwcjBYK0RGelN6dmp1dEVUSWc5Q3BhRVFFMDJFVDFwOTRw?= =?utf-8?B?Qk1CNVVRcGNsYVpGdVlpM3lhWmt1ckFPVUpKeWtSYlpscVlKOUFxV0Q1Mkd2?= =?utf-8?B?MDA5ZmphZVMwcW1nUXVVaURtaXNXNmw5d2V3Y2IwVmFpKzFoMmpTMm12VFNT?= =?utf-8?B?bDg4QmlsSXFwMlNkeUo5Rk4weElkVkp3Y3NPaGdwWGVZYkxSM2lkK2phclN0?= =?utf-8?B?SXJVV1d1WTZKOW5CZFBSYXNzb0VVMU9YZnFLWDNqc2ZtTmhVRDVyRDVmWUY4?= =?utf-8?Q?VThk=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RlczaTZKZmI1ejVFNE1pYm55SFhURWFVMzdXUlNOT3lCZ0diYk5aYVRMWVND?= =?utf-8?B?ZkZjK3BvdGpxaE4yaFhTN1FPWDhSL2doNytSSzJTQ0pIRUZTcGY3S0NPZGEy?= =?utf-8?B?TVVYS0g3cU42Nzl2eVRQaGR1cHhZdDNPSlNaeUFNSzRZaUlPTElQcnBVK09s?= =?utf-8?B?VXpDOVFhV3NuNXpMTHZMWllIdGZuQWd2Q2dpdlhrS2ZtTHNjUjJ6ZnJJWU1I?= =?utf-8?B?VVc4YVg4Z1NlZktkN3VzaUFFSG9EVllHdnp1YWx6WlkxUFNvSE5pVUNxTkda?= =?utf-8?B?YUpLcERrTkZlaENYOWtoRE1lR3hubVhMU2lCay9QRFJFRGtmSWMvbnNHeTlB?= =?utf-8?B?S01nWWFVQ0dGWGFvTktYY294QnNMMkFMSzJucVlJSkl6YURnMGZwT1g0TnI3?= =?utf-8?B?YURyeGRxT3NZWXVRcmlCQkZtSlZPeE9wbVJtS0IwenBwTDZFSmlEbWFaSHpQ?= =?utf-8?B?Q1MrNGJJajVHZW43T1JtT3FNZjFiRVBJdHh4ZTc0TWRFNmRzZXRPWDJpTEE2?= =?utf-8?B?K2tQM204Vk1MRUZ3WVV4SDZwSlk3OTVHRXpFcm5FejNXN0RMWklwZ1RBZlht?= =?utf-8?B?TXJXMFRNSXo4bGZMd3VvN0w5bWhNUmRvSVlUek1KSFNxL0M0cUNYZGxHS2xi?= =?utf-8?B?RkVLYkJUQ3hjVHZlSmE0TTI5MFRCeVA3SDNPS1dCd0lsMGNJMVdLL0tORHQ2?= =?utf-8?B?QlNaQWJVRkZEamRsSXZmOS9sM01qVExpbTBQZTJ0czNia1RhQm02Mlg0Y1Bx?= =?utf-8?B?TVZ1SlNUL2MxSENDQW4ra2o1YTVTa2hvMFJzOW5BQ2tuMVRhK0JnK3E0QTdp?= =?utf-8?B?NUNieFdIeUY0dlVRTmlMYUxySlBNTHh0U21jOTBpM2ExcW9yY3dHb0txMTcr?= =?utf-8?B?OTMyamlydjRjdGlGaWlFWDY2VnZsdzRYdmtRWVY5RTEzZzBzV2xVZUJ0Q29D?= =?utf-8?B?cm1Eczl5TVRiUVJCdGJTeGlJNGNyYm1SSm1hQWo5V1kyOE9BMld6WjNRWkRt?= =?utf-8?B?ZEtzZUlHSHVBRXZ5TWdBM3BPalV2Y0lpaU92QWg2Q1dRTkpXU0xLMmUrcjFN?= =?utf-8?B?aUx6SjFVbUZ3U1JWOU40cTJEa2tRQkJJa2RRSXpOU1RvWGdDemk5VmJ4QnFs?= =?utf-8?B?WG44UGZ5Zjg0ZHh2bE1uOTRydmxlMldiRXdJcENYMDVyeTE1b3N1cnlMWVgx?= =?utf-8?B?b1dsdHFOYVJqakJ3cDNsM1ROOHhXLzNoOVVqNE5qRlVudExnY2NuaCtVN3ZZ?= =?utf-8?B?QmtDNWRqSlJLSVVMc1FZK1FCaEE5ZUptOERlMFRWam83Q1lGT3Z5V0RVbk0r?= =?utf-8?B?K2lsY0dwdlJyL3BSb2VKcjh4QlRTcWdsTWkyUk40VVJXS3JIVEtEUzhjWmp6?= =?utf-8?B?OFB5WjhidGYvVHhuRVhpclJWcWJWRTVROGVzbjRvQ2k2bXIwZ29EMnd5OEQr?= =?utf-8?B?eHViZGJsN0RqbnhTdXJLQ0w3bWtIQmJkdGp1S25Tb3NISytEQkVTaWcreFVE?= =?utf-8?B?M0s0ZmI2ZjAwQVU0Nkg0cU0yU1U4bXhDa0xEYlhXVXBkZzk0bnlsSjJwLzZi?= =?utf-8?B?NW5NbE9uWkhWanpQSmwwSVQzTm9aUnFsaU5PbXZrbzFCZEZvcTNJaUo3Z056?= =?utf-8?B?ZWRZTzdoblQ5VnBkT2JDdG9oRmlETldlQ016Ty9OaW1za3QyYXpuL1ZRZUJL?= =?utf-8?B?dGFmZ3pKUEF6TWhiSHd5QkhXUHJ6M2QxYXRlemFCNTZlVFMrOHRDdVFSbW9F?= =?utf-8?B?V3ZLMmxVOUhqankxT2xuT3J4UHZKSlpVZ0NFV0lEU2VoRzRZMEVleHZjM3Bl?= =?utf-8?B?emRoTnZ3WTVyWXphV0FYcFVVSVNCenEyTjRSWXdiRlVGNVpGa1lJMkU2MEp2?= =?utf-8?B?aVFnZzVBTnhnUExaUzFML1JsR2RWbWt4cnQ2b082NEgwWE8zVlBVZFNNZGUw?= =?utf-8?B?VFUxU0N3Q2lJSVVvWjhZOU1oTXhwOU1PT2xUQXpma2VmNzFCTTlsZHBLTHV4?= =?utf-8?B?OHNhZVVYaEgrRnFoTGMzR3lZck5INkQvQ2V3OWlqYlZwYWF0RCtMT3ZsUCt6?= =?utf-8?B?blRseFhpaTBGK2pTWFBoZ2dHOXZxMXhnWWRsZUdyYTNjdXM2ei9zQVZmSEh3?= =?utf-8?B?ZkhkS2xia3FUZ1pseTBhdWxITHRoSThBODNXaDk1blhtYklQd0FIanhDSmhZ?= =?utf-8?B?aWhKQjlwRDlLSDZGZHRrVVZneGhyM3cwZytsUDdIRUtjZmhHdzNFUVdCaDRE?= =?utf-8?B?N25oa3VyeGNwRlQ5Q0dUcG1JQ2FHdzdQakVsdkUzVTZDSUVWaEZ3TFdXWUtm?= =?utf-8?B?cDF4am5JK2RSTmJISTBqcE5lVzdVanV4UUVJdmdjSjA1cisyTDBHekpzc3Iz?= =?utf-8?Q?s/C1BWwiP/TVGhlLHcX4bPd9g+0UK0dqgRIf1UvNlefUF?= X-MS-Exchange-AntiSpam-MessageData-1: glbsNCaFq1u8Ow== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0fd6e88a-5b11-48c2-6ab2-08de6a106d0f X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:31.6802 (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: 6ZMIyRD4ts+VWCI7aoe2jLbOzMYyj4SBqGnmcI5T2XUt33UVHg1PIMntjf3V93oX8TWUCsWra5NQeEE/rjq6MQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 Not all firmware is necessarily loaded through DMA: the PIO loading method does not require shared memory between the CPU and GPU. Thus, move the requirement to dereference to a DMA object from `FalconFirmware` to the mode accurate `FalconDmaLoadable`. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 85918a03b37c..d2f27847f533 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -351,7 +351,7 @@ pub(crate) struct FalconDmaLoadTarget { } =20 /// Trait for providing DMA load parameters of falcon firmwares. -pub(crate) trait FalconDmaLoadable { +pub(crate) trait FalconDmaLoadable: Deref { /// Returns the load parameters for Secure `IMEM`. fn imem_sec_load_params(&self) -> FalconDmaLoadTarget; =20 @@ -373,7 +373,7 @@ pub(crate) trait FalconDmaLoadable { /// /// A falcon firmware can be loaded on a given engine, and is presented in= the form of a DMA /// object. -pub(crate) trait FalconFirmware: FalconDmaLoadable + Deref { +pub(crate) trait FalconFirmware: FalconDmaLoadable { /// Engine on which this firmware is to be loaded. type Target: FalconEngine; } --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010030.outbound.protection.outlook.com [52.101.61.30]) (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 BC4182D63FC; Thu, 12 Feb 2026 08:26:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.30 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884800; cv=fail; b=TzzzCSc48bDfT7Fqdzeqz6Rc2ju3qKjn7v85PKdVWzY/SeAEh0t2bjY/BELEQSwbQJA+TcYIVTlz0d6AKOqnQ1FeSOpl6ppVEOEe6AQBuNOjCiuhxAM/0Vd5VjgHs3m3/wBK/I/Odr9+mMp2K2TOt79BUbtMziA+PYCwnwFF7vE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884800; c=relaxed/simple; bh=e0w2HSWEJgCdPg9nojD1CtJppLsZp7y5MgxWc/JSDGE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=TwUkBFPkCL+stRUAi00NK4qvIAl+3T7cEAfE2zHtv01G9yXU7gCwqoL9oo0ODIpOr/7fr9cUAYTrJKAvTlvYCGm7HyzjFXUG0oinfj1h25nPnUtJiDflQvHLvy401GoGuTDdqNtXyOLbZqLwXvvlXCWxxW9CKe1kzwiVOHeTMzY= 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=ldnGhsfR; arc=fail smtp.client-ip=52.101.61.30 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="ldnGhsfR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ui8tIsXWv6M0cnHJKvWBHTt/xefClInveXpjxPt86BrOVF8uKuiyRal+VGcTchUMZDtK+MA/MdDiKwgOK3dxxiPXAiJRQ0RPctmDMjEsCon5MAguOGFnp/bD7ItGmxl8lP9RF0Oz8VrJUBjVevzRFOE6d4ZKBF1qzzVTmGNvoHEBCRLY4vOC1tmTBDY7STX+5MhtklR5+oSL2hb3iFxBPNuDOVdf6uAUIhpM8CbIhKLTQKA/rBZ90yWiaz9pDoHkZfAoAMllXLh6rjHQa7kye6mEs9es5p+AhewS2fI7XAZCAhTsMCRaJnX/P+D2MGGvjFTpY4VIzK6jEU5uSA4QxA== 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=UKmy9Rm0VgmITdOrjGQ9mIut7aFo0EeO2y5Vvhl7apk=; b=R+8sssZn/Rv1Wy6JKnRD5R6PpXqzBpTgH+oecmeq2mX7oWKWFogScUhKFgPWp65RUqAt7/xIICJ3cokKy7mAQMqxS+TqD7xpgXAKPvWzmZ/wJ6MEWzIhvvJjh6VSo0V4ifujA4OgB3rz130tVPK+aJo1iTiiwO458ZjWV2E4kOulWbee+BBibsB/08OMZ8EBEvrvlwxLVaG/asHZi9PywrzwsUtAFLMaKxUsvWwVP/GN1EnOdey2L8MScTHLGVCcmLlwOpkqp0rOUoubvFUjHzksxh9p+uOIqTd4/P6zLlJeVOVYIISb+d3Hy9fPxlaXgi/35dQy8mwqIpfDV30ZVA== 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=UKmy9Rm0VgmITdOrjGQ9mIut7aFo0EeO2y5Vvhl7apk=; b=ldnGhsfRjBDv89Croubks2ga1d4foNeSsFX8cxdrgiv7Wus82tVaPzDsk693eoiWkqjfmiin4GcEkz7lcRAE7A8R+7s7S2skBeIl5uQtN0pAPmazovZz3jyF3ipWHIhqtCsJ3mIXbZaUVIpgnNmxW5VGW84ZM3TVX9dHQNSvfTUwHzrrCYghyJD8AcI8u+2J+tidQXKRt10VZN0hPtCVZcE0FQaFdELwDscBgiBndKWfjtWDak9ur5VTQq6S5Jur7NMDNDNH1aTIhfXP3mPDFNE2c4faI+XKkxjngr50axUTF1OsfQEFn263u9NwLtRVBoUJctPcy0SeeVWMYpzsWg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:36 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:35 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:20 +0900 Subject: [PATCH v9 3/9] gpu: nova-core: falcon: remove generic argument from dma_wr Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-3-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCPR01CA0123.jpnprd01.prod.outlook.com (2603:1096:400:26d::9) To MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: 7778fc9d-81b3-40f2-14e5-08de6a106f57 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?d0lOOUhiamZ2WmN6UUlzdFpBMTdiN1cwa1Y4L3hNYU5MMGNjcmVUYXZyWER1?= =?utf-8?B?TjU0L3dzbDFRMFgrOXhYOWY4RWtjWXZCOXh4Z3l5UVkzd1dwMDlkV0gxOENw?= =?utf-8?B?RW02cXdKYUpZc0M3ZldyZEZoWG1CM2Rzd3ZMUzN0cU1reU01azRrTFc1UCt3?= =?utf-8?B?OCtOd20xU2ZNUzVOTjM1R3V6STEyTzJOMytoOGRFcFFlTmNKMlNZNWlURlZC?= =?utf-8?B?UFdiZEhQR0lWd3k3WXAxWGZTbUZRL05NSVpaTGxiQlQza00vaVNuY3BBeWhO?= =?utf-8?B?SkEvOWVBUlFXcFFMY09pR1htekFyK05DMDdPTHNmQmlYQW9mVTNXeUNQald0?= =?utf-8?B?SVcweEljb1RXM2cwMjJ1SFhUaVIraFU3QmpTU0hKZ3FHb01IQnZnaXFnMzZt?= =?utf-8?B?TndJSWJlanl5Rlo1VWFJZGJNbFlvYTlTbXh0TFRTMHdkWVVNeU5oUTdscWdC?= =?utf-8?B?eHZuZzJUWDNMYVB2R2tuYTZNMGNFSEdWUjl2enRqK1dhQ3lmNDR6anRLV0tI?= =?utf-8?B?aHBYSW51S08xS1ZBT0xtNThaQVZwMzZlaURhZjdQYkt1N0FibG85eVZ2NEVZ?= =?utf-8?B?RXJrNFdtQUE3NEtjeUl2RTVGNlBZdFA4MnZ5OUVTTXl2Y1F6YXllMUJNUmJa?= =?utf-8?B?ME8wUE85a0t1R3RXRXZXb1pEbTBtakphUnl4SHo3eWpSYXZpVlgvek1BZkh4?= =?utf-8?B?WFlnTlViTlRZTVFkWFE3emU2QzNGTTdaaG9iZTdhVVkvSEd2enRpQmhERmpz?= =?utf-8?B?R21ZS1hZV3ljMHFZRXFuS2pWRUpTUkYyV1BtSmg1b0RJdmxRQVlPMXloYnJh?= =?utf-8?B?Q2pVM2NDUkdEVmpjaE9hcGNVRzJXT3hOU3FtUnBDeWRkWmtFUVp2dVlVbHY5?= =?utf-8?B?WlZMVmxVK3dvUkw5ZDRZN05PbWh0NG84VVIybWZJTXBlODM0Y2lJQ3R6T3VR?= =?utf-8?B?cFVldjFTcmNqVG5XOFp4TFZlRnRzbFdlNUg4cjBYNjBPb0ZsenBQcGNFM3po?= =?utf-8?B?eDd0UGVYMGw1eVduOHcwOXo5ZWF0K2dFeEF6SE5vVisrc0MwSnAxcWJBUXRY?= =?utf-8?B?OU9kUXVpVWIwNmlER3Jydyt4QnRJUFQ3U3VZc2Y1YWpQUHYyNGs4czJjYVA4?= =?utf-8?B?dW9CTXU5aU1pRVRRZkE0NFJUcXlYNmoyR3puKzVmVU1BVytqeWR5UnFxYWZX?= =?utf-8?B?Zkx2T0NjajE5UTVROTBpUjM0bHRMeVhrT1orZUZpaER0cDdYWFJ5Nk1Eak5p?= =?utf-8?B?bTZYZVJ3UEhEZEdmSlZZYlFXb1pjNDlnNEJNTjV0Y0kvZVRLZCtJbEJmWlFP?= =?utf-8?B?NGROUVlDcCtVMHJWUmFxUGFPSWxPTmdhMVluTVgxbEVQUjN1L21nRWlCUnl3?= =?utf-8?B?L1dlTTI4azNwb3FEQ2kvNEMrTGJDSVJId1Z5UmRSN2lFZ0RDbVlaYWJDREVz?= =?utf-8?B?V3NDdmg4ZDZqSlhLM01BWng0aFUrM2kxS3hja0N2djNTQS8yb2xSNkFRL3NY?= =?utf-8?B?UUdXcndBcnZMVHVlYzNaVkxOZjVGMzBOSTFYa0FhVzFKekFBMmMxcHhGY1kw?= =?utf-8?B?Y2drOUx6ZCtUN29HcjJnUHdoVUhrTVgvTWhqbFJSODhwdC8xSmRVTk0xS1FJ?= =?utf-8?B?UGI0b0VnVmJMSnlFWWJrUEZ0blJkUzJvQnV1V3B2Y3FnUXNqWUtpYXUxdmpa?= =?utf-8?B?Qk5FaXYvTGkwNmZJUmZMWDFjYlZNckJrWGl5a1o5aE1CTnhYZTBQZnBPMTJ2?= =?utf-8?B?UnBVMUtJNHpWVkkwelVKZTBMUTJEQXJMV3ZGanZlK2s5TnpocFBzSSsrZ29i?= =?utf-8?B?OWNJdFRrYTFNWU9JRWJwVWswVnVkUUZvZWJkVXM3ZDJVOXEwWVNJdGxDU2cx?= =?utf-8?B?OXVqL3ZudGJWQ0JuTmlVQmZVWW1kYmZ5NG82TzEyVDNITmszVUZIQTRaTGw0?= =?utf-8?B?ZmlhRjhQYTJpaTBRbGRCcXg3aHl5NWM4c001MllHK3NCalJLMjJWT29TdXR6?= =?utf-8?B?UmxYUUtTbmRESnZ0VzJsTzU2bnY4L1c1Y09zY3l0RFdKYzloWndaWDJYdWVz?= =?utf-8?B?V1didVYyRGhUbDFzdUV3SGZHa09QNnU2UWlVelNNb2lMZmRYMmdXQWs2eWVN?= =?utf-8?Q?CA60=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VURwcVZMWlVKT3o5Y2FjaU1hZnR3REloUDFseStZUktvUVZKTTN2WWhONkZS?= =?utf-8?B?YU04bWF6UFRncXI1R2pvdmdCR3NGNjJHSDlBbml3dkg4Qm8zcDNodTNxa2Ra?= =?utf-8?B?ZjhHUWZ2TGtibHVGWEVYMkhMZU5UR3Q5Ujd2SGNTWjlCWU5rbHZ2SE5oUVNE?= =?utf-8?B?N0NoVkE3U1RZRkNIdkNCZDRRYmY5Y0dOUjdlYWFyZzFsMmdpZDBWRXdzSGVC?= =?utf-8?B?TzdKOWcyL0VGYU9QbmR3U1JUT1l3cUFkaHdMSDhGMXRRQjZZdmxSRGtmL0JY?= =?utf-8?B?c3ZiYk5KK3JVcGoySUVKZGNVVHFObHlCWTRnRE9saUcyMnl2alRTcUJOMS9E?= =?utf-8?B?RjZLZXp5dzJZQ29MWExMOWNVM09YTU9zMzdKYUV4UEJSZkd3Q3IvOXZHRElI?= =?utf-8?B?V25TOXhrblBwUUNUbTZUOExzdFI0Y3paV2NnTmNjSUY1cGV1amcwR3MwQ3BP?= =?utf-8?B?QjNkYksyMVMzd2l2MXUwbXhlVDk2OFdHWmhZZjlVaEcvOVEzN2h0eDVmcjQy?= =?utf-8?B?TkdUUmFSOFVRcGM0R3NSdGhicjRLN0dodExJYW54alFRRlFVTDM3TG9UL3dL?= =?utf-8?B?VGk5VTI0TGhqTXpDWDJkU3ArdjhYdVVvdW85aE8yQ282UDJWWTNxbW1ERjUy?= =?utf-8?B?VzgrbXJ6MlJKV3g2TFBCTVp5VHYveWlyMXJkODcycUF4N1dGMHM2UFJvUTdP?= =?utf-8?B?SVUzSldNejFXdlNCNzZkNVNISTN0VXRvdkV5elkxK2JtcXNoakZYVXZpRzZB?= =?utf-8?B?S1lrUHMxWXZtdFJ3TWkzSFo5dFVFN01PeFVvS3QyR0dyQXFrUlhhTjR2blZ5?= =?utf-8?B?a1hrUmN1ZkZXSXFkS2p6dkk0TVEzcGtTbUUyN2p1RXZkc0dHRlRZbG9ZV3Rt?= =?utf-8?B?Nk1ZblpyRUxDR2JYR2MzdnZVbmFzMkx1MHBYOEVsQWVTeGpYS0J2L2FjcUZM?= =?utf-8?B?clVDK2dpenkxaGhhVzJ6ZDVnakFmSHVrbXlJOTc1QUtiSTd6ZjJkbmRjU050?= =?utf-8?B?SVdyeWpJdUxlcjhCTk1yamVqR2hSdW5aTEcxVXFjSjV6K3ZndkZWWkNzSmRa?= =?utf-8?B?Q21UaFNYOE5wcFZJaVg1a0hNTURVeWhhMFFRYTEyNGR5K0JWMGVPRlBSN1BO?= =?utf-8?B?SWxPcFhkTHFIdmR1ZlQ3aVdsVEVycHBMcjBGQVI3RGNmQjlaVEZCTTlPZnJH?= =?utf-8?B?NndPNVB5WDM2Zmw4aVZjL3JHVUM0U0JETUNxRXBmUzJmNlRsNURiYjMzWDUy?= =?utf-8?B?L0dwM3ZaTGVkM1A4Tm4xYi84Z2JlNEZTaFh4TExPNVFGOU1ydEJUZzdKT2RT?= =?utf-8?B?UDF4Ri9xT21WbEV3cnlaMk9OcC8rWmo5c0RDV1NPQXZ0LytWVW5LcS9uaEpk?= =?utf-8?B?bGFHNHQ2VnpCZXNxQzB0SWFRbmIxWmF0Z0RjQ1hocGJvdFFacGM1QjhFS0ow?= =?utf-8?B?UWJUYzZ4TEtRdkcwVmtlUVlzUnFBeHlTODFyMW9zcW1HQXNoVm4rdUVoV0or?= =?utf-8?B?TGZ6bFBrZGdueWxwVUpGNUJaUkNnaittcjZjTEZUS2Q3aXBsUDE4aU56eC9J?= =?utf-8?B?ZjlFM0MvOU1keHBHbHUxVHdKbkdaVVFzcXBhNDB6YjI2a3h5a2lLMmxlU0RW?= =?utf-8?B?NnF4UHhtRXp0OHY5ZzI3T1cyL2R2M0xvTW5CdmtORGVEbzA3bUVZYVhEbnJj?= =?utf-8?B?bGUycEhneTlMamwxZkFpbHNxQVlBYzhxck9yMGtoOFVwWVcyMUJueWtHMmhq?= =?utf-8?B?OEQ2MDl6UldBR3VaQWJFcGpsdzBsWmRzUzVpYUx4V284aklOV1BWUEhQZHF5?= =?utf-8?B?THR6TTRqdDNpNkZ1VGxpdXlZR0FheFhDY3dySDVQL3JVc0ZqWVBGUVh3OUx3?= =?utf-8?B?TGNkRENUYzRqZGYxUGtSNEpmOFl4RzltcExHcXhoMFF6TVBTcnQydzcwbWUz?= =?utf-8?B?YXdER0JxdkN4YWRJZmVpT3dFcnFNUVRYTDJEUzBQK3J6ZnVBemZrMlFGa25T?= =?utf-8?B?NFpmMlIwLzJhUUZTTXp1Q0x5TVNTendZdkhpcVI2UmhQbkpCd1E5RXU5bS8y?= =?utf-8?B?RWhMRkx1dGdkSGlNRnJuU2VUOG5iNGFEcjlxSWs2Rlh3TFowSk9DTzdoeGVr?= =?utf-8?B?c01YZVJiakZhUWVlSnhpdjkySmRLaWt5UWlzT3ZKRDNwTVdUc0dGQjlBeDd4?= =?utf-8?B?UnI5aHZjWnlaRjcxMXFna0psQVhKbGtCWHZMMFJVMk5pT09ZY3ZTNEVrR3J0?= =?utf-8?B?RkRtMTBSWldtR0ZCQitnQm1Oa3pqNUtVV1dBRmtmN2ppeDZTRXlDU3V0RkpC?= =?utf-8?B?UU5yTDBlVURJQ3RzZkQ0RXZ1SjZ2WTRHOVFYbHNCcWJ1UG5tTDNkdVhwaXlL?= =?utf-8?Q?mlhxHrfdeDkb2dm7bWhDlJWFDv2LaJluktlTWkYmOtlqC?= X-MS-Exchange-AntiSpam-MessageData-1: q1D9MjKYYGG57A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7778fc9d-81b3-40f2-14e5-08de6a106f57 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3997.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:35.8578 (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: 6B0i9jaylCNL262HsBB9BIR13Mvf2VNJ+gxvbPcVCDljJmBSHhKVw3rK9vQ+vJsijfEXBnowgIO3yBpCxtqVxg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 This method only needs the `DmaObject` to copy from, not the whole firmware. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index d2f27847f533..35744f7c9cb2 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -416,10 +416,10 @@ pub(crate) fn reset(&self, bar: &Bar0) -> Result { /// `target_mem`. /// /// `sec` is set if the loaded firmware is expected to run in secure m= ode. - fn dma_wr>( + fn dma_wr( &self, bar: &Bar0, - fw: &F, + fw: &DmaObject, target_mem: FalconMem, load_offsets: FalconDmaLoadTarget, ) -> Result { --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013028.outbound.protection.outlook.com [40.93.196.28]) (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 6C9302D8DCF; Thu, 12 Feb 2026 08:26:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884804; cv=fail; b=ELrx6N9h4GikCRpESG37F94O6dOQVgU7xvS1ra+cQ9N5hWTTj6K8glS1GXgLRYxoPVxp2AZxokKiSpyVYtp+fovvfitkGuZL+JTWuophBBhqDeuefuJjfvL5Yt2SN+R9Fl+jP52XyTLYEiAk1c94MPfPMZdonbjL3NdusjqpZAA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884804; c=relaxed/simple; bh=U4uxK0Xx2F/lMw67eBeO2RQYmZBhW2JsGQQexm3dFqU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=blEuqDKbs+YPrVQbSzaOfPUX0cmHPoXE9LGuoK1y1WRrQxAZoMmukOlmbpQd6lvcI4gA/wjFFg4JJw1bGQcGOQ6lbXqtm7dBf8MjCTmdfOX3eT/7ovWeY1mCwxrEdIIN354U8FC9Qv2CRrYeKq0+bDQOhFs9/31FKGUtfteo55w= 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=KFxyVr/2; arc=fail smtp.client-ip=40.93.196.28 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="KFxyVr/2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jLJ3mgq5OWeep6ktSOTqy7Ua2nxcGPWGn0AMXCS9SoAW6YrUlB3bDSU3DFQOzaPCyDVnICcINWOR1QpQRzOp3dZYSTbvLNpamXktVrApxPZ8MfhB1sqWHM4mFZkguloQx39oCuJu6X34mRJkCI66bCb0memmxvzXm8OscYYBKx+4NmIiqaUcCRFdSOgvpwYYfVhDnimePa85nviI3cy2cpdjQR+3G7VBIr3jLepCbygW9PP1U/PMi6dBBvf90WRfOCy1Qd9+OwfTkPJy9hUxeLC/EUYDpgpHiIOzl0SU2uTDSoJhYMmO6cO7X3FocmyMZEJu83CB5iuxHEHiZYF+cg== 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=eBxcNsruIYwqYFBQ0XFE802dLmO/54L7/L6tD547uug=; b=ZMyZ7Uk5BRiND2r+g2zJn51C7IC4+gDSzOuc99Z8+DIsjIx0aOPnM1zh/k1MVqfB6CUbT6cUl8areGb9/2lOBlsHq1u+npQUpKqcP68DiTGTYCOVa0XGcauA2tLdXUBauKj/IaCgHzEdUxIz1Lrf6KhvsrcA3inp0cfq9GTyAqyvkjXtgB3xJAd9ez9zcideJteLp1A7oVTw6BBfgp9LQFpE84jJ6nbfawaoYWdpbJimKIurzXGcxYhtHAyR+qvDSAldZd1HeJQWQ6nMsURSrkxKEyo6Iqw90qv0kKAStgD2R7rDHpX12/fPFqZdq8+cWcquVSz+40lJcK62Olv6Wg== 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=eBxcNsruIYwqYFBQ0XFE802dLmO/54L7/L6tD547uug=; b=KFxyVr/2pOmSNEK+bz0oYyf7W3+/tspreEkwirZAUWXnjq1vGJlTvIIsJOaZiYRus6pEE4348L3MWgp9ylNPH11p0Ah55Y2cRgjHsX0kATf8igQ+pltGtp6UEtyCiZo7q7HEdPbOAzTLmFDY4F0VgxYVYzsDVZKP9aXI/t64Koer+PYb53rgfC4+84Xx5VJdJecJvXvvMw9m9WpDHflRNQ2bumV49f9+Ld/gmpA7Zd/NLS1NJY/lBT/ZwNPVsMyehc5SRSMIcnq5x6APKzNt6ajOgBmLRkZ8x+HacrTKJxqaMWZa8wubYxvFB6dhJOSAplmMcsUxb65YixwVNWBLVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:39 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:39 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:21 +0900 Subject: [PATCH v9 4/9] gpu: nova-core: falcon: remove FalconFirmware's dependency on FalconDmaLoadable Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-4-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP301CA0063.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7d::8) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: e09bcb98-1394-4f1a-0f04-08de6a1071f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OG11bDhCUXAzS3UzMmhTYUp4Y2FQT2tRckllK3liVWFEdFhVREEyTGhZM0Z2?= =?utf-8?B?QllLcDBsOHpBSjFDUW15enY1N3ZsZzBCcUcvU1VDZGtUMDBCMlhEMzU4OElJ?= =?utf-8?B?eThGbGFFTlloblYxSHhxZFFpRVZYRXpyWGlzV05kSGFLWHJoYjNHcHgyV1R2?= =?utf-8?B?c00xODZiVVQ1YmdVQVhSaEl5cHI4alNCTmdWenV5WmdmUm9DUUpOOFhQa3gx?= =?utf-8?B?dnBvcjkvV05SUjU0RFZVWHdtaHdkbzJldkFkZHhrYjJYQVhFZEo5dUVBd25m?= =?utf-8?B?ZkYxUGU5QnVKYndzWWhZL2REeVpWaGx1NHBBZzVYR1dpWjMxMWQyRklzWUEz?= =?utf-8?B?YVhzZzhBVDZmLzZkYTVER05KYlFmeCtoYjVPdWUzdGN5TGNWeW9wSVNpZkt0?= =?utf-8?B?VXFDSjM2bDJ4R0phcDNEZ2d0d2g5a1RpVTNhcWhsb3RVVEI3TlpSeXhmWFVJ?= =?utf-8?B?TUxwTXRWZDhTeTg3eXFJL2ZqUU4yZG5nRzlQaG5Ra0R3V3R1ZFN2MWxVWEdw?= =?utf-8?B?V1pjVVppRjRranN3ODZvL01oWENqOXdFQXY2cWdZc2pKYmRxT1lqVTRXeGFi?= =?utf-8?B?SDlhUUs4elNMM3FuWEV5UzZBdTF6V3lmMlFxei9obTNyaVRlU2VRZGZOUHlB?= =?utf-8?B?Mk1la0l1eVgzRi9KZTZaV1ZGYzhON0dIa0hmam9GSnBCK1VoMXR1YXFWRTVU?= =?utf-8?B?dDlyd0xPQ0RYR0hSaEF0UkFuZ1BXL1VhSzZwZ0hKN0pDOWd4UkxqY0Z2bXps?= =?utf-8?B?MndVNllCMDZ3WU5HUlJZQmJYTnZ2QUpaTC9KTFNteHM2cVJJZ3p1YTBPRnpX?= =?utf-8?B?cVpzcG8yNU53Z3NGTHhnMkRoZTlGNHFyaUNmZ3BhaUhTMTNOeXN2L2hRT3dn?= =?utf-8?B?Q1BmL1h6ZGsxTmliLzg0WThacTM2WWxRNTU4RUdPajUxaFYweE5aU1FGRFVi?= =?utf-8?B?elBiejA1NjR4TDdMUmVOczg3U1BzYlVGV1RaZUJocnB2Z0ZEWVJESmUwWlY0?= =?utf-8?B?UnJTRWRoRFJ4Ynh3cjZwbDFxNUpmT3FjQUM2Tnd6bE5YbGU3NFoxNTdHcnZV?= =?utf-8?B?cmxEdytTTEh5N2F5QWVSL216dngrQVFBdWp3VXpEVGdJUXBDaGE2RjVqc3hU?= =?utf-8?B?eWhvYlE4YTg2UUpwbU5vOS9nVEZvM0l5OVd4TmZmU2F0blU0VGtvODdPd3lX?= =?utf-8?B?NU1GWnJPNE96dUp6MzhhNGdUbys1bnoyeEY2SHpLNE1ST0hkN2VhVnRiTlVv?= =?utf-8?B?L2xyZVZBOXlUK0d0MCtVQ1QrbE8vb1BGWXZEOUlIWDFhcFo2UTRkQUJyUGFt?= =?utf-8?B?SUc1elFqUUdGUjV1UkRlc2FiT2dPTnB5MmFRMmRnMHQzY0dBWjZUNWlSRlkx?= =?utf-8?B?WUJVNmN3alpuTFFvSXFBR3I2Ukpsak9OWlVORGRmVkZVMHZmeFJyU1R0VElH?= =?utf-8?B?bGxOYzVjMUViRDN4MFNmYllzZGUvbDlheG4zMVcrMm5JY1dEMksyb2VzSkNq?= =?utf-8?B?Sm5PeU4xOXVTNHF5Yk00NDdVUmVVbTJwQVFIc0Yrb2xRM2xOYldTWEhEbm9t?= =?utf-8?B?QThMazdEa05PR0hBZklqRVJITnIvMFFNalNENHpqRWg3Tm9BSXdUS04xZDBW?= =?utf-8?B?TnF3Y3poU2RhbWdFa09weWI0TE5WNlQvbWc1STJxTm5TWUpRZ3BEU2dXMEdz?= =?utf-8?B?NHdvd0luVEFWb2JCK2FjQ3hnUG96U3gwMXFnckIrQXh2YTgwNy9JM2grUDlu?= =?utf-8?B?dGpuNlJhRzZJNUNzZW1oTStDRmtYUkhqaDRSSWRYeXZPZjgwZnU0TzZLb0Vz?= =?utf-8?B?bEM5RkIzbjVyK2dhSHBWTkNUNTM4M2l2QkhWRWY1aEJjZFJERVorcDRVbjg2?= =?utf-8?B?SStJb3FHb29pSndNcWtDN1JzcXpmSy8rMVgwNlFBcU55V0F5aVo4WFYvMnZa?= =?utf-8?B?K0JBKzVaYnRLTVdRWkloMDF2eEt2OUZIYmswTDNDb01NMVRJenE5VU9yS0V4?= =?utf-8?B?VHRvR05BOW9XYnppWXhxK0grYzBvVDdmaXB5VG1uWE5qdHZYSUlTdEZTdjAr?= =?utf-8?B?KzN3Qkp5ZEpNV2REbHlWUzM2cWo2bmdMOFhMTUllWXNBcWN1ZWpuQVJjeHdD?= =?utf-8?Q?QjxY=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T2xSVm13RVlsVW4vN2FSektKVTJaUXU4MnM2R1NqaG9RR2d1VnhPaGIwNG5a?= =?utf-8?B?RDlTNEVLNjQ4NHgwQXV0NVZVRlQ5dGpWZVl3RkdtbGk1ZEJFT0pxQ09BM2x3?= =?utf-8?B?S0VycHVWZTZKMGhkUEVzUjRzQUx0c1RUbHFyNExEak0vcE9nc0V2NFRhWXUr?= =?utf-8?B?eUNsK0R3NXhrNnF5V01Sd2V0RkUrODJZWFdHdzhvcEJUdjgzdlk2RTdDK1Zo?= =?utf-8?B?K3V5bjU4M202MkpxeUNRMjUvV0k1VklZeDdrT0Zwcjg5bmxrUjZ3QWZXMDRF?= =?utf-8?B?aTBaZVVvMjQxQU5XOTdXMHVXRkMxWHdTRzNhUDJ2TjV5bmo0ekdtMytkNStj?= =?utf-8?B?VWEwWVVBeXBTVldnT0s5djlWa3VPZHBYYmU5ZVRqdTZmdHU0ckYrYTNLbkk5?= =?utf-8?B?RmJNRm9LVU1uRTNxMjc4dVNqTkFCbENhTVVRQm9RdWxCUzZXdTdzZG1jZjl6?= =?utf-8?B?VWlsTFB6cVMraE1SSThjcUJ4L2IxamRUY1BkcW1hamRnWGQzVmMwVlVzQ1dt?= =?utf-8?B?Z0x6WUZxQmpFcDhPQlU4dEJvanhldlFZTVRVRUVSS2ZBMStZK2M3K0FRVHdG?= =?utf-8?B?UmUxbUdCMTJhZlJ0YmEvaVVNS1ZTUVVLM1R1NzdVekd2Q0hyMGZ3TmkxcG9z?= =?utf-8?B?ek1HNHN5Mm5KMEFzb0Zod00vZXhOY2pxckJyS2lkcUZWTXNyV0Vac1Z1OVhB?= =?utf-8?B?NFp3bExSdW9Oby84ZmJNSDBnRTdaWHFrY3BIMHZXYXFsNDhoKy9mTjBuRWR2?= =?utf-8?B?TXUyOXp6TU96QVZLcWNXSEFvbU5ZQU1aYm5FZmdmZHZsWEU2SWJLNm9DdnlO?= =?utf-8?B?cnM4enUvM09oTXVoTFQwVG94RWxiUVRSbUhTUlBWeStjMzZ1TVFSVXAxeUdN?= =?utf-8?B?M0d3N1JJcG9INE1sblg2U1hDRzhDWFlTM3pIeDhYaEdKTi9rRUViVFJmY28y?= =?utf-8?B?WXg5V01CcUNSRWc0enJaMHpZVWM2bGJCdVJSNlp1dVk3dGwwaU1aa2xUYXNO?= =?utf-8?B?R1U2cng2RzQwZC9NNTZIWG40YTAxWGhBZHZaQ3BuVURHK1FDeTFSVVMxU21B?= =?utf-8?B?bHlyalE2YWFPODY4emxmbjdsc1VETUo2b3owTWNiNDR6ZFp6cXVNZzhFQjhu?= =?utf-8?B?ZHN1RUtzWnIvOWdqZ0N0ckxHNFIxYkJGWWNsQXA5SjBiWGdqczFHN2lWRURy?= =?utf-8?B?RHlaeERYdEVQditzQWlwaGhxUnc0N1Q5ZjZWcVBSTEJWQnAyTzg5L0FEZ1Yz?= =?utf-8?B?OFE3d3lLaFJtMTZsU1pVcGRrU3Q0OTZ1d1hveUNaU0ZTSWkzY2dibVM2Z25q?= =?utf-8?B?Sk4rcUhJVEZCbnUvWXBmcU8yaldXREFqakxxWWlCNGZpUHRvZ3RsRXE5TmFP?= =?utf-8?B?b0xibFpaWVBRc0FrRWlsbFZGT0NTZ05pSmQzNkJUbFBwODNCbzdIRmNodGk3?= =?utf-8?B?MGZkZTJJMmswenYvbFIydzl3c2IyNllwTVpocmFaL1JaM1RHZ0ErQXk3ZHU5?= =?utf-8?B?clNzTEtMM2RnaDQ3TmVtdkxjaDhxeDEvcEF0ckF2RVBmcU5DUnZxRHRJbkdC?= =?utf-8?B?MG1TNVFaTkMrcG5EUGZ0WmtRV0grZlM1aktBUFFiaHZOUjZnM1VBeFJLblR4?= =?utf-8?B?dkdUdStCYStoeUR1c1owdlY2UFdOdWV5WkpJV1hVdDI5amV1VVR0OURkTGNH?= =?utf-8?B?U2VBcFFJRnd6b2YrdDN3OExHSXpiZHZZUktncThtOXdyY2VaaVNUeVBjMElp?= =?utf-8?B?REpPY1NsdW1ZZkpZN2lkK3JYODkzZmZ4VmdzTkV5TWFGWElyUU43S3Z3cEJ3?= =?utf-8?B?cDVzMDBxT3c4aWwxNTJJT3FTMHpkM1QyWGNnRVRLNUlNWFFYZU5sZTBOS3Ay?= =?utf-8?B?L2JaVHVGSDV5ZXRLanFTVW1oaXNUU1pNbWQ4cnNneTJ2bHVPSFlJZXJtUFBF?= =?utf-8?B?QkdTSmtKRE9FMzZkdjByYlM2bktGRXArS3ZwNnhxM0daMG1ielR4eW9xcVFV?= =?utf-8?B?eXhzL0tXYnZjNW8xNmVhZjhzVk5Xc1dGVnpYb2ViOElwSTFTRGt0WWVCNTFJ?= =?utf-8?B?SXBrZGdZR2Q2UkppbmY5RW42YWo3NFZwRTRNS09NZXdtL3JONHQ2Qkg2dGwx?= =?utf-8?B?UXBMaXFjODJyTzlZY2FYSURBV1VqeHdxNnNwa2FqMWgraDFhb3dpNHo0bjZH?= =?utf-8?B?MkdhSVNkb0E4c0pzUEpLZzF3TlgvWFVNdWhIVXAxa2lFdlBSYnllcDMvZ0N5?= =?utf-8?B?T3BKT3EyT3kzczhYOTdqSWZXZ3lucGJaemh5US9xQTl6WktQRGZmY3lZQkRK?= =?utf-8?B?c0RKczJDSXBHSGhYd3FBbTFxdUV1bFVUTGsrNjlHaDBSNFpJSUZDR2t5NDFY?= =?utf-8?Q?WlBJUygKmha1mBtY4FcXOKbY2UJVIETjnGce02A7qyk0F?= X-MS-Exchange-AntiSpam-MessageData-1: foDlrgtc53C26A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e09bcb98-1394-4f1a-0f04-08de6a1071f3 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:39.8315 (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: ywsSbXG0tEGsIRTQUcrPChxp9/FJhC8Yez9RqySdHxG7HRAmDO+ocL/zOGCv2QVfpPysAxZB8yungQFgJPDnaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 Not all firmware is necessarily loaded by DMA. Remove the requirement for `FalconFirmware` to implement `FalconDmaLoadable`, and adapt `Falcon`'s methods constraints accordingly. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 35744f7c9cb2..5eed48226bd5 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -373,7 +373,7 @@ pub(crate) trait FalconDmaLoadable: Deref { /// /// A falcon firmware can be loaded on a given engine, and is presented in= the form of a DMA /// object. -pub(crate) trait FalconFirmware: FalconDmaLoadable { +pub(crate) trait FalconFirmware { /// Engine on which this firmware is to be loaded. type Target: FalconEngine; } @@ -516,7 +516,11 @@ fn dma_wr( } =20 /// Perform a DMA load into `IMEM` and `DMEM` of `fw`, and prepare the= falcon to run it. - fn dma_load>(&self, bar: &Bar0, fw: &F= ) -> Result { + fn dma_load + FalconDmaLoadable>( + &self, + bar: &Bar0, + fw: &F, + ) -> Result { // The Non-Secure section only exists on firmware used by Turing a= nd GA100, and // those platforms do not use DMA. if fw.imem_ns_load_params().is_some() { @@ -642,7 +646,11 @@ pub(crate) fn is_riscv_active(&self, bar: &Bar0) -> bo= ol { } =20 // Load a firmware image into Falcon memory - pub(crate) fn load>(&self, bar: &Bar0,= fw: &F) -> Result { + pub(crate) fn load + FalconDmaLoadable= >( + &self, + bar: &Bar0, + fw: &F, + ) -> Result { match self.hal.load_method() { LoadMethod::Dma =3D> self.dma_load(bar, fw), LoadMethod::Pio =3D> Err(ENOTSUPP), --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013047.outbound.protection.outlook.com [40.93.196.47]) (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 111182D9488; Thu, 12 Feb 2026 08:26:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884808; cv=fail; b=Fi2u17ZPFlrM4a4u0aJm7ndYlh38XXQ2XwYoa504yNOTzZFqmY8a8b3pWvxZZD3NCxQJ6veP0B95hH9jzcxVFJMnaPoqZZZ9JoQWdTzsxed0q2MkDDx/0qQMhs0h65Dgl4ZRR/Kv2z2AZlAdLLhiNh4/gIj70rKGJ2E8fL6//mo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884808; c=relaxed/simple; bh=jfcKBhKuEoIKkHE7NC5OTdcbNxUmnG8m3rzHwFOR3DI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=VEw1q/Euy+igD7BRA88KT+YNI+VQn4c/NQntQVkNczc/P0X7YrLnjON75wkxG07ggtN+viLjg7620VIsuejUcHpkCq8o0cSgsQcWqe4uU++2iXURQD7OtpUZSPFHdxOZLySnE8lJOl8nj9MCZKsVNkjDiEmHpfmLjM2HoFVR1yw= 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=SzWGd5yQ; arc=fail smtp.client-ip=40.93.196.47 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="SzWGd5yQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DyY4CGgJ2h8lm3cADEIWbvu8XoNe3tf3WxPO4x0K25riGcGEtuKiFre39pWmUBnorGPMUp7zIq/NpgXq67LoXNq6gBP0caZdzDa/RA2NeejXuC+M4qRkjdqhjQQVciGEr+JZAYTFeh2NRZ4R4FhQyhXZlEDo+43TM61Cdmx5wp0t71c9hGEKIjIIbYwsdojf9dPcKE1ybGIJ5JVnhOCcslunXQWwewRhLPBsaH7Sm4GX8Vnkj9nYe0xgId3/H75Lt3x6KZm4TKt8AqSY30ZHHOTR3dHYITcL/+xFJIg0jlmBJjrwrBx2auEFpMjKvESgPT+SZtrHcEVgHWqevEwPZg== 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=lrs4IATQoFqMA5qaAUq7H8/hL7qRrZ7ztBAi84BLs8A=; b=tjK9NeV9Fpji/moHVuobyFqncNomWSMsZfJEcqr0HAOgyVFY6eRPNpb/gIJT2zLlBzFUBTK7XDGI0D2Kj0oLuSQg1AEgDkfHwa+osQjDRmTLtyGJJUnKFN537vYA7X5BORnj1WlAZl7DvdTh2EMhlCmJbFBt8nknvDGDXE+h9bYPRwjjJnYpANNtQzKDCMu/Fm21HzvzAzrL7fSFVwGHHJSrZQ4KIFT948UB+0dFPqSAfVAHVuDw+n0LmJtP+zQWmkMochDWVKMgrBP/96mHZwVg8vrnP+BmHQa9PnJqaW1HXIr5zEjvvZfxsB4I7XP1cKRkmIunFiNaoZQd/QNVfg== 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=lrs4IATQoFqMA5qaAUq7H8/hL7qRrZ7ztBAi84BLs8A=; b=SzWGd5yQ1oFV4mEYMNZoD9Q5J1SRNdD/52AV9T67kc2PfpoEz+ts0BKepeqGw8Ib2vnEFf2TpJOHv82VILZLcTSCoeUFmElT0f0zTFY5heqpjXGSlgbakphq3QID+Cek0eeBRrcQWMqPFWIlH9n3xTJsCB5ajsKe0EP1P5XK78OLG1Vx10yopuzCjaWzPBunswAZkepm/eA1ZxbTDGvVvLarOrvBJfuKjRVfDVhsLXnEZGw8LJFEZv1nOzt/RDZW9foq5t4Gov+JXTsOnhVBUyg96g+UGaGKQWe922WaWGO3JkWILb/nn7HTSqcPy0gDwcsifK4qkPxhk9LGROjvbA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:43 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:43 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:22 +0900 Subject: [PATCH v9 5/9] gpu: nova-core: move brom_params and boot_addr to FalconFirmware Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-5-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0311.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:38b::6) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: a65b5290-62be-4b52-dc08-08de6a107448 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bnJEU0I0QXB3eUViUzl2RmVWdndGSUN2aVRaK1NBa0NMR3RrM0Q4YStCWHg5?= =?utf-8?B?K0ptVENDNXA3TEdIWHFYOFF2RnJqRUJWK1ZDUHlFMXEvY2hGRWFJOXRIT2tX?= =?utf-8?B?SWpobnJ4bVM4MnJSSnpqR3RPeFJVZHFGck1vT2JmaEJpZkFNcHJObDh1Z0dj?= =?utf-8?B?SHM5WEFaVDRhWWtpOVB0RVRUbCs0d2FuczlmTnVBcWZXMHJGZUNVYmJSS3Za?= =?utf-8?B?VXhvRHVORy9GcUxqclNoNGZpemI3RzkxVVlnR0dxZWhzeHdzRmlVK1BoM045?= =?utf-8?B?dVFUck1qM1JKTW8yTStvWkxWV0FuQlcydXUwZVdWcUwrcHZ3RFc5WGJjOGpZ?= =?utf-8?B?VzgxUlZLK1lIYWYrcWZGUDhXanJaV3FRSVV6WUs4UEViV29xTFZNblVhZGNX?= =?utf-8?B?R3VXdXpRV0JzYnp0N2lndEwyK3pmSW1GM1NPSjZuRVJRSmFLb2ZtWlRncmFJ?= =?utf-8?B?REJlTng2UFd5d1NpMmNXVmZMbmVXaUNuc3VCSkJnN1BHZURETW4xQWpDSkFT?= =?utf-8?B?L2NmYUxFRStZUnlJRGY3bHU3ZzEzSUhJcU4zVjFBaHNjRnJsSVNOOXI3c1hH?= =?utf-8?B?b2plUXZFNVUrTzdJY3FSYVcrejFuNUQyUHpQd085VU9GNHF5RHdtZ3MvYVVv?= =?utf-8?B?bEw3bG5DMEo5bllLQjVkemYwR0R4U3JQQUZlVFVoU1hPR0JncmNwNnRRVVNO?= =?utf-8?B?VDdIdHl1RjVKWG9IdzF5SXFpT3hZcHArZkU1WklBTDZmZCs1NDRCbVdpUFl1?= =?utf-8?B?UytodnJpaThNbHVCOXR6WlF6WGt6UWNXNFRQRjBoanR0R3lKdVJXK1hqU2lE?= =?utf-8?B?L0dnYVl0cHZQVDFVOU95S3B2T2t4MC9CbmF4MExvRFM0WWNUcEM3KzdKWnBJ?= =?utf-8?B?UmpaY3piTis3UHBVWHVGU1NEbXpKZDBBL3JEMWxhTWl5Z2MrTTF2ajNTcTds?= =?utf-8?B?MG1TNmI3aDdiZmFnYjd5MTY2MVlib0VvNDU5RHBsbE02Rnd4RFRYbTNyN25n?= =?utf-8?B?aFhvZ1NDVFNpMzBXb2x0aTVIM2VFcjJiOFJDTUVvS0NOVjRNQVk4eXZOMi9Q?= =?utf-8?B?MmtydUNwZzRTYVliL1krVHlpNzVDSzJ0eWdmQjVrdDlJUVhxdk51TjNSMGRa?= =?utf-8?B?eHZCcnNib2J3YXFQTlpIVVp0MTgxcnBoY21RNUVoZmY3M2Z3VVVmTkVzZWUw?= =?utf-8?B?UGpZcjZ1OW5ROVR2L2dseUI2SXFoZTl4eUUxemdraVFGanpTWGFnMjM4MTJH?= =?utf-8?B?WGJjbmc5S29JWkFrcTFxZ08rbTZ3NUI0cUJhTXVMRmlOVlZNM1VjWldYbERt?= =?utf-8?B?MzlPbDAwMDRGTWlVS3FYNHVjZzQ0RkhaL0FtMy9kYXlHOGlTeks1eVJCb05k?= =?utf-8?B?MUZBQlduM2d1Y0pHNDRPUTFFUDdwbkxzb3ZTQ1JOYzc1SVYzTUxtNTZob2NN?= =?utf-8?B?ZHdqSzJxSWFraTJaUzVucVBhaHRLYnoxbjIySU52QzE1d015bTEwV1BCVk5y?= =?utf-8?B?S3UzQmxFbm9WSEs0WThNOCtvT0VZNHVBUVE1L2I2a3RRekdnSVZ6WE8yeEFJ?= =?utf-8?B?SFNsS1h1Ui9SbU1uOE84b0lQRmxIQlJTU0tqMUtIRkZ4SlVqVTNUZElyNHVF?= =?utf-8?B?YnlRenJFNlJvdHhGVG4rOWtGTzZaMjlEMjNEQ3N6b0laYVdNaTc4a0paVlU0?= =?utf-8?B?RC9PZk8xOXFCbnRiNEpRZjV3aXdoWGdBUXpSaVczNjBUcmlmN1VSR0M1NWlY?= =?utf-8?B?Qm40Qm5qQUNCR3RzMWNxcVpwVFpSK1NWVngvaERxNUhrNTNscHdQSi9PckdX?= =?utf-8?B?c0hMSHc5NFRCUUE0Y1dXdGZsci9Lc3ZEZkhKNjVxbGdTK2dZRlQ3bjRZSEtY?= =?utf-8?B?ZWJneE82TE1DUVBXS3R0M2c4OGZZcVpoVTZTTytjUmNoazlqYVFYUG85NkNJ?= =?utf-8?B?RkgyRXdHKyttT0kwL05Pa3IvSklRbjFuOVpYYS9BVnhQVitoVGdIK0IzZ3Nq?= =?utf-8?B?T1NmMnJ2Vkc5a3dPdDBLbUlZNXllOWM0NXRDc2FIZk9wK250cG9kckU2UjVz?= =?utf-8?B?c2FtMjhJaXpnZHgrVzJTYmVFQ3dBOU5PbVNrRG94UGZzaDlaeGxsRXJxR0tK?= =?utf-8?Q?LE4k=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cTd6ZFVralJYaXMrcHVxRis0dndTWUR3YlhEVHdubTVWS0Zud2liTWJkaXMr?= =?utf-8?B?dzZlZDNvbHFpM3hmRVd1OGZ4M2N0YjdYOEpDVHQ1M1haQVFjYkkydFhxVjEr?= =?utf-8?B?ZWg2MTZ0V1NndGg2ZEFjWHJTWEx4MUZUcHdxaURteHhzM2NvczYwM1FySjRx?= =?utf-8?B?U2RHTUx0TzlCSjNYWVhleENCR3A1RER5aHVsWW95WHNDNXY1MXBFN0FzeHNJ?= =?utf-8?B?NjMwMzArQkEzOUdJaXJaVWNkWkw2VmdCSE0vekduaXNOZm5PYnJ0QzRvYUhi?= =?utf-8?B?ekxkT0dtQ3lkL05JUW9aUGFQeWpzRHpVbWFGZHk4WWVvNW0wY1ZZQ0x1bE1F?= =?utf-8?B?aTNXZTZFVHBWY1NVbEptUTFidUFCclA4Yzl2ckJWY0lXVHBmem9HdWtRMFM0?= =?utf-8?B?cm80QTdFdkwrUk9QK21BYjBMeVJpM2JWb1p3bkJEbndKc0ZzSE9SQWFRbnR4?= =?utf-8?B?R3ZoYjBXcmJNZE05NHRKMUdyMHIrL0wxNlRjckw0Z2tQOVg2WUp2MTJQZ1dl?= =?utf-8?B?d1Vlbk4wR2xjMjBSZCtFMXZUN1cvRkdFa1ZUMldqdWlzWDRFV2MxVzMyVlJG?= =?utf-8?B?dnNqWWRLSDU2MHFja3VnUXZZN28ycEJsNHZ1bXF0WEh2aG5VRlZ3bDFIRTk0?= =?utf-8?B?QXhOVUdsMzFhS24rc1hyVFpXK00xc3hsNWR6SXE1ZVg1NFVFWkhBT3J6NFZ1?= =?utf-8?B?dHczS0FiYWNacDlUZlhsNHUvZkhuSXl4Y3dSb0ZZVG5EajIwcXhOYkN5dnZs?= =?utf-8?B?NFV4amZIWngwSW1OQWorcjU5V0ZWUGNFZVVmaXhRd2JmVTM5aDVic28vZFln?= =?utf-8?B?UkhvQllCcHdUU1JMMktqY1NScDdCVlNndWRoS0hGVWw4QXl0cXh5bmpocDVF?= =?utf-8?B?WjBtQzFnYTZRVDE3RENaSW5oMVZhQ0w2VEticVU3M1RZZGtQdDRaRVpvNzdO?= =?utf-8?B?R3Z6TmMxcmdodms2TlVGNE9QTFJLc3lUUzk2ZHdMVTFpRlFrLzBxL1pRYVFa?= =?utf-8?B?U0RGMnlqSDVGWldaV092bXIrYTBRazJsQ0N4Sm5GeW1hZG05OVcrMmY0Q1Vu?= =?utf-8?B?Lzh4bFdNYVRNcFp2TTMyTVdDQWpFY1RneVVmelJOc1lhZ2djcW43OSs2UStS?= =?utf-8?B?QlBZZEVtcjVJZWhUZ2wxRVZCblZyWWFLVHZMaG1JZWFGS2JNMUZJK0FHUTFK?= =?utf-8?B?cWZQckszblpQOXRhS0s5QVpBdXF0ZHBxR25BaFBsRGpGNk5hOUtoTjRIRHdB?= =?utf-8?B?V2RDS2Y2cFl1SWdsakpYRThOSVNRb0ZVZTE3cVJIbm1zUE5pdTFkd1dpbzcr?= =?utf-8?B?L1R3STV4N041aFFPdUx1MFA3cWZueUIvNm5wdG90MVpaMi9tTkQ0R2hiSkRp?= =?utf-8?B?eWRiaUJYT2VlOVEwOHlQc1p3ZVUzdkNrZjAwTFpXRTkzaVFqdjkxeDN2TjZJ?= =?utf-8?B?SE9oenhLcmd2UDdoamlxQ2dIcHNwQ2hrVWlFaU9HOUY5Z1pOWDZRY0w4VDU3?= =?utf-8?B?a1M2QTY2d0lzd3M3VFd0WVp1Q1Zya3U4cVBzVGN6ZDQrQTBCVkFqWTh4ZEVD?= =?utf-8?B?YW51eEtzeHZDdTRiOVBmNjJ1bmloazhzaTFyWTVDdzVXMkVDc3dmdXNab1Vs?= =?utf-8?B?VjdqbDduMHY2dDJnWUMyYnkxaG1HcXFDb2JtQU1UUXltck5qNlpkYmJkRTVU?= =?utf-8?B?bnU0bGhHWmlSbUFWQjdGUGJueFRXMGtyS3dycmRmbWdJZllSQWR3R2dlU251?= =?utf-8?B?UVMvQUVpNHpHdjZYblNMQkRIb3VWMzVpUTVMQnFZM2hGQTRSTVZMdHA2TFB3?= =?utf-8?B?cjlMUTV1Q3M1YXlPeW9teDl1SWhScXozRHExSkd6TUR3dm1HaWhhVUdpaVlV?= =?utf-8?B?YTZiRGl4bXFxYmFQMVNCako2SzlKR0MyUU96bmppYkllU25BcnZqRDFDYXdo?= =?utf-8?B?RUxIMENlK01hTnhSV1FRWFh1bVBOZjZxb1Z3ejd1UFVCcXhNWmcybGlMazc5?= =?utf-8?B?SzZQd1dzcWFnMTlRYUlsVlpQK2t1L01rUlN3NkFuYTlCL0JtcmdQQVZKN1hV?= =?utf-8?B?ZzlXZEt1VnNXdkdYMUl0VVdodXZ2VlZJclduWEQrYU1sdVNNY3pNVnFTWFRk?= =?utf-8?B?U1htQXE5MHVBRHhYNGVyOHBZc3VTYmZVTC9BRDdUMEhvSjI4bStlT2VHVWc3?= =?utf-8?B?SlQvOFA2NTE1dE8vMFYvT2oyUGNBZVVpekdQaTUvT3Jvd25xTVpDOXE1S1gw?= =?utf-8?B?bFg2NGduL1JkMHBxZWE1OGlCd0lxQ29ZdGpUY2RFMWxpWHM2TmUyUXpQa2Fk?= =?utf-8?B?TUVReGJHRUgwcXhYemowQ3czNG9OUkFUbEZmVVh6Wmtsd2oweDNaOFVzbnRP?= =?utf-8?Q?gEhkZzq6PU+iqwXi2ZOEuOLynw98pBM8TkQHrKjL34Z5V?= X-MS-Exchange-AntiSpam-MessageData-1: KYwBKq5BDM3f3A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a65b5290-62be-4b52-dc08-08de6a107448 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:43.7794 (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: BH9mDwzYLYrj+kf8Znn/qu2tsokgKqS6IBfvok8vAaOzSdiG9Ka/S18arR46tTvR4XCvR3yqmoCd8b1KDVRvsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 These methods are relevant no matter the loading method used, thus move them to the common `FalconFirmware` trait. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 12 ++++++------ drivers/gpu/nova-core/firmware/booter.rs | 24 ++++++++++++------------ drivers/gpu/nova-core/firmware/fwsec.rs | 24 ++++++++++++------------ 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 5eed48226bd5..7f52b051206a 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -361,12 +361,6 @@ pub(crate) trait FalconDmaLoadable: Deref { =20 /// Returns the load parameters for `DMEM`. fn dmem_load_params(&self) -> FalconDmaLoadTarget; - - /// Returns the parameters to write into the BROM registers. - fn brom_params(&self) -> FalconBromParams; - - /// Returns the start address of the firmware. - fn boot_addr(&self) -> u32; } =20 /// Trait for a falcon firmware. @@ -376,6 +370,12 @@ pub(crate) trait FalconDmaLoadable: Deref { pub(crate) trait FalconFirmware { /// Engine on which this firmware is to be loaded. type Target: FalconEngine; + + /// Returns the parameters to write into the BROM registers. + fn brom_params(&self) -> FalconBromParams; + + /// Returns the start address of the firmware. + fn boot_addr(&self) -> u32; } =20 /// Contains the base parameters common to all Falcon instances. diff --git a/drivers/gpu/nova-core/firmware/booter.rs b/drivers/gpu/nova-co= re/firmware/booter.rs index 9e4f90dff8d0..54f67f4cbe87 100644 --- a/drivers/gpu/nova-core/firmware/booter.rs +++ b/drivers/gpu/nova-core/firmware/booter.rs @@ -403,6 +403,18 @@ fn imem_ns_load_params(&self) -> Option { fn dmem_load_params(&self) -> FalconDmaLoadTarget { self.dmem_load_target.clone() } +} + +impl Deref for BooterFirmware { + type Target =3D DmaObject; + + fn deref(&self) -> &Self::Target { + &self.ucode.0 + } +} + +impl FalconFirmware for BooterFirmware { + type Target =3D Sec2; =20 fn brom_params(&self) -> FalconBromParams { self.brom_params.clone() @@ -416,15 +428,3 @@ fn boot_addr(&self) -> u32 { } } } - -impl Deref for BooterFirmware { - type Target =3D DmaObject; - - fn deref(&self) -> &Self::Target { - &self.ucode.0 - } -} - -impl FalconFirmware for BooterFirmware { - type Target =3D Sec2; -} diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index b98291ec9977..ebea7fed43ba 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -234,18 +234,6 @@ fn imem_ns_load_params(&self) -> Option { fn dmem_load_params(&self) -> FalconDmaLoadTarget { self.desc.dmem_load_params() } - - fn brom_params(&self) -> FalconBromParams { - FalconBromParams { - pkc_data_offset: self.desc.pkc_data_offset(), - engine_id_mask: self.desc.engine_id_mask(), - ucode_id: self.desc.ucode_id(), - } - } - - fn boot_addr(&self) -> u32 { - 0 - } } =20 impl Deref for FwsecFirmware { @@ -258,6 +246,18 @@ fn deref(&self) -> &Self::Target { =20 impl FalconFirmware for FwsecFirmware { type Target =3D Gsp; + + fn brom_params(&self) -> FalconBromParams { + FalconBromParams { + pkc_data_offset: self.desc.pkc_data_offset(), + engine_id_mask: self.desc.engine_id_mask(), + ucode_id: self.desc.ucode_id(), + } + } + + fn boot_addr(&self) -> u32 { + 0 + } } =20 impl FirmwareDmaObject { --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010007.outbound.protection.outlook.com [52.101.61.7]) (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 E21132D97BF; Thu, 12 Feb 2026 08:26:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884815; cv=fail; b=EQQWgw/6UogmgjGU0zshIzWr8DpWue6Qeh9++TM0cwXy2Olrm0YSPMLavHYPaHpp8pM0c80T95kKUDsHyc9ry4VOANfyAlgmKQpe+Hyd6DjxWPbxYeQf8K2Anz4kfkV6nuqmXQpGEXrm67zLiW1decDABM2ThSboHMOEuMkSek8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884815; c=relaxed/simple; bh=F7pQOI6uaBVzIxW5d20Fe5CH3CN66PglvgMxZlTnyh4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ifz18BXC19LRvo4dBET4ZiaS89M0b+QpU+zmuGu/7CvKLcYb1bFSQYmu8w8pGVOaRNLgXQPKX0VHN8st0YYCKBEGFLrbwtMnVx5JNoO9hTOcqwkq5ba7IMuiBGXD4XUMRVxSzc2bPnJwEkamrIiwSuDZo/Dpl2JB4qBB6F8xBrk= 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=pt9LpFB4; arc=fail smtp.client-ip=52.101.61.7 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="pt9LpFB4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xbwsBqwmgMab7/GWoR0Vic+2V3wYjI0i3C7iTNMiizAns9P96EB9Wc8rOZqCMkog7aTM+77C5C4iWFvhtkd8wMRSFzRod8xlC/PV5ezgHZnPI3Wrp39ace8BMWrYAIovI+vbJTjkY2mgvITVCSjRoftSlMqzMDqvaCTf3MFCuP54/Qioq7KJFl8p63GFYKwIsRSnID1L/CFHctFche1X5yLs/BlDRU+SO23qPEoGj5Wm7vWbf3/xeP5GKAegoB15OdfadBNSA0eebnq5BGSIWbYeYMtiQhbki0CdqxTkyOgoT6lUkYpfI5YZ1naX8zjlHP6wZfZyd3mcMcSSueu1sQ== 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=qbbndLXH/Gz7V/HX3+ds/c84PTUtRZGlfJGHdEdS3NM=; b=bv+S3E7N4tlp3oToNXlaSgfcAqaFKQBuOj7Id1O8eWuHMvHmNDAVD71yC693zcLh3xh4Cvh3WzUypmoER6BqQUyqFPd2mwcX3lQLoX8RLQ1EkDaMS97LrMFwtK1FeYkwvALMoPtc4zplL3Gd4KRsYe3EeJSSLYGdGw8+xnL9LD5KMmhQ9t3ug3GNPgJw44O/NsMDJhoxLVVDV0xR12n+NaOfA4cH+sahW8Vk7Q6Nc96d9pnNkTaCgG9UfGCf8qJ/vnenuK5HQL+StzFYiFzt3k6fh9jQRXRLvIaBM41mQQZGhWSGG4wWA95ZIxndaCeI1HFSkNq4ft4CUxJ/t0/6ug== 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=qbbndLXH/Gz7V/HX3+ds/c84PTUtRZGlfJGHdEdS3NM=; b=pt9LpFB4MaBsLG54hvL/VOVXLfZW8PVKWI1x7IEAzqODok4EJ3/dSB5KaOK//O0ZPhV1VUOqGSXqtfFj7LUUn1lw+ZocbIgriCqbxkOiX/707RNImj5O+kxSecKqRf076j4dIJ2npvfnVSwTq4Os8TKNAuBLRrL5X6KKo/GGpFMr0O9oEr6tJuAdbU49eNIC1s6w3PDU1hbGvbrclrNolOahKsT6RkcUwWzq6kZgp4aEyuZybEbxT/R02+TbMtIunFO/mpy7MJatz4wat4ulfOkM63a5uov4Ddrb/0lNku0hUpY8uuj8nCqhAg55SyV86XBF70BKfeBHANWH+MDhCw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:47 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:47 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:23 +0900 Subject: [PATCH v9 6/9] gpu: nova-core: add PIO support for loading firmware images Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-6-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0059.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36a::12) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: 58fd7708-3d62-4d77-d6d6-08de6a107674 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?REVpem42U0ZpRjkzcE5sQ29rV1g3YXlrNytvdUFMdHMrVTVGVDVxWUQ3U0da?= =?utf-8?B?cGF5WnFyb0ZrS3ltV1ArRmRaNVF5NlFQNDFCd203cW1pT1lYSHJNZVd2TzFL?= =?utf-8?B?WWhhM2hNMkJ6eGxpZ3IwREdaNGxCbE1VNnBjNUtBMTR2ZzJ3Y21DNXN1N0pv?= =?utf-8?B?L1Z6NFN0TXBNeHluTmpCejhHc1Rma3ZjYStCbEVKV21DZDlXUytHYXpGYTZJ?= =?utf-8?B?dFNoZitINUtTSlhHRkM5TElhQ2VhWmoxeFJyUmRNc2hUbDZFODVMUFZEaXZr?= =?utf-8?B?SC80dW5pbXJiNUxUQTNnR1A4WVNyVEdUdlJLRWxxd1NGU1RUMFpsOTV5SjZv?= =?utf-8?B?R0NqUW1xZGhPdDFCZEhEejZydjF3c2x5a1ZOdi9YY2UyTFNGTDlENXhuYUxD?= =?utf-8?B?bU0vcjJWWlhMazhPbERIOVhZZlNOMjVBeDdwMmtKaEN4dUZrT21tWTZvVFdv?= =?utf-8?B?aHZURjVQQ2ZhYS9vb096UjliWmo2dlNzdms5ejkydXY2U2F4dkFScXpobHpE?= =?utf-8?B?TlR0RlcyYXdDSytqRlZmQUJoMlhFN3BRQnVNeUY3aGpqQVdwenZDNEdiSXZq?= =?utf-8?B?RmxlcGhBN29YNkpXTGhFZGNock8rd2xneklqMnFSMDFEUW9GcDBoY2MrUVMw?= =?utf-8?B?NW5RNTJnYUc5S2VMaTVJOG9JWSszN0pXOCtrb2lqdmlkU3pKSWJhbTVBazlO?= =?utf-8?B?UXFXeVQveFBJdlJ4N0R3VmVLV3BqLytuZmQzblQzUFd6SEdiWG5sbVZLb2J0?= =?utf-8?B?QS9ONytCSDlUN1l6VTNGVzcrREx2WFNXWlpXbHI1MUpEblZvNEJYdG1QUElt?= =?utf-8?B?L3NLM3dZYy9pZTJ4bUxRcUJ4MTh2NHlFeDBDLzhSU080Yys4YnRCWDhCU1cx?= =?utf-8?B?SXBqK3p4Qmd1bFlIc216N21oZThYWHpsbVlJZ2xzZDVJTTZKS28zbk5YWE12?= =?utf-8?B?THQ1amlCekluSDJTak9RY1NEbUUweklhWE9qMGFMMlJwT3NYdUIzemJLZDJE?= =?utf-8?B?VERPK3Nxc2lEUkFxRDFlUGpNMHJrblltTWNIZXFmUDVBZDJyVHBGa00xMytr?= =?utf-8?B?dFBoV2ZYVVVRczhUMmJWY0swSEw4UDlKQkRGck1aT2VDemFKWEJNbjZBQmdI?= =?utf-8?B?VmR2MllQdmdqS25EK1NtRFdaam1VTkJoTk10eFJibEVneXFNTlpQVGVFc3p5?= =?utf-8?B?T0lyaTNqSnZ2djF0SXJNMzdmWjdqd0E5ZmZ4dlJ6Y0VCZ3FscUZ6NEx2ejkz?= =?utf-8?B?Nk1KYVI2QjJzUlM4UFk4WVJWc1RLWWpzVGxDVExiakU1YzBTd1p0bkxSZGlm?= =?utf-8?B?Qy91YUxLTmR2U2wxYVVYT1pBUk00dHRVMnpmdjEyMEpWanJ6anZhV0NOd2Yr?= =?utf-8?B?Z0pMNk5CbTBrZUFXaEJDa0FLaXZVUDNzMysxeVZUMTZVQjVIRjRhYWtQN2Nm?= =?utf-8?B?V3QvV0VnU2JmY0R2YTNMN2s3eFVGU1FtcG10dDgyM0dEdllRMHdsU2oyVHJ2?= =?utf-8?B?M0QrRHhSeXh2RWRQVnN4dVlEYlBINGF4V1hFV1lrSU1tb1k4RjhKbjNxWHpl?= =?utf-8?B?c3hZdGhjb1p1dXU0OVBDL3BiV0FJY1VnTkdSOXh4bXlkMzdvdWdocUR1MGxr?= =?utf-8?B?UTFybHFFd1ZwYlA2b3FWWCszSVRUR2Q4Z1RMT3kwaUxSbjNyYU9YL1FkOW9h?= =?utf-8?B?N2JCTWwrZG5FeWNmWlRNT21NY2dzdm83ZGtqTjE0QkV4Qi80NEVXLzBUYkdk?= =?utf-8?B?MFRZSFB5ekdMOW5zSW4xTUhXZE1CYld4Yk5SenkyOGI1Qm9NQVJnNGZiaTVz?= =?utf-8?B?MEIveDBoRStYSnQvNzlCYm9pek91dHJpOFdTOGxDY1lhUEphVDVmS1JYZkRk?= =?utf-8?B?SE0zZHI0bWx4OHdGMkJIdmxBVjBwdTFGNndDOGE0T1k5SlRyclk1NnIwWG9j?= =?utf-8?B?dnpleHRXWjh4eUFOcWtyNFluQTUrU2RROHZib09KMWlTOVJwUklxczBvS2p6?= =?utf-8?B?NExjVzcvRENHZjBEWEtweWtUaFBKT0wxd2Y1bjFqNEZhOXdhSmdkSjR0V2gy?= =?utf-8?B?dzBTUUxSOTE3RnFEUFlsNlcwWnBoUktjUTZkUCtiT2xrc2wrblJPVDA1WjB4?= =?utf-8?Q?wxqU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2hPcVM4d3FvbnFDTTYzUVJETGdDZ1RrVVE5a2dWbm9xbTJ3aXBNbXF5dEpx?= =?utf-8?B?SDI0T05iZGU1dXRwY3JReUxaQUszdDFFTEpWaWFpZmFBM3JiSllVZ2lWQVYy?= =?utf-8?B?V3pTTFFUY3JiVUpSL3R6NTcyd3ZjUFpQdUpFVFFHcGFRZXRmUHlOeUswQWpa?= =?utf-8?B?VzBkVElOd3NEQnNpcytkNWQ4RTZ2YzA5R3BQaEI2WEFiT1hYeXBJa2d6ZzZP?= =?utf-8?B?RkFPS2N6cTViRXdGNWdEKzhaTnJHNXUwMEhaYm9QanYzRjhvZUZBSlYvVnUv?= =?utf-8?B?dDJIVWxxYTBLVVZLWjFGZnhPRzYzZ1BiclVXd0xTMFJaRzdaMDJKQndjd2F1?= =?utf-8?B?NjJJY3paUlZZNEdnb2NYMUdyNFZBa05YSVJQbExTZHlRTjExemJiZkxrakYy?= =?utf-8?B?Z3ZSNXdreW5yaDVhZGxKZENHSVBTbUNBaGNxcE9JekYzQXkxMFQ2ZldFejV6?= =?utf-8?B?b2dFbHQyeHBWYWYxOU0xVndUVG85R0luZndJNHRZdi9jRnBidmxqY2JIS1Qr?= =?utf-8?B?SnJBcDZTWCtraXRHMmtVZElldEdESVZYaUFLSlQ5aDU1d0JDTjM5LzNyT1k1?= =?utf-8?B?VVpjTWRGTXdaMGZEUG1FZjlXZngzVGFTSVorOVdveC9nUzFlQ1hqc2VEQ2tZ?= =?utf-8?B?eXVROTc4ZFJPaDlTQ1lIQU1UVmJTQitnNkgxdVQrb0x0UWc1QUtXNC9FTWho?= =?utf-8?B?UFhpVE9UMDBsa0dkZ0w3S3FXZnRQTHpkSzBJdmQ1TFhlWGc1ZFBuVW1GR1JF?= =?utf-8?B?NExJbmxVNUhsSklDQXJQcC9CM2lZajRxeXFGcHRFZ2lEbHcrR2xVc05RQVJK?= =?utf-8?B?TFB2Uk5ROTY1dnJWN3BER3NYeXR3YTJkSUZkdDhjcHQ4ekFVcVdQcUswY0wy?= =?utf-8?B?Vjg5NGFobDhTSml2THk1WWNVb1RFVTF1b2UrOUdpSWtJY3Z5Z3lrRkhxdEp5?= =?utf-8?B?dC9vaW5tQU01V2YxS1FwTVhDdk5IRmxCQUYxRHFYd01NQkE1aFpOcGt3Q2sz?= =?utf-8?B?UHYvcURyMERRdUVSb2E3dldmUkcwMFB2MGlVbThpdzBNeXVUbUtQUU9IcEN0?= =?utf-8?B?bmQvaWZsNys2d2dUaEpnR2lScXMwa1ZaZmlZaFpDR0JmaHNsTTVEeEV4cHll?= =?utf-8?B?VGZLbml3RC84S1hPYmZ3L3RyQXMyVmZvMDVwR3hLUHdWKzFhRlIyMU8rUVQr?= =?utf-8?B?YTdGalRGZ2grVStRQ09KS04xZzlEZ0lxN0YyQVBSYmNseUlva2ZBa2xmZThj?= =?utf-8?B?ekZ2UzA3MWMzWHoydTN5Vk1mM3JCOHZ0d2VJb1BHNXVaVUxQdlZlaTd6Tm1n?= =?utf-8?B?RTVoUmVnaXJURDlZMkRJTytkdTBIak1Yd1kyZkxLWHJqbHJkMnRWeTN6YVBx?= =?utf-8?B?dFlmenpTWCtrVllTV1Iyb2hRL3hDUFJUMTJIQ3BCNUVwZDNkNmtFUkhiaVJw?= =?utf-8?B?YVBpSVJ0R2hzcnhlSHQvTUpJMlp2dTlqTTZlUTAwNlg2VDlaYXpvS2FaRlFk?= =?utf-8?B?Y1FTRlJGRzFpSGNWbGdDVERncVNtZFFuR0pTR1Rpc0ZFTnZYY3lZQjA3MHdx?= =?utf-8?B?QVI4K0dkOGNkMVZmUGdUZlVkckRvTldBc3V1T014dm5mcGljVWc1VUtxbTht?= =?utf-8?B?YUh4a0x6RjJoQldHQjBkZ0sxVmZnazZCRWE1Q29pVUdUcXBtcEJHZk4zY0Nt?= =?utf-8?B?ZGh0Q0J3RFdubFdRc01XNVloakxZK1lHT2k4SUZNRjBlanFwMmpsUXZaQjlW?= =?utf-8?B?Z0FGYUpvNjhTMFdpUW9FUTYyUVdYTFYyRnFQb2h6cWdpbjlwdC8wOXJDallp?= =?utf-8?B?MFNrNHQ5YksxN3JITHZESUlHZXI0L2NDQmJZMkFxU01FVzRDV3ZHNTNpUGY5?= =?utf-8?B?bWZ3bVJCUnEyblJtWWdmaENLMk1CcXFLejhPM2NZN2RlZnBMem52MUVGNnIx?= =?utf-8?B?cHRYdjFIUHVncjl4RjBRakJWZmhXTTFHU0IrN0pGKysxMWh6OUxKL0puaXJ4?= =?utf-8?B?UU9SOHBSQ29PUFY1dkpuZmN4TTVVM2ROVG5RWTBaMU44NlVZYnJnYThGbzdV?= =?utf-8?B?VFU2VzhyTGdrMzk4aTJ3aTRseWVLQ25DemFReTVEaWovRTdIVzdaUHErcXlQ?= =?utf-8?B?ZllaTUFUT240dnZHOUxvL29iaWdHQitKV05HSXRYV25zTkp2T2IyeEhEam1q?= =?utf-8?B?NUI5anBGd1JlOUFUc0xmV091TVp6TDRpR1BPclBKWjhPQmk4U2dIZ2o2M2la?= =?utf-8?B?VzBBMEo0dUNwNEVWTWE4dVh4MXFDZlFGSHQ0MVBTdVEvQmE4dWliZGd0MjBF?= =?utf-8?B?dXBiTk5yK1ZIemtQVVlvRStlMXkweStOMG55UTdPOVo1MXVYK2hUVkFPZXVF?= =?utf-8?Q?FJBEMuOUxLQSvbZQFf75iBSh42eAAHFjCXCQJJ2bdPnXW?= X-MS-Exchange-AntiSpam-MessageData-1: zicDSUegwz4WIg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58fd7708-3d62-4d77-d6d6-08de6a107674 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:47.4870 (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: xi3EETa/1mms1tjkokiZmtoPRGJncGHk5hN0jyR2Tl6GN49nSolJUAxphpm5SbB98vcc1r8HBGHY4tGJ5chfmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 From: Timur Tabi Turing and GA100 use programmed I/O (PIO) instead of DMA to upload firmware images into Falcon memory. Signed-off-by: Timur Tabi Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/falcon.rs | 230 ++++++++++++++++++++++++++++++++= +++- drivers/gpu/nova-core/falcon/hal.rs | 6 +- drivers/gpu/nova-core/regs.rs | 30 +++++ 3 files changed, 263 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index 7f52b051206a..f8de36abd135 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -361,6 +361,138 @@ pub(crate) trait FalconDmaLoadable: Deref { =20 /// Returns the load parameters for `DMEM`. fn dmem_load_params(&self) -> FalconDmaLoadTarget; + + /// Returns an adapter that provides the required parameter to load th= is firmware using PIO. + /// + /// This can only fail if some `u32` fields cannot be converted to `u1= 6`, or if the indices in + /// the headers are invalid. + fn try_as_pio_loadable(&self) -> Result> { + let new_pio_imem =3D |params: FalconDmaLoadTarget, secure| { + // SAFETY: we keep a reference to `self` for as long as this s= lice is alive, and the + // device will not access this DMA object since we are using P= IO. + let data =3D unsafe { + self.as_slice( + usize::from_safe_cast(params.src_start), + usize::from_safe_cast(params.len), + )? + }; + + let dst_start =3D u16::try_from(params.dst_start).map_err(|_| = EINVAL)?; + + Ok::<_, Error>(FalconPioImemLoadTarget { + data, + dst_start, + secure, + start_tag: dst_start >> 8, + }) + }; + + let imem_sec =3D new_pio_imem(self.imem_sec_load_params(), true)?; + + let imem_ns =3D if let Some(params) =3D self.imem_ns_load_params()= { + Some(new_pio_imem(params, false)?) + } else { + None + }; + + let dmem =3D { + let params =3D self.dmem_load_params(); + + // SAFETY: we keep a reference to `self` for as long as this s= lice is alive, and the + // device will not access this DMA object since we are using P= IO. + let data =3D unsafe { + self.as_slice( + usize::from_safe_cast(params.src_start), + usize::from_safe_cast(params.len), + )? + }; + + let dst_start =3D u16::try_from(params.dst_start).map_err(|_| = EINVAL)?; + + FalconPioDmemLoadTarget { data, dst_start } + }; + + Ok(FalconDmaFirmwarePioAdapter { + fw: self, + imem_sec, + imem_ns, + dmem, + }) + } +} + +/// Represents a portion of the firmware to be loaded into IMEM using PIO. +#[derive(Clone)] +pub(crate) struct FalconPioImemLoadTarget<'a> { + pub(crate) data: &'a [u8], + pub(crate) dst_start: u16, + pub(crate) secure: bool, + pub(crate) start_tag: u16, +} + +/// Represents a portion of the firmware to be loaded into DMEM using PIO. +#[derive(Clone)] +pub(crate) struct FalconPioDmemLoadTarget<'a> { + pub(crate) data: &'a [u8], + pub(crate) dst_start: u16, +} + +/// Trait for providing PIO load parameters of falcon firmwares. +pub(crate) trait FalconPioLoadable { + /// Returns the load parameters for Secure `IMEM`, if any. + fn imem_sec_load_params(&self) -> Option>; + + /// Returns the load parameters for Non-Secure `IMEM`, if any. + fn imem_ns_load_params(&self) -> Option>; + + /// Returns the load parameters for `DMEM`. + fn dmem_load_params(&self) -> FalconPioDmemLoadTarget<'_>; +} + +/// Adapter type that makes any DMA-loadable firmware also loadable via PI= O. +/// +/// Created using [`FalconDmaLoadable::try_as_pio_loadable`]. +pub(crate) struct FalconDmaFirmwarePioAdapter<'a, T: FalconDmaLoadable + ?= Sized> { + /// Reference to the DMA firmware. + fw: &'a T, + /// Validated secure IMEM parameters. + imem_sec: FalconPioImemLoadTarget<'a>, + /// Validated non-secure IMEM parameters. + imem_ns: Option>, + /// Validated DMEM parameters. + dmem: FalconPioDmemLoadTarget<'a>, +} + +impl<'a, T> FalconPioLoadable for FalconDmaFirmwarePioAdapter<'a, T> +where + T: FalconDmaLoadable + ?Sized, +{ + fn imem_sec_load_params(&self) -> Option> { + Some(self.imem_sec.clone()) + } + + fn imem_ns_load_params(&self) -> Option> { + self.imem_ns.clone() + } + + fn dmem_load_params(&self) -> FalconPioDmemLoadTarget<'_> { + self.dmem.clone() + } +} + +impl<'a, T> FalconFirmware for FalconDmaFirmwarePioAdapter<'a, T> +where + T: FalconDmaLoadable + FalconFirmware + ?Sized, +{ + type Target =3D ::Target; + + fn brom_params(&self) -> FalconBromParams { + self.fw.brom_params() + } + + fn boot_addr(&self) -> u32 { + self.fw.boot_addr() + } } =20 /// Trait for a falcon firmware. @@ -412,6 +544,99 @@ pub(crate) fn reset(&self, bar: &Bar0) -> Result { Ok(()) } =20 + /// Falcons supports up to four ports, but we only ever use one, so ju= st hard-code it. + const PIO_PORT: usize =3D 0; + + /// Write a slice to Falcon IMEM memory using programmed I/O (PIO). + /// + /// Returns `EINVAL` if `img.len()` is not a multiple of 4. + fn pio_wr_imem_slice(&self, bar: &Bar0, load_offsets: FalconPioImemLoa= dTarget<'_>) -> Result { + // Rejecting misaligned images here allows us to avoid checking + // inside the loops. + if load_offsets.data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + regs::NV_PFALCON_FALCON_IMEMC::default() + .set_secure(load_offsets.secure) + .set_aincw(true) + .set_offs(load_offsets.dst_start) + .write(bar, &E::ID, Self::PIO_PORT); + + for (n, block) in load_offsets.data.chunks(256).enumerate() { + let n =3D u16::try_from(n)?; + let tag: u16 =3D load_offsets.start_tag.checked_add(n).ok_or(E= RANGE)?; + regs::NV_PFALCON_FALCON_IMEMT::default().set_tag(tag).write( + bar, + &E::ID, + Self::PIO_PORT, + ); + for word in block.chunks_exact(4) { + let w =3D [word[0], word[1], word[2], word[3]]; + regs::NV_PFALCON_FALCON_IMEMD::default() + .set_data(u32::from_le_bytes(w)) + .write(bar, &E::ID, Self::PIO_PORT); + } + } + + Ok(()) + } + + /// Write a slice to Falcon DMEM memory using programmed I/O (PIO). + /// + /// Returns `EINVAL` if `img.len()` is not a multiple of 4. + fn pio_wr_dmem_slice(&self, bar: &Bar0, load_offsets: FalconPioDmemLoa= dTarget<'_>) -> Result { + // Rejecting misaligned images here allows us to avoid checking + // inside the loops. + if load_offsets.data.len() % 4 !=3D 0 { + return Err(EINVAL); + } + + regs::NV_PFALCON_FALCON_DMEMC::default() + .set_aincw(true) + .set_offs(load_offsets.dst_start) + .write(bar, &E::ID, Self::PIO_PORT); + + for word in load_offsets.data.chunks_exact(4) { + let w =3D [word[0], word[1], word[2], word[3]]; + regs::NV_PFALCON_FALCON_DMEMD::default() + .set_data(u32::from_le_bytes(w)) + .write(bar, &E::ID, Self::PIO_PORT); + } + + Ok(()) + } + + /// Perform a PIO copy into `IMEM` and `DMEM` of `fw`, and prepare the= falcon to run it. + pub(crate) fn pio_load + FalconPioLoad= able>( + &self, + bar: &Bar0, + fw: &F, + ) -> Result { + regs::NV_PFALCON_FBIF_CTL::read(bar, &E::ID) + .set_allow_phys_no_ctx(true) + .write(bar, &E::ID); + + regs::NV_PFALCON_FALCON_DMACTL::default().write(bar, &E::ID); + + if let Some(imem_ns) =3D fw.imem_ns_load_params() { + self.pio_wr_imem_slice(bar, imem_ns)?; + } + if let Some(imem_sec) =3D fw.imem_sec_load_params() { + self.pio_wr_imem_slice(bar, imem_sec)?; + } + self.pio_wr_dmem_slice(bar, fw.dmem_load_params())?; + + self.hal.program_brom(self, bar, &fw.brom_params())?; + + // Set `BootVec` to start of non-secure code. + regs::NV_PFALCON_FALCON_BOOTVEC::default() + .set_value(fw.boot_addr()) + .write(bar, &E::ID); + + Ok(()) + } + /// Perform a DMA write according to `load_offsets` from `dma_handle` = into the falcon's /// `target_mem`. /// @@ -645,7 +870,8 @@ pub(crate) fn is_riscv_active(&self, bar: &Bar0) -> boo= l { self.hal.is_riscv_active(bar) } =20 - // Load a firmware image into Falcon memory + /// Load a firmware image into Falcon memory, using the preferred meth= od for the current + /// chipset. pub(crate) fn load + FalconDmaLoadable= >( &self, bar: &Bar0, @@ -653,7 +879,7 @@ pub(crate) fn load + Fa= lconDmaLoadable>( ) -> Result { match self.hal.load_method() { LoadMethod::Dma =3D> self.dma_load(bar, fw), - LoadMethod::Pio =3D> Err(ENOTSUPP), + LoadMethod::Pio =3D> self.pio_load(bar, &fw.try_as_pio_loadabl= e()?), } } =20 diff --git a/drivers/gpu/nova-core/falcon/hal.rs b/drivers/gpu/nova-core/fa= lcon/hal.rs index 89babd5f9325..a7e5ea8d0272 100644 --- a/drivers/gpu/nova-core/falcon/hal.rs +++ b/drivers/gpu/nova-core/falcon/hal.rs @@ -58,7 +58,11 @@ fn signature_reg_fuse_version( /// Reset the falcon engine. fn reset_eng(&self, bar: &Bar0) -> Result; =20 - /// returns the method needed to load data into Falcon memory + /// Returns the method used to load data into the falcon's memory. + /// + /// The only chipsets supporting PIO are those < GA102, and PIO is the= preferred method for + /// these. For anything above, the PIO registers appear to be masked t= o the CPU, so DMA is the + /// only usable method. fn load_method(&self) -> LoadMethod; } =20 diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs index ea0d32f5396c..53f412f0ca32 100644 --- a/drivers/gpu/nova-core/regs.rs +++ b/drivers/gpu/nova-core/regs.rs @@ -364,6 +364,36 @@ pub(crate) fn with_falcon_mem(self, mem: FalconMem) ->= Self { 1:1 startcpu as bool; }); =20 +// IMEM access control register. Up to 4 ports are available for IMEM acce= ss. +register!(NV_PFALCON_FALCON_IMEMC @ PFalconBase[0x00000180[4; 16]] { + 15:0 offs as u16, "IMEM block and word offset"; + 24:24 aincw as bool, "Auto-increment on write"; + 28:28 secure as bool, "Access secure IMEM"; +}); + +// IMEM data register. Reading/writing this register accesses IMEM at the = address +// specified by the corresponding IMEMC register. +register!(NV_PFALCON_FALCON_IMEMD @ PFalconBase[0x00000184[4; 16]] { + 31:0 data as u32; +}); + +// IMEM tag register. Used to set the tag for the current IMEM block. +register!(NV_PFALCON_FALCON_IMEMT @ PFalconBase[0x00000188[4; 16]] { + 15:0 tag as u16; +}); + +// DMEM access control register. Up to 8 ports are available for DMEM acce= ss. +register!(NV_PFALCON_FALCON_DMEMC @ PFalconBase[0x000001c0[8; 8]] { + 15:0 offs as u16, "DMEM block and word offset"; + 24:24 aincw as bool, "Auto-increment on write"; +}); + +// DMEM data register. Reading/writing this register accesses DMEM at the = address +// specified by the corresponding DMEMC register. +register!(NV_PFALCON_FALCON_DMEMD @ PFalconBase[0x000001c4[8; 8]] { + 31:0 data as u32; +}); + // Actually known as `NV_PSEC_FALCON_ENGINE` and `NV_PGSP_FALCON_ENGINE` d= epending on the falcon // instance. register!(NV_PFALCON_FALCON_ENGINE @ PFalconBase[0x000003c0] { --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010007.outbound.protection.outlook.com [52.101.61.7]) (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 78CDF2D63FC; Thu, 12 Feb 2026 08:26:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884816; cv=fail; b=LPjZd46Qdk5HajC37/Ll2NbYm45nlEPNY1WL4G2+X/WN98F9POHNcdHIUy0e+Oh8VM9Y8SZX4v048FNLm99ROoUXyaw0ModiTKRVoXH4xbptzjSoqzhDo9uCG7i0SEjnEu5W5c7UMhv1gBhHHViXHZwKdgv0uTQbcZ+XWjol15I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884816; c=relaxed/simple; bh=sxKeHc17mNQlyhGr/stNZHYCLnjX3d8swKYS1w7Of9Q=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=hxjBcB27oosHdO5S8y7U8a31mfma8zyEYhR0W0TVhka1HdEjTVvi5Aa8ykD0lvGTUqwLwJChTrLu9jIHKAhjrzcWcD23bdB6Jv/jjNBZGjRpLjAHIFI6VQKYmKt3jPVhX+J3Q6WHBSM2kJOLGKXl2B9FzQpoZUoq8QZ/ZjpPvRI= 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=jNqMsgzH; arc=fail smtp.client-ip=52.101.61.7 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="jNqMsgzH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BVfScZdVP5JlBSWlFSzfErldDT0Ljgm9qA2xnE0ltJTmyAtomrva4sx+ppjRgl6A/G8Q6P0nBKCmhlWUGl6C28recQzqsUEdaNUPvWm4hQuPHUxhAIENCvh4fXALE9GgTMqwb0rCb9mhzUSPfc+Ee8GK1zyqq5PbLq0NrduqAnyLHlKG74HeKNGaIlhRhzB9YKrTUt8+VOcP3hwyY3jPh1k9nkCdEOZ/+0YAYKXL2Idl9qlpPSNuRPR3rVSlOIf+Ea/9pYL7rwNEsVIc6EVs5lqiIW6jvoq5YPdWK9xhIopYy61BdHDK1Y52I37hCVzU4XzRVLaHKYXcp0q/7qxLgQ== 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=cnArJLx70FQ97Vlowms2wKVgeIi63e2B7TTbLIxH5Rg=; b=uzDvpDzl663wxe9TPUSuKfKdH8gbjZ9+0xhii/cS45wecsEegEMyepa7CZtsBLucCCqErF9Fu2zh/kBN6Thmr/40K9vWA22zosC/+vBIAZ0/+sA/JxcNViAwxwklLJ8cWGsxIfiej2riwD6Y1tDX01pT3PBSMo8jQAGNUdn24R4oxN9OsVz9BbFluc/j9fX3ZBa5cB9OjGEMZrvutaooVv+q5bwFLokud+iItQAUfjnLH/cXSNkAX73qNHzytwjmCDTI61+xUGRZFIW07P3SjK78FWfqI611Cm3eLJsqWwD1KkZgrn+sOrHchOWM76rd3oz6o/A2COf+yY1vhH3PWw== 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=cnArJLx70FQ97Vlowms2wKVgeIi63e2B7TTbLIxH5Rg=; b=jNqMsgzH4AQQutLZ/yoTeQgozvVyQcpn9Ipl00aebV48gzTg24LVUZRrwBYFfYWJdToR4lyIvjemHLvnkIDZs2qnnQ14/1hhNOlXh7Jan5OG/R85vKFEtqcYISYDZVqbyVMAUDmcdzBxWZ0BS6lHL9KeoyfqnRIaLfPGwvrMkm5iGFmwdy1FxfHiy4CyMX0h1d51dAD7nT8RgO0Q7LjTknvo1CHrKxlaOL86JPovPmHS43ncrkrhmTxNVDlYReczxPwgXTNCD9rZmLOEd3yPKbqleNi2WhAoVr/kDBR0Y/4Rcb/2YmuUV7NNO7TXIve9xfDdntPFXnMKMVS9NLM+Rg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:51 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:51 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:24 +0900 Subject: [PATCH v9 7/9] gpu: nova-core: make Chipset::arch() const Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-7-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0305.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:38b::16) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: bcb95bf5-7693-4bc2-7db4-08de6a1078b1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QzFjQ0pLeFB0RWNsUHY2TC90YUpZc0VZUXlHNEZZM2taQnJQYUFpdy93M3BL?= =?utf-8?B?ZW9OR3NmVm1tSEFGZEpmWEdBQ2JlYUhFU0NOaFh0WGZPZk9FOVUvZk5FNXpl?= =?utf-8?B?WHNUbFUrb2RyVENFU3V0Q0pUbWpNMWtoUFc1UGJCeVhpdlR0K0hOUXQ4Y3ds?= =?utf-8?B?Q2E4OFplUDR4VUFiS09DaVY5M0U2T1NpM05pYmVtbWswYXZUVmpVVVV2Vjhw?= =?utf-8?B?TG5sOU1MbjhBeXFpa0lOUUZ4VTNpNG5MSW1rTzMwd2hvRFMzd0Q1OURjaVVq?= =?utf-8?B?U3hFTEJCOU04YVV3S0VJYlRCaXplQmtSQlRQUGUxL3JuK1h3aW94VENHTHlT?= =?utf-8?B?Z1padWhRV2tQNFNjOHNYS1d4QlhocnB1ZmZ4NzVnektVSFU1QnFmcW5ReEZi?= =?utf-8?B?NG1zN2VnSUFxaG1uZmduWnJCenloK2VvL083VUdEYUNWWFdtK3hkeTI4OFBt?= =?utf-8?B?OHNhcTRIU1JLVldhU3ovaVlsT1BRNUE3M1hBNkpmVTNwS3pRNWhVbytRY3Ba?= =?utf-8?B?VFlPN1V2dmVscmVRNUxuK1AyaHRCdGxpNVlONU1yQXNaSmdqd2FDSjM0bmla?= =?utf-8?B?bU5ScEkwSXZPS3FzTXZxMVMvUDVxbEhDNElzay9XVEdiZUhibTBvSzlLK2RU?= =?utf-8?B?M0loVVlaZEJGcHA1ME81WXhYSGZ5RVg3RUEwY2MrQjkwNkhTNHVzK2hzV2ZI?= =?utf-8?B?RVRXN01tQ2NSQXR1MzhUK2hnbE9yTkMzbnVlVDdMRGJJQVNWTzJhNWxpeEMr?= =?utf-8?B?TGJWZWpzWUdnYXhIWis1WG43UFk5TlF5RzZFNGt2QXF4bE9zM3J1S0tZd2tT?= =?utf-8?B?OVRZSUdsSTBiMGZ5SDI2YnU4Vi9WUkdtYXU5VXEzenl2UUdYQy8vVHQ1ZFF6?= =?utf-8?B?aG96aXd0bjJyRHBwZzJrN29xL3IyTzlaaUtrRE9HelNrT2RGWmRmeEgwZkRm?= =?utf-8?B?bU9QVFRlQVhtLysxNUVNVFc2VXFQMHpIL0UrdUhoMU93VmdEc2htWnFxeTQx?= =?utf-8?B?ZXBPYmxYaU5mSXhBVURHRWRTVUFNRzQ3U0p5UUhtVVZzWThlL1BSVmsraE9i?= =?utf-8?B?WTVDOU90cnNFN3B0dVlHcmJxTlp3SEU3Qk9EVHZNeDgrZU1hSmVBZ0FYdUd5?= =?utf-8?B?OW9tWGJmbU1aZ250cWEvRXVvZE1QSUxsTld5SmlHVDRjSjAybTE5RzBoMnpt?= =?utf-8?B?bVZQdDRiVUkzUFhzZ3htMkpBdXZsbkJIMnJzUkNpSGZFSjZZZGY2ZEdKNWg2?= =?utf-8?B?OFNUT0ROVjFmVzZaQjFVaWxEbmlqZlJOcVNqOWlydnpHdkQvRllTU0xHQnpl?= =?utf-8?B?ck1jRnQvcUpWN25NeUFPYlNnb1JDR0VBbjJpdU9xREM4Qi9LaExja2JPekhu?= =?utf-8?B?UExIQ3Mzc2F4bldLK2xaeDBLNUFrMTl0ZzlNVXpDR09kMlg2SjJXVjNFalI0?= =?utf-8?B?TWdUN0FTc2Q1d1F5S2kreFZSM0p2YXQrNUVmN2pIeDlXNnloNVVhNlBBbW9Z?= =?utf-8?B?a1I0THg1K2NRT01EekQyQkdYL04yNWV3TUtMWXo4c0l1RFdYajE1UVljcElw?= =?utf-8?B?dWh6OFE3MmM0N1hxRkRPVklnQjVyemhWWE9FbmJXMUpFSlFKS2UxUlI2RzRs?= =?utf-8?B?c3k1VGl5SkRYNGNsS2dkbXlvb1lIV0EyRm9vaXBoTVBsQlQ1bzRQbTNqdHN5?= =?utf-8?B?d09iUTczTHJKZkxxeGZNSVpwRWgyMnVaODJaUDZJRW5OTWg2dVVNek9hUnRt?= =?utf-8?B?WW04N082NG1vUHoxbjdaRXcxQ0xTN0Q3SnpsaHZIdVNjajYwVEQ2SkZJVk84?= =?utf-8?B?WFhTSEdhL05MdVpMT2VrVTNvMFZWVm5hMVZrWHVMSWhwbFpJT0xIZk93WmdN?= =?utf-8?B?VXJ0c2Q5MFBwdm15dmNiNC9henRwYVgzbGp5MmZmREpIZUNoWGVIL21GVXZ0?= =?utf-8?B?SXkwdVdkeFFXeG9YTHIzNVNoaDdDZHZuRmRyTnpISGZpYUpGeG5JSmg1aW82?= =?utf-8?B?dkQ0d3VRb201MU9EZXBDMUhGaVpMQWpzZTdtQm8rK2JkZWJTc3RXTHRuS3Y4?= =?utf-8?B?MEJGbWJxOE9wcjUzazhpc3BjblB2TFYyeGNsaXBsUzFnVzBTV3R4ZGJOQzFB?= =?utf-8?Q?q/kU=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T1MrS2ZmL0pWOHdXTWJpcDhzZmluWVpIMjlNR2NpSHBMUFNtRFFBTjg2T0JT?= =?utf-8?B?aThGTzJRVzk4WkNZRzRPakxXaXQ3NmJnRDVzWVhTMTJnbDNDbjFsTjArMm81?= =?utf-8?B?M3EvZmxBS3dma1BseFowWGs2MmJ1Qk0rSkpJS0Y3ejZBZkpiajlrMGNyeVJn?= =?utf-8?B?eHhOcnRkNGlkMGlzamFoc1NiUjJaNnRNMTRVeHlLZzJwc1h3L2VTak1rWVhT?= =?utf-8?B?OWNDWm9WMWE4ZHQrYkZTWUNGanYwY2ZuQ1hmam5ZcUZ6UXJGa1RueEJZK0Ru?= =?utf-8?B?UlpqR1FuaURSZDlYWHVwYVFBOVBvckJQUWFLak94NWU3Ym1GeVQ3b01LbFFP?= =?utf-8?B?Y1ZSRVRMNXBSSjY1enpuNFNlODhWdGx2L3dhTG1UQXduMWtscmdNeEQzaTVX?= =?utf-8?B?WmdHV3o0SGJ3bk9EVGdSVkJ2Tlo3RmNhQ1VoYm1CV29aWmZmRmxiZEE3MVdw?= =?utf-8?B?WVFVS3dTZVN0RCtaWHdRcWtqaDg5bEU0NWJ6L2haazJMQlR2aTBicnZXRVQ3?= =?utf-8?B?M3dBTUwwRHYrN21kcnRXQzRwREg1empoNW03aGFsamczb3g2S1NpQ1BBM0ps?= =?utf-8?B?d3lOSGxJNEZGandlS1VyY3YzYnF5aGplUmNsU2s2dzNQZ2ZoMGtLK1VGZVBP?= =?utf-8?B?RTZYeFdERVJJVGczZEJMSDhISWhDbEhLMnJ0N2VTY0IzZGFhWDZMNWtUbExT?= =?utf-8?B?WjB5MHBXY1grVHBETmZEaHlJWnZ1T3ZCNS9UWmFwT3dLMmd3VmV2OFlFYWZq?= =?utf-8?B?TGovQzEwUVM3Qk9IN3YzR3ZFL05McVpYWHpRVnVLRG1JbWZNOVB1bFhBcUZM?= =?utf-8?B?NHNKMmYrWVlHWE11dmtHZGJPVVBBUCtvcm9LdXNEV0QzZnJQNGtBaW56NENj?= =?utf-8?B?Q1kxaUNwUFp3Y1RkSzg1cGF6d2JIYS9uRDFPSkdvbDZ4L21aNWpZSnQ2Vm9p?= =?utf-8?B?d2oyb21TNjlSQmk3YWNGR3hVWmwrSTJ4NGxaVGVkbDVidFVrQ0ovMklmWkJY?= =?utf-8?B?RkszWHE1bmZFTElwTnBjVU5Md2diSThqMDlwTUZLd0x6YWd0dmVTYUdwNlZ3?= =?utf-8?B?WHBkU01nT09iQ202ZFhKNktlemsvWjNzUi9haXhmN3ErTXdpNHdzUTZGRCtM?= =?utf-8?B?NEU4RzhRVlJhbzJFZWQzTDdzQUtFS3RVY3JaMUMrbjNYbDYzWGs1enJiMUZV?= =?utf-8?B?aWxCUmkxdmJFcW96aE9BUDJYM2ZYeGFmTGVIV3hRbVMwVm03WTJqQU95TUtL?= =?utf-8?B?L3VuSHVFdVFKY2lhWHVuZ2RCN0VoVUkzUWVKMnpvSzAxd1hjbWp5OGZBWFc4?= =?utf-8?B?Tk5SZWpyL1UxQUJEcU05Mm9GY0hRRXNYZGdjMDN2VUNndlpDZ3JHelY2K3BR?= =?utf-8?B?L3dSeTNxZVRiM0o0RHFiM2RGSGl3UUI3V2R5b2p0cnJGNit4aklYbWgvSVVL?= =?utf-8?B?QjlLZTFnWllJQ2xjZU5aR21lbk55cG80RmJGODNuME14QXJrRDVMR1UvTXpB?= =?utf-8?B?L2VSRmZDZU9OVFFtZUcycWptNm9mVlNsajVUNjNIdVZCQVF1NlFPajhaNFFi?= =?utf-8?B?U3ovZUtwU0t0NS9ETjNaRUdrY3ptaHZrSFBSQ0FnTTNQT2RBTlBpc1ROWjh0?= =?utf-8?B?VUc5NVZVZW9pc2piKysrU1FQU01lMUFRWHdJd2R4OVpyeTlxZGNMd01jNEsv?= =?utf-8?B?K3JVR283ZmlzVXlZYXM2VlhPWUNOMWhLN2hnaTg4Z1piWUErVFUveWl4UDFE?= =?utf-8?B?V3ZHSjhmcUhidnVJU0RiMXU0NlVNeFByVDJUZkpYMjdQSGNvUzR2LzRsZDBz?= =?utf-8?B?S29vWHVpS3pNL0V2K1hqYlNFdnNubms0b2prZGNpeTZ0UnRmaVl4endPc1R4?= =?utf-8?B?d2xzdWQrbExvK2NCcEs0WWFiRXlNKzN0ZmlaZmdkZlFIWGlxQ1IvTWlTMHJF?= =?utf-8?B?SVB4aE5RRGpSRUxkYXVwVUYxVnYvb2s5TXNzcHVvUHFNQ3VzV2I4VVhQTWUy?= =?utf-8?B?Qk9oeDN1eHZLckZrQ1BqTlBGWWRvbTBHYzhGTnVSQ3dsRnI2QTBaeVpVNWlB?= =?utf-8?B?eHlpN1NKQU5iRGZqTVpLWWNPR3VYbFQya2hJZzhUajRwMVcwc21SSFA4UDlh?= =?utf-8?B?NGU5dVpsUzRobkJoWC9WSWJTRVc2bHpuWUJHQ1I5Ri8xM1JoRVBWSVJCM3Zk?= =?utf-8?B?VlQwbjNvQlN0KzVML25iQnR1TWlETmQ5SnlKL2kyYndhZGVBaHFUQTMxZTQy?= =?utf-8?B?VFk2RjhTbGNXT1RMNEdIdXFpK3VzOHZiaDhMVDRQSjJ6ckZuVlhzM3h5a3Vz?= =?utf-8?B?L1NtcVpvYWw5bTVvSmlsajN5SUplL2luMkxaWGVnaDFzTUQ3cUQ2UTU3bDBC?= =?utf-8?Q?sEnO5ysEGqR4lsBWplDLmetPO9u8CIapR739Esu2kgmpW?= X-MS-Exchange-AntiSpam-MessageData-1: e0xeCwwgz/ADxA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bcb95bf5-7693-4bc2-7db4-08de6a1078b1 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:51.1848 (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: HpZTV2PaXfcsppziWzgaE1+pte+9G/hw/dqAjxkvag10cgdhQ/BbCFOyjwE2UGA4Q3lbklFmn02iswxao9kZ4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 We will use this method from const context. Also take `self` by value since it is the size of a primitive type and implements `Copy`. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/gpu.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 9b042ef1a308..9726205d94b6 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -92,7 +92,7 @@ fn try_from(value: u32) -> Result { }); =20 impl Chipset { - pub(crate) fn arch(&self) -> Architecture { + pub(crate) const fn arch(self) -> Architecture { match self { Self::TU102 | Self::TU104 | Self::TU106 | Self::TU117 | Self::= TU116 =3D> { Architecture::Turing --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012007.outbound.protection.outlook.com [40.107.209.7]) (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 0674E2C0F89; Thu, 12 Feb 2026 08:26:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884819; cv=fail; b=RG6Hlq7+7K9yfoczsO4KMTb8vEpNbQ27oVnHgsixuHigp4Kmd1DMOkKBQ/YW1GappETbSvvbRpAvJmF1PX2On3eIQdgAEA0G653KYqi+rDRJZLgpKHWzPHHdoblO/8NB8vzTuDoTtNUh92PBwtcqTWchqoN/pYvmCOMNLrqOP10= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884819; c=relaxed/simple; bh=pH+vArh0T6mUaSx2GXOkpb754urrRYF+CLlzu6xWaPM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nOdOpOunLVlo5pYzqL+Z5DnUFyH+Isnit+XWnd/vYVoR1mF3Tvr5jBddFsfIrUTGWkC1YxNnX9An+/1JRfZA2W5zkijOKv/xLZOM9QyPM98IKuRcV1KuFIlFpRQfdGYmnxjjv3+XgNNxhadMLyp/8MrBagbUUEhvTAbSDAjFRq4= 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=jFx/F9g5; arc=fail smtp.client-ip=40.107.209.7 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="jFx/F9g5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sGilt9J4JuMN7OGTaiXCVXoZzsX56+Yjyh1iHfCnmjlyd1vsDJmxPN/LqO3nQIrvViqf6/HYtOUeUy0XxZEN0v5Po4Gbhl186PvlN+zxvCL2QiiiJtGqSpl833h0I34B0JLtt/qZDWcZ7p0OWAQjPyNPAMQNb1I1RBTwIQ2+NK4qkAYOp4jIX9aB2v+Xj20qSoRKnAbdDhGe0iRUSZzlTk8VcZ75naGuYBinE9fgF8E6o12TWewytPN01AxJpkTFVbJPOuX+4k4BNcsy/sx2CaJ+ShEH1YwsJ+AIcVhclJ2MB7oA0XoI2Yv2eYwpsNuVyqja5ROuvP/2Mp29D0Hv9w== 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=Ph26vy9N9eU0sDcCHmi3vraH+lSuYIDVWhqcJNU2x4U=; b=S3NarEwCOldCQ2OPQM53VFmG4uXE/5NhrUxRTZepoeQFO6SsEDXe8Eu9Wz9zHZiXMMnn/A+ZAmtdS2tIEbDCTDwAICjcImc2ot/MW7bo4Z6ZkvfuDYOnt3lbbvNMrQj3OsRRRHvGqdcMLhn4gj/f8dQOUoO5Jd7NKDxj4WOSAtukGDej3NLHWr1CMziS6m/NPB1UxQjvfMHn8sXQYxh4u6C/zmH3HfTyBxdK6pBQvga3f5DH0Gv/T6S6e8fvKe/PIsYdktG7IRMWlMHtGnj6Wc7HcvZWFcKptCRTfxIFxjVsMDABSmZsfSdEVIxD+tlZ514t0U/KrJ7cVCTHxHZj3w== 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=Ph26vy9N9eU0sDcCHmi3vraH+lSuYIDVWhqcJNU2x4U=; b=jFx/F9g56t7te+FyNKpHcfWZWZ9aImaAKdDwnEHQ7L29DM7+r+3W/+eCQPAV6OBXhsfnz111Q3sl3S69tO2hn77nLpfGMTr48fAq3amQr/mHEw6PIuOOcQwURGh7uwWqbfaeSAbGXzDlrd5J5l9cyfotfNB9zpNjG2mQzbyBZMgO8fv0MHAQtENrHO93FNINDWfKpD6apMc2PshZpQt/sbhA65TrUvy/Rj5sI0atxgCiNq4VuUHjHY2BRnTyYQWiu5DFIQVDlVAV539v5RCQBMZ6K2yemSdHH2QvjnotisWiBjf3tNRTVh9saQkW1euMrby96My2VPklqwntZNtfoQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:55 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:55 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:25 +0900 Subject: [PATCH v9 8/9] gpu: nova-core: add gen_bootloader firmware to ModInfoBuilder Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-8-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYWP286CA0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::13) To MN2PR12MB3997.namprd12.prod.outlook.com (2603:10b6:208:161::11) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: 31423062-c192-4f60-1deb-08de6a107b19 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?a2k5RlJ2OXROWlptZzRzSE9zMHlDSHNPamxuZ2hWL29DSGVKbzVBdUsyNEVD?= =?utf-8?B?UUN5OEJuTXRvQzVCanNGSE84SmdxSlJOVGcrVWNoTXp0QmtyMDhTcVZDMnMy?= =?utf-8?B?RUNWWTNaajE5VXZobElrdlRLTjlhK0RaUDBxZmtXUkU3ejZ4VVJuWm02TWo1?= =?utf-8?B?UFJ5MGt2cHFtazVTKy9KdHhmdmQ5b1oxR2tPdzdjQ2U0RW1acHhVSmhMYm40?= =?utf-8?B?MVZMZnU5YzVvZS8rMFpaQzRFVURxMnF4d0FwelR3N0lDMGl3bEZ1MU8yMUpK?= =?utf-8?B?TUJYNmx0TldGcUZaejRpQ2NtT1c0ejB5ZTV2VGtmUHJ5Wkg0WFByeFBRUjVB?= =?utf-8?B?SkR1OFdYQTBPeWp3RHV6WFFqL09tUmhCR05aUmljemJJd3QwL1BTSHlkMlRX?= =?utf-8?B?MVBFOEU5NzhabG9kaThIYkVvaFlpRzVFLzN5ZmszK01QbnZKdXhwZXB2MjJw?= =?utf-8?B?M2wzckl2dWthWjAwOWxBYUFTZWhRSFdlMG9QZ2Y2MXp1ZzQwaFQrb3JjcDgy?= =?utf-8?B?MW9xdllJR0xheU04M0JKSnhLcjZ4aG5ydHhrOU5FOUhFZDhlT2lkNUs5S0hl?= =?utf-8?B?WXBHUGZYa3cwL2JqYm1LU29iZ1lyMnEzWFBqQWwzeEc2KzBsQWg1czNHT0Fa?= =?utf-8?B?QjJuekk3QWhuV3lVZjlDT01oMGtmU3pKS3AvQ1lmeTU0SEg5bzFqSEZHaDBX?= =?utf-8?B?bUpNdFpHYXYrNWp2MUlPcW1CYkoyaDVaVFBxaEFzS1NwQm9BRXJIeXBNTjZL?= =?utf-8?B?TWhRU1VKQ3NMbVdpVXJPR0lwUUcrYnhvTXVYeTRKdGFXaHVKU2cxelhQS0ZI?= =?utf-8?B?RTkrdUlTSm1IMFR5WGxHZ0xmaGV6UkN4YVJlZlpMNUMwTkwvVnJlQ0dHcElW?= =?utf-8?B?VGxFdlRCSFBMQmZoSEFsa0x4RmVlTUgxYnRRcUVEREtPQndnUFdiRG81TWh4?= =?utf-8?B?dHFXM3lEb05yZ08yaldSNEI5Tjc2MCtzR0JaZVZWcmt3cGdFZWZVK3UwQjBa?= =?utf-8?B?S0xwNFJkSEhqNHV2Q0hZQ3gvTFJSc3FXdUxJVGV0cERpT0JlNVVuZC9GVDBI?= =?utf-8?B?VG90V2hYdXFkL0tDbDV3aGI4VzBtU3J4VTdRcnNST3YzanVvTDNSelJUZ3VX?= =?utf-8?B?ZUFrOVk0Wks0Y2hadTlqeDRsQU13SDRvSEJsWDhBZytacjY1Sk14UzNIMVNn?= =?utf-8?B?WllPWC94NlJkMURNbDdBKzAyemUyV3JZUFlQUUFmazQwSEtBbUVFNi9UZFg1?= =?utf-8?B?VVJZMWNlUjJJdEdEb0ZKQUMybDFzZi9ya3NMWTNWSGF3RjhBSmF1RVB6blJU?= =?utf-8?B?ZmJOOGo4WXkzTXdDU3E5VXpYRFN6dTlXRzRJMWt1bmR5VGVoOUo4SW9vQlVJ?= =?utf-8?B?OTJWczBYWVlFalNaQkZLVWxiVzY2UThFT2h3UFpaRGlEc0xKei8wMmwvb1cz?= =?utf-8?B?dUtGVVFvMnFJaUt6UXl1Ylh6RzVCWXN2SDNERmJ6elI1K25uM1JsYm9PUWpt?= =?utf-8?B?aDdCR0IrditIVkxpazZvYlo5U1ExOGQyc0NXSDkzczUzL2I0WWs3SmFORjNK?= =?utf-8?B?Z3c2WlBqcFJKam5kRjNOLy84ZVZQQS80Y0czb0h4Y2tSWVNOclpVV0tzcnZI?= =?utf-8?B?V0ErM3pjRVEySFZ5OGljK2RROEtHOWxlSWdZbEhjV2xGN0lIYy9YdWJKaGxs?= =?utf-8?B?dUhCTDNwSFBPTndYS1h5VmNzRUVDL0pFQ0ZBYlJsWGxvdk1leWc5Sms2U0tk?= =?utf-8?B?aHlMWHFrdVNDRWdTZDRFaUdhQ2kxc0lidlhzTmpYeFMwQUNuV0JUdjNSZk5j?= =?utf-8?B?R0FYMmdKdmxpRnQxZHFURmgrVm9mdGN3UU5zaFpZZmR3SUJlVy8wVnFjLzQ1?= =?utf-8?B?c3NNUUJpNmQ0VHErYWUzdFBCS1p0cm1Md21Uam5nZHZlUVFQRkZQZ01iMnl2?= =?utf-8?B?aUJ3MndyU0xEMDVab0JRTEN0WUdmemRZTmlZcnFLUEZQYTQzbFdlVFdscjdn?= =?utf-8?B?UWk4SjQrdkZOakQwU09LaGY2R0QxMzlXTXVBNjJveTNnV0x3RGg1RmxMUnJz?= =?utf-8?B?eGpvM2IxUjhJbm9jZXJBODdEblI5d3RxNHBiYTlZdld4OFpvYTZ5V3phcFlV?= =?utf-8?Q?qQDo=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c1pNRTBXcGYwMldpeDRoMFoySDdvRnBYaEJVRkw0Q1V3QWZYdVNaMW53RjVU?= =?utf-8?B?RGRuWDdUT0dUZ25FOG9QYmxSZGZxd3JHM1U3TGpPM2EwTnc3NUdPazlIUi9G?= =?utf-8?B?TjJoNnN2WG5FcnFVSVBLSmduWC95MmlLUmlGOVlIMXJBWHpHMHR6dGphS0p6?= =?utf-8?B?ZUVvWFFWK2pkcE9aTXRVV1l1Y0tUMkpsa1RtS3ZmQjRKaG5ld3kvUmU4U0ZH?= =?utf-8?B?Yi9QYW9sTTRsRWp5Vk1VN0Q2T0dHNGhxVnJSNmhNdlZUaEZlL2l4UW1DckVt?= =?utf-8?B?Z1RicjF1cWY5T3l4S2l0Yk0zcjdYOW5VZEVXT2o2aUhDNXpYVTBuN0Q1TWFj?= =?utf-8?B?WWQzZTRDOVFuTHl0b2dLak5kb3M1Q3FjTmFORlowblQ1NEhPYnFRWEFKNG51?= =?utf-8?B?aFoyY2gvSzlzeHhMNTdyVGlNTlMzOVlZZVBTV3lVR2lKWHR0dXRDVXdWbkMx?= =?utf-8?B?eERHZTNvUzRMekFPdjFSazc0ZmNKWHo5VTk3dGRvVDhHVi9vUkNyYnR6dzFM?= =?utf-8?B?NmMxdVNDU1pKYmRCaUlhRGEraFhRZHFLcVJ2Q3EwcER6R244NlRYSjJydTRl?= =?utf-8?B?Vjd6ZG9QK0J1WFRROVpkN3huSmVJMEROYkZNRzlHYjYzbjNBbi90Z05SVEpi?= =?utf-8?B?TnF1TDRsWXZiYnhnVnVwYmVqYkFGTlMvcFlnamVHWWkvTDhJTWpUelFJVHVr?= =?utf-8?B?TThHNHZCRDhIQzhNcmpsZE5oYmlpN0hRcHQwMEkyY0lJZUdRVlVnQllRUkpB?= =?utf-8?B?UWZpSUxxY1NFbFkySGFiU0ZBVmo2dVEvSTllNkR1QWVTWFRuSEI4YzltRWVS?= =?utf-8?B?NFE0cVVnUjkvVmpIWmYzZms2WFpQOXRXbURDYjU3RHJEMXhkN1pzc1hoMWQ3?= =?utf-8?B?ZDd6OHpabTBJZEhjc1pFakV6czZQbkZWUUpDazhNV1VEd2d6S1p2ZVpQTDNP?= =?utf-8?B?OHVvV0dZdG9na0FFRGZNVmhNMHg2L0tmUWZudG8yY3RzYnRlRUpnbEM5MC9p?= =?utf-8?B?bHM2ZXA1OHdQMHdtMmhvSkF4a00zQ0V3N2RnM2Uvd25BekdDelk0MjV6TDcw?= =?utf-8?B?SVp1aTlSU29IdlRMODZhTG5HNWtVL0RKSWhSU0xBeEhtKzVJVks0dy9VVVZP?= =?utf-8?B?aXVXQkFpVXBCMEFNRUJ3ekM3ZjkvNzgzVVk2dFhYNTBUZW9lb3hrNi90RitO?= =?utf-8?B?bHRiWWxHMGtvR1I3NmRNcGJoS3JJVnNldUl2UFREZHFJQVQyeHhKUlk2anBj?= =?utf-8?B?UnEvV0hzUG4vNzVXWGZ3VjVXeGs2M3c1M2dBVWR1NkxMRmFaZTRNMHF4c1BV?= =?utf-8?B?Tng2aFh6NzQ5d00vaTYzcHJseXNCckRZd1FjYllMdkZZL1pKTlVrRG14R2VF?= =?utf-8?B?L0FzQmoxWXdPTERTSnpTajBGa0dlRTAxM1FNbDNucERNaENaL2l5eGI5TnBB?= =?utf-8?B?OXVkZnZHSFFuQmpvbEFVUEwzaVdJK1htZWFhVDN5SXd1WWhveFNmRGw2bk5J?= =?utf-8?B?aEd6UzlhYWZWSUthYzk1S0VaalB0MkZ3bkxPRlQwOFJycFpqYXp1RUhvZEtD?= =?utf-8?B?UnY1VjBUNWpsNE1ubXFWVkpoYmlWYitMRWZURkRCVmluMGMxZlhuUkpheWhl?= =?utf-8?B?TDBxOEdHUENCSmhxL2JGV0FRS3lPaUY4TGhpaVYydTZNUVpSVko4ZU96ZXl6?= =?utf-8?B?ZWNDY1RXeWp5Zmk5SkZBTlZmeHFsOStuaTZURllhRWM5M3VaNU9EOGpiRzBW?= =?utf-8?B?RE9MQzBZWG55VGtHYWhBQ3ZwWWR3bSt1Q0tlNWprZUkrVFEzWlowSS9KVnJG?= =?utf-8?B?c01YUkFyWWdJZnRvQ3psRDlWeWNYcGNWOXQxc0lpbWx2dGRvQXRnOE00SERZ?= =?utf-8?B?WjJvdGI5WEQzczRwWWRsWG1Lbk4vWXV2RlBlZHpFeDI2djZDWVFEcnVZVFor?= =?utf-8?B?V2ZHNGY3c05DSkhXby9pclo2UXdwZU8wMDlnRW16K1EyQldrdjZKVFNhQlpt?= =?utf-8?B?cEZpSmdXc0xiSm9sZitIeWRxQm1kdGhxZE9FNU1Nd3JWQWpQM1ZxclZSTjUv?= =?utf-8?B?Um9Oa0l2YmU0Zm9DQitaajVhQURlM2tnZGxuQVV1MXBiVTRhZ21tYmRpQzFN?= =?utf-8?B?b0cyRWhGT0RpNHZuaEl1MWxrL3V0RnJtZEJmTTZjSnN1djJHR2U5bTJWaERp?= =?utf-8?B?R1hmeDRQSnhNUFhReGVibWRIOFRCcjZqWGltWndKUHJWbjdCWjFpT3RUbUZN?= =?utf-8?B?Q1p2Mm92ZWJRQ2ZYYUhJaHBGSzVpZUlVNXpLcGpGOFlaa0VUSjFVWnNhUlRS?= =?utf-8?B?U2JHa3lKMGRQNkdVNGZpWDNzM3B2K3IzVE41M1gxZDJBNUpLYXY0bjAwZVVL?= =?utf-8?Q?kXH9oSopnc8zpK+AfpPkVESUfTvisFyqnmYiKnYb8papm?= X-MS-Exchange-AntiSpam-MessageData-1: 9IqAf5+q5keEVQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31423062-c192-4f60-1deb-08de6a107b19 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3997.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:55.3392 (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: xI05sRyty2Dt7fIZ6NdkQ/g1lQfyNDGdJ56KOOKkYQAApO7gVe8kw9sVNUXvZmJxx/S1aTBdUWw3hL5WRO7+lA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 Turing GPUs need an additional firmware file (the FWSEC generic bootloader) in order to initialize. Add it to `ModInfoBuilder`. Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/firmware.rs | 21 +++++++++++++++------ drivers/gpu/nova-core/gpu.rs | 7 +++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firm= ware.rs index 5beb27ac0f51..6edcb0e0f808 100644 --- a/drivers/gpu/nova-core/firmware.rs +++ b/drivers/gpu/nova-core/firmware.rs @@ -416,11 +416,20 @@ const fn make_entry_file(self, chipset: &str, fw: &st= r) -> Self { ) } =20 - const fn make_entry_chipset(self, chipset: &str) -> Self { - self.make_entry_file(chipset, "booter_load") - .make_entry_file(chipset, "booter_unload") - .make_entry_file(chipset, "bootloader") - .make_entry_file(chipset, "gsp") + const fn make_entry_chipset(self, chipset: gpu::Chipset) -> Self { + let name =3D chipset.name(); + + let this =3D self + .make_entry_file(name, "booter_load") + .make_entry_file(name, "booter_unload") + .make_entry_file(name, "bootloader") + .make_entry_file(name, "gsp"); + + if chipset.needs_fwsec_bootloader() { + this.make_entry_file(name, "gen_bootloader") + } else { + this + } } =20 pub(crate) const fn create( @@ -430,7 +439,7 @@ pub(crate) const fn create( let mut i =3D 0; =20 while i < gpu::Chipset::ALL.len() { - this =3D this.make_entry_chipset(gpu::Chipset::ALL[i].name()); + this =3D this.make_entry_chipset(gpu::Chipset::ALL[i]); i +=3D 1; } =20 diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 9726205d94b6..959f1f4caf42 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -105,6 +105,13 @@ pub(crate) const fn arch(self) -> Architecture { } } } + + /// Returns `true` if this chipset requires the PIO-loaded bootloader = in order to boot FWSEC. + /// + /// This includes all chipsets < GA102. + pub(crate) const fn needs_fwsec_bootloader(self) -> bool { + matches!(self.arch(), Architecture::Turing) || matches!(self, Self= ::GA100) + } } =20 // TODO --=20 2.53.0 From nobody Thu Apr 2 19:00:05 2026 Received: from CH1PR05CU001.outbound.protection.outlook.com (mail-northcentralusazon11010040.outbound.protection.outlook.com [52.101.193.40]) (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 B565A2DC331; Thu, 12 Feb 2026 08:27:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.193.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884824; cv=fail; b=AiPJok+/Pm7xpoy0iOnXlYd/n7LhH2PhZjb6EgmkBBxBYFWR6hz1O3p6GtH7MNpXzmnwp9OQykvAh3ecnxRqSYpRQM07/Fl13uPedFaG34bHGTcgyO+fykWVmQXWX4eSK5EdHBSQU29UvkPW1mP4gA24HIxBhHalYFvY4Nv+TE4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770884824; c=relaxed/simple; bh=r9kWCyoH4H0CxwvpO1AGkrgEoZcaBGMtOlYUIV3KYi4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=U/ohu3Oesx/HAdKT9Sy3aslF3fswVd04N8V1TqAvC4wbxC38KALYK9RoKE2Pq/49+oY4Pq4khDDVFWsbQnh+w0p029L/MJfud2x/iidhT1jWV4spLE2E7DJPRMxe1q1JRHFlUSVC84OPl6E/Fmy+duV53/nHOqrqTFFWlbEQCCU= 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=HDFrO2de; arc=fail smtp.client-ip=52.101.193.40 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="HDFrO2de" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nnhLDy+uLt4TKtwXEKnyrma2KImPwY52KB7bPdv7H88xEzo7UxfvTOVsezKT0GmgJrT3nIbk16/6eVfTO15dQGBhaeVsp5lGcK6AClQpZcoNIeb9sjWajwusGnF1CEdMaGa6YtdoLwXVqteeKOvJSTuXD5jj4gpIqseNCtpLFIxjjNkfG1GlkxDBCefeO3qTXp4o4se2yjqbMC8Yad6FYg5zu+H1rquQiWCfNHaiQFOjo0Kd6bKPdsH/cQ31v7ZNqWUfDBTVl9A0F3lM7i4eC1B9faeHaLbK2fDq2plIAx9vrCBwNb2xDjwm1uoN52MoKl1BTW3BTG7xkjYv8DDKeQ== 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=JHQMpsxhpG4zZ5K1juiLPThEilWLBx9ikfWZ0H2dJ40=; b=YJHwfRpUxn4Rb9yFw0ugqdGKKXHngAW6g69q/h4F4ja95jeT1AmOyBo0supbBkXjcaVFrmuyGVk11izO9jf40vDOjLTaujKHM/jOR4gMfqDpfxD75TTfpyOHFEIF+NouWYKRSvXB5DnY3UzX2rd3HXDiIzWTQq6Akh1casuURkI/k82HLSag+hGElY7inMzFLADdXQwDD5oGu7nndaR5Yyf0bKVuL9LAKqaimEPB57zQAhcqguXaI63lHZTB3oc1+X0gW3OANRYFhxFagQGJV0Bg1c0r+Qy8V7tz3hyU3Ij2pnp3ZFHPYcmfvytKBre9RBkH0V2ZzD5KoFgHIIGXVA== 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=JHQMpsxhpG4zZ5K1juiLPThEilWLBx9ikfWZ0H2dJ40=; b=HDFrO2dehH008vM0xVsfh42NLHdTVZeGNkDifTzz7otX6EgDlEIzJtQkHGJlQPQHvGET54RPdhwDNDeKicNTG+K+0wAb8zLgU+K3jvO1Ka52SmXZ0bUfNxlUsfiB1Vz7Fo0In4LxmZ47pwGiXaYsWW0PKDcg3M3ffDHfNvrulEmIVjE+01KXXyM3pjyHHq39ZDNNFoKMZF6hwXIlpB1LixV+BCJcr3sdZKvRdYv7rGEtoixfZUh3w7wJJR/Z1WTEOZC361B9r2SRHjjXeQJlKmU66i3bv492kFjQQRoKq8SpnZMgdaBpf9nLhS3pSmfptPkfO7IxRARMQr75Zi2tXA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8800.namprd12.prod.outlook.com (2603:10b6:510:26f::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.20; Thu, 12 Feb 2026 08:26:59 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9611.008; Thu, 12 Feb 2026 08:26:59 +0000 From: Alexandre Courbot Date: Thu, 12 Feb 2026 17:26:26 +0900 Subject: [PATCH v9 9/9] gpu: nova-core: use the Generic Bootloader to boot FWSEC on Turing Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260212-turing_prep-v9-9-238520ad8799@nvidia.com> References: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> In-Reply-To: <20260212-turing_prep-v9-0-238520ad8799@nvidia.com> To: Danilo Krummrich , Alexandre Courbot , Alice Ryhl , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , Eliot Courtney , nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYXPR01CA0047.jpnprd01.prod.outlook.com (2603:1096:403:a::17) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|PH0PR12MB8800:EE_ X-MS-Office365-Filtering-Correlation-Id: ec235c53-1bae-489e-c384-08de6a107d80 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|10070799003|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MzhtSTdHdXlxTjZ1OVljUmMzRXhRblpOL2d5eHFUeDNxK1JHbTM5cHB5M1hm?= =?utf-8?B?eXRNZXpVNE5KY0NQdFB6UWZJWi9HaHJ5ZzFKZnc2aEFQZllZTENQdWRqV3pM?= =?utf-8?B?dllJTy9XQTFDbmpDdjRzUk9KTCs0SHR6RndZOGliYWxRSU5iMHZjV2dLSmIz?= =?utf-8?B?VEI4TUJsWVMyTXhXTjVlY3ZNcHUwaFE2Q0RIVTZZWlJOTmRJYUR6clJxUy82?= =?utf-8?B?ZDNsbG9MMGNOdzNYOXJOT292YlBFWFhQV3ptTkJPSjFsVEJvdjg0dmZDcTFz?= =?utf-8?B?Tzh2Q2lYTlRaK2FQTkhuc0lhbGk1QWtSL20wd0tacmlFQjM3cVFkbjFIOVJs?= =?utf-8?B?M29Bd2JUOEoyM2RnejlvWUtBMVo2QUx2cG52UHJSSEF4YWJXdUhEK3lyRm5n?= =?utf-8?B?TE5sb2NOMUFpYUJiOCsvV3ZiTEpuRGZESDJ6Z0FLSGNJeVhDYXI3bjVxdE41?= =?utf-8?B?S3VUUUs3M2dCaFpobXhsNjVpWkhsN3dKQ29lV1F5ek9QZG1tNXRPaHI1ZVJi?= =?utf-8?B?cWI1c1p5Z3RFL2twYUdWb0puYlIxOGxQQ1FFUlNDMVpGVXZMalNmdjZkMGVj?= =?utf-8?B?Q1k3VW9Ha3c5alg2bE9LT3V5WHdEWXlUSEsvSVVlRzA2S1E3NDZlLzdWWElv?= =?utf-8?B?TGZNNE9uNzJmNTVPemFWc2kyL1NuZ2x2bDRaVlp1ZXhXaTZ2VHM2V251REMw?= =?utf-8?B?QkNnWXI3M3M3aE5hUi9OYnUrNFlISVBGbmx4SHBJL3E3LzgzdlRyNDV1UTR2?= =?utf-8?B?WEVnQ1kybjN2eUJ6YkZzNGZ2RlVJN2FRckYrUUVpOVAwOFpYTjRBc3cxR0Q4?= =?utf-8?B?ZDM1Z1paS2xDb2FSb1c0S280MGdNYlV0SjlaOENJQXFRVEZUWEpnbnkxVzVH?= =?utf-8?B?N20rU3phTU9VcDVULzEyKzhvbDdKam5MQVMwL3ljM3lXb3krK0RPVytwYzRE?= =?utf-8?B?K3J4Snl1SGR6L0lIdlU1QWJkMkpNRVZOVjBGY3o0TC9xbU04aEpoYUQrcUZw?= =?utf-8?B?WXUyT1U1ZmcwYm01cGZXTVcrZXFwV3VXQUVqTlNOQ1dBTDcya09nUm5COWNp?= =?utf-8?B?bjBVWjg5SGZkQmRjeGJRZ2V4RW9rV3J0ektJdkNwOUZmcFU2THU1aFYrRkhw?= =?utf-8?B?enlLWUVnR0hRcFo0VXFHNjQ5cVlDZ3QvOTZrdnlVU0dCaXVqbkowZy93eFAw?= =?utf-8?B?R0EyTWF6OHZ6RmRhQ1dLZkFCcUxEN0NpbGQzZzJNQWZnczArRnppRDlqdHRi?= =?utf-8?B?dllaRlQvZFVPcVRNYlkzcnBlUGZJRE5qVjJFWmIrL2lCSTIzTjllUUlSTE9p?= =?utf-8?B?Q3ZpL21udEZKZkN1bUluVUhta1B4bU9mV2pSaG9GQVBrYlBJSUdUQzFKL1dE?= =?utf-8?B?elRnM2tRTmt5S0gwQXBBQWlCY2Y0ejNjanVwUWZxdjQ5VVdETTZLUWM2Ym5W?= =?utf-8?B?SVprelJ0bUY5NjR1NklhVjNTdVhaRjIxa0lRL0dXTnR4aE9SbGZQZ3loM3pX?= =?utf-8?B?cncxZGRSSHg0VURqNXNyM3ZMSHBJcjNaTkRwVzhXSEVSZFI3MWxhWllEeW1I?= =?utf-8?B?TmZOQVgvZmxSSDg5NEpleXo5UUdZdXEyRkZzV1A0cUZSM2hnN29uVTk2d2Fy?= =?utf-8?B?cFVqUHRjbmZxdDNxKzY2eW0ydVRYMks4MzErOGIvVDZMUEtFTUxTTFRNeFRR?= =?utf-8?B?Vzh5bXl4SWNWbzdjMWsxQkFXVnFFTnF2SXpsNHVYeldRdkFIeWNkc2ovb1U1?= =?utf-8?B?T2VyQXpjVDN6SzBCR0ptZ1AyZW9FbjR0eEEvY3IvNTR0Y0ZTL2djWUF3QzJm?= =?utf-8?B?ZHoveUhxclNneURLWGVvb3ZPMVpmMm55Rlh0T2lMT3NnWk8yVnZTWXdDSUhn?= =?utf-8?B?a08wcCtpZTBrODU0bTdCa0piZkI2amtkV2hVcWJXTG1pckVxZ2NGTmpwdVVp?= =?utf-8?B?WFlZTFVoWG5hM0pzZitTVGVIVHVqWWlLL1JGOW13MGF0STI1SElocldXRHBp?= =?utf-8?B?ejlKb1NtR3N6Wm5RUG4rakVVWFlpellpaVdCSEtOdFU2WU5VMWowUGVud1Ix?= =?utf-8?B?TkRXRVF5bU0vQjJxUFlXV2Y3cnRFcVdDT1M4YThWdzFEek9KQUY4aFcwWUto?= =?utf-8?Q?C+Pw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eXd1YUQ5ZlNSS05tc3pSbUg3dWg5TlZtSElqdGVLQ1F6SzRQSVpCbmRpSzBC?= =?utf-8?B?VGNDbG9wS3VGcEhyZW0wSyswM1dxWGRJUUlsVUZLU3R5dkhIeGZyRG9xTEY5?= =?utf-8?B?UGUzZUNiRTFIWk0zZThVMit2THhCeXdISWg4OUtvUEtpYWZDRzk4V0ltb1k4?= =?utf-8?B?dDdzQTFmTGIvTGRSd0NLOC9vSXJ0NHNLNURnYVVMZXFMcjEzeU04WmdDRTh0?= =?utf-8?B?Y2F1M1ZUYzBZRjdESFVjcU5DeG5yT1R2TE1CQXVENXhqWVRJUXU2K3BPOWhK?= =?utf-8?B?NmJLcGFFOGg1djRJZmRqN3NHQldiY3hvcnhJays0d01VTXVnMmZra213VHdt?= =?utf-8?B?eXV6dnordUVHSnRBWjFYV3JsVEU4aWt6WmJNamhTQWZmOFVxaGhkRHNXeGVR?= =?utf-8?B?VU1HL1B4c3pvYnR2SytDVHdiMlVTTm1YRTZqQjluejZCWDV0TVBCdWtJYW51?= =?utf-8?B?YnVhdzdFai9UR08rZHpYek8wRmpyZ2NtbDVMZFo2d0tpZG52emx2RTdqeEgx?= =?utf-8?B?Ym1mYjdvM3hOaFhKNG44Sm1jNjlTVkJhbkNpbW9SK1NiZGhVMlVBdFNSeS9o?= =?utf-8?B?UVNiRlRCQStZaXBqSWc1RmQ2c05nSmdvNDgyZmRtMXVvWWE2U2tKV0o0NTNh?= =?utf-8?B?cFIvQ2dsU3JUeE9CYmdTTFRINFlSclVkUG9NV2RDZU9ERC82SmJGNnN1Z0ly?= =?utf-8?B?bGVxMUhkdkR2QnRLTEVvbnZLQjNqMysxQVF1aXBvZ00wUzBsMC9ubzBhbGIv?= =?utf-8?B?YU1sc3hhemc2V2doN0FuTEhnTHdhS0N1RC9SalhST2dCR0xtWnlyVzhDVzh5?= =?utf-8?B?QmZadE41TG8yUU96bGQ4UVVNU3BQYzlqU2Q3NUQ5ejdLUTlWZGVIcU9kL2ZZ?= =?utf-8?B?Tm1kaE1DbWNTNm9lcnErZG42ZkthbTFjTGROV2lzaXZmNHZUM3Zxdlo2YjRF?= =?utf-8?B?S29sbFQyTU1YYzBFOTlqL21Nck1iZUt6Y0NDYkdRaTRibFROVkFqWkRqdHBj?= =?utf-8?B?SEpuV05MT3doaXMxbm9zTE52NEFiTDNUZG9YdExOOXRpUEpJMGdTVStYZ2xW?= =?utf-8?B?VVRSSlVGMlZzbFhHUHNSajU4cW5TTTc5dFE4MjJEQUZHTEIreUpwZStPY3JO?= =?utf-8?B?ekdrZG5RZzhYUmtqTXM0NGt6bXhJVDZ2OXZjQlFtc3hIVzhuSzBhTHg5RHNw?= =?utf-8?B?a2hHLzlpZHFJeXNDek9SaFpNUDZodHNmazhsZDk4dllDRVJsWXZmR0xTaERs?= =?utf-8?B?ZmMweWdhV0FPc21ET1gvcDZBY3dIYmpTU1AwT3BHSzkyT3BJaFE3UVVTakRD?= =?utf-8?B?cXk2T29NOVNZNlFKSGdzRnUyNW9WVExPYXU0bE9RV0hPcTFiYVVvaVFSaVhs?= =?utf-8?B?bjFWQ0IrMmNWaklYbEhWY1duYXIySWpXdVhFaVhZMkVYeXc1VWpIK0pZVFhL?= =?utf-8?B?dzFEaXdORCtYSVFCQUswMmdBTzU3MXBNaE1hbXFzc1ZwYXJUT0ZlT2hxT0ti?= =?utf-8?B?RFhOanNDVDZoZkJBVlA0WmVROVBQc0FZdlNZZjZIbzdrU3BRQ0YzMEtXTDBQ?= =?utf-8?B?cWZTeUFqMHl2N3h1a3MrNUxGUEpZaHFXWGhrWEdhSE1lS2NqTHhzMDN3WHZo?= =?utf-8?B?MEhTR3J6aEUvODhoaE1weTlOYkxZQkRWNDVjRlN2YkorZXZmd2h1S2lMaVFB?= =?utf-8?B?NTJQUjM4S2xaUWpkdVUweHRwa2ZqZkNhT1pETk94bEtZcW5iay9Yb2gvTXAr?= =?utf-8?B?MS9CMjZadXJJYXhVdHZuL1FRR3FHQ0ZWSjF5c2ErU2hVeExPeXNPZ2pQVGlS?= =?utf-8?B?aG5vT2U1VGlSV2JpbTFNS0xVSUY4ZGhpcEtoYXl1VUFRMXVWNGdDaGFMNGJo?= =?utf-8?B?dEswdUpMcmFFcWZhMkFJMkVPS3RwNHcxejgrNWk4b2NWS1hZV3FNSmlaTzA3?= =?utf-8?B?VXBXQmhhTnBqZmRzTHdmbVhGZzNob0RTOWQyM2VSRXU5NVo1NnpDYm94VnFh?= =?utf-8?B?RDd6aVVCMmNUTEM4WmxpeGthaklMNCtNNllLeitydHNlNXhMamZnSW1LTVR4?= =?utf-8?B?RXNLdFgycmRLeGhsdGd6cU1yeXlvWEFiU1BQUmthQVlwWFZmaWJ6VytHZTZC?= =?utf-8?B?c2RNNUNsak1DRHcyRjlkaVpGa0s5czRpbytJZTcyYW1SRFVYNS9jY1Fhc0FP?= =?utf-8?B?L3MwK0RxUmNIMDlLajMwRE9zT1pOVHZvdVd0eXFHYVNGMW8vSUUxNTNUR204?= =?utf-8?B?ZGRJazk1MjJIb0l3ZG5ROENqdENzcElaTHk5OXc3Wm11T2VKOFhOZTFqMWtW?= =?utf-8?B?WnFRY294NTZ1OGwzSmJ4TVNZVFNwZWM5MElDY3VyQWMwc3BZVEk1SWVZbUR0?= =?utf-8?Q?YmAL7+j6qAypsjAOIYozhYIjyDlbWES+Xz7Hv5Tk5zrYh?= X-MS-Exchange-AntiSpam-MessageData-1: GpVxc1A4WcxREQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec235c53-1bae-489e-c384-08de6a107d80 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 08:26:59.2000 (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: ve3dU9LP5m0YEzRB9Xm0Q/62P2PnMGsmyF7R4VV9LfXb2rzKqcuAYWnBP0mXItojUiQCTCP18zTni/myBSqPcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8800 From: Timur Tabi On Turing and GA100, a new firmware image called the Generic Bootloader (gen_bootloader) must be used to load FWSEC into Falcon memory. The driver loads the generic bootloader into Falcon IMEM, passes a descriptor that points to FWSEC using DMEM, and then boots the generic bootloader. The bootloader will then load FWSEC into IMEM and boot it. Signed-off-by: Timur Tabi Co-developed-by: Alexandre Courbot Signed-off-by: Alexandre Courbot --- drivers/gpu/nova-core/firmware/fwsec.rs | 6 + drivers/gpu/nova-core/firmware/fwsec/bootloader.rs | 276 +++++++++++++++++= ++++ drivers/gpu/nova-core/gsp/boot.rs | 15 +- 3 files changed, 294 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index ebea7fed43ba..f4159d7a9d0e 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -10,6 +10,8 @@ //! - The command to be run, as this firmware can perform several tasks ; //! - The ucode signature, so the GSP falcon can run FWSEC in HS mode. =20 +pub(crate) mod bootloader; + use core::{ marker::PhantomData, ops::Deref, // @@ -408,6 +410,10 @@ pub(crate) fn new( } =20 /// Loads the FWSEC firmware into `falcon` and execute it. + /// + /// This must only be called on chipsets that do not need the FWSEC bo= otloader (i.e., where + /// [`Chipset::needs_fwsec_bootloader()`](crate::gpu::Chipset::needs_f= wsec_bootloader) returns + /// `false`). On chipsets that do, use [`bootloader::FwsecFirmwareWith= Bl`] instead. pub(crate) fn run( &self, dev: &Device, diff --git a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs b/drivers/g= pu/nova-core/firmware/fwsec/bootloader.rs new file mode 100644 index 000000000000..1cfe72e27479 --- /dev/null +++ b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Bootloader support for the FWSEC firmware. +//! +//! On Turing, the FWSEC firmware is not loaded directly, but is instead l= oaded through a small +//! bootloader program that performs the required DMA operations. This boo= tloader itself needs to +//! be loaded using PIO. + +use kernel::{ + alloc::KVec, + device::{ + self, + Device, // + }, + prelude::*, + sizes, + transmute::{ + AsBytes, + FromBytes, // + }, +}; + +use crate::{ + driver::Bar0, + falcon::{ + gsp::Gsp, + Falcon, + FalconBromParams, + FalconDmaLoadable, + FalconEngine, + FalconFbifMemType, + FalconFbifTarget, + FalconFirmware, + FalconPioDmemLoadTarget, + FalconPioImemLoadTarget, + FalconPioLoadable, // + }, + firmware::{ + fwsec::FwsecFirmware, + request_firmware, + BinHdr, + FIRMWARE_VERSION, // + }, + gpu::Chipset, + num::{ + self, + FromSafeCast, // + }, + regs, +}; + +/// Descriptor used by RM to figure out the requirements of the boot loade= r. +#[repr(C)] +#[derive(Debug, Clone)] +pub(crate) struct BootloaderDesc { + /// Starting tag of bootloader. + pub(crate) start_tag: u32, + /// DMEM offset where [`BootloaderDmemDescV2`] is to be loaded. + pub(crate) dmem_load_off: u32, + /// Offset of code section in the image. + pub(crate) code_off: u32, + /// Size of code section in the image. + pub(crate) code_size: u32, + /// Offset of data section in the image. + pub(crate) data_off: u32, + /// Size of data section in the image. + pub(crate) data_size: u32, +} +// SAFETY: any byte sequence is valid for this struct. +unsafe impl FromBytes for BootloaderDesc {} + +/// Structure used by the boot-loader to load the rest of the code. +/// +/// This has to be filled by the GPU driver and copied into DMEM at offset +/// [`BootloaderDesc.dmem_load_off`]. +#[repr(C, packed)] +#[derive(Debug, Clone)] +pub(crate) struct BootloaderDmemDescV2 { + /// Reserved, should always be first element. + pub(crate) reserved: [u32; 4], + /// 16B signature for secure code, 0s if no secure code. + pub(crate) signature: [u32; 4], + /// DMA context used by the bootloader while loading code/data. + pub(crate) ctx_dma: u32, + /// 256B-aligned physical FB address where code is located. + pub(crate) code_dma_base: u64, + /// Offset from `code_dma_base` where the non-secure code is located (= must be multiple of 256). + pub(crate) non_sec_code_off: u32, + /// Size of the non-secure code part. + pub(crate) non_sec_code_size: u32, + /// Offset from `code_dma_base` where the secure code is located (must= be multiple of 256). + pub(crate) sec_code_off: u32, + /// Size of the secure code part. + pub(crate) sec_code_size: u32, + /// Code entry point invoked by the bootloader after code is loaded. + pub(crate) code_entry_point: u32, + /// 256B-aligned physical FB address where data is located. + pub(crate) data_dma_base: u64, + /// Size of data block (should be multiple of 256B). + pub(crate) data_size: u32, + /// Arguments to be passed to the target firmware being loaded. + pub(crate) argc: u32, + /// Number of arguments to be passed to the target firmware being load= ed. + pub(crate) argv: u32, +} +// SAFETY: This struct doesn't contain uninitialized bytes and doesn't hav= e interior mutability. +unsafe impl AsBytes for BootloaderDmemDescV2 {} + +/// Wrapper for [`FwsecFirmware`] that includes the bootloader performing = the actual load +/// operation. +pub(crate) struct FwsecFirmwareWithBl { + /// Firmware that the bootloader will load. + firmware: FwsecFirmware, + /// Descriptor to be loaded into DMEM for the bootloader to read. + dmem_desc: BootloaderDmemDescV2, + /// Code of the bootloader to be loaded into non-secure IMEM. + ucode: KVec, + /// Range-validated start offset of the firmware code in IMEM. + imem_dst_start: u16, + /// Range-validated `desc.start_tag`. + start_tag: u16, +} + +impl FwsecFirmwareWithBl { + /// Loads the bootloader firmware for `dev` and `chipset`, and wrap `f= irmware` so it can be + /// loaded using it. + pub(crate) fn new( + firmware: FwsecFirmware, + dev: &Device, + chipset: Chipset, + ) -> Result { + let fw =3D request_firmware(dev, chipset, "gen_bootloader", FIRMWA= RE_VERSION)?; + let hdr =3D fw + .data() + .get(0..size_of::()) + .and_then(BinHdr::from_bytes_copy) + .ok_or(EINVAL)?; + + let desc =3D { + let desc_offset =3D usize::from_safe_cast(hdr.header_offset); + + fw.data() + .get(desc_offset..) + .and_then(BootloaderDesc::from_bytes_copy_prefix) + .ok_or(EINVAL)? + .0 + }; + + let ucode =3D { + let ucode_start =3D usize::from_safe_cast(hdr.data_offset); + let code_size =3D usize::from_safe_cast(desc.code_size); + + let mut ucode =3D KVec::new(); + ucode.extend_from_slice( + fw.data() + .get(ucode_start..ucode_start + code_size) + .ok_or(EINVAL)?, + GFP_KERNEL, + )?; + + ucode + }; + + let dmem_desc =3D { + let imem_sec =3D FalconDmaLoadable::imem_sec_load_params(&firm= ware); + let imem_ns =3D FalconDmaLoadable::imem_ns_load_params(&firmwa= re).ok_or(EINVAL)?; + let dmem =3D FalconDmaLoadable::dmem_load_params(&firmware); + + BootloaderDmemDescV2 { + reserved: [0; 4], + signature: [0; 4], + ctx_dma: 4, // FALCON_DMAIDX_PHYS_SYS_NCOH + code_dma_base: firmware.dma_handle(), + non_sec_code_off: imem_ns.dst_start, + non_sec_code_size: imem_ns.len, + sec_code_off: imem_sec.dst_start, + sec_code_size: imem_sec.len, + code_entry_point: 0, + data_dma_base: firmware.dma_handle() + u64::from(dmem.src_= start), + data_size: dmem.len, + argc: 0, + argv: 0, + } + }; + + // The bootloader's code must be loaded in the area right below th= e first 64K of IMEM. + const BOOTLOADER_LOAD_CEILING: u32 =3D num::usize_into_u32::<{ siz= es::SZ_64K }>(); + let imem_dst_start =3D BOOTLOADER_LOAD_CEILING + .checked_sub(desc.code_size) + .ok_or(EOVERFLOW)?; + + Ok(Self { + firmware, + dmem_desc, + ucode, + imem_dst_start: u16::try_from(imem_dst_start)?, + start_tag: u16::try_from(desc.start_tag)?, + }) + } + + /// Loads the bootloader into `falcon` and execute it. + /// + /// The bootloader will load the FWSEC firmware and then execute it. T= his function returns + /// after FWSEC has reached completion. + pub(crate) fn run( + &self, + dev: &Device, + falcon: &Falcon, + bar: &Bar0, + ) -> Result<()> { + // Reset falcon, load the firmware, and run it. + falcon + .reset(bar) + .inspect_err(|e| dev_err!(dev, "Failed to reset GSP falcon: {:= ?}\n", e))?; + falcon + .pio_load(bar, self) + .inspect_err(|e| dev_err!(dev, "Failed to load FWSEC firmware:= {:?}\n", e))?; + + // Configure DMA index for the bootloader to fetch the FWSEC firmw= are from system memory. + regs::NV_PFALCON_FBIF_TRANSCFG::update( + bar, + &Gsp::ID, + usize::from_safe_cast(self.dmem_desc.ctx_dma), + |v| { + v.set_target(FalconFbifTarget::CoherentSysmem) + .set_mem_type(FalconFbifMemType::Physical) + }, + ); + + let (mbox0, _) =3D falcon + .boot(bar, Some(0), None) + .inspect_err(|e| dev_err!(dev, "Failed to boot FWSEC firmware:= {:?}\n", e))?; + if mbox0 !=3D 0 { + dev_err!(dev, "FWSEC firmware returned error {}\n", mbox0); + Err(EIO) + } else { + Ok(()) + } + } +} + +impl FalconFirmware for FwsecFirmwareWithBl { + type Target =3D Gsp; + + fn brom_params(&self) -> FalconBromParams { + self.firmware.brom_params() + } + + fn boot_addr(&self) -> u32 { + // On V2 platforms, the boot address is extracted from the generic= bootloader, because the + // gbl is what actually copies FWSEC into memory, so that is what = needs to be booted. + u32::from(self.start_tag) << 8 + } +} + +impl FalconPioLoadable for FwsecFirmwareWithBl { + fn imem_sec_load_params(&self) -> Option> { + None + } + + fn imem_ns_load_params(&self) -> Option> { + Some(FalconPioImemLoadTarget { + data: self.ucode.as_ref(), + dst_start: self.imem_dst_start, + secure: false, + start_tag: self.start_tag, + }) + } + + fn dmem_load_params(&self) -> FalconPioDmemLoadTarget<'_> { + FalconPioDmemLoadTarget { + data: self.dmem_desc.as_bytes(), + dst_start: 0, + } + } +} diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index be427fe26a58..b7dbd57dd882 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -24,6 +24,7 @@ BooterKind, // }, fwsec::{ + bootloader::FwsecFirmwareWithBl, FwsecCommand, FwsecFirmware, // }, @@ -48,6 +49,7 @@ impl super::Gsp { /// created the WPR2 region. fn run_fwsec_frts( dev: &device::Device, + chipset: Chipset, falcon: &Falcon, bar: &Bar0, bios: &Vbios, @@ -63,6 +65,7 @@ fn run_fwsec_frts( return Err(EBUSY); } =20 + // FWSEC-FRTS will create the WPR2 region. let fwsec_frts =3D FwsecFirmware::new( dev, falcon, @@ -74,8 +77,14 @@ fn run_fwsec_frts( }, )?; =20 - // Run FWSEC-FRTS to create the WPR2 region. - fwsec_frts.run(dev, falcon, bar)?; + if chipset.needs_fwsec_bootloader() { + let fwsec_frts_bl =3D FwsecFirmwareWithBl::new(fwsec_frts, dev= , chipset)?; + // Load and run the bootloader, which will load FWSEC-FRTS and= run it. + fwsec_frts_bl.run(dev, falcon, bar)?; + } else { + // Load and run FWSEC-FRTS directly. + fwsec_frts.run(dev, falcon, bar)?; + } =20 // SCRATCH_E contains the error code for FWSEC-FRTS. let frts_status =3D regs::NV_PBUS_SW_SCRATCH_0E_FRTS_ERR::read(bar= ).frts_err_code(); @@ -144,7 +153,7 @@ pub(crate) fn boot( let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw)?; dev_dbg!(dev, "{:#x?}\n", fb_layout); =20 - Self::run_fwsec_frts(dev, gsp_falcon, bar, &bios, &fb_layout)?; + Self::run_fwsec_frts(dev, chipset, gsp_falcon, bar, &bios, &fb_lay= out)?; =20 let booter_loader =3D BooterFirmware::new( dev, --=20 2.53.0