All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/msm/mdp4: convert to drm_crtc_handle_vblank()
@ 2022-05-07  1:00 ` Dmitry Baryshkov
  0 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
	linux-arm-msm, dri-devel, freedreno

Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank()
instead.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
index 87675c162eea..62cc566756e8 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
@@ -72,8 +72,7 @@ static irqreturn_t mdp4_irq(int irq, void *arg)
 	struct mdp_kms *mdp_kms = to_mdp_kms(kms);
 	struct mdp4_kms *mdp4_kms = to_mdp4_kms(mdp_kms);
 	struct drm_device *dev = mdp4_kms->dev;
-	struct msm_drm_private *priv = dev->dev_private;
-	unsigned int id;
+	struct drm_crtc *crtc;
 	uint32_t status, enable;
 
 	enable = mdp4_read(mdp4_kms, REG_MDP4_INTR_ENABLE);
@@ -84,9 +83,9 @@ static irqreturn_t mdp4_irq(int irq, void *arg)
 
 	mdp_dispatch_irqs(mdp_kms, status);
 
-	for (id = 0; id < priv->num_crtcs; id++)
-		if (status & mdp4_crtc_vblank(priv->crtcs[id]))
-			drm_handle_vblank(dev, id);
+	drm_for_each_crtc(crtc, dev)
+		if (status & mdp4_crtc_vblank(crtc))
+			drm_crtc_handle_vblank(crtc);
 
 	return IRQ_HANDLED;
 }
-- 
2.35.1


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

* [PATCH 1/3] drm/msm/mdp4: convert to drm_crtc_handle_vblank()
@ 2022-05-07  1:00 ` Dmitry Baryshkov
  0 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: David Airlie, linux-arm-msm, dri-devel, Bjorn Andersson,
	Stephen Boyd, freedreno

Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank()
instead.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
index 87675c162eea..62cc566756e8 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_irq.c
@@ -72,8 +72,7 @@ static irqreturn_t mdp4_irq(int irq, void *arg)
 	struct mdp_kms *mdp_kms = to_mdp_kms(kms);
 	struct mdp4_kms *mdp4_kms = to_mdp4_kms(mdp_kms);
 	struct drm_device *dev = mdp4_kms->dev;
-	struct msm_drm_private *priv = dev->dev_private;
-	unsigned int id;
+	struct drm_crtc *crtc;
 	uint32_t status, enable;
 
 	enable = mdp4_read(mdp4_kms, REG_MDP4_INTR_ENABLE);
@@ -84,9 +83,9 @@ static irqreturn_t mdp4_irq(int irq, void *arg)
 
 	mdp_dispatch_irqs(mdp_kms, status);
 
-	for (id = 0; id < priv->num_crtcs; id++)
-		if (status & mdp4_crtc_vblank(priv->crtcs[id]))
-			drm_handle_vblank(dev, id);
+	drm_for_each_crtc(crtc, dev)
+		if (status & mdp4_crtc_vblank(crtc))
+			drm_crtc_handle_vblank(crtc);
 
 	return IRQ_HANDLED;
 }
-- 
2.35.1


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

* [PATCH 2/3] drm/msm/mdp5: convert to drm_crtc_handle_vblank()
  2022-05-07  1:00 ` Dmitry Baryshkov
@ 2022-05-07  1:00   ` Dmitry Baryshkov
  -1 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
	linux-arm-msm, dri-devel, freedreno

Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank()
instead.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
index d573ff29d5a4..18cc62f1e7ec 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
@@ -85,8 +85,7 @@ static irqreturn_t mdp5_irq(int irq, void *arg)
 	struct mdp_kms *mdp_kms = to_mdp_kms(kms);
 	struct mdp5_kms *mdp5_kms = to_mdp5_kms(mdp_kms);
 	struct drm_device *dev = mdp5_kms->dev;
-	struct msm_drm_private *priv = dev->dev_private;
-	unsigned int id;
+	struct drm_crtc *crtc;
 	uint32_t status, enable;
 
 	enable = mdp5_read(mdp5_kms, REG_MDP5_INTR_EN);
