linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/41] drm: Analog TV Improvements
@ 2022-08-29 13:11 Maxime Ripard
  2022-08-29 13:11 ` [PATCH v2 01/41] drm/tests: Order Kunit tests in Makefile Maxime Ripard
                   ` (41 more replies)
  0 siblings, 42 replies; 128+ messages in thread
From: Maxime Ripard @ 2022-08-29 13:11 UTC (permalink / raw)
  To: Maxime Ripard, Ben Skeggs, David Airlie, Chen-Yu Tsai,
	Thomas Zimmermann, Jani Nikula, Lyude Paul, Philipp Zabel,
	Maarten Lankhorst, Rodrigo Vivi, Tvrtko Ursulin, Jernej Skrabec,
	Samuel Holland, Karol Herbst, Noralf Trønnes, Emma Anholt,
	Daniel Vetter, Joonas Lahtinen
  Cc: Maxime Ripard, Hans de Goede, linux-arm-kernel, Phil Elwell,
	intel-gfx, Dave Stevenson, dri-devel, Dom Cobley, linux-kernel,
	nouveau, linux-sunxi, Mateusz Kwiatkowski, Geert Uytterhoeven

Hi,

Here's a series aiming at improving the command line named modes support,
and more importantly how we deal with all the analog TV variants.

The named modes support were initially introduced to allow to specify the
analog TV mode to be used.

However, this was causing multiple issues:

  * The mode name parsed on the command line was passed directly to the
    driver, which had to figure out which mode it was suppose to match;

  * Figuring that out wasn't really easy, since the video= argument or what
    the userspace might not even have a name in the first place, but
    instead could have passed a mode with the same timings;

  * The fallback to matching on the timings was mostly working as long as
    we were supporting one 525 lines (most likely NSTC) and one 625 lines
    (PAL), but couldn't differentiate between two modes with the same
    timings (NTSC vs PAL-M vs NSTC-J for example);

  * There was also some overlap with the tv mode property registered by
    drm_mode_create_tv_properties(), but named modes weren't interacting
    with that property at all.

  * Even though that property was generic, its possible values were
    specific to each drivers, which made some generic support difficult.

Thus, I chose to tackle in multiple steps:

  * A new TV norm property was introduced, with generic values, each driver
    reporting through a bitmask what standard it supports to the userspace;

  * This option was added to the command line parsing code to be able to
    specify it on the kernel command line, and new atomic_check and reset
    helpers were created to integrate properly into atomic KMS;

  * The named mode parsing code is now creating a proper display mode for
    the given named mode, and the TV standard will thus be part of the
    connector state;

  * Two drivers were converted and tested for now (vc4 and sun4i), with
    some backward compatibility code to translate the old TV mode to the
    new TV mode;

Unit tests were created along the way.

One can switch from NTSC to PAL now using (on vc4)

modetest -M vc4  -s 53:720x480i -w 53:'tv norm':0

modetest -M vc4 -s 53:720x480i -w 53:'tv norm':4

Let me know what you think,
Maxime

Changes from v1 (https://lore.kernel.org/dri-devel/20220728-rpi-analog-tv-properties-v1-0-3d53ae722097@cerno.tech/):
  - Kept the older TV mode property as legacy so we can keep the old drivers functional
  - Renamed the tv_norm property to tv_mode
  - Added a function to create PAL and NTSC compatible display modes
  - Added some helpers to instantiate a mock DRM device in Kunit
  - More Kunit tests
  - Removed the HD analog TV modes
  - Renamed some of the tests
  - Renamed some of the named modes
  - Fixed typos in commit logs
  - Added the various tags

Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>
Cc: "Noralf Trønnes" <noralf@tronnes.org>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: Dom Cobley <dom@raspberrypi.com>
Cc: Phil Elwell <phil@raspberrypi.com>
Cc: <dri-devel@lists.freedesktop.org>

---
Geert Uytterhoeven (1):
      drm/modes: parse_cmdline: Add support for named modes containing dashes

Mateusz Kwiatkowski (5):
      drm/vc4: vec: Refactor VEC TV mode setting
      drm/vc4: vec: Remove redundant atomic_mode_set
      drm/vc4: vec: Fix timings for VEC modes
      drm/vc4: vec: Fix definition of PAL-M mode
      drm/vc4: vec: Add support for more analog TV standards

Maxime Ripard (35):
      drm/tests: Order Kunit tests in Makefile
      drm/tests: Add Kunit Helpers
      drm/atomic-helper: Rename drm_atomic_helper_connector_tv_reset to avoid ambiguity
      drm/connector: Rename subconnector state variable
      drm/atomic: Add TV subconnector property to get/set_property
      drm/connector: Rename legacy TV property
      drm/connector: Only register TV mode property if present
      drm/connector: Rename drm_mode_create_tv_properties
      drm/connector: Add TV standard property
      drm/modes: Add a function to generate analog display modes
      drm/modes: Only consider bpp and refresh before options
      drm/client: Add some tests for drm_connector_pick_cmdline_mode()
      drm/modes: Move named modes parsing to a separate function
      drm/modes: Switch to named mode descriptors
      drm/modes: Fill drm_cmdline mode from named modes
      drm/connector: Add pixel clock to cmdline mode
      drm/connector: Add a function to lookup a TV mode by its name
      drm/modes: Introduce the tv_mode property as a command-line option
      drm/modes: Properly generate a drm_display_mode from a named mode
      drm/modes: Introduce more named modes
      drm/atomic-helper: Add a TV properties reset helper
      drm/atomic-helper: Add an analog TV atomic_check implementation
      drm/vc4: vec: Remove empty mode_fixup
      drm/vc4: vec: Convert to atomic helpers
      drm/vc4: vec: Switch for common modes
      drm/vc4: vec: Use TV Reset implementation
      drm/vc4: vec: Convert to the new TV mode property
      drm/sun4i: tv: Remove unused mode_valid
      drm/sun4i: tv: Convert to atomic hooks
      drm/sun4i: tv: Merge mode_set into atomic_enable
      drm/sun4i: tv: Remove useless function
      drm/sun4i: tv: Remove useless destroy function
      drm/sun4i: tv: Rename error label
      drm/sun4i: tv: Add missing reset assertion
      drm/sun4i: tv: Convert to the new TV mode property

 drivers/gpu/drm/drm_atomic_state_helper.c       | 115 ++++-
 drivers/gpu/drm/drm_atomic_uapi.c               |   8 +
 drivers/gpu/drm/drm_client_modeset.c            |   4 +
 drivers/gpu/drm/drm_connector.c                 | 119 ++++-
 drivers/gpu/drm/drm_modes.c                     | 638 +++++++++++++++++++++++-
 drivers/gpu/drm/gud/gud_connector.c             |   8 +-
 drivers/gpu/drm/i2c/ch7006_drv.c                |   6 +-
 drivers/gpu/drm/i915/display/intel_tv.c         |   2 +-
 drivers/gpu/drm/nouveau/dispnv04/tvnv17.c       |   6 +-
 drivers/gpu/drm/sun4i/sun4i_tv.c                | 198 +++-----
 drivers/gpu/drm/tests/Makefile                  |  16 +-
 drivers/gpu/drm/tests/drm_client_modeset_test.c | 239 +++++++++
 drivers/gpu/drm/tests/drm_cmdline_parser_test.c | 216 ++++++++
 drivers/gpu/drm/tests/drm_kunit_helpers.c       |  54 ++
 drivers/gpu/drm/tests/drm_kunit_helpers.h       |   9 +
 drivers/gpu/drm/tests/drm_modes_test.c          | 131 +++++
 drivers/gpu/drm/vc4/vc4_hdmi.c                  |   2 +-
 drivers/gpu/drm/vc4/vc4_vec.c                   | 422 ++++++++++------
 include/drm/drm_atomic_state_helper.h           |   4 +
 include/drm/drm_connector.h                     | 165 +++++-
 include/drm/drm_mode_config.h                   |  12 +-
 include/drm/drm_modes.h                         |  17 +
 22 files changed, 2057 insertions(+), 334 deletions(-)
---
base-commit: 8869fa666a9e6782c3c896c1fa57d65adca23249
change-id: 20220728-rpi-analog-tv-properties-0914dfcee460

Best regards,
-- 
Maxime Ripard <maxime@cerno.tech>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 128+ messages in thread

end of thread, other threads:[~2022-09-24 15:36 UTC | newest]

Thread overview: 128+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-29 13:11 [PATCH v2 00/41] drm: Analog TV Improvements Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 01/41] drm/tests: Order Kunit tests in Makefile Maxime Ripard
2022-08-29 18:46   ` Noralf Trønnes
2022-08-29 19:02     ` Konstantin Ryabitsev
2022-08-30  8:30       ` Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 02/41] drm/tests: Add Kunit Helpers Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 03/41] drm/atomic-helper: Rename drm_atomic_helper_connector_tv_reset to avoid ambiguity Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 04/41] drm/connector: Rename subconnector state variable Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 05/41] drm/atomic: Add TV subconnector property to get/set_property Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 06/41] drm/connector: Rename legacy TV property Maxime Ripard
2022-08-30 19:27   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 07/41] drm/connector: Only register TV mode property if present Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 08/41] drm/connector: Rename drm_mode_create_tv_properties Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 09/41] drm/connector: Add TV standard property Maxime Ripard
2022-09-01 22:00   ` Mateusz Kwiatkowski
2022-09-02  7:35     ` Geert Uytterhoeven
2022-09-07 12:11       ` Maxime Ripard
2022-09-07 12:10     ` Maxime Ripard
2022-09-07 19:52       ` Mateusz Kwiatkowski
2022-09-09  9:46         ` Maxime Ripard
2022-09-11  4:32           ` Mateusz Kwiatkowski
2022-09-05 10:18   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 10/41] drm/modes: Add a function to generate analog display modes Maxime Ripard
2022-08-30 13:01   ` Maíra Canal
2022-09-08 11:10     ` Maxime Ripard
2022-08-31  1:44   ` Mateusz Kwiatkowski
2022-08-31  8:14     ` Geert Uytterhoeven
2022-09-05 13:32       ` Maxime Ripard
2022-09-05 16:32         ` Mateusz Kwiatkowski
2022-09-07 14:38           ` Maxime Ripard
2022-09-05 13:37     ` Maxime Ripard
2022-09-05 16:44       ` Mateusz Kwiatkowski
2022-09-07 14:34         ` Maxime Ripard
2022-09-07 21:31           ` Mateusz Kwiatkowski
2022-09-09 13:54             ` Maxime Ripard
2022-09-11  4:48               ` Mateusz Kwiatkowski
2022-09-11  4:51                 ` Mateusz Kwiatkowski
2022-09-21 15:05                 ` Maxime Ripard
2022-09-09 14:00             ` Maxime Ripard
2022-09-11  4:30               ` kFYatek
2022-09-21 14:26                 ` Maxime Ripard
2022-09-01 19:09   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 11/41] drm/modes: Only consider bpp and refresh before options Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 12/41] drm/modes: parse_cmdline: Add support for named modes containing dashes Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 13/41] drm/client: Add some tests for drm_connector_pick_cmdline_mode() Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 14/41] drm/modes: Move named modes parsing to a separate function Maxime Ripard
2022-08-30 10:06   ` Geert Uytterhoeven
2022-08-30 10:43     ` Jani Nikula
2022-08-30 12:03       ` Maxime Ripard
2022-08-30 13:36         ` Jani Nikula
2022-09-07  8:39           ` Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 15/41] drm/modes: Switch to named mode descriptors Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 16/41] drm/modes: Fill drm_cmdline mode from named modes Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 17/41] drm/connector: Add pixel clock to cmdline mode Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 18/41] drm/connector: Add a function to lookup a TV mode by its name Maxime Ripard
2022-08-31 19:14   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 19/41] drm/modes: Introduce the tv_mode property as a command-line option Maxime Ripard
2022-08-30 12:34   ` Maíra Canal
2022-08-30 12:44   ` Maíra Canal
2022-09-01 22:46   ` Mateusz Kwiatkowski
2022-09-05 14:28     ` Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 20/41] drm/modes: Properly generate a drm_display_mode from a named mode Maxime Ripard
2022-09-01 22:52   ` Mateusz Kwiatkowski
2022-08-29 13:11 ` [PATCH v2 21/41] drm/modes: Introduce more named modes Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 22/41] drm/atomic-helper: Add a TV properties reset helper Maxime Ripard
2022-08-30 18:40   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 23/41] drm/atomic-helper: Add an analog TV atomic_check implementation Maxime Ripard
2022-08-30 18:49   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 24/41] drm/vc4: vec: Remove empty mode_fixup Maxime Ripard
2022-08-30 15:23   ` Noralf Trønnes
2022-09-07  8:34   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 25/41] drm/vc4: vec: Convert to atomic helpers Maxime Ripard
2022-08-30 15:24   ` Noralf Trønnes
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 26/41] drm/vc4: vec: Refactor VEC TV mode setting Maxime Ripard
2022-08-30 15:29   ` Noralf Trønnes
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 27/41] drm/vc4: vec: Remove redundant atomic_mode_set Maxime Ripard
2022-08-30 15:45   ` Noralf Trønnes
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 28/41] drm/vc4: vec: Fix timings for VEC modes Maxime Ripard
2022-08-30 18:20   ` Noralf Trønnes
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 29/41] drm/vc4: vec: Switch for common modes Maxime Ripard
2022-08-30 18:36   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 30/41] drm/vc4: vec: Fix definition of PAL-M mode Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 31/41] drm/vc4: vec: Use TV Reset implementation Maxime Ripard
2022-08-30 18:51   ` Noralf Trønnes
2022-08-29 13:11 ` [PATCH v2 32/41] drm/vc4: vec: Convert to the new TV mode property Maxime Ripard
2022-08-30 19:01   ` Noralf Trønnes
2022-09-08 11:23     ` Maxime Ripard
2022-09-08 11:31       ` Mateusz Kwiatkowski
2022-09-08 12:16         ` Maxime Ripard
2022-09-08 11:34       ` Noralf Trønnes
2022-08-31  2:23   ` Mateusz Kwiatkowski
2022-09-08 13:18     ` Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 33/41] drm/vc4: vec: Add support for more analog TV standards Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 34/41] drm/sun4i: tv: Remove unused mode_valid Maxime Ripard
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 35/41] drm/sun4i: tv: Convert to atomic hooks Maxime Ripard
2022-09-06 20:02   ` Jernej Škrabec
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 36/41] drm/sun4i: tv: Merge mode_set into atomic_enable Maxime Ripard
2022-09-06 20:04   ` Jernej Škrabec
2022-09-07  7:41     ` Maxime Ripard
2022-09-07 15:09       ` Jernej Škrabec
2022-09-08 14:02   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 37/41] drm/sun4i: tv: Remove useless function Maxime Ripard
2022-09-06 20:06   ` Jernej Škrabec
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 38/41] drm/sun4i: tv: Remove useless destroy function Maxime Ripard
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 39/41] drm/sun4i: tv: Rename error label Maxime Ripard
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 40/41] drm/sun4i: tv: Add missing reset assertion Maxime Ripard
2022-09-07  8:35   ` (subset) " Maxime Ripard
2022-08-29 13:11 ` [PATCH v2 41/41] drm/sun4i: tv: Convert to the new TV mode property Maxime Ripard
2022-09-01 19:35 ` [PATCH v2 00/41] drm: Analog TV Improvements Noralf Trønnes
2022-09-02 11:28   ` Noralf Trønnes
2022-09-05 14:57     ` Maxime Ripard
2022-09-05 15:17       ` Noralf Trønnes
2022-09-07  9:58         ` Maxime Ripard
2022-09-07 10:56           ` Noralf Trønnes
2022-09-07 10:36       ` Stefan Wahren
2022-09-07 16:44         ` Noralf Trønnes
2022-09-10 15:34           ` Noralf Trønnes
2022-09-21 14:03           ` Maxime Ripard
2022-09-24 15:33             ` Noralf Trønnes

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).