From: Gustavo Padovan <gustavo@padovan.org> To: dri-devel@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Daniel Stone <daniels@collabora.com>, Daniel Vetter <daniel.vetter@ffwll.ch>, Rob Clark <robdclark@gmail.com>, Greg Hackmann <ghackmann@google.com>, John Harrison <John.C.Harrison@Intel.com>, laurent.pinchart@ideasonboard.com, seanpaul@google.com, marcheu@google.com, m.chehab@samsung.com, Sumit Semwal <sumit.semwal@linaro.org>, Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Brian Starkey <brian.starkey@arm.com>, Gustavo Padovan <gustavo.padovan@collabora.co.uk> Subject: [PATCH v6 5/6] drm/fence: add fence timeline to drm_crtc Date: Thu, 27 Oct 2016 17:37:10 -0200 [thread overview] Message-ID: <1477597031-5139-6-git-send-email-gustavo@padovan.org> (raw) In-Reply-To: <1477597031-5139-1-git-send-email-gustavo@padovan.org> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Create one timeline context for each CRTC to be able to handle out-fences and signal them. It adds a few members to struct drm_crtc: fence_context, where we store the context we get from fence_context_alloc(), the fence seqno and the fence lock, that we pass in fence_init() to be used by the fence. v2: Comment by Daniel Stone: - add BUG_ON() to fence_to_crtc() macro v3: Comment by Ville Syrjälä - Use more meaningful name as crtc timeline name v4: Comments by Brian Starkey - Use even more meaninful name for the crtc timeline - add doc for timeline_name Comment by Daniel Vetter - use in-line style for comments - rebase after fence -> dma_fence rename Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> --- drivers/gpu/drm/drm_crtc.c | 31 +++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 7878bfd..e2a06c8 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -165,6 +165,32 @@ static void drm_crtc_crc_fini(struct drm_crtc *crtc) #endif } +static const char *drm_crtc_fence_get_driver_name(struct dma_fence *fence) +{ + struct drm_crtc *crtc = fence_to_crtc(fence); + + return crtc->dev->driver->name; +} + +static const char *drm_crtc_fence_get_timeline_name(struct dma_fence *fence) +{ + struct drm_crtc *crtc = fence_to_crtc(fence); + + return crtc->timeline_name; +} + +static bool drm_crtc_fence_enable_signaling(struct dma_fence *fence) +{ + return true; +} + +const struct dma_fence_ops drm_crtc_fence_ops = { + .get_driver_name = drm_crtc_fence_get_driver_name, + .get_timeline_name = drm_crtc_fence_get_timeline_name, + .enable_signaling = drm_crtc_fence_enable_signaling, + .wait = dma_fence_default_wait, +}; + /** * drm_crtc_init_with_planes - Initialise a new CRTC object with * specified primary and cursor planes. @@ -222,6 +248,11 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc, return -ENOMEM; } + crtc->fence_context = dma_fence_context_alloc(1); + spin_lock_init(&crtc->fence_lock); + snprintf(crtc->timeline_name, sizeof(crtc->timeline_name), + "CRTC:%d-%s", crtc->base.id, crtc->name); + crtc->base.properties = &crtc->properties; list_add_tail(&crtc->head, &config->crtc_list); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 719b6a8..278dbdd 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -32,6 +32,8 @@ #include <linux/fb.h> #include <linux/hdmi.h> #include <linux/media-bus-format.h> +#include <linux/srcu.h> +#include <linux/dma-fence.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -726,8 +728,45 @@ struct drm_crtc { */ struct drm_crtc_crc crc; #endif + + /** + * @fence_context: + * + * timeline context used for fence operations. + */ + unsigned int fence_context; + + /** + * @fence_lock: + * + * spinlock to protect the fences in the fence_context. + */ + + spinlock_t fence_lock; + /** + * @fence_seqno: + * + * Seqno variable used as monotonic counter for the fences + * created on the CRTC's timeline. + */ + unsigned long fence_seqno; + + /** + * @timeline_name: + * + * The name of the CRTC's fence timeline. + */ + char timeline_name[32]; }; +extern const struct dma_fence_ops drm_crtc_fence_ops; + +static inline struct drm_crtc *fence_to_crtc(struct dma_fence *fence) +{ + BUG_ON(fence->ops != &drm_crtc_fence_ops); + return container_of(fence->lock, struct drm_crtc, fence_lock); +} + /** * struct drm_mode_set - new values for a CRTC config change * @fb: framebuffer to use for new config -- 2.5.5
WARNING: multiple messages have this Message-ID (diff)
From: Gustavo Padovan <gustavo@padovan.org> To: dri-devel@lists.freedesktop.org Cc: marcheu@google.com, Daniel Stone <daniels@collabora.com>, seanpaul@google.com, Daniel Vetter <daniel.vetter@ffwll.ch>, linux-kernel@vger.kernel.org, laurent.pinchart@ideasonboard.com, Gustavo Padovan <gustavo.padovan@collabora.co.uk>, John Harrison <John.C.Harrison@Intel.com>, m.chehab@samsung.com Subject: [PATCH v6 5/6] drm/fence: add fence timeline to drm_crtc Date: Thu, 27 Oct 2016 17:37:10 -0200 [thread overview] Message-ID: <1477597031-5139-6-git-send-email-gustavo@padovan.org> (raw) In-Reply-To: <1477597031-5139-1-git-send-email-gustavo@padovan.org> From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Create one timeline context for each CRTC to be able to handle out-fences and signal them. It adds a few members to struct drm_crtc: fence_context, where we store the context we get from fence_context_alloc(), the fence seqno and the fence lock, that we pass in fence_init() to be used by the fence. v2: Comment by Daniel Stone: - add BUG_ON() to fence_to_crtc() macro v3: Comment by Ville Syrjälä - Use more meaningful name as crtc timeline name v4: Comments by Brian Starkey - Use even more meaninful name for the crtc timeline - add doc for timeline_name Comment by Daniel Vetter - use in-line style for comments - rebase after fence -> dma_fence rename Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> --- drivers/gpu/drm/drm_crtc.c | 31 +++++++++++++++++++++++++++++++ include/drm/drm_crtc.h | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 7878bfd..e2a06c8 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -165,6 +165,32 @@ static void drm_crtc_crc_fini(struct drm_crtc *crtc) #endif } +static const char *drm_crtc_fence_get_driver_name(struct dma_fence *fence) +{ + struct drm_crtc *crtc = fence_to_crtc(fence); + + return crtc->dev->driver->name; +} + +static const char *drm_crtc_fence_get_timeline_name(struct dma_fence *fence) +{ + struct drm_crtc *crtc = fence_to_crtc(fence); + + return crtc->timeline_name; +} + +static bool drm_crtc_fence_enable_signaling(struct dma_fence *fence) +{ + return true; +} + +const struct dma_fence_ops drm_crtc_fence_ops = { + .get_driver_name = drm_crtc_fence_get_driver_name, + .get_timeline_name = drm_crtc_fence_get_timeline_name, + .enable_signaling = drm_crtc_fence_enable_signaling, + .wait = dma_fence_default_wait, +}; + /** * drm_crtc_init_with_planes - Initialise a new CRTC object with * specified primary and cursor planes. @@ -222,6 +248,11 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc, return -ENOMEM; } + crtc->fence_context = dma_fence_context_alloc(1); + spin_lock_init(&crtc->fence_lock); + snprintf(crtc->timeline_name, sizeof(crtc->timeline_name), + "CRTC:%d-%s", crtc->base.id, crtc->name); + crtc->base.properties = &crtc->properties; list_add_tail(&crtc->head, &config->crtc_list); diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 719b6a8..278dbdd 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -32,6 +32,8 @@ #include <linux/fb.h> #include <linux/hdmi.h> #include <linux/media-bus-format.h> +#include <linux/srcu.h> +#include <linux/dma-fence.h> #include <uapi/drm/drm_mode.h> #include <uapi/drm/drm_fourcc.h> #include <drm/drm_modeset_lock.h> @@ -726,8 +728,45 @@ struct drm_crtc { */ struct drm_crtc_crc crc; #endif + + /** + * @fence_context: + * + * timeline context used for fence operations. + */ + unsigned int fence_context; + + /** + * @fence_lock: + * + * spinlock to protect the fences in the fence_context. + */ + + spinlock_t fence_lock; + /** + * @fence_seqno: + * + * Seqno variable used as monotonic counter for the fences + * created on the CRTC's timeline. + */ + unsigned long fence_seqno; + + /** + * @timeline_name: + * + * The name of the CRTC's fence timeline. + */ + char timeline_name[32]; }; +extern const struct dma_fence_ops drm_crtc_fence_ops; + +static inline struct drm_crtc *fence_to_crtc(struct dma_fence *fence) +{ + BUG_ON(fence->ops != &drm_crtc_fence_ops); + return container_of(fence->lock, struct drm_crtc, fence_lock); +} + /** * struct drm_mode_set - new values for a CRTC config change * @fb: framebuffer to use for new config -- 2.5.5 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2016-10-27 19:38 UTC|newest] Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-10-27 19:37 [PATCH v6 0/6] drm: add explict fencing Gustavo Padovan 2016-10-27 19:37 ` Gustavo Padovan 2016-10-27 19:37 ` [PATCH v6 1/6] drm/atomic: add drm_atomic_set_fence_for_plane() Gustavo Padovan 2016-10-28 7:30 ` Daniel Vetter 2016-10-28 7:30 ` Daniel Vetter 2016-10-28 7:33 ` Daniel Vetter 2016-10-28 7:33 ` Daniel Vetter 2016-10-27 19:37 ` [PATCH v6 2/6] drm/imx: use drm_atomic_set_fence_for_plane() to set the fence Gustavo Padovan 2016-10-27 19:37 ` Gustavo Padovan 2016-10-28 7:34 ` Daniel Vetter 2016-10-28 7:34 ` Daniel Vetter 2016-10-27 19:37 ` [PATCH v6 3/6] drm/msm: " Gustavo Padovan 2016-10-27 19:37 ` Gustavo Padovan 2016-10-28 7:34 ` Daniel Vetter 2016-10-28 7:34 ` Daniel Vetter 2016-10-27 19:37 ` [PATCH v6 4/6] drm/fence: add in-fences support Gustavo Padovan 2016-10-27 19:37 ` Gustavo Padovan 2016-10-28 7:39 ` Daniel Vetter 2016-10-28 7:39 ` Daniel Vetter 2016-10-28 12:32 ` Gustavo Padovan 2016-10-28 12:32 ` Gustavo Padovan 2016-10-27 19:37 ` Gustavo Padovan [this message] 2016-10-27 19:37 ` [PATCH v6 5/6] drm/fence: add fence timeline to drm_crtc Gustavo Padovan 2016-10-28 7:42 ` Daniel Vetter 2016-10-28 7:42 ` Daniel Vetter 2016-10-28 8:57 ` Brian Starkey 2016-10-28 8:57 ` Brian Starkey 2016-10-27 19:37 ` [PATCH v6 6/6] drm/fence: add out-fences support Gustavo Padovan 2016-10-28 7:58 ` Daniel Vetter 2016-10-28 9:23 ` Brian Starkey 2016-10-28 9:23 ` Brian Starkey
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=1477597031-5139-6-git-send-email-gustavo@padovan.org \ --to=gustavo@padovan.org \ --cc=John.C.Harrison@Intel.com \ --cc=brian.starkey@arm.com \ --cc=daniel.vetter@ffwll.ch \ --cc=daniels@collabora.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=ghackmann@google.com \ --cc=gustavo.padovan@collabora.co.uk \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-kernel@vger.kernel.org \ --cc=m.chehab@samsung.com \ --cc=maarten.lankhorst@linux.intel.com \ --cc=marcheu@google.com \ --cc=robdclark@gmail.com \ --cc=seanpaul@google.com \ --cc=sumit.semwal@linaro.org \ /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: linkBe 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.