dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Inki Dae <inki.dae@samsung.com>
To: 'Joonyoung Shim' <jy0922.shim@samsung.com>
Cc: kyungmin.park@samsung.com, sw0312.kim@samsung.com,
	'YoungJun Cho' <yj44.cho@samsung.com>,
	dri-devel@lists.freedesktop.org
Subject: RE: [PATCH 3/7] drm/exynos: Fix G2D core mulfunctioning issue
Date: Thu, 14 Mar 2013 13:58:20 +0900	[thread overview]
Message-ID: <007301ce2070$8ca36eb0$a5ea4c10$%dae@samsung.com> (raw)
In-Reply-To: <5141361A.8090409@samsung.com>



> -----Original Message-----
> From: Joonyoung Shim [mailto:jy0922.shim@samsung.com]
> Sent: Thursday, March 14, 2013 11:30 AM
> To: Inki Dae
> Cc: airlied@linux.ie; dri-devel@lists.freedesktop.org;
> kyungmin.park@samsung.com; sw0312.kim@samsung.com; 'YoungJun Cho'
> Subject: Re: [PATCH 3/7] drm/exynos: Fix G2D core mulfunctioning issue
> 
> On 03/13/2013 07:53 PM, Inki Dae wrote:
> >> -----Original Message-----
> >> From: Joonyoung Shim [mailto:jy0922.shim@samsung.com]
> >> Sent: Wednesday, March 13, 2013 7:28 PM
> >> To: Inki Dae
> >> Cc:airlied@linux.ie;dri-devel@lists.freedesktop.org;
> >> kyungmin.park@samsung.com;sw0312.kim@samsung.com; 'YoungJun Cho'
> >> Subject: Re: [PATCH 3/7] drm/exynos: Fix G2D core mulfunctioning issue
> >>
> >> On 03/13/2013 07:14 PM, Inki Dae wrote:
> >>>> -----Original Message-----
> >>>> From: Joonyoung Shim [mailto:jy0922.shim@samsung.com]
> >>>> Sent: Wednesday, March 13, 2013 6:53 PM
> >>>> To: Inki Dae
> >>>> Cc:airlied@linux.ie;dri-devel@lists.freedesktop.org;
> >>>> kyungmin.park@samsung.com;sw0312.kim@samsung.com; YoungJun Cho
> >>>> Subject: Re: [PATCH 3/7] drm/exynos: Fix G2D core mulfunctioning
> issue
> >>>>
> >>>> On 03/13/2013 06:04 PM, Inki Dae wrote:
> >>>>> From: YoungJun Cho<yj44.cho@samsung.com>
> >>>>>
> >>>>> This patch fixes G2D core mulfunctioning issue once g2d dma is
> > started.
> >>>>> Without 'DMA_HOLD_CMD_REG' register setting, there is only one
> >> interrupt
> >>>>> after the execution to all command lists have been completed. And
> that
> >>>>> induces watchdog. So this patch sets 'LIST_HOLD' command to the
> >> register
> >>>>> so that command execution interrupt can be occured whenever each
> >> command
> >>>>> list execution is finished.
> >>>> No, this problem occurs as GCF bit of INTEN_REG register is enabled
> >>>> always. If wants to raise interrupt immediately after a command list
> >>>> finished, GCF bit should be enabled, and it also needs to enable of
> >> LIST
> >>>> Hold bit of DMA_HOLD_CMD_REG register. If one of the two is missed
> out,
> >>>> g2d hardware will not work normally sometimes.
> >>> Right, these two things(LIST HOLD command and GCF interrupt enabling)
> >> should
> >>> be pair.
> >>>
> >>>> This patch is just workaround and it can happen performance issue
> >>>> because g2d hardware stops a moment whenever a command list finished.
> >>>>
> >>>> So, we need the way which enable GCF bit only when a command list
> >>>> completion interrupt needs.
> >>>>
> >>> Agree. How about this? If node->event isn't NULL then set GCF to INTEN
> >>> register in g2d_dma_start(). For this way, I already mentioned through
> >>> internal email thread.
> >> No, Once set GCF, it is set on end. Who can clear it?
> >>
> > Maybe you say that g2d_dma_start() is called by exec ioctl so the GCF
> bit
> > could be set by only last node.  For this, We need to look into dma-
> driven
> > command processing. Assume that two more command lists exist and they
> are
> > executed at once. Then we CAN NOT GET each node while dma operation
> because
> > the command lists of each node are executed by dma at once.
> >
> > On other words, there is no way to enable GCF bit only in case that a
> > command list completion interrupt is needed because the need is from
> user
> > side.
> 
> I requested to Youngjun Cho whether it is possible to work and to insert
> a command to set GCF bit of INTEN in command list and he said it is
> possiable and works because clears GCF bit in irq handler if command
> list completion interrupt occurs.
> 

