Skip to content

Commit

Permalink
drm/tests: Add Kunit Helpers
Browse files Browse the repository at this point in the history
As the number of kunit tests in KMS grows further, we start to have
multiple test suites that, for example, need to register a mock DRM
driver to interact with the KMS function they are supposed to test.

Let's add a file meant to provide those kind of helpers to avoid
duplication.

Reviewed-by: Noralf Trønnes <noralf@tronnes.org>
Tested-by: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v9-2-24b168e5bcd5@cerno.tech
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
  • Loading branch information
Maxime Ripard committed Nov 15, 2022
1 parent 99e49bf commit 44a3928
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ obj-$(CONFIG_DRM_KUNIT_TEST) += \
drm_format_helper_test.o \
drm_format_test.o \
drm_framebuffer_test.o \
drm_kunit_helpers.o \
drm_mm_test.o \
drm_plane_helper_test.o \
drm_rect_test.o
64 changes: 64 additions & 0 deletions drivers/gpu/drm/tests/drm_kunit_helpers.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <drm/drm_drv.h>
#include <drm/drm_managed.h>

#include <kunit/resource.h>

#include <linux/device.h>

struct kunit_dev {
struct drm_device base;
};

static const struct drm_mode_config_funcs drm_mode_config_funcs = {
};

static int dev_init(struct kunit_resource *res, void *ptr)
{
char *name = ptr;
struct device *dev;

dev = root_device_register(name);
if (IS_ERR(dev))
return PTR_ERR(dev);

res->data = dev;
return 0;
}

static void dev_free(struct kunit_resource *res)
{
struct device *dev = res->data;

root_device_unregister(dev);
}

struct drm_device *drm_kunit_device_init(struct kunit *test, u32 features, char *name)
{
struct kunit_dev *kdev;
struct drm_device *drm;
struct drm_driver *driver;
struct device *dev;
int ret;

dev = kunit_alloc_resource(test, dev_init, dev_free, GFP_KERNEL, name);
if (!dev)
return ERR_PTR(-ENOMEM);

driver = kunit_kzalloc(test, sizeof(*driver), GFP_KERNEL);
if (!driver)
return ERR_PTR(-ENOMEM);

driver->driver_features = features;
kdev = devm_drm_dev_alloc(dev, driver, struct kunit_dev, base);
if (IS_ERR(kdev))
return ERR_CAST(kdev);

drm = &kdev->base;
drm->mode_config.funcs = &drm_mode_config_funcs;

ret = drmm_mode_config_init(drm);
if (ret)
return ERR_PTR(ret);

return drm;
}
9 changes: 9 additions & 0 deletions drivers/gpu/drm/tests/drm_kunit_helpers.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef DRM_KUNIT_HELPERS_H_
#define DRM_KUNIT_HELPERS_H_

struct drm_device;
struct kunit;

struct drm_device *drm_kunit_device_init(struct kunit *test, u32 features, char *name);

#endif // DRM_KUNIT_HELPERS_H_

0 comments on commit 44a3928

Please sign in to comment.