* [PATCH 0/4] Improve crc-core driver interface
@ 2018-08-21 8:38 Mahesh Kumar
2018-08-21 8:38 ` [PATCH V3 1/4] drm/vkms/crc: Implement verify_crc_source callback Mahesh Kumar
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: Mahesh Kumar @ 2018-08-21 8:38 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter, dri-devel
This series improves crc-core <-> driver interface.
This series adds following functionality in the crc-core
- Now control node will print all the available sources if
implemented by driver along with current source.
- Setting of sorce will fail if provided source is not supported
- cleanup of crtc_crc_open function first allocate memory before
enabling CRC generation
- Don't block open() call instead wait in crc read call.
Changes:
- Rebase on top of VKMS driver
- Include pre_crc_read patch
Cc: dri-devel@lists.freedesktop.org
Mahesh Kumar (4):
drm/vkms/crc: Implement verify_crc_source callback
drm/crc: Cleanup crtc_crc_open function
Revert "drm: crc: Wait for a frame before returning from open()"
drm/crc: add pre_crc_read function
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 3 +-
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 4 +-
drivers/gpu/drm/drm_debugfs_crc.c | 79 ++++++++++------------
drivers/gpu/drm/i915/intel_drv.h | 3 +-
drivers/gpu/drm/i915/intel_pipe_crc.c | 4 +-
drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 4 +-
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 6 +-
drivers/gpu/drm/vkms/vkms_crc.c | 41 ++++++++---
drivers/gpu/drm/vkms/vkms_crtc.c | 1 +
drivers/gpu/drm/vkms/vkms_drv.h | 5 +-
include/drm/drm_crtc.h | 17 ++++-
11 files changed, 93 insertions(+), 74 deletions(-)
--
2.16.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH V3 1/4] drm/vkms/crc: Implement verify_crc_source callback
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
@ 2018-08-21 8:38 ` Mahesh Kumar
2018-08-21 8:38 ` [PATCH V5 2/4] drm/crc: Cleanup crtc_crc_open function Mahesh Kumar
` (4 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Mahesh Kumar @ 2018-08-21 8:38 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter, dri-devel, Haneen Mohammed
This patch implements "verify_crc_source" callback function for
Virtual KMS drm driver.
Changes Since V1:
- update values_cnt in verify_crc_source
Changes Since V2:
- don't return early from set_crc_source to keep behavior same (Haneen)
Cc: Haneen Mohammed <hamohammed.sa@gmail.com>
Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Reviewed-by: Haneen Mohammed <hamohammed.sa@gmail.com>
---
drivers/gpu/drm/vkms/vkms_crc.c | 36 ++++++++++++++++++++++++++++++++----
drivers/gpu/drm/vkms/vkms_crtc.c | 1 +
drivers/gpu/drm/vkms/vkms_drv.h | 2 ++
3 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/vkms/vkms_crc.c b/drivers/gpu/drm/vkms/vkms_crc.c
index 37d717f38e3c..68421d3d809a 100644
--- a/drivers/gpu/drm/vkms/vkms_crc.c
+++ b/drivers/gpu/drm/vkms/vkms_crc.c
@@ -70,6 +70,37 @@ void vkms_crc_work_handle(struct work_struct *work)
drm_crtc_add_crc_entry(crtc, true, crtc_state->n_frame, &crc32);
}
+static int vkms_crc_parse_source(const char *src_name, bool *enabled)
+{
+ int ret = 0;
+
+ if (!src_name) {
+ *enabled = false;
+ } else if (strcmp(src_name, "auto") == 0) {
+ *enabled = true;
+ } else {
+ *enabled = false;
+ ret = -EINVAL;
+ }
+
+ return ret;
+}
+
+int vkms_verify_crc_source(struct drm_crtc *crtc, const char *src_name,
+ size_t *values_cnt)
+{
+ bool enabled;
+
+ if (vkms_crc_parse_source(src_name, &enabled) < 0) {
+ DRM_DEBUG_DRIVER("unknown source %s\n", src_name);
+ return -EINVAL;
+ }
+
+ *values_cnt = 1;
+
+ return 0;
+}
+
int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
size_t *values_cnt)
{
@@ -78,10 +109,7 @@ int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
unsigned long flags;
int ret = 0;
- if (src_name && strcmp(src_name, "auto") == 0)
- enabled = true;
- else if (src_name)
- ret = -EINVAL;
+ ret = vkms_crc_parse_source(src_name, &enabled);
*values_cnt = 1;
diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c
index bfe6e0312cc4..9d0b1a325a78 100644
--- a/drivers/gpu/drm/vkms/vkms_crtc.c
+++ b/drivers/gpu/drm/vkms/vkms_crtc.c
@@ -140,6 +140,7 @@ static const struct drm_crtc_funcs vkms_crtc_funcs = {
.enable_vblank = vkms_enable_vblank,
.disable_vblank = vkms_disable_vblank,
.set_crc_source = vkms_set_crc_source,
+ .verify_crc_source = vkms_verify_crc_source,
};
static void vkms_crtc_atomic_enable(struct drm_crtc *crtc,
diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h
index f156c930366a..090c5e4f5544 100644
--- a/drivers/gpu/drm/vkms/vkms_drv.h
+++ b/drivers/gpu/drm/vkms/vkms_drv.h
@@ -125,6 +125,8 @@ void vkms_gem_vunmap(struct drm_gem_object *obj);
/* CRC Support */
int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
size_t *values_cnt);
+int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
+ size_t *values_cnt);
void vkms_crc_work_handle(struct work_struct *work);
#endif /* _VKMS_DRV_H_ */
--
2.16.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH V5 2/4] drm/crc: Cleanup crtc_crc_open function
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
2018-08-21 8:38 ` [PATCH V3 1/4] drm/vkms/crc: Implement verify_crc_source callback Mahesh Kumar
@ 2018-08-21 8:38 ` Mahesh Kumar
2018-08-21 8:38 ` [PATCH V4 3/4] Revert "drm: crc: Wait for a frame before returning from open()" Mahesh Kumar
` (3 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Mahesh Kumar @ 2018-08-21 8:38 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter, Laurent Pinchart, dri-devel, Haneen Mohammed
This patch make changes to allocate crc-entries buffer before
enabling CRC generation.
It moves all the failure check early in the function before setting
the source or memory allocation.
Now set_crc_source takes only two variable inputs, values_cnt we
already gets as part of verify_crc_source.
Changes since V1:
- refactor code to use single spin lock
Changes since V2:
- rebase
Changes since V3:
- rebase on top of VKMS driver
Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Cc: dri-devel@lists.freedesktop.org
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Haneen Mohammed <hamohammed.sa@gmail.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> (V2)
Acked-by: Leo Li <sunpeng.li@amd.com> (V2)
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> (V3)
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 3 +-
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 4 +-
drivers/gpu/drm/drm_debugfs_crc.c | 61 ++++++++++------------
drivers/gpu/drm/i915/intel_drv.h | 3 +-
drivers/gpu/drm/i915/intel_pipe_crc.c | 4 +-
drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 4 +-
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 6 +--
drivers/gpu/drm/vkms/vkms_crc.c | 5 +-
drivers/gpu/drm/vkms/vkms_drv.h | 3 +-
include/drm/drm_crtc.h | 3 +-
10 files changed, 39 insertions(+), 57 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
index e43ed064dc46..54056d180003 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -258,8 +258,7 @@ amdgpu_dm_remove_sink_from_freesync_module(struct drm_connector *connector);
/* amdgpu_dm_crc.c */
#ifdef CONFIG_DEBUG_FS
-int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name,
- size_t *values_cnt);
+int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name);
int amdgpu_dm_crtc_verify_crc_source(struct drm_crtc *crtc,
const char *src_name,
size_t *values_cnt);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
index 16b679faadbd..01fc5717b657 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
@@ -62,8 +62,7 @@ amdgpu_dm_crtc_verify_crc_source(struct drm_crtc *crtc, const char *src_name,
return 0;
}
-int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name,
- size_t *values_cnt)
+int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name)
{
struct dm_crtc_state *crtc_state = to_dm_crtc_state(crtc->state);
struct dc_stream_state *stream_state = crtc_state->stream;
@@ -99,7 +98,6 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name,
return -EINVAL;
}
- *values_cnt = 3;
/* Reset crc_skipped on dm state */
crtc_state->crc_skip_count = 0;
return 0;
diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
index d7e626331eca..3e0a2cfaa35c 100644
--- a/drivers/gpu/drm/drm_debugfs_crc.c
+++ b/drivers/gpu/drm/drm_debugfs_crc.c
@@ -127,11 +127,9 @@ static ssize_t crc_control_write(struct file *file, const char __user *ubuf,
if (source[len] == '\n')
source[len] = '\0';
- if (crtc->funcs->verify_crc_source) {
- ret = crtc->funcs->verify_crc_source(crtc, source, &values_cnt);
- if (ret)
- return ret;
- }
+ ret = crtc->funcs->verify_crc_source(crtc, source, &values_cnt);
+ if (ret)
+ return ret;
spin_lock_irq(&crc->lock);
@@ -197,40 +195,40 @@ static int crtc_crc_open(struct inode *inode, struct file *filep)
return ret;
}
+ ret = crtc->funcs->verify_crc_source(crtc, crc->source, &values_cnt);
+ if (ret)
+ return ret;
+
+ if (WARN_ON(values_cnt > DRM_MAX_CRC_NR))
+ return -EINVAL;
+
+ if (WARN_ON(values_cnt == 0))
+ return -EINVAL;
+
+ entries = kcalloc(DRM_CRC_ENTRIES_NR, sizeof(*entries), GFP_KERNEL);
+ if (!entries)
+ return -ENOMEM;
+
spin_lock_irq(&crc->lock);
- if (!crc->opened)
+ if (!crc->opened) {
crc->opened = true;
- else
+ crc->entries = entries;
+ crc->values_cnt = values_cnt;
+ } else {
ret = -EBUSY;
+ }
spin_unlock_irq(&crc->lock);
- if (ret)
+ if (ret) {
+ kfree(entries);
return ret;
+ }
- ret = crtc->funcs->set_crc_source(crtc, crc->source, &values_cnt);
+ ret = crtc->funcs->set_crc_source(crtc, crc->source);
if (ret)
goto err;
- if (WARN_ON(values_cnt > DRM_MAX_CRC_NR)) {
- ret = -EINVAL;
- goto err_disable;
- }
-
- if (WARN_ON(values_cnt == 0)) {
- ret = -EINVAL;
- goto err_disable;
- }
-
- entries = kcalloc(DRM_CRC_ENTRIES_NR, sizeof(*entries), GFP_KERNEL);
- if (!entries) {
- ret = -ENOMEM;
- goto err_disable;
- }
-
spin_lock_irq(&crc->lock);
- crc->entries = entries;
- crc->values_cnt = values_cnt;
-
/*
* Only return once we got a first frame, so userspace doesn't have to
* guess when this particular piece of HW will be ready to start
@@ -247,7 +245,7 @@ static int crtc_crc_open(struct inode *inode, struct file *filep)
return 0;
err_disable:
- crtc->funcs->set_crc_source(crtc, NULL, &values_cnt);
+ crtc->funcs->set_crc_source(crtc, NULL);
err:
spin_lock_irq(&crc->lock);
crtc_crc_cleanup(crc);
@@ -259,9 +257,8 @@ static int crtc_crc_release(struct inode *inode, struct file *filep)
{
struct drm_crtc *crtc = filep->f_inode->i_private;
struct drm_crtc_crc *crc = &crtc->crc;
- size_t values_cnt;
- crtc->funcs->set_crc_source(crtc, NULL, &values_cnt);
+ crtc->funcs->set_crc_source(crtc, NULL);
spin_lock_irq(&crc->lock);
crtc_crc_cleanup(crc);
@@ -367,7 +364,7 @@ int drm_debugfs_crtc_crc_add(struct drm_crtc *crtc)
{
struct dentry *crc_ent, *ent;
- if (!crtc->funcs->set_crc_source)
+ if (!crtc->funcs->set_crc_source || !crtc->funcs->verify_crc_source)
return 0;
crc_ent = debugfs_create_dir("crc", crtc->debugfs_entry);
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 529e72bcc5ef..50a51e73cc91 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -2187,8 +2187,7 @@ void lspcon_wait_pcon_mode(struct intel_lspcon *lspcon);
/* intel_pipe_crc.c */
#ifdef CONFIG_DEBUG_FS
-int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name,
- size_t *values_cnt);
+int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name);
int intel_crtc_verify_crc_source(struct drm_crtc *crtc,
const char *source_name, size_t *values_cnt);
const char *const *intel_crtc_get_crc_sources(struct drm_crtc *crtc,
diff --git a/drivers/gpu/drm/i915/intel_pipe_crc.c b/drivers/gpu/drm/i915/intel_pipe_crc.c
index 83f9ade0cd81..f3c9010e332a 100644
--- a/drivers/gpu/drm/i915/intel_pipe_crc.c
+++ b/drivers/gpu/drm/i915/intel_pipe_crc.c
@@ -583,8 +583,7 @@ int intel_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
return -EINVAL;
}
-int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name,
- size_t *values_cnt)
+int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name)
{
struct drm_i915_private *dev_priv = to_i915(crtc->dev);
struct intel_pipe_crc *pipe_crc = &dev_priv->pipe_crc[crtc->index];
@@ -623,7 +622,6 @@ int intel_crtc_set_crc_source(struct drm_crtc *crtc, const char *source_name,
}
pipe_crc->skipped = 0;
- *values_cnt = 5;
out:
intel_display_power_put(dev_priv, power_domain);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
index 57db868da4fe..8a9e5e6f16b4 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
@@ -887,8 +887,7 @@ const char *const *rcar_du_crtc_get_crc_sources(struct drm_crtc *crtc,
}
static int rcar_du_crtc_set_crc_source(struct drm_crtc *crtc,
- const char *source_name,
- size_t *values_cnt)
+ const char *source_name)
{
struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
struct drm_modeset_acquire_ctx ctx;
@@ -903,7 +902,6 @@ static int rcar_du_crtc_set_crc_source(struct drm_crtc *crtc,
return ret;
index = ret;
- *values_cnt = 1;
/* Perform an atomic commit to set the CRC source. */
drm_modeset_acquire_init(&ctx, 0);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index c9a5ea38e86b..38f8cae7ef51 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -1111,7 +1111,7 @@ static struct drm_connector *vop_get_edp_connector(struct vop *vop)
}
static int vop_crtc_set_crc_source(struct drm_crtc *crtc,
- const char *source_name, size_t *values_cnt)
+ const char *source_name)
{
struct vop *vop = to_vop(crtc);
struct drm_connector *connector;
@@ -1121,8 +1121,6 @@ static int vop_crtc_set_crc_source(struct drm_crtc *crtc,
if (!connector)
return -EINVAL;
- *values_cnt = 3;
-
if (source_name && strcmp(source_name, "auto") == 0)
ret = analogix_dp_start_crc(connector);
else if (!source_name)
@@ -1146,7 +1144,7 @@ vop_crtc_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
#else
static int vop_crtc_set_crc_source(struct drm_crtc *crtc,
- const char *source_name, size_t *values_cnt)
+ const char *source_name)
{
return -ENODEV;
}
diff --git a/drivers/gpu/drm/vkms/vkms_crc.c b/drivers/gpu/drm/vkms/vkms_crc.c
index 68421d3d809a..ed47d67cecd6 100644
--- a/drivers/gpu/drm/vkms/vkms_crc.c
+++ b/drivers/gpu/drm/vkms/vkms_crc.c
@@ -101,8 +101,7 @@ int vkms_verify_crc_source(struct drm_crtc *crtc, const char *src_name,
return 0;
}
-int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
- size_t *values_cnt)
+int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name)
{
struct vkms_output *out = drm_crtc_to_vkms_output(crtc);
bool enabled = false;
@@ -111,8 +110,6 @@ int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
ret = vkms_crc_parse_source(src_name, &enabled);
- *values_cnt = 1;
-
/* make sure nothing is scheduled on crtc workq */
flush_workqueue(out->crc_workq);
diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h
index 090c5e4f5544..2017a2ccc43d 100644
--- a/drivers/gpu/drm/vkms/vkms_drv.h
+++ b/drivers/gpu/drm/vkms/vkms_drv.h
@@ -123,8 +123,7 @@ int vkms_gem_vmap(struct drm_gem_object *obj);
void vkms_gem_vunmap(struct drm_gem_object *obj);
/* CRC Support */
-int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name,
- size_t *values_cnt);
+int vkms_set_crc_source(struct drm_crtc *crtc, const char *src_name);
int vkms_verify_crc_source(struct drm_crtc *crtc, const char *source_name,
size_t *values_cnt);
void vkms_crc_work_handle(struct work_struct *work);
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index f2dd180a867a..b21437bc95bf 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -744,8 +744,7 @@ struct drm_crtc_funcs {
*
* 0 on success or a negative error code on failure.
*/
- int (*set_crc_source)(struct drm_crtc *crtc, const char *source,
- size_t *values_cnt);
+ int (*set_crc_source)(struct drm_crtc *crtc, const char *source);
/**
* @verify_crc_source:
*
--
2.16.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH V4 3/4] Revert "drm: crc: Wait for a frame before returning from open()"
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
2018-08-21 8:38 ` [PATCH V3 1/4] drm/vkms/crc: Implement verify_crc_source callback Mahesh Kumar
2018-08-21 8:38 ` [PATCH V5 2/4] drm/crc: Cleanup crtc_crc_open function Mahesh Kumar
@ 2018-08-21 8:38 ` Mahesh Kumar
2018-08-21 8:38 ` [PATCH V2 4/4] drm/crc: add pre_crc_read function Mahesh Kumar
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Mahesh Kumar @ 2018-08-21 8:38 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter, Tomeu Vizoso, dri-devel
This reverts commit e8fa5671183c80342d520ad81d14fa79a9d4a680.
Don't wait for first CRC during crtc_crc_open. It avoids one frame wait
during open. If application want to wait after read call, it can use
poll/read blocking read() call.
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Cc: dri-devel@lists.freedesktop.org
Cc: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
drivers/gpu/drm/drm_debugfs_crc.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
index 3e0a2cfaa35c..00e743153e94 100644
--- a/drivers/gpu/drm/drm_debugfs_crc.c
+++ b/drivers/gpu/drm/drm_debugfs_crc.c
@@ -228,24 +228,8 @@ static int crtc_crc_open(struct inode *inode, struct file *filep)
if (ret)
goto err;
- spin_lock_irq(&crc->lock);
- /*
- * Only return once we got a first frame, so userspace doesn't have to
- * guess when this particular piece of HW will be ready to start
- * generating CRCs.
- */
- ret = wait_event_interruptible_lock_irq(crc->wq,
- crtc_crc_data_count(crc),
- crc->lock);
- spin_unlock_irq(&crc->lock);
-
- if (ret)
- goto err_disable;
-
return 0;
-err_disable:
- crtc->funcs->set_crc_source(crtc, NULL);
err:
spin_lock_irq(&crc->lock);
crtc_crc_cleanup(crc);
--
2.16.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH V2 4/4] drm/crc: add pre_crc_read function
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
` (2 preceding siblings ...)
2018-08-21 8:38 ` [PATCH V4 3/4] Revert "drm: crc: Wait for a frame before returning from open()" Mahesh Kumar
@ 2018-08-21 8:38 ` Mahesh Kumar
2018-08-21 15:56 ` Rodrigo Vivi
2018-08-22 10:37 ` Maarten Lankhorst
2018-08-21 9:01 ` ✓ Fi.CI.BAT: success for Improve crc-core driver interface (rev14) Patchwork
2018-08-21 9:51 ` ✓ Fi.CI.IGT: " Patchwork
5 siblings, 2 replies; 10+ messages in thread
From: Mahesh Kumar @ 2018-08-21 8:38 UTC (permalink / raw)
To: intel-gfx; +Cc: daniel.vetter, dri-devel
This patch implements a callback function which will be called before
crc read. In this function driver can implement any preparation work
required for successfully reading CRC data.
Changes Since V1:
- rebase
Cc: dri-devel@lists.freedesktop.org
Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
---
drivers/gpu/drm/drm_debugfs_crc.c | 8 ++++++++
include/drm/drm_crtc.h | 14 ++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
index 00e743153e94..e303c194c080 100644
--- a/drivers/gpu/drm/drm_debugfs_crc.c
+++ b/drivers/gpu/drm/drm_debugfs_crc.c
@@ -274,6 +274,14 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf,
return 0;
}
+ if (crtc->funcs->pre_crc_read) {
+ ret = crtc->funcs->pre_crc_read(crtc);
+ if (ret) {
+ spin_unlock_irq(&crc->lock);
+ return ret;
+ }
+ }
+
/* Nothing to read? */
while (crtc_crc_data_count(crc) == 0) {
if (filep->f_flags & O_NONBLOCK) {
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index b21437bc95bf..19c2bf63935e 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -761,6 +761,20 @@ struct drm_crtc_funcs {
*/
int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
size_t *values_cnt);
+ /**
+ * @pre_crc_read:
+ *
+ * Driver callback for performing any preparation work required by
+ * driver before reading CRC
+ *
+ * This callback is optional if the driver does not support CRC
+ * generation or no prework is required before reading the crc
+ *
+ * RETURNS:
+ *
+ * 0 on success or a negative error code on failure.
+ */
+ int (*pre_crc_read)(struct drm_crtc *crtc);
/**
* @get_crc_sources:
*
--
2.16.2
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 10+ messages in thread
* ✓ Fi.CI.BAT: success for Improve crc-core driver interface (rev14)
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
` (3 preceding siblings ...)
2018-08-21 8:38 ` [PATCH V2 4/4] drm/crc: add pre_crc_read function Mahesh Kumar
@ 2018-08-21 9:01 ` Patchwork
2018-08-21 9:51 ` ✓ Fi.CI.IGT: " Patchwork
5 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2018-08-21 9:01 UTC (permalink / raw)
To: Mahesh Kumar; +Cc: intel-gfx
== Series Details ==
Series: Improve crc-core driver interface (rev14)
URL : https://patchwork.freedesktop.org/series/45246/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4692 -> Patchwork_9983 =
== Summary - SUCCESS ==
No regressions found.
External URL: https://patchwork.freedesktop.org/api/1.0/series/45246/revisions/14/mbox/
== Known issues ==
Here are the changes found in Patchwork_9983 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@drv_selftest@live_guc:
fi-skl-guc: NOTRUN -> DMESG-WARN (fdo#107175, fdo#107258)
igt@kms_pipe_crc_basic@read-crc-pipe-a:
{fi-byt-clapper}: PASS -> FAIL (fdo#107362)
igt@kms_pipe_crc_basic@suspend-read-crc-pipe-c:
fi-kbl-7567u: PASS -> FAIL (fdo#103191)
{igt@kms_psr@primary_page_flip}:
{fi-icl-u}: NOTRUN -> FAIL (fdo#107383) +3
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#107175 https://bugs.freedesktop.org/show_bug.cgi?id=107175
fdo#107258 https://bugs.freedesktop.org/show_bug.cgi?id=107258
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
fdo#107383 https://bugs.freedesktop.org/show_bug.cgi?id=107383
== Participating hosts (51 -> 48) ==
Additional (2): fi-skl-guc fi-icl-u
Missing (5): fi-byt-j1900 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-hsw-4200u
== Build changes ==
* Linux: CI_DRM_4692 -> Patchwork_9983
CI_DRM_4692: d53f119472fc7daa532e46ea77098e9e9db2ac10 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4607: 6e0b3e7a2d241af36f8c6b1cc335aa1db3532d29 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9983: 38c9740da78420b23bcd1f1a9754b5a090a92026 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
38c9740da784 drm/crc: add pre_crc_read function
76187455beb4 Revert "drm: crc: Wait for a frame before returning from open()"
996e35e156d5 drm/crc: Cleanup crtc_crc_open function
50ea6d9b4ac1 drm/vkms/crc: Implement verify_crc_source callback
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9983/issues.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* ✓ Fi.CI.IGT: success for Improve crc-core driver interface (rev14)
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
` (4 preceding siblings ...)
2018-08-21 9:01 ` ✓ Fi.CI.BAT: success for Improve crc-core driver interface (rev14) Patchwork
@ 2018-08-21 9:51 ` Patchwork
5 siblings, 0 replies; 10+ messages in thread
From: Patchwork @ 2018-08-21 9:51 UTC (permalink / raw)
To: Mahesh Kumar; +Cc: intel-gfx
== Series Details ==
Series: Improve crc-core driver interface (rev14)
URL : https://patchwork.freedesktop.org/series/45246/
State : success
== Summary ==
= CI Bug Log - changes from CI_DRM_4692_full -> Patchwork_9983_full =
== Summary - SUCCESS ==
No regressions found.
== Known issues ==
Here are the changes found in Patchwork_9983_full that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_exec_await@wide-contexts:
shard-glk: PASS -> FAIL (fdo#105900)
igt@gem_ppgtt@blt-vs-render-ctxn:
shard-kbl: PASS -> INCOMPLETE (fdo#103665, fdo#106023)
igt@gem_workarounds@suspend-resume:
shard-glk: PASS -> FAIL (fdo#103375)
igt@kms_cursor_crc@cursor-256x256-suspend:
shard-kbl: PASS -> DMESG-WARN (fdo#103313)
igt@kms_flip@flip-vs-expired-vblank-interruptible:
shard-glk: PASS -> FAIL (fdo#105363)
igt@kms_setmode@basic:
shard-kbl: PASS -> FAIL (fdo#99912)
==== Possible fixes ====
igt@drv_suspend@shrink:
shard-glk: FAIL (fdo#106886) -> PASS
igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-indfb-draw-mmap-wc:
shard-glk: FAIL (fdo#103167) -> PASS
fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
fdo#103313 https://bugs.freedesktop.org/show_bug.cgi?id=103313
fdo#103375 https://bugs.freedesktop.org/show_bug.cgi?id=103375
fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
fdo#105900 https://bugs.freedesktop.org/show_bug.cgi?id=105900
fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
fdo#106886 https://bugs.freedesktop.org/show_bug.cgi?id=106886
fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
== Participating hosts (5 -> 5) ==
No changes in participating hosts
== Build changes ==
* Linux: CI_DRM_4692 -> Patchwork_9983
CI_DRM_4692: d53f119472fc7daa532e46ea77098e9e9db2ac10 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4607: 6e0b3e7a2d241af36f8c6b1cc335aa1db3532d29 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_9983: 38c9740da78420b23bcd1f1a9754b5a090a92026 @ git://anongit.freedesktop.org/gfx-ci/linux
piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_9983/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V2 4/4] drm/crc: add pre_crc_read function
2018-08-21 8:38 ` [PATCH V2 4/4] drm/crc: add pre_crc_read function Mahesh Kumar
@ 2018-08-21 15:56 ` Rodrigo Vivi
2018-08-22 10:37 ` Maarten Lankhorst
1 sibling, 0 replies; 10+ messages in thread
From: Rodrigo Vivi @ 2018-08-21 15:56 UTC (permalink / raw)
To: Mahesh Kumar; +Cc: daniel.vetter, intel-gfx, dri-devel
On Tue, Aug 21, 2018 at 02:08:58PM +0530, Mahesh Kumar wrote:
> This patch implements a callback function which will be called before
> crc read. In this function driver can implement any preparation work
> required for successfully reading CRC data.
>
> Changes Since V1:
> - rebase
>
> Cc: dri-devel@lists.freedesktop.org
> Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/drm_debugfs_crc.c | 8 ++++++++
> include/drm/drm_crtc.h | 14 ++++++++++++++
> 2 files changed, 22 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
> index 00e743153e94..e303c194c080 100644
> --- a/drivers/gpu/drm/drm_debugfs_crc.c
> +++ b/drivers/gpu/drm/drm_debugfs_crc.c
> @@ -274,6 +274,14 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf,
> return 0;
> }
>
> + if (crtc->funcs->pre_crc_read) {
> + ret = crtc->funcs->pre_crc_read(crtc);
> + if (ret) {
> + spin_unlock_irq(&crc->lock);
> + return ret;
> + }
> + }
> +
> /* Nothing to read? */
> while (crtc_crc_data_count(crc) == 0) {
> if (filep->f_flags & O_NONBLOCK) {
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index b21437bc95bf..19c2bf63935e 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -761,6 +761,20 @@ struct drm_crtc_funcs {
> */
> int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
> size_t *values_cnt);
> + /**
> + * @pre_crc_read:
> + *
> + * Driver callback for performing any preparation work required by
> + * driver before reading CRC
> + *
> + * This callback is optional if the driver does not support CRC
> + * generation or no prework is required before reading the crc
> + *
> + * RETURNS:
> + *
> + * 0 on success or a negative error code on failure.
> + */
> + int (*pre_crc_read)(struct drm_crtc *crtc);
> /**
> * @get_crc_sources:
> *
> --
> 2.16.2
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V2 4/4] drm/crc: add pre_crc_read function
2018-08-21 8:38 ` [PATCH V2 4/4] drm/crc: add pre_crc_read function Mahesh Kumar
2018-08-21 15:56 ` Rodrigo Vivi
@ 2018-08-22 10:37 ` Maarten Lankhorst
2018-08-22 16:54 ` Rodrigo Vivi
1 sibling, 1 reply; 10+ messages in thread
From: Maarten Lankhorst @ 2018-08-22 10:37 UTC (permalink / raw)
To: Mahesh Kumar, intel-gfx; +Cc: David Airlie, daniel.vetter, dri-devel
Op 21-08-18 om 10:38 schreef Mahesh Kumar:
> This patch implements a callback function which will be called before
> crc read. In this function driver can implement any preparation work
> required for successfully reading CRC data.
>
> Changes Since V1:
> - rebase
>
> Cc: dri-devel@lists.freedesktop.org
> Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
After some discussion with David on whether this can be upstreamed, he NACK'd it.
Because there are no upstream users for this callback, it cannot be included upstream.
It would be removed by the first person to notice there are no in-kernel users using it.
For the first 3 patches:
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> drivers/gpu/drm/drm_debugfs_crc.c | 8 ++++++++
> include/drm/drm_crtc.h | 14 ++++++++++++++
> 2 files changed, 22 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
> index 00e743153e94..e303c194c080 100644
> --- a/drivers/gpu/drm/drm_debugfs_crc.c
> +++ b/drivers/gpu/drm/drm_debugfs_crc.c
> @@ -274,6 +274,14 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf,
> return 0;
> }
>
> + if (crtc->funcs->pre_crc_read) {
> + ret = crtc->funcs->pre_crc_read(crtc);
> + if (ret) {
> + spin_unlock_irq(&crc->lock);
> + return ret;
> + }
> + }
> +
> /* Nothing to read? */
> while (crtc_crc_data_count(crc) == 0) {
> if (filep->f_flags & O_NONBLOCK) {
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index b21437bc95bf..19c2bf63935e 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -761,6 +761,20 @@ struct drm_crtc_funcs {
> */
> int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
> size_t *values_cnt);
> + /**
> + * @pre_crc_read:
> + *
> + * Driver callback for performing any preparation work required by
> + * driver before reading CRC
> + *
> + * This callback is optional if the driver does not support CRC
> + * generation or no prework is required before reading the crc
> + *
> + * RETURNS:
> + *
> + * 0 on success or a negative error code on failure.
> + */
> + int (*pre_crc_read)(struct drm_crtc *crtc);
> /**
> * @get_crc_sources:
> *
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH V2 4/4] drm/crc: add pre_crc_read function
2018-08-22 10:37 ` Maarten Lankhorst
@ 2018-08-22 16:54 ` Rodrigo Vivi
0 siblings, 0 replies; 10+ messages in thread
From: Rodrigo Vivi @ 2018-08-22 16:54 UTC (permalink / raw)
To: Maarten Lankhorst; +Cc: David Airlie, daniel.vetter, intel-gfx, dri-devel
On Wed, Aug 22, 2018 at 12:37:05PM +0200, Maarten Lankhorst wrote:
> Op 21-08-18 om 10:38 schreef Mahesh Kumar:
> > This patch implements a callback function which will be called before
> > crc read. In this function driver can implement any preparation work
> > required for successfully reading CRC data.
> >
> > Changes Since V1:
> > - rebase
> >
> > Cc: dri-devel@lists.freedesktop.org
> > Signed-off-by: Mahesh Kumar <mahesh1.kumar@intel.com>
> After some discussion with David on whether this can be upstreamed, he NACK'd it.
> Because there are no upstream users for this callback, it cannot be included upstream.
> It would be removed by the first person to notice there are no in-kernel users using it.
It makes sense.... After I posted the review yesterday I started thinking exactly
about this case... if would get easily removed in a clean-up for obvious reasons...
> For the first 3 patches:
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
thanks. pushed all 3 to drm-misc-next.
> > drivers/gpu/drm/drm_debugfs_crc.c | 8 ++++++++
> > include/drm/drm_crtc.h | 14 ++++++++++++++
> > 2 files changed, 22 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
> > index 00e743153e94..e303c194c080 100644
> > --- a/drivers/gpu/drm/drm_debugfs_crc.c
> > +++ b/drivers/gpu/drm/drm_debugfs_crc.c
> > @@ -274,6 +274,14 @@ static ssize_t crtc_crc_read(struct file *filep, char __user *user_buf,
> > return 0;
> > }
> >
> > + if (crtc->funcs->pre_crc_read) {
> > + ret = crtc->funcs->pre_crc_read(crtc);
> > + if (ret) {
> > + spin_unlock_irq(&crc->lock);
> > + return ret;
> > + }
> > + }
> > +
> > /* Nothing to read? */
> > while (crtc_crc_data_count(crc) == 0) {
> > if (filep->f_flags & O_NONBLOCK) {
> > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> > index b21437bc95bf..19c2bf63935e 100644
> > --- a/include/drm/drm_crtc.h
> > +++ b/include/drm/drm_crtc.h
> > @@ -761,6 +761,20 @@ struct drm_crtc_funcs {
> > */
> > int (*verify_crc_source)(struct drm_crtc *crtc, const char *source,
> > size_t *values_cnt);
> > + /**
> > + * @pre_crc_read:
> > + *
> > + * Driver callback for performing any preparation work required by
> > + * driver before reading CRC
> > + *
> > + * This callback is optional if the driver does not support CRC
> > + * generation or no prework is required before reading the crc
> > + *
> > + * RETURNS:
> > + *
> > + * 0 on success or a negative error code on failure.
> > + */
> > + int (*pre_crc_read)(struct drm_crtc *crtc);
> > /**
> > * @get_crc_sources:
> > *
>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-08-22 16:54 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-08-21 8:38 [PATCH 0/4] Improve crc-core driver interface Mahesh Kumar
2018-08-21 8:38 ` [PATCH V3 1/4] drm/vkms/crc: Implement verify_crc_source callback Mahesh Kumar
2018-08-21 8:38 ` [PATCH V5 2/4] drm/crc: Cleanup crtc_crc_open function Mahesh Kumar
2018-08-21 8:38 ` [PATCH V4 3/4] Revert "drm: crc: Wait for a frame before returning from open()" Mahesh Kumar
2018-08-21 8:38 ` [PATCH V2 4/4] drm/crc: add pre_crc_read function Mahesh Kumar
2018-08-21 15:56 ` Rodrigo Vivi
2018-08-22 10:37 ` Maarten Lankhorst
2018-08-22 16:54 ` Rodrigo Vivi
2018-08-21 9:01 ` ✓ Fi.CI.BAT: success for Improve crc-core driver interface (rev14) Patchwork
2018-08-21 9:51 ` ✓ Fi.CI.IGT: " Patchwork
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).