blob: 0a5f28894cd2b576ef0ebd314140a0a5411ab17f [file] [edit]
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright © 2026 Intel Corporation
*/
#include <kunit/test.h>
#include "tests/xe_kunit_helpers.h"
#include "tests/xe_pci_test.h"
#include "xe_any.h"
#include "xe_device.h"
static void test_to_xe(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
const struct xe_device *cxe = xe;
const struct xe_tile *ctile = tile;
const struct xe_gt *cgt = gt;
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(xe));
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(tile));
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(gt));
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(drm));
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(dev));
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(pdev));
KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(cxe));
KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(ctile));
KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(cgt));
}
static void test_to_pdev(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(xe));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(tile));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(gt));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(drm));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(dev));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(pdev));
/* mimic early probe stage */
dev_set_drvdata(xe->drm.dev, NULL);
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(dev));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(pdev));
}
static void test_to_dev(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(xe));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(tile));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(gt));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(drm));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(dev));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(pdev));
/* mimic early probe stage */
dev_set_drvdata(xe->drm.dev, NULL);
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(dev));
KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(pdev));
}
static void test_to_drm(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(xe));
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(tile));
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(gt));
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(drm));
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(dev));
KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(pdev));
}
static void test_if_pdev(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
KUNIT_EXPECT_NULL(test, xe_any_if_pdev(xe));
KUNIT_EXPECT_NULL(test, xe_any_if_pdev(tile));
KUNIT_EXPECT_NULL(test, xe_any_if_pdev(gt));
KUNIT_EXPECT_NULL(test, xe_any_if_pdev(drm));
KUNIT_EXPECT_NULL(test, xe_any_if_pdev(dev));
KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_if_pdev(pdev));
}
static void test_if_xe(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_if_xe(xe));
KUNIT_EXPECT_NULL(test, xe_any_if_xe(tile));
KUNIT_EXPECT_NULL(test, xe_any_if_xe(gt));
KUNIT_EXPECT_NULL(test, xe_any_if_xe(drm));
KUNIT_EXPECT_NULL(test, xe_any_if_xe(dev));
KUNIT_EXPECT_NULL(test, xe_any_if_xe(pdev));
}
static void test_if_tile(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
KUNIT_EXPECT_NULL(test, xe_any_if_tile(xe));
KUNIT_EXPECT_PTR_EQ(test, tile, xe_any_if_tile(tile));
KUNIT_EXPECT_NULL(test, xe_any_if_tile(gt));
KUNIT_EXPECT_NULL(test, xe_any_if_tile(drm));
KUNIT_EXPECT_NULL(test, xe_any_if_tile(dev));
KUNIT_EXPECT_NULL(test, xe_any_if_tile(pdev));
}
static void test_if_gt(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct drm_device *drm = &xe->drm;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
KUNIT_EXPECT_NULL(test, xe_any_if_gt(xe));
KUNIT_EXPECT_NULL(test, xe_any_if_gt(tile));
KUNIT_EXPECT_PTR_EQ(test, gt, xe_any_if_gt(gt));
KUNIT_EXPECT_NULL(test, xe_any_if_gt(drm));
KUNIT_EXPECT_NULL(test, xe_any_if_gt(dev));
KUNIT_EXPECT_NULL(test, xe_any_if_gt(pdev));
}
static void test_to_id(struct kunit *test)
{
struct xe_device *xe = test->priv;
struct xe_tile *tile = xe_device_get_root_tile(xe);
struct xe_gt *gt = tile->primary_gt;
struct device *dev = xe->drm.dev;
struct pci_dev *pdev = to_pci_dev(dev);
const struct xe_device *cxe = xe;
const struct xe_tile *ctile = tile;
const struct xe_gt *cgt = gt;
tile->id = 1;
gt->info.id = 2;
KUNIT_EXPECT_EQ(test, 0, xe_any_id(xe));
KUNIT_EXPECT_EQ(test, 1, xe_any_id(tile));
KUNIT_EXPECT_EQ(test, 2, xe_any_id(gt));
KUNIT_EXPECT_EQ(test, 0, xe_any_id(dev));
KUNIT_EXPECT_EQ(test, 0, xe_any_id(pdev));
KUNIT_EXPECT_EQ(test, 0, xe_any_id(cxe));
KUNIT_EXPECT_EQ(test, 1, xe_any_id(ctile));
KUNIT_EXPECT_EQ(test, 2, xe_any_id(cgt));
}
static struct kunit_case xe_any_tests[] = {
KUNIT_CASE(test_to_xe),
KUNIT_CASE(test_to_dev),
KUNIT_CASE(test_to_pdev),
KUNIT_CASE(test_to_drm),
KUNIT_CASE(test_if_pdev),
KUNIT_CASE(test_if_xe),
KUNIT_CASE(test_if_tile),
KUNIT_CASE(test_if_gt),
KUNIT_CASE(test_to_id),
{}
};
static struct kunit_suite xe_any_test_suite = {
.name = "xe_any",
.test_cases = xe_any_tests,
.init = xe_kunit_helper_xe_device_test_init,
};
kunit_test_suite(xe_any_test_suite);