From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by gabe.freedesktop.org (Postfix) with ESMTPS id A30D810E1C7 for ; Thu, 9 Nov 2023 06:53:18 +0000 (UTC) From: Lukasz Laguna To: igt-dev@lists.freedesktop.org Date: Thu, 9 Nov 2023 07:51:45 +0100 Message-Id: <20231109065147.9479-7-lukasz.laguna@intel.com> In-Reply-To: <20231109065147.9479-1-lukasz.laguna@intel.com> References: <20231109065147.9479-1-lukasz.laguna@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH i-g-t 6/8] lib/igt_sriov_device: add helpers for VF DRM driver bind and unbind List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: Helpers allow to bind and unbind a DRM driver for specified VF of a given PF device. Signed-off-by: Lukasz Laguna Reviewed-by: Marcin Bernatowicz --- lib/igt_sriov_device.c | 56 ++++++++++++++++++++++++++++++++++++++++++ lib/igt_sriov_device.h | 2 ++ 2 files changed, 58 insertions(+) diff --git a/lib/igt_sriov_device.c b/lib/igt_sriov_device.c index 384e303dc..b2dc03904 100644 --- a/lib/igt_sriov_device.c +++ b/lib/igt_sriov_device.c @@ -4,9 +4,11 @@ */ #include +#include #include "drmtest.h" #include "igt_core.h" +#include "igt_device.h" #include "igt_sriov_device.h" #include "igt_sysfs.h" @@ -252,3 +254,57 @@ bool igt_sriov_is_vf_drm_driver_probed(int pf, unsigned int vf_num) return ret; } + +static bool __igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num, bool bind) +{ + int sysfs, ret; + struct pci_device *pci_dev; + char pci_slot[14]; + + igt_assert(vf_num > 0); + + pci_dev = __igt_device_get_pci_device(pf, vf_num); + igt_assert_f(pci_dev, "No PCI device for given VF number: %d\n", vf_num); + sprintf(pci_slot, "%04x:%02x:%02x.%x", + pci_dev->domain_16, pci_dev->bus, pci_dev->dev, pci_dev->func); + + sysfs = igt_sysfs_open(pf); + igt_assert_fd(sysfs); + + igt_debug("vf_num: %u, pci_slot: %s\n", vf_num, pci_slot); + ret = igt_sysfs_set(sysfs, bind ? "device/driver/bind" : "device/driver/unbind", pci_slot); + + close(sysfs); + + return ret; +} + +/** + * igt_sriov_bind_vf_drm_driver + * @pf: PF device file descriptor + * @vf_num: VF number (1-based to identify single VF) + * + * Bind the DRM driver for given VF. + * + * Returns: + * True on success, false on failure. + */ +bool igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num) +{ + return __igt_sriov_bind_vf_drm_driver(pf, vf_num, true); +} + +/** + * igt_sriov_unbind_vf_drm_driver + * @pf: PF device file descriptor + * @vf_num: VF number (1-based to identify single VF) + * + * Unind the DRM driver for given VF. + * + * Returns: + * True on success, false on failure. + */ +bool igt_sriov_unbind_vf_drm_driver(int pf, unsigned int vf_num) +{ + return __igt_sriov_bind_vf_drm_driver(pf, vf_num, false); +} diff --git a/lib/igt_sriov_device.h b/lib/igt_sriov_device.h index 1b99fb8ce..66d216f9d 100644 --- a/lib/igt_sriov_device.h +++ b/lib/igt_sriov_device.h @@ -18,6 +18,8 @@ bool igt_sriov_enable_driver_autoprobe(int pf); bool igt_sriov_disable_driver_autoprobe(int pf); int igt_sriov_open_vf_drm_device(int pf, unsigned int vf_num); bool igt_sriov_is_vf_drm_driver_probed(int pf, unsigned int vf_num); +bool igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num); +bool igt_sriov_unbind_vf_drm_driver(int pf, unsigned int vf_num); /** * for_each_vf: -- 2.40.0