On Tue, 29 Aug 2023 at 12:22, <neil.armstr...@linaro.org> wrote: > > On 28/08/2023 19:07, Abhinav Kumar wrote: > > Hi Neil > > > > Sorry I didnt respond earlier on this thread. > > > > On 8/28/2023 1:49 AM, neil.armstr...@linaro.org wrote: > >> Hi Jessica, > >> > >> On 25/08/2023 20:37, Jessica Zhang wrote: > >>> > >>> > >>> On 8/21/2023 3:01 AM, neil.armstr...@linaro.org wrote: > >>>> Hi Maxime, > >>>> > >>>> On 21/08/2023 10:17, Maxime Ripard wrote: > >>>>> Hi, > >>>>> > >>>>> On Fri, Aug 18, 2023 at 10:25:48AM +0200, neil.armstr...@linaro.org > >>>>> wrote: > >>>>>> On 17/08/2023 20:35, Dmitry Baryshkov wrote: > >>>>>>> On 16/08/2023 10:51, neil.armstr...@linaro.org wrote: > >>>>>>>> Sending HS commands will always work on any controller, it's all > >>>>>>>> about LP commands. The Samsung panels you listed only send HS > >>>>>>>> commands so they can use prepare_prev_first and work on any > >>>>>>>> controllers. > >>>>>>> > >>>>>>> I think there is some misunderstanding there, supported by the > >>>>>>> description of the flag. > >>>>>>> > >>>>>>> If I remember correctly, some hosts (sunxi) can not send DCS > >>>>>>> commands after enabling video stream and switching to HS mode, see > >>>>>>> [1]. Thus, as you know, most of the drivers have all DSI panel setup > >>>>>>> commands in drm_panel_funcs::prepare() / > >>>>>>> drm_bridge_funcs::pre_enable() callbacks, not paying attention > >>>>>>> whether these commands are to be sent in LP or in HS mode. > >>>>>>> > >>>>>>> Previously DSI source drivers could power on the DSI link either in > >>>>>>> mode_set() or in pre_enable() callbacks, with mode_set() being the > >>>>>>> hack to make panel/bridge drivers to be able to send commands from > >>>>>>> their prepare() / pre_enable() callbacks. > >>>>>>> > >>>>>>> With the prev_first flags being introduced, we have established that > >>>>>>> DSI link should be enabled in DSI host's pre_enable() callback and > >>>>>>> switched to HS mode (be it command or video) in the enable() > >>>>>>> callback. > >>>>>>> > >>>>>>> So far so good. > >>>>>> > >>>>>> It seems coherent, I would like first to have a state of all DSI host > >>>>>> drivers and make this would actually work first before adding the > >>>>>> prev_first flag to all the required panels. > >>>>> > >>>>> This is definitely what we should do in an ideal world, but at least for > >>>>> sunxi there's no easy way for it at the moment. There's no documentation > >>>>> for it and the driver provided doesn't allow this to happen. > >>>>> > >>>>> Note that I'm not trying to discourage you or something here, I'm simply > >>>>> pointing out that this will be something that we will have to take into > >>>>> account. And it's possible that other drivers are in a similar > >>>>> situation. > >>>>> > >>>>>>> Unfortunately this change is not fully backwards-compatible. This > >>>>>>> requires that all DSI panels sending commands from prepare() should > >>>>>>> have the prepare_prev_first flag. In some sense, all such patches > >>>>>>> might have Fixes: 5ea6b1702781 ("drm/panel: Add prepare_prev_first > >>>>>>> flag to drm_panel"). > >>>>>> > >>>>>> This kind of migration should be done *before* any possible > >>>>>> regression, not the other way round. > >>>>>> > >>>>>> If all panels sending commands from prepare() should have the > >>>>>> prepare_prev_first flag, then it should be first, check for > >>>>>> regressions then continue. > >>>>>> > >>>>>> <snip> > >>>>>> > >>>>>>>> > >>>>>>>> I understand, but this patch doesn't qualify as a fix for > >>>>>>>> 9e15123eca79 and is too late to be merged in drm-misc-next for > >>>>>>>> v6.6, and since 9e15123eca79 actually breaks some support it > >>>>>>>> should be reverted (+ deps) since we are late in the rc cycles. > >>>>>>> > >>>>>>> If we go this way, we can never reapply these patches. There will be > >>>>>>> no guarantee that all panel drivers are completely converted. We > >>>>>>> already have a story without an observable end - > >>>>>>> DRM_BRIDGE_ATTACH_NO_CONNECTOR. > >>>>>> > >>>>>> I don't understand this point, who would block re-applying the patches > >>>>>> ? > >>>>>> > >>>>>> The migration to DRM_BRIDGE_ATTACH_NO_CONNECTOR was done over multiple > >>>>>> Linux version and went smoothly because we reverted regressing patches > >>>>>> and restarted when needed, I don't understand why we can't do this > >>>>>> here aswell. > >>>>>> > >>>>>>> I'd consider that the DSI driver is correct here and it is about the > >>>>>>> panel drivers that require fixes patches. If you care about the > >>>>>>> particular Fixes tag, I have provided one several lines above. > >>>>>> > >>>>>> Unfortunately it should be done in the other way round, prepare for > >>>>>> migration, then migrate, > >>>>>> > >>>>>> I mean if it's a required migration, then it should be done and I'll > >>>>>> support it from both bridge and panel PoV. > >>>>>> > >>>>>> So, first this patch has the wrong Fixes tag, and I would like a > >>>>>> better explanation on the commit message in any case. Then I would > >>>>>> like to have an ack from some drm-misc maintainers before applying it > >>>>>> because it fixes a patch that was sent via the msm tree thus per the > >>>>>> drm-misc rules I cannot apply it via the drm-misc-next-fixes tree. > >>>>> > >>>>> Sorry, it's not clear to me what you'd like our feedback on exactly? > >>>> > >>>> So let me resume the situation: > >>>> > >>>> - pre_enable_prev_first was introduced in [1] > >>>> - some panels made use of pre_enable_prev_first > >>>> - Visionox VTDR6130 was enabled on SM8550 systems and works on v6.5 > >>>> kernels and before > >>>> - patch [2] was introduced on MSM DRM tree, breaking VTDR6130 on SM8550 > >>>> systems (and probably other Video mode panels on Qcom platforms) > >>>> - this fix was sent late, and is now too late to be merged via > >>>> drm-misc-next > >>> > >>> Hi Neil and Maxime, > >>> > >>> I agree with Neil that 9e15123eca79 was the commit that introduced the > >>> issue (since it changed the MSM DSI host behavior). > >>> > >>> However, I'm not too keen on simply reverting that patch because > >>> > >>> 1) it's not wrong to have the dsi_power_on in pre_enable. Arguably, it > >>> actually makes more sense to power on DSI host in pre_enable than in > >>> modeset (since modeset is meant for setting the bridge mode), and > >> > >> I never objected that, it's the right path to go. > >> > > > > Ack. > > > >>> > >>> 2) I think it would be good practice to keep specific bridge chip checks > >>> out of the DSI host driver. > >> > >> We discussed about a plan with Maxime and Dmitry about that, and it would > >> require adding > >> a proper atomic panel API to handle a "negociation" with the host > >> controller. > >> > > > > May I know what type of negotiation is needed here? > > > >>> > >>> > >>> That being said, what do you think about setting the default value of > >>> prepare_prev_first to true (possibly in panel_bridge_attach)? > >> > >> As Dmitry pointed, all panels sending LP commands in pre_enable() should > >> have prepare_prev_first to true. > >> > > > > I wanted to respond to this earlier but didnt get a chance. > > > > From the documentation of this flag, this has nothing to do whether panels > > are sending the LP commands (commands sent in LP mode) OR HS commands > > (commands sent in HS mode). > > > > This is more about sending the commands whether the lanes are in LP11 state > > before sending the ON commands. > > > > 195 * The previous controller should be prepared first, before the > > prepare > > 196 * for the panel is called. This is largely required for DSI panels > > 197 * where the DSI host controller should be initialised to LP-11 > > before > > 198 * the panel is powered up. > > 199 */ > > 200 bool prepare_prev_first; > > > > These are conceptually different and thats what I explained Dmitry in our > > call. > > > > Sending ON commands in LP11 state is a requirement I have seen with many > > panels and its actually the right expectation as well to send the commands > > when the lanes are in a well-defined LP11 state. > > > > From the panels which I have seen, the opposite is never true (OR i have > > never seen it this way). > > > > The parade chip was the only exception and that issue was never root-caused > > leading us to have bridge specific handling in MSM driver. > > > > In other words, it would be very unlikely that a panel should be broken or > > shouldn't work when the ON commands are sent when the lanes are in LP11 > > state. > > > > So I agree with Jessica, that we should set the default value of this flag > > to true in the framework so that only the bridges/panels which need this to > > be false do that explicitly. From the examples I pointed out including MTK, > > even those vendors are powering on their DSI in pre_enable() which means > > none of these panels will work there too. > > > >>> > >>> It seems to me that most panel drivers send DCS commands during > >>> pre_enable, so maybe it would make more sense to power on DSI host before > >>> panel enable() by default. Any panel that needs DSI host to be powered on > >>> later could then explicitly set the flag to false in their respective > >>> drivers. > >> > >> A proper migration should be done, yes, but not as a fix on top of v6.5. > >> > > > > I am fine to drop this fix in favor of making the prepare_prev_first as > > default true but we need an agreement first. From what I can see, parade > > chip will be the only one which will need this to be set to false and we > > can make that change. > > > > Let me know if this works as a migration plan. > > Yep agreed, let's do this > > The panel's prepare_prev_first should be reversed to something like > not_prepare_prev_first to make it an exception.
This will break all non-DSI panels, which might depend on the current bridge calling order. I started looking at the explicit DSI power up sequencing, but it will take a few more days to mature. -- With best wishes Dmitry