From nobody Wed Jun 24 20:45:53 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010071.outbound.protection.outlook.com [52.101.46.71]) (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 21B941F09A8; Mon, 22 Jun 2026 19:45:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157520; cv=fail; b=BuB4Qhky1IsupjW7LRP1AaKGLZ+1DU8x9se9a1D2VH7JXmrWpbZIlwksE8hENjyM7l4PIlzcgSHC42fw9/PtZn50txsWv6wJ6H/NXwXQKoPyt0G7j8jUH7yf+2xW90jYhKHVUIkeLPBhhw4SbH8GXCgHAo/ncTGZqPmZDNJX7jw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157520; c=relaxed/simple; bh=vpRITdSoklbiSi0w6lkTQWoWKTuaBuV8u3q4/cfvqYY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=crxylOTYeUb5K2H/oWBYe3acd2X5D8qi8zoOBmMUPOOWEWLfn5HzZK7gE80ZREIXtsdtFkmJIJP+X+7rJqqfXoy43kv0B1Vp+jkuGmMbvhA/ro4GPgh0AA6VtPi/HiAet0CWEt///l+1nGgvfIQm4xdM3lbDFQHtWt+Eyfx2D1M= 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=ZdJVTJcn; arc=fail smtp.client-ip=52.101.46.71 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="ZdJVTJcn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hUtAydg3+cfdIQ0dvtvE66unYrA5qQOiPNn6ruPpb6w5wn/++a6Q/LQGs0USVOXLwt/T4w+73l7Byzaz0oNMIoHnGh0znVaAcEXqGYUdPL038GKnOYc+HxIW+NBEGnyiyu4ScKj8zrfePq1GUjjNxX7GzmHBzTWI2ZQnwfbMVAHEBu/gw1ftNl7dZspZdgZxkgtEoXcyYfX84Txm1Jp/9RQKO+C1KUmqCOtFLUQR3HUJdl+UVvw2clY0MsVnwoDNWi37R8h6ek+dp2tLYqvOdb6vD9173TmrD0VhSfdd4TDqSrA0JPXjQVRKHJzPDeLl7V2HfIoe3CQQeVskiFk8uA== 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=6YbcvYEhMf86M11vE2pQBCzqVwZsLBshsoi8e/9FKMY=; b=okbQEGJbZ6dYOyVbqJkCpBNKi9E5V5ww7Pjr3Cvstsl91BNEDT4n2iQC7rB9Wu2YWRMVLwUPjOlZSfk7Evsdyv1zsLiruM97Maaq10VOq5jLBWNMewg6RL2q+DIC3KeLZ+HqjZkbInBLgXFvq01O++NIl4lvfksl53i8+buZF0F0NThHFhO/B2LUjIvZnhk/Al+P17xZ3fGw+TlgikSK1BLseR9e9oa5+QOHcoTN0rvoPtRL2/m6l/im1ng2hp8Uc2ONEsEdCGiLWJ6iUAn5AHcaA40Ip+2cPu7DcGuJAWTMCSp9LEZygIRPA64t7452Gy8nMI2g3J1jRWJO9pREYg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=6YbcvYEhMf86M11vE2pQBCzqVwZsLBshsoi8e/9FKMY=; b=ZdJVTJcnwcxBs3gACCqRtIFUJGRskjAc/jz0CpkWegYRJPMTDzl1jxjuBkQROAMVOU6jr/mRH+Dd/OkvESTPdulGbn9xcIwof+CNdaHiiigakJZQ1iJCxwUp8qWoitEyYNg4YxpTXrwmHrqS3eQZS4Wp8085uu2KQecJk84KjJGBOVdF75ggP4YbLN+jVuCCbY9a9fhpHZPF7UI1EpG+lWbbBgZ02GN0h8SE1iWHcrVaio8y0O1xjs0tlZPoGDmAJuIdIcrfNnwEpnNUR3JoFVXHsb6Cezu1XSWvpFWtgMv+c+6s7e6VVLYX6mh/8khjtBPhOpFLXiHDMyCm8Gfh8Q== Received: from BN9PR03CA0089.namprd03.prod.outlook.com (2603:10b6:408:fc::34) by CH1PR12MB9599.namprd12.prod.outlook.com (2603:10b6:610:2ae::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.21; Mon, 22 Jun 2026 19:45:06 +0000 Received: from BL6PEPF0001AB73.namprd02.prod.outlook.com (2603:10b6:408:fc:cafe::44) by BN9PR03CA0089.outlook.office365.com (2603:10b6:408:fc::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.139.20 via Frontend Transport; Mon, 22 Jun 2026 19:45:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL6PEPF0001AB73.mail.protection.outlook.com (10.167.242.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.8 via Frontend Transport; Mon, 22 Jun 2026 19:45:06 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:42 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:42 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:44:34 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang , Bjorn Helgaas , Subject: [PATCH v2 1/7] PCI/IOV: Return u16 from pci_sriov_get_totalvfs() Date: Mon, 22 Jun 2026 22:43:47 +0300 Message-ID: <20260622194353.1308872-2-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB73:EE_|CH1PR12MB9599:EE_ X-MS-Office365-Filtering-Correlation-Id: 1550b537-d4be-47fe-81cc-08ded096c2dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|23010399003|1800799024|376014|7416014|11063799006|6133799003|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: XKbeaKo8OV7FkyBDKAGTSJ0p1RSXQobVAEIeIeIMU9ajx9vAf9HextYoJjFAlJpHRFB4SuCRaaeI1R+PhY0MihZU+sBE+k4/eodoolS4+yZ/rHl4CBs/MYGywLYFB+C7GO/TZDEkZIWxEd1UayY7lkxqIdyJ8RqIyPn7Xq2ntLEcdsYq9Ihkzlod3p/aZQchv1xwwLX6dPyXbYPrdergnN2exdyAa3FfcFz8K/2Ss/24wOEcg1AlYwy60bTH44VZ+Mko94CbQcePBpxj69QhtgNQbCWkrCVRlMchS2uJ7XSnfRFVdBxawO49jbnuZmFZ5IOlRLBVzK7adimQS0SEPzXp96T+as+1DWbJUy0DG9txc0M9cbUuohnNwDj9FVfBtrQVs16d4SoI9yZ5kUMHXJr2l6piBf6/EGrZIUZ2v/I++6R+jvCpmttUJ+mNRBIZFfpDZvDrMrXEnhuLpFbwPROeGfyLvJLZHD60Uw4x68qGEYZGdINt2nK+UZMfSytdRaU4oRJ2jYyI1vMd3XQDpp67LhosZxiOMcFFputSM1mjAN6gjNGwAxEt2t0EWjCIpU6kpNomXHBLcR7xMr+jfKmVNY2/ohGoHJgFgMH8SerqSFCBrj0LqqUm8DCE/GFU/k4lsMYmp6YC5tD5atb3eVOZ7ivp/gPXe/TaS0dHUJahYj+OdvpDFonJMTsVbINvHVqD9jyjC7J5m0+ao5qLHg== X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(23010399003)(1800799024)(376014)(7416014)(11063799006)(6133799003)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: du8EOaGhHPrCObt5I1HKrCbYrQsl+3k6G/Qt0DsjOjZvlag1TjVnnl0rp+MetWGET6fVBDWbXWT8SLqHIczZFDYkRaKuyTn6hqRSdCh5aVNNLdTc3dsyX5ExXNOjyikyTeDGVs2z61FyaDarGtgzl3NZiWC32qTGnNhHLfPN094gl6TdPS09ZuVMZ3DrQB0RhvRkJbJqckmFwnVYpobuFzW11g7Vsx3kEr7CN0VCEesQfA7TR9Bc5Jb0b/rNxTYlcRI+pdyRt42UujE4K7dST7Pu0z2v/Tl7HuJOximIou/jEMfINvZ8xW/kZKutPcThSsQJnZsstY2aUR8uxljYo36YMdhuKq4u+KgO7e5y8oL3rXGRLOUVEcAwY5GHbHqTz7Fp+QVNKXaO4SZpA0hijSrklKvn0Vt0im6PsyhK39r+OD+uG8F8rYKILcm/gLnO X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:06.4186 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1550b537-d4be-47fe-81cc-08ded096c2dc X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB73.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9599 Content-Type: text/plain; charset="utf-8" pci_sriov_get_totalvfs() reports a VF count, not an errno-style status. It returns 0 when SR-IOV is unavailable or the device is not a PF, and otherwise returns the PF's driver_max_VFs value. driver_max_VFs is stored as a u16 in struct pci_sriov. It is derived from the SR-IOV TotalVFs field or from a driver-provided limit, so the implementation cannot return a negative value. Change the declaration, CONFIG_PCI_IOV stub, and implementation to return u16. Update callers to store the result in u16 variables, remove obsolete negative-value checks, and use unsigned format specifiers where needed. Cc: Bjorn Helgaas Cc: linux-pci@vger.kernel.org Signed-off-by: Zhi Wang Suggested-by: Alexandre Courbot --- drivers/crypto/hisilicon/qm.c | 8 +++++--- drivers/crypto/intel/qat/qat_common/adf_sriov.c | 6 +++--- drivers/gpu/drm/xe/xe_sriov_pf.c | 6 ++---- drivers/misc/genwqe/card_base.c | 6 ++---- drivers/net/ethernet/cavium/thunder/nic_main.c | 2 +- drivers/net/ethernet/emulex/benet/be_main.c | 3 ++- drivers/net/ethernet/mellanox/mlx5/core/sriov.c | 3 ++- drivers/net/ethernet/sfc/ef10_sriov.c | 2 +- drivers/pci/iov.c | 2 +- drivers/vdpa/octeon_ep/octep_vdpa_main.c | 4 ++-- include/linux/pci.h | 4 ++-- 11 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c index 3ca47e2a9719..13b45fcb582b 100644 --- a/drivers/crypto/hisilicon/qm.c +++ b/drivers/crypto/hisilicon/qm.c @@ -3878,7 +3878,8 @@ static int qm_func_shaper_enable(struct hisi_qm *qm, = u32 fun_index, u32 qos) struct device *dev =3D &qm->pdev->dev; struct qm_shaper_factor t_factor; u32 ir =3D qos * QM_QOS_RATE; - int ret, total_vfs, i; + u16 total_vfs; + int ret, i; =20 total_vfs =3D pci_sriov_get_totalvfs(qm->pdev); if (fun_index > total_vfs) @@ -4188,7 +4189,8 @@ static void hisi_qm_init_vf_qos(struct hisi_qm *qm, i= nt total_func) int hisi_qm_sriov_enable(struct pci_dev *pdev, int max_vfs) { struct hisi_qm *qm =3D pci_get_drvdata(pdev); - int pre_existing_vfs, num_vfs, total_vfs, ret; + int pre_existing_vfs, num_vfs, ret; + u16 total_vfs; =20 ret =3D qm_pm_get_sync(qm); if (ret) @@ -4203,7 +4205,7 @@ int hisi_qm_sriov_enable(struct pci_dev *pdev, int ma= x_vfs) } =20 if (max_vfs > total_vfs) { - pci_err(pdev, "%d VFs is more than total VFs %d!\n", max_vfs, total_vfs); + pci_err(pdev, "%d VFs is more than total VFs %u!\n", max_vfs, total_vfs); ret =3D -ERANGE; goto err_put_sync; } diff --git a/drivers/crypto/intel/qat/qat_common/adf_sriov.c b/drivers/cryp= to/intel/qat/qat_common/adf_sriov.c index 8bf0fe1fcb4d..317b80c1772f 100644 --- a/drivers/crypto/intel/qat/qat_common/adf_sriov.c +++ b/drivers/crypto/intel/qat/qat_common/adf_sriov.c @@ -52,7 +52,7 @@ void adf_schedule_vf2pf_handler(struct adf_accel_vf_info = *vf_info) static int adf_enable_sriov(struct adf_accel_dev *accel_dev) { struct pci_dev *pdev =3D accel_to_pci_dev(accel_dev); - int totalvfs =3D pci_sriov_get_totalvfs(pdev); + u16 totalvfs =3D pci_sriov_get_totalvfs(pdev); struct adf_hw_device_data *hw_data =3D accel_dev->hw_device; struct adf_accel_vf_info *vf_info; int i; @@ -148,7 +148,7 @@ static int adf_do_disable_sriov(struct adf_accel_dev *a= ccel_dev) static int adf_do_enable_sriov(struct adf_accel_dev *accel_dev) { struct pci_dev *pdev =3D accel_to_pci_dev(accel_dev); - int totalvfs =3D pci_sriov_get_totalvfs(pdev); + u16 totalvfs =3D pci_sriov_get_totalvfs(pdev); unsigned long val; int ret; =20 @@ -237,7 +237,7 @@ void adf_reenable_sriov(struct adf_accel_dev *accel_dev) void adf_disable_sriov(struct adf_accel_dev *accel_dev) { struct adf_hw_device_data *hw_data =3D accel_dev->hw_device; - int totalvfs =3D pci_sriov_get_totalvfs(accel_to_pci_dev(accel_dev)); + u16 totalvfs =3D pci_sriov_get_totalvfs(accel_to_pci_dev(accel_dev)); struct adf_accel_vf_info *vf; int i; =20 diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov= _pf.c index 33bd754d138f..1a1c4978e5f3 100644 --- a/drivers/gpu/drm/xe/xe_sriov_pf.c +++ b/drivers/gpu/drm/xe/xe_sriov_pf.c @@ -58,10 +58,8 @@ bool xe_sriov_pf_readiness(struct xe_device *xe) { struct device *dev =3D xe->drm.dev; struct pci_dev *pdev =3D to_pci_dev(dev); - int totalvfs =3D pci_sriov_get_totalvfs(pdev); - int newlimit =3D min_t(u16, wanted_max_vfs(xe), totalvfs); - - xe_assert(xe, totalvfs <=3D U16_MAX); + u16 totalvfs =3D pci_sriov_get_totalvfs(pdev); + u16 newlimit =3D min_t(u16, wanted_max_vfs(xe), totalvfs); =20 if (!dev_is_pf(dev)) return false; diff --git a/drivers/misc/genwqe/card_base.c b/drivers/misc/genwqe/card_bas= e.c index 86bfa82723ff..259d2f9c9416 100644 --- a/drivers/misc/genwqe/card_base.c +++ b/drivers/misc/genwqe/card_base.c @@ -360,10 +360,10 @@ static bool genwqe_setup_vf_jtimer(struct genwqe_dev = *cd) unsigned int vf; u32 T =3D genwqe_T_psec(cd); u64 x; - int totalvfs; + u16 totalvfs; =20 totalvfs =3D pci_sriov_get_totalvfs(pci_dev); - if (totalvfs <=3D 0) + if (!totalvfs) return false; =20 for (vf =3D 0; vf < totalvfs; vf++) { @@ -1132,8 +1132,6 @@ static int genwqe_pci_setup(struct genwqe_dev *cd) } =20 cd->num_vfs =3D pci_sriov_get_totalvfs(pci_dev); - if (cd->num_vfs < 0) - cd->num_vfs =3D 0; =20 err =3D genwqe_read_ids(cd); if (err) diff --git a/drivers/net/ethernet/cavium/thunder/nic_main.c b/drivers/net/e= thernet/cavium/thunder/nic_main.c index 0ec65ec634df..33faa40381d3 100644 --- a/drivers/net/ethernet/cavium/thunder/nic_main.c +++ b/drivers/net/ethernet/cavium/thunder/nic_main.c @@ -98,7 +98,7 @@ static u64 nic_reg_read(struct nicpf *nic, u64 offset) /* PF -> VF mailbox communication APIs */ static void nic_enable_mbx_intr(struct nicpf *nic) { - int vf_cnt =3D pci_sriov_get_totalvfs(nic->pdev); + u16 vf_cnt =3D pci_sriov_get_totalvfs(nic->pdev); =20 #define INTR_MASK(vfs) ((vfs < 64) ? (BIT_ULL(vfs) - 1) : (~0ull)) =20 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethe= rnet/emulex/benet/be_main.c index ed302f5ec476..21cc5113ab92 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -4441,7 +4441,8 @@ static void be_calculate_pf_pool_rss_tables(struct be= _adapter *adapter) static int be_get_sriov_config(struct be_adapter *adapter) { struct be_resources res =3D {0}; - int max_vfs, old_vfs; + u16 max_vfs; + int old_vfs; =20 be_cmd_get_profile_config(adapter, &res, NULL, ACTIVE_PROFILE_TYPE, RESOURCE_LIMITS, 0); diff --git a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c b/drivers/net/= ethernet/mellanox/mlx5/core/sriov.c index bf6f631cf2ce..7087f1a4d364 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/sriov.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/sriov.c @@ -298,7 +298,8 @@ int mlx5_sriov_init(struct mlx5_core_dev *dev) { struct mlx5_core_sriov *sriov =3D &dev->priv.sriov; struct pci_dev *pdev =3D dev->pdev; - int total_vfs, i; + u16 total_vfs; + int i; =20 if (!mlx5_core_is_pf(dev)) return 0; diff --git a/drivers/net/ethernet/sfc/ef10_sriov.c b/drivers/net/ethernet/s= fc/ef10_sriov.c index f98f1707d1a9..5b339b055761 100644 --- a/drivers/net/ethernet/sfc/ef10_sriov.c +++ b/drivers/net/ethernet/sfc/ef10_sriov.c @@ -263,7 +263,7 @@ int efx_ef10_vswitching_probe_pf(struct efx_nic *efx) struct net_device *net_dev =3D efx->net_dev; int rc; =20 - if (pci_sriov_get_totalvfs(efx->pci_dev) <=3D 0) { + if (!pci_sriov_get_totalvfs(efx->pci_dev)) { /* vswitch not needed as we have no VFs */ efx_ef10_vadaptor_alloc_set_features(efx); return 0; diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 91ac4e37ecb9..db9828bfff52 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c @@ -1277,7 +1277,7 @@ EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs); * SRIOV capability value of TotalVFs or the value of driver_max_VFs * if the driver reduced it. Otherwise 0. */ -int pci_sriov_get_totalvfs(struct pci_dev *dev) +u16 pci_sriov_get_totalvfs(struct pci_dev *dev) { if (!dev->is_physfn) return 0; diff --git a/drivers/vdpa/octeon_ep/octep_vdpa_main.c b/drivers/vdpa/octeon= _ep/octep_vdpa_main.c index 31a02e7fd7f2..4b032b757ee9 100644 --- a/drivers/vdpa/octeon_ep/octep_vdpa_main.c +++ b/drivers/vdpa/octeon_ep/octep_vdpa_main.c @@ -796,13 +796,13 @@ static int octep_vdpa_pf_setup(struct octep_pf *octpf) { u8 __iomem *addr =3D octpf->base[OCTEP_HW_MBOX_BAR]; struct pci_dev *pdev =3D octpf->pdev; - int totalvfs; + u16 totalvfs; size_t len; u64 val; =20 totalvfs =3D pci_sriov_get_totalvfs(pdev); if (unlikely(!totalvfs)) { - dev_info(&pdev->dev, "Total VFs are %d in PF sriov configuration\n", tot= alvfs); + dev_info(&pdev->dev, "Total VFs are %u in PF sriov configuration\n", tot= alvfs); return 0; } =20 diff --git a/include/linux/pci.h b/include/linux/pci.h index 2c4454583c11..1994a88afbc2 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -2538,7 +2538,7 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int i= d); int pci_num_vf(struct pci_dev *dev); int pci_vfs_assigned(struct pci_dev *dev); int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs); -int pci_sriov_get_totalvfs(struct pci_dev *dev); +u16 pci_sriov_get_totalvfs(struct pci_dev *dev); int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn); resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno); int pci_iov_vf_bar_set_size(struct pci_dev *dev, int resno, int size); @@ -2590,7 +2590,7 @@ static inline int pci_vfs_assigned(struct pci_dev *de= v) { return 0; } static inline int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs) { return 0; } -static inline int pci_sriov_get_totalvfs(struct pci_dev *dev) +static inline u16 pci_sriov_get_totalvfs(struct pci_dev *dev) { return 0; } #define pci_sriov_configure_simple NULL static inline resource_size_t pci_iov_resource_size(struct pci_dev *dev, i= nt resno) --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013001.outbound.protection.outlook.com [40.93.201.1]) (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 9B2C3299A82; Mon, 22 Jun 2026 19:45:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157522; cv=fail; b=IfxkLCi+k/8BMQPLJ7iNBjNQRSgHoYOdP5NW8Uvvb6rct7osfo6ioRBcUsrUMxC/3t0s668na8Tp3yi2Hv7dgUwo6l7yVfQGYjcwRbe2Sq1THLlCNl3d8o++MswpR53vx5tgm7na25o6ahlWh4qCwvLOB8x01MKgLwo9hOUtWTM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157522; c=relaxed/simple; bh=5t+uZQOhy7cjHQ6nHGiinYMVu7Bp6YpXg1bYQhTIv9s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=s9RO0jltpV3WMO6GTSOIvbC+pZ/giAsJgNnR1456i7EgYbrA97KUTwOO+leq1YEC127lBXPz8M9O+FR40oBv5Zn8kCHNU9XI9gGKyhC8HBaaq09dfL9It63blkjzZHeY9iL7NSCA/OQAEKoTzFw2Ew/+fTm4Kk1e+hTsky7ZrUM= 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=Dx0wuJQc; arc=fail smtp.client-ip=40.93.201.1 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="Dx0wuJQc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DzRY+nxP6gO72kwphc2APTva+hHjXzG19BoUxj6tQFn0Oh7AskA/dwHYBbA+wJm9vo8PcyMjqp4Zh1vAxdeOchn3d5F4undNLV9B+y5Box4jfSjRlQOibGtn09zJF99HVfurFNJLX/apLxSEI3GlVXIoe7H3va4ruwqXmaeVwqr6Pp96Q6wa/RGJU8yNAT1Li6C45V9fOlQGRisn1Kekzcn/uU0SJTJCesK4ZLXVJMarSmkRVHTewozJj8esGcChl4W5UtWjMnUMhXdO4mGTYSrPFtplJMFTXsVBpuVoiUTAsHBpkfbS0aDCjU2bNERUEnuaNM2RNaeZfObL67/2FA== 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=s6nxw+aQIAG5EDiWeJM309bB6ABxYMbkXweCxYk4Mlg=; b=Pj8Ar9UVaqeMncoz4dYQY6Qql6cafdYXlxbLAGrSbM7eLOMVaKPfwghWebngcB2eCzXXF3Y0LwSHmJGVXVpl8YUP2JzuGDSg9flPO2b+vcrbvtUmlrn+PgHw5OTmp/0zDat58DRLARTnuJO432SeWpK4+NmnuWTyr7wMAyc/r2zUTGQpVNq5HmxcPYiB3xNBKsyNG0x4JXSCBRi4DOp+KRzwQ9LoLkqZNJbx+7Xy2GXnQKdXgoW0hDEjY7GTG5sD8+B8rG6GBFTC1GDMmALXAZLB33tKFtDDfW2kr3/v0A80AbwV13BB6Up+cjGyH8cK1eRvBzuACCObmt1rkQvU8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=s6nxw+aQIAG5EDiWeJM309bB6ABxYMbkXweCxYk4Mlg=; b=Dx0wuJQcPHw/VhEqQbf3lPyASN5SqVRSt6ItW9s2xTb+iBoOevgU8UEqF2YlBqtotrXYmZQ5zKal/6w/9xtsAEwOBMIWu+q5CyI+96FLWDvw43KMyMl8VUkHqbDLaqyUuvqWdU431akuFQw6fYpnAKEM6uAvi0g1I670Pdkso1A20E+CgC37Tx2IfrwJhH0KUtCHBBLi/BdpM+tC/GjwxH+bTzO5IxJj4+GpwBGiXHqqhYK7WifkA/unXP+a8xyGpjY2xdHi6Ay5Cey6x3C0M6GcKB2Exbcxpts5UEEwPOzuHs/1pdDl6YbF13KPrU3fgS2kpwYfv2Vh3dfujkcjvw== Received: from BN9PR03CA0109.namprd03.prod.outlook.com (2603:10b6:408:fd::24) by CH8PR12MB9839.namprd12.prod.outlook.com (2603:10b6:610:274::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 19:45:15 +0000 Received: from BL02EPF0002992E.namprd02.prod.outlook.com (2603:10b6:408:fd:cafe::64) by BN9PR03CA0109.outlook.office365.com (2603:10b6:408:fd::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.139.20 via Frontend Transport; Mon, 22 Jun 2026 19:45:14 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0002992E.mail.protection.outlook.com (10.167.249.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.10 via Frontend Transport; Mon, 22 Jun 2026 19:45:14 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:51 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:50 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:44:42 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang , Bjorn Helgaas , Subject: [PATCH v2 2/7] rust: pci: Add sriov_get_totalvfs() helper Date: Mon, 22 Jun 2026 22:43:48 +0300 Message-ID: <20260622194353.1308872-3-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0002992E:EE_|CH8PR12MB9839:EE_ X-MS-Office365-Filtering-Correlation-Id: a54aad99-2f58-4d8f-6187-08ded096c770 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|36860700016|7416014|376014|82310400026|18002099003|22082099003|11063799006|56012099006|6133799003; X-Microsoft-Antispam-Message-Info: 2ZZL4bLhLyaaIfYglq+pl8svwEiEl6vPR0j8QNDgMkdJpFYsDDhdGotO5c/xkJodI5Vfkeo5k9nyGi358PDeShU+vJouK5dAkgY891m5bxuEXMyWcdiglR6kjufZ7EFjCrNuiYUM9mkZrl7+K6ufhcDcdvOqIVI7EeMFxQKotJrDtWoXsReImXohNpsdXhtgMub/MACKm36OqtlxoSFJz/98UjRH3D6uXyu6YC9EspASVXG5Cd7JpWLA76YhMNYtGzeapWp/X53l1vr2hJ7BNE657nPJ3BSICoEMKXz4hfubLpLKZQFM1MpIGIOtTFrTBgziZEIjOUzQcYhhjSEDTQvn0FAIL8/iTl0wKdSdGOdrrk5TcX1B+rKJWjSAqRbPPhe3mFN5uE9o4To6hbNzwB6lx6gnESMrnvZQZ4WWUF4NNpj2yJWEreQ9m+SDGttWN6+ndUGGAKLfH+0oihtDfjQcqXXautWoJREe4C6AT5o2jsCk2BoHLmZ3kF2cP+SHhVT46pjb1RcNl/xMyjv372VJgwtjp2086S5td//a9L/RI88ptNJkJJ0qmLh3Kv1OXjB67SbGg/T9MR8ZmYdIpUNB71nFQiDhywzLaYMyVF394Up2k8OCn0bq51KkltBs2b4sF967wj6fiZnnHZ2hyz7lNoUaOkMUGRk7bCX3PMWPVxfpNPtDKhBYCZYZurHVi9zvoBCyoCzbmPHeC7wHbw== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(36860700016)(7416014)(376014)(82310400026)(18002099003)(22082099003)(11063799006)(56012099006)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bu0O4RwlpQHHsDEv5h+ZAROnOhJ9VfAtGt/Anl9j5Q6YA3ivZ1f9GjPB/Vr3zEA2x3Tvwj13sMkYw0pS4TA8AJmL5ukNp63O6ZUICXuXMNSlRqXwN5Pxy1WxHyk7DHmLWcZ1ukqjLBxmCxl7LuagoVSvUwZUaI+bqHpLm55VrxjcdY2HS7VcM5IQR/EG9VivTE/FbUmx2dzaGLt/O8jSaj9LoI0DjLIcXZ2+6DDoKuG6oFjx16UBMJBORlEOzyx0MxOrLcTq8KM4edqWCElw7LO2ihgRVmD8hGi3NeR9Cdf8qQqOHmmLMd8UgP/DK3NXtzSpSchGIvSMvOv8fQpIJ9EBKV+luVerzUtAFleMWRqFIJJumP5lQYBG/aXH3b/xzw+3rD3hxy6w8xx5H89kMD/lPQru8Vd6a6hBKoeOC36VMeE4Hy7850hnZk311uBX X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:14.1069 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a54aad99-2f58-4d8f-6187-08ded096c770 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992E.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH8PR12MB9839 Content-Type: text/plain; charset="utf-8" Expose pci_sriov_get_totalvfs() to Rust PCI drivers so they can query how many SR-IOV VFs a device supports. The C helper now returns u16 and reports 0 when SR-IOV is unavailable or the device is not a PF, so mirror that API directly instead of modeling 0 VFs as an error. Cc: Bjorn Helgaas Cc: linux-pci@vger.kernel.org Signed-off-by: Zhi Wang --- rust/kernel/pci.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs index 5071cae6543f..adcb99fd0a2e 100644 --- a/rust/kernel/pci.rs +++ b/rust/kernel/pci.rs @@ -450,6 +450,12 @@ pub fn pci_class(&self) -> Class { // SAFETY: `self.as_raw` is a valid pointer to a `struct pci_dev`. Class::from_raw(unsafe { (*self.as_raw()).class }) } + + /// Returns the total number of VFs, or 0 if SR-IOV is not available. + pub fn sriov_get_totalvfs(&self) -> u16 { + // SAFETY: `self.as_raw()` is a valid pointer to a `struct pci_dev= `. + unsafe { bindings::pci_sriov_get_totalvfs(self.as_raw()) } + } } =20 impl<'a> Device> { --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012062.outbound.protection.outlook.com [40.93.195.62]) (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 B9A203346A0 for ; Mon, 22 Jun 2026 19:45:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157525; cv=fail; b=QptL56i2ePCQ4YC53MIB1j6uorW7WfO4MU1ewwsCxOmdBPpz8G8aiu56lXfHFf1VeXKUFob40ml42sqITaiXsqOSkamZzYwPNHTvtwnaP5mIXBlLkZ55K1KE1SSw0ev5w73cHz/z2f5WJFxB5x29XCTblvFCiT6VOjTwtb78eQo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157525; c=relaxed/simple; bh=5UcC16vhK7dBckozTfnp9MxeMF9EEtvDBC9kBireUYw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lQ/x2xVHHMxT47wZlcOqgbCWQpIGQqXJnKIxXeGiawcQTeRF6sTu/M8xh1QQy8rbfGgM0U04qCXH5seNuGS+8GqDdHZYtuiB8CRqC7cGiN3t1tB9M96JuJhoYRt0mTMa1mWz58mUMvuuhTfy+2qJwZVzNxdqTE9YDP9Q2qwIJDw= 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=CBQHCxgm; arc=fail smtp.client-ip=40.93.195.62 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="CBQHCxgm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L0tGJZrbmpwTh9gpb5RJua6qlDAGDSgC80Fm83CVMpFQ2QmGU6t75esN4SFr81LDClecI2YXvCILj3oYmLlyTZK+/ZtLVRJij4JQjOfjsNYQLpCpaRsswZOL27P8TI3bpWgLzWktI0rpqtvZmlBaX6N8VNynlmjz0+u1LE3fSa51ImZavxFD8sJ6AZO8ESEIcFnR5IL6luigdzG0Q3NacZZgc9rSRdN4n5bLWvRgCVmd0dm2ODBbuP9dUw5qoste17O2YMBpNRtkYQoUyXpPOUwHXZaNOFw6QDsan6wWT/4fzpimKBstbJKzOI1gHWo+lxcTbUJFiyxbOuqCZ/xKlw== 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=oYI/luxjppuF2UFOtW2mxo1WF5n9gERPhg9/auYwp4M=; b=wWNVVawpderjIFCGAINPh/YXmE8n+1EEwynD4ziHWscjSiGf9Vswg5UtDbdpe1xaVHTJNjCzWTzZlSw0fYkHtOqBcbe4G2treRJDQ7gebbgOvBbCxFmNbG/0h6+QwtbJc3baY48+9IIoy0UChGEFc4D0853tFkhtiwlialVHFO2W5Ib1KSGUhVWGZBwQmQc2FD71RxQiJ4n9NL48YX97latGKYnnZx/E++12oeIntgTvDQ+0n2w9GUqLC9IqckDpyO5sYVjIyRz/JAJUnanPp+oFOgJBiMteSrAMnTG2SwG2kvJAZagAcUb1MKWe1Abrwgzxt8T8anQeN/g1ZarlGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=oYI/luxjppuF2UFOtW2mxo1WF5n9gERPhg9/auYwp4M=; b=CBQHCxgm6z0l/2FB3+AT3Lmnp0ydvhHYrUGpZPOHdNhA9p01xUrwzj9psRmVNVjh/5sSkCLfQJWVwxf+UKJoltat2yg5ox6E2TNPpkxIji4XL0UM2zdoju+NYVUSvwhj84CLKQEsA1Smm0xQCj2w6T5D7TTL9UmZb5PQVg/lk/k47ar7NLFuEDtQmC4EkNDUTPp6s4uJK7y7HqPmAPDW2ODEzhsatwbwc5appoEkQpKTNNgSJnaWFxhUyt7fv8HUqKTW2Uj6XSmiImJ8turFLzKj4sipRc3TEoCzHQJgdE7N5vfVGhqR1xwK7eHUkPAm4xI4w2vcE+LZJq59xGuhsw== Received: from BL1PR13CA0347.namprd13.prod.outlook.com (2603:10b6:208:2c6::22) by IA0PR12MB8326.namprd12.prod.outlook.com (2603:10b6:208:40d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.11; Mon, 22 Jun 2026 19:45:20 +0000 Received: from BL02EPF0002992D.namprd02.prod.outlook.com (2603:10b6:208:2c6:cafe::25) by BL1PR13CA0347.outlook.office365.com (2603:10b6:208:2c6::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.12 via Frontend Transport; Mon, 22 Jun 2026 19:45:20 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0002992D.mail.protection.outlook.com (10.167.249.58) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.10 via Frontend Transport; Mon, 22 Jun 2026 19:45:19 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:59 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:44:59 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:44:51 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v2 3/7] gpu: nova-core: read vGPU mode from FSP via PRC protocol Date: Mon, 22 Jun 2026 22:43:49 +0300 Message-ID: <20260622194353.1308872-4-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0002992D:EE_|IA0PR12MB8326:EE_ X-MS-Office365-Filtering-Correlation-Id: 8d5b9b0e-44c0-4f75-8738-08ded096cadb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|1800799024|23010399003|376014|7416014|18002099003|22082099003|56012099006|6133799003|3023799007|11063799006; X-Microsoft-Antispam-Message-Info: CLVAb6cV5FsNE9UDL2k8EOfGD9n7xRPNrKHEmxvFc40UOXx01aGZRDoM4ZMb9IjcLwclCSyteRIfSKjsgaQYZMBBqnWMS0u4gpSXGhOwinrWV7pK3RK60XmhUcU2hXEebVNH+YxRNoecLBiKDiy+KOIfApZ0xNGPAKPxxBxJVvFed5l3oE4kQdXFrCw2NSJvVXpX2/eopCpja2q9xYbwuwLTPLHgCwnBmeNPu6ZdUQG99zNFRfeQ32DZ9ydOzj3gwVEpOXlQMp49AYRPtWHQ46H6nrGGFyKVDsLp+rp9crrLzfcj4QNPnE92KVqq7Ef8wvHVc/dWZhaszJiF9Nqev14cEEQbxMT7xxLUWSatq3jDrU5yMq6Rv29XrnjAhjShgzj7Ep5esLaThBJRU5+DwWXPDnaFKE6cR/Xp2Ztocg4gDGtfWmwd18QiHA1ch8k/LEgvcIxGL5v+qumf3alZ+AAqoGTre9izODHGuZwerZ0yY5rpOP4UGCAjCj06uiTxF83Ld/VH7IMI3XZpsO9C/IJCDiShTY7h2sGN+yW5uSPnwpVolC2FwJZ04zgXmQDV9KNauZTdilYdfo7Tvrj91wfDiq5kMl6ehFMWwe3a/tAPogIwXfcBgJXJIWdoETdkzcv21IBFxSTnejN+aMvurGKESb9Io7O/bqA2sT0spaGJNzEsemKXhsegmLRgzXEhmLZgbZrCRQ/q6NLL8ekf0A== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(1800799024)(23010399003)(376014)(7416014)(18002099003)(22082099003)(56012099006)(6133799003)(3023799007)(11063799006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: TQwc5/DdbUZiWqUIVj8w0dieBqlUppge3opwGjWjUf21Y7g2E5JJdslCq/aZy7tQUCxHiKCkgMEKL1VLJZTkwGbTfF7iYBrDUAGTiXX2D71n7wF4kYuf/WbXEjPdav2EzkFREp47kPJw84rjOlvwitIAU7jaP1Abid9qJnu5Cn1YI3Ur3XRx1SfUGUxrL3LcgIJA6GTi6H18sI/eBVSa2gxzJQJyTbFz5+bnkfVYWgC/Cw27rGnAXEkgXf09FvQH5WFbHhwafBM8yt9Bow9eiFgo2XR0VXrJnqv3gmHPvBoPP3DRK80nevHfB+vR6WusPd9tq5XLhexKRBlhEIOrh6+rz32dBq3/+I/pgFzS64108X+yx6IomU/84rE9p3p8zCr17CAS4kfrtWETVvo7ohZN87MO63gXtUcPiYAzNlF8BXLEtgvSaB4qHzYMEOx8 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:19.8286 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8d5b9b0e-44c0-4f75-8738-08ded096cadb X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992D.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PR12MB8326 Content-Type: text/plain; charset="utf-8" Add support for querying the vGPU mode configuration from FSP using the PRC (Product Reconfiguration Control) protocol. PRC is an API system exposed through FSP's Management Partition that allows querying device configuration "knobs" without firmware updates. Signed-off-by: Zhi Wang --- drivers/gpu/nova-core/fsp.rs | 195 ++++++++++++++++++++++++++++++++-- drivers/gpu/nova-core/mctp.rs | 3 + 2 files changed, 190 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 4b97d1fb505e..2bf01c2d1175 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -51,6 +51,56 @@ =20 mod hal; =20 +/// PRC message sub-command. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +enum PrcMessageSubcmd { + /// Read a PRC knob value. + Read =3D 0x0c, +} + +impl From for u8 { + fn from(value: PrcMessageSubcmd) -> Self { + value as u8 + } +} + +/// PRC object identifier. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +enum PrcObjectId { + /// vGPU mode configuration knob. + VgpuMode =3D 0x29, +} + +impl From for u8 { + fn from(value: PrcObjectId) -> Self { + value as u8 + } +} + +kernel::impl_flags!( + /// PRC request flags. + #[derive(Clone, Copy, Default, PartialEq, Eq)] + struct PrcFlags(u8); + + /// Individual PRC request flag. + #[derive(Clone, Copy, PartialEq, Eq)] + enum PrcFlag { + /// Request the active knob value for the current boot. + Active =3D 1 << 1, + } +); + +/// vGPU operating mode as reported by FSP via the PRC protocol. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub(crate) enum VgpuMode { + /// vGPU support is disabled on this GPU. + Disabled, + /// vGPU support is enabled on this GPU. + Enabled, +} + /// FSP command response payload (`NVDM_PAYLOAD_COMMAND_RESPONSE`). #[repr(C, packed)] #[derive(Clone, Copy)] @@ -60,6 +110,62 @@ struct NvdmPayloadCommandResponse { error_code: u32, } =20 +/// PRC message payload. +/// +/// Sent to FSP to query or modify a device configuration knob. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadPrc { + sub_message_id: u8, + flags: u8, + object_id: u8, + reserved: u8, +} + +impl NvdmPayloadPrc { + /// Constructs a PRC payload from typed protocol fields. + fn new(subcmd: PrcMessageSubcmd, object_id: PrcObjectId, flags: PrcFla= gs) -> Self { + Self { + sub_message_id: subcmd.into(), + flags: flags.into(), + object_id: object_id.into(), + reserved: 0, + } + } +} + +// SAFETY: NvdmPayloadPrc is a packed C struct with only integral fields. +unsafe impl AsBytes for NvdmPayloadPrc {} + +/// PRC response payload containing the knob state value. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct NvdmPayloadPrcResponse { + value_low: u8, + value_high: u8, + reserved1: u8, + reserved2: u8, +} + +impl NvdmPayloadPrcResponse { + /// Returns the PRC knob value as a little-endian 16-bit integer. + fn value(self) -> u16 { + u16::from(self.value_low) | (u16::from(self.value_high) << 8) + } +} + +impl TryFrom for VgpuMode { + type Error =3D kernel::error::Error; + + fn try_from(value: NvdmPayloadPrcResponse) -> Result { + match value.value() { + 0 =3D> Ok(VgpuMode::Disabled), + 1 =3D> Ok(VgpuMode::Enabled), + _ =3D> Err(EINVAL), + } + } +} + /// Common MCTP and NVDM headers shared by all FSP messages. #[repr(C, packed)] #[derive(Clone, Copy)] @@ -84,16 +190,27 @@ fn new(nvdm_type: NvdmType) -> Self { } } =20 -/// Complete FSP response structure with MCTP and NVDM headers. +/// Common FSP response header with MCTP, NVDM and command response payloa= ds. #[repr(C, packed)] #[derive(Clone, Copy)] -struct FspResponse { +struct FspResponseHeader { header: FspMessageHeader, response: NvdmPayloadCommandResponse, } =20 -// SAFETY: FspResponse is a packed C struct with only integral fields. -unsafe impl FromBytes for FspResponse {} +// SAFETY: FspResponseHeader is a packed C struct with only integral field= s. +unsafe impl FromBytes for FspResponseHeader {} + +/// Complete FSP PRC response including the knob state payload. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspPrcResponse { + header: FspResponseHeader, + prc_data: NvdmPayloadPrcResponse, +} + +// SAFETY: FspPrcResponse is a packed C struct with only integral fields. +unsafe impl FromBytes for FspPrcResponse {} =20 /// Trait implemented by types representing a message to send to FSP. /// @@ -182,10 +299,35 @@ fn new<'a>( // bytes are initialized. unsafe impl AsBytes for FspCotMessage {} =20 +/// Complete FSP PRC message. +#[repr(C, packed)] +#[derive(Clone, Copy)] +struct FspPrcMessage { + header: FspMessageHeader, + prc: NvdmPayloadPrc, +} + +impl FspPrcMessage { + /// Constructs a PRC message. + fn new(subcmd: PrcMessageSubcmd, object_id: PrcObjectId, flags: PrcFla= gs) -> Self { + Self { + header: FspMessageHeader::new(NvdmType::Prc), + prc: NvdmPayloadPrc::new(subcmd, object_id, flags), + } + } +} + +// SAFETY: FspPrcMessage is a packed C struct with only integral fields. +unsafe impl AsBytes for FspPrcMessage {} + impl MessageToFsp for FspCotMessage { const NVDM_TYPE: NvdmType =3D NvdmType::Cot; } =20 +impl MessageToFsp for FspPrcMessage { + const NVDM_TYPE: NvdmType =3D NvdmType::Prc; +} + /// Bundled arguments for FMC boot via FSP Chain of Trust. pub(crate) struct FmcBootArgs { chipset: Chipset, @@ -272,10 +414,11 @@ fn send_sync_fsp(&mut self, dev: &device::Device, = bar: Bar0<'_>, msg: &M) -> dev_err!(dev, "FSP response error: {:?}\n", e); })?; =20 - let (response, _) =3D FspResponse::from_bytes_prefix(&response_buf= [..]).ok_or_else(|| { - dev_err!(dev, "FSP response too small: {}\n", response_buf.len= ()); - EIO - })?; + let (response, _) =3D + FspResponseHeader::from_bytes_prefix(&response_buf[..]).ok_or_= else(|| { + dev_err!(dev, "FSP response too small: {}\n", response_buf= .len()); + EIO + })?; =20 let mctp_header =3D response.header.mctp_header; let nvdm_header =3D response.header.nvdm_header; @@ -323,6 +466,42 @@ fn send_sync_fsp(&mut self, dev: &device::Device, b= ar: Bar0<'_>, msg: &M) -> Ok(response_buf) } =20 + /// Reads the active vGPU mode from FSP using the PRC protocol. + /// + /// Queries FSP's Management Partition for the active vGPU mode knob v= alue. + #[expect(dead_code)] + pub(crate) fn read_vgpu_mode( + &mut self, + dev: &device::Device, + bar: Bar0<'_>, + ) -> Result { + let msg =3D KBox::new( + FspPrcMessage::new( + PrcMessageSubcmd::Read, + PrcObjectId::VgpuMode, + PrcFlags::from(PrcFlag::Active), + ), + GFP_KERNEL, + )?; + + let response_buf =3D self.send_sync_fsp(dev, bar, &*msg)?; + let (prc_response, _) =3D + FspPrcResponse::from_bytes_prefix(&response_buf[..]).ok_or_els= e(|| { + dev_err!(dev, "PRC response too small: {}\n", response_buf= .len()); + EIO + })?; + + let prc_data =3D prc_response.prc_data; + + VgpuMode::try_from(prc_data).inspect_err(|_| { + dev_err!( + dev, + "Unexpected vGPU mode value: {:#x}\n", + prc_data.value() + ); + }) + } + /// Boots GSP FMC via FSP Chain of Trust. /// /// Builds the CoT message from the pre-configured [`FmcBootArgs`], se= nds it diff --git a/drivers/gpu/nova-core/mctp.rs b/drivers/gpu/nova-core/mctp.rs index 482786e07bc7..b203c632bf20 100644 --- a/drivers/gpu/nova-core/mctp.rs +++ b/drivers/gpu/nova-core/mctp.rs @@ -13,6 +13,8 @@ #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] #[repr(u8)] pub(crate) enum NvdmType { + /// PRC (Product Reconfiguration Control) message. + Prc =3D 0x13, #[default] /// Chain of Trust boot message. Cot =3D 0x14, @@ -25,6 +27,7 @@ impl TryFrom for NvdmType { =20 fn try_from(value: u8) -> Result { match value { + x if x =3D=3D u8::from(Self::Prc) =3D> Ok(Self::Prc), x if x =3D=3D u8::from(Self::Cot) =3D> Ok(Self::Cot), x if x =3D=3D u8::from(Self::FspResponse) =3D> Ok(Self::FspRes= ponse), _ =3D> Err(value), --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010057.outbound.protection.outlook.com [52.101.201.57]) (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 EFF201F09A8 for ; Mon, 22 Jun 2026 19:45:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157546; cv=fail; b=q4OarFPO9KsV2GnQFi3Lq0gyYFzPWzdFW5Vh0S6byOi6L5hAMQqf1sv8ha/v7B1FjVWX12n0hmoMit3uJAg9+76W2inxmqWn9YrBVmt1fm4xOwVZUn0pMCr9SBgDgnv9XwmqAogdZMZbzUZnTpDMVXLna6wnB0Z198P8IZRSII8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157546; c=relaxed/simple; bh=Y5i7vda1C7fr65F5UrVTS/8FA9BU5sDfSfCobX6mgHQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tbB5Z1tc1+5rCmsmAcaidhX60g3jgD0R7ggtW/i19R8gWEYElugBoBLuBkRdG8A1XeGUbFZiKNNrSXaTOcueuifcd/zptyex2utDST3XwT85VK7lX4ijrJ8S/1N6YaBsw/z6nVOP1FeeObMfEuGpM8MlA4Zcw92mMAtguwqfUfc= 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=Hceqm0Y7; arc=fail smtp.client-ip=52.101.201.57 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="Hceqm0Y7" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sPhvGdqKXcuJx5E03AUM5+DzMvveKyKMmh9wO2LKVNsIrzb4gJ2c/gOz01/5q0N02lk/aVHjOYCTuOYJd5SQv3Iy90yLeq8VtOuLUqXa+Vuayoh7WMmlZ3uHmXS36atGsgce7o7k/zoEcWV4ogkb9jx/Dn88iDTzNP3IA903dwUJYZib9YwgJcpTkZWb3R3+8FWuKrVZyOUldW3rzKU1iDEvU4xlVkSMQhx99bGKmwI52hRcxKzE/9XF6eIgMzAWNzlWOw5EcD37keaNj8yEx0FHTb+H0qkNYtzf7Fx19Rbhfba2uGmoXBT5NWVKb5AO6clp98L4UczFwJVpAEIMCg== 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=tz8yylytS1HwOagIs7fqF7t0jNtCuGXbPaNfn5jVAl0=; b=pKLs7LGRuOzdqsnh5O5qYMQYurDFqhAS1wIP52xvLPZfsdm+ZZ3Q91H+kw3rLWHdefOP1Q74zUjWMlC0IngGZhII5LkaTeETzGcgdHg1tubNLWgurVYc8E7WLAhpOmzVzj4x3iLaFNVTeuDLOQ+wZcWP2p3oUSUWMwLsPjcvXDVcRAwVlYQLlMXilco+txWs9H1hFROtIZtCIcbxCKSrze2oVOdEhjBdzzI387uUtKpG7aJ2CrHqIibEb/ELHniv5nlfOcZS2g22pEsNKFQztkjNkNY9Nub+nWbt9mJOdfcHLLOEVwHwiofXBDaEB7J+lhQpZ7+graktwrLFpcyz2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=tz8yylytS1HwOagIs7fqF7t0jNtCuGXbPaNfn5jVAl0=; b=Hceqm0Y7QpUyqZiRoJNMwMEthH3Z/87LzLpING4i3VW4qv87nYPf1ahp/toMLOcVWNEPGMMGRJ3z3qScS1dlfG6ZypG126VTjceY9JL1/F3wAGiHpK6qfQoqj13DXyR10iTa0xofnd9zqlq8IJ55YCjTiurYaFIu5FTrDkeMWZqgv5PHP5FsJX+2Jj3D9u68Qc9P3Tz+N+vx481+P4rxw7kyWtVDhhKVGCaBuU4fXNncgGomPx+T8KRUHiCgZsuPrtIGRMo7OJ/gUxTR5UgywjZfKZfHdfwYxuug6sbaQr9buYKn2h1Y5/az+24kMWnx+xvl+FAwqtYhaIUChkuoLg== Received: from BL1PR13CA0235.namprd13.prod.outlook.com (2603:10b6:208:2bf::30) by PH7PR12MB6393.namprd12.prod.outlook.com (2603:10b6:510:1ff::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 19:45:33 +0000 Received: from BL02EPF00029928.namprd02.prod.outlook.com (2603:10b6:208:2bf:cafe::2e) by BL1PR13CA0235.outlook.office365.com (2603:10b6:208:2bf::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.159.12 via Frontend Transport; Mon, 22 Jun 2026 19:45:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF00029928.mail.protection.outlook.com (10.167.249.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.10 via Frontend Transport; Mon, 22 Jun 2026 19:45:31 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:07 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:07 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:44:59 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v2 4/7] gpu: nova-core: add vGPU preludes Date: Mon, 22 Jun 2026 22:43:50 +0300 Message-ID: <20260622194353.1308872-5-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF00029928:EE_|PH7PR12MB6393:EE_ X-MS-Office365-Filtering-Correlation-Id: 581f738d-2377-4b82-e5d5-08ded096d1b2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|82310400026|7416014|23010399003|36860700016|18002099003|22082099003|3023799007|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: vTDlC1ckVTgNvZhBpAdng5TvjkkVArD4GIa43Xt+cpIvxUnmb6hQn7V/aM2AMM0IyivOcF6B5sq0q9TtDRrQJbtIPOHv6cqw0wHth7tszf7ewAGQ/P7DFO/DUk5H9D5E20crlxwpG7H7abskTzysz5Ks4oIveqSNu5tQO8PRrBCI/TLumdAAgDatuJj80nMTQ5ftbbEfJuIZonntF6947r554b65lhkCVHYpcEwFUXaTdMjiuXn49kl4RISMFlZts2aspaks/AuwV2ChRzJ4zJy+CMfO9tELU5vqRVBOcG8C3AkbByA7iNx9+05X0Q/BVne8bsgqB0zFt5Vjh+KlmWQV9N5Kk7gIECgU+Xdhw2N55aWwYRW3fVSjm6NTkwCU1/jGexKDTcgWSNZ++uDRSpxFey4pY0otzSR1r/NKCI36G7WuHVeaNdyiqUO9YLaeKrqi72u+TjwM/rE5XliqT6SIs+j75znIzV/JIUfTiUoRgumhlXptcQ2JERgttQMYUoXvHXoomB7a56g4mbLq6Cks/Cfw4OAP93xYJTG8gtf47MO3rRYYTJ7dTkr2QXcBEZkoPMzioePu524yv5Cv3iDH2HwS+ryfhkr9USJ5kb7Dm7vMN4K49gwL8wjJvyAjf2aEK1iotWVXMam25AkSybX0NF5RNTkbTeHtEy+6Dw0LVd6YV5GWPEpcC0rsfIp3dC6MWcjKRgfruoL7oIoaWQ== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(376014)(82310400026)(7416014)(23010399003)(36860700016)(18002099003)(22082099003)(3023799007)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: dXuVMaf6/BpqaXG02Vz+A37VJFPoEBhCR/NMjX3oxcPy6lVqFf1zD/Ab4zBFV9YJHCz9rbYaOEJYmEG5dSb0Yzlfb7Mr95uGFLmbXzFcw8nDz5dvcB+282jRwswI1ImBdKzhJxwKR1wn8rtXwqykZMHJbet/GzsD6YMow6a22WWuaRhG8p0a6NUxWtZOEUYX2eXWzYFIoF22BKlss+hP7j19yrm+qyNwL4FpjKbjYKZbFDwzdG85nFhA+dy29JPv0hULpmrx7GDr88Azm6C/2CGgyXMRStZCp/tBjUBiDJJONvDwouCsp4fbFh1kUUmS2n+7tYBPuZ2YhAP6dEsc2YeJLYDDROnTbnuwFZRYOcrHFPDRh8x2PlUBK5URjVgTZgXZYsWy/ZrvHeGpKev1PrINBEmVopKQ2BjTK21fJOQfmdr9hqCPIOc0Qf8EO6YZ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:31.3110 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 581f738d-2377-4b82-e5d5-08ded096d1b2 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF00029928.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6393 Content-Type: text/plain; charset="utf-8" Detect vGPU state before GSP boot so later boot steps can consume a stable view of whether vGPU is enabled and how many SR-IOV VFs are available. Introduce VgpuManager to keep the detected vGPU state. The manager uses a GPU HAL capability gate, pci_sriov_get_totalvfs(), and the FSP PRC vGPU mode knob to decide whether vGPU is enabled for the current boot. vGPU is considered enabled only when at least two VFs are available. The state is read-only after construction and is referenced from GspBootContext instead of being copied into it. Signed-off-by: Zhi Wang --- drivers/gpu/nova-core/fsp.rs | 1 - drivers/gpu/nova-core/gpu.rs | 12 ++++++ drivers/gpu/nova-core/gpu/hal.rs | 3 ++ drivers/gpu/nova-core/gpu/hal/gh100.rs | 12 +++++- drivers/gpu/nova-core/gpu/hal/tu102.rs | 5 +++ drivers/gpu/nova-core/gsp.rs | 2 + drivers/gpu/nova-core/gsp/boot.rs | 7 +++ drivers/gpu/nova-core/nova_core.rs | 1 + drivers/gpu/nova-core/vgpu.rs | 60 ++++++++++++++++++++++++++ 9 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 drivers/gpu/nova-core/vgpu.rs diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index 2bf01c2d1175..3b5006750693 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -469,7 +469,6 @@ fn send_sync_fsp(&mut self, dev: &device::Device, ba= r: Bar0<'_>, msg: &M) -> /// Reads the active vGPU mode from FSP using the PRC protocol. /// /// Queries FSP's Management Partition for the active vGPU mode knob v= alue. - #[expect(dead_code)] pub(crate) fn read_vgpu_mode( &mut self, dev: &device::Device, diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index e5ebd79c9020..646eb6c63c21 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -30,6 +30,7 @@ GspBootMethod, // }, regs, + vgpu::VgpuManager, }; =20 mod hal; @@ -138,6 +139,11 @@ pub(crate) const fn arch(self) -> Architecture { pub(crate) fn pci_config_mirror_range(self) -> Range { hal::gpu_hal(self).pci_config_mirror_range() } + + /// Returns whether this chipset can support vGPU. + pub(crate) fn supports_vgpu(self) -> bool { + hal::gpu_hal(self).supports_vgpu(self) + } } =20 // TODO @@ -267,6 +273,8 @@ struct GspResources<'gpu> { // TODO: use different resource types for each boot method, and make t= he relevant Gsp methods // generic against them. fsp: Option, + /// vGPU state detected before GSP boot. + vgpu: VgpuManager, /// GSP runtime data. #[pin] gsp: Gsp, @@ -311,6 +319,7 @@ fn drop(self: Pin<&mut Self>) { gsp_falcon: &*this.gsp_falcon, sec2_falcon: &*this.sec2_falcon, fsp: this.fsp.as_mut(), + vgpu: &*this.vgpu, }, bundle, ) @@ -366,6 +375,8 @@ pub(crate) fn new( GspBootMethod::Fsp =3D> Some(Fsp::wait_secure_boot(dev= , bar, spec.chipset)?), }, =20 + vgpu: VgpuManager::new(pdev, spec.chipset, bar, fsp.as_mut= ())?, + gsp <- Gsp::new(pdev), =20 // This member must be initialized last, so the `UnloadBun= dle` can never be dropped @@ -378,6 +389,7 @@ pub(crate) fn new( gsp_falcon, sec2_falcon, fsp: fsp.as_mut(), + vgpu, })?, }), =20 diff --git a/drivers/gpu/nova-core/gpu/hal.rs b/drivers/gpu/nova-core/gpu/h= al.rs index 3f25882d0e56..2116c71242ec 100644 --- a/drivers/gpu/nova-core/gpu/hal.rs +++ b/drivers/gpu/nova-core/gpu/hal.rs @@ -27,6 +27,9 @@ pub(crate) trait GpuHal { =20 /// Returns the address range of the PCI config mirror space. fn pci_config_mirror_range(&self) -> Range; + + /// Returns whether this chipset can support vGPU. + fn supports_vgpu(&self, chipset: Chipset) -> bool; } =20 pub(super) fn gpu_hal(chipset: Chipset) -> &'static dyn GpuHal { diff --git a/drivers/gpu/nova-core/gpu/hal/gh100.rs b/drivers/gpu/nova-core= /gpu/hal/gh100.rs index e3f8ba0fab33..8e18206961ae 100644 --- a/drivers/gpu/nova-core/gpu/hal/gh100.rs +++ b/drivers/gpu/nova-core/gpu/hal/gh100.rs @@ -7,7 +7,13 @@ prelude::*, // }; =20 -use crate::driver::Bar0; +use crate::{ + driver::Bar0, + gpu::{ + Architecture, + Chipset, // + }, +}; =20 use super::GpuHal; =20 @@ -28,6 +34,10 @@ fn pci_config_mirror_range(&self) -> Range { =20 PCI_CONFIG_MIRROR_START..PCI_CONFIG_MIRROR_START + PCI_CONFIG_MIRR= OR_SIZE } + + fn supports_vgpu(&self, chipset: Chipset) -> bool { + matches!(chipset.arch(), Architecture::BlackwellGB20x) + } } =20 const GH100: Gh100 =3D Gh100; diff --git a/drivers/gpu/nova-core/gpu/hal/tu102.rs b/drivers/gpu/nova-core= /gpu/hal/tu102.rs index b0732e53edea..1e2c7bbdb4ad 100644 --- a/drivers/gpu/nova-core/gpu/hal/tu102.rs +++ b/drivers/gpu/nova-core/gpu/hal/tu102.rs @@ -32,6 +32,7 @@ =20 use crate::{ driver::Bar0, + gpu::Chipset, regs, // }; =20 @@ -94,6 +95,10 @@ fn pci_config_mirror_range(&self) -> Range { =20 PCI_CONFIG_MIRROR_START..PCI_CONFIG_MIRROR_START + PCI_CONFIG_MIRR= OR_SIZE } + + fn supports_vgpu(&self, _chipset: Chipset) -> bool { + false + } } =20 const TU102: Tu102 =3D Tu102; diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index ff438506070a..6821008d48d9 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -51,6 +51,7 @@ }, }, num, + vgpu::VgpuManager, }; =20 pub(crate) const GSP_PAGE_SHIFT: usize =3D 12; @@ -64,6 +65,7 @@ pub(crate) struct GspBootContext<'a> { pub(crate) gsp_falcon: &'a Falcon, pub(crate) sec2_falcon: &'a Falcon, pub(crate) fsp: Option<&'a mut Fsp>, + pub(crate) vgpu: &'a VgpuManager, } =20 impl<'a> GspBootContext<'a> { diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 1e0d4793e96d..0a33cf4dd975 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -47,6 +47,13 @@ pub(crate) fn boot( let dev =3D pdev.as_ref(); let hal =3D super::hal::gsp_hal(chipset); =20 + dev_dbg!( + dev, + "vGPU enabled: {}, total VFs: {}\n", + ctx.vgpu.enabled(), + ctx.vgpu.total_vfs() + ); + 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)?; diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nov= a_core.rs index 735b8e17c6b6..2df2f773ec8e 100644 --- a/drivers/gpu/nova-core/nova_core.rs +++ b/drivers/gpu/nova-core/nova_core.rs @@ -26,6 +26,7 @@ mod regs; mod sbuffer; mod vbios; +mod vgpu; =20 pub(crate) const MODULE_NAME: &core::ffi::CStr =3D ::NAME; =20 diff --git a/drivers/gpu/nova-core/vgpu.rs b/drivers/gpu/nova-core/vgpu.rs new file mode 100644 index 000000000000..08fa37d80b28 --- /dev/null +++ b/drivers/gpu/nova-core/vgpu.rs @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-2.0 + +use kernel::{ + device, + pci, + prelude::*, // +}; + +use crate::{ + driver::Bar0, + fsp::{ + Fsp, + VgpuMode, // + }, + gpu::Chipset, +}; + +/// vGPU state detected during GPU construction. +pub(crate) struct VgpuManager { + enabled: bool, + total_vfs: u16, +} + +impl VgpuManager { + /// Creates a vGPU manager by querying SR-IOV and the FSP PRC vGPU kno= b. + pub(crate) fn new( + pdev: &pci::Device, + chipset: Chipset, + bar: Bar0<'_>, + fsp: Option<&mut Fsp>, + ) -> Result { + let total_vfs =3D if chipset.supports_vgpu() { + pdev.sriov_get_totalvfs() + } else { + 0 + }; + + let enabled =3D if total_vfs < 2 { + false + } else if let Some(fsp) =3D fsp { + let mode =3D fsp.read_vgpu_mode(pdev.as_ref(), bar)?; + + mode =3D=3D VgpuMode::Enabled + } else { + false + }; + + Ok(Self { enabled, total_vfs }) + } + + /// Returns whether vGPU mode is enabled for this boot. + pub(crate) fn enabled(&self) -> bool { + self.enabled + } + + /// Returns the total number of SR-IOV VFs supported by this device. + pub(crate) fn total_vfs(&self) -> u16 { + self.total_vfs + } +} --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010053.outbound.protection.outlook.com [52.101.46.53]) (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 867FA23C368 for ; Mon, 22 Jun 2026 19:45:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157550; cv=fail; b=e54vg16+NZr11feuuc9315O7D31AWmzZ/QsAYwetqgNSnqTmI+QoBQ4ULKEt08BTqzXm+yBjbJtYgEp/M/IF8PY7yK8uZokJN72pNubpbRhZ1Rtp4DMAld4tAiD6xcP9r/dBq94oTFSwlUl09nkIdcIvXyEQsOCvD86nLOl4jjw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157550; c=relaxed/simple; bh=1uwk8MeDSTk0CgL1v1mlG4ctKh4+YlhwJW6jww6SyAU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=f8rNDQ3HNb/3SBQmAfLcabo2zxt4tzWiid2g80WYTTThdGkLD1ngXoq2Fzk+4JzoWmMgeZtFQNH+/eHY2As/XH1jgi6K+3tOM78yhG/qIiypT7WnIJungc2LRgOzXPfLGzp5t3jFRYeSU+VMefbbU0sPv9tcgkpu/NJGR8gBqK4= 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=jYs0htJ9; arc=fail smtp.client-ip=52.101.46.53 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="jYs0htJ9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f3QmgFdSPtOARTuGeqqwg4wnLYlgANe8PCJi8uF+Q6/vOXLw//G1wHq3TVpKTOe6uAIpGVuZBcnRLRfoBL9LiC1b2F62b/zGjywUy/oM5JxGA9h6rnpDsojz5JXFe/jCgNZCUvGDm1LQenFdLkvT8ruoTX1E+WSvrCxkMImsf9R3H9mlyS0plZBiCOZx8puxKxH0BXO9HEJFpTBDyiXjgD+icj2FVu9b11BggLvtdmwUKkzIGzq+iDBzORZRctZ6DUaEjhe+SFYGldtJ4YR2mDvM0Cld7wzMqXuLdf/t0zv650wLRITwtg/Pa/63jY0Qu+7LttTNJN0hjqvGjFf+EQ== 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=JZb+AqxL6Qp4mJ3DtCoIw2gBQYV21WOBHEKIb8BMMVg=; b=hMWR2HXZcgHbtlmKpRKyvojiMauHCgeT4lqJ4mTvVTIwyv75iSwrWh83tJFiQUI34i891hnIs+ENT1sI9ffoBTw7Rm2wQuZnGAnEq4jJbswbxL1ViWAcZMy3TFMFMWVoLZt1+i297bFCOOM0ID3ZNulINt57TYJFWCw/UmMHgIegGCag/6FYQo8uhz12ZBY+SofYdvfWbH33JiLhhxubTi3kn/Q+7zHjNYTmo7Cxq8PkQBedb9CQvVR1URMP7MeIsNYIzNz/CiZTmqb+JiJvm+Oc6BK7gvIAjF4dVsgqxWpLDHhPNhTJ1BxS4VVkbATllG9H/lUX8Ta6xI2bBUEufA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=JZb+AqxL6Qp4mJ3DtCoIw2gBQYV21WOBHEKIb8BMMVg=; b=jYs0htJ9s6SeOxEBgy5kvG+Ez7BZ6VVu5qoafSc9N9iifKexHu0dirgQMOh31NYPLx6/x9cd7X61PPXTmirgohAk+KHBl65qPV+D7oI+d6OVht/H0FljzZCQuiI2KFpYB3KHqdGtB4IcJqLRR0UfiOisdA8iPEFdUDeTcWmTB9GwEZkLv8xuTgNfx5Lybu1OZkoAbvQ61cxCOS1iVoW4J19s9+ItZScAaftlC5VI0C+Jqoc/UyR0eAMYlsuD7sCUtX6gIcmysaaiGiBNTLRy+73CL+/CeTesk710CxLgHGr4gDIrlhvypTdcDAE+rzsi8dnwncNOEHL3fWleRPMQhA== Received: from MN2PR14CA0012.namprd14.prod.outlook.com (2603:10b6:208:23e::17) by DM4PR12MB5961.namprd12.prod.outlook.com (2603:10b6:8:68::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 19:45:40 +0000 Received: from BL02EPF0002992C.namprd02.prod.outlook.com (2603:10b6:208:23e:cafe::99) by MN2PR14CA0012.outlook.office365.com (2603:10b6:208:23e::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.139.14 via Frontend Transport; Mon, 22 Jun 2026 19:45:40 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF0002992C.mail.protection.outlook.com (10.167.249.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.159.10 via Frontend Transport; Mon, 22 Jun 2026 19:45:39 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:16 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:15 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:45:07 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v2 5/7] gpu: nova-core: build SetRegistry entries dynamically Date: Mon, 22 Jun 2026 22:43:51 +0300 Message-ID: <20260622194353.1308872-6-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF0002992C:EE_|DM4PR12MB5961:EE_ X-MS-Office365-Filtering-Correlation-Id: 4244e416-82a6-47e6-e1b5-08ded096d6cc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|376014|7416014|1800799024|23010399003|6133799003|22082099003|18002099003|11063799006|3023799007|56012099006; X-Microsoft-Antispam-Message-Info: l0SC74pYf3ijA0pQf4CHr2c2oFviufhIChSCeeqJJxMNJRSeMg/KXgvlOFR73pYqwP2y0ADTrFqSUZeNoZvnA+qu65EYLlYLP4fMHuEv0yeb9XVrQNiJxgqMiDj1OqpxnAZpYgoUaqO58OH/6RpEHy3N/Tmub7EXo5V1+2WVrXXDs8oN78vjWdvYJ1iiSlB1O8bpnw/F+oZSSWfPaxsY0o3SrawbZdm+zWKkpJTqOig/6CY96bQYY1P6k0dDBoFR0nL28YvQ+rAPlD4uV1cpeGixuY02TZls9z2X0WoF35T0vDI9z2wRoEd2O10TM0HozR6dvE65ygm7rbRxzs2g1vz+NQUKd0nG3XF/B7O8sR5uDVxrUdZUrW9kh5+7E3j7A4f12rKuPotvHx/Ji+63q1K+VbzNCsyhEDTuJ2pxkYSQAyW5323JWzqy7HJailUhOHIsSacQrbVUnrIdvCFLUNzDg22X5vZnzrtxyiqShQ5vDHxu32HZS4bPWN5xpzb6FR3JbMovZq5la0O/4/QMP1vYMlkpNdXlJUzXWKJlTHjMqI6+vKZTV6nUfFFJoBN8fvkMlGeds2zIJy3CKc71e5gGcL4ZrkKgBCSXrvygfSl2If3j82BfwKdxEdI8YwbwcN06cD2QoKMFmBETeEdYEjVqVzKBU9zt6Fh+92TbsxMQQgoHKAsh38qrRMMfPKOwHvEqGlOb4wVM/rGGoYfRvQ== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(376014)(7416014)(1800799024)(23010399003)(6133799003)(22082099003)(18002099003)(11063799006)(3023799007)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: frrAf8vlIo0kzmWR31pFTwEbffrVvRaFaeFJ8yIjRjMcj2RYi+h/64r/sRJWNq8+Wt0sfqkO4xB146QTXWd1j0WrB/ugnLEiz0Bx/VjAAVBb8SzGz7cI4jkzm73kRErjpHybLGoh862Q1ZjTfG+KpWnJU4GzcqrTqNh4y8fiFfBW6IVPCKX1hJjfhPI+jjX7455msCc239fc5MlPT7XggRR21tsnYYzTPY5IAUpNhe+u1JTYIISGgHeCbx9U/PKSLkTsec9PCu7Bfwy+6kQt2+N6khh9i0SG5VR2GokohZhiVkAIZslrJkkNnvfL8AR4FxtkF27m9Cqz2x86jjjI21pPkXfA7GjOiTb4CBAyK9XidYy2NoXgVGyUJ3wUaYGbjxwktXdXh2LfoXK6sUPo43ssJAR54feKCkRGYDzlkUQM5GtDX0toYuPiXqktfUE0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:39.8812 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4244e416-82a6-47e6-e1b5-08ded096d6cc X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF0002992C.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5961 Content-Type: text/plain; charset="utf-8" Convert SetRegistry to store registry entries in a KVec instead of a fixed-size array. This keeps the existing registry contents unchanged while making the command ready for entries that are appended based on runtime state. No functional change is intended. Signed-off-by: Zhi Wang --- drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/commands.rs | 73 +++++++++++++++------------ 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 0a33cf4dd975..55ea8e38aa79 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -94,7 +94,7 @@ pub(crate) fn boot( self.cmdq .send_command_no_wait(bar, commands::SetSystemInfo::new(pd= ev, chipset))?; self.cmdq - .send_command_no_wait(bar, commands::SetRegistry::new())?; + .send_command_no_wait(bar, commands::SetRegistry::new()?)?; =20 hal.post_boot(&self, &mut ctx, &gsp_fw)?; =20 diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index f84de9f4f045..3dccb012a37e 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -66,37 +66,44 @@ struct RegistryEntry { =20 /// The `SetRegistry` command. pub(crate) struct SetRegistry { - entries: [RegistryEntry; Self::NUM_ENTRIES], + entries: KVec, } =20 impl SetRegistry { - // For now we hard-code the registry entries. Future work will allow o= thers to - // be added as module parameters. - const NUM_ENTRIES: usize =3D 3; - /// Creates a new `SetRegistry` command, using a set of hardcoded entr= ies. - pub(crate) fn new() -> Self { - Self { - entries: [ - // RMSecBusResetEnable - enables PCI secondary bus reset - RegistryEntry { - key: "RMSecBusResetEnable", - value: 1, - }, - // RMForcePcieConfigSave - forces GSP-RM to preserve PCI c= onfiguration registers on - // any PCI reset. - RegistryEntry { - key: "RMForcePcieConfigSave", - value: 1, - }, - // RMDevidCheckIgnore - allows GSP-RM to boot even if the = PCI dev ID is not found - // in the internal product name database. - RegistryEntry { - key: "RMDevidCheckIgnore", - value: 1, - }, - ], - } + pub(crate) fn new() -> Result { + let mut entries =3D KVec::new(); + + // RMSecBusResetEnable - enables PCI secondary bus reset. + entries.push( + RegistryEntry { + key: "RMSecBusResetEnable", + value: 1, + }, + GFP_KERNEL, + )?; + + // RMForcePcieConfigSave - forces GSP-RM to preserve PCI configura= tion registers on any PCI + // reset. + entries.push( + RegistryEntry { + key: "RMForcePcieConfigSave", + value: 1, + }, + GFP_KERNEL, + )?; + + // RMDevidCheckIgnore - allows GSP-RM to boot even if the PCI dev = ID is not found in the + // internal product name database. + entries.push( + RegistryEntry { + key: "RMDevidCheckIgnore", + value: 1, + }, + GFP_KERNEL, + )?; + + Ok(Self { entries }) } } =20 @@ -107,15 +114,15 @@ impl CommandToGsp for SetRegistry { type InitError =3D Infallible; =20 fn init(&self) -> impl Init { - Self::Command::init(Self::NUM_ENTRIES as u32, self.variable_payloa= d_len() as u32) + Self::Command::init(self.entries.len() as u32, self.variable_paylo= ad_len() as u32) } =20 fn variable_payload_len(&self) -> usize { let mut key_size =3D 0; - for i in 0..Self::NUM_ENTRIES { - key_size +=3D self.entries[i].key.len() + 1; // +1 for NULL te= rminator + for entry in self.entries.iter() { + key_size +=3D entry.key.len() + 1; // +1 for NULL terminator } - Self::NUM_ENTRIES * size_of::()= + key_size + self.entries.len() * size_of::(= ) + key_size } =20 fn init_variable_payload( @@ -123,12 +130,12 @@ fn init_variable_payload( dst: &mut SBufferIter>, ) -> Result { let string_data_start_offset =3D size_of::() - + Self::NUM_ENTRIES * size_of::(); + + self.entries.len() * size_of::(); =20 // Array for string data. let mut string_data =3D KVec::new(); =20 - for entry in self.entries.iter().take(Self::NUM_ENTRIES) { + for entry in self.entries.iter() { dst.write_all( fw::commands::PackedRegistryEntry::new( (string_data_start_offset + string_data.len()) as u32, --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010000.outbound.protection.outlook.com [40.93.198.0]) (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 BA4ED235358 for ; Mon, 22 Jun 2026 19:45:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157557; cv=fail; b=rB5EGj0dLUTc/OVaW84jN774d+GyLFFJHgt3LfnpG0g9P+EeTiXmVKgwaM5kckuKPygoZoLvaz4M367p6bwQHbX4p0f6du3rZEn5EJcq4KPMQ4Uf6uKdFa/8OuDiLyMIlfSTJA3LXWbvD1pvyvBatiTfycd5NKwIeD1kgDEMY2s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157557; c=relaxed/simple; bh=B7D3dLaRvXwz7dc8N65+C0iXaRCsiBAVDPp3oygCSUc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oNfVNNHcAsxQYcIu/QCgGxTpLM/ut8lfELWBXgCmvO1NrYCaPIBWZ9wUjBIUe5E6aVSL508y/NYiDIhJkiNJNm/XyXu12WFJDwruRfq8EOQMXMXQcU7Gl7aM1hmR7XOIoNVMmH0a/KBa850O+lwwVo5TQQe0pLavLoPpUA/S+7w= 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=X6hlDpYj; arc=fail smtp.client-ip=40.93.198.0 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="X6hlDpYj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dRyy3vJ7Xm60kmSL8LyxrvjDSUn+1FiDm2z4moFnCjaG98JLmwHYU+Xi4zpoECj4qYPr7rycK6W0MdR+EmEB2/LCcNwJO1dfJ6tEFjckUAxpQgeDT9PEm+V281S+Sefny53pxFd7iKGjJhus7KtOx9u6In8+FF5TpUYV8yOOl6tzuwIq7ZfeEYUWGgoIJAVFBWvodoxxIkcJWwcatx/v/Qec7PPJ5ypE8+FwxFpnuAzbLI2Gu/4SVh6IteBScy4y/qDLx6EZGt/i3jXzV+OVjIRSuvP6P+9XZjcvr2tkCkjpJ4l6f8K8WZomo08HVBDS3gMbXytl75YbGIxQX5lJcA== 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=5lrawUy2sbVme7NLwz84KC/AHwxxJlAgrnvjX/Y4BBI=; b=vBe1t8KEc0mCVzIx6einY/6jNk+GS+pL5mXcIUYje3DqJ1qNZnX9tJ9fdmpf27BAR6Pb2wCzbAKWwoHhAOxEQeAzu+OstQes6FcOAIW7QbFxipOvWJBpVy3Q8q+Sm3dGMKCYI5Hy4t+1rVK7bdkYB0o0BZG7HASI6rcPm8g78PFubb9ae46jzTm4nLBoKTGibdpclhRXq+AZFTn4llmcS24AFMbNNJHDi27zsSlmow3lrLOIzE1sL2k7Mfu9XGg5/sXigiSjvvAQ/iiwqiZ4/BkBpGcuML8Sb9eu6KUccB+ApBuWhilzKQxml8LPFccEVBUSiLYqZ1W3PjmyZjlP1A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=5lrawUy2sbVme7NLwz84KC/AHwxxJlAgrnvjX/Y4BBI=; b=X6hlDpYjf/j+GstuusrxLpbMNNj64m6+EX4gAVQ7UmvCTqUa7xf1dkTjjH3XtZIMN97ZMD7q3BqqzRbhjLc0Aldqjm96xISKxyJZL8VXqmodtHIhE/qhe+6vhfOBH4WfC0brVUglz6anRVsQciy9zv89nZG5AlVc0ztouKodGZiiwY7ETz7Bi0LMcKyZyhknm1eAwabGKsTh2Vq06MWuUhnbywysbR1Smi41S7eR+VQ+iKhC0Fi0ogN8t79/7LgT8cTAQvOFeRZ6s0WP7SkQkhmQcLuAv+rz2IERc1Z/VlpqAZ16Aefc9T4mNiA/cnxRdMlH0ISOf92z0x0P0GdjUg== Received: from BN9PR03CA0384.namprd03.prod.outlook.com (2603:10b6:408:f7::29) by DS7PR12MB6333.namprd12.prod.outlook.com (2603:10b6:8:96::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.19; Mon, 22 Jun 2026 19:45:50 +0000 Received: from BL6PEPF0001AB73.namprd02.prod.outlook.com (2603:10b6:408:f7:cafe::42) by BN9PR03CA0384.outlook.office365.com (2603:10b6:408:f7::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.139.13 via Frontend Transport; Mon, 22 Jun 2026 19:45:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL6PEPF0001AB73.mail.protection.outlook.com (10.167.242.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.8 via Frontend Transport; Mon, 22 Jun 2026 19:45:50 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:25 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:24 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:45:16 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang Subject: [PATCH v2 6/7] gpu: nova-core: set RMSetSriovMode when vGPU is enabled Date: Mon, 22 Jun 2026 22:43:52 +0300 Message-ID: <20260622194353.1308872-7-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB73:EE_|DS7PR12MB6333:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f9d5b13-7741-48e5-d891-08ded096dd07 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|36860700016|82310400026|23010399003|376014|1800799024|18002099003|22082099003|11063799006|3023799007|56012099006; X-Microsoft-Antispam-Message-Info: 42GL545w4/VCD5vzFLZyAQJ0yK4FxHSiSqQYXwjFNof78kWokWZnLQxiPdBkfaZcPuHakpR+kVWGjmF971T+M3Q+QL2u1sOr/bBSRjbEO5U2dQgklyYNfa98WyE+yfbFta2KffiedxhDkaxvm3VILJlc4VjLhLrVGj24INoUF2oDpHAsSbgxQWVWzmUJsDN0IlUql94ZzFLbv9mguLZhDTzH0DGuktLae8tNp7OrPK9mYh89eZPouza8bANWbtzhQHMEjScvRR6l/R2Vti6fVyCdc0VG4lt+cC32rHRr1hAaxfTYAAnelrmfo5VhYK92KBVvWf8s1HsWpO1av8Id2mCKF0s9QFRFjo73w/V/4g4/v6zdhMeFdRKFAg6yyLI9QTlXzR84aXAf28T06lsfP+lqmz4RCoTtE1wbEzDcqXb0wSabiuN8FdPASY0kgeB6AhL7Ltwi2KMYa7N51yscsD2cAilrY/wPTvuOrhIp/ZMHTatHd0fDnEEDKNIABiIL9V4UPmKFq/+eRCOXv/6RBPCmrTXhGwWSDlvy5nF4JWNbWFx8OCeD7fbJJC8h8kpFbsvTxzSuIYN5BHC4Z6baHYvv6xUnObnoCYDYBpifnwz7m8LbiBQPIMMzXxaziTaBkiSLfb586IJqDvXrgjbNM+KkJgQySmfA2MWdvCpLqhQjh+fWHtpND3EDamsrtW9cIP8la2D5oAuTtTLB83z4aQ== X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(7416014)(36860700016)(82310400026)(23010399003)(376014)(1800799024)(18002099003)(22082099003)(11063799006)(3023799007)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: T5c3T/4mxM2vBTQU7TCmPX2OpFrAui/UObfosQ+NB25oX+P7t1Z0jKg+tMjUmvnmnMQ3yqduoe1WUdIfYM9nbzVtZTNUv3TPyLAuvQrmiYYvYjEQZPe+6ZsfZaeJyR39rt5hBWeayK9F9U0UoAEWZbfEJQaAJhlpptTgdeqcHng9sLJ4670CZracqOeCBZz/VA0tTXy29k96+6yhupsaTda8I6C7d52LvnQelenCVuTMu1PP2wg7bp7Z+fk4PTPpIxFp33fnKxHAlD5bpYBUT7a6AcZrZFMh39aveECDdt00uXR0oXUWUHU9HdthmDCZF6fKZ3RRKYCCNiL2TVxz2XyWyIOzoe3q5iNv+OOrm4omRYEeH3Lg1wrBgdONPAy/Z1c1iRts7vX/J5uObNk6s33IjB8122lry6ji+I74NM8oFRQ7Gp4PTZ1BiGrw9qDB X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:45:50.3312 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4f9d5b13-7741-48e5-d891-08ded096dd07 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB73.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6333 Content-Type: text/plain; charset="utf-8" The registry object "RMSetSriovMode" is required to be set when vGPU is enabled. Set "RMSetSriovMode" to 1 when nova-core is loading the GSP firmware and initializing the GSP registry objects, if vGPU is enabled. Signed-off-by: Zhi Wang --- drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/commands.rs | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 55ea8e38aa79..c607081e8242 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -94,7 +94,7 @@ pub(crate) fn boot( self.cmdq .send_command_no_wait(bar, commands::SetSystemInfo::new(pd= ev, chipset))?; self.cmdq - .send_command_no_wait(bar, commands::SetRegistry::new()?)?; + .send_command_no_wait(bar, commands::SetRegistry::new(ctx.= vgpu)?)?; =20 hal.post_boot(&self, &mut ctx, &gsp_fw)?; =20 diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 3dccb012a37e..bf2b569f5578 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -33,6 +33,7 @@ }, }, sbuffer::SBufferIter, + vgpu::VgpuManager, }; =20 /// The `GspSetSystemInfo` command. @@ -70,8 +71,8 @@ pub(crate) struct SetRegistry { } =20 impl SetRegistry { - /// Creates a new `SetRegistry` command, using a set of hardcoded entr= ies. - pub(crate) fn new() -> Result { + /// Creates a new `SetRegistry` command. + pub(crate) fn new(vgpu: &VgpuManager) -> Result { let mut entries =3D KVec::new(); =20 // RMSecBusResetEnable - enables PCI secondary bus reset. @@ -103,6 +104,17 @@ pub(crate) fn new() -> Result { GFP_KERNEL, )?; =20 + if vgpu.enabled() { + // RMSetSriovMode - required when vGPU is enabled. + entries.push( + RegistryEntry { + key: "RMSetSriovMode", + value: 1, + }, + GFP_KERNEL, + )?; + } + Ok(Self { entries }) } } --=20 2.51.0 From nobody Wed Jun 24 20:45:53 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010063.outbound.protection.outlook.com [40.93.198.63]) (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 7CEAD1F09A8 for ; Mon, 22 Jun 2026 19:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157566; cv=fail; b=hUgyn/21lu36MqlW7LATlcnVzkX35/BZh5glvZe4RJ2q8/IdE0U3R5EajbOQJtZPOgZjqJKfTBJWmfqOsGAkFKv5isaXmf9x93cvyHLBmWZ6H5YAey/U2YfNrqUSzNvzx51Xm23pJ0gAPgpPYHXNyztpk5WBLw9+ty105ANZLXw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782157566; c=relaxed/simple; bh=d69+mvNzFZmr+DJYf1krxROWr5DFpbXx+/bl68AQcpQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W+V+dA1Y4cv2c4W6H1chr6hJjRD5bssj1Svh1lXOI2Py8OZLZh4eBVt1uD30D3zoUJi6+m/e5ZZebhwDMVFEri14qKKTw612DMBZu0lk29HdYNqdiZ8WtUYehZTDYgZD2Hx5EBM/ju9epPBamtsuLLRfNr8qR0D60p9GNc+3q/4= 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=htB2JJJI; arc=fail smtp.client-ip=40.93.198.63 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="htB2JJJI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CiPiWJ5SVk7i2YZGNTiVB7XuoA8mCYFZ+vi4db5ear3+f9W2K/SqjBwouB8ci7IBUiwYUMBJaYbLRgI+4E5gOZ5Q07oksXqW9uKSXHwR7hPw807543I31N29fhJv+Q4KwBaP5xpaHpKGvH7tcb9KXf59esSsqXRMaDn4ats3CJvJ3vFs1dl6fWPZCY7vp/zOhX6YSBSc6/wd0ruVXtABfz5cYtwYtcUAsBFXVGWV7MFler9wQ+esxFvmjxY815abaVOUnJsOji5lZHkTlstOXa3mgBRvN5QlXQqzuGP1KtXpjkOVgKORaRLv4CMRlwylOazqaxlkS75OhGXXEppFYg== 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=kGX3t9dO+kp0ccRzaZNDjZxr1EsE5gihAu/h5syVl6A=; b=QIGsYHmf8cu3RX3kw+BFnAOVk6+fjbhF2MJMp7CO9/zqFVlFQHo316TKClCrVa2T8DCyTx3laBYORpdKYgKyBQv/TaQQhdKNLkxByT7ACNCa8x9wZS5ZLzBQ5K8X7OT5FlyQBtqmjxOfr5QDJi+t+iWDhjBUdAKjRy3/Yt8DbMe09GYjH/MzjZfyxlrLnuFmjVmQdz431/OU1Xgf4NfMFTexg8hbM1hEQhINQM8M9vKZi1OJA85IPNfrbdE/3+LbeDFmc4FjgGwaOJF9DumF/yH13i5QB9CbvnZ7vpDrtPIY2MHHW0WL0JraGvWPgpnP91Kp1Gy/wjpScywGNpNZnw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=kGX3t9dO+kp0ccRzaZNDjZxr1EsE5gihAu/h5syVl6A=; b=htB2JJJI4NCiLdIBLsSuTIdwaxQvEqswqSJa8Vxe9w/59hTjghD9QuAFAGIAB5Cgp5PDoJ0OGXeJv0YX9o9k6XHXjFAAgEIqQhd1ieVleICX20PEpoHlQFmOvTPMrJId7NdJd4rgvlVu8l9BzbpnNnaet+dIgU8a+azmONOKXsi4nMAYZSs4AYa614qxqgZ8tISBTjkcrC93kr1GW1iRqQtf9Gk32ThNb+M1SL/RBu4YJMTSeYL5ffdaaXo04JN/Vst1sZr88BXsXqEWHe4vK9xcoO9hzE9WxsK/Klu3cF1SfWnocdtmKfF66cJIgXPcnLUvgzJCcxL3khbVD7QkCg== Received: from BN9PR03CA0372.namprd03.prod.outlook.com (2603:10b6:408:f7::17) by MW3PR12MB4425.namprd12.prod.outlook.com (2603:10b6:303:5e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.20; Mon, 22 Jun 2026 19:46:01 +0000 Received: from BL6PEPF0001AB73.namprd02.prod.outlook.com (2603:10b6:408:f7:cafe::59) by BN9PR03CA0372.outlook.office365.com (2603:10b6:408:f7::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.139.14 via Frontend Transport; Mon, 22 Jun 2026 19:46:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BL6PEPF0001AB73.mail.protection.outlook.com (10.167.242.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.139.8 via Frontend Transport; Mon, 22 Jun 2026 19:46:00 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:33 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Mon, 22 Jun 2026 12:45:32 -0700 Received: from inno-dell.home (10.127.8.9) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Mon, 22 Jun 2026 12:45:25 -0700 From: Zhi Wang To: , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , Zhi Wang , Zhi Wang Subject: [PATCH v2 7/7] gpu: nova-core: reserve larger WPR2 heap for vGPU Date: Mon, 22 Jun 2026 22:43:53 +0300 Message-ID: <20260622194353.1308872-8-zhiw@nvidia.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260622194353.1308872-1-zhiw@nvidia.com> References: <20260622194353.1308872-1-zhiw@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB73:EE_|MW3PR12MB4425:EE_ X-MS-Office365-Filtering-Correlation-Id: dab560f5-ee40-439f-1250-08ded096e2f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|376014|7416014|23010399003|1800799024|82310400026|22082099003|18002099003|11063799006|3023799007|56012099006; X-Microsoft-Antispam-Message-Info: /w4tnpoCPeDShvnzr1TcesweEQW9rHtI/cwyEk2j9oVj2CpBYhh9O/fox2hdMfw0rSOxDddc272/fkguZPg+EOund1arzmplod3mCVcgoRQDGUCJyeF6y4CjaJFKapDBLm2w1gzywjJNK985PI8XQnpSzhFdqSylsuGtzNAQpxNtOucZi3q5X8gYu6RIXDj9ylaICbzytcVKJyQvtcwFNPQ148rZoh1zcMTr4aSxaqlAQay8mWiCXQNzAd4JrsfYfJlVpcEuiezl703VmE63lUIAyq7QTUvgoUi/10EXi2/eTIzQC2DaMg4wTqVgHpcy/bo5/kDjA0/eyONGVTlKHIT7/Tbb14BqEWFKFlICJvd2bX03cW5LWgcXXEIpHYY0PEoYPR2PCKGYPjEITn2Kgx1R1L4AuHzHQLhxkNDitmCaPzsYVWuLCrhl0EoOxeLUtYE7ty/QYj3r+u6IQCDVEwXrI+gmmHQPqZ6Z3EklT7V9q+3FBwJ/pEtvRdeZUJKvu+epY9Bta5hixiswiEnMZFYPmLXCh2z+eQgHDz5KviJWJmiP/CzTynCQOyre9W+udn6xkuYeWWbSJmQUXE3wt4FnphnN478EA1471fUbW3uFBlrHFHtzAokwhyHmjyeJluhw99OfIcgWu5BPoimn/U1DYdVzCQJ0yPfCEpD6Ar9aDBj4f4QT8Ul8gIbA+0mZzI0daB1O/NwvN34xtauNrw== X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(376014)(7416014)(23010399003)(1800799024)(82310400026)(22082099003)(18002099003)(11063799006)(3023799007)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vITJAFI6yJ5PjwfxCpD0czSa1lGV6/efwrvWg4LFmlwj/SYVOoj3GsTu9itgwmb8P44gBFv9jOh4RzuEkPP1rbbjNEPWCg8rR8gsK4tT7pTz/C1/r+T2T1ifosgi2QktvDiTlgErAf7yIhBVBYS77UtL4ENkgmCs9EN6SQqyFR9AhHBILwmA5sUo9rYINMwrCp358VhSmLyKgA3t1l01SawUvZsSFZ9KlGPezMTHZVx19LgIIs3D3t2TWvBn/bPcd1g0f1FjkYXp58k6gLJa87L35QM1F58p3vUmwGXnv/O89VDV7AemcUmtVXaGiaPjVLPS/cTN6B0wP+zg147+CtMWQtRFS+eIfVFOzd5KmFoJKoafs8C4ibd1opi9ACAfTPG/U6AuViH42LJ9wZJWldLr/iuq3mPKjae7q1tTzzdC4xkK5g8JZo+QQFIlwPi+ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jun 2026 19:46:00.2493 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dab560f5-ee40-439f-1250-08ded096e2f2 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB73.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR12MB4425 Content-Type: text/plain; charset="utf-8" From: Zhi Wang Reserve a larger GSP WPR2 heap when vGPU is enabled, using the VF count reported by VgpuManager to select the heap size and to populate the VF partition count in the GSP WPR metadata. Use the baremetal heap sizing path when vGPU is disabled. For vGPU, reserve 581 MiB for up to 32 VFs and 1370 MiB for larger VF counts. Signed-off-by: Zhi Wang --- drivers/gpu/nova-core/fb.rs | 25 ++++++++++++++++++++----- drivers/gpu/nova-core/gsp.rs | 1 + drivers/gpu/nova-core/gsp/boot.rs | 2 +- drivers/gpu/nova-core/gsp/fw.rs | 10 ++++++++++ 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 725e428154cf..b5b1f6c13edc 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -24,7 +24,8 @@ gpu::Chipset, gsp, num::FromSafeCast, - regs, // + regs, + vgpu::VgpuManager, // }; =20 mod hal; @@ -171,7 +172,12 @@ pub(crate) struct FbLayout { =20 impl FbLayout { /// Computes the FB layout for `chipset` required to run the `gsp_fw` = GSP firmware. - pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gsp_fw: &GspFirmwar= e) -> Result { + pub(crate) fn new( + chipset: Chipset, + bar: Bar0<'_>, + gsp_fw: &GspFirmware, + vgpu: &VgpuManager, + ) -> Result { let hal =3D hal::fb_hal(chipset); =20 let fb =3D { @@ -234,10 +240,19 @@ pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gs= p_fw: &GspFirmware) -> Resu FbRange(elf_addr..elf_addr + elf_size) }; =20 + let vf_partition_count =3D if vgpu.enabled() { + vgpu.total_vfs().try_into().map_err(|_| EINVAL)? + } else { + 0 + }; + let wpr2_heap =3D { const WPR2_HEAP_DOWN_ALIGN: Alignment =3D Alignment::new::(); - let wpr2_heap_size =3D - gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end)?; + let wpr2_heap_size =3D if vgpu.enabled() { + gsp::vgpu_fw_heap_size(u32::from(vgpu.total_vfs())) + } else { + gsp::LibosParams::from_chipset(chipset).wpr_heap_size(chip= set, fb.end)? + }; let wpr2_heap_addr =3D (elf.start - wpr2_heap_size).align_down= (WPR2_HEAP_DOWN_ALIGN); =20 FbRange(wpr2_heap_addr..(elf.start).align_down(WPR2_HEAP_DOWN_= ALIGN)) @@ -265,7 +280,7 @@ pub(crate) fn new(chipset: Chipset, bar: Bar0<'_>, gsp_= fw: &GspFirmware) -> Resu wpr2_heap, wpr2, heap, - vf_partition_count: 0, + vf_partition_count, pmu_reserved_size: hal.pmu_reserved_size(), }) } diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index 6821008d48d9..a159f36bf704 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -26,6 +26,7 @@ mod sequencer; =20 pub(crate) use fw::{ + vgpu_fw_heap_size, GspFmcBootParams, GspFwWprMeta, LibosParams, // diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index c607081e8242..dea028f4b434 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -56,7 +56,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 fb_layout =3D FbLayout::new(chipset, bar, &gsp_fw, ctx.vgpu)?; dev_dbg!(dev, "{:#x?}\n", fb_layout); =20 let wpr_meta =3D Coherent::init(dev, GFP_KERNEL, GspFwWprMeta::new= (&gsp_fw, &fb_layout))?; diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 4db0cfa4dc4d..2fb72f8dc3c9 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -101,6 +101,16 @@ pub(in crate::gsp) fn advance_cpu_write_ptr(qs: &Coher= ent, count: u32) { pub(crate) const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: usize =3D num::u32_as_usize(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX); =20 +const GSP_FW_HEAP_SIZE_VGPU_DEFAULT: u64 =3D 581 * u64::SZ_1M; +const GSP_FW_HEAP_SIZE_VGPU_48VMS: u64 =3D 1370 * u64::SZ_1M; + +pub(crate) fn vgpu_fw_heap_size(total_vfs: u32) -> u64 { + match total_vfs { + 2..=3D32 =3D> GSP_FW_HEAP_SIZE_VGPU_DEFAULT, + _ =3D> GSP_FW_HEAP_SIZE_VGPU_48VMS, + } +} + /// Empty type to group methods related to heap parameters for running the= GSP firmware. enum GspFwHeapParams {} =20 --=20 2.51.0