brintos

brintos / linux-shallow public Read only

0
0
Text · 4.9 KiB · 6ed51f9 Raw
183 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Kunit test for drm_modes functions4 */5 6#include <drm/drm_drv.h>7#include <drm/drm_kunit_helpers.h>8#include <drm/drm_modes.h>9 10#include <kunit/test.h>11 12#include <linux/units.h>13 14struct drm_test_modes_priv {15	struct drm_device *drm;16	struct device *dev;17};18 19static int drm_test_modes_init(struct kunit *test)20{21	struct drm_test_modes_priv *priv;22 23	priv = kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL);24	KUNIT_ASSERT_NOT_NULL(test, priv);25 26	priv->dev = drm_kunit_helper_alloc_device(test);27	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->dev);28 29	priv->drm = __drm_kunit_helper_alloc_drm_device(test, priv->dev,30							sizeof(*priv->drm), 0,31							DRIVER_MODESET);32	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->drm);33 34	test->priv = priv;35 36	return 0;37}38 39static void drm_test_modes_analog_tv_ntsc_480i(struct kunit *test)40{41	struct drm_test_modes_priv *priv = test->priv;42	struct drm_display_mode *mode;43 44	mode = drm_analog_tv_mode(priv->drm,45				  DRM_MODE_TV_MODE_NTSC,46				  13500 * HZ_PER_KHZ, 720, 480,47				  true);48	KUNIT_ASSERT_NOT_NULL(test, mode);49 50	KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 60);51	KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);52 53	/* BT.601 defines hsync_start at 736 for 480i */54	KUNIT_EXPECT_EQ(test, mode->hsync_start, 736);55 56	/*57	 * The NTSC standard expects a line to take 63.556us. With a58	 * pixel clock of 13.5 MHz, a pixel takes around 74ns, so we59	 * need to have 63556ns / 74ns = 858.60	 *61	 * This is also mandated by BT.601.62	 */63	KUNIT_EXPECT_EQ(test, mode->htotal, 858);64 65	KUNIT_EXPECT_EQ(test, mode->vdisplay, 480);66	KUNIT_EXPECT_EQ(test, mode->vtotal, 525);67}68 69static void drm_test_modes_analog_tv_ntsc_480i_inlined(struct kunit *test)70{71	struct drm_test_modes_priv *priv = test->priv;72	struct drm_display_mode *expected, *mode;73 74	expected = drm_analog_tv_mode(priv->drm,75				      DRM_MODE_TV_MODE_NTSC,76				      13500 * HZ_PER_KHZ, 720, 480,77				      true);78	KUNIT_ASSERT_NOT_NULL(test, expected);79 80	mode = drm_mode_analog_ntsc_480i(priv->drm);81	KUNIT_ASSERT_NOT_NULL(test, mode);82 83	KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected, mode));84}85 86static void drm_test_modes_analog_tv_pal_576i(struct kunit *test)87{88	struct drm_test_modes_priv *priv = test->priv;89	struct drm_display_mode *mode;90 91	mode = drm_analog_tv_mode(priv->drm,92				  DRM_MODE_TV_MODE_PAL,93				  13500 * HZ_PER_KHZ, 720, 576,94				  true);95	KUNIT_ASSERT_NOT_NULL(test, mode);96 97	KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 50);98	KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);99 100	/* BT.601 defines hsync_start at 732 for 576i */101	KUNIT_EXPECT_EQ(test, mode->hsync_start, 732);102 103	/*104	 * The PAL standard expects a line to take 64us. With a pixel105	 * clock of 13.5 MHz, a pixel takes around 74ns, so we need to106	 * have 64000ns / 74ns = 864.107	 *108	 * This is also mandated by BT.601.109	 */110	KUNIT_EXPECT_EQ(test, mode->htotal, 864);111 112	KUNIT_EXPECT_EQ(test, mode->vdisplay, 576);113	KUNIT_EXPECT_EQ(test, mode->vtotal, 625);114}115 116static void drm_test_modes_analog_tv_pal_576i_inlined(struct kunit *test)117{118	struct drm_test_modes_priv *priv = test->priv;119	struct drm_display_mode *expected, *mode;120 121	expected = drm_analog_tv_mode(priv->drm,122				      DRM_MODE_TV_MODE_PAL,123				      13500 * HZ_PER_KHZ, 720, 576,124				      true);125	KUNIT_ASSERT_NOT_NULL(test, expected);126 127	mode = drm_mode_analog_pal_576i(priv->drm);128	KUNIT_ASSERT_NOT_NULL(test, mode);129 130	KUNIT_EXPECT_TRUE(test, drm_mode_equal(expected, mode));131}132 133static void drm_test_modes_analog_tv_mono_576i(struct kunit *test)134{135	struct drm_test_modes_priv *priv = test->priv;136	struct drm_display_mode *mode;137 138	mode = drm_analog_tv_mode(priv->drm,139				  DRM_MODE_TV_MODE_MONOCHROME,140				  13500 * HZ_PER_KHZ, 720, 576,141				  true);142	KUNIT_ASSERT_NOT_NULL(test, mode);143 144	KUNIT_EXPECT_EQ(test, drm_mode_vrefresh(mode), 50);145	KUNIT_EXPECT_EQ(test, mode->hdisplay, 720);146 147	/* BT.601 defines hsync_start at 732 for 576i */148	KUNIT_EXPECT_EQ(test, mode->hsync_start, 732);149 150	/*151	 * The PAL standard expects a line to take 64us. With a pixel152	 * clock of 13.5 MHz, a pixel takes around 74ns, so we need to153	 * have 64000ns / 74ns = 864.154	 *155	 * This is also mandated by BT.601.156	 */157	KUNIT_EXPECT_EQ(test, mode->htotal, 864);158 159	KUNIT_EXPECT_EQ(test, mode->vdisplay, 576);160	KUNIT_EXPECT_EQ(test, mode->vtotal, 625);161}162 163static struct kunit_case drm_modes_analog_tv_tests[] = {164	KUNIT_CASE(drm_test_modes_analog_tv_mono_576i),165	KUNIT_CASE(drm_test_modes_analog_tv_ntsc_480i),166	KUNIT_CASE(drm_test_modes_analog_tv_ntsc_480i_inlined),167	KUNIT_CASE(drm_test_modes_analog_tv_pal_576i),168	KUNIT_CASE(drm_test_modes_analog_tv_pal_576i_inlined),169	{ }170};171 172static struct kunit_suite drm_modes_analog_tv_test_suite = {173	.name = "drm_modes_analog_tv",174	.init = drm_test_modes_init,175	.test_cases = drm_modes_analog_tv_tests,176};177 178kunit_test_suite(drm_modes_analog_tv_test_suite);179 180MODULE_AUTHOR("Maxime Ripard <maxime@cerno.tech>");181MODULE_DESCRIPTION("Kunit test for drm_modes functions");182MODULE_LICENSE("GPL");183