@@ -97,9 +96,9 @@ static irqreturn_t mdp5_irq(int irq, void *arg)
 
 	mdp_dispatch_irqs(mdp_kms, status);
 
-	for (id = 0; id < priv->num_crtcs; id++)
-		if (status & mdp5_crtc_vblank(priv->crtcs[id]))
-			drm_handle_vblank(dev, id);
+	drm_for_each_crtc(crtc, dev)
+		if (status & mdp5_crtc_vblank(crtc))
+			drm_crtc_handle_vblank(crtc);
 
 	return IRQ_HANDLED;
 }
-- 
2.35.1


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

* [PATCH 2/3] drm/msm/mdp5: convert to drm_crtc_handle_vblank()
@ 2022-05-07  1:00   ` Dmitry Baryshkov
  0 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: David Airlie, linux-arm-msm, dri-devel, Bjorn Andersson,
	Stephen Boyd, freedreno

Stop using deprecated drm_handle_vblank(), use drm_crtc_handle_vblank()
instead.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
index d573ff29d5a4..18cc62f1e7ec 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_irq.c
@@ -85,8 +85,7 @@ static irqreturn_t mdp5_irq(int irq, void *arg)
 	struct mdp_kms *mdp_kms = to_mdp_kms(kms);
 	struct mdp5_kms *mdp5_kms = to_mdp5_kms(mdp_kms);
 	struct drm_device *dev = mdp5_kms->dev;
-	struct msm_drm_private *priv = dev->dev_private;
-	unsigned int id;
+	struct drm_crtc *crtc;
 	uint32_t status, enable;
 
 	enable = mdp5_read(mdp5_kms, REG_MDP5_INTR_EN);
@@ -97,9 +96,9 @@ static irqreturn_t mdp5_irq(int irq, void *arg)
 
 	mdp_dispatch_irqs(mdp_kms, status);
 
-	for (id = 0; id < priv->num_crtcs; id++)
-		if (status & mdp5_crtc_vblank(priv->crtcs[id]))
-			drm_handle_vblank(dev, id);
+	drm_for_each_crtc(crtc, dev)
+		if (status & mdp5_crtc_vblank(crtc))
+			drm_crtc_handle_vblank(crtc);
 
 	return IRQ_HANDLED;
 }
-- 
2.35.1


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

* [PATCH 3/3] drm/msm: stop storing the array of CRTCs in struct msm_drm_private
  2022-05-07  1:00 ` Dmitry Baryshkov
