linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime@cerno.tech>
To: Javier Martinez Canillas <javierm@redhat.com>
Cc: "Daniel Vetter" <daniel@ffwll.ch>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"David Airlie" <airlied@gmail.com>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	dri-devel@lists.freedesktop.org,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	kunit-dev@googlegroups.com, linux-media@vger.kernel.org,
	linux-kselftest@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
	"Brendan Higgins" <brendan.higgins@linux.dev>,
	"Maíra Canal" <mairacanal@riseup.net>,
	"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
	linux-kernel@vger.kernel.org, "David Gow" <davidgow@google.com>
Subject: Re: [PATCH v2 15/17] drm/vc4: tests: Introduce a mocking infrastructure
Date: Thu, 1 Dec 2022 14:03:46 +0100	[thread overview]
Message-ID: <20221201130346.by6zzfdbuyidwekb@houat> (raw)
In-Reply-To: <98d47486-d04c-b81a-6ae4-fa7f62828a0e@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 4111 bytes --]

Hi Javier,

On Wed, Nov 30, 2022 at 10:59:37AM +0100, Javier Martinez Canillas wrote:
> On 11/28/22 15:53, Maxime Ripard wrote:
> > In order to test the current atomic_check hooks we need to have a DRM
> > device that has roughly the same capabilities and layout that the actual
> > hardware. We'll also need a bunch of functions to create arbitrary
> > atomic states.
> > 
> > Let's create some helpers to create a device that behaves like the real
> > one, and some helpers to maintain the atomic state we want to check.
> > 
> > Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> > ---
> 
> [...]
> 
> > +
> > +config DRM_VC4_KUNIT_TEST
> > +	bool "KUnit tests for VC4" if !KUNIT_ALL_TESTS
> > +	depends on DRM_VC4 && KUNIT
> 
> shouldn't this depend on DRM_KUNIT_TEST instead ?
> 
> [...]

You're right, but the rework suggested by Maíra will add a select to the
helpers Kconfig symbol there so we should be safe.

> > +static struct vc4_dev *__mock_device(struct kunit *test, bool is_vc5)
> > +{
> > +	struct drm_device *drm;
> > +	const struct drm_driver *drv = is_vc5 ? &vc5_drm_driver : &vc4_drm_driver;
> > +	const struct vc4_mock_desc *desc = is_vc5 ? &vc5_mock : &vc4_mock;
> > +	struct vc4_dev *vc4;
> 
> Since it could be vc4 or vc5, maybe can be renamed to just struct vc_dev *vc ?

vc4_dev is the main structure in the driver for the DRM device, so we
can't rename it easily.

Generally speaking the driver was (and still is) called vc4 after the IP
name in the original RaspberryPi SoC.

There's been a new generation since, but we supported it through the vc4
driver. Even if it's a bit ambiguous, vc4 refers to both the driver name
and is used extensively in the infrastructure, but also refers to the
initial generation we supported. vc5 is only the new generation.

I'm not sure removing the number would be less confusing.

> > +struct vc4_dummy_plane *vc4_dummy_plane(struct kunit *test,
> > +					struct drm_device *drm,
> > +					enum drm_plane_type type)
> > +{
> > +	struct vc4_dummy_plane *dummy_plane;
> > +	struct drm_plane *plane;
> > +
> > +	dummy_plane = drmm_universal_plane_alloc(drm,
> > +						 struct vc4_dummy_plane, plane.base,
> > +						 0,
> > +						 &vc4_dummy_plane_funcs,
> > +						 vc4_dummy_plane_formats,
> > +						 ARRAY_SIZE(vc4_dummy_plane_formats),
> > +						 NULL,
> > +						 DRM_PLANE_TYPE_PRIMARY,
> > +						 NULL);
> > +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dummy_plane);
> > +
> > +	plane = &dummy_plane->plane.base;
> > +	drm_plane_helper_add(plane, &vc4_dummy_plane_helper_funcs);
> > +
> > +	return dummy_plane;
> > +}
> 
> I guess many of these helpers could grow to be generic, like this one since
> most drivers support the DRM_FORMAT_XRGB8888 format for their primary plane.

Yeah, that's what I'd expect at some point as well :)

> > +extern const struct vc4_pv_data bcm2835_pv0_data;
> > +extern const struct vc4_pv_data bcm2835_pv1_data;
> > +extern const struct vc4_pv_data bcm2835_pv2_data;
> > +extern const struct vc4_pv_data bcm2711_pv0_data;
> > +extern const struct vc4_pv_data bcm2711_pv1_data;
> > +extern const struct vc4_pv_data bcm2711_pv2_data;
> > +extern const struct vc4_pv_data bcm2711_pv3_data;
> > +extern const struct vc4_pv_data bcm2711_pv4_data;
> > +
> 
> Maybe the driver could expose a helper function to get the pixelvalve data
> and avoid having to expose all of these variables? For example you could
> define an enum vc4_pixelvalve type and have something like the following:
> 
> const struct vc4_pv_data *vc4_crtc_get_pixelvalve_data(enum vc4_pixelvalve pv);
> 
> All these are small nits though, the patch looks great to me and I think is
> awesome to have this level of testing with KUnit. Hope other drivers follow
> your lead.

