From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7375D198E6F for ; Mon, 27 Jan 2025 20:33:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738010018; cv=none; b=Xy/xq3l4VxN7+VuWLzLE+YqVbAX254B07wLt4M9/dEwrQwafPaTNRbZ3FvpMEir87M3Jk8VJJS3YLzdOIL3u9rwmIh1kezNfk0NMMsutC61gQJvj/t0NYsyfJNkWLvJP1AlmutoVGbsqJ8AIf01dL4kVtMFDVw1LfBZ7wdmZZks= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738010018; c=relaxed/simple; bh=NTI9TjqQDQggF8p55aVXRdlALps6RiURFnA1AVWq79c=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=D4UdH+pIqkPlf5MHMrDnfWCJWIZP35TvJwV1Hjl1s29ocY9KOvxAylTbc0LEh3/bzANREukXoZ/Wev3yn5iHG/ccbuawRg+6OKq3ceVClD1VlqhpGvz2UIZAROqgxJw/rlMyJncjckwV9+l0h0zj33VUl4Rpk/8Hfd5DJrisYmg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch; spf=none smtp.mailfrom=ffwll.ch; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b=an9zI9QR; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ffwll.ch Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=ffwll.ch Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="an9zI9QR" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-385e3621518so2560253f8f.1 for ; Mon, 27 Jan 2025 12:33:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; t=1738010014; x=1738614814; darn=vger.kernel.org; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:from:to:cc:subject:date:message-id:reply-to; bh=LHlAU+aKr/dxx0IxJmV16kOpPtw83xm16nrP0qwigsg=; b=an9zI9QRN6uTSPO5hYc1/IBZpINo/c/PIeZCbuuT1kt7xYFVRJ2DbvO5SKqKkl1ucL R1+VPWn1J7GdxYS7rBVovYuZxAAe8n6gwtxaiFVhNOjx/Igm7fxY7qH7ky4Umv+dPoQH cStFO8GSlKCA0t94Y7RgVe9fDIaWbAJZIlRrE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738010014; x=1738614814; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:mail-followup-to:message-id:subject:cc:to :from:date:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=LHlAU+aKr/dxx0IxJmV16kOpPtw83xm16nrP0qwigsg=; b=jyY1CXnQFLkg8H0kTWGrSiLJz8PB78yj+b8ZxuZU3FZ1oskaSyMqIMal58OHM0PynL MVucaztqgsTzioxWD66pBAvs26+frIJap+KaE9yJlM/UIfUoNpKPWWy/gc4wpSltAesW YY4TwNZLbWzybmO92zCOQ6xiKG/fPZt1qzzs8ntmhfPHu7RJYGPabwOnrDlbMsLq6gNZ MANCDK5TO5kilJ63Zoe9R305gVjWq1nSwk6jtA2dvgvTlRDZCSQyORYiAQD9LwQvZ2/R J4Hytxa1FOhPHeMw+FAyLTShlozwrY4k6x5ZlXLKkJ4uRAd7r2oJTYg38D7JzYEgBuOa nz5g== X-Forwarded-Encrypted: i=1; AJvYcCWfuzUq4atk46EwLxnmM2f6OIpag4yqxgWF1mu7siuIsjDuYV7yABcLL6Lq49FJfuOcoSHbnaawhgcoMwM=@vger.kernel.org X-Gm-Message-State: AOJu0YxQeAajf6nI2YIMhzw72rCvgW8tJ86awktPSPgWFc7tzxMMV8Y/ tPjic99nT1DwNJXd7FBBP9NikbFXHF5P8qhtruJT5uo8+AorSZ4jRW7pDNDAXJk= X-Gm-Gg: ASbGncutF3vWCAZAd6R/rnSNQKk84zJPvxYPxNnrlI0M9PrjSRrF9vlRdOaEflqnA4R iigAG1lMareqbmCT5jzCnCP8LTLMco7wAZZ355cuBaROVKz8h49mpfP9nW0OD7ziB5p5o36jyg3 7PhMgK+bo/1yT6kYnYZx33vDm7XkCwiFOtw+rlghFu31zS9q6iJz51nRp0dj7uz+q7Yh9aSZYyB pGls7ThIOu36x00MopEI4Tx3HjGA2Fxfw4jFYkThWglfd5Ii1MOEQ7nZTWqUlI/gZBkngZ7JEfo /Lw6NoPfi+aP7+lJ X-Google-Smtp-Source: AGHT+IH0vfwaZ5FtpfbmyV/3c/RdLiJKI4pdEYXimFT0rr8h9vEqhth5+Wx3dHaOGw+H0BRuLECquw== X-Received: by 2002:a05:6000:2a9:b0:38a:86fe:52b5 with SMTP id ffacd0b85a97d-38bf566274amr42820224f8f.14.1738010013410; Mon, 27 Jan 2025 12:33:33 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:57f4:0:5485:d4b2:c087:b497]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38c2a189283sm12234191f8f.59.2025.01.27.12.33.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jan 2025 12:33:32 -0800 (PST) Date: Mon, 27 Jan 2025 21:33:30 +0100 From: Simona Vetter To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: Dmitry Baryshkov , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org Subject: Re: [PATCH 0/6] drm: introduce atomic_needs_modeset() callbacks Message-ID: Mail-Followup-To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= , Dmitry Baryshkov , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Dave Airlie , Jocelyn Falempe , Rob Clark , Abhinav Kumar , Sean Paul , Marijn Suijten , Kalyan Thota , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org References: <20250124-atomic-needs-modeset-v1-0-b0c05c9eda0f@linaro.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Operating-System: Linux phenom 6.12.11-amd64 On Fri, Jan 24, 2025 at 06:14:23PM +0200, Ville Syrjälä wrote: > On Fri, Jan 24, 2025 at 04:37:39PM +0100, Simona Vetter wrote: > > On Fri, Jan 24, 2025 at 03:12:41PM +0200, Ville Syrjälä wrote: > > > On Fri, Jan 24, 2025 at 01:59:15PM +0100, Simona Vetter wrote: > > > > On Fri, Jan 24, 2025 at 02:10:54PM +0200, Ville Syrjälä wrote: > > > > > On Fri, Jan 24, 2025 at 01:14:18PM +0200, Dmitry Baryshkov wrote: > > > > > > There are several drivers which attempt to upgrading the commit to the > > > > > > full mode set from their per-object atomic_check() callbacks without > > > > > > calling the drm_atomic_helper_check_modeset() or > > > > > > drm_atomic_helper_check() again (as requested by those functions). > > > > > > > > > > I don't really understand why any of that is supposedly necessary. > > > > > drm_atomic_helper_check_modeset() is really all about the > > > > > connector routing stuff, so if none of that is changing then there > > > > > is no point in calling it again. Eg. in i915 we call it just at > > > > > the start, and later on we flag internal modesets all over the > > > > > place, but none of those need drm_atomic_helper_check_modeset() > > > > > because nothing routing related will have changed. > > > > > > > > i915 doesn't need this because as you say, it doesn't rely on the atomic > > > > helper modeset tracking much at all, but it's all internal. This is for > > > > drivers which rely more or less entirely on > > > > drm_atomic_crtc_needs_modeset(). > > > > > > > > Also note that it's not just about connector routing, but about adding all > > > > the necessary additional states with > > > > drm_atomic_add_affected_connectors/planes and re-running all the various > > > > state computation hooks for those. Again i915 hand-rolls that all. > > > > > > IIRC it only runs the connectors' atomic_check(), > > > nothing else really. But maybe that's changed since I last > > > looked at it. > > > > It calls into connector/bridge/crtc callbacks related to modesets and mode > > validation. > > The pre-atomic mode_fixup stuff? Are people still using that in > atomic drivers? Hmm, it does look like someone added some real > atomic_check() calls in there, which is a slightly surprising > place to find them. Well for modesets you do need hooks to compute the state, and that means a modern one that passes the actual atomic state stuff as parameters. > > The thing is a few hundred lines in total if you include all the split out > > subfunctions. Like the kerneldoc pretty clearly spells out that it does a > > lot more than what you've listed here. Just i915 doesn't used most of > > that. > > In my book a function should do one thing. And if you do have some > kind of massive dispatcher function then it should be very abstract > and just call some smaller functions to do each step. > tldr; I don't like any function that doesn't fit on my screen. > > Anyways, my main worry is that someone adds some new logic/checks > somewhere that assumes that you can't flag modesets later without > calling the helper. Which is clearly not correct. Eg. most of the > modesets we do are just done to get the hardware turned off while > we reprogram some global resource that doesn't know how to > synchronize with active pipes, not because anything changed that > would need further checks/recomputation/etc. That is a bit a risk, but I think thus far all that function has done is figure out the routing and call _lots_ of callbacks on all the various objects to figure out modesets. And with connectors, bridges and crtcs (it's kidna convenient for many drivers to split the plane flip from the modeset related crtc state computations) there's just a lot of these. Beyond the routing (which could be split out I guess) I think we've succeeded at keeping random funny things out of these functions, because they are documented to be idempotent (if all your callbacks are ofc). -Sima > > > Anyways it feels like we're throwing everything and the > > > kitchen sink into a single function here. Maybe it should be > > > split into two or more functions with clear responsibilities? > > > > I'm not sure you can split it up much, because modesetting is complicated. > > Like even if you'd want to split out just the routing update logic that's > > a pretty big mess with a bunch of callbacks so that we can pick the right > > encoders to add the right bridges. And then have a 2nd function that does > > the actual state computation/validation. > > > > Not sure that's worth it, since only benefit would be for drivers like > > i915 that almost entirely hand-roll their own atomic check flow and really > > only need the connector routing bits. I guess if you're bored you could > > give it a stab. > > Yeah, I guess I could try to carve it up a bit when I get bored > with other stuff. > > > -Sima > > > > > > > > > > > > > So yeah i915 doesn't need this. > > > > -Sima > > > > > > > > > > > > > > > > > > > > > As discussed on IRC, add separate atomic_needs_modeset() callbacks, > > > > > > whose only purpose is to allow the plane, connector, encoder or CRTC to > > > > > > specify that for whatever reasons corresponding CRTC should undergo a > > > > > > full modeset. The helpers will call these callbacks in a proper place, > > > > > > adding affected objects and calling required functions as required. > > > > > > > > > > > > The MSM patches depend on the msm-next tree and the series at [1]. The > > > > > > plan is to land core changes through drm-misc, then merge drm-misc-next > > > > > > into msm-next and merge remaining msm-specific patches through the > > > > > > msm-next tree. > > > > > > > > > > > > [1] https://lore.kernel.org/dri-devel/20250123-drm-dirty-modeset-v2-0-bbfd3a6cd1a4@linaro.org/ > > > > > > > > > > > > Signed-off-by: Dmitry Baryshkov > > > > > > --- > > > > > > Dmitry Baryshkov (6): > > > > > > drm/atomic-helper: add atomic_needs_modeset callbacks > > > > > > drm/mgag200: move format check to drm_plane_helper.atomic_needs_modeset > > > > > > drm/msm/dpu: stop upgrading commits by enabling allow_modeset > > > > > > drm/msm/dpu: move CTM check to drm_crtc_helper.atomic_needs_modeset > > > > > > drm/msm/dpu: use atomic_needs_modeset for CDM check > > > > > > drm/msm: drop msm_atomic_check wrapper > > > > > > > > > > > > drivers/gpu/drm/drm_atomic_helper.c | 59 ++++++++++++++++++ > > > > > > drivers/gpu/drm/mgag200/mgag200_drv.h | 2 + > > > > > > drivers/gpu/drm/mgag200/mgag200_mode.c | 27 ++++++--- > > > > > > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 15 +++++ > > > > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 44 +++++++++----- > > > > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 4 -- > > > > > > drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 26 -------- > > > > > > drivers/gpu/drm/msm/msm_atomic.c | 29 --------- > > > > > > drivers/gpu/drm/msm/msm_drv.h | 1 - > > > > > > drivers/gpu/drm/msm/msm_kms.c | 2 +- > > > > > > drivers/gpu/drm/msm/msm_kms.h | 7 --- > > > > > > include/drm/drm_modeset_helper_vtables.h | 92 +++++++++++++++++++++++++++++ > > > > > > 12 files changed, 219 insertions(+), 89 deletions(-) > > > > > > --- > > > > > > base-commit: 0936f0e54426177b0f0263ddf806ed5e13487db6 > > > > > > change-id: 20250123-atomic-needs-modeset-8f6a8243a3f7 > > > > > > prerequisite-change-id: 20241222-drm-dirty-modeset-88079bd27ae6:v2 > > > > > > prerequisite-patch-id: 0c61aabfcd13651203f476985380cbf4d3c299e6 > > > > > > prerequisite-patch-id: c6026f08011c288fd301676e9fa6f46d0cc1dab7 > > > > > > prerequisite-patch-id: b0cb06d5c88791d6e4755d879ced0d5050aa3cbf > > > > > > prerequisite-patch-id: fd72ddde9dba0df053113bc505c213961a9760da > > > > > > > > > > > > Best regards, > > > > > > -- > > > > > > Dmitry Baryshkov > > > > > > > > > > -- > > > > > Ville Syrjälä > > > > > Intel > > > > > > > > -- > > > > Simona Vetter > > > > Software Engineer, Intel Corporation > > > > http://blog.ffwll.ch > > > > > > -- > > > Ville Syrjälä > > > Intel > > > > -- > > Simona Vetter > > Software Engineer, Intel Corporation > > http://blog.ffwll.ch > > -- > Ville Syrjälä > Intel -- Simona Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch