1 // SPDX-License-Identifier: GPL-2.0 AND MIT
3 * Copyright © 2023 Intel Corporation
5 #include <drm/ttm/ttm_tt.h>
7 #include "ttm_kunit_helpers.h"
9 static struct ttm_tt *ttm_tt_simple_create(struct ttm_buffer_object *bo,
14 tt = kzalloc(sizeof(*tt), GFP_KERNEL);
15 ttm_tt_init(tt, bo, page_flags, ttm_cached, 0);
20 static void ttm_tt_simple_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
25 static void dummy_ttm_bo_destroy(struct ttm_buffer_object *bo)
29 struct ttm_device_funcs ttm_dev_funcs = {
30 .ttm_tt_create = ttm_tt_simple_create,
31 .ttm_tt_destroy = ttm_tt_simple_destroy,
33 EXPORT_SYMBOL_GPL(ttm_dev_funcs);
35 int ttm_device_kunit_init(struct ttm_test_devices *priv,
36 struct ttm_device *ttm,
40 struct drm_device *drm = priv->drm;
43 err = ttm_device_init(ttm, &ttm_dev_funcs, drm->dev,
44 drm->anon_inode->i_mapping,
45 drm->vma_offset_manager,
46 use_dma_alloc, use_dma32);
50 EXPORT_SYMBOL_GPL(ttm_device_kunit_init);
52 struct ttm_buffer_object *ttm_bo_kunit_init(struct kunit *test,
53 struct ttm_test_devices *devs,
56 struct drm_gem_object gem_obj = { };
57 struct ttm_buffer_object *bo;
60 bo = kunit_kzalloc(test, sizeof(*bo), GFP_KERNEL);
61 KUNIT_ASSERT_NOT_NULL(test, bo);
64 err = drm_gem_object_init(devs->drm, &bo->base, size);
65 KUNIT_ASSERT_EQ(test, err, 0);
67 bo->bdev = devs->ttm_dev;
68 bo->destroy = dummy_ttm_bo_destroy;
74 EXPORT_SYMBOL_GPL(ttm_bo_kunit_init);
76 struct ttm_place *ttm_place_kunit_init(struct kunit *test,
77 uint32_t mem_type, uint32_t flags)
79 struct ttm_place *place;
81 place = kunit_kzalloc(test, sizeof(*place), GFP_KERNEL);
82 KUNIT_ASSERT_NOT_NULL(test, place);
84 place->mem_type = mem_type;
89 EXPORT_SYMBOL_GPL(ttm_place_kunit_init);
91 struct ttm_test_devices *ttm_test_devices_basic(struct kunit *test)
93 struct ttm_test_devices *devs;
95 devs = kunit_kzalloc(test, sizeof(*devs), GFP_KERNEL);
96 KUNIT_ASSERT_NOT_NULL(test, devs);
98 devs->dev = drm_kunit_helper_alloc_device(test);
99 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, devs->dev);
101 devs->drm = __drm_kunit_helper_alloc_drm_device(test, devs->dev,
102 sizeof(*devs->drm), 0,
104 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, devs->drm);
108 EXPORT_SYMBOL_GPL(ttm_test_devices_basic);
110 struct ttm_test_devices *ttm_test_devices_all(struct kunit *test)
112 struct ttm_test_devices *devs;
113 struct ttm_device *ttm_dev;
116 devs = ttm_test_devices_basic(test);
118 ttm_dev = kunit_kzalloc(test, sizeof(*ttm_dev), GFP_KERNEL);
119 KUNIT_ASSERT_NOT_NULL(test, ttm_dev);
121 err = ttm_device_kunit_init(devs, ttm_dev, false, false);
122 KUNIT_ASSERT_EQ(test, err, 0);
124 devs->ttm_dev = ttm_dev;
128 EXPORT_SYMBOL_GPL(ttm_test_devices_all);
130 void ttm_test_devices_put(struct kunit *test, struct ttm_test_devices *devs)
133 ttm_device_fini(devs->ttm_dev);
135 drm_kunit_helper_free_device(test, devs->dev);
137 EXPORT_SYMBOL_GPL(ttm_test_devices_put);
139 int ttm_test_devices_init(struct kunit *test)
141 struct ttm_test_devices *priv;
143 priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
144 KUNIT_ASSERT_NOT_NULL(test, priv);
146 priv = ttm_test_devices_basic(test);
151 EXPORT_SYMBOL_GPL(ttm_test_devices_init);
153 void ttm_test_devices_fini(struct kunit *test)
155 ttm_test_devices_put(test, test->priv);
157 EXPORT_SYMBOL_GPL(ttm_test_devices_fini);
159 MODULE_LICENSE("GPL");