@ 2022-05-07  1:00   ` Dmitry Baryshkov
  -1 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: Stephen Boyd, David Airlie, Daniel Vetter, Bjorn Andersson,
	linux-arm-msm, dri-devel, freedreno

Handling the array of CRTC duplicate the struct msm_drm_private
duplicates a list of CRTCs in the drm_device. Drop it and use the
existing list for CRTC enumeration.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c  |  2 +-
 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c |  2 +-
 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c |  2 +-
 drivers/gpu/drm/msm/msm_drv.c            | 27 ++++++++++++------------
 drivers/gpu/drm/msm/msm_drv.h            |  3 +--
 5 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 494978da7785..f89dcb903869 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -808,7 +808,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
 			ret = PTR_ERR(crtc);
 			return ret;
 		}
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/* All CRTCs are compatible with all encoders */
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
index b7aced272af9..375643a14198 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
@@ -335,7 +335,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
 			goto fail;
 		}
 
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/*
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 18cf0ff4da6c..35242e76de10 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -495,7 +495,7 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
 			DRM_DEV_ERROR(dev->dev, "failed to construct crtc %d (%d)\n", i, ret);
 			goto fail;
 		}
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/*
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index d2fbe54fec4d..576d346cc860 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -98,7 +98,7 @@ static void msm_irq_uninstall(struct drm_device *dev)
 
 struct msm_vblank_work {
 	struct work_struct work;
-	int crtc_id;
+	struct drm_crtc *crtc;
 	bool enable;
 	struct msm_drm_private *priv;
 };
@@ -111,15 +111,15 @@ static void vblank_ctrl_worker(struct work_struct *work)
 	struct msm_kms *kms = priv->kms;
 
 	if (vbl_work->enable)
-		kms->funcs->enable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
+		kms->funcs->enable_vblank(kms, vbl_work->crtc);
 	else
-		kms->funcs->disable_vblank(kms,	priv->crtcs[vbl_work->crtc_id]);
+		kms->funcs->disable_vblank(kms,	vbl_work->crtc);
 
 	kfree(vbl_work);
 }
 
 static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
-					int crtc_id, bool enable)
+					struct drm_crtc *crtc, bool enable)
 {
 	struct msm_vblank_work *vbl_work;
 
@@ -129,7 +129,7 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
 
 	INIT_WORK(&vbl_work->work, vblank_ctrl_worker);
 
-	vbl_work->crtc_id = crtc_id;
+	vbl_work->crtc = crtc;
 	vbl_work->enable = enable;
 	vbl_work->priv = priv;
 
@@ -303,6 +303,7 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	struct msm_drm_private *priv = dev_get_drvdata(dev);
 	struct drm_device *ddev;
 	struct msm_kms *kms;
+	struct drm_crtc *crtc;
 	int ret, i;
 
 	if (drm_firmware_drivers_only())
@@ -376,12 +377,12 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	ddev->mode_config.funcs = &mode_config_funcs;
 	ddev->mode_config.helper_private = &mode_config_helper_funcs;
 
-	for (i = 0; i < priv->num_crtcs; i++) {
+	drm_for_each_crtc(crtc, ddev) {
 		/* initialize event thread */
-		priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id;
+		priv->event_thread[i].crtc = crtc;
 		priv->event_thread[i].dev = ddev;
 		priv->event_thread[i].worker = kthread_create_worker(0,
-			"crtc_event:%d", priv->event_thread[i].crtc_id);
+			"crtc_event:%d", priv->event_thread[i].crtc->base.id);
 		if (IS_ERR(priv->event_thread[i].worker)) {
 			ret = PTR_ERR(priv->event_thread[i].worker);
 			DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
@@ -517,25 +518,23 @@ static void msm_postclose(struct drm_device *dev, struct drm_file *file)
 int msm_crtc_enable_vblank(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
-	unsigned int pipe = crtc->index;
 	struct msm_drm_private *priv = dev->dev_private;
 	struct msm_kms *kms = priv->kms;
 	if (!kms)
 		return -ENXIO;
-	drm_dbg_vbl(dev, "crtc=%u", pipe);
-	return vblank_ctrl_queue_work(priv, pipe, true);
+	drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
+	return vblank_ctrl_queue_work(priv, crtc, true);
 }
 
 void msm_crtc_disable_vblank(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
-	unsigned int pipe = crtc->index;
 	struct msm_drm_private *priv = dev->dev_private;
 	struct msm_kms *kms = priv->kms;
 	if (!kms)
 		return;
-	drm_dbg_vbl(dev, "crtc=%u", pipe);
-	vblank_ctrl_queue_work(priv, pipe, false);
+	drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
+	vblank_ctrl_queue_work(priv, crtc, false);
 }
 
 /*
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index fdbaad53eb84..2ba57c575e13 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -102,7 +102,7 @@ struct msm_display_topology {
 /* Commit/Event thread specific structure */
 struct msm_drm_thread {
 	struct drm_device *dev;
-	unsigned int crtc_id;
+	struct drm_crtc *crtc;
 	struct kthread_worker *worker;
 };
 
@@ -178,7 +178,6 @@ struct msm_drm_private {
 	struct workqueue_struct *wq;
 
 	unsigned int num_crtcs;
-	struct drm_crtc *crtcs[MAX_CRTCS];
 
 	struct msm_drm_thread event_thread[MAX_CRTCS];
 
-- 
2.35.1


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

* [PATCH 3/3] drm/msm: stop storing the array of CRTCs in struct msm_drm_private
@ 2022-05-07  1:00   ` Dmitry Baryshkov
  0 siblings, 0 replies; 8+ messages in thread
