Unverified Commit 44a39283 authored by Maxime Ripard's avatar Maxime Ripard
Browse files

drm/tests: Add Kunit Helpers



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: default avatarNoralf Trønnes <noralf@tronnes.org>
Tested-by: default avatarMateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
Link: https://lore.kernel.org/r/20220728-rpi-analog-tv-properties-v9-2-24b168e5bcd5@cerno.tech


Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
parent 99e49bfd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
#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 −0
Original line number Diff line number Diff line
#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_