From nobody Mon Feb 9 15:25:42 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012013.outbound.protection.outlook.com [40.93.195.13]) (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 5903A3D34BC; Tue, 20 Jan 2026 20:44:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768941898; cv=fail; b=SRkkGHdsxnYw7B24FpRljY02stPFCZ/Bd9ef8tRmfTXU6wp/fGiqo5n0baDb4/cEEBekfhfFzoSrjtpvQgyGtqsMSALq1gmKkp34Lha+ndY3jfgwr1V4Yi/e8N/odbWo55xvnM8TW2ENjHOzoSdDn471p6XPHadQpWcT1pNWdnU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768941898; c=relaxed/simple; bh=uWeyARMwX0lyalYwj9wkbsYDIWuzaCsHP+NQmUZQrYM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=dBhQ66sO70J+iPffbuNBBjfG2+SGYrzTkErOBIi++Uz0S9A7F6cgy6x3XQjXWCOOx05NdLJ5IeJg3dAexZj00ygyj/UWFFosCD6LgkVUXoAtxkPbqkT93aPsPt0BhKZIARP3lmo+sIK8g56AYQ6M2jIOKL+AFPwslmtHVjWeRlM= 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=blT8Xdvh; arc=fail smtp.client-ip=40.93.195.13 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="blT8Xdvh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZA1DHHPQhVrRe3yiT8s7YeG8obRtVQyh3czPNmtRuZTw32V1XGsFfyp9bE76raBGNgdM7lBtKY5lGUwLB9uKq0wILFX3nXIiJ23/h88ci6spgJuNuJTDudNCxMVniTZ/djlpaFr7FBApywJSFkurX8jkQFPwxWmclBiiTcNsldzyKSlxv5ErKaBKc/M5OeD9H4NBZGzhbn3/b5N6/RNDwprf/7WWHSIuTRh6cYVrNQr3axqvNCzn/uq0KPrKOYOlJdeCGi2/xIPQZ5vL56RT8/RyLzbZ/uZQu+VHY0Ww5ubu1U0uSl9NaIWaucYFiSG2mpA0rMWXwCTtOD5XAfiMvQ== 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=PomTm1iOEgO20nycd1szNoCYqeZgpfISaUbKMSUnqLw=; b=rqwkgcxVLZCAi59DPoMTkcaLJSUW8chau5VkiiFYwuQFSUZX0ydjCeYS9Wen3j+U9XmT28mOP2KtLR1yFYvvkGsAgW55bJUg/hKsyh/GbM6oCBOX9jOiv+2daNqC2xdAc3yOcgXbl/itrwYYQVjpJ0fWxzb09r2hJExvPTyX8oIRtRM+lVs9a1jm1m+zsreNQYtjUt+raNOu1dIsadrg5WLg//AFhCuoNBJsfs8vfjs4blRZLI9zS+CXUUaH/XOaEheYqdVY1STM28C+Fj74uINmxKPli79uNBScAWD9yS/l4uVnB42QsIkQEfO1hiic6EpmasaZCzDnb6TBJv0EMw== 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=PomTm1iOEgO20nycd1szNoCYqeZgpfISaUbKMSUnqLw=; b=blT8XdvhVBggSaIYaDtjqsNqnyKDXpdJncEew4qWAfaTH2wsLFrHIa1McEofwzMCua15mMSsnVdPkoXMYmnMdAxdPZuR0sfXqvpwDMOfxD1SagEUwZhuP/lioSh0jytnZtYirYgPpsrdO9jerG3jzz7HdtcwUFg+MxnJrGdehrNYR4T7Ab0WB/5PQDErWLvS94e/OO81D2SZNuT6i80mJbTos/J52jaApTTlx/BiLRfwDwSHU843FwK0451+CtvLQYnT4LxFbUxVgaxFiGKF9PzfeRn4xaGTYTXkYDiF2yrzJreMf7njHM/XQzZmW7P8/pQGGqV9qmY1jFnAvRNq0w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6486.namprd12.prod.outlook.com (2603:10b6:8:c5::21) by CY1PR12MB9651.namprd12.prod.outlook.com (2603:10b6:930:104::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9520.13; Tue, 20 Jan 2026 20:44:34 +0000 Received: from DS0PR12MB6486.namprd12.prod.outlook.com ([fe80::88a9:f314:c95f:8b33]) by DS0PR12MB6486.namprd12.prod.outlook.com ([fe80::88a9:f314:c95f:8b33%4]) with mapi id 15.20.9542.008; Tue, 20 Jan 2026 20:44:34 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Lucas De Marchi , =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= , Helge Deller , Danilo Krummrich , Alice Ryhl , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , John Hubbard , Alistair Popple , Timur Tabi , Edwin Peer , Alexandre Courbot , Andrea Righi , Andy Ritger , Zhi Wang , Alexey Ivanov , Balbir Singh , Philipp Stanner , Elle Rhumsaa , Daniel Almeida , joel@joelfernandes.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org, linux-doc@vger.kernel.org, amd-gfx@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-fbdev@vger.kernel.org, Joel Fernandes Subject: [PATCH RFC v6 25/26] nova-core: mm: Use usable VRAM region for buddy allocator Date: Tue, 20 Jan 2026 15:43:02 -0500 Message-Id: <20260120204303.3229303-26-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260120204303.3229303-1-joelagnelf@nvidia.com> References: <20260120204303.3229303-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MN2PR12CA0019.namprd12.prod.outlook.com (2603:10b6:208:a8::32) To DS0PR12MB6486.namprd12.prod.outlook.com (2603:10b6:8:c5::21) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6486:EE_|CY1PR12MB9651:EE_ X-MS-Office365-Filtering-Correlation-Id: a9a611a1-a55b-4abf-89b2-08de5864b7cd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|7416014|376014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6m3x5IBQPfADy9nFW4J1NJ0JuoI76F9S/OVVg/r3FKY20OvxLP6+TxEPaeTt?= =?us-ascii?Q?U3r0ozfF9JST+WqH+pR//XCjB4oJ6MeDRIF6U7zAZMic6o0mu2Dnjyw25UOq?= =?us-ascii?Q?i0lLx8YAprYhf7uRArNydDWGDRnz+dWNOyKUeYxFLj5cxyFsjzrehOO4Ni2o?= =?us-ascii?Q?arb5NyfL068XoMV1RKNNrgfNBJf48SYtJMZxyw+HadoM0W3fTIQGzVegNf4B?= =?us-ascii?Q?ZNyIlWkMeNqxTZYx+gt3yTOi+g64yIRUtZqyqto4TLosFoOCmmas3NfxNPM9?= =?us-ascii?Q?b8fPrC2g2BwC9jeND0rtLgo2l/G6iIwmsGMKZp5bJmTSmOcFCBMv25oW0kVM?= =?us-ascii?Q?p21XKId5jTGrhPlA0TomcFo5tDjd+MzjKTV2snqA5kL8SGLDsqbcJHl1J4kZ?= =?us-ascii?Q?XemxIOrvOayZWShkqXJP072903akw0eHaaL94mIv0EAHISY7GadJLpLb/oWO?= =?us-ascii?Q?EGmyaUFytRJ9vlUGIHh2Xr8mQjzooMO39u86Lx4Y31fP0lp++QxhVqHoou96?= =?us-ascii?Q?KubgnepnLeYjHqPT+pgUS8+ZGiIqQeoEpFBfzOlnLMVUHGKykKE16c21bz4g?= =?us-ascii?Q?kPELbeGSmf2Vcx0XSYIBjaBavuNLsn//F5LgNgAbK36tTAZQZ+aSphVZz+SX?= =?us-ascii?Q?f/MDRKQRdl5od85HZ7M2BQd3eRuwRYX1gFG8LwZWTlDvGlgw8bsLo/en72Py?= =?us-ascii?Q?OW8Xgdwx9XY0OkSt/e/3LdE3OFCrZKyHszx6mAcaqzX665654AymZFKYQuo4?= =?us-ascii?Q?UCk0h05qsm1GeiYNnj9TX6plKBbG+G8JWSuvFxLqZqqbtlF74EqdIbdZwOB2?= =?us-ascii?Q?byMZroUPGTSoszdi5REfkO56mcaPnJSHfUt87LFowqfEEejtYpZATm0TkSCa?= =?us-ascii?Q?jVzeW/UHqbyiTUIktNLMOlSN3ncFk5AU+XypKtuzRU+7IhIhAnu2ZASlkgtP?= =?us-ascii?Q?fLkDAqiIxo+9+s1GwUUuYpNAx+oEhGGGhYhyTemSwckMN45QEYaI8UWfRC7O?= =?us-ascii?Q?rd0DWgj3WoJ8Yxj1zYE91lkWOs15XXNd505DC7FvOlux9bqGFoigsxoPk0c9?= =?us-ascii?Q?3nIOygAITPBdMvMRebyTzI+PdbAPeo99hfzIovQLBIrt7y2wQeXaaYVQ/Xec?= =?us-ascii?Q?GbSsMOBQ75WtM1cFqSa7HtyR8tZSRsFDlm/AtnYqKpBr03qUg2kq7IXLDX/c?= =?us-ascii?Q?SGuK/BP32PT8gwEWUJJKt7L5vUde5UVVue2CXSjYbaDqMSVG2+NmINKylyav?= =?us-ascii?Q?OYdq4mMsVCZOjbI5RAzc0tmnCGlUJlzJnvEzuAGkXrZX2OC6sAJrsTBxnu83?= =?us-ascii?Q?JamPAFvt7THnIBHcVeVgYfmB+wDzUg4rDq4MimcuwkmQ3bLajJr84UyClcLW?= =?us-ascii?Q?E/EIHgMxZm9Zn2aszObVCkMRFdApuxtLQkraKcQ+8BUseGuXhFeAVIDew3ok?= =?us-ascii?Q?XQ43JITqNuona8yP3rDCQGYoRITlDrxBeZ7e4cYUNYKEXOn635uoLU/ucWHe?= =?us-ascii?Q?3/HG6bJxr7OO7WcMLTjtKAASBxIHudipF2VTeFa+QikvIOrM9RZcSWJr+uTT?= =?us-ascii?Q?ssxER53iHGVDwJRg2K0=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6486.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9lj9cc4pFVOGfbMy6n4l4hm/ShXpl7PZONOWTfBRnvyeiSmyt2T4rWG8CQSN?= =?us-ascii?Q?aTveLP0bBb0COOquy+sRTC2F5026J81UUX6ZwEZDkf6o3XkPTIm3cUHnICoK?= =?us-ascii?Q?K+/DAU3MwEQ5oYAXMs41yZv6lgyFva6foKZlfa+8pOOrRhc5aiERD87KuGii?= =?us-ascii?Q?7v0L6abf5dhlkOaVcjjkOp+GlecDndhqBZmvZRZHGefZ4limnso9p1wfSox6?= =?us-ascii?Q?PSqNMY8Tn1ZvzhzW1kSeW6b8PmEiddMRmNm/ahkcGn7el4Gl68EwWwH2jq3M?= =?us-ascii?Q?VE6D7UzoGV8RSNhr1DPC+1HfREgfDn6xBK5flJWJI2fX5ARCxq7ZY8xa6CPf?= =?us-ascii?Q?lBb9XdYAmfrDiz36IePflC7/Y8I7nQSseMZsC3CGncnnhmRG3oBJugOaewzK?= =?us-ascii?Q?jhSSWt/25ICBBYGAsivYIiwfUt2RHMrY37ApvvLWVcIIoslBkBZNomF0CQ7I?= =?us-ascii?Q?nvhtmErtkdGgD1BidOZFIRF5qHJIQ33IFyvFH+fkso9eIQVdJbBA3PZU3Jg+?= =?us-ascii?Q?JMa0cnlFm31quBsKLMIZwHrL1mxtSzhNrHtGCgSzT0+4GWdahpeTqX4IS8PM?= =?us-ascii?Q?REAjfJ8Qu4xalocESN66Y6wExxuSkji+2P/tm2SyTlnXZ/N8c8RloNPlCQ0p?= =?us-ascii?Q?+X/LJhJO1a17ghE/IISnGXL37xRTJwoM4RkfMGunTDpQQHk8mx4lf47dUfsl?= =?us-ascii?Q?F2wqP3NiLCJYuNq+9d+39R2SMImNKXViAPuwyORUyfLdNmctjqhMJZT2ios/?= =?us-ascii?Q?3PqC6wV1zZHczk1dWTFoRyxFXguH1KEQ8PQoxpFI59xUFsMWCY7mzRi//9Qv?= =?us-ascii?Q?8keeI7WYvdTn8ifARFEAjA2BxtuxoMv6cRgQI40vmd8/aB/bkp6AQad7LXDH?= =?us-ascii?Q?0S/LtTvm+xnZfT8jdFbTnr5YUoFANIE07ijzKPh/DUo/pYoaI15saVxfouMq?= =?us-ascii?Q?4jrNSA1wbVJ/cJ59Wpr64VIl8nYwMH9oG/B6OrlqHhWk5E5GxmiJQT2p66Rx?= =?us-ascii?Q?zPRGWFUNo6u/jefpYXiY46n5xTUFMbcwshcLc5nDwl+fjGpe5Qp1Z1tCRXwX?= =?us-ascii?Q?vHEa49yHIuhMQV95N0W9MtiBgo3DSOKTWXehn5VSpEIStjKe7wH4Y4wPuN0d?= =?us-ascii?Q?8Dfr1YDV5c5ysHrL5Ts+QgoB6MRUvHycopl5ara1RtcQQnp2jMExsmWxRoVg?= =?us-ascii?Q?40R4xowmv/AjM2oOK+1IJW9AH8QvuHfDtCTJXn8qouc8A5MP9eqSIZmNWqEL?= =?us-ascii?Q?YBaRb4KA1gCQUZcBsfaasylGx1+Dcn1SSzvrWAR6jPM6nHcwbFQv5N100qZ5?= =?us-ascii?Q?ePoo1qbtRwv5b6/wKzQkSMtw7ikOzAFGjjQhYc8YlzQEOZxpWep3Le3wyiO+?= =?us-ascii?Q?3GTNrt4r4MMckQMQovqdl1s+yd9LXrKNvbh9q4h0JFRRLmr8t6o7Fp5yw+zl?= =?us-ascii?Q?vHfhY3gwi948+trpa1EkJ6vfNlVQvDywgwUoc7ETiBaVMjtg50v+fC0bNtub?= =?us-ascii?Q?auXXyDWPZk2dOV7CuehVe6B+AqeGGG72b4sAcuivjII0KNtGrMbi8zxCQAwm?= =?us-ascii?Q?L957ZgHGBDqybWP7R+lmvL9WQscybbkPb2CsXhy3bzgiID/cveXXZbZIm+7D?= =?us-ascii?Q?0chNUQW/Chak7hUFBnPlmSxK1EZk++FUikhozmTjdTiXUPvcdqRI0e/fF2V6?= =?us-ascii?Q?nNSvh1RSmRsHYsRoQecIXOoAv/PxzdlzH3JDc8dVMl6YEjyU08yWO7lRjCBy?= =?us-ascii?Q?ZvClK+9evA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9a611a1-a55b-4abf-89b2-08de5864b7cd X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6486.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2026 20:44:33.9787 (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: BqFll4Hr7pfrljO+amAX8Ws+k8kpmnwYpM6bhvuWCTQkWrZPcSO0bEDBRWyPvQNulxZiiLcHnwYZKHSGZNndPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB9651 Content-Type: text/plain; charset="utf-8" The buddy allocator manages the actual usable VRAM. On my GA102 Ampere with 24GB video memory, that is ~23.7GB on a 24GB GPU enabling proper GPU memory allocation for driver use. Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gpu.rs | 62 ++++++++++++++++++++++----- drivers/gpu/nova-core/gsp/boot.rs | 7 ++- drivers/gpu/nova-core/gsp/commands.rs | 2 - 3 files changed, 57 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index a1bcf6679e2a..dd05ad23f763 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 =20 +use core::cell::Cell; + use kernel::{ device, devres::Devres, @@ -7,7 +9,7 @@ gpu::buddy::GpuBuddyParams, pci, prelude::*, - sizes::{SZ_1M, SZ_4K}, + sizes::SZ_4K, sync::Arc, // }; =20 @@ -28,6 +30,13 @@ regs, }; =20 +/// Parameters extracted from GSP boot for initializing memory subsystems. +#[derive(Clone, Copy)] +struct BootParams { + usable_vram_start: u64, + usable_vram_size: u64, +} + macro_rules! define_chipset { ({ $($variant:ident =3D $value:expr),* $(,)* }) =3D> { @@ -270,6 +279,13 @@ pub(crate) fn new<'a>( devres_bar: Arc>, bar: &'a Bar0, ) -> impl PinInit + 'a { + // Cell to share boot parameters between GSP boot and subsequent i= nitializations. + // Contains usable VRAM region from FbLayout and BAR1 PDE base fro= m GSP info. + let boot_params: Cell =3D Cell::new(BootParams { + usable_vram_start: 0, + usable_vram_size: 0, + }); + try_pin_init!(Self { spec: Spec::new(pdev.as_ref(), bar).inspect(|spec| { dev_info!(pdev.as_ref(),"NVIDIA ({})\n", spec); @@ -291,18 +307,42 @@ pub(crate) fn new<'a>( =20 sec2_falcon: Falcon::new(pdev.as_ref(), spec.chipset)?, =20 - // Create GPU memory manager owning memory management resource= s. - // This will be initialized with the usable VRAM region from G= SP in a later - // patch. For now, we use a placeholder of 1MB. - mm: GpuMm::new(devres_bar.clone(), GpuBuddyParams { - base_offset_bytes: 0, - physical_memory_size_bytes: SZ_1M as u64, - chunk_size_bytes: SZ_4K as u64, - })?, - gsp <- Gsp::new(pdev), =20 - gsp_static_info: { gsp.boot(pdev, bar, spec.chipset, gsp_falco= n, sec2_falcon)?.0 }, + // Boot GSP and extract usable VRAM region for buddy allocator. + gsp_static_info: { + let (info, fb_layout) =3D gsp.boot(pdev, bar, spec.chipset= , gsp_falcon, sec2_falcon)?; + + let usable_vram =3D fb_layout.usable_vram.as_ref().ok_or_e= lse(|| { + dev_err!(pdev.as_ref(), "No usable FB regions found fr= om GSP\n"); + ENODEV + })?; + + dev_info!( + pdev.as_ref(), + "Using FB region: {:#x}..{:#x}\n", + usable_vram.start, + usable_vram.end + ); + + boot_params.set(BootParams { + usable_vram_start: usable_vram.start, + usable_vram_size: usable_vram.end - usable_vram.start, + }); + + info + }, + + // Create GPU memory manager owning memory management resource= s. + // Uses the usable VRAM region from GSP for buddy allocator. + mm: { + let params =3D boot_params.get(); + GpuMm::new(devres_bar.clone(), GpuBuddyParams { + base_offset_bytes: params.usable_vram_start, + physical_memory_size_bytes: params.usable_vram_size, + chunk_size_bytes: SZ_4K as u64, + })? + }, =20 bar: devres_bar, }) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 75f949bc4864..a034e2e80a4b 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -150,7 +150,7 @@ pub(crate) fn boot( =20 let gsp_fw =3D KBox::pin_init(GspFirmware::new(dev, chipset, FIRMW= ARE_VERSION), GFP_KERNEL)?; =20 - let fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw)?; + let mut 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)?; @@ -252,6 +252,11 @@ pub(crate) fn boot( Err(e) =3D> dev_warn!(pdev.as_ref(), "GPU name unavailable: {:= ?}\n", e), } =20 + // Populate usable VRAM from GSP response. + if let Some((base, size)) =3D info.usable_fb_region() { + fb_layout.set_usable_vram(base, size); + } + Ok((info, fb_layout)) } } diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index d619cf294b9c..4a7eda512789 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -191,7 +191,6 @@ pub(crate) struct GetGspStaticInfoReply { gpu_name: [u8; 64], bar1_pde_base: u64, /// First usable FB region (base, size) for memory allocation. - #[expect(dead_code)] usable_fb_region: Option<(u64, u64)>, } =20 @@ -242,7 +241,6 @@ pub(crate) fn bar1_pde_base(&self) -> u64 { =20 /// Returns the usable FB region (base, size) for driver allocation wh= ich is /// already retrieved from the GSP. - #[expect(dead_code)] pub(crate) fn usable_fb_region(&self) -> Option<(u64, u64)> { self.usable_fb_region } --=20 2.34.1