From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Rajat Jain <rajatja@google.com>,
Jani Nikula <jani.nikula@linux.intel.com>,
Lyude <lyude@redhat.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Mark Gross <mgross@linux.intel.com>,
Andy Shevchenko <andy@infradead.org>,
Daniel Vetter <daniel@ffwll.ch>, David Airlie <airlied@linux.ie>,
Pekka Paalanen <pekka.paalanen@collabora.com>,
Mario Limonciello <mario.limonciello@outlook.com>,
Mark Pearson <markpearson@lenovo.com>,
Sebastien Bacher <seb128@ubuntu.com>,
Marco Trevisan <marco.trevisan@canonical.com>,
Emil Velikov <emil.l.velikov@gmail.com>,
intel-gfx <intel-gfx@lists.freedesktop.org>,
dri-devel@lists.freedesktop.org,
platform-driver-x86@vger.kernel.org
Subject: Re: [Intel-gfx] [PATCH 9/9] drm/i915: Add privacy-screen support
Date: Fri, 17 Sep 2021 20:04:26 +0300 [thread overview]
Message-ID: <YUTKmkCZ4RE095Ys@intel.com> (raw)
In-Reply-To: <686d5177-3bf9-ddb0-5e55-a2e9969f36f7@redhat.com>
On Fri, Sep 17, 2021 at 06:42:04PM +0200, Hans de Goede wrote:
> Hi,
>
> On 9/17/21 6:25 PM, Ville Syrjälä wrote:
> > On Fri, Sep 17, 2021 at 04:37:14PM +0200, Hans de Goede wrote:
> >> Hi,
> >>
> >> On 9/16/21 3:45 PM, Ville Syrjälä wrote:
> >>> On Mon, Sep 06, 2021 at 09:35:19AM +0200, Hans de Goede wrote:
> >>>> Add support for eDP panels with a built-in privacy screen using the
> >>>> new drm_privacy_screen class.
> >>>>
> >>>> One thing which stands out here is the addition of these 2 lines to
> >>>> intel_atomic_commit_tail:
> >>>>
> >>>> for_each_new_connector_in_state(&state->base, connector, ...
> >>>> drm_connector_update_privacy_screen(connector, state);
> >>>>
> >>>> It may seem more logical to instead take care of updating the
> >>>> privacy-screen state by marking the crtc as needing a modeset and then
> >>>> do this in both the encoder update_pipe (for fast-sets) and enable
> >>>> (for full modesets) callbacks. But ATM these callbacks only get passed
> >>>> the new connector_state and these callbacks are all called after
> >>>> drm_atomic_helper_swap_state() at which point there is no way to get
> >>>> the old state from the new state.
> >>>
> >>> Pretty sure the full atomic state is plumbed all the way
> >>> down these days.
> >>
> >> Including the old state? AFAICT the old-state is being thrown away
> >> from drm_atomic_helper_swap_state(),
> >
> > No. That's just when those annoying foo_state->state pointers get
> > clobbered. We've been moving away from using those and just
> > plumbing the entire atomic state everywhere.
> >
> > Nothing actually gets freed until the whole drm_atomic_state gets
> > nuked after the commit is done.
> >
> >> so if we do this in a different
> >> place then we don't have access to the old-state.
> >>
> >>
> >>>
> >>>>
> >>>> Without access to the old state, we do not know if the sw_state of
> >>>> the privacy-screen has changes so we would need to call
> >>>> drm_privacy_screen_set_sw_state() unconditionally. This is undesirable
> >>>> since all current known privacy-screen providers use ACPI calls which
> >>>> are somewhat expensive to make.
> >>>
> >>> I doubt anyone is going to care about a bit of overhead for a modeset.
> >>
> >> But this is not a modeset, this is more like changing the backlight brightness,
> >> atm the code does not set the needs_modeset when only the privacy-screen
> >> sw-state has changed.
> >>
> >> Also in my experience the firmware (AML) code which we end up calling
> >> for this is not the highest quality code, often it has interesting
> >> issues / unhandled corner cases. So in my experience with ACPI we
> >> really should try to avoid these calls unless we absolutely must make them,
> >> but I guess not making unnecessary calls is something which could be handled
> >> inside the actual privacy-screen driver instead.
> >>
> >>> The usual rule is that a modeset doesn't skip anything. That way we
> >>> can be 100% sure we remeber to update everythinbg. For fastsets I guess
> >>> one could argue skipping it if not needed, but not sure even that is
> >>> warranted.
> >>
> >> Right, but again this is not a full modeset.
> >
> > In general fastset is is just an optimized modeset. Userspace asked
> > for a modeset, but we noticed it doesn't need it. I don't think
> > there is a particular expectation that it's super fast.
> >
> > But if this is really annoyingly slow in some actual usecase
>
> Yeah these acpi-calls might take like a 100 ms easily, so
> we really want to avoid it if it is not necessary.
>
> > then
> > one way to avoid that need to compare against the old state is just
> > introduce another foo_changed flag.
>
> Ok, so I have the feeling that you have an idea of how you think this
> should be done / how this code should look instead of what I have
> currently.
>
> Can you perhaps provide a rough sketch / description of how you
> think this should be done (instead of the current implementation) ?
>
> Should I do the update from the the encoder update_pipe (for fast-sets)
> and enable (for full modesets) callbacks instead as I mention in
> the commit message ?
>
> And since I still only want to do the call if there is an actual
> change, where could I best do the old / new sw_state change cmp to
> set the new foo_changed flag?
>
I guess it could be just something like this:
intel_digital_connector_duplicate_state()
{
foo_changed = false;
}
intel_digital_connector_atomic_check()
{
if (old_foo != new_foo) {
mode_changed = true;
foo_changed = true;
}
}
update_pipe()
{
if (foo_changed)
update_foo();
}
--
Ville Syrjälä
Intel
WARNING: multiple messages have this Message-ID (diff)
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Rajat Jain <rajatja@google.com>,
Jani Nikula <jani.nikula@linux.intel.com>,
Lyude <lyude@redhat.com>,
Joonas Lahtinen <joonas.lahtinen@linux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@intel.com>,
Mark Gross <mgross@linux.intel.com>,
Andy Shevchenko <andy@infradead.org>,
Daniel Vetter <daniel@ffwll.ch>, David Airlie <airlied@linux.ie>,
Pekka Paalanen <pekka.paalanen@collabora.com>,
Mario Limonciello <mario.limonciello@outlook.com>,
Mark Pearson <markpearson@lenovo.com>,
Sebastien Bacher <seb128@ubuntu.com>,
Marco Trevisan <marco.trevisan@canonical.com>,
Emil Velikov <emil.l.velikov@gmail.com>,
intel-gfx <intel-gfx@lists.freedesktop.org>,
dri-devel@lists.freedesktop.org,
platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH 9/9] drm/i915: Add privacy-screen support
Date: Fri, 17 Sep 2021 20:04:26 +0300 [thread overview]
Message-ID: <YUTKmkCZ4RE095Ys@intel.com> (raw)
In-Reply-To: <686d5177-3bf9-ddb0-5e55-a2e9969f36f7@redhat.com>
On Fri, Sep 17, 2021 at 06:42:04PM +0200, Hans de Goede wrote:
> Hi,
>
> On 9/17/21 6:25 PM, Ville Syrjälä wrote:
> > On Fri, Sep 17, 2021 at 04:37:14PM +0200, Hans de Goede wrote:
> >> Hi,
> >>
> >> On 9/16/21 3:45 PM, Ville Syrjälä wrote:
> >>> On Mon, Sep 06, 2021 at 09:35:19AM +0200, Hans de Goede wrote:
> >>>> Add support for eDP panels with a built-in privacy screen using the
> >>>> new drm_privacy_screen class.
> >>>>
> >>>> One thing which stands out here is the addition of these 2 lines to
> >>>> intel_atomic_commit_tail:
> >>>>
> >>>> for_each_new_connector_in_state(&state->base, connector, ...
> >>>> drm_connector_update_privacy_screen(connector, state);
> >>>>
> >>>> It may seem more logical to instead take care of updating the
> >>>> privacy-screen state by marking the crtc as needing a modeset and then
> >>>> do this in both the encoder update_pipe (for fast-sets) and enable
> >>>> (for full modesets) callbacks. But ATM these callbacks only get passed
> >>>> the new connector_state and these callbacks are all called after
> >>>> drm_atomic_helper_swap_state() at which point there is no way to get
> >>>> the old state from the new state.
> >>>
> >>> Pretty sure the full atomic state is plumbed all the way
> >>> down these days.
> >>
> >> Including the old state? AFAICT the old-state is being thrown away
> >> from drm_atomic_helper_swap_state(),
> >
> > No. That's just when those annoying foo_state->state pointers get
> > clobbered. We've been moving away from using those and just
> > plumbing the entire atomic state everywhere.
> >
> > Nothing actually gets freed until the whole drm_atomic_state gets
> > nuked after the commit is done.
> >
> >> so if we do this in a different
> >> place then we don't have access to the old-state.
> >>
> >>
> >>>
> >>>>
> >>>> Without access to the old state, we do not know if the sw_state of
> >>>> the privacy-screen has changes so we would need to call
> >>>> drm_privacy_screen_set_sw_state() unconditionally. This is undesirable
> >>>> since all current known privacy-screen providers use ACPI calls which
> >>>> are somewhat expensive to make.
> >>>
> >>> I doubt anyone is going to care about a bit of overhead for a modeset.
> >>
> >> But this is not a modeset, this is more like changing the backlight brightness,
> >> atm the code does not set the needs_modeset when only the privacy-screen
> >> sw-state has changed.
> >>
> >> Also in my experience the firmware (AML) code which we end up calling
> >> for this is not the highest quality code, often it has interesting
> >> issues / unhandled corner cases. So in my experience with ACPI we
> >> really should try to avoid these calls unless we absolutely must make them,
> >> but I guess not making unnecessary calls is something which could be handled
> >> inside the actual privacy-screen driver instead.
> >>
> >>> The usual rule is that a modeset doesn't skip anything. That way we
> >>> can be 100% sure we remeber to update everythinbg. For fastsets I guess
> >>> one could argue skipping it if not needed, but not sure even that is
> >>> warranted.
> >>
> >> Right, but again this is not a full modeset.
> >
> > In general fastset is is just an optimized modeset. Userspace asked
> > for a modeset, but we noticed it doesn't need it. I don't think
> > there is a particular expectation that it's super fast.
> >
> > But if this is really annoyingly slow in some actual usecase
>
> Yeah these acpi-calls might take like a 100 ms easily, so
> we really want to avoid it if it is not necessary.
>
> > then
> > one way to avoid that need to compare against the old state is just
> > introduce another foo_changed flag.
>
> Ok, so I have the feeling that you have an idea of how you think this
> should be done / how this code should look instead of what I have
> currently.
>
> Can you perhaps provide a rough sketch / description of how you
> think this should be done (instead of the current implementation) ?
>
> Should I do the update from the the encoder update_pipe (for fast-sets)
> and enable (for full modesets) callbacks instead as I mention in
> the commit message ?
>
> And since I still only want to do the call if there is an actual
> change, where could I best do the old / new sw_state change cmp to
> set the new foo_changed flag?
>
I guess it could be just something like this:
intel_digital_connector_duplicate_state()
{
foo_changed = false;
}
intel_digital_connector_atomic_check()
{
if (old_foo != new_foo) {
mode_changed = true;
foo_changed = true;
}
}
update_pipe()
{
if (foo_changed)
update_foo();
}
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2021-09-17 17:04 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-06 7:35 [Intel-gfx] [PATCH 0/9] drm: Add privacy-screen class and connector properties Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 1/9] drm/connector: Add support for privacy-screen properties (v4) Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-15 19:48 ` [Intel-gfx] " Lyude Paul
2021-09-15 19:48 ` Lyude Paul
2021-09-16 8:26 ` [Intel-gfx] " Jani Nikula
2021-09-16 8:26 ` Jani Nikula
2021-09-06 7:35 ` [Intel-gfx] [PATCH 2/9] drm: Add privacy-screen class (v3) Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-15 20:01 ` [Intel-gfx] " Lyude Paul
2021-09-15 20:01 ` Lyude Paul
2021-09-16 8:49 ` [Intel-gfx] " Hans de Goede
2021-09-16 8:49 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 3/9] drm/privacy-screen: Add X86 specific arch init code Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-16 8:51 ` [Intel-gfx] " Jani Nikula
2021-09-16 8:51 ` Jani Nikula
2021-09-16 9:18 ` [Intel-gfx] " Hans de Goede
2021-09-16 9:18 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 4/9] drm/privacy-screen: Add notifier support Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-15 20:26 ` [Intel-gfx] " Lyude Paul
2021-09-15 20:26 ` Lyude Paul
2021-09-16 9:06 ` [Intel-gfx] " Hans de Goede
2021-09-16 9:06 ` Hans de Goede
2021-09-16 16:50 ` [Intel-gfx] " Lyude Paul
2021-09-16 16:50 ` Lyude Paul
2021-09-06 7:35 ` [Intel-gfx] [PATCH 5/9] drm/connector: Add a drm_connector privacy-screen helper functions Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 6/9] platform/x86: thinkpad_acpi: Add hotkey_notify_extended_hotkey() helper Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 7/9] platform/x86: thinkpad_acpi: Get privacy-screen / lcdshadow ACPI handles only once Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 8/9] platform/x86: thinkpad_acpi: Register a privacy-screen device Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-15 20:55 ` [Intel-gfx] " Lyude Paul
2021-09-15 20:55 ` Lyude Paul
2021-09-16 9:09 ` [Intel-gfx] " Hans de Goede
2021-09-16 9:09 ` Hans de Goede
2021-09-06 7:35 ` [Intel-gfx] [PATCH 9/9] drm/i915: Add privacy-screen support Hans de Goede
2021-09-06 7:35 ` Hans de Goede
2021-09-15 21:11 ` [Intel-gfx] " Lyude Paul
2021-09-15 21:11 ` Lyude Paul
2021-09-16 9:12 ` [Intel-gfx] " Hans de Goede
2021-09-16 9:12 ` Hans de Goede
2021-09-16 9:40 ` [Intel-gfx] " Jani Nikula
2021-09-16 9:40 ` Jani Nikula
2021-09-16 10:32 ` [Intel-gfx] " Hans de Goede
2021-09-16 10:32 ` Hans de Goede
2021-09-20 21:06 ` [Intel-gfx] " Lyude Paul
2021-09-20 21:06 ` Lyude Paul
2021-09-16 14:04 ` [Intel-gfx] " Ville Syrjälä
2021-09-16 14:04 ` Ville Syrjälä
2021-09-17 14:23 ` [Intel-gfx] " Hans de Goede
2021-09-17 14:23 ` Hans de Goede
2021-09-16 13:45 ` [Intel-gfx] " Ville Syrjälä
2021-09-16 13:45 ` Ville Syrjälä
2021-09-17 14:37 ` [Intel-gfx] " Hans de Goede
2021-09-17 14:37 ` Hans de Goede
2021-09-17 16:25 ` [Intel-gfx] " Ville Syrjälä
2021-09-17 16:25 ` Ville Syrjälä
2021-09-17 16:42 ` [Intel-gfx] " Hans de Goede
2021-09-17 16:42 ` Hans de Goede
2021-09-17 17:04 ` Ville Syrjälä [this message]
2021-09-17 17:04 ` Ville Syrjälä
2021-09-06 8:46 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm: Add privacy-screen class and connector properties (rev4) Patchwork
2021-09-06 8:49 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2021-09-06 9:17 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-09-06 11:16 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-09-15 21:12 ` [Intel-gfx] [PATCH 0/9] drm: Add privacy-screen class and connector properties Lyude Paul
2021-09-15 21:12 ` Lyude Paul
2021-09-16 9:30 ` [Intel-gfx] " Hans de Goede
2021-09-16 9:30 ` Hans de Goede
2021-09-16 10:14 ` [Intel-gfx] " Jani Nikula
2021-09-16 10:14 ` Jani Nikula
-- strict thread matches above, loose matches on Subject: below --
2020-07-08 16:43 Hans de Goede
2020-07-08 16:43 ` [Intel-gfx] [PATCH 9/9] drm/i915: Add privacy-screen support Hans de Goede
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=YUTKmkCZ4RE095Ys@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=airlied@linux.ie \
--cc=andy@infradead.org \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=emil.l.velikov@gmail.com \
--cc=hdegoede@redhat.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=marco.trevisan@canonical.com \
--cc=mario.limonciello@outlook.com \
--cc=markpearson@lenovo.com \
--cc=mgross@linux.intel.com \
--cc=mripard@kernel.org \
--cc=pekka.paalanen@collabora.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rajatja@google.com \
--cc=rodrigo.vivi@intel.com \
--cc=seb128@ubuntu.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.