summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2019-03-27 20:52:52 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-03-29 22:23:27 +0200
commite408d569973b610ba4aafdba016c48b25e563468 (patch)
treee3e1050d63918d053369c7669b62097d501a0451 /lib
parent1ac3264e0370134d06e2cff211c0da4aa5c7d83b (diff)
Revert "lib/igt_device: Move intel_get_pci_device under igt_device"
One significant usecase for intel_reg/etc. is to be able to examine the hardware state *before* loading the driver. If the tool forces the driver to load we've totally lost that capability. This reverts commit 8ae86621d6fff60b6e20c6b0f9b336785c935b0f. Cc: Michał Winiarski <michal.winiarski@intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Acked-by: Jani Nikula <jani.nikula@intel.com> Acked-by: Michał Winiarski <michal.winiarski@intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/igt_device.c120
-rw-r--r--lib/igt_device.h1
-rw-r--r--lib/intel_chipset.c51
-rw-r--r--lib/intel_chipset.h1
-rw-r--r--lib/intel_mmio.c4
-rw-r--r--lib/ioctl_wrappers.c5
-rw-r--r--lib/ioctl_wrappers.h2
7 files changed, 57 insertions, 127 deletions
diff --git a/lib/igt_device.c b/lib/igt_device.c
index a2f9bb3a..08f39c8b 100644
--- a/lib/igt_device.c
+++ b/lib/igt_device.c
@@ -26,7 +26,6 @@
#include <sys/sysmacros.h>
#include "igt.h"
#include "igt_device.h"
-#include "igt_sysfs.h"
int __igt_device_set_master(int fd)
{
@@ -104,122 +103,3 @@ int igt_device_get_card_index(int fd)
return minor(st.st_rdev);
}
-
-#define IGT_DEV_PATH_LEN 80
-
-static bool igt_device_is_pci(int fd)
-{
- char path[IGT_DEV_PATH_LEN];
- char *subsystem;
- int sysfs;
- int len;
-
- sysfs = igt_sysfs_open(fd);
- if (sysfs == -1)
- return false;
-
- len = readlinkat(sysfs, "device/subsystem", path, sizeof(path) - 1);
- if (len == -1)
- return false;
- path[len] = '\0';
-
- subsystem = strrchr(path, '/');
- if (!subsystem)
- return false;
-
- return strcmp(subsystem, "/pci") == 0;
-}
-
-struct igt_pci_addr {
- unsigned int domain;
- unsigned int bus;
- unsigned int device;
- unsigned int function;
-};
-
-static int igt_device_get_pci_addr(int fd, struct igt_pci_addr *pci)
-{
- char path[IGT_DEV_PATH_LEN];
- char *buf;
- int sysfs;
- int len;
-
- if (!igt_device_is_pci(fd))
- return -ENODEV;
-
- sysfs = igt_sysfs_open(fd);
- if (sysfs == -1)
- return -ENOENT;
-
- len = readlinkat(sysfs, "device", path, sizeof(path) - 1);
- if (len == -1)
- return -ENOENT;
- path[len] = '\0';
-
- buf = strrchr(path, '/');
- if (!buf)
- return -ENOENT;
-
- if (sscanf(buf, "/%4x:%2x:%2x.%2x",
- &pci->domain, &pci->bus,
- &pci->device, &pci->function) != 4) {
- igt_warn("Unable to extract PCI device address from '%s'\n", buf);
- return -ENOENT;
- }
-
- return 0;
-}
-
-static struct pci_device *__igt_device_get_pci_device(int fd)
-{
- struct igt_pci_addr pci_addr;
- struct pci_device *pci_dev;
-
- if (igt_device_get_pci_addr(fd, &pci_addr)) {
- igt_warn("Unable to find device PCI address\n");
- return NULL;
- }
-
- if (pci_system_init()) {
- igt_warn("Couldn't initialize PCI system\n");
- return NULL;
- }
-
- pci_dev = pci_device_find_by_slot(pci_addr.domain,
- pci_addr.bus,
- pci_addr.device,
- pci_addr.function);
- if (!pci_dev) {
- igt_warn("Couldn't find PCI device %04x:%02x:%02x:%02x\n",
- pci_addr.domain, pci_addr.bus,
- pci_addr.device, pci_addr.function);
- return NULL;
- }
-
- if (pci_device_probe(pci_dev)) {
- igt_warn("Couldn't probe PCI device\n");
- return NULL;
- }
-
- return pci_dev;
-}
-
-/**
- * igt_device_get_pci_device:
- *
- * @fd: the device
- *
- * Looks up the main graphics pci device using libpciaccess.
- *
- * Returns:
- * The pci_device, skips the test on any failures.
- */
-struct pci_device *igt_device_get_pci_device(int fd)
-{
- struct pci_device *pci_dev;
-
- pci_dev = __igt_device_get_pci_device(fd);
- igt_require(pci_dev);
-
- return pci_dev;
-}
diff --git a/lib/igt_device.h b/lib/igt_device.h
index 278ba7a9..9d7dc2c3 100644
--- a/lib/igt_device.h
+++ b/lib/igt_device.h
@@ -32,6 +32,5 @@ int __igt_device_drop_master(int fd);
void igt_device_drop_master(int fd);
int igt_device_get_card_index(int fd);
-struct pci_device *igt_device_get_pci_device(int fd);
#endif /* __IGT_DEVICE_H__ */
diff --git a/lib/intel_chipset.c b/lib/intel_chipset.c
index 0577f77a..4748a3fb 100644
--- a/lib/intel_chipset.c
+++ b/lib/intel_chipset.c
@@ -62,6 +62,57 @@
enum pch_type intel_pch;
/**
+ * intel_get_pci_device:
+ *
+ * Looks up the main graphics pci device using libpciaccess.
+ *
+ * Returns:
+ * The pci_device, exits the program on any failures.
+ */
+struct pci_device *
+intel_get_pci_device(void)
+{
+ struct pci_device *pci_dev;
+ int error;
+
+ error = pci_system_init();
+ igt_fail_on_f(error != 0,
+ "Couldn't initialize PCI system\n");
+
+ /* Grab the graphics card. Try the canonical slot first, then
+ * walk the entire PCI bus for a matching device. */
+ pci_dev = pci_device_find_by_slot(0, 0, 2, 0);
+ if (pci_dev == NULL || pci_dev->vendor_id != 0x8086) {
+ struct pci_device_iterator *iter;
+ struct pci_id_match match;
+
+ match.vendor_id = 0x8086; /* Intel */
+ match.device_id = PCI_MATCH_ANY;
+ match.subvendor_id = PCI_MATCH_ANY;
+ match.subdevice_id = PCI_MATCH_ANY;
+
+ match.device_class = 0x3 << 16;
+ match.device_class_mask = 0xff << 16;
+
+ match.match_data = 0;
+
+ iter = pci_id_match_iterator_create(&match);
+ pci_dev = pci_device_next(iter);
+ pci_iterator_destroy(iter);
+ }
+ igt_require_f(pci_dev, "Couldn't find Intel graphics card\n");
+
+ error = pci_device_probe(pci_dev);
+ igt_fail_on_f(error != 0,
+ "Couldn't probe graphics card\n");
+
+ if (pci_dev->vendor_id != 0x8086)
+ errx(1, "Graphics card is non-intel");
+
+ return pci_dev;
+}
+
+/**
* intel_get_drm_devid:
* @fd: open i915 drm file descriptor
*
diff --git a/lib/intel_chipset.h b/lib/intel_chipset.h
index dd31d3fb..40170b7b 100644
--- a/lib/intel_chipset.h
+++ b/lib/intel_chipset.h
@@ -31,6 +31,7 @@
#include <pciaccess.h>
#include <stdbool.h>
+struct pci_device *intel_get_pci_device(void);
uint32_t intel_get_drm_devid(int fd);
struct intel_device_info {
diff --git a/lib/intel_mmio.c b/lib/intel_mmio.c
index f5e0be0c..a5458aeb 100644
--- a/lib/intel_mmio.c
+++ b/lib/intel_mmio.c
@@ -112,7 +112,7 @@ intel_mmio_use_dump_file(char *file)
*
* Sets up #igt_global_mmio to point at the mmio bar.
*
- * @pci_dev can be obtained from igt_device_get_pci_device().
+ * @pci_dev can be obtained from intel_get_pci_device().
*/
void
intel_mmio_use_pci_bar(struct pci_device *pci_dev)
@@ -162,7 +162,7 @@ release_forcewake_lock(int fd)
*
* It also initializes #igt_global_mmio like intel_mmio_use_pci_bar().
*
- * @pci_dev can be obtained from igt_device_get_pci_device().
+ * @pci_dev can be obtained from intel_get_pci_device().
*/
int
intel_register_access_init(struct pci_device *pci_dev, int safe, int fd)
diff --git a/lib/ioctl_wrappers.c b/lib/ioctl_wrappers.c
index a66eb4bc..39920f87 100644
--- a/lib/ioctl_wrappers.c
+++ b/lib/ioctl_wrappers.c
@@ -53,7 +53,6 @@
#include "intel_chipset.h"
#include "intel_io.h"
#include "igt_debugfs.h"
-#include "igt_device.h"
#include "igt_sysfs.h"
#include "config.h"
@@ -1097,9 +1096,9 @@ uint64_t gem_aperture_size(int fd)
*
* Returns: The mappable gtt address space size.
*/
-uint64_t gem_mappable_aperture_size(int fd)
+uint64_t gem_mappable_aperture_size(void)
{
- struct pci_device *pci_dev = igt_device_get_pci_device(fd);
+ struct pci_device *pci_dev = intel_get_pci_device();
int bar;
if (intel_gen(pci_dev->device_id) < 3)
diff --git a/lib/ioctl_wrappers.h b/lib/ioctl_wrappers.h
index ad93daff..f0be2608 100644
--- a/lib/ioctl_wrappers.h
+++ b/lib/ioctl_wrappers.h
@@ -136,7 +136,7 @@ uint64_t gem_total_stolen_size(int fd);
uint64_t gem_available_aperture_size(int fd);
uint64_t gem_aperture_size(int fd);
uint64_t gem_global_aperture_size(int fd);
-uint64_t gem_mappable_aperture_size(int fd);
+uint64_t gem_mappable_aperture_size(void);
bool gem_has_softpin(int fd);
bool gem_has_exec_fence(int fd);