From: Dmitry Baryshkov @ 2022-05-07  1:00 UTC (permalink / raw)
  To: Rob Clark, Sean Paul, Abhinav Kumar
  Cc: David Airlie, linux-arm-msm, dri-devel, Bjorn Andersson,
	Stephen Boyd, freedreno

Handling the array of CRTC duplicate the struct msm_drm_private
duplicates a list of CRTCs in the drm_device. Drop it and use the
existing list for CRTC enumeration.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c  |  2 +-
 drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c |  2 +-
 drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c |  2 +-
 drivers/gpu/drm/msm/msm_drv.c            | 27 ++++++++++++------------
 drivers/gpu/drm/msm/msm_drv.h            |  3 +--
 5 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 494978da7785..f89dcb903869 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -808,7 +808,7 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
 			ret = PTR_ERR(crtc);
 			return ret;
 		}
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/* All CRTCs are compatible with all encoders */
diff --git a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
index b7aced272af9..375643a14198 100644
--- a/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
@@ -335,7 +335,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
 			goto fail;
 		}
 
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/*
diff --git a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
index 18cf0ff4da6c..35242e76de10 100644
--- a/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
@@ -495,7 +495,7 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
 			DRM_DEV_ERROR(dev->dev, "failed to construct crtc %d (%d)\n", i, ret);
 			goto fail;
 		}
-		priv->crtcs[priv->num_crtcs++] = crtc;
+		priv->num_crtcs++;
 	}
 
 	/*
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index d2fbe54fec4d..576d346cc860 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -98,7 +98,7 @@ static void msm_irq_uninstall(struct drm_device *dev)
 
 struct msm_vblank_work {
 	struct work_struct work;
-	int crtc_id;
+	struct drm_crtc *crtc;
 	bool enable;
 	struct msm_drm_private *priv;
 };
@@ -111,15 +111,15 @@ static void vblank_ctrl_worker(struct work_struct *work)
 	struct msm_kms *kms = priv->kms;
 
 	if (vbl_work->enable)
-		kms->funcs->enable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
+		kms->funcs->enable_vblank(kms, vbl_work->crtc);
 	else
-		kms->funcs->disable_vblank(kms,	priv->crtcs[vbl_work->crtc_id]);
+		kms->funcs->disable_vblank(kms,	vbl_work->crtc);
 
 	kfree(vbl_work);
 }
 
 static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
-					int crtc_id, bool enable)
+					struct drm_crtc *crtc, bool enable)
 {
 	struct msm_vblank_work *vbl_work;
 
@@ -129,7 +129,7 @@ static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
 
 	INIT_WORK(&vbl_work->work, vblank_ctrl_worker);
 
-	vbl_work->crtc_id = crtc_id;
+	vbl_work->crtc = crtc;
 	vbl_work->enable = enable;
 	vbl_work->priv = priv;
 
@@ -303,6 +303,7 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	struct msm_drm_private *priv = dev_get_drvdata(dev);
 	struct drm_device *ddev;
 	struct msm_kms *kms;
+	struct drm_crtc *crtc;
 	int ret, i;
 
 	if (drm_firmware_drivers_only())
@@ -376,12 +377,12 @@ static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
 	ddev->mode_config.funcs = &mode_config_funcs;
 	ddev->mode_config.helper_private = &mode_config_helper_funcs;
 
-	for (i = 0; i < priv->num_crtcs; i++) {
+	drm_for_each_crtc(crtc, ddev) {
 		/* initialize event thread */
