From: Boris BREZILLON <boris.brezillon@free-electrons.com>
To: Rob Clark <robdclark@gmail.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Nicolas Ferre <nicolas.ferre@atmel.com>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
Alexandre Belloni <alexandre.belloni@free-electrons.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
Bo Shen <voice.shen@atmel.com>, Lee Jones <lee.jones@linaro.org>,
Jean-Jacques Hiblot <jjhiblot@traphandler.com>,
Samuel Ortiz <sameo@linux.intel.com>,
Tim Niemeyer <tim.niemeyer@corscience.de>,
Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
linux-pwm@vger.kernel.org, Pawel Moll <pawel.moll@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Rob Herring <robh+dt@kernel.org>,
Andrew Victor <linux@maxim.org.za>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Subject: Re: [RESEND PATCH v3 05/11] drm: add Atmel HLCDC Display Controller support
Date: Wed, 9 Jul 2014 10:18:17 +0200 [thread overview]
Message-ID: <20140709101817.3ad39b2b@bbrezillon> (raw)
In-Reply-To: <CAF6AEGtttUFquRQrhFKtEKq+frAAmzp4AVtF5gixVkMmJNC68g@mail.gmail.com>
On Mon, 7 Jul 2014 23:45:54 -0400
Rob Clark <robdclark@gmail.com> wrote:
> On Mon, Jul 7, 2014 at 12:42 PM, Boris BREZILLON
> <boris.brezillon@free-electrons.com> wrote:
> > The Atmel HLCDC (HLCD Controller) IP available on some Atmel SoCs (i.e.
> > at91sam9n12, at91sam9x5 family or sama5d3 family) provides a display
> > controller device.
> >
> > This display controller supports at least one primary plane and might
> > provide several overlays and an hardware cursor depending on the IP
> > version.
> >
> > At the moment, this driver only implements an RGB connector to interface
> > with LCD panels, but support for other kind of external devices (like DRM
> > bridges) might be added later.
> >
> > Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
> > ---
> > drivers/gpu/drm/Kconfig | 2 +
> > drivers/gpu/drm/Makefile | 1 +
> > drivers/gpu/drm/atmel-hlcdc/Kconfig | 11 +
> > drivers/gpu/drm/atmel-hlcdc/Makefile | 7 +
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 469 +++++++++++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 474 +++++++++++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h | 210 +++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.c | 706 +++++++++++++++++++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.h | 422 ++++++++++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_panel.c | 351 ++++++++++++
> > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 729 ++++++++++++++++++++++++
> > 11 files changed, 3382 insertions(+)
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/Kconfig
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/Makefile
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.h
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.c
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_layer.h
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_panel.c
> > create mode 100644 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c
> >
> > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
> > index d1cc2f6..df6f0c1 100644
> > --- a/drivers/gpu/drm/Kconfig
> > +++ b/drivers/gpu/drm/Kconfig
> > @@ -182,6 +182,8 @@ source "drivers/gpu/drm/cirrus/Kconfig"
> >
[...]
> > +/**
> > + * Atmel HLCDC Layer GEM flip garbage collector structure
> > + *
> > + * This structure is used to schedule GEM object release when we are in
> > + * interrupt context (within atmel_hlcdc_layer_irq function).
> > + *
> > + *@list: GEM flip objects to release
> > + *@list_lock: lock to access the GEM flip list
> > + *@work: work queue scheduled when there are GEM flip to collect
> > + *@finished: action to execute the GEM flip and all attached objects have been
> > + * released
> > + *@finished_data: data passed to the finished callback
> > + *@finished_lock: lock to access finished related fields
> > + */
> > +struct atmel_hlcdc_layer_gem_flip_gc {
> > + struct list_head list;
> > + spinlock_t list_lock;
> > + struct work_struct work;
> > +};
>
>
> Please have a look at drm_flip_work.. I think that should simplify
> post-flip cleanup for you..
>
Now I remember why I didn't make use of drm_flip_work helpers:
I have to specify a fifo size when initializing the
drm_flip_work structure (drm_flip_work_init) and I don't know exactly
what I should choose here.
You might have noticed that I'm queuing the unref work to be done within
the irq handler (which means I'm in irq context), and, AFAIU,
drm_flip_work_queue will execute the function if the FIFO is full
(AFAIK calling drm_framebuffer_unreference in irq context is not safe).
This leaves the following solutions if I ever want to use drm_flip_work:
- use a threaded irq. Meaning the next frame (or the pending plane
update) might take a bit longer to be displayed.
- increase the fifo size, so that it's never entirely filled (relying
on the assumption that the flip work queue will be executed at least
as much as the plane update requests)
- rely on the assumption that work_queue will be executed at least
once per fb flip. This is true for the primary plane because we're
using page_flip and only one page_flip can take place at a given
time, but AFAIK this is not true for plane updates.
My approach is to use a simple list instead of a kfifo to queue fb
flip unref work, this way I don't have to bother about whether the fifo
is full or not.
ITOH, this means I might keep fb references longer than I would when
using drm_flip_work, and potentially get out of resources if plane
updates occurs more often than my unref work queue is called.
Please, let me know what's the preferred solution here.
Best Regards,
Boris
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
next prev parent reply other threads:[~2014-07-09 8:18 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-07 16:42 [RESEND PATCH v3 00/11] drm: add support for Atmel HLCDC Display Controller Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 01/11] mfd: add atmel-hlcdc driver Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 02/11] mfd: add documentation for atmel-hlcdc DT bindings Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 03/11] pwm: add support for atmel-hlcdc-pwm device Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 04/11] pwm: add DT bindings documentation for atmel-hlcdc-pwm driver Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 05/11] drm: add Atmel HLCDC Display Controller support Boris BREZILLON
2014-07-08 3:45 ` Rob Clark
2014-07-08 7:23 ` Boris BREZILLON
2014-07-08 12:49 ` Rob Clark
2014-07-08 14:37 ` Boris BREZILLON
2014-07-08 15:41 ` Rob Clark
2014-07-08 17:08 ` Boris BREZILLON
2014-07-08 23:51 ` Matt Roper
2014-07-09 7:14 ` Boris BREZILLON
2014-07-09 14:02 ` Daniel Vetter
2014-07-09 8:18 ` Boris BREZILLON [this message]
2014-07-09 11:53 ` Rob Clark
2014-07-12 18:16 ` Boris BREZILLON
2014-07-12 18:37 ` Rob Clark
2014-07-15 11:26 ` Boris BREZILLON
2014-07-07 16:42 ` [RESEND PATCH v3 06/11] drm: add DT bindings documentation for atmel-hlcdc-dc driver Boris BREZILLON
2014-07-10 11:16 ` Laurent Pinchart
2014-07-10 12:56 ` Boris BREZILLON
2014-07-11 10:37 ` Laurent Pinchart
2014-07-11 12:00 ` Boris BREZILLON
2014-07-11 12:19 ` Boris BREZILLON
2014-07-14 10:18 ` Thierry Reding
2014-07-15 11:45 ` Boris BREZILLON
2014-07-14 10:05 ` Thierry Reding
2014-07-15 10:06 ` Boris BREZILLON
2014-07-15 10:20 ` Laurent Pinchart
2014-07-15 10:37 ` Thierry Reding
2014-07-15 10:43 ` Laurent Pinchart
2014-07-15 10:52 ` Thierry Reding
2014-07-15 11:07 ` Laurent Pinchart
2014-07-16 13:05 ` Boris BREZILLON
2014-07-16 13:20 ` Laurent Pinchart
2014-07-16 13:44 ` Boris BREZILLON
2014-07-15 12:14 ` Boris BREZILLON
2014-07-15 10:31 ` Thierry Reding
2014-07-18 14:51 ` Boris BREZILLON
2014-07-18 15:43 ` Boris BREZILLON
2014-07-21 8:59 ` Thierry Reding
2014-07-21 9:24 ` Boris BREZILLON
2014-07-21 9:32 ` Laurent Pinchart
2014-07-21 9:57 ` Boris BREZILLON
2014-07-21 12:12 ` Thierry Reding
2014-07-21 12:16 ` Laurent Pinchart
2014-07-21 12:34 ` Boris BREZILLON
2014-07-21 12:55 ` Thierry Reding
2014-07-21 13:22 ` Laurent Pinchart
2014-07-21 13:30 ` Thierry Reding
2014-07-21 13:43 ` Boris BREZILLON
2014-07-21 13:47 ` Laurent Pinchart
2014-07-21 13:54 ` Thierry Reding
2014-07-21 14:21 ` Boris BREZILLON
2014-07-21 18:30 ` Laurent Pinchart
2014-07-21 22:04 ` Thierry Reding
2014-07-21 14:18 ` Boris BREZILLON
2014-07-21 18:32 ` Laurent Pinchart
2014-07-21 17:06 ` Russell King - ARM Linux
2014-07-21 22:17 ` Thierry Reding
2014-07-21 12:15 ` Thierry Reding
2014-07-21 12:33 ` Boris BREZILLON
2014-07-21 12:56 ` Thierry Reding
2014-07-21 13:26 ` Laurent Pinchart
2014-07-21 13:33 ` Thierry Reding
2014-07-07 16:43 ` [RESEND PATCH v3 07/11] ARM: AT91/dt: split sama5d3 lcd pin definitions to match RGB mode configs Boris BREZILLON
2014-07-07 16:43 ` [RESEND PATCH v3 08/11] ARM: AT91/dt: add alternative pin muxing for sama5d3 lcd pins Boris BREZILLON
2014-07-07 16:43 ` [RESEND PATCH v3 09/11] ARM: at91/dt: define the HLCDC node available on sama5d3 SoCs Boris BREZILLON
2014-07-07 16:43 ` [RESEND PATCH v3 10/11] ARM: at91/dt: add LCD panel description to sama5d3xdm.dtsi Boris BREZILLON
2014-07-07 16:43 ` [RESEND PATCH v3 11/11] ARM: at91/dt: enable the LCD panel on sama5d3xek boards Boris BREZILLON
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=20140709101817.3ad39b2b@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=alexandre.belloni@free-electrons.com \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=jjhiblot@traphandler.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=lee.jones@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pwm@vger.kernel.org \
--cc=linux@maxim.org.za \
--cc=mark.rutland@arm.com \
--cc=nicolas.ferre@atmel.com \
--cc=pawel.moll@arm.com \
--cc=plagnioj@jcrosoft.com \
--cc=robdclark@gmail.com \
--cc=robh+dt@kernel.org \
--cc=sameo@linux.intel.com \
--cc=thomas.petazzoni@free-electrons.com \
--cc=tim.niemeyer@corscience.de \
--cc=voice.shen@atmel.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;
as well as URLs for NNTP newsgroup(s).