Checked it out. It seems that the g2d dma could also access and control
other registers(not rendering relevant ones) in the command list. So we
could implement this approach that user can get event to each command list
completion more simply.

With set_cmdlist ioctl with event, it makes GCF bit to be set to
node->cmdlist and only ACF bit without event. Afterwards, whenever each
command list is completed, G2D Core can aware of the interrupt source
enabled(GCF or ACF) so interrupt  will occurs properly.

Mr. Cho, please implement this approach and test it.


> > So I think we need some policy for g2d driver. For example, if user
> wants to
> > get event to each node, all nodes from the user should be operated with
> GCF
> > bit otherwise without GCF bit.
> 
> Actually now there is no way to inform completion of a set of command
> lists to user on async mode. So, i think completion event of a set of
> command lists needs also.
> 

I think it's enough to have only event to each command list because user
wants to do something only whenever one bitblt command is completed. Maybe
there is no use case to all command lists. Anyway, let's implement the above
approach first. :)

> Thanks.
> 
> >
> > Any other idea?
> >
> >>>> Thanks.
> >>>>
> >>>>> Signed-off-by: YoungJun Cho<yj44.cho@samsung.com>
> >>>>> Signed-off-by: Inki Dae<inki.dae@samsung.com>
> >>>>> Signed-off-by: Kyungmin Park<kyungmin.park@samsung.com>
> >>>>> ---
> >>>>>     drivers/gpu/drm/exynos/exynos_drm_g2d.c |   13 ++++++++-----
> >>>>>     1 files changed, 8 insertions(+), 5 deletions(-)
> >>>>>
> >>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> >>>> b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> >>>>> index 095520f..91bc4cc 100644
> >>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> >>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> >>>>> @@ -82,7 +82,7 @@
> >>>>>     #define G2D_DMA_LIST_DONE_COUNT_OFFSET	17
> >>>>>
> >>>>>     /* G2D_DMA_HOLD_CMD */
> >>>>> -#define G2D_USET_HOLD			(1 << 2)
> >>>>> +#define G2D_USER_HOLD			(1 << 2)
> >>>>>     #define G2D_LIST_HOLD			(1 << 1)
> >>>>>     #define G2D_BITBLT_HOLD			(1 << 0)
> >>>>>
> >>>>> @@ -863,10 +863,13 @@ int exynos_g2d_set_cmdlist_ioctl(struct
> >> drm_device
> >>>> *drm_dev, void *data,
> >>>>>     	cmdlist->data[cmdlist->last++] = G2D_SRC_BASE_ADDR;
> >>>>>     	cmdlist->data[cmdlist->last++] = 0;
> >>>>>
> >>>>> -	if (node->event) {
> >>>>> -		cmdlist->data[cmdlist->last++] = G2D_DMA_HOLD_CMD;
> >>>>> -		cmdlist->data[cmdlist->last++] = G2D_LIST_HOLD;
> >>>>> -	}
> >>>>> +	/*
> >>>>> +	 * 'LIST_HOLD' command should be set to the DMA_HOLD_CMD_REG
> >>>>> +	 * if user wants G2D interrupt event once each command list
> or
> >>>>> +	 * BitBLT command execution is finished.
> >>>>> +	 */
> >>>>> +	cmdlist->data[cmdlist->last++] = G2D_DMA_HOLD_CMD;
> >>>>> +	cmdlist->data[cmdlist->last++] = G2D_LIST_HOLD;
> >>>>>
> >>>>>     	/* Check size of cmdlist: last 2 is about G2D_BITBLT_START
> > */
> >>>>>     	size = cmdlist->last + req->cmd_nr * 2 + req->cmd_buf_nr * 2
> > + 2;

  reply	other threads:[~2013-03-14  4:58 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-13  9:04 [PATCH 3/7] drm/exynos: Fix G2D core mulfunctioning issue Inki Dae
2013-03-13  9:53 ` Joonyoung Shim
2013-03-13 10:14   ` Inki Dae
2013-03-13 10:28     ` Joonyoung Shim
2013-03-13 10:53       ` Inki Dae
2013-03-14  2:29         ` Joonyoung Shim
2013-03-14  4:58           ` Inki Dae [this message]
2013-03-14  5:24             ` YoungJun Cho
2013-03-14  9:48 ` [PATCH v2 3/7] drm/exynos: Fix G2D core malfunctioning issue Inki Dae

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='007301ce2070$8ca36eb0$a5ea4c10$%dae@samsung.com' \
    --to=inki.dae@samsung.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jy0922.shim@samsung.com \
    --cc=kyungmin.park@samsung.com \
    --cc=sw0312.kim@samsung.com \
    --cc=yj44.cho@samsung.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