-		priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id;
+		priv->event_thread[i].crtc = crtc;
 		priv->event_thread[i].dev = ddev;
 		priv->event_thread[i].worker = kthread_create_worker(0,
-			"crtc_event:%d", priv->event_thread[i].crtc_id);
+			"crtc_event:%d", priv->event_thread[i].crtc->base.id);
 		if (IS_ERR(priv->event_thread[i].worker)) {
 			ret = PTR_ERR(priv->event_thread[i].worker);
 			DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
@@ -517,25 +518,23 @@ static void msm_postclose(struct drm_device *dev, struct drm_file *file)
 int msm_crtc_enable_vblank(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
-	unsigned int pipe = crtc->index;
 	struct msm_drm_private *priv = dev->dev_private;
 	struct msm_kms *kms = priv->kms;
 	if (!kms)
 		return -ENXIO;
-	drm_dbg_vbl(dev, "crtc=%u", pipe);
-	return vblank_ctrl_queue_work(priv, pipe, true);
+	drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
+	return vblank_ctrl_queue_work(priv, crtc, true);
 }
 
 void msm_crtc_disable_vblank(struct drm_crtc *crtc)
 {
 	struct drm_device *dev = crtc->dev;
-	unsigned int pipe = crtc->index;
 	struct msm_drm_private *priv = dev->dev_private;
 	struct msm_kms *kms = priv->kms;
 	if (!kms)
 		return;
-	drm_dbg_vbl(dev, "crtc=%u", pipe);
-	vblank_ctrl_queue_work(priv, pipe, false);
+	drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
+	vblank_ctrl_queue_work(priv, crtc, false);
 }
 
 /*
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
index fdbaad53eb84..2ba57c575e13 100644
--- a/drivers/gpu/drm/msm/msm_drv.h
+++ b/drivers/gpu/drm/msm/msm_drv.h
@@ -102,7 +102,7 @@ struct msm_display_topology {
 /* Commit/Event thread specific structure */
 struct msm_drm_thread {
 	struct drm_device *dev;
-	unsigned int crtc_id;
+	struct drm_crtc *crtc;
 	struct kthread_worker *worker;
 };
 
@@ -178,7 +178,6 @@ struct msm_drm_private {
 	struct workqueue_struct *wq;
 
 	unsigned int num_crtcs;
-	struct drm_crtc *crtcs[MAX_CRTCS];
 
 	struct msm_drm_thread event_thread[MAX_CRTCS];
 
-- 
2.35.1


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

* Re: [PATCH 3/3] drm/msm: stop storing the array of CRTCs in struct msm_drm_private
  2022-05-07  1:00   ` Dmitry Baryshkov
@ 2022-05-07 12:20     ` kernel test robot
  -1 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2022-05-07 12:20 UTC (permalink / raw)
  To: Dmitry Baryshkov, Rob Clark, Sean Paul, Abhinav Kumar
  Cc: llvm, kbuild-all, David Airlie, linux-arm-msm, dri-devel,
	Bjorn Andersson, Stephen Boyd, freedreno

Hi Dmitry,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on next-20220506]
[also build test WARNING on v5.18-rc5]
[cannot apply to drm/drm-next v5.18-rc5 v5.18-rc4 v5.18-rc3]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Dmitry-Baryshkov/drm-msm-mdp4-convert-to-drm_crtc_handle_vblank/20220507-090522
base:    38a288f5941ef03752887ad86f2d85442358c99a
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20220507/202205072052.67OjKtjD-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af4cf1c6b8ed0d8102fc5e69acdc2fcbbcdaa9a7)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/08ab9442139f4b4c9e33ce35986014219fd1d5d0
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Dmitry-Baryshkov/drm-msm-mdp4-convert-to-drm_crtc_handle_vblank/20220507-090522
        git checkout 08ab9442139f4b4c9e33ce35986014219fd1d5d0
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/msm/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/msm/msm_drv.c:428:22: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
                   priv->event_thread[i].crtc = crtc;
                                      ^
   drivers/gpu/drm/msm/msm_drv.c:353:12: note: initialize the variable 'i' to silence this warning
           int ret, i;
                     ^
                      = 0
   1 warning generated.


