platform-driver-x86.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: "Daniel Dadap" <ddadap@nvidia.com>,
	"Ben Skeggs" <bskeggs@redhat.com>,
	"Karol Herbst" <kherbst@redhat.com>, Lyude <lyude@redhat.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"Jani Nikula" <jani.nikula@linux.intel.com>,
	"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
	"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
	"Tvrtko Ursulin" <tvrtko.ursulin@linux.intel.com>,
	"Alex Deucher" <alexander.deucher@amd.com>,
	"Christian König" <christian.koenig@amd.com>,
	Xinhui <Xinhui.Pan@amd.com>,
	"Rafael J . Wysocki" <rafael@kernel.org>,
	"Mika Westerberg" <mika.westerberg@linux.intel.com>,
	"Lukas Wunner" <lukas@wunner.de>,
	"Mark Gross" <markgross@kernel.org>,
	"Andy Shevchenko" <andy@kernel.org>
Cc: nouveau@lists.freedesktop.org, Daniel Vetter <daniel@ffwll.ch>,
	David Airlie <airlied@linux.ie>,
	intel-gfx <intel-gfx@lists.freedesktop.org>,
	dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org,
	Len Brown <lenb@kernel.org>,
	linux-acpi@vger.kernel.org, platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH v2 01/29] ACPI: video: Add acpi_video_backlight_use_native() helper
Date: Wed, 24 Aug 2022 13:08:23 +0200	[thread overview]
Message-ID: <e56d7379-5f6f-9ae0-cd74-f570df990c1d@redhat.com> (raw)
In-Reply-To: <98cb14c9-6b9a-9410-98e3-24c31950597d@nvidia.com>

Hi Daniel,

On 8/17/22 22:18, Daniel Dadap wrote:
> On 8/17/22 10:05 AM, Hans de Goede wrote:

<snip>

>>> One further potential difficulty that I anticipate is that not all dynamic mux systems use the EC backlight driver (or a similar, GPU-agnostic driver), and rather have whichever GPU happens to be connected at the time be responsible for the backlight. I had initially thought that supporting the EC backlight interface was a requirement for OEMs to implement dynamic mux support, but I recently learned this is not true in all cases. On Windows, this requires coordinating the backlight controls of the two GPU drivers across a mux switch, to load the state of the switched-away-from GPU and set it on the switched-to GPU. I imagine for these systems we may need to do some similar save/restore, probably managed by vga-switcheroo, but it would require having both GPU drivers register their own native backlight handlers (and possibly while one of them is not connected to the panel).
>> Right, systems where the backlight control basically gets muxed from one GPU to the other GPU together with the panel's video-data lines exist. Currently Linux already register both native GPU backlight handlers in this case. e.g. /sys/class/backlight/intel_backlight and /sys/class/backlight/nouveau_bl.
>>
>> Userspace (atleast GNOME) has code which checks which GPU is actually connected to the panel using the panel's drm connector's status on each GPU (only one of which should report connected) and then uses the backlight interface associated with the connected connector.
>>
>>> Dynamic mux switching isn't actually supported on Linux, yet, so we should be able to kick this particular can a little further down the road, but in the meantime we should probably start planning for how best to handle this sort of system under the "only one backlight handler per panel" model. Maybe the vga-switcheroo handler can register its own backlight handler, that then negotiates the actual backlight settings between the relevant GPU drivers, possibly through a new vga-switcheroo client callback. I'll have to think about this a bit more.
>> The "only one backlight handler per panel" model is actualy "only one backlight handler per panel"-connector since the new API uses drm properties on the drm connector object. With 2 GPUs both using their native backlight control there will be 2 connectors and userspace will/must use the one which is actually reporting that it is connected to the panel so this will work fine.
> 
> 
> That is a useful distinction. Would it fall under userspace's reponsibility, then, to keep the brightness level synchronized across drm_connectors that share a panel via a mux when performing a switch?

Yes typically the 2 different GPU drivers know nothing about the other GPU and I think it would be good to keep things that way. When switching userspace will see a disconnect on the panel connector on one GPU and then a connect on the connector on the other GPU at which point it knows that it should set the brightness on the now connected connector instead of on the old one.

> I suppose it's a cleaner design to leave it up to userspace to select which backlight interface to manipulate.

Ack.

> That is a harder decision for userspace to make with the existing design, which doesn't cleanly map sysfs backlight interfaces to individual connectors, but if the UAPI is going to change to a drm_connector property, backlight interfaces are obviously strongly correlated with the connectors.

Right.

>  I'm not sure how easy it is for userspace to solve the problem of maintaining consistent brightness levels across a mux switch for an OLED panel, where there really isn't a concept of a "backlight" to speak of, but I suppose it wouldn't be any easier to do that in the kernel (e.g. with vga-switcheroo).

The OLED brightness is send over DP-aux to the panel AFAIK, so as long as both drivers export the raw range of the panel's setting and don't try to get smart and scale or whatever then their should be a 1:1 mapping. Ideally for something like this both drivers would be using some shared drm-helper code / library to talk to the backlight, thus guaranteeing that both drivers interpret the scale the same.


