From nobody Wed Apr 1 09:45:02 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011064.outbound.protection.outlook.com [52.101.62.64]) (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 F13BE45349A; Tue, 31 Mar 2026 21:21:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774992075; cv=fail; b=K93J9wXdf5Fwk8Zt1w0MXLqlg36Bm0dkv60jqkxZsNyQRphwT71T7jvjv5qyw5FjlJEFSXzFoRev9hrZxwa8QuL1EOQenVpGtcP87/y724TrEeuIqEaOIPjFn6VJ5uu4sV4jnHlDF0NMsksLVYHMQV3Sh3kzkP21XvxZjRBv1C4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774992075; c=relaxed/simple; bh=aRyGVYE7T/Ie5t/oUuld4JXe43mQPtHvLavch4vxPTE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=IxCHEOi5gW6W7fq7NJ6KAcFAHySSbYI4bva0FcMLiaJW7XGmta6P+xyJCqmwOfP1rRGIa5MpSlIiuiDSCLSMJVn/pgH25Gbaokjfircfg8178pC2pZMh/4B9z4oGh3I8QlZB/gtAsZt2QsNd3kODMA3spE1uH7W1YH8BRWrNitc= 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=CjqyBDxC; arc=fail smtp.client-ip=52.101.62.64 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="CjqyBDxC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RD1u9Le1IrSZoxGjxrwuKo/QnWQHf3+j4KC+cWpHmyghScSPQAMGZvQZhZLBFeetRO6ODvZJLFTor8tqCwz9tn7J4MqE3AUZGQ5XPy75NWYY9VJyAh8mqe3idf+WUwYHveruO3z8IsZQuf7r6aKFtN2kXODp1doqmNVUhG8qKJz0pUN34Fpfa+Ai0aub6trGNXi8p42rZP18KSAHKytM24rAOYut4g5NaHNM7iq1sGSeKly1MYE9PlgJk/kFKkV5UdqxI/divWg0FxiWhivPVZGOTKn1QFhY7qdeXa54gQVFAPnkVMtgolL5dMXmuQgCTJavV+uJwRIFzIdrh3glqg== 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=peECcFfG9Ef7jRtC35L6+RGkxOZPEbYul7W++Dw2oh0=; b=ccJC5qbMXLHLOa/YndCTAx4v7bQ6lEQKaUygYcDE45dCH0X/2dmCXypfQKPTrwIpd7Hfv1hBYGOyIaQcf3uSrxiN6XUNuEMlC93FMqaIFjVrhTSn+xj7dvsZGbTIxKPWeG1OZALEc7zSTx2PTUNFOBdgMd44s49Ufe9g9ztZoBsmwveud0eI4rId6Wzztx2E/4/ZWI+/lgKYohIPX/loadh2hwGs3FyyVj/nkjy3dbYMxhX439/2Pg2CBwMC3HDxcTlZ8VViv5sQOOuZk+Fz4Ytitn/QsyQdpejheV/oNfM3xxP9F6gWTYPz4HFuxNbPiwj2lNJyShoqLIOUwJcCeA== 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=peECcFfG9Ef7jRtC35L6+RGkxOZPEbYul7W++Dw2oh0=; b=CjqyBDxCgjZZWXnRLtH4Rw4uaiAB2v34IDXaKuq2CD5EGeqoaa/IhfKQZ8kfTi0V2JohI2wgDFo8OcTtfVKfA27ZqZU6arAp4kF42dwN34rNycI7nRroDRaTOAmH8xqvsZ9Hrq4oyWb3R+ReNlr8N4rc8oG8T1dPMlW/Yq6xD9J2afAdEsiJqI1ILqGBVFX+fBckmYrY3f43zNCPaEp3v7f7jRJtCcjRIeIsyp1zF1qpiSY8xJ+6Ig9a88f10E6f9YoKy7YdH+z6i5Fw9FRshHCRn9v0f/9Y+ublD8UvDqjSelMKxyjm29mG8Es9DBsAWUCUBXs349uVabfJGLT8QA== 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 BL1PR12MB5849.namprd12.prod.outlook.com (2603:10b6:208:384::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.8; Tue, 31 Mar 2026 21:21:06 +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.9769.014; Tue, 31 Mar 2026 21:21:06 +0000 From: Joel Fernandes To: linux-kernel@vger.kernel.org Cc: Miguel Ojeda , Boqun Feng , Gary Guo , Bjorn Roy Baron , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Dave Airlie , Daniel Almeida , Koen Koning , dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org, Nikola Djukic , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jonathan Corbet , Alex Deucher , Christian Koenig , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin , Huang Rui , Matthew Auld , Matthew Brost , Lucas De Marchi , Thomas Hellstrom , Helge Deller , Alex Gaynor , Boqun Feng , John Hubbard , Alistair Popple , Timur Tabi , Edwin Peer , Alexandre Courbot , Andrea Righi , Andy Ritger , Zhi Wang , Balbir Singh , Philipp Stanner , Elle Rhumsaa , alexeyi@nvidia.com, Eliot Courtney , joel@joelfernandes.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 v10 02/21] gpu: nova-core: gsp: Extract usable FB region from GSP Date: Tue, 31 Mar 2026 17:20:29 -0400 Message-Id: <20260331212048.2229260-3-joelagnelf@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260331212048.2229260-1-joelagnelf@nvidia.com> References: <20260311004008.2208806-1-joelagnelf@nvidia.com> <20260331212048.2229260-1-joelagnelf@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0237.namprd13.prod.outlook.com (2603:10b6:208:2bf::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_|BL1PR12MB5849:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b4e0c35-3fa4-4fd9-2fd4-08de8f6b6b9d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: e+H54qBkSjcAiIusplIS1f5dJKT83U9hgQD3SVCSwGC/JbhF/Mk1uDL+k83A3HwXjhJhHhIM680SpbQYbV/TODVZxIlkD8fV47QoIQW+CZieiPQezBTZAaGgFnMwc1K2a+3Yz+aYpt3oHI1J/Goz+5sgaRsXKLPlVqjZLikXcgzP7QiKwP26JvwkT+2HiFzRnT9Ppy9rz17VPALz6T4vD2rdoC7vhhNqGj+m9q4KKWapRw3G/mkGTpW6/BPI/k70NWOzKIEaFjnyxIe9dMYtlkrdNzyu27842Jd7jLpk3tZxkcnXR0VlFx8wl9GcQjfNoQtcPHKPyzurho3sH0LaX6tCZsFHVeZGKXTNA3kEWPHNpExW07EZ0eI8EF7yIcnP7QsRQscz81QjxGkJ7SURGVmucZ3Jan55DusCWsagOcVDknz5Vgb1Eqq9fj8sGfqm9J4nvFiAw30vfqmw7ZvgYi32LtzMf47oGkSJTk+SC+z11yS1KLzqzPxyfww/u2tpJHzLQrxN6oI+S6T1h9+HFArEFr46YFTOD8wSM4Ubx7F6LbbtOMZ4SghjyDQIj2fGBRK1MaGGUokkHSRLtJsapl+IKrimluVAb/0QWI0N6ZRtvzN/SMZx45TXA7Bj3End1ZG5czpkJt30e25Srnqno1prud1IEQcmPYg1rxQsyUXL4r+i8DJpIZqzEMtg351qU6DMd9GW8g11Gas5rRachew+AYNjG7EAyexM1pxNWIk= 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)(7416014)(376014)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hqDneO9ejHFmaLBQ58ax56jHxAIAqRC5aPVVil0ghI9IsnC1EA0JKvNJGETr?= =?us-ascii?Q?f++vyhFNQTHlI0x/l2RLPT3gH+auNkeR/M3XxSOZeR1zSR1h/VAl+Mb9gu0w?= =?us-ascii?Q?kwhqYWk7aM2m62mluzmwKi2ThoXW8Ny9ki2AImWOqVSKR0Q4pJkX0/LzP2nz?= =?us-ascii?Q?bJ2SLgqvO8sqf7YlQQDa6+81vKZn3PCpk3qKadHMSjJi6n1Rqt3lSvCTWY8J?= =?us-ascii?Q?dYayw3U1kne4+FvooFdyRqxmMiTX5DHXFe4u9DNLiBABIAaXhhyF+1EgMpQs?= =?us-ascii?Q?3mEV+n6w+u9b9RTKOGTPbi6tIHd32BYL0VFfd/6T3ClIk92oALsCL8zcY/Lb?= =?us-ascii?Q?FUVYNioFeXo97/XWs3ThoQjlFkqPKHCCA6MvHVpZJ284obtyameHmCfrUTOV?= =?us-ascii?Q?n4pMjEBZxV2motCOPNyLGfS/p407XnchAlDnFWaVHrq+8oXRcQNFdaFWXoIQ?= =?us-ascii?Q?LdywqSNHYQAN3XvXhkrKqesxnSl+E4LDE/DsO4gWUbTXuU9kjgAtcacprkM7?= =?us-ascii?Q?R5oo9uZPuwxtIMXjq4I6jQmYKmDnfwalhjcLC5n8pA3Ee7CO5nU3/Zoeol9N?= =?us-ascii?Q?fSPs3eBIb2SAJndvQQj4enkBqfoxoPf/IvNK0Q1tQdGGZ28j2VX93abQfh7I?= =?us-ascii?Q?NGovV3Vq1UJKGSZuVY3pYAV/h3x12Hzy/DKOrSmWQvk+F1MQzpcbLeNz7KFC?= =?us-ascii?Q?ilNlUXwKNPtoi5eIquyUd1FIBCkm8xa3VQS5j01oBk4lNuZmCtjw9/DUghTu?= =?us-ascii?Q?FniNjGgWDdivWOK6SNbPogDV2f0xUuqUECfrQl5qWC1V+b7XGavivqZn6LJx?= =?us-ascii?Q?9VNvmkm53rylS6yJkGtXm4opffve39OX9HmAXef3sn5cZJDUD50wVjkel8yA?= =?us-ascii?Q?gaV90Ps1k9sE9VpA1ExZbdCstcYLGImoMeFyCm7SqDL+OINKG9XBc79BOvnv?= =?us-ascii?Q?srUrm/fDKIE/PBB65qmj7LNxvuuYFa1vReWyiS+ZkT6HSlEAYYP9hT+3yFuJ?= =?us-ascii?Q?+NUMO/t/dMc7RlUN3cttT2NcQx8hdpNDKNHzirnZ+MrB8uHDB4rZqj9wypXV?= =?us-ascii?Q?+jrmri04bczWmHrtXL6ZyjRvsUEvxV6ajSvoYg1f47Qtx5AYDgzmDWIXTQRp?= =?us-ascii?Q?gN+iDdyed936j3XYm8GBsW14PpSx6Pw5QMB/JFQc6k8LKUQD8gUcFCflApvn?= =?us-ascii?Q?g+u/LuzmfdFbF1RV9Zr7WOq5fiuloOxoRboQYqu8RjFcGRqVQNrsUKAuRD3U?= =?us-ascii?Q?hFBO85AcVL5+7yCm7KMoEkybzSCwxis9RkrLVKJqKh4uPc55+9joYRci8I7e?= =?us-ascii?Q?7+ITI3VNnT3xztPnWk2A6jl55i5Qleyo6gkpkcp12cxWe2fqXK48ui/6zGRm?= =?us-ascii?Q?FnqtkW3vOB8q5U7IAWhRbtYIxBv9FAKPzTFKNai86GG0ON9rfT+p88HjWp/z?= =?us-ascii?Q?MQx1cimT59tTH26eH1joYBE0VtqzmBTjSdGR29iXA6rIp1aiLkTxTIutxqqF?= =?us-ascii?Q?WmAV0HOkqhjbK/7OpBJNI7wE/rEuVMqdW+sKEIdshLV2YwPmxg4Dayg12VCs?= =?us-ascii?Q?Ue2ydnMTyw6Dda4sSjndCZFhlVeSe2s2GFZN463168dX+AiJ58BCoj/O1eaV?= =?us-ascii?Q?x8hPRbb5sjcPbetqm4nsz1fHpE10vl0arsUGwmxGmKRZSFtTmo197REAZYVm?= =?us-ascii?Q?fbNS2G5G3yi4wPbGxQ5eyp9dd5N9sVsmLqZHnw5FNraFPiTC1uQjeJc/kZEV?= =?us-ascii?Q?l8ohHjTIuQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b4e0c35-3fa4-4fd9-2fd4-08de8f6b6b9d X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6486.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Mar 2026 21:21:06.6081 (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: wJGaAIqxSE5SXKmUpW8SHTVqpXRCKKDNGvW/21YnmTGGxcYU7GksRabCfR/qK1kuZIBdXSEPrM8Y3PhIrTW/Pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5849 Content-Type: text/plain; charset="utf-8" Add first_usable_fb_region() to GspStaticConfigInfo to extract the first usable FB region from GSP's fbRegionInfoParams. Usable regions are those that are not reserved or protected. The extracted region is stored in GetGspStaticInfoReply and exposed as usable_fb_region field for use by the memory subsystem. Cc: Nikola Djukic Signed-off-by: Joel Fernandes --- drivers/gpu/nova-core/gsp/commands.rs | 11 ++++-- drivers/gpu/nova-core/gsp/fw/commands.rs | 44 +++++++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index c89c7b57a751..41742c1633c8 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -4,6 +4,7 @@ array, convert::Infallible, ffi::FromBytesUntilNulError, + ops::Range, str::Utf8Error, // }; =20 @@ -189,22 +190,28 @@ fn init(&self) -> impl Init { } } =20 -/// The reply from the GSP to the [`GetGspInfo`] command. +/// The reply from the GSP to the [`GetGspStaticInfo`] command. pub(crate) struct GetGspStaticInfoReply { gpu_name: [u8; 64], + /// Usable FB (VRAM) region for driver memory allocation. + #[expect(dead_code)] + pub(crate) usable_fb_region: Range, } =20 impl MessageFromGsp for GetGspStaticInfoReply { const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; type Message =3D GspStaticConfigInfo; - type InitError =3D Infallible; + type InitError =3D Error; =20 fn read( msg: &Self::Message, _sbuffer: &mut SBufferIter>, ) -> Result { + let (base, size) =3D msg.first_usable_fb_region().ok_or(ENODEV)?; + Ok(GetGspStaticInfoReply { gpu_name: msg.gpu_name_str(), + usable_fb_region: base..base.saturating_add(size), }) } } diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-co= re/gsp/fw/commands.rs index db46276430be..9fffa74d03f9 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -10,7 +10,10 @@ }, // }; =20 -use crate::gsp::GSP_PAGE_SIZE; +use crate::{ + gsp::GSP_PAGE_SIZE, + num::IntoSafeCast, // +}; =20 use super::bindings; =20 @@ -121,6 +124,45 @@ impl GspStaticConfigInfo { pub(crate) fn gpu_name_str(&self) -> [u8; 64] { self.0.gpuNameString } + + /// Returns an iterator over valid FB regions from GSP firmware data. + fn fb_regions( + &self, + ) -> impl Iterator { + let fb_info =3D &self.0.fbRegionInfoParams; + fb_info + .fbRegion + .iter() + .take(fb_info.numFBRegions.into_safe_cast()) + .filter(|reg| reg.limit >=3D reg.base) + } + + /// Extracts the first usable FB region from GSP firmware data. + /// + /// Returns the first region suitable for driver memory allocation as = a `(base, size)` tuple. + /// Usable regions are those that: + /// - Are not reserved for firmware internal use. + /// - Are not protected (hardware-enforced access restrictions). + /// - Support compression (can use GPU memory compression for bandwidt= h). + /// - Support ISO (isochronous memory for display requiring guaranteed= bandwidth). + /// + /// TODO: Multiple discontinuous usable regions of RAM are possible in + /// special cases. We need to support it (to also match Nouveau's beha= vior). + pub(crate) fn first_usable_fb_region(&self) -> Option<(u64, u64)> { + self.fb_regions().find_map(|reg| { + // Filter: not reserved, not protected, supports compression a= nd ISO. + if reg.reserved =3D=3D 0 + && reg.bProtected =3D=3D 0 + && reg.supportCompressed !=3D 0 + && reg.supportISO !=3D 0 + { + let size =3D reg.limit - reg.base + 1; + Some((reg.base, size)) + } else { + None + } + }) + } } =20 // SAFETY: Padding is explicit and will not contain uninitialized data. --=20 2.34.1