vim +/i +428 drivers/gpu/drm/msm/msm_drv.c

   346	
   347	static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
   348	{
   349		struct msm_drm_private *priv = dev_get_drvdata(dev);
   350		struct drm_device *ddev;
   351		struct msm_kms *kms;
   352		struct drm_crtc *crtc;
   353		int ret, i;
   354	
   355		if (drm_firmware_drivers_only())
   356			return -ENODEV;
   357	
   358		ddev = drm_dev_alloc(drv, dev);
   359		if (IS_ERR(ddev)) {
   360			DRM_DEV_ERROR(dev, "failed to allocate drm_device\n");
   361			return PTR_ERR(ddev);
   362		}
   363		ddev->dev_private = priv;
   364		priv->dev = ddev;
   365	
   366		priv->wq = alloc_ordered_workqueue("msm", 0);
   367		priv->hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD;
   368	
   369		INIT_LIST_HEAD(&priv->objects);
   370		mutex_init(&priv->obj_lock);
   371	
   372		INIT_LIST_HEAD(&priv->inactive_willneed);
   373		INIT_LIST_HEAD(&priv->inactive_dontneed);
   374		INIT_LIST_HEAD(&priv->inactive_unpinned);
   375		mutex_init(&priv->mm_lock);
   376	
   377		/* Teach lockdep about lock ordering wrt. shrinker: */
   378		fs_reclaim_acquire(GFP_KERNEL);
   379		might_lock(&priv->mm_lock);
   380		fs_reclaim_release(GFP_KERNEL);
   381	
   382		drm_mode_config_init(ddev);
   383	
   384		ret = msm_init_vram(ddev);
   385		if (ret)
   386			return ret;
   387	
   388		/* Bind all our sub-components: */
   389		ret = component_bind_all(dev, ddev);
   390		if (ret)
   391			return ret;
   392	
   393		dma_set_max_seg_size(dev, UINT_MAX);
   394	
   395		msm_gem_shrinker_init(ddev);
   396	
   397		if (priv->kms_init) {
   398			ret = priv->kms_init(ddev);
   399			if (ret) {
   400				DRM_DEV_ERROR(dev, "failed to load kms\n");
   401				priv->kms = NULL;
   402				goto err_msm_uninit;
   403			}
   404			kms = priv->kms;
   405		} else {
   406			/* valid only for the dummy headless case, where of_node=NULL */
   407			WARN_ON(dev->of_node);
   408			kms = NULL;
   409		}
   410	
   411		/* Enable normalization of plane zpos */
   412		ddev->mode_config.normalize_zpos = true;
   413	
   414		if (kms) {
   415			kms->dev = ddev;
   416			ret = kms->funcs->hw_init(kms);
   417			if (ret) {
   418				DRM_DEV_ERROR(dev, "kms hw init failed: %d\n", ret);
   419				goto err_msm_uninit;
   420			}
   421		}
   422	
   423		ddev->mode_config.funcs = &mode_config_funcs;
   424		ddev->mode_config.helper_private = &mode_config_helper_funcs;
   425	
   426		drm_for_each_crtc(crtc, ddev) {
   427			/* initialize event thread */
 > 428			priv->event_thread[i].crtc = crtc;
   429			priv->event_thread[i].dev = ddev;
   430			priv->event_thread[i].worker = kthread_create_worker(0,
   431				"crtc_event:%d", priv->event_thread[i].crtc->base.id);
   432			if (IS_ERR(priv->event_thread[i].worker)) {
   433				ret = PTR_ERR(priv->event_thread[i].worker);
   434				DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
   435				ret = PTR_ERR(priv->event_thread[i].worker);
   436				goto err_msm_uninit;
   437			}
   438	
   439			sched_set_fifo(priv->event_thread[i].worker->task);
   440		}
   441	
   442		ret = drm_vblank_init(ddev, priv->num_crtcs);
   443		if (ret < 0) {
   444			DRM_DEV_ERROR(dev, "failed to initialize vblank\n");
   445			goto err_msm_uninit;
   446		}
   447	
   448		if (kms) {
   449			pm_runtime_get_sync(dev);
   450			ret = msm_irq_install(ddev, kms->irq);
   451			pm_runtime_put_sync(dev);
   452			if (ret < 0) {
   453				DRM_DEV_ERROR(dev, "failed to install IRQ handler\n");
   454				goto err_msm_uninit;
   455			}
   456		}
   457	
   458		ret = drm_dev_register(ddev, 0);
   459		if (ret)
   460			goto err_msm_uninit;
   461	
   462		if (kms) {
   463			ret = msm_disp_snapshot_init(ddev);
   464			if (ret)
   465				DRM_DEV_ERROR(dev, "msm_disp_snapshot_init failed ret = %d\n", ret);
   466		}
   467		drm_mode_config_reset(ddev);
   468	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

* Re: [PATCH 3/3] drm/msm: stop storing the array of CRTCs in struct msm_drm_private
@ 2022-05-07 12:20     ` kernel test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2022-05-07 12:20 UTC (permalink / raw)
  To: Dmitry Baryshkov, Rob Clark, Sean Paul, Abhinav Kumar
  Cc: kbuild-all, David Airlie, linux-arm-msm, llvm, dri-devel,
	Bjorn Andersson, Stephen Boyd, freedreno

Hi Dmitry,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on next-20220506]
[also build test WARNING on v5.18-rc5]
[cannot apply to drm/drm-next v5.18-rc5 v5.18-rc4 v5.18-rc3]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Dmitry-Baryshkov/drm-msm-mdp4-convert-to-drm_crtc_handle_vblank/20220507-090522
base:    38a288f5941ef03752887ad86f2d85442358c99a
config: hexagon-allyesconfig (https://download.01.org/0day-ci/archive/20220507/202205072052.67OjKtjD-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project af4cf1c6b8ed0d8102fc5e69acdc2fcbbcdaa9a7)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/08ab9442139f4b4c9e33ce35986014219fd1d5d0
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Dmitry-Baryshkov/drm-msm-mdp4-convert-to-drm_crtc_handle_vblank/20220507-090522
        git checkout 08ab9442139f4b4c9e33ce35986014219fd1d5d0
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/gpu/drm/msm/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/msm/msm_drv.c:428:22: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
                   priv->event_thread[i].crtc = crtc;
                                      ^
   drivers/gpu/drm/msm/msm_drv.c:353:12: note: initialize the variable 'i' to silence this warning
           int ret, i;
                     ^
                      = 0
   1 warning generated.


vim +/i +428 drivers/gpu/drm/msm/msm_drv.c

   346	
   347	static int msm_drm_init(struct device *dev, const struct drm_driver *drv)
   348	{
   349		struct msm_drm_private *priv = dev_get_drvdata(dev);
   350		struct drm_device *ddev;
   351		struct msm_kms *kms;
   352		struct drm_crtc *crtc;
   353		int ret, i;
   354	
   355		if (drm_firmware_drivers_only())
   356			return -ENODEV;
   357	
   358		ddev = drm_dev_alloc(drv, dev);
   359		if (IS_ERR(ddev)) {
   360			DRM_DEV_ERROR(dev, "failed to allocate drm_device\n");
   361			return PTR_ERR(ddev);
   362		}
   363		ddev->dev_private = priv;
   364		priv->dev = ddev;
   365	
   366		priv->wq = alloc_ordered_workqueue("msm", 0);
   367		priv->hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD;
   368	
   369		INIT_LIST_HEAD(&priv->objects);
   370		mutex_init(&priv->obj_lock);
   371	
   372		INIT_LIST_HEAD(&priv->inactive_willneed);
   373		INIT_LIST_HEAD(&priv->inactive_dontneed);
   374		INIT_LIST_HEAD(&priv->inactive_unpinned);
   375		mutex_init(&priv->mm_lock);
   376	
   377		/* Teach lockdep about lock ordering wrt. shrinker: */
   378		fs_reclaim_acquire(GFP_KERNEL);
   379		might_lock(&priv->mm_lock);
   380		fs_reclaim_release(GFP_KERNEL);
   381	
   382		drm_mode_config_init(ddev);
   383	
   384		ret = msm_init_vram(ddev);
   385		if (ret)
   386			return ret;
   387	
   388		/* Bind all our sub-components: */
   389		ret = component_bind_all(dev, ddev);
   390		if (ret)
   391			return ret;
   392	
   393		dma_set_max_seg_size(dev, UINT_MAX);
   394	
   395		msm_gem_shrinker_init(ddev);
   396	
   397		if (priv->kms_init) {
   398			ret = priv->kms_init(ddev);
   399			if (ret) {
   400				DRM_DEV_ERROR(dev, "failed to load kms\n");
   401				priv->kms = NULL;
   402				goto err_msm_uninit;
   403			}
   404			kms = priv->kms;
   405		} else {
   406			/* valid only for the dummy headless case, where of_node=NULL */
   407			WARN_ON(dev->of_node);
   408			kms = NULL;
   409		}
   410	
   411		/* Enable normalization of plane zpos */
   412		ddev->mode_config.normalize_zpos = true;
   413	
   414		if (kms) {
   415			kms->dev = ddev;
   416			ret = kms->funcs->hw_init(kms);
   417			if (ret) {
   418				DRM_DEV_ERROR(dev, "kms hw init failed: %d\n", ret);
   419				goto err_msm_uninit;
   420			}
   421		}
   422	
   423		ddev->mode_config.funcs = &mode_config_funcs;
   424		ddev->mode_config.helper_private = &mode_config_helper_funcs;
   425	
   426		drm_for_each_crtc(crtc, ddev) {
   427			/* initialize event thread */
 > 428			priv->event_thread[i].crtc = crtc;
   429			priv->event_thread[i].dev = ddev;
   430			priv->event_thread[i].worker = kthread_create_worker(0,
   431				"crtc_event:%d", priv->event_thread[i].crtc->base.id);
   432			if (IS_ERR(priv->event_thread[i].worker)) {
   433				ret = PTR_ERR(priv->event_thread[i].worker);
   434				DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
   435				ret = PTR_ERR(priv->event_thread[i].worker);
   436				goto err_msm_uninit;
   437			}
   438	
   439			sched_set_fifo(priv->event_thread[i].worker->task);
   440		}
   441	
   442		ret = drm_vblank_init(ddev, priv->num_crtcs);
   443		if (ret < 0) {
   444			DRM_DEV_ERROR(dev, "failed to initialize vblank\n");
   445			goto err_msm_uninit;
   446		}
   447	
   448		if (kms) {
   449			pm_runtime_get_sync(dev);
   450			ret = msm_irq_install(ddev, kms->irq);
   451			pm_runtime_put_sync(dev);
   452			if (ret < 0) {
   453				DRM_DEV_ERROR(dev, "failed to install IRQ handler\n");
   454				goto err_msm_uninit;
   455			}
   456		}
   457	
   458		ret = drm_dev_register(ddev, 0);
   459		if (ret)
   460			goto err_msm_uninit;
   461	
   462		if (kms) {
   463			ret = msm_disp_snapshot_init(ddev);
   464			if (ret)
   465				DRM_DEV_ERROR(dev, "msm_disp_snapshot_init failed ret = %d\n", ret);
   466		}
   467		drm_mode_config_reset(ddev);
   468	

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

end of thread, other threads:[~2022-05-07 12:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-07  1:00 [PATCH 1/3] drm/msm/mdp4: convert to drm_crtc_handle_vblank() Dmitry Baryshkov
2022-05-07  1:00 ` Dmitry Baryshkov
2022-05-07  1:00 ` [PATCH 2/3] drm/msm/mdp5: " Dmitry Baryshkov
2022-05-07  1:00   ` Dmitry Baryshkov
2022-05-07  1:00 ` [PATCH 3/3] drm/msm: stop storing the array of CRTCs in struct msm_drm_private Dmitry Baryshkov
2022-05-07  1:00   ` Dmitry Baryshkov
2022-05-07 12:20   ` kernel test robot
2022-05-07 12:20     ` kernel test robot

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.