>> If anything the nvidia-wmi-ec-backlight case is a but more tricky, the "only one backlight handler per panel" thing is actually more of a "only one backlight handler per laptop" rule which is intended for (to be written) drm helpers for the new properties to be able to get the handler from the backlight class in the non native case by just taking the first registered backlight handler.
>>
>> This means that in a dual GPU setup with nvidia-wmi-ec-backlight both GPU's panel connector objects will have their brightness properties pointing to / proxying the same backlight class device. Userspace should really be only writing to the one which is actually connected though. I guess we could even enforce this
>> in the kernel and reject brightness property writes on unconnected connectors.
>>
>>>> Please let me know if the proposed solution works for you and
>>>> if you want me to make ACPI_VIDEO_REGISTER_BACKLIGHT_DELAY a
>>>> module-option for the next version.
>>>
>>> I do think it should be workable, apart from the concern I mentioned above about knowing when to set the module option to disable the ACPI video backlight driver.
>> Note the option does not disable the ACPI video backlight driver. It disables the acpi_video code timing out and deciding to go ahead and register its backlight itself (providing that at the moment of timeout acpi_video_get_backlight_type() returns acpi_backlight_video). Any code (e.g. the nvidia binary driver) can still call acpi_video_register_backlight() itself to try and register even if the timeout handling has been disabled.
>>
>> The idea is that without the timeout the probe order looks like this:
>>
>> 1. acpi_video initializes, does not register backlight
>> 2. GPU driver initalizes, it either registers a native backlight handler;
>>     or it calls acpi_video_register_backlight()
>> 3. acpi_video_register_backlight() runs (if called) and calls:
>>     acpi_video_get_backlight_type()
>> 4.1 if acpi_video_get_backlight_type() returns acpi_backlight_video
>>     /sys/class/backlight/acpi_video# is/are registered
>> 4.2 if acpi_video_get_backlight_type() returns somerthing else, e.g.
>>     acpi_backlight_nvidia_wmi_ec, acpi_video_register_backlight()
>>     does nothing
>>
>>
>> The timeout is to ensure that 3. still happens, even if
>> there is no native GPU driver, because of e.g.
>> nomodeset on the kernel cmdline.
>>
>> With the nvidia binary driver, that driver can call
>> acpi_video_register_backlight() if necessary so the timeout
>> is not necessary.
>>
>> I'm currently preparing v3 of this patchset. I'll modify the
>> patch introducing the timeout to make it configurable
>> (with 0 disabling it completely).
> 
> 
> Okay. That clarification makes sense. Would it be reasonable to disable the timeout by default on systems with Win8 or later _OSI?

Hmm, there are Win8 or later systems which actually need acpi_video because the other method(s) to control the backlight don't work (we have a list of quirks for those) and more importantly there are Win8 or later systems where the video bios tables say: "Don't use the GPU for backlight control". We do need the acpi_video_register_backlight() call to happen on both those cases eventually. Also this will lead to 2 different code-paths making things more complicated, so no I don't think that that is a good idea.

Regards,

