1e3912d09SKarolina Stolarek // SPDX-License-Identifier: GPL-2.0 AND MIT
2e3912d09SKarolina Stolarek /*
3e3912d09SKarolina Stolarek  * Copyright © 2023 Intel Corporation
4e3912d09SKarolina Stolarek  */
5e3912d09SKarolina Stolarek #include "ttm_kunit_helpers.h"
6e3912d09SKarolina Stolarek 
7e3912d09SKarolina Stolarek struct ttm_device_funcs ttm_dev_funcs = {
8e3912d09SKarolina Stolarek };
9e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_dev_funcs);
10e3912d09SKarolina Stolarek 
ttm_device_kunit_init(struct ttm_test_devices * priv,struct ttm_device * ttm,bool use_dma_alloc,bool use_dma32)11e3912d09SKarolina Stolarek int ttm_device_kunit_init(struct ttm_test_devices *priv,
12e3912d09SKarolina Stolarek 			  struct ttm_device *ttm,
13e3912d09SKarolina Stolarek 			  bool use_dma_alloc,
14e3912d09SKarolina Stolarek 			  bool use_dma32)
15e3912d09SKarolina Stolarek {
16e3912d09SKarolina Stolarek 	struct drm_device *drm = priv->drm;
17e3912d09SKarolina Stolarek 	int err;
18e3912d09SKarolina Stolarek 
19e3912d09SKarolina Stolarek 	err = ttm_device_init(ttm, &ttm_dev_funcs, drm->dev,
20e3912d09SKarolina Stolarek 			      drm->anon_inode->i_mapping,
21e3912d09SKarolina Stolarek 			      drm->vma_offset_manager,
22e3912d09SKarolina Stolarek 			      use_dma_alloc, use_dma32);
23e3912d09SKarolina Stolarek 
24e3912d09SKarolina Stolarek 	return err;
25e3912d09SKarolina Stolarek }
26e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_device_kunit_init);
27e3912d09SKarolina Stolarek 
ttm_bo_kunit_init(struct kunit * test,struct ttm_test_devices * devs,size_t size)28*20404204SKarolina Stolarek struct ttm_buffer_object *ttm_bo_kunit_init(struct kunit *test,
29*20404204SKarolina Stolarek 					    struct ttm_test_devices *devs,
30*20404204SKarolina Stolarek 					    size_t size)
31*20404204SKarolina Stolarek {
32*20404204SKarolina Stolarek 	struct drm_gem_object gem_obj = { .size = size };
33*20404204SKarolina Stolarek 	struct ttm_buffer_object *bo;
34*20404204SKarolina Stolarek 
35*20404204SKarolina Stolarek 	bo = kunit_kzalloc(test, sizeof(*bo), GFP_KERNEL);
36*20404204SKarolina Stolarek 	KUNIT_ASSERT_NOT_NULL(test, bo);
37*20404204SKarolina Stolarek 
38*20404204SKarolina Stolarek 	bo->base = gem_obj;
39*20404204SKarolina Stolarek 	bo->bdev = devs->ttm_dev;
40*20404204SKarolina Stolarek 
41*20404204SKarolina Stolarek 	return bo;
42*20404204SKarolina Stolarek }
43*20404204SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_bo_kunit_init);
44*20404204SKarolina Stolarek 
ttm_test_devices_basic(struct kunit * test)45e3912d09SKarolina Stolarek struct ttm_test_devices *ttm_test_devices_basic(struct kunit *test)
46e3912d09SKarolina Stolarek {
47e3912d09SKarolina Stolarek 	struct ttm_test_devices *devs;
48e3912d09SKarolina Stolarek 
49e3912d09SKarolina Stolarek 	devs = kunit_kzalloc(test, sizeof(*devs), GFP_KERNEL);
50e3912d09SKarolina Stolarek 	KUNIT_ASSERT_NOT_NULL(test, devs);
51e3912d09SKarolina Stolarek 
52e3912d09SKarolina Stolarek 	devs->dev = drm_kunit_helper_alloc_device(test);
53e3912d09SKarolina Stolarek 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, devs->dev);
54e3912d09SKarolina Stolarek 
55e3912d09SKarolina Stolarek 	devs->drm = __drm_kunit_helper_alloc_drm_device(test, devs->dev,
56e3912d09SKarolina Stolarek 							sizeof(*devs->drm), 0,
57e3912d09SKarolina Stolarek 							DRIVER_GEM);
58e3912d09SKarolina Stolarek 	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, devs->drm);
59e3912d09SKarolina Stolarek 
60e3912d09SKarolina Stolarek 	return devs;
61e3912d09SKarolina Stolarek }
62e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_test_devices_basic);
63e3912d09SKarolina Stolarek 
ttm_test_devices_all(struct kunit * test)64e3912d09SKarolina Stolarek struct ttm_test_devices *ttm_test_devices_all(struct kunit *test)
65e3912d09SKarolina Stolarek {
66e3912d09SKarolina Stolarek 	struct ttm_test_devices *devs;
67e3912d09SKarolina Stolarek 	struct ttm_device *ttm_dev;
68e3912d09SKarolina Stolarek 	int err;
69e3912d09SKarolina Stolarek 
70e3912d09SKarolina Stolarek 	devs = ttm_test_devices_basic(test);
71e3912d09SKarolina Stolarek 
72e3912d09SKarolina Stolarek 	ttm_dev = kunit_kzalloc(test, sizeof(*ttm_dev), GFP_KERNEL);
73e3912d09SKarolina Stolarek 	KUNIT_ASSERT_NOT_NULL(test, ttm_dev);
74e3912d09SKarolina Stolarek 
75e3912d09SKarolina Stolarek 	err = ttm_device_kunit_init(devs, ttm_dev, false, false);
76e3912d09SKarolina Stolarek 	KUNIT_ASSERT_EQ(test, err, 0);
77e3912d09SKarolina Stolarek 
78e3912d09SKarolina Stolarek 	devs->ttm_dev = ttm_dev;
79e3912d09SKarolina Stolarek 
80e3912d09SKarolina Stolarek 	return devs;
81e3912d09SKarolina Stolarek }
82e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_test_devices_all);
83e3912d09SKarolina Stolarek 
ttm_test_devices_put(struct kunit * test,struct ttm_test_devices * devs)84e3912d09SKarolina Stolarek void ttm_test_devices_put(struct kunit *test, struct ttm_test_devices *devs)
85e3912d09SKarolina Stolarek {
86e3912d09SKarolina Stolarek 	if (devs->ttm_dev)
87e3912d09SKarolina Stolarek 		ttm_device_fini(devs->ttm_dev);
88e3912d09SKarolina Stolarek 
89e3912d09SKarolina Stolarek 	drm_kunit_helper_free_device(test, devs->dev);
90e3912d09SKarolina Stolarek }
91e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_test_devices_put);
92e3912d09SKarolina Stolarek 
ttm_test_devices_init(struct kunit * test)93e3912d09SKarolina Stolarek int ttm_test_devices_init(struct kunit *test)
94e3912d09SKarolina Stolarek {
95e3912d09SKarolina Stolarek 	struct ttm_test_devices *priv;
96e3912d09SKarolina Stolarek 
97e3912d09SKarolina Stolarek 	priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);
98e3912d09SKarolina Stolarek 	KUNIT_ASSERT_NOT_NULL(test, priv);
99e3912d09SKarolina Stolarek 
100e3912d09SKarolina Stolarek 	priv = ttm_test_devices_basic(test);
101e3912d09SKarolina Stolarek 	test->priv = priv;
102e3912d09SKarolina Stolarek 
103e3912d09SKarolina Stolarek 	return 0;
104e3912d09SKarolina Stolarek }
105e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_test_devices_init);
106e3912d09SKarolina Stolarek 
ttm_test_devices_fini(struct kunit * test)107e3912d09SKarolina Stolarek void ttm_test_devices_fini(struct kunit *test)
108e3912d09SKarolina Stolarek {
109e3912d09SKarolina Stolarek 	ttm_test_devices_put(test, test->priv);
110e3912d09SKarolina Stolarek }
111e3912d09SKarolina Stolarek EXPORT_SYMBOL_GPL(ttm_test_devices_fini);
112e3912d09SKarolina Stolarek 
113e3912d09SKarolina Stolarek MODULE_LICENSE("GPL");
114