linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/4] drm/dp: Implement CRC debugfs API
@ 2017-03-03 13:39 Tomeu Vizoso
  2017-03-03 13:39 ` [PATCH v6 4/4] drm/rockchip: " Tomeu Vizoso
  2017-03-06 17:19 ` [PATCH v6 0/4] drm/dp: " Sean Paul
  0 siblings, 2 replies; 5+ messages in thread
From: Tomeu Vizoso @ 2017-03-03 13:39 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

this series builds up on the API for exposing captured CRCs through
debugfs.

It adds new DP helpers for starting and stopping CRC capture and gets
the Rockchip driver to use it.

With these patches, tests in IGT such as kms_pipe_crc_basic and
kms_plane do pass on RK3288.

In this v6, the backpointer in drm_dp_aux becomes drm_crtc instead of
drm_connector, following discussion with Sean Paul.

Thanks,

Tomeu


Tomeu Vizoso (4):
  drm/dp: add crtc backpointer to drm_dp_aux
  drm/dp: add helpers for capture of frame CRCs
  drm/bridge: analogix_dp: add helpers for capture of frame CRCs
  drm/rockchip: Implement CRC debugfs API

 drivers/gpu/drm/bridge/analogix/analogix_dp_core.c |  22 ++++
 drivers/gpu/drm/drm_dp_helper.c                    | 126 +++++++++++++++++++++
 drivers/gpu/drm/rockchip/rockchip_drm_vop.c        |  41 +++++++
 include/drm/bridge/analogix_dp.h                   |   3 +
 include/drm/drm_dp_helper.h                        |   9 ++
 5 files changed, 201 insertions(+)

-- 
2.9.3

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v6 4/4] drm/rockchip: Implement CRC debugfs API
  2017-03-03 13:39 [PATCH v6 0/4] drm/dp: Implement CRC debugfs API Tomeu Vizoso
@ 2017-03-03 13:39 ` Tomeu Vizoso
  2017-03-06  0:55   ` Mark yao
  2017-03-06 17:58   ` Emil Velikov
  2017-03-06 17:19 ` [PATCH v6 0/4] drm/dp: " Sean Paul
  1 sibling, 2 replies; 5+ messages in thread
From: Tomeu Vizoso @ 2017-03-03 13:39 UTC (permalink / raw)
  To: linux-arm-kernel

Implement the .set_crc_source() callback and call the DP helpers
accordingly to start and stop CRC capture.

This is only done if this CRTC is currently using the eDP connector.

v3: Remove superfluous check on rockchip_crtc_state->output_type

v6: Remove superfluous variable

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
---

 drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 41 +++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
index 94d7b7327ff7..17ab16c4b922 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
@@ -19,6 +19,7 @@
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_flip_work.h>
 #include <drm/drm_plane_helper.h>
+#include <drm/bridge/analogix_dp.h>
 
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -1111,6 +1112,45 @@ static void vop_crtc_destroy_state(struct drm_crtc *crtc,
 	kfree(s);
 }
 
