// SPDX-License-Identifier: GPL-2.0 /* * Copyright © 2026 Intel Corporation */ #include #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);