I'm not sure. It adds an interface for something we don't really need,
so I'm not sure if it's really beneficial.

David pointed at that patch though, which seems more promising:
https://lore.kernel.org/linux-kselftest/20221102175959.2921063-1-rmoar@google.com/

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  reply	other threads:[~2022-12-01 13:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20221123-rpi-kunit-tests-v2-0-efe5ed518b63@cerno.tech>
     [not found] ` <20221123-rpi-kunit-tests-v2-2-efe5ed518b63@cerno.tech>
2022-11-28 19:30   ` [PATCH v2 02/17] drm/tests: helpers: Document drm_kunit_device_init() Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-4-efe5ed518b63@cerno.tech>
2022-11-28 19:37   ` [PATCH v2 04/17] drm/tests: helpers: Remove the name parameter Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-5-efe5ed518b63@cerno.tech>
2022-11-28 19:48   ` [PATCH v2 05/17] drm/tests: helpers: Create the device in another function Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-6-efe5ed518b63@cerno.tech>
2022-11-28 20:01   ` [PATCH v2 06/17] drm/tests: helpers: Switch to a platform_device Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-7-efe5ed518b63@cerno.tech>
2022-11-28 20:09   ` [PATCH v2 07/17] drm/tests: helpers: Make sure the device is bound Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-10-efe5ed518b63@cerno.tech>
2022-11-28 20:14   ` [PATCH v2 10/17] drm/tests: Add a test for DRM managed actions Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-11-efe5ed518b63@cerno.tech>
2022-11-28 20:16   ` [PATCH v2 11/17] drm/vc4: Move HVS state to main header Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-12-efe5ed518b63@cerno.tech>
2022-11-28 20:23   ` [PATCH v2 12/17] drm/vc4: crtc: Introduce a lower-level crtc init helper Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-13-efe5ed518b63@cerno.tech>
2022-11-28 20:26   ` [PATCH v2 13/17] drm/vc4: crtc: Make encoder lookup helper public Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-15-efe5ed518b63@cerno.tech>
2022-11-28 20:35   ` [PATCH v2 15/17] drm/vc4: tests: Introduce a mocking infrastructure Maíra Canal
2022-11-30  9:59   ` Javier Martinez Canillas
2022-12-01 13:03     ` Maxime Ripard [this message]
     [not found] ` <20221123-rpi-kunit-tests-v2-3-efe5ed518b63@cerno.tech>
2022-11-28 20:36   ` [PATCH v2 03/17] drm/tests: helpers: Rename the device init helper Maíra Canal
2022-11-28 20:48 ` [PATCH v2 00/17] drm: Introduce Kunit Tests to VC4 Maíra Canal
     [not found] ` <20221123-rpi-kunit-tests-v2-1-efe5ed518b63@cerno.tech>
2022-11-30  8:00   ` [PATCH v2 01/17] drm/tests: helpers: Move the helper header to include/drm Javier Martinez Canillas
2022-12-01 10:27     ` Maxime Ripard
2022-12-01 10:38       ` Javier Martinez Canillas
     [not found] ` <20221123-rpi-kunit-tests-v2-8-efe5ed518b63@cerno.tech>
2022-11-30  9:13   ` [PATCH v2 08/17] drm/tests: helpers: Allow for a custom device struct to be allocated Javier Martinez Canillas
     [not found] ` <20221123-rpi-kunit-tests-v2-9-efe5ed518b63@cerno.tech>
2022-11-30  9:27   ` [PATCH v2 09/17] drm/tests: helpers: Allow to pass a custom drm_driver Javier Martinez Canillas
     [not found] ` <20221123-rpi-kunit-tests-v2-16-efe5ed518b63@cerno.tech>
2022-11-30 10:09   ` [PATCH v2 16/17] drm/vc4: tests: Fail the current test if we access a register Javier Martinez Canillas
     [not found] ` <20221123-rpi-kunit-tests-v2-17-efe5ed518b63@cerno.tech>
2022-11-30 10:15   ` [PATCH v2 17/17] drm/vc4: tests: Add unit test suite for the PV muxing Javier Martinez Canillas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221201130346.by6zzfdbuyidwekb@houat \
    --to=maxime@cerno.tech \
    --cc=airlied@gmail.com \
    --cc=brendan.higgins@linux.dev \
    --cc=daniel@ffwll.ch \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=davidgow@google.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=javierm@redhat.com \
    --cc=kunit-dev@googlegroups.com \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mairacanal@riseup.net \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).