+static struct drm_connector *vop_get_edp_connector(struct vop *vop)
+{
+	struct drm_crtc *crtc = &vop->crtc;
+	struct drm_connector *connector;
+
+	mutex_lock(&crtc->dev->mode_config.mutex);
+	drm_for_each_connector(connector, crtc->dev)
+		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
+			mutex_unlock(&crtc->dev->mode_config.mutex);
+			return connector;
+		}
+	mutex_unlock(&crtc->dev->mode_config.mutex);
+
+	return NULL;
+}
+
+static int vop_crtc_set_crc_source(struct drm_crtc *crtc,
+				   const char *source_name, size_t *values_cnt)
+{
+	struct vop *vop = to_vop(crtc);
+	struct drm_connector *connector;
+	int ret;
+
+	connector = vop_get_edp_connector(vop);
+	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)
+		ret = analogix_dp_stop_crc(connector);
+	else
+		ret = -EINVAL;
+
+	return ret;
+}
+
 static const struct drm_crtc_funcs vop_crtc_funcs = {
 	.set_config = drm_atomic_helper_set_config,
 	.page_flip = drm_atomic_helper_page_flip,
@@ -1120,6 +1160,7 @@ static const struct drm_crtc_funcs vop_crtc_funcs = {
 	.atomic_destroy_state = vop_crtc_destroy_state,
 	.enable_vblank = vop_crtc_enable_vblank,
 	.disable_vblank = vop_crtc_disable_vblank,
+	.set_crc_source = vop_crtc_set_crc_source,
 };
 
 static void vop_fb_unref_worker(struct drm_flip_work *work, void *val)
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v6 4/4] drm/rockchip: Implement CRC debugfs API
  2017-03-03 13:39 ` [PATCH v6 4/4] drm/rockchip: " Tomeu Vizoso
@ 2017-03-06  0:55   ` Mark yao
  2017-03-06 17:58   ` Emil Velikov
  1 sibling, 0 replies; 5+ messages in thread
From: Mark yao @ 2017-03-06  0:55 UTC (permalink / raw)
  To: linux-arm-kernel

On 2017?03?03? 21:39, Tomeu Vizoso wrote:
> Implement the .set_crc_source() callback and call the DP helpers
> accordingly to start and stop CRC capture.
>
> This is only done if this CRTC is currently using the eDP connector.
>
> v3: Remove superfluous check on rockchip_crtc_state->output_type
>
> v6: Remove superfluous variable
>
> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
> ---

looks good for me

Acked-by: Mark Yao <mark.yao@rock-chips.com>

>   drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 41 +++++++++++++++++++++++++++++
>   1 file changed, 41 insertions(+)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index 94d7b7327ff7..17ab16c4b922 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -19,6 +19,7 @@
>   #include <drm/drm_crtc_helper.h>
>   #include <drm/drm_flip_work.h>
>   #include <drm/drm_plane_helper.h>
> +#include <drm/bridge/analogix_dp.h>
>   
>   #include <linux/kernel.h>
>   #include <linux/module.h>
> @@ -1111,6 +1112,45 @@ static void vop_crtc_destroy_state(struct drm_crtc *crtc,
>   	kfree(s);
>   }
>   
> +static struct drm_connector *vop_get_edp_connector(struct vop *vop)
> +{
> +	struct drm_crtc *crtc = &vop->crtc;
> +	struct drm_connector *connector;
> +
> +	mutex_lock(&crtc->dev->mode_config.mutex);
> +	drm_for_each_connector(connector, crtc->dev)
> +		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
> +			mutex_unlock(&crtc->dev->mode_config.mutex);
> +			return connector;
> +		}
> +	mutex_unlock(&crtc->dev->mode_config.mutex);
> +
> +	return NULL;
> +}
> +
> +static int vop_crtc_set_crc_source(struct drm_crtc *crtc,
> +				   const char *source_name, size_t *values_cnt)
> +{
> +	struct vop *vop = to_vop(crtc);
> +	struct drm_connector *connector;
> +	int ret;
> +
> +	connector = vop_get_edp_connector(vop);
> +	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)
> +		ret = analogix_dp_stop_crc(connector);
> +	else
> +		ret = -EINVAL;
> +
> +	return ret;
> +}
> +
>   static const struct drm_crtc_funcs vop_crtc_funcs = {
>   	.set_config = drm_atomic_helper_set_config,
>   	.page_flip = drm_atomic_helper_page_flip,
> @@ -1120,6 +1160,7 @@ static const struct drm_crtc_funcs vop_crtc_funcs = {
>   	.atomic_destroy_state = vop_crtc_destroy_state,
>   	.enable_vblank = vop_crtc_enable_vblank,
>   	.disable_vblank = vop_crtc_disable_vblank,
> +	.set_crc_source = vop_crtc_set_crc_source,
>   };
>   
>   static void vop_fb_unref_worker(struct drm_flip_work *work, void *val)


-- 
?ark Yao

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v6 0/4] drm/dp: Implement CRC debugfs API
  2017-03-03 13:39 [PATCH v6 0/4] drm/dp: Implement CRC debugfs API Tomeu Vizoso
  2017-03-03 13:39 ` [PATCH v6 4/4] drm/rockchip: " Tomeu Vizoso
