From: Karthik B S <karthik.b.s@intel.com>
To: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org, paulo.r.zanoni@intel.com
Subject: Re: [Intel-gfx] [PATCH v3 3/5] drm/i915: Add checks specific to async flips
Date: Wed, 24 Jun 2020 17:23:10 +0530 [thread overview]
Message-ID: <5a4f9bfe-6664-e388-6a69-bf5aa89087b9@intel.com> (raw)
In-Reply-To: <20200617155719.GN6112@intel.com>
On 6/17/2020 9:27 PM, Ville Syrjälä wrote:
> On Thu, May 28, 2020 at 11:09:29AM +0530, Karthik B S wrote:
>> Support added only for async flips on primary plane.
>> If flip is requested on any other plane, reject it.
>>
>> Make sure there is no change in fbc, offset and framebuffer modifiers
>> when async flip is requested.
>>
>> If any of these are modified, reject async flip.
>>
>> v2: -Replace DRM_ERROR (Paulo)
>> -Add check for changes in OFFSET, FBC, RC(Paulo)
>>
>> v3: -Removed TODO as benchmarking tests have been run now.
>>
>> Signed-off-by: Karthik B S <karthik.b.s@intel.com>
>> ---
>> drivers/gpu/drm/i915/display/intel_display.c | 55 ++++++++++++++++++++
>> 1 file changed, 55 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index eb1c360431ae..2307f924732c 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -14798,6 +14798,53 @@ static bool intel_cpu_transcoders_need_modeset(struct intel_atomic_state *state,
>> return false;
>> }
>>
>> +static int intel_atomic_check_async(struct intel_atomic_state *state)
>> +{
>> + struct drm_plane *plane;
>> + struct drm_plane_state *plane_state;
>> + struct intel_crtc_state *old_crtc_state, *new_crtc_state;
>> + struct intel_plane_state *new_plane_state, *old_plane_state;
>> + struct intel_crtc *crtc;
>> + struct intel_plane *intel_plane;
>> + int i, j;
>> +
>> + /*FIXME: Async flip is only supported for primary plane currently
>> + * Support for overlays to be added.
>> + */
>> + for_each_new_plane_in_state(&state->base, plane, plane_state, j) {
>> + if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
>
> I think skl+ can do async flips on any universal planes. Earlier
> platforms were limited to primary only I think. Can't remember if g4x
> already had usable async flip via mmio. Pretty sure at least ilk+ had
> it.
>
Thanks for the review.
Sure I'll update this.
> Also intel_ types are preferred, so this should use those, and I
> think since we're talking about hw planes we should rather check for
> PLANE_PRIMARY here.
Sure, I'll change this.
>
>> + DRM_DEBUG_KMS("Async flips is NOT supported for non-primary plane\n");
>> + return -EINVAL;
>> + }
>> + }
>> +
>> + for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
>> + new_crtc_state, i) {
>> + if (old_crtc_state->enable_fbc != new_crtc_state->enable_fbc) {
>
> enable_fbc is bork, so this probably doesn't do anything particularly
> sensible.
>
Sure. I'll remove this.
>> + DRM_DEBUG_KMS("FBC status cannot be changed in async flip\n");
>> + return -EINVAL;
>> + }
>> + }
>> +
>> + for_each_oldnew_intel_plane_in_state(state, intel_plane, old_plane_state,
>> + new_plane_state, i) {
>> + if ((old_plane_state->color_plane[0].x !=
>> + new_plane_state->color_plane[0].x) ||
>> + (old_plane_state->color_plane[0].y !=
>> + new_plane_state->color_plane[0].y)) {
>
> Don't think we've even calculated those by the time you call this. So
> this stuff has to be called much later I think.
>
Sure. I'll check this and move it to the right place.
>> + DRM_DEBUG_KMS("Offsets cannot be changed in async\n");
>> + return -EINVAL;
>> + }
>> +
>> + if (old_plane_state->uapi.fb->modifier !=
>> + new_plane_state->uapi.fb->modifier) {
>
> We seem to be missing a lot of state here. Basically I think async flip
> can *only* change the plane surface address, so anything else changing
> we should reject. I guess if this comes in via the legacy page flip path
> the code/helpers do prevent most other things changing, but not sure.
> I don't really like relying on such core checks since someone could
> blindly expose this via the atomic ioctl without having those same
> restrictions in place.
>
Yes. I have not added the checks which were present in the legacy page
flip path. Does it mean that I should add those checks also in here? Or
Am I missing something in understanding the comment? Is there any other
way to make sure only the plane surface address is changing.
> We might also want a dedicated plane hook for async flips since writing
> all the plane registers for these is rather pointless. I'm not even sure
> what happens with all the other double buffered registers if you write
> them and then do an async surface address update.
>
Sure. I'll make a dedicated plane hook for async flips so that we only
update the Surface address register here.
> Also if we want more accurate timestmaps based on the flip timestamp
> register then we're going to have to limit async flips to single plane
> per pipe at a time becasue the timestamp can only be sampled from
> a single plane.
>
Sure. I'll make sure async flips are limited to a single plane per pipe.
>> + DRM_DEBUG_KMS("Framebuffer modifiers cannot be changed in async flip\n");
>> + return -EINVAL;
>> + }
>> + }
>> + return 0;
>> +}
>> +
>> /**
>> * intel_atomic_check - validate state object
>> * @dev: drm device
>> @@ -14825,6 +14872,14 @@ static int intel_atomic_check(struct drm_device *dev,
>> if (ret)
>> goto fail;
>>
>> + for_each_new_intel_crtc_in_state(state, crtc, new_crtc_state, i) {
>> + if (new_crtc_state->uapi.async_flip) {
>> + ret = intel_atomic_check_async(state);
>
> Kinda redundant to call this multiple times. I think the async_flip flag
> is actually misplaced. It should probably be in the drm_atomic_state
> instead of the crtc state.
>
> Also still not a huge fan of using the "async flip" termonology in
> the drm core. IMO we should just adopt the vulkan terminology for
> this stuff so it's obviuos what people mean when they talk about these
> things.
A little lost here.Could you please help me out? I should move the
async_flip flag to drm_atomic_state from crtc_state and then change its
name? What would be the proper vulkan terminology for this?
Thanks and Regards,
Karthik.B.S
>
>> + if (ret)
>> + goto fail;
>> + }
>> + }
>> +
>> for_each_oldnew_intel_crtc_in_state(state, crtc, old_crtc_state,
>> new_crtc_state, i) {
>> if (!needs_modeset(new_crtc_state)) {
>> --
>> 2.17.1
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2020-06-24 11:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-28 5:39 [Intel-gfx] [PATCH v3 0/5] Asynchronous flip implementation for i915 Karthik B S
2020-05-28 5:39 ` [Intel-gfx] [PATCH v3 1/5] drm/i915: Add enable/disable flip done and flip done handler Karthik B S
2020-06-10 22:33 ` Paulo Zanoni
2020-06-17 9:58 ` Daniel Vetter
2020-06-17 14:45 ` Kazlauskas, Nicholas
2020-06-24 11:29 ` Karthik B S
2020-06-17 15:30 ` Ville Syrjälä
2020-06-24 11:39 ` Karthik B S
2020-06-24 11:14 ` Karthik B S
2020-06-24 11:00 ` Karthik B S
2020-05-28 5:39 ` [Intel-gfx] [PATCH v3 2/5] drm/i915: Add support for async flips in I915 Karthik B S
2020-05-28 5:39 ` [Intel-gfx] [PATCH v3 3/5] drm/i915: Add checks specific to async flips Karthik B S
2020-06-17 15:57 ` Ville Syrjälä
2020-06-24 11:53 ` Karthik B S [this message]
2020-05-28 5:39 ` [Intel-gfx] [PATCH v3 4/5] drm/i915: Do not call drm_crtc_arm_vblank_event in " Karthik B S
2020-05-28 5:39 ` [Intel-gfx] [PATCH v3 5/5] drm/i915: Enable async flips in i915 Karthik B S
2020-05-28 6:35 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for Asynchronous flip implementation for i915 (rev3) Patchwork
2020-05-28 6:36 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2020-05-28 6:56 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2020-05-28 8:57 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2020-05-28 17:47 ` [Intel-gfx] [PATCH v3 0/5] Asynchronous flip implementation for i915 Paulo Zanoni
2020-05-29 5:13 ` Karthik B S
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=5a4f9bfe-6664-e388-6a69-bf5aa89087b9@intel.com \
--to=karthik.b.s@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=paulo.r.zanoni@intel.com \
--cc=ville.syrjala@linux.intel.com \
/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