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