summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Kempczyński <zbigniew.kempczynski@intel.com>2020-11-04 19:00:07 +0100
committerPetri Latvala <petri.latvala@intel.com>2020-11-05 09:56:01 +0200
commit93669cadf89d5ef72c7c519f59318be9ec77a574 (patch)
tree98c2760a530962bf43766712d73af1046a9d23c5
parent212e55b9aa9e98a3ef63f37a50fd5b69761fbecd (diff)
lib/igt_device_scan: Provide function for return integrated card
Sometimes we need to get integrated card (like in intel_gpu_top) so add function which does it. Signed-off-by: Zbigniew Kempczyński <zbigniew.kempczynski@intel.com> Cc: Petri Latvala <petri.latvala@intel.com> Cc: Ayaz A Siddiqui <ayaz.siddiqui@intel.com> Cc: Lyude Paul <lyude@redhat.com> Reviewed-by: Ayaz A Siddiqui <ayaz.siddiqui@intel.com>
-rw-r--r--lib/igt_device_scan.c29
-rw-r--r--lib/igt_device_scan.h1
2 files changed, 26 insertions, 4 deletions
diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
index 0967c645..c581a31a 100644
--- a/lib/igt_device_scan.c
+++ b/lib/igt_device_scan.c
@@ -465,12 +465,13 @@ __copy_dev_to_card(struct igt_device *dev, struct igt_device_card *card)
}
/*
- * Iterate over all igt_devices array and find first discrete card.
- * card->pci_slot_name will be updated only if a discrete card is present.
+ * Iterate over all igt_devices array and find first discrete/integrated card.
+ * card->pci_slot_name will be updated only if a card is found.
*/
-bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card)
+static bool __find_first_i915_card(struct igt_device_card *card, bool discrete)
{
struct igt_device *dev;
+ int cmp;
memset(card, 0, sizeof(*card));
@@ -479,7 +480,13 @@ bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card)
if (!is_pci_subsystem(dev) || !is_vendor_matched(dev, "intel"))
continue;
- if ((strncmp(dev->pci_slot_name, INTEGRATED_I915_GPU_PCI_ID, PCI_SLOT_NAME_SIZE)) != 0) {
+ cmp = strncmp(dev->pci_slot_name, INTEGRATED_I915_GPU_PCI_ID,
+ PCI_SLOT_NAME_SIZE);
+
+ if (discrete && cmp) {
+ __copy_dev_to_card(dev, card);
+ return true;
+ } else if (!discrete && !cmp) {
__copy_dev_to_card(dev, card);
return true;
}
@@ -488,6 +495,20 @@ bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card)
return false;
}
+bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card)
+{
+ igt_assert(card);
+
+ return __find_first_i915_card(card, true);
+}
+
+bool igt_device_find_integrated_card(struct igt_device_card *card)
+{
+ igt_assert(card);
+
+ return __find_first_i915_card(card, false);
+}
+
static struct igt_device *igt_device_from_syspath(const char *syspath)
{
struct igt_device *dev;
diff --git a/lib/igt_device_scan.h b/lib/igt_device_scan.h
index 544e982c..99daee0c 100644
--- a/lib/igt_device_scan.h
+++ b/lib/igt_device_scan.h
@@ -71,6 +71,7 @@ bool igt_device_card_match(const char *filter, struct igt_device_card *card);
bool igt_device_card_match_pci(const char *filter,
struct igt_device_card *card);
bool igt_device_find_first_i915_discrete_card(struct igt_device_card *card);
+bool igt_device_find_integrated_card(struct igt_device_card *card);
int igt_open_card(struct igt_device_card *card);
int igt_open_render(struct igt_device_card *card);