All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Masney <masneyb@onstation.org>
To: Jeffrey Hugo <jhugo@codeaurora.org>
Cc: Jeffrey Hugo <jeffrey.l.hugo@gmail.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Sean Paul <sean@poorly.run>, Rob Herring <robh@kernel.org>,
	Jonathan Marek <jonathan@marek.ca>,
	Dave Airlie <airlied@linux.ie>,
	MSM <linux-arm-msm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"open list:DRM PANEL DRIVERS" <dri-devel@lists.freedesktop.org>,
	Rob Clark <robdclark@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	freedreno <freedreno@lists.freedesktop.org>
Subject: Re: [Freedreno] [PATCH RFC v2 0/6] ARM: qcom: initial Nexus 5 display support
Date: Wed, 29 May 2019 17:54:21 -0400	[thread overview]
Message-ID: <20190529215421.GA20611@basecamp> (raw)
In-Reply-To: <26c535af-9853-c8c9-3138-04f5d9ee11b0@codeaurora.org>

On Wed, May 29, 2019 at 01:58:16PM -0600, Jeffrey Hugo wrote:
> On 5/29/2019 1:30 PM, Brian Masney wrote:
> > On Wed, May 29, 2019 at 08:41:31AM -0600, Jeffrey Hugo wrote:
> > > On Wed, May 29, 2019 at 4:28 AM Brian Masney <masneyb@onstation.org> wrote:
> > > > 
> > > > On Tue, May 28, 2019 at 08:53:49PM -0600, Jeffrey Hugo wrote:
> > > > > On Tue, May 28, 2019 at 8:46 PM Brian Masney <masneyb@onstation.org> wrote:
> > > > > > 
> > > > > > On Tue, May 28, 2019 at 07:42:19PM -0600, Jeffrey Hugo wrote:
> > > > > > > > > Do you know if the nexus 5 has a video or command mode panel?  There
> > > > > > > > > is some glitchyness with vblanks and command mode panels.
> > > > > > > > 
> > > > > > > > Its in command mode. I know this because I see two 'pp done time out'
> > > > > > > > messages, even on 4.17. Based on my understanding, the ping pong code is
> > > > > > > > only applicable for command mode panels.
> > > > > > > 
> > > > > > > Actually, the ping pong element exists in both modes, but 'pp done
> > > > > > > time out' is a good indicator that it is command mode.
> > > > > > > 
> > > > > > > Are you also seeing vblank timeouts?
> > > > > > 
> > > > > > Yes, here's a snippet of the first one.
> > > > > > 
> > > > > > [    2.556014] WARNING: CPU: 0 PID: 5 at drivers/gpu/drm/drm_atomic_helper.c:1429 drm_atomic_helper_wait_for_vblanks.part.1+0x288/0x290
> > > > > > [    2.556020] [CRTC:49:crtc-0] vblank wait timed out
> > > > > > [    2.556023] Modules linked in:
> > > > > > [    2.556034] CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.2.0-rc1-00178-g72c3c1fd5f86-dirty #426
> > > > > > [    2.556038] Hardware name: Generic DT based system
> > > > > > [    2.556056] Workqueue: events deferred_probe_work_func
> > > > > > ...
> > > > > > 
> > > > > > > Do you have busybox?
> > > > > > > 
> > > > > > > Can you run -
> > > > > > > sudo busybox devmem 0xFD900614
> > > > > > > sudo busybox devmem 0xFD900714
> > > > > > > sudo busybox devmem 0xFD900814
> > > > > > > sudo busybox devmem 0xFD900914
> > > > > > > sudo busybox devmem 0xFD900A14
> > > > > > 
> > > > > > # busybox devmem 0xFD900614
> > > > > > 0x00020020
> > > > > 
> > > > > Ok, so CTL_0 path, command mode, ping pong 0, with the output going to DSI 1.
> > > > > 
> > > > > Next one please:
> > > > > 
> > > > > busybox devmem 0xFD912D30
> > > > 
> > > > It's 0x00000000 on mainline and 4.17. I used the following script to
> > > > dump the entire mdp5 memory region and attached the dump from 4.17 and
> > > > 5.2rc1.
> > > > 
> > > 
> > > ok, 0 means autorefresh is not on.  Which is fine.  My next guess
> > > would be the vblank code checking the hardware vblank counter, which
> > > doesn't exist.
> > > In video mode, there is a frame counter which increments, which can be
> > > used as the vblank counter.  Unfortunately, that hardware isn't active
> > > in command mode, and there isn't an equivalent.
> > > 
> > > So, the vblank code is going to read the register, and look for an
> > > update, which will never happen, thus it will timeout.  There is a
> > > backup path which uses timestamps (no hardware), which you can
> > > activate with a quick hack - make max_vblank_count = 0 at the
> > > following line
> > > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c#L753
> > 
> > That fixed the issue!
> 
> Awesome.  I'm glad it was something simple.
> 
> > 
> > I previously observed that mdp5_get_vblank_counter, specifically
> > mdp5_encoder_get_framecount, would always return 0.
> > 
> > What's the best way to fix this in mainline? Set that to zero if any
> > of the interface modes is MDP5_INTF_DSI_MODE_COMMAND?
> > 
> 
> Short version, yes.  Long version:
> 
> I still have that hack in my tree and haven't come back to formulating
> a proper fix yet.  Feel free to run with it.
> 
> Thinking about it briefly, we could do two things.  We could fake a
> hardware counter by just increment an int every time the vblank irq is
> processed, but that seems clunky.  Otherwise, we could force a
> fallback onto the timestamp solution, which seems less invasive.
> 
> In theory, we could service multiple displays, with different
> properties (ie a combination of command and video mode).  The hack
> then, is not good, because it would break video mode (at-least we
> wouldn't be using the register when we could).  It would be great if
> the use of the hardware register could be done per display.
> 
> Luckily, it looks like someone just made that possible -
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/drm_vblank.c?h=v5.2-rc2&id=ed20151a7699bb2c77eba3610199789a126940c4

I'll work on this for the msm driver.

Thanks for the info!

Brian

WARNING: multiple messages have this Message-ID (diff)
From: Brian Masney <masneyb-1iNe0GrtECGEi8DpZVb4nw@public.gmane.org>
To: Jeffrey Hugo <jhugo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
Cc: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Jonathan Marek <jonathan-eSc4qw6YbEQ@public.gmane.org>,
	Jeffrey Hugo
	<jeffrey.l.hugo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Dave Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
	MSM <linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Linus Walleij
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"open list:DRM PANEL DRIVERS"
	<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>,
	freedreno
	<freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Sean Paul <sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>
Subject: Re: [PATCH RFC v2 0/6] ARM: qcom: initial Nexus 5 display support
Date: Wed, 29 May 2019 17:54:21 -0400	[thread overview]
Message-ID: <20190529215421.GA20611@basecamp> (raw)
In-Reply-To: <26c535af-9853-c8c9-3138-04f5d9ee11b0-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>

On Wed, May 29, 2019 at 01:58:16PM -0600, Jeffrey Hugo wrote:
> On 5/29/2019 1:30 PM, Brian Masney wrote:
> > On Wed, May 29, 2019 at 08:41:31AM -0600, Jeffrey Hugo wrote:
> > > On Wed, May 29, 2019 at 4:28 AM Brian Masney <masneyb@onstation.org> wrote:
> > > > 
> > > > On Tue, May 28, 2019 at 08:53:49PM -0600, Jeffrey Hugo wrote:
> > > > > On Tue, May 28, 2019 at 8:46 PM Brian Masney <masneyb@onstation.org> wrote:
> > > > > > 
> > > > > > On Tue, May 28, 2019 at 07:42:19PM -0600, Jeffrey Hugo wrote:
> > > > > > > > > Do you know if the nexus 5 has a video or command mode panel?  There
> > > > > > > > > is some glitchyness with vblanks and command mode panels.
> > > > > > > > 
> > > > > > > > Its in command mode. I know this because I see two 'pp done time out'
> > > > > > > > messages, even on 4.17. Based on my understanding, the ping pong code is
> > > > > > > > only applicable for command mode panels.
> > > > > > > 
> > > > > > > Actually, the ping pong element exists in both modes, but 'pp done
> > > > > > > time out' is a good indicator that it is command mode.
> > > > > > > 
> > > > > > > Are you also seeing vblank timeouts?
> > > > > > 
> > > > > > Yes, here's a snippet of the first one.
> > > > > > 
> > > > > > [    2.556014] WARNING: CPU: 0 PID: 5 at drivers/gpu/drm/drm_atomic_helper.c:1429 drm_atomic_helper_wait_for_vblanks.part.1+0x288/0x290
> > > > > > [    2.556020] [CRTC:49:crtc-0] vblank wait timed out
> > > > > > [    2.556023] Modules linked in:
> > > > > > [    2.556034] CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.2.0-rc1-00178-g72c3c1fd5f86-dirty #426
> > > > > > [    2.556038] Hardware name: Generic DT based system
> > > > > > [    2.556056] Workqueue: events deferred_probe_work_func
> > > > > > ...
> > > > > > 
> > > > > > > Do you have busybox?
> > > > > > > 
> > > > > > > Can you run -
> > > > > > > sudo busybox devmem 0xFD900614
> > > > > > > sudo busybox devmem 0xFD900714
> > > > > > > sudo busybox devmem 0xFD900814
> > > > > > > sudo busybox devmem 0xFD900914
> > > > > > > sudo busybox devmem 0xFD900A14
> > > > > > 
> > > > > > # busybox devmem 0xFD900614
> > > > > > 0x00020020
> > > > > 
> > > > > Ok, so CTL_0 path, command mode, ping pong 0, with the output going to DSI 1.
> > > > > 
> > > > > Next one please:
> > > > > 
> > > > > busybox devmem 0xFD912D30
> > > > 
> > > > It's 0x00000000 on mainline and 4.17. I used the following script to
> > > > dump the entire mdp5 memory region and attached the dump from 4.17 and
> > > > 5.2rc1.
> > > > 
> > > 
> > > ok, 0 means autorefresh is not on.  Which is fine.  My next guess
> > > would be the vblank code checking the hardware vblank counter, which
> > > doesn't exist.
> > > In video mode, there is a frame counter which increments, which can be
> > > used as the vblank counter.  Unfortunately, that hardware isn't active
> > > in command mode, and there isn't an equivalent.
> > > 
> > > So, the vblank code is going to read the register, and look for an
> > > update, which will never happen, thus it will timeout.  There is a
> > > backup path which uses timestamps (no hardware), which you can
> > > activate with a quick hack - make max_vblank_count = 0 at the
> > > following line
> > > https://elixir.bootlin.com/linux/latest/source/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c#L753
> > 
> > That fixed the issue!
> 
> Awesome.  I'm glad it was something simple.
> 
> > 
> > I previously observed that mdp5_get_vblank_counter, specifically
> > mdp5_encoder_get_framecount, would always return 0.
> > 
> > What's the best way to fix this in mainline? Set that to zero if any
> > of the interface modes is MDP5_INTF_DSI_MODE_COMMAND?
> > 
> 
> Short version, yes.  Long version:
> 
> I still have that hack in my tree and haven't come back to formulating
> a proper fix yet.  Feel free to run with it.
> 
> Thinking about it briefly, we could do two things.  We could fake a
> hardware counter by just increment an int every time the vblank irq is
> processed, but that seems clunky.  Otherwise, we could force a
> fallback onto the timestamp solution, which seems less invasive.
> 
> In theory, we could service multiple displays, with different
> properties (ie a combination of command and video mode).  The hack
> then, is not good, because it would break video mode (at-least we
> wouldn't be using the register when we could).  It would be great if
> the use of the hardware register could be done per display.
> 
> Luckily, it looks like someone just made that possible -
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/drm_vblank.c?h=v5.2-rc2&id=ed20151a7699bb2c77eba3610199789a126940c4

I'll work on this for the msm driver.

Thanks for the info!

Brian
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

  reply	other threads:[~2019-05-29 21:54 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-09  2:03 [PATCH RFC v2 0/6] ARM: qcom: initial Nexus 5 display support Brian Masney
2019-05-09  2:03 ` [PATCH v2 1/6] drm: msm: remove resv fields from msm_gem_object struct Brian Masney
2019-05-13 20:32   ` Bjorn Andersson
2019-05-13 22:25     ` Brian Masney
2019-05-09  2:03 ` [PATCH RFC v2 2/6] drm: msm: add dirty framebuffer helper Brian Masney
2019-05-09  2:03 ` [PATCH v2 3/6] ARM: qcom_defconfig: add display-related options Brian Masney
2019-05-09  2:03   ` Brian Masney
2019-05-09  2:03 ` [PATCH v2 4/6] ARM: dts: msm8974: add display support Brian Masney
2019-05-09  2:03   ` Brian Masney
2019-05-09  2:03 ` [PATCH v2 5/6] ARM: dts: qcom: msm8974-hammerhead: add support for backlight Brian Masney
2019-05-09  2:03   ` Brian Masney
2019-05-09  2:03 ` [PATCH v2 6/6] ARM: dts: qcom: msm8974-hammerhead: add support for display Brian Masney
2019-05-09  2:03   ` Brian Masney
2019-05-09  2:06 ` [PATCH RFC v2 0/6] ARM: qcom: initial Nexus 5 display support Brian Masney
2019-05-09  2:06   ` Brian Masney
2019-05-28 13:46 ` Linus Walleij
2019-05-29  1:17   ` Brian Masney
2019-05-29  1:32     ` [Freedreno] " Jeffrey Hugo
2019-05-29  1:32       ` Jeffrey Hugo
2019-05-29  1:37       ` [Freedreno] " Brian Masney
2019-05-29  1:42         ` Jeffrey Hugo
2019-05-29  2:46           ` Brian Masney
2019-05-29  2:46             ` Brian Masney
     [not found]             ` <CAOCk7NpC93ACr4jFm7SBOKSvFJSDhq2byX6BAYPX29BuYEkWnQ@mail.gmail.com>
     [not found]               ` <CAOCk7NpC93ACr4jFm7SBOKSvFJSDhq2byX6BAYPX29BuYEkWnQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-05-29 10:28                 ` Brian Masney
2019-05-29 10:28                   ` [Freedreno] " Brian Masney
2019-05-29 14:41                   ` Jeffrey Hugo
2019-05-29 19:30                     ` Brian Masney
2019-05-29 19:58                       ` Jeffrey Hugo
2019-05-29 21:54                         ` Brian Masney [this message]
2019-05-29 21:54                           ` Brian Masney
2019-05-29  2:14     ` Rob Clark
2019-05-29  2:24       ` [Freedreno] " Jeffrey Hugo
2019-05-29  6:23     ` Linus Walleij
2019-05-29  9:41       ` Brian Masney
2019-05-29  9:41         ` Brian Masney

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=20190529215421.GA20611@basecamp \
    --to=masneyb@onstation.org \
    --cc=airlied@linux.ie \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=jeffrey.l.hugo@gmail.com \
    --cc=jhugo@codeaurora.org \
    --cc=jonathan@marek.ca \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robdclark@gmail.com \
    --cc=robh@kernel.org \
    --cc=sean@poorly.run \
    /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.