@ 2017-03-06 17:19 ` Sean Paul
  1 sibling, 0 replies; 5+ messages in thread
From: Sean Paul @ 2017-03-06 17:19 UTC (permalink / raw)
  To: linux-arm-kernel

On Fri, Mar 03, 2017 at 02:39:32PM +0100, Tomeu Vizoso wrote:
> Hi,
> 
> this series builds up on the API for exposing captured CRCs through
> debugfs.
> 
> It adds new DP helpers for starting and stopping CRC capture and gets
> the Rockchip driver to use it.
> 
> With these patches, tests in IGT such as kms_pipe_crc_basic and
> kms_plane do pass on RK3288.
> 
> In this v6, the backpointer in drm_dp_aux becomes drm_crtc instead of
> drm_connector, following discussion with Sean Paul.
> 
> Thanks,

Thanks for respinning this, Tomeu.

Applied to -misc

Sean

> 
> Tomeu
> 
> 
> Tomeu Vizoso (4):
>   drm/dp: add crtc backpointer to drm_dp_aux
>   drm/dp: add helpers for capture of frame CRCs
>   drm/bridge: analogix_dp: add helpers for capture of frame CRCs
>   drm/rockchip: Implement CRC debugfs API
> 
>  drivers/gpu/drm/bridge/analogix/analogix_dp_core.c |  22 ++++
>  drivers/gpu/drm/drm_dp_helper.c                    | 126 +++++++++++++++++++++
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c        |  41 +++++++
>  include/drm/bridge/analogix_dp.h                   |   3 +
>  include/drm/drm_dp_helper.h                        |   9 ++
>  5 files changed, 201 insertions(+)
> 
> -- 
> 2.9.3
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v6 4/4] drm/rockchip: Implement CRC debugfs API
  2017-03-03 13:39 ` [PATCH v6 4/4] drm/rockchip: " Tomeu Vizoso
  2017-03-06  0:55   ` Mark yao
@ 2017-03-06 17:58   ` Emil Velikov
  1 sibling, 0 replies; 5+ messages in thread
From: Emil Velikov @ 2017-03-06 17:58 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Tomeu,

Pardon for dropping in late.

On 3 March 2017 at 13:39, Tomeu Vizoso <tomeu.vizoso@collabora.com> wrote:
> Implement the .set_crc_source() callback and call the DP helpers
> accordingly to start and stop CRC capture.
>
> This is only done if this CRTC is currently using the eDP connector.
>
> v3: Remove superfluous check on rockchip_crtc_state->output_type
>
> v6: Remove superfluous variable
>
> Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
> ---
>
>  drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 41 +++++++++++++++++++++++++++++
>  1 file changed, 41 insertions(+)
>
I think this won't fly (build).

Afaict analogix_dp-rockchip.c (as guarded by ROCKCHIP_ANALOGIX_DP) is
the only piece that can/should have DRM_ANALOGIX_DP code. Perhaps
adding a simple wrapper/stubs will be the easier option here ?

-Emil

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-03-06 17:58 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-03 13:39 [PATCH v6 0/4] drm/dp: Implement CRC debugfs API Tomeu Vizoso
2017-03-03 13:39 ` [PATCH v6 4/4] drm/rockchip: " Tomeu Vizoso
2017-03-06  0:55   ` Mark yao
2017-03-06 17:58   ` Emil Velikov
2017-03-06 17:19 ` [PATCH v6 0/4] drm/dp: " Sean Paul

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).