From: Maxime Ripard <maxime@cerno.tech>
To: Jernej Skrabec <jernej.skrabec@gmail.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Ben Skeggs <bskeggs@redhat.com>, David Airlie <airlied@linux.ie>,
Maxime Ripard <mripard@kernel.org>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Emma Anholt <emma@anholt.net>, Karol Herbst <kherbst@redhat.com>,
Samuel Holland <samuel@sholland.org>,
Jani Nikula <jani.nikula@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
Daniel Vetter <daniel@ffwll.ch>, Lyude Paul <lyude@redhat.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
Chen-Yu Tsai <wens@csie.org>
Cc: Dom Cobley <dom@raspberrypi.com>,
nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-sunxi@lists.linux.dev, Hans de Goede <hdegoede@redhat.com>,
Noralf Trønnes <noralf@tronnes.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Maxime Ripard <maxime@cerno.tech>,
Mateusz Kwiatkowski <kfyatek+publicgit@gmail.com>,
Phil Elwell <phil@raspberrypi.com>,
linux-arm-kernel@lists.infradead.org
Subject: [Nouveau] [PATCH v2 00/33] drm: Analog TV Improvements
Date: Thu, 22 Sep 2022 16:25:17 +0200 [thread overview]
Message-ID: <20220728-rpi-analog-tv-properties-v2-0-f733a0ed9f90@cerno.tech> (raw)
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 mode 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 mode':1 # NTSC
modetest -M vc4 -s 53:720x576i -w 53:'TV mode':4 # PAL
Let me know what you think,
Maxime
To: David Airlie <airlied@linux.ie>
To: Daniel Vetter <daniel@ffwll.ch>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
To: Maxime Ripard <mripard@kernel.org>
To: Thomas Zimmermann <tzimmermann@suse.de>
To: Emma Anholt <emma@anholt.net>
To: Jani Nikula <jani.nikula@linux.intel.com>
To: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
To: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Ben Skeggs <bskeggs@redhat.com>
To: Karol Herbst <kherbst@redhat.com>
To: Lyude Paul <lyude@redhat.com>
To: Chen-Yu Tsai <wens@csie.org>
To: Jernej Skrabec <jernej.skrabec@gmail.com>
To: Samuel Holland <samuel@sholland.org>
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>
Cc: linux-kernel@vger.kernel.org
Cc: intel-gfx@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-sunxi@lists.linux.dev
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
Changes in v3:
- Applied some of the fixes to vc4 and sun4i
- Renamed the old TV mode property to legacy_mode
- Fixed a bunch of bisection errors
- Removed most of the redundant TV modes
- Added a new None TV mode to not fall back on NTSC by mistake
- Fixed the mode generation function to match better what is expected
- Added some logging to the mode generation function
- Split the improvements to the named mode parsing logic into separate patches
- Added more checks to the TV atomic_check helper
- Link to v2: https://lore.kernel.org/dri-devel/20220728-rpi-analog-tv-properties-v2-0-459522d653a7@cerno.tech/
Changes in v2:
- 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
- Link to v1: https://lore.kernel.org/dri-devel/20220728-rpi-analog-tv-properties-v1-0-3d53ae722097@cerno.tech/
---
Geert Uytterhoeven (1):
drm/modes: parse_cmdline: Add support for named modes containing dashes
Mateusz Kwiatkowski (3):
drm/vc4: vec: Fix definition of PAL-M mode
drm/vc4: vec: Check for VEC output constraints
drm/vc4: vec: Add support for more analog TV standards
Maxime Ripard (29):
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: Bail out of named mode parsing if empty
drm/modes: Bail out of named mode parsing early if it's a number
drm/modes: Bail out of named mode parsing early if it's an option
drm/modes: Bail out of named mode parsing early if it's a status
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: Use TV Reset implementation
drm/vc4: vec: Convert to the new TV mode property
drm/sun4i: tv: Convert to the new TV mode property
drivers/gpu/drm/drm_atomic_state_helper.c | 128 ++++-
drivers/gpu/drm/drm_atomic_uapi.c | 8 +
drivers/gpu/drm/drm_client_modeset.c | 4 +
drivers/gpu/drm/drm_connector.c | 111 +++-
drivers/gpu/drm/drm_modes.c | 658 +++++++++++++++++++++++-
drivers/gpu/drm/gud/gud_connector.c | 12 +-
drivers/gpu/drm/i2c/ch7006_drv.c | 6 +-
drivers/gpu/drm/i915/display/intel_tv.c | 5 +-
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 6 +-
drivers/gpu/drm/sun4i/sun4i_tv.c | 148 ++----
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 | 67 +++
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 | 136 +++++
drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
drivers/gpu/drm/vc4/vc4_vec.c | 339 ++++++++++--
include/drm/drm_atomic_state_helper.h | 4 +
include/drm/drm_connector.h | 92 +++-
include/drm/drm_mode_config.h | 12 +-
include/drm/drm_modes.h | 17 +
22 files changed, 1866 insertions(+), 207 deletions(-)
---
base-commit: 9f5ef9111a4c973a69f9ba22ac73f1f9c634baf6
change-id: 20220728-rpi-analog-tv-properties-0914dfcee460
Best regards,
--
Maxime Ripard <maxime@cerno.tech>
next reply other threads:[~2022-09-22 14:25 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-22 14:25 Maxime Ripard [this message]
2022-09-22 14:25 ` [Nouveau] [PATCH v2 01/33] drm/tests: Order Kunit tests in Makefile Maxime Ripard
2022-09-23 8:06 ` Thomas Zimmermann
2022-09-24 17:33 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 02/33] drm/tests: Add Kunit Helpers Maxime Ripard
2022-09-24 17:56 ` Noralf Trønnes
2022-09-24 18:06 ` Noralf Trønnes
2022-09-26 9:36 ` Maxime Ripard
2022-09-26 12:15 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 03/33] drm/atomic-helper: Rename drm_atomic_helper_connector_tv_reset to avoid ambiguity Maxime Ripard
2022-09-23 8:09 ` Thomas Zimmermann
2022-09-22 14:25 ` [Nouveau] [PATCH v2 04/33] drm/connector: Rename subconnector state variable Maxime Ripard
2022-09-23 8:14 ` Thomas Zimmermann
2022-09-22 14:25 ` [Nouveau] [PATCH v2 05/33] drm/atomic: Add TV subconnector property to get/set_property Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 06/33] drm/connector: Rename legacy TV property Maxime Ripard
2022-09-22 20:44 ` Lyude Paul
2022-09-23 8:19 ` Thomas Zimmermann
2022-09-26 9:50 ` Maxime Ripard
2022-09-26 12:34 ` Thomas Zimmermann
2022-09-24 15:38 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 07/33] drm/connector: Only register TV mode property if present Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 08/33] drm/connector: Rename drm_mode_create_tv_properties Maxime Ripard
2022-09-22 20:45 ` Lyude Paul
2022-09-24 15:43 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 09/33] drm/connector: Add TV standard property Maxime Ripard
2022-09-24 15:52 ` Noralf Trønnes
2022-09-26 10:01 ` Maxime Ripard
2022-09-26 12:59 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 10/33] drm/modes: Add a function to generate analog display modes Maxime Ripard
2022-09-23 9:05 ` Thomas Zimmermann
2022-09-23 9:18 ` Jani Nikula
2022-09-23 10:16 ` Thomas Zimmermann
2022-09-26 10:18 ` Maxime Ripard
2022-09-26 10:55 ` Thomas Zimmermann
2022-09-26 10:17 ` Maxime Ripard
2022-09-26 10:34 ` Geert Uytterhoeven
2022-09-26 11:17 ` Thomas Zimmermann
2022-09-26 12:42 ` Maxime Ripard
2022-09-26 13:02 ` Thomas Zimmermann
2022-09-22 14:25 ` [Nouveau] [PATCH v2 11/33] drm/modes: Only consider bpp and refresh before options Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 12/33] drm/modes: parse_cmdline: Add support for named modes containing dashes Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 13/33] drm/client: Add some tests for drm_connector_pick_cmdline_mode() Maxime Ripard
2022-09-23 9:15 ` Thomas Zimmermann
2022-09-23 9:26 ` Javier Martinez Canillas
2022-09-23 10:30 ` Thomas Zimmermann
2022-09-23 11:01 ` Javier Martinez Canillas
2022-09-23 11:14 ` Maxime Ripard
2022-09-23 11:59 ` Jani Nikula
2022-09-22 14:25 ` [Nouveau] [PATCH v2 14/33] drm/modes: Move named modes parsing to a separate function Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 15/33] drm/modes: Bail out of named mode parsing if empty Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 16/33] drm/modes: Bail out of named mode parsing early if it's a number Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 17/33] drm/modes: Bail out of named mode parsing early if it's an option Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 18/33] drm/modes: Bail out of named mode parsing early if it's a status Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 19/33] drm/modes: Switch to named mode descriptors Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 20/33] drm/modes: Fill drm_cmdline mode from named modes Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 21/33] drm/connector: Add pixel clock to cmdline mode Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 22/33] drm/connector: Add a function to lookup a TV mode by its name Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 23/33] drm/modes: Introduce the tv_mode property as a command-line option Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 24/33] drm/modes: Properly generate a drm_display_mode from a named mode Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 25/33] drm/modes: Introduce more named modes Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 26/33] drm/atomic-helper: Add a TV properties reset helper Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 27/33] drm/atomic-helper: Add an analog TV atomic_check implementation Maxime Ripard
2022-09-24 15:58 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 28/33] drm/vc4: vec: Fix definition of PAL-M mode Maxime Ripard
2022-09-24 15:59 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 29/33] drm/vc4: vec: Use TV Reset implementation Maxime Ripard
2022-09-22 14:25 ` [Nouveau] [PATCH v2 30/33] drm/vc4: vec: Check for VEC output constraints Maxime Ripard
2022-09-24 16:00 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 31/33] drm/vc4: vec: Convert to the new TV mode property Maxime Ripard
2022-09-24 17:09 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 32/33] drm/vc4: vec: Add support for more analog TV standards Maxime Ripard
2022-09-24 17:12 ` Noralf Trønnes
2022-09-22 14:25 ` [Nouveau] [PATCH v2 33/33] drm/sun4i: tv: Convert to the new TV mode property Maxime Ripard
2022-09-22 14:31 ` [Nouveau] [PATCH v2 00/33] drm: Analog TV Improvements Maxime Ripard
2022-09-25 15:58 ` Noralf Trønnes
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=20220728-rpi-analog-tv-properties-v2-0-f733a0ed9f90@cerno.tech \
--to=maxime@cerno.tech \
--cc=airlied@linux.ie \
--cc=bskeggs@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dom@raspberrypi.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=emma@anholt.net \
--cc=geert@linux-m68k.org \
--cc=hdegoede@redhat.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=jernej.skrabec@gmail.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=kfyatek+publicgit@gmail.com \
--cc=kherbst@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=noralf@tronnes.org \
--cc=nouveau@lists.freedesktop.org \
--cc=phil@raspberrypi.com \
--cc=rodrigo.vivi@intel.com \
--cc=samuel@sholland.org \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=tzimmermann@suse.de \
--cc=wens@csie.org \
/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).