Mesa (main): intel: provide pci bus and dev info in base device struct
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jan 13 03:33:17 UTC 2022
Module: Mesa
Branch: main
Commit: db8405670a7275eb797cd2c185fee75785033108
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=db8405670a7275eb797cd2c185fee75785033108
Author: Jianxun Zhang <jianxun.zhang at linux.intel.com>
Date: Wed Jan 5 16:48:28 2022 -0800
intel: provide pci bus and dev info in base device struct
Having PCI bus and dev info in the base struct
'intel_device_info' enables us to utilize the info across
multiple drivers for several purposes, such as computing
device uuids in a multi-gpu system.
Signed-off-by: Jianxun Zhang <jianxun.zhang at linux.intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Rohan Garg <rohan.garg at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13936>
---
src/intel/dev/intel_device_info.c | 31 +++++++++++++++++++++++++++----
src/intel/dev/intel_device_info.h | 14 ++++++++++++++
src/intel/dev/meson.build | 2 +-
3 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/src/intel/dev/intel_device_info.c b/src/intel/dev/intel_device_info.c
index 9a1b42a4702..e34406be7e3 100644
--- a/src/intel/dev/intel_device_info.c
+++ b/src/intel/dev/intel_device_info.c
@@ -27,6 +27,9 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+
+#include <xf86drm.h>
+
#include "intel_device_info.h"
#include "intel/common/intel_gem.h"
#include "util/bitscan.h"
@@ -1658,7 +1661,6 @@ bool
intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo)
{
int devid = 0;
-
const char *devid_override = getenv("INTEL_DEVID_OVERRIDE");
if (devid_override && strlen(devid_override) > 0) {
if (geteuid() == getuid()) {
@@ -1685,11 +1687,32 @@ intel_get_device_info_from_fd(int fd, struct intel_device_info *devinfo)
return false;
devinfo->no_hw = true;
} else {
- /* query the device id */
- if (!getparam(fd, I915_PARAM_CHIPSET_ID, &devid))
+ /* Get PCI info.
+ *
+ * Some callers may already have a valid drm device which holds
+ * values of PCI fields queried here prior to calling this function.
+ * But making this query optional leads to a more cumbersome
+ * implementation. These callers still need to initialize the fields
+ * somewhere out of this function and rely on an ioctl to get PCI
+ * device id for the next step when skipping this drm query.
+ */
+ drmDevicePtr drmdev = NULL;
+ if (drmGetDevice2(fd, DRM_DEVICE_GET_PCI_REVISION, &drmdev)) {
+ mesa_loge("Failed to query drm device.");
return false;
- if (!intel_get_device_info_from_pci_id(devid, devinfo))
+ }
+ if (!intel_get_device_info_from_pci_id
+ (drmdev->deviceinfo.pci->device_id, devinfo)) {
+ drmFreeDevice(&drmdev);
return false;
+ }
+ devinfo->pci_domain = drmdev->businfo.pci->domain;
+ devinfo->pci_bus = drmdev->businfo.pci->bus;
+ devinfo->pci_dev = drmdev->businfo.pci->dev;
+ devinfo->pci_func = drmdev->businfo.pci->func;
+ devinfo->pci_device_id = drmdev->deviceinfo.pci->device_id;
+ devinfo->pci_revision_id = drmdev->deviceinfo.pci->revision_id;
+ drmFreeDevice(&drmdev);
devinfo->no_hw = env_var_as_boolean("INTEL_NO_HW", false);
}
diff --git a/src/intel/dev/intel_device_info.h b/src/intel/dev/intel_device_info.h
index 8f3cf1a8e0b..ad07ac62a45 100644
--- a/src/intel/dev/intel_device_info.h
+++ b/src/intel/dev/intel_device_info.h
@@ -93,9 +93,23 @@ struct intel_device_info
int ver;
int verx10;
int display_ver;
+
+ /**
+ * This revision is from ioctl (I915_PARAM_REVISION) unlike
+ * pci_revision_id from drm device. Its value is not always
+ * same as the pci_revision_id.
+ */
int revision;
int gt;
+ /* PCI info */
+ uint16_t pci_domain;
+ uint8_t pci_bus;
+ uint8_t pci_dev;
+ uint8_t pci_func;
+ uint16_t pci_device_id;
+ uint8_t pci_revision_id;
+
enum intel_platform platform;
bool has_hiz_and_separate_stencil;
diff --git a/src/intel/dev/meson.build b/src/intel/dev/meson.build
index 7a800b923ae..ab6b9912562 100644
--- a/src/intel/dev/meson.build
+++ b/src/intel/dev/meson.build
@@ -31,7 +31,7 @@ libintel_dev = static_library(
['intel_dev'],
[files_libintel_dev, sha1_h],
include_directories : [inc_include, inc_src, inc_intel],
- dependencies : idep_mesautil,
+ dependencies : [dep_libdrm, idep_mesautil],
c_args : [no_override_init_args],
gnu_symbol_visibility : 'hidden',
)
More information about the mesa-commit
mailing list