Hans


  reply	other threads:[~2022-08-24 11:08 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-12 19:38 [PATCH v2 00/29] drm/kms: Stop registering multiple /sys/class/backlight devs for a single display Hans de Goede
2022-07-12 19:38 ` [PATCH v2 01/29] ACPI: video: Add acpi_video_backlight_use_native() helper Hans de Goede
2022-07-21 21:24   ` Daniel Dadap
2022-07-21 21:30     ` Daniel Dadap
2022-08-02 11:31       ` Hans de Goede
2022-08-02 16:49         ` Daniel Dadap
2022-08-17 15:05           ` Hans de Goede
2022-08-17 20:18             ` Daniel Dadap
2022-08-24 11:08               ` Hans de Goede [this message]
2022-07-12 19:38 ` [PATCH v2 02/29] drm/i915: Don't register backlight when another backlight should be used Hans de Goede
2022-07-12 19:38 ` [PATCH v2 03/29] drm/amdgpu: " Hans de Goede
2022-07-20 16:44   ` Alex Deucher
2022-07-20 16:46     ` Alex Deucher
2022-08-17 13:05       ` Hans de Goede
2022-07-12 19:38 ` [PATCH v2 04/29] drm/radeon: " Hans de Goede
2022-07-20 16:45   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 05/29] drm/nouveau: " Hans de Goede
2022-07-14 21:04   ` Lyude Paul
2022-07-12 19:38 ` [PATCH v2 06/29] ACPI: video: Drop backlight_device_get_by_type() call from acpi_video_get_backlight_type() Hans de Goede
2022-07-12 19:38 ` [PATCH v2 07/29] ACPI: video: Remove acpi_video_bus from list before tearing it down Hans de Goede
2022-07-12 19:38 ` [PATCH v2 08/29] ACPI: video: Simplify acpi_video_unregister_backlight() Hans de Goede
2022-07-12 19:38 ` [PATCH v2 09/29] ACPI: video: Make backlight class device registration a separate step Hans de Goede
2022-07-20 16:50   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 10/29] ACPI: video: Remove code to unregister acpi_video backlight when a native backlight registers Hans de Goede
2022-07-12 19:38 ` [PATCH v2 11/29] drm/i915: Call acpi_video_register_backlight() (v2) Hans de Goede
2022-07-12 19:38 ` [PATCH v2 12/29] drm/nouveau: Register ACPI video backlight when nv_backlight registration fails Hans de Goede
2022-07-12 19:38 ` [PATCH v2 13/29] drm/amdgpu: Register ACPI video backlight when skipping amdgpu backlight registration Hans de Goede
2022-07-20 16:53   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 14/29] drm/radeon: Register ACPI video backlight when skipping radeon " Hans de Goede
2022-07-20 16:54   ` Alex Deucher
2022-07-12 19:38 ` [PATCH v2 15/29] ACPI: video: Refactor acpi_video_get_backlight_type() a bit Hans de Goede
2022-07-12 19:38 ` [PATCH v2 16/29] ACPI: video: Add Nvidia WMI EC brightness control detection Hans de Goede
2022-07-12 20:13   ` Daniel Dadap
2022-07-15 11:59     ` Hans de Goede
2022-07-15 15:32       ` Daniel Dadap
2022-07-15 16:04         ` Hans de Goede
2022-08-17 12:22       ` Hans de Goede
2022-08-17 16:57         ` Daniel Dadap
2022-07-12 19:38 ` [PATCH v2 17/29] ACPI: video: Add Apple GMUX " Hans de Goede
2022-07-12 19:38 ` [PATCH v2 18/29] platform/x86: apple-gmux: Stop calling acpi/video.h functions Hans de Goede
2022-07-12 19:39 ` [PATCH v2 19/29] platform/x86: toshiba_acpi: Stop using acpi_video_set_dmi_backlight_type() Hans de Goede
2022-07-12 19:39 ` [PATCH v2 20/29] platform/x86: acer-wmi: Move backlight DMI quirks to acpi/video_detect.c Hans de Goede
2022-07-12 20:24   ` Daniel Dadap
2022-07-15 12:01     ` Hans de Goede
2022-07-12 19:39 ` [PATCH v2 21/29] platform/x86: asus-wmi: Drop DMI chassis-type check from backlight handling Hans de Goede
2022-07-12 19:39 ` [PATCH v2 22/29] platform/x86: asus-wmi: Move acpi_backlight=vendor quirks to ACPI video_detect.c Hans de Goede
2022-07-12 19:39 ` [PATCH v2 23/29] platform/x86: asus-wmi: Move acpi_backlight=native " Hans de Goede
2022-07-12 19:39 ` [PATCH v2 24/29] platform/x86: samsung-laptop: Move acpi_backlight=[vendor|native] " Hans de Goede
2022-07-12 19:39 ` [PATCH v2 25/29] ACPI: video: Remove acpi_video_set_dmi_backlight_type() Hans de Goede
2022-07-12 19:39 ` [PATCH v2 26/29] ACPI: video: Drop "Samsung X360" acpi_backlight=native quirk Hans de Goede
2022-07-12 19:39 ` [PATCH v2 27/29] ACPI: video: Drop Clevo/TUXEDO NL5xRU and NL5xNU acpi_backlight=native quirks Hans de Goede
2022-07-13 17:07   ` Werner Sembach
2022-07-13 17:21     ` Limonciello, Mario
2022-07-14 19:43       ` Hans de Goede
2022-07-12 19:39 ` [PATCH v2 28/29] ACPI: video: Fix indentation of video_detect_dmi_table[] entries Hans de Goede
2022-07-12 19:39 ` [PATCH v2 29/29] drm/todo: Add entry about dealing with brightness control on devices with > 1 panel Hans de Goede
2022-07-14 18:42 ` [PATCH v2 00/29] drm/kms: Stop registering multiple /sys/class/backlight devs for a single display Rafael J. Wysocki
2022-07-14 21:49 ` Lyude Paul

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=e56d7379-5f6f-9ae0-cd74-f570df990c1d@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=Xinhui.Pan@amd.com \
    --cc=airlied@linux.ie \
    --cc=alexander.deucher@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=andy@kernel.org \
    --cc=bskeggs@redhat.com \
    --cc=christian.koenig@amd.com \
    --cc=daniel@ffwll.ch \
    --cc=ddadap@nvidia.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=joonas.lahtinen@linux.intel.com \
    --cc=kherbst@redhat.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=lukas@wunner.de \
    --cc=lyude@redhat.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=markgross@kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=nouveau@lists.freedesktop.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rafael@kernel.org \
    --cc=rodrigo.vivi@intel.com \
    --cc=tvrtko.ursulin@linux.intel.com \
    --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).