All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] fb_create drive-through cleanups
@ 2019-11-15  9:21 ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development

Hi all,

Inspired by some chatting with Pekka on irc I looked a lot at our
->fb_create implementations. Some cleanups (the simpler ones) and some
todos (the more involved stuff).

It's not a lot of code that we can collect even with all the todos, but we
have so many drivers nowadays it's worth it even for the tiny things.

Review and for the driver patches especially some testing very much
welcome.

Cheers, Daniel

Daniel Vetter (8):
  drm/fb: More paranoia in addfb checks
  drm/atmel: ditch fb_create wrapper
  drm/mediatek: don't open-code drm_gem_fb_create
  drm/rockchip: Use drm_gem_fb_create_with_dirty
  drm/tilcdc: Drop drm_gem_fb_create wrapper
  drm/xen: Simplify fb_create
  drm/hibmc: Use drm_gem_fb_create
  drm/todo: Add entry for fb funcs related cleanups

 Documentation/gpu/todo.rst                    | 26 ++++++
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c  |  8 +-
 drivers/gpu/drm/drm_framebuffer.c             | 17 ++--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++----------
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 16 +++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c         | 92 -------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h         | 13 ---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c      |  1 -
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c    | 54 +----------
 drivers/gpu/drm/tilcdc/tilcdc_drv.c           |  8 +-
 drivers/gpu/drm/xen/xen_drm_front_kms.c       |  9 +-
 14 files changed, 75 insertions(+), 251 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 0/8] fb_create drive-through cleanups
@ 2019-11-15  9:21 ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development

Hi all,

Inspired by some chatting with Pekka on irc I looked a lot at our
->fb_create implementations. Some cleanups (the simpler ones) and some
todos (the more involved stuff).

It's not a lot of code that we can collect even with all the todos, but we
have so many drivers nowadays it's worth it even for the tiny things.

Review and for the driver patches especially some testing very much
welcome.

Cheers, Daniel

Daniel Vetter (8):
  drm/fb: More paranoia in addfb checks
  drm/atmel: ditch fb_create wrapper
  drm/mediatek: don't open-code drm_gem_fb_create
  drm/rockchip: Use drm_gem_fb_create_with_dirty
  drm/tilcdc: Drop drm_gem_fb_create wrapper
  drm/xen: Simplify fb_create
  drm/hibmc: Use drm_gem_fb_create
  drm/todo: Add entry for fb funcs related cleanups

 Documentation/gpu/todo.rst                    | 26 ++++++
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c  |  8 +-
 drivers/gpu/drm/drm_framebuffer.c             | 17 ++--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++----------
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 16 +++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c         | 92 -------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h         | 13 ---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c      |  1 -
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c    | 54 +----------
 drivers/gpu/drm/tilcdc/tilcdc_drv.c           |  8 +-
 drivers/gpu/drm/xen/xen_drm_front_kms.c       |  9 +-
 14 files changed, 75 insertions(+), 251 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 0/8] fb_create drive-through cleanups
@ 2019-11-15  9:21 ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development

Hi all,

Inspired by some chatting with Pekka on irc I looked a lot at our
->fb_create implementations. Some cleanups (the simpler ones) and some
todos (the more involved stuff).

It's not a lot of code that we can collect even with all the todos, but we
have so many drivers nowadays it's worth it even for the tiny things.

Review and for the driver patches especially some testing very much
welcome.

Cheers, Daniel

Daniel Vetter (8):
  drm/fb: More paranoia in addfb checks
  drm/atmel: ditch fb_create wrapper
  drm/mediatek: don't open-code drm_gem_fb_create
  drm/rockchip: Use drm_gem_fb_create_with_dirty
  drm/tilcdc: Drop drm_gem_fb_create wrapper
  drm/xen: Simplify fb_create
  drm/hibmc: Use drm_gem_fb_create
  drm/todo: Add entry for fb funcs related cleanups

 Documentation/gpu/todo.rst                    | 26 ++++++
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c  |  8 +-
 drivers/gpu/drm/drm_framebuffer.c             | 17 ++--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +--
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++----------
 drivers/gpu/drm/mediatek/mtk_drm_drv.c        | 16 +++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c         | 92 -------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h         | 13 ---
 drivers/gpu/drm/mediatek/mtk_drm_plane.c      |  1 -
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c    | 54 +----------
 drivers/gpu/drm/tilcdc/tilcdc_drv.c           |  8 +-
 drivers/gpu/drm/xen/xen_drm_front_kms.c       |  9 +-
 14 files changed, 75 insertions(+), 251 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Daniel Vetter, Intel Graphics Development, Pekka Paalanen

- Our limit is uint32_t, make that explicit.

- Untangle the one overflow check, I think (but not sure) that with
  all three together you could overflow the uint64_t and it'd look
  cool again. Hence two steps. Also go with the more common (and imo
  safer approach) of reducing the range we accept, instead of trying
  to compute the overflow in high enough precision.

- The above would blow up if we get a 0 pitches, so check for that
  too, but only if block_size is a thing.

Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 57564318ceea..3141c6ed6dd2 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
 			return -EINVAL;
 		}
 
-		if (min_pitch > UINT_MAX)
+		if (min_pitch > U8_MAX)
 			return -ERANGE;
 
-		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
-			return -ERANGE;
+		if (block_size) {
+			if (r->pitches[i] < min_pitch) {
+				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
+				return -EINVAL;
+			}
 
-		if (block_size && r->pitches[i] < min_pitch) {
-			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
-			return -EINVAL;
+			if (height > U8_MAX / r->pitches[i])
+				return -ERANGE;
+
+			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
+				return -ERANGE;
 		}
 
 		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Daniel Vetter, Intel Graphics Development, Pekka Paalanen

- Our limit is uint32_t, make that explicit.

- Untangle the one overflow check, I think (but not sure) that with
  all three together you could overflow the uint64_t and it'd look
  cool again. Hence two steps. Also go with the more common (and imo
  safer approach) of reducing the range we accept, instead of trying
  to compute the overflow in high enough precision.

- The above would blow up if we get a 0 pitches, so check for that
  too, but only if block_size is a thing.

Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 57564318ceea..3141c6ed6dd2 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
 			return -EINVAL;
 		}
 
-		if (min_pitch > UINT_MAX)
+		if (min_pitch > U8_MAX)
 			return -ERANGE;
 
-		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
-			return -ERANGE;
+		if (block_size) {
+			if (r->pitches[i] < min_pitch) {
+				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
+				return -EINVAL;
+			}
 
-		if (block_size && r->pitches[i] < min_pitch) {
-			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
-			return -EINVAL;
+			if (height > U8_MAX / r->pitches[i])
+				return -ERANGE;
+
+			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
+				return -ERANGE;
 		}
 
 		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 2/8] drm/atmel: ditch fb_create wrapper
  2019-11-15  9:21 ` Daniel Vetter
  (?)
  (?)
@ 2019-11-15  9:21   ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Ludovic Desroches, Daniel Vetter,
	Sam Ravnborg, linux-arm-kernel

Spotted while looking through them all.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Cc: linux-arm-kernel@lists.infradead.org
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 92640298ad41..8dc917a1270b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 struct atmel_hlcdc_dc_commit {
 	struct work_struct work;
 	struct drm_device *dev;
@@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = atmel_hlcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
 };
-- 
2.24.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Ludovic Desroches, Daniel Vetter,
	Sam Ravnborg, linux-arm-kernel

Spotted while looking through them all.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Cc: linux-arm-kernel@lists.infradead.org
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 92640298ad41..8dc917a1270b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 struct atmel_hlcdc_dc_commit {
 	struct work_struct work;
 	struct drm_device *dev;
@@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = atmel_hlcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
 };
-- 
2.24.0

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

* [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, Ludovic Desroches,
	Daniel Vetter, Sam Ravnborg, linux-arm-kernel

Spotted while looking through them all.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Cc: linux-arm-kernel@lists.infradead.org
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 92640298ad41..8dc917a1270b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 struct atmel_hlcdc_dc_commit {
 	struct work_struct work;
 	struct drm_device *dev;
@@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = atmel_hlcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
 };
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, Ludovic Desroches,
	Daniel Vetter, Sam Ravnborg, linux-arm-kernel

Spotted while looking through them all.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Boris Brezillon <bbrezillon@kernel.org>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Cc: linux-arm-kernel@lists.infradead.org
---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
index 92640298ad41..8dc917a1270b 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
@@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
 	return IRQ_HANDLED;
 }
 
-static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 struct atmel_hlcdc_dc_commit {
 	struct work_struct work;
 	struct drm_device *dev;
@@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = atmel_hlcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
 };
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
  2019-11-15  9:21 ` Daniel Vetter
                     ` (2 preceding siblings ...)
  (?)
@ 2019-11-15  9:21   ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Matthias Brugger,
	linux-mediatek, Philipp Zabel, CK Hu, linux-arm-kernel

Aside: There's a few other fb_create implementations which
simply check for valid buffer format (or an approximation thereof),
and then call drm_gem_fb_create. For atomic drivers at least we could
walk all planes and make sure the format/modifier combo is valid,
and remove even more code.

For non-atomic drivers that's not possible, since the format list for
the primary buffer might be garbage (and most likely it is).

Also delete mtk_drm_fb.[hc] since it would now only contain one
function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
 4 files changed, 15 insertions(+), 107 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 84d14213d992..2b1c122066ea 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -16,8 +16,10 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_fourcc.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
@@ -27,7 +29,6 @@
 #include "mtk_drm_ddp.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
 #define DRIVER_NAME "mediatek"
@@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
 	return 0;
 }
 
+static struct drm_framebuffer *
+mtk_drm_mode_fb_create(struct drm_device *dev,
+		       struct drm_file *file,
+		       const struct drm_mode_fb_cmd2 *cmd)
+{
+	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
+
+	if (info->num_planes != 1)
+		return ERR_PTR(-EINVAL);
+
+	return drm_gem_fb_create(dev, file, cmd);
+}
+
 static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.fb_create = mtk_drm_mode_fb_create,
 	.atomic_check = drm_atomic_helper_check,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
deleted file mode 100644
index 3f230a28a2dc..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#include <linux/dma-buf.h>
-#include <linux/dma-resv.h>
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_gem_framebuffer_helper.h>
-
-#include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
-#include "mtk_drm_gem.h"
-
-static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = drm_gem_fb_create_handle,
-	.destroy = drm_gem_fb_destroy,
-};
-
-static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
-					const struct drm_mode_fb_cmd2 *mode,
-					struct drm_gem_object *obj)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, mode);
-	struct drm_framebuffer *fb;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb)
-		return ERR_PTR(-ENOMEM);
-
-	drm_helper_mode_fill_fb_struct(dev, fb, mode);
-
-	fb->obj[0] = obj;
-
-	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(fb);
-		return ERR_PTR(ret);
-	}
-
-	return fb;
-}
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *gem;
-	unsigned int width = cmd->width;
-	unsigned int height = cmd->height;
-	unsigned int size, bpp;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	gem = drm_gem_object_lookup(file, cmd->handles[0]);
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bpp = info->cpp[0];
-	size = (height - 1) * cmd->pitches[0] + width * bpp;
-	size += cmd->offsets[0];
-
-	if (gem->size < size) {
-		ret = -EINVAL;
-		goto unreference;
-	}
-
-	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto unreference;
-	}
-
-	return fb;
-
-unreference:
-	drm_gem_object_put_unlocked(gem);
-	return ERR_PTR(ret);
-}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
deleted file mode 100644
index eb64d26001c6..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#ifndef MTK_DRM_FB_H
-#define MTK_DRM_FB_H
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd);
-
-#endif /* MTK_DRM_FB_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index 3b0cc91c7023..540ef2faa40a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -13,7 +13,6 @@
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-- 
2.24.0


_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

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

* [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Matthias Brugger,
	linux-mediatek, Philipp Zabel, CK Hu, linux-arm-kernel

Aside: There's a few other fb_create implementations which
simply check for valid buffer format (or an approximation thereof),
and then call drm_gem_fb_create. For atomic drivers at least we could
walk all planes and make sure the format/modifier combo is valid,
and remove even more code.

For non-atomic drivers that's not possible, since the format list for
the primary buffer might be garbage (and most likely it is).

Also delete mtk_drm_fb.[hc] since it would now only contain one
function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
 4 files changed, 15 insertions(+), 107 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 84d14213d992..2b1c122066ea 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -16,8 +16,10 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_fourcc.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
@@ -27,7 +29,6 @@
 #include "mtk_drm_ddp.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
 #define DRIVER_NAME "mediatek"
@@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
 	return 0;
 }
 
+static struct drm_framebuffer *
+mtk_drm_mode_fb_create(struct drm_device *dev,
+		       struct drm_file *file,
+		       const struct drm_mode_fb_cmd2 *cmd)
+{
+	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
+
+	if (info->num_planes != 1)
+		return ERR_PTR(-EINVAL);
+
+	return drm_gem_fb_create(dev, file, cmd);
+}
+
 static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.fb_create = mtk_drm_mode_fb_create,
 	.atomic_check = drm_atomic_helper_check,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
deleted file mode 100644
index 3f230a28a2dc..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#include <linux/dma-buf.h>
-#include <linux/dma-resv.h>
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_gem_framebuffer_helper.h>
-
-#include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
-#include "mtk_drm_gem.h"
-
-static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = drm_gem_fb_create_handle,
-	.destroy = drm_gem_fb_destroy,
-};
-
-static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
-					const struct drm_mode_fb_cmd2 *mode,
-					struct drm_gem_object *obj)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, mode);
-	struct drm_framebuffer *fb;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb)
-		return ERR_PTR(-ENOMEM);
-
-	drm_helper_mode_fill_fb_struct(dev, fb, mode);
-
-	fb->obj[0] = obj;
-
-	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(fb);
-		return ERR_PTR(ret);
-	}
-
-	return fb;
-}
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *gem;
-	unsigned int width = cmd->width;
-	unsigned int height = cmd->height;
-	unsigned int size, bpp;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	gem = drm_gem_object_lookup(file, cmd->handles[0]);
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bpp = info->cpp[0];
-	size = (height - 1) * cmd->pitches[0] + width * bpp;
-	size += cmd->offsets[0];
-
-	if (gem->size < size) {
-		ret = -EINVAL;
-		goto unreference;
-	}
-
-	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto unreference;
-	}
-
-	return fb;
-
-unreference:
-	drm_gem_object_put_unlocked(gem);
-	return ERR_PTR(ret);
-}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
deleted file mode 100644
index eb64d26001c6..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#ifndef MTK_DRM_FB_H
-#define MTK_DRM_FB_H
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd);
-
-#endif /* MTK_DRM_FB_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index 3b0cc91c7023..540ef2faa40a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -13,7 +13,6 @@
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-- 
2.24.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Matthias Brugger,
	linux-mediatek, Philipp Zabel, CK Hu, linux-arm-kernel

Aside: There's a few other fb_create implementations which
simply check for valid buffer format (or an approximation thereof),
and then call drm_gem_fb_create. For atomic drivers at least we could
walk all planes and make sure the format/modifier combo is valid,
and remove even more code.

For non-atomic drivers that's not possible, since the format list for
the primary buffer might be garbage (and most likely it is).

Also delete mtk_drm_fb.[hc] since it would now only contain one
function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
 4 files changed, 15 insertions(+), 107 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 84d14213d992..2b1c122066ea 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -16,8 +16,10 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_fourcc.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
@@ -27,7 +29,6 @@
 #include "mtk_drm_ddp.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
 #define DRIVER_NAME "mediatek"
@@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
 	return 0;
 }
 
+static struct drm_framebuffer *
+mtk_drm_mode_fb_create(struct drm_device *dev,
+		       struct drm_file *file,
+		       const struct drm_mode_fb_cmd2 *cmd)
+{
+	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
+
+	if (info->num_planes != 1)
+		return ERR_PTR(-EINVAL);
+
+	return drm_gem_fb_create(dev, file, cmd);
+}
+
 static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.fb_create = mtk_drm_mode_fb_create,
 	.atomic_check = drm_atomic_helper_check,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
deleted file mode 100644
index 3f230a28a2dc..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#include <linux/dma-buf.h>
-#include <linux/dma-resv.h>
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_gem_framebuffer_helper.h>
-
-#include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
-#include "mtk_drm_gem.h"
-
-static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = drm_gem_fb_create_handle,
-	.destroy = drm_gem_fb_destroy,
-};
-
-static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
-					const struct drm_mode_fb_cmd2 *mode,
-					struct drm_gem_object *obj)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, mode);
-	struct drm_framebuffer *fb;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb)
-		return ERR_PTR(-ENOMEM);
-
-	drm_helper_mode_fill_fb_struct(dev, fb, mode);
-
-	fb->obj[0] = obj;
-
-	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(fb);
-		return ERR_PTR(ret);
-	}
-
-	return fb;
-}
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *gem;
-	unsigned int width = cmd->width;
-	unsigned int height = cmd->height;
-	unsigned int size, bpp;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	gem = drm_gem_object_lookup(file, cmd->handles[0]);
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bpp = info->cpp[0];
-	size = (height - 1) * cmd->pitches[0] + width * bpp;
-	size += cmd->offsets[0];
-
-	if (gem->size < size) {
-		ret = -EINVAL;
-		goto unreference;
-	}
-
-	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto unreference;
-	}
-
-	return fb;
-
-unreference:
-	drm_gem_object_put_unlocked(gem);
-	return ERR_PTR(ret);
-}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
deleted file mode 100644
index eb64d26001c6..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#ifndef MTK_DRM_FB_H
-#define MTK_DRM_FB_H
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd);
-
-#endif /* MTK_DRM_FB_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index 3b0cc91c7023..540ef2faa40a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -13,7 +13,6 @@
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Matthias Brugger,
	linux-mediatek, linux-arm-kernel

Aside: There's a few other fb_create implementations which
simply check for valid buffer format (or an approximation thereof),
and then call drm_gem_fb_create. For atomic drivers at least we could
walk all planes and make sure the format/modifier combo is valid,
and remove even more code.

For non-atomic drivers that's not possible, since the format list for
the primary buffer might be garbage (and most likely it is).

Also delete mtk_drm_fb.[hc] since it would now only contain one
function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
 4 files changed, 15 insertions(+), 107 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 84d14213d992..2b1c122066ea 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -16,8 +16,10 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_fourcc.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
@@ -27,7 +29,6 @@
 #include "mtk_drm_ddp.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
 #define DRIVER_NAME "mediatek"
@@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
 	return 0;
 }
 
+static struct drm_framebuffer *
+mtk_drm_mode_fb_create(struct drm_device *dev,
+		       struct drm_file *file,
+		       const struct drm_mode_fb_cmd2 *cmd)
+{
+	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
+
+	if (info->num_planes != 1)
+		return ERR_PTR(-EINVAL);
+
+	return drm_gem_fb_create(dev, file, cmd);
+}
+
 static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.fb_create = mtk_drm_mode_fb_create,
 	.atomic_check = drm_atomic_helper_check,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
deleted file mode 100644
index 3f230a28a2dc..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#include <linux/dma-buf.h>
-#include <linux/dma-resv.h>
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_gem_framebuffer_helper.h>
-
-#include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
-#include "mtk_drm_gem.h"
-
-static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = drm_gem_fb_create_handle,
-	.destroy = drm_gem_fb_destroy,
-};
-
-static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
-					const struct drm_mode_fb_cmd2 *mode,
-					struct drm_gem_object *obj)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, mode);
-	struct drm_framebuffer *fb;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb)
-		return ERR_PTR(-ENOMEM);
-
-	drm_helper_mode_fill_fb_struct(dev, fb, mode);
-
-	fb->obj[0] = obj;
-
-	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(fb);
-		return ERR_PTR(ret);
-	}
-
-	return fb;
-}
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *gem;
-	unsigned int width = cmd->width;
-	unsigned int height = cmd->height;
-	unsigned int size, bpp;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	gem = drm_gem_object_lookup(file, cmd->handles[0]);
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bpp = info->cpp[0];
-	size = (height - 1) * cmd->pitches[0] + width * bpp;
-	size += cmd->offsets[0];
-
-	if (gem->size < size) {
-		ret = -EINVAL;
-		goto unreference;
-	}
-
-	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto unreference;
-	}
-
-	return fb;
-
-unreference:
-	drm_gem_object_put_unlocked(gem);
-	return ERR_PTR(ret);
-}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
deleted file mode 100644
index eb64d26001c6..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#ifndef MTK_DRM_FB_H
-#define MTK_DRM_FB_H
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd);
-
-#endif /* MTK_DRM_FB_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index 3b0cc91c7023..540ef2faa40a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -13,7 +13,6 @@
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Matthias Brugger,
	linux-mediatek, Philipp Zabel, CK Hu, linux-arm-kernel

Aside: There's a few other fb_create implementations which
simply check for valid buffer format (or an approximation thereof),
and then call drm_gem_fb_create. For atomic drivers at least we could
walk all planes and make sure the format/modifier combo is valid,
and remove even more code.

For non-atomic drivers that's not possible, since the format list for
the primary buffer might be garbage (and most likely it is).

Also delete mtk_drm_fb.[hc] since it would now only contain one
function.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: CK Hu <ck.hu@mediatek.com>
Cc: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-mediatek@lists.infradead.org
---
 drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
 drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
 drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
 drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
 4 files changed, 15 insertions(+), 107 deletions(-)
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
 delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index 84d14213d992..2b1c122066ea 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -16,8 +16,10 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
+#include <drm/drm_fourcc.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_vblank.h>
@@ -27,7 +29,6 @@
 #include "mtk_drm_ddp.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 
 #define DRIVER_NAME "mediatek"
@@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
 	return 0;
 }
 
+static struct drm_framebuffer *
+mtk_drm_mode_fb_create(struct drm_device *dev,
+		       struct drm_file *file,
+		       const struct drm_mode_fb_cmd2 *cmd)
+{
+	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
+
+	if (info->num_planes != 1)
+		return ERR_PTR(-EINVAL);
+
+	return drm_gem_fb_create(dev, file, cmd);
+}
+
 static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
 	.fb_create = mtk_drm_mode_fb_create,
 	.atomic_check = drm_atomic_helper_check,
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
deleted file mode 100644
index 3f230a28a2dc..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#include <linux/dma-buf.h>
-#include <linux/dma-resv.h>
-
-#include <drm/drm_modeset_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fourcc.h>
-#include <drm/drm_gem.h>
-#include <drm/drm_gem_framebuffer_helper.h>
-
-#include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
-#include "mtk_drm_gem.h"
-
-static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
-	.create_handle = drm_gem_fb_create_handle,
-	.destroy = drm_gem_fb_destroy,
-};
-
-static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
-					const struct drm_mode_fb_cmd2 *mode,
-					struct drm_gem_object *obj)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, mode);
-	struct drm_framebuffer *fb;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb)
-		return ERR_PTR(-ENOMEM);
-
-	drm_helper_mode_fill_fb_struct(dev, fb, mode);
-
-	fb->obj[0] = obj;
-
-	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
-	if (ret) {
-		DRM_ERROR("failed to initialize framebuffer\n");
-		kfree(fb);
-		return ERR_PTR(ret);
-	}
-
-	return fb;
-}
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *gem;
-	unsigned int width = cmd->width;
-	unsigned int height = cmd->height;
-	unsigned int size, bpp;
-	int ret;
-
-	if (info->num_planes != 1)
-		return ERR_PTR(-EINVAL);
-
-	gem = drm_gem_object_lookup(file, cmd->handles[0]);
-	if (!gem)
-		return ERR_PTR(-ENOENT);
-
-	bpp = info->cpp[0];
-	size = (height - 1) * cmd->pitches[0] + width * bpp;
-	size += cmd->offsets[0];
-
-	if (gem->size < size) {
-		ret = -EINVAL;
-		goto unreference;
-	}
-
-	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto unreference;
-	}
-
-	return fb;
-
-unreference:
-	drm_gem_object_put_unlocked(gem);
-	return ERR_PTR(ret);
-}
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
deleted file mode 100644
index eb64d26001c6..000000000000
--- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (c) 2015 MediaTek Inc.
- */
-
-#ifndef MTK_DRM_FB_H
-#define MTK_DRM_FB_H
-
-struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
-					       struct drm_file *file,
-					       const struct drm_mode_fb_cmd2 *cmd);
-
-#endif /* MTK_DRM_FB_H */
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
index 3b0cc91c7023..540ef2faa40a 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
@@ -13,7 +13,6 @@
 #include "mtk_drm_crtc.h"
 #include "mtk_drm_ddp_comp.h"
 #include "mtk_drm_drv.h"
-#include "mtk_drm_fb.h"
 #include "mtk_drm_gem.h"
 #include "mtk_drm_plane.h"
 
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
  2019-11-15  9:21 ` Daniel Vetter
  (?)
  (?)
@ 2019-11-15  9:21   ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Heiko Stübner, Daniel Vetter, Intel Graphics Development,
	Sandy Huang, linux-rockchip, Daniel Vetter, linux-arm-kernel

If rockchip would switch over to the generic fbdev setup we could
grabage collect even more of all this code (all of the remaining fb
handling code really).

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
---
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
 1 file changed, 1 insertion(+), 53 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index ca01234c037c..081dbdaa0b07 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
 	return fb;
 }
 
-static struct drm_framebuffer *
-rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
-			const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev,
-								 mode_cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
-	struct drm_gem_object *obj;
-	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
-	int ret;
-	int i;
-
-	for (i = 0; i < num_planes; i++) {
-		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
-		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
-		unsigned int min_size;
-
-		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
-		if (!obj) {
-			DRM_DEV_ERROR(dev->dev,
-				      "Failed to lookup GEM object\n");
-			ret = -ENXIO;
-			goto err_gem_object_unreference;
-		}
-
-		min_size = (height - 1) * mode_cmd->pitches[i] +
-			mode_cmd->offsets[i] +
-			width * info->cpp[i];
-
-		if (obj->size < min_size) {
-			drm_gem_object_put_unlocked(obj);
-			ret = -EINVAL;
-			goto err_gem_object_unreference;
-		}
-		objs[i] = obj;
-	}
-
-	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto err_gem_object_unreference;
-	}
-
-	return fb;
-
-err_gem_object_unreference:
-	for (i--; i >= 0; i--)
-		drm_gem_object_put_unlocked(objs[i]);
-	return ERR_PTR(ret);
-}
-
 static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
 	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
 };
 
 static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
-	.fb_create = rockchip_user_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Heiko Stübner, Daniel Vetter, Intel Graphics Development,
	Sandy Huang, linux-rockchip, Daniel Vetter, linux-arm-kernel

If rockchip would switch over to the generic fbdev setup we could
grabage collect even more of all this code (all of the remaining fb
handling code really).

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
---
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
 1 file changed, 1 insertion(+), 53 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index ca01234c037c..081dbdaa0b07 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
 	return fb;
 }
 
-static struct drm_framebuffer *
-rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
-			const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev,
-								 mode_cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
-	struct drm_gem_object *obj;
-	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
-	int ret;
-	int i;
-
-	for (i = 0; i < num_planes; i++) {
-		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
-		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
-		unsigned int min_size;
-
-		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
-		if (!obj) {
-			DRM_DEV_ERROR(dev->dev,
-				      "Failed to lookup GEM object\n");
-			ret = -ENXIO;
-			goto err_gem_object_unreference;
-		}
-
-		min_size = (height - 1) * mode_cmd->pitches[i] +
-			mode_cmd->offsets[i] +
-			width * info->cpp[i];
-
-		if (obj->size < min_size) {
-			drm_gem_object_put_unlocked(obj);
-			ret = -EINVAL;
-			goto err_gem_object_unreference;
-		}
-		objs[i] = obj;
-	}
-
-	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto err_gem_object_unreference;
-	}
-
-	return fb;
-
-err_gem_object_unreference:
-	for (i--; i >= 0; i--)
-		drm_gem_object_put_unlocked(objs[i]);
-	return ERR_PTR(ret);
-}
-
 static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
 	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
 };
 
 static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
-	.fb_create = rockchip_user_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-- 
2.24.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, linux-rockchip,
	Daniel Vetter, linux-arm-kernel

If rockchip would switch over to the generic fbdev setup we could
grabage collect even more of all this code (all of the remaining fb
handling code really).

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
---
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
 1 file changed, 1 insertion(+), 53 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index ca01234c037c..081dbdaa0b07 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
 	return fb;
 }
 
-static struct drm_framebuffer *
-rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
-			const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev,
-								 mode_cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
-	struct drm_gem_object *obj;
-	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
-	int ret;
-	int i;
-
-	for (i = 0; i < num_planes; i++) {
-		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
-		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
-		unsigned int min_size;
-
-		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
-		if (!obj) {
-			DRM_DEV_ERROR(dev->dev,
-				      "Failed to lookup GEM object\n");
-			ret = -ENXIO;
-			goto err_gem_object_unreference;
-		}
-
-		min_size = (height - 1) * mode_cmd->pitches[i] +
-			mode_cmd->offsets[i] +
-			width * info->cpp[i];
-
-		if (obj->size < min_size) {
-			drm_gem_object_put_unlocked(obj);
-			ret = -EINVAL;
-			goto err_gem_object_unreference;
-		}
-		objs[i] = obj;
-	}
-
-	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto err_gem_object_unreference;
-	}
-
-	return fb;
-
-err_gem_object_unreference:
-	for (i--; i >= 0; i--)
-		drm_gem_object_put_unlocked(objs[i]);
-	return ERR_PTR(ret);
-}
-
 static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
 	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
 };
 
 static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
-	.fb_create = rockchip_user_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Heiko Stübner, Daniel Vetter, Intel Graphics Development,
	Sandy Huang, linux-rockchip, Daniel Vetter, linux-arm-kernel

If rockchip would switch over to the generic fbdev setup we could
grabage collect even more of all this code (all of the remaining fb
handling code really).

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
---
 drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
 1 file changed, 1 insertion(+), 53 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
index ca01234c037c..081dbdaa0b07 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
@@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
 	return fb;
 }
 
-static struct drm_framebuffer *
-rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
-			const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	const struct drm_format_info *info = drm_get_format_info(dev,
-								 mode_cmd);
-	struct drm_framebuffer *fb;
-	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
-	struct drm_gem_object *obj;
-	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
-	int ret;
-	int i;
-
-	for (i = 0; i < num_planes; i++) {
-		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
-		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
-		unsigned int min_size;
-
-		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
-		if (!obj) {
-			DRM_DEV_ERROR(dev->dev,
-				      "Failed to lookup GEM object\n");
-			ret = -ENXIO;
-			goto err_gem_object_unreference;
-		}
-
-		min_size = (height - 1) * mode_cmd->pitches[i] +
-			mode_cmd->offsets[i] +
-			width * info->cpp[i];
-
-		if (obj->size < min_size) {
-			drm_gem_object_put_unlocked(obj);
-			ret = -EINVAL;
-			goto err_gem_object_unreference;
-		}
-		objs[i] = obj;
-	}
-
-	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
-	if (IS_ERR(fb)) {
-		ret = PTR_ERR(fb);
-		goto err_gem_object_unreference;
-	}
-
-	return fb;
-
-err_gem_object_unreference:
-	for (i--; i >= 0; i--)
-		drm_gem_object_put_unlocked(objs[i]);
-	return ERR_PTR(ret);
-}
-
 static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
 	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
 };
 
 static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
-	.fb_create = rockchip_user_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.output_poll_changed = drm_fb_helper_output_poll_changed,
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	Jyri Sarha, Daniel Vetter

Doesn't do anything.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jyri Sarha <jsarha@ti.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 2a9e67597375..a160880bea0a 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
 
 static struct of_device_id tilcdc_of_match[];
 
-static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 static int tilcdc_atomic_check(struct drm_device *dev,
 			       struct drm_atomic_state *state)
 {
@@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = tilcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = tilcdc_atomic_check,
 	.atomic_commit = tilcdc_commit,
 };
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	Jyri Sarha, Daniel Vetter

Doesn't do anything.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jyri Sarha <jsarha@ti.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 2a9e67597375..a160880bea0a 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
 
 static struct of_device_id tilcdc_of_match[];
 
-static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 static int tilcdc_atomic_check(struct drm_device *dev,
 			       struct drm_atomic_state *state)
 {
@@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = tilcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = tilcdc_atomic_check,
 	.atomic_commit = tilcdc_commit,
 };
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	Jyri Sarha, Daniel Vetter

Doesn't do anything.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jyri Sarha <jsarha@ti.com>
Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
---
 drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 2a9e67597375..a160880bea0a 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
 
 static struct of_device_id tilcdc_of_match[];
 
-static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
-		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	return drm_gem_fb_create(dev, file_priv, mode_cmd);
-}
-
 static int tilcdc_atomic_check(struct drm_device *dev,
 			       struct drm_atomic_state *state)
 {
@@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
-	.fb_create = tilcdc_fb_create,
+	.fb_create = drm_gem_fb_create,
 	.atomic_check = tilcdc_atomic_check,
 	.atomic_commit = tilcdc_commit,
 };
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development,
	Oleksandr Andrushchenko, xen-devel, Daniel Vetter

The current code is a pretty good wtf moment, since we drop the
reference before we use it. It's not a big deal, because a) we only
use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
already holds a full reference for us.

Might as well take the real pointer ins't of complicated games that
baffle.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: xen-devel@lists.xenproject.org
---
 drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
index ff506bc99414..4f34c5208180 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
@@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
 	if (IS_ERR_OR_NULL(fb))
 		return fb;
 
-	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!gem_obj) {
-		DRM_ERROR("Failed to lookup GEM object\n");
-		ret = -ENOENT;
-		goto fail;
-	}
-
-	drm_gem_object_put_unlocked(gem_obj);
+	gem_obj = fb->obj[0];
 
 	ret = xen_drm_front_fb_attach(drm_info->front_info,
 				      xen_drm_front_dbuf_to_cookie(gem_obj),
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development,
	Oleksandr Andrushchenko, xen-devel, Daniel Vetter

The current code is a pretty good wtf moment, since we drop the
reference before we use it. It's not a big deal, because a) we only
use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
already holds a full reference for us.

Might as well take the real pointer ins't of complicated games that
baffle.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: xen-devel@lists.xenproject.org
---
 drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
index ff506bc99414..4f34c5208180 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
@@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
 	if (IS_ERR_OR_NULL(fb))
 		return fb;
 
-	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!gem_obj) {
-		DRM_ERROR("Failed to lookup GEM object\n");
-		ret = -ENOENT;
-		goto fail;
-	}
-
-	drm_gem_object_put_unlocked(gem_obj);
+	gem_obj = fb->obj[0];
 
 	ret = xen_drm_front_fb_attach(drm_info->front_info,
 				      xen_drm_front_dbuf_to_cookie(gem_obj),
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [Xen-devel] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development
  Cc: Daniel Vetter, Intel Graphics Development,
	Oleksandr Andrushchenko, xen-devel, Daniel Vetter

The current code is a pretty good wtf moment, since we drop the
reference before we use it. It's not a big deal, because a) we only
use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
already holds a full reference for us.

Might as well take the real pointer ins't of complicated games that
baffle.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Cc: xen-devel@lists.xenproject.org
---
 drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
index ff506bc99414..4f34c5208180 100644
--- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
+++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
@@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
 	if (IS_ERR_OR_NULL(fb))
 		return fb;
 
-	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!gem_obj) {
-		DRM_ERROR("Failed to lookup GEM object\n");
-		ret = -ENOENT;
-		goto fail;
-	}
-
-	drm_gem_object_put_unlocked(gem_obj);
+	gem_obj = fb->obj[0];
 
 	ret = xen_drm_front_fb_attach(drm_info->front_info,
 				      xen_drm_front_dbuf_to_cookie(gem_obj),
-- 
2.24.0


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

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

* [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

Again we could delete a lot more if we'd switch over to the generic
fbdev stuff.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
 4 files changed, 19 insertions(+), 63 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 6527a97f68a3..2d0920ec4554 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
 	s64 gpu_addr = 0;
 	unsigned int line_l;
 	struct hibmc_drm_private *priv = plane->dev->dev_private;
-	struct hibmc_framebuffer *hibmc_fb;
 	struct drm_gem_vram_object *gbo;
 
 	if (!state->fb)
 		return;
 
-	hibmc_fb = to_hibmc_framebuffer(state->fb);
-	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
+	gbo = drm_gem_vram_of_gem(fb->obj[0]);
 
 	gpu_addr = drm_gem_vram_offset(gbo);
 	if (WARN_ON_ONCE(gpu_addr < 0))
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
index e58ecd7edcf8..ab5b4a4a2095 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
@@ -20,14 +20,9 @@
 struct drm_device;
 struct drm_gem_object;
 
-struct hibmc_framebuffer {
-	struct drm_framebuffer fb;
-	struct drm_gem_object *obj;
-};
-
 struct hibmc_fbdev {
 	struct drm_fb_helper helper; /* must be first */
-	struct hibmc_framebuffer *fb;
+	struct drm_framebuffer *fb;
 	int size;
 };
 
@@ -47,8 +42,6 @@ struct hibmc_drm_private {
 	struct hibmc_fbdev *fbdev;
 };
 
-#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
-
 void hibmc_set_power_mode(struct hibmc_drm_private *priv,
 			  unsigned int power_mode);
 void hibmc_set_current_gate(struct hibmc_drm_private *priv,
@@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
 
 int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
 		     struct drm_gem_object **obj);
-struct hibmc_framebuffer *
+struct drm_framebuffer *
 hibmc_framebuffer_init(struct drm_device *dev,
 		       const struct drm_mode_fb_cmd2 *mode_cmd,
 		       struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
index b4c1cea051e8..446aeedc9e29 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
@@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
 
 static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
 {
-	struct hibmc_framebuffer *gfb = fbdev->fb;
 	struct drm_fb_helper *fbh = &fbdev->helper;
 
 	drm_fb_helper_unregister_fbi(fbh);
 
 	drm_fb_helper_fini(fbh);
 
-	if (gfb)
-		drm_framebuffer_put(&gfb->fb);
+	if (fbdev->fb)
+		drm_framebuffer_put(fbdev->fb);
 }
 
 static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
index 21b684eab5c9..386033b0d3a2 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
@@ -16,6 +16,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_vram_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_print.h>
 
 #include "hibmc_drm_drv.h"
@@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
 	return 0;
 }
 
-static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
-{
-	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
-
-	drm_gem_object_put_unlocked(hibmc_fb->obj);
-	drm_framebuffer_cleanup(fb);
-	kfree(hibmc_fb);
-}
-
 static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
-	.destroy = hibmc_user_framebuffer_destroy,
+	.destroy	= drm_gem_fb_destroy,
+	.create_handle	= drm_gem_fb_create_handle,
 };
 
-struct hibmc_framebuffer *
+struct drm_framebuffer *
 hibmc_framebuffer_init(struct drm_device *dev,
 		       const struct drm_mode_fb_cmd2 *mode_cmd,
 		       struct drm_gem_object *obj)
 {
-	struct hibmc_framebuffer *hibmc_fb;
+	struct drm_framebuffer *fb;
 	int ret;
 
-	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
-	if (!hibmc_fb) {
-		DRM_ERROR("failed to allocate hibmc_fb\n");
+	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	if (!fb) {
+		DRM_ERROR("failed to allocate fb\n");
 		return ERR_PTR(-ENOMEM);
 	}
 
-	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
-	hibmc_fb->obj = obj;
-	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
+	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
+	fb->obj[0] = obj;
+	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
 	if (ret) {
 		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
-		kfree(hibmc_fb);
+		kfree(fb);
 		return ERR_PTR(ret);
 	}
 
-	return hibmc_fb;
-}
-
-static struct drm_framebuffer *
-hibmc_user_framebuffer_create(struct drm_device *dev,
-			      struct drm_file *filp,
-			      const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct drm_gem_object *obj;
-	struct hibmc_framebuffer *hibmc_fb;
-
-	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
-			 mode_cmd->width, mode_cmd->height,
-			 (mode_cmd->pixel_format) & 0xff,
-			 (mode_cmd->pixel_format >> 8)  & 0xff,
-			 (mode_cmd->pixel_format >> 16) & 0xff,
-			 (mode_cmd->pixel_format >> 24) & 0xff);
-
-	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!obj)
-		return ERR_PTR(-ENOENT);
-
-	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
-	if (IS_ERR(hibmc_fb)) {
-		drm_gem_object_put_unlocked(obj);
-		return ERR_PTR((long)hibmc_fb);
-	}
-	return &hibmc_fb->fb;
+	return fb;
 }
 
 const struct drm_mode_config_funcs hibmc_mode_funcs = {
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-	.fb_create = hibmc_user_framebuffer_create,
+	.fb_create = drm_gem_fb_create,
 };
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

Again we could delete a lot more if we'd switch over to the generic
fbdev stuff.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
 drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
 4 files changed, 19 insertions(+), 63 deletions(-)

diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
index 6527a97f68a3..2d0920ec4554 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
@@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
 	s64 gpu_addr = 0;
 	unsigned int line_l;
 	struct hibmc_drm_private *priv = plane->dev->dev_private;
-	struct hibmc_framebuffer *hibmc_fb;
 	struct drm_gem_vram_object *gbo;
 
 	if (!state->fb)
 		return;
 
-	hibmc_fb = to_hibmc_framebuffer(state->fb);
-	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
+	gbo = drm_gem_vram_of_gem(fb->obj[0]);
 
 	gpu_addr = drm_gem_vram_offset(gbo);
 	if (WARN_ON_ONCE(gpu_addr < 0))
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
index e58ecd7edcf8..ab5b4a4a2095 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
@@ -20,14 +20,9 @@
 struct drm_device;
 struct drm_gem_object;
 
-struct hibmc_framebuffer {
-	struct drm_framebuffer fb;
-	struct drm_gem_object *obj;
-};
-
 struct hibmc_fbdev {
 	struct drm_fb_helper helper; /* must be first */
-	struct hibmc_framebuffer *fb;
+	struct drm_framebuffer *fb;
 	int size;
 };
 
@@ -47,8 +42,6 @@ struct hibmc_drm_private {
 	struct hibmc_fbdev *fbdev;
 };
 
-#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
-
 void hibmc_set_power_mode(struct hibmc_drm_private *priv,
 			  unsigned int power_mode);
 void hibmc_set_current_gate(struct hibmc_drm_private *priv,
@@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
 
 int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
 		     struct drm_gem_object **obj);
-struct hibmc_framebuffer *
+struct drm_framebuffer *
 hibmc_framebuffer_init(struct drm_device *dev,
 		       const struct drm_mode_fb_cmd2 *mode_cmd,
 		       struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
index b4c1cea051e8..446aeedc9e29 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
@@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
 
 static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
 {
-	struct hibmc_framebuffer *gfb = fbdev->fb;
 	struct drm_fb_helper *fbh = &fbdev->helper;
 
 	drm_fb_helper_unregister_fbi(fbh);
 
 	drm_fb_helper_fini(fbh);
 
-	if (gfb)
-		drm_framebuffer_put(&gfb->fb);
+	if (fbdev->fb)
+		drm_framebuffer_put(fbdev->fb);
 }
 
 static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
index 21b684eab5c9..386033b0d3a2 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
@@ -16,6 +16,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_gem.h>
 #include <drm/drm_gem_vram_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_print.h>
 
 #include "hibmc_drm_drv.h"
@@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
 	return 0;
 }
 
-static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
-{
-	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
-
-	drm_gem_object_put_unlocked(hibmc_fb->obj);
-	drm_framebuffer_cleanup(fb);
-	kfree(hibmc_fb);
-}
-
 static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
-	.destroy = hibmc_user_framebuffer_destroy,
+	.destroy	= drm_gem_fb_destroy,
+	.create_handle	= drm_gem_fb_create_handle,
 };
 
-struct hibmc_framebuffer *
+struct drm_framebuffer *
 hibmc_framebuffer_init(struct drm_device *dev,
 		       const struct drm_mode_fb_cmd2 *mode_cmd,
 		       struct drm_gem_object *obj)
 {
-	struct hibmc_framebuffer *hibmc_fb;
+	struct drm_framebuffer *fb;
 	int ret;
 
-	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
-	if (!hibmc_fb) {
-		DRM_ERROR("failed to allocate hibmc_fb\n");
+	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
+	if (!fb) {
+		DRM_ERROR("failed to allocate fb\n");
 		return ERR_PTR(-ENOMEM);
 	}
 
-	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
-	hibmc_fb->obj = obj;
-	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
+	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
+	fb->obj[0] = obj;
+	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
 	if (ret) {
 		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
-		kfree(hibmc_fb);
+		kfree(fb);
 		return ERR_PTR(ret);
 	}
 
-	return hibmc_fb;
-}
-
-static struct drm_framebuffer *
-hibmc_user_framebuffer_create(struct drm_device *dev,
-			      struct drm_file *filp,
-			      const struct drm_mode_fb_cmd2 *mode_cmd)
-{
-	struct drm_gem_object *obj;
-	struct hibmc_framebuffer *hibmc_fb;
-
-	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
-			 mode_cmd->width, mode_cmd->height,
-			 (mode_cmd->pixel_format) & 0xff,
-			 (mode_cmd->pixel_format >> 8)  & 0xff,
-			 (mode_cmd->pixel_format >> 16) & 0xff,
-			 (mode_cmd->pixel_format >> 24) & 0xff);
-
-	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
-	if (!obj)
-		return ERR_PTR(-ENOENT);
-
-	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
-	if (IS_ERR(hibmc_fb)) {
-		drm_gem_object_put_unlocked(obj);
-		return ERR_PTR((long)hibmc_fb);
-	}
-	return &hibmc_fb->fb;
+	return fb;
 }
 
 const struct drm_mode_config_funcs hibmc_mode_funcs = {
 	.atomic_check = drm_atomic_helper_check,
 	.atomic_commit = drm_atomic_helper_commit,
-	.fb_create = hibmc_user_framebuffer_create,
+	.fb_create = drm_gem_fb_create,
 };
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

We're doing a great job for really simple drivers right now, but still
a lot of boilerplate for the bigger ones.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index 3ec509381fc5..2d85f37284a1 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert
 
 Level: Intermediate
 
+drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
+-----------------------------------------------------------------
+
+A lot more drivers could be switched over to the drm_gem_framebuffer helpers.
+Various hold-ups:
+
+- Need to switch over to the generic dirty tracking code using
+  drm_atomic_helper_dirtyfb first (e.g. qxl).
+
+- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb
+  setup code can't be deleted.
+
+- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For
+  atomic drivers we could check for valid formats by calling
+  drm_plane_check_pixel_format() against all planes, and pass if any plane
+  supports the format. For non-atomic that's not possible since like the format
+  list for the primary plane is fake and we'd therefor reject valid formats.
+
+- Many drivers subclass drm_framebuffer, we'd need a embedding compatible
+  version of the varios drm_gem_fb_create functions. Maybe called
+  drm_gem_fb_create/_with_dirty/_with_funcs as needed.
+
+Contact: Daniel Vetter
+
+Level: Intermediate
+
 Clean up mmap forwarding
 ------------------------
 
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

We're doing a great job for really simple drivers right now, but still
a lot of boilerplate for the bigger ones.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index 3ec509381fc5..2d85f37284a1 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert
 
 Level: Intermediate
 
+drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
+-----------------------------------------------------------------
+
+A lot more drivers could be switched over to the drm_gem_framebuffer helpers.
+Various hold-ups:
+
+- Need to switch over to the generic dirty tracking code using
+  drm_atomic_helper_dirtyfb first (e.g. qxl).
+
+- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb
+  setup code can't be deleted.
+
+- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For
+  atomic drivers we could check for valid formats by calling
+  drm_plane_check_pixel_format() against all planes, and pass if any plane
+  supports the format. For non-atomic that's not possible since like the format
+  list for the primary plane is fake and we'd therefor reject valid formats.
+
+- Many drivers subclass drm_framebuffer, we'd need a embedding compatible
+  version of the varios drm_gem_fb_create functions. Maybe called
+  drm_gem_fb_create/_with_dirty/_with_funcs as needed.
+
+Contact: Daniel Vetter
+
+Level: Intermediate
+
 Clean up mmap forwarding
 ------------------------
 
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [Intel-gfx] [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups
@ 2019-11-15  9:21   ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15  9:21 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

We're doing a great job for really simple drivers right now, but still
a lot of boilerplate for the bigger ones.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index 3ec509381fc5..2d85f37284a1 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert
 
 Level: Intermediate
 
+drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
+-----------------------------------------------------------------
+
+A lot more drivers could be switched over to the drm_gem_framebuffer helpers.
+Various hold-ups:
+
+- Need to switch over to the generic dirty tracking code using
+  drm_atomic_helper_dirtyfb first (e.g. qxl).
+
+- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb
+  setup code can't be deleted.
+
+- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For
+  atomic drivers we could check for valid formats by calling
+  drm_plane_check_pixel_format() against all planes, and pass if any plane
+  supports the format. For non-atomic that's not possible since like the format
+  list for the primary plane is fake and we'd therefor reject valid formats.
+
+- Many drivers subclass drm_framebuffer, we'd need a embedding compatible
+  version of the varios drm_gem_fb_create functions. Maybe called
+  drm_gem_fb_create/_with_dirty/_with_funcs as needed.
+
+Contact: Daniel Vetter
+
+Level: Intermediate
+
 Clean up mmap forwarding
 ------------------------
 
-- 
2.24.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.CHECKPATCH: warning for fb_create drive-through cleanups
@ 2019-11-15  9:30   ` Patchwork
  0 siblings, 0 replies; 89+ messages in thread
From: Patchwork @ 2019-11-15  9:30 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

== Series Details ==

Series: fb_create drive-through cleanups
URL   : https://patchwork.freedesktop.org/series/69514/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
1085f7dfc1d3 drm/fb: More paranoia in addfb checks
-:50: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 26 lines checked
7fc4508acb63 drm/atmel: ditch fb_create wrapper
-:41: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 20 lines checked
27106ebb8954 drm/mediatek: don't open-code drm_gem_fb_create
-:69: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#69: 
deleted file mode 100644

total: 0 errors, 1 warnings, 0 checks, 43 lines checked
c7f14c1c248f drm/rockchip: Use drm_gem_fb_create_with_dirty
-:88: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 65 lines checked
8549ecb1f600 drm/tilcdc: Drop drm_gem_fb_create wrapper
-:37: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 20 lines checked
0fdfa8023393 drm/xen: Simplify fb_create
-:37: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 15 lines checked
805278bb47e6 drm/hibmc: Use drm_gem_fb_create
-:190: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 157 lines checked
175f751e4093 drm/todo: Add entry for fb funcs related cleanups
-:47: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 32 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for fb_create drive-through cleanups
@ 2019-11-15  9:30   ` Patchwork
  0 siblings, 0 replies; 89+ messages in thread
From: Patchwork @ 2019-11-15  9:30 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

== Series Details ==

Series: fb_create drive-through cleanups
URL   : https://patchwork.freedesktop.org/series/69514/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
1085f7dfc1d3 drm/fb: More paranoia in addfb checks
-:50: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 26 lines checked
7fc4508acb63 drm/atmel: ditch fb_create wrapper
-:41: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 20 lines checked
27106ebb8954 drm/mediatek: don't open-code drm_gem_fb_create
-:69: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#69: 
deleted file mode 100644

total: 0 errors, 1 warnings, 0 checks, 43 lines checked
c7f14c1c248f drm/rockchip: Use drm_gem_fb_create_with_dirty
-:88: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 65 lines checked
8549ecb1f600 drm/tilcdc: Drop drm_gem_fb_create wrapper
-:37: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 20 lines checked
0fdfa8023393 drm/xen: Simplify fb_create
-:37: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 15 lines checked
805278bb47e6 drm/hibmc: Use drm_gem_fb_create
-:190: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 157 lines checked
175f751e4093 drm/todo: Add entry for fb funcs related cleanups
-:47: WARNING:NO_AUTHOR_SIGN_OFF: Missing Signed-off-by: line by nominal patch author 'Daniel Vetter <daniel.vetter@ffwll.ch>'

total: 0 errors, 1 warnings, 0 checks, 32 lines checked

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
  2019-11-15  9:21   ` Daniel Vetter
  (?)
@ 2019-11-15  9:33     ` Boris Brezillon
  -1 siblings, 0 replies; 89+ messages in thread
From: Boris Brezillon @ 2019-11-15  9:33 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Intel Graphics Development,
	DRI Development, Ludovic Desroches, Daniel Vetter, Sam Ravnborg,
	linux-arm-kernel

On Fri, 15 Nov 2019 10:21:14 +0100
Daniel Vetter <daniel.vetter@ffwll.ch> wrote:

> Spotted while looking through them all.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Boris Brezillon <bbrezillon@kernel.org>

Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> Cc: linux-arm-kernel@lists.infradead.org
> ---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 92640298ad41..8dc917a1270b 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  struct atmel_hlcdc_dc_commit {
>  	struct work_struct work;
>  	struct drm_device *dev;
> @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = atmel_hlcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
>  };


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-15  9:33     ` Boris Brezillon
  0 siblings, 0 replies; 89+ messages in thread
From: Boris Brezillon @ 2019-11-15  9:33 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Intel Graphics Development,
	Nicolas Ferre, DRI Development, Ludovic Desroches, Daniel Vetter,
	Sam Ravnborg, linux-arm-kernel

On Fri, 15 Nov 2019 10:21:14 +0100
Daniel Vetter <daniel.vetter@ffwll.ch> wrote:

> Spotted while looking through them all.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Boris Brezillon <bbrezillon@kernel.org>

Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> Cc: linux-arm-kernel@lists.infradead.org
> ---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 92640298ad41..8dc917a1270b 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  struct atmel_hlcdc_dc_commit {
>  	struct work_struct work;
>  	struct drm_device *dev;
> @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = atmel_hlcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
>  };

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-15  9:33     ` Boris Brezillon
  0 siblings, 0 replies; 89+ messages in thread
From: Boris Brezillon @ 2019-11-15  9:33 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Intel Graphics Development,
	Nicolas Ferre, DRI Development, Ludovic Desroches, Daniel Vetter,
	Sam Ravnborg, linux-arm-kernel

On Fri, 15 Nov 2019 10:21:14 +0100
Daniel Vetter <daniel.vetter@ffwll.ch> wrote:

> Spotted while looking through them all.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Boris Brezillon <bbrezillon@kernel.org>

Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

> Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> Cc: linux-arm-kernel@lists.infradead.org
> ---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> index 92640298ad41..8dc917a1270b 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
>  	return IRQ_HANDLED;
>  }
>  
> -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  struct atmel_hlcdc_dc_commit {
>  	struct work_struct work;
>  	struct drm_device *dev;
> @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = atmel_hlcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
>  };

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* ✗ Fi.CI.BAT: failure for fb_create drive-through cleanups
@ 2019-11-15  9:50   ` Patchwork
  0 siblings, 0 replies; 89+ messages in thread
From: Patchwork @ 2019-11-15  9:50 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

== Series Details ==

Series: fb_create drive-through cleanups
URL   : https://patchwork.freedesktop.org/series/69514/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_7350 -> Patchwork_15274
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_15274 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_15274, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_15274:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-hsw-4770r:       [PASS][1] -> [FAIL][2] +62 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770r/igt@i915_pm_rpm@basic-pci-d3-state.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770r/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@i915_pm_rpm@module-reload:
    - fi-cfl-8700k:       [PASS][3] -> [FAIL][4] +63 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cfl-8700k/igt@i915_pm_rpm@module-reload.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cfl-8700k/igt@i915_pm_rpm@module-reload.html

  * igt@kms_addfb_basic@addfb25-bad-modifier:
    - fi-gdg-551:         [PASS][5] -> [FAIL][6] +54 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-gdg-551/igt@kms_addfb_basic@addfb25-bad-modifier.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-gdg-551/igt@kms_addfb_basic@addfb25-bad-modifier.html

  * igt@kms_addfb_basic@addfb25-modifier-no-flag:
    - fi-cfl-guc:         [PASS][7] -> [FAIL][8] +63 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cfl-guc/igt@kms_addfb_basic@addfb25-modifier-no-flag.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cfl-guc/igt@kms_addfb_basic@addfb25-modifier-no-flag.html

  * igt@kms_addfb_basic@addfb25-y-tiled:
    - fi-kbl-r:           [PASS][9] -> [FAIL][10] +68 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-r/igt@kms_addfb_basic@addfb25-y-tiled.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-r/igt@kms_addfb_basic@addfb25-y-tiled.html
    - fi-byt-n2820:       [PASS][11] -> [FAIL][12] +59 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled.html
    - fi-bsw-nick:        [PASS][13] -> [FAIL][14] +35 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-nick/igt@kms_addfb_basic@addfb25-y-tiled.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-nick/igt@kms_addfb_basic@addfb25-y-tiled.html

  * igt@kms_addfb_basic@addfb25-yf-tiled:
    - fi-snb-2520m:       [PASS][15] -> [FAIL][16] +59 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2520m/igt@kms_addfb_basic@addfb25-yf-tiled.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2520m/igt@kms_addfb_basic@addfb25-yf-tiled.html

  * igt@kms_addfb_basic@bad-pitch-1024:
    - fi-bxt-dsi:         [PASS][17] -> [FAIL][18] +64 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bxt-dsi/igt@kms_addfb_basic@bad-pitch-1024.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bxt-dsi/igt@kms_addfb_basic@bad-pitch-1024.html

  * igt@kms_addfb_basic@bad-pitch-128:
    - fi-cml-u2:          [PASS][19] -> [FAIL][20] +68 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cml-u2/igt@kms_addfb_basic@bad-pitch-128.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cml-u2/igt@kms_addfb_basic@bad-pitch-128.html

  * igt@kms_addfb_basic@bad-pitch-32:
    - fi-whl-u:           [PASS][21] -> [FAIL][22] +64 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-whl-u/igt@kms_addfb_basic@bad-pitch-32.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-whl-u/igt@kms_addfb_basic@bad-pitch-32.html

  * igt@kms_addfb_basic@basic:
    - fi-byt-j1900:       [PASS][23] -> [FAIL][24] +60 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-j1900/igt@kms_addfb_basic@basic.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-j1900/igt@kms_addfb_basic@basic.html

  * igt@kms_addfb_basic@bo-too-small:
    - fi-icl-y:           [PASS][25] -> [FAIL][26] +64 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-y/igt@kms_addfb_basic@bo-too-small.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-y/igt@kms_addfb_basic@bo-too-small.html

  * igt@kms_addfb_basic@clobberred-modifier:
    - fi-icl-guc:         [PASS][27] -> [FAIL][28] +68 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-guc/igt@kms_addfb_basic@clobberred-modifier.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-guc/igt@kms_addfb_basic@clobberred-modifier.html

  * igt@kms_addfb_basic@invalid-get-prop-any:
    - fi-skl-6600u:       [PASS][29] -> [FAIL][30] +68 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6600u/igt@kms_addfb_basic@invalid-get-prop-any.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6600u/igt@kms_addfb_basic@invalid-get-prop-any.html
    - fi-ivb-3770:        [PASS][31] -> [FAIL][32] +60 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ivb-3770/igt@kms_addfb_basic@invalid-get-prop-any.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ivb-3770/igt@kms_addfb_basic@invalid-get-prop-any.html

  * igt@kms_addfb_basic@invalid-set-prop:
    - fi-hsw-4770:        [PASS][33] -> [FAIL][34] +63 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770/igt@kms_addfb_basic@invalid-set-prop.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770/igt@kms_addfb_basic@invalid-set-prop.html

  * igt@kms_addfb_basic@invalid-set-prop-any:
    - fi-glk-dsi:         [PASS][35] -> [FAIL][36] +64 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-glk-dsi/igt@kms_addfb_basic@invalid-set-prop-any.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-glk-dsi/igt@kms_addfb_basic@invalid-set-prop-any.html

  * igt@kms_addfb_basic@no-handle:
    - fi-icl-u2:          [PASS][37] -> [FAIL][38] +67 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@kms_addfb_basic@no-handle.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@kms_addfb_basic@no-handle.html

  * igt@kms_addfb_basic@size-max:
    - fi-apl-guc:         [PASS][39] -> [FAIL][40] +63 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-apl-guc/igt@kms_addfb_basic@size-max.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-apl-guc/igt@kms_addfb_basic@size-max.html

  * igt@kms_addfb_basic@unused-modifier:
    - fi-bdw-5557u:       [PASS][41] -> [FAIL][42] +62 similar issues
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bdw-5557u/igt@kms_addfb_basic@unused-modifier.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bdw-5557u/igt@kms_addfb_basic@unused-modifier.html
    - fi-icl-dsi:         [PASS][43] -> [FAIL][44] +47 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-dsi/igt@kms_addfb_basic@unused-modifier.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@kms_addfb_basic@unused-modifier.html
    - fi-bsw-kefka:       [PASS][45] -> [FAIL][46] +61 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-kefka/igt@kms_addfb_basic@unused-modifier.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-kefka/igt@kms_addfb_basic@unused-modifier.html
    - fi-kbl-8809g:       [PASS][47] -> [FAIL][48] +36 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-8809g/igt@kms_addfb_basic@unused-modifier.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-8809g/igt@kms_addfb_basic@unused-modifier.html
    - fi-kbl-guc:         [PASS][49] -> [FAIL][50] +36 similar issues
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-guc/igt@kms_addfb_basic@unused-modifier.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-guc/igt@kms_addfb_basic@unused-modifier.html

  * igt@kms_addfb_basic@unused-offsets:
    - fi-bwr-2160:        [PASS][51] -> [FAIL][52] +54 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bwr-2160/igt@kms_addfb_basic@unused-offsets.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bwr-2160/igt@kms_addfb_basic@unused-offsets.html
    - fi-blb-e6850:       [PASS][53] -> [FAIL][54] +54 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-blb-e6850/igt@kms_addfb_basic@unused-offsets.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-blb-e6850/igt@kms_addfb_basic@unused-offsets.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-kbl-7500u:       [PASS][55] -> [FAIL][56] +65 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - fi-kbl-soraka:      [PASS][57] -> [FAIL][58] +68 similar issues
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-soraka/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-soraka/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size:
    - fi-skl-guc:         [PASS][59] -> [FAIL][60] +64 similar issues
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-guc/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-guc/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html

  * igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
    - fi-bsw-n3050:       [PASS][61] -> [FAIL][62] +53 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-n3050/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-n3050/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
    - fi-skl-6700k2:      [PASS][63] -> [FAIL][64] +64 similar issues
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6700k2/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6700k2/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html

  * igt@kms_flip@basic-flip-vs-dpms:
    - fi-ilk-650:         [PASS][65] -> [FAIL][66] +59 similar issues
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms.html
    - fi-pnv-d510:        [PASS][67] -> [FAIL][68] +54 similar issues
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-pnv-d510/igt@kms_flip@basic-flip-vs-dpms.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-pnv-d510/igt@kms_flip@basic-flip-vs-dpms.html
    - fi-skl-6770hq:      [PASS][69] -> [FAIL][70] +62 similar issues
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6770hq/igt@kms_flip@basic-flip-vs-dpms.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6770hq/igt@kms_flip@basic-flip-vs-dpms.html

  * igt@kms_flip@basic-flip-vs-modeset:
    - fi-kbl-x1275:       [PASS][71] -> [FAIL][72] +63 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - fi-hsw-peppy:       [PASS][73] -> [FAIL][74] +63 similar issues
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-peppy/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-peppy/igt@kms_flip@basic-flip-vs-wf_vblank.html
    - fi-snb-2600:        [PASS][75] -> [FAIL][76] +59 similar issues
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2600/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2600/igt@kms_flip@basic-flip-vs-wf_vblank.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-icl-u3:          [PASS][77] -> [FAIL][78] +69 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence:
    - fi-elk-e7500:       [PASS][79] -> [FAIL][80] +54 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-elk-e7500/igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-elk-e7500/igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-a:
    - fi-icl-dsi:         NOTRUN -> [FAIL][81] +14 similar issues
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@kms_pipe_crc_basic@read-crc-pipe-a.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-skl-lmem:        [PASS][82] -> [FAIL][83] +62 similar issues
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-lmem/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-lmem/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  * igt@prime_vgem@basic-fence-flip:
    - fi-icl-u2:          [PASS][84] -> [SKIP][85]
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@prime_vgem@basic-fence-flip.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-guc:         [PASS][86] -> [SKIP][87]
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-guc/igt@prime_vgem@basic-fence-flip.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-guc/igt@prime_vgem@basic-fence-flip.html
    - fi-cml-u2:          [PASS][88] -> [SKIP][89]
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cml-u2/igt@prime_vgem@basic-fence-flip.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cml-u2/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-u3:          [PASS][90] -> [SKIP][91]
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u3/igt@prime_vgem@basic-fence-flip.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u3/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-dsi:         NOTRUN -> [SKIP][92]
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-y:           [PASS][93] -> [SKIP][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-y/igt@prime_vgem@basic-fence-flip.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-y/igt@prime_vgem@basic-fence-flip.html

  
#### Warnings ####

  * igt@i915_pm_rpm@basic-rte:
    - fi-snb-2520m:       [SKIP][95] ([fdo#109271]) -> [FAIL][96] +3 similar issues
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2520m/igt@i915_pm_rpm@basic-rte.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2520m/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_pm_rpm@module-reload:
    - fi-pnv-d510:        [SKIP][97] ([fdo#109271]) -> [FAIL][98] +3 similar issues
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-pnv-d510/igt@i915_pm_rpm@module-reload.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-pnv-d510/igt@i915_pm_rpm@module-reload.html
    - fi-ilk-650:         [SKIP][99] ([fdo#109271]) -> [FAIL][100] +3 similar issues
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ilk-650/igt@i915_pm_rpm@module-reload.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ilk-650/igt@i915_pm_rpm@module-reload.html
    - fi-elk-e7500:       [SKIP][101] ([fdo#109271]) -> [FAIL][102] +4 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-elk-e7500/igt@i915_pm_rpm@module-reload.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-elk-e7500/igt@i915_pm_rpm@module-reload.html
    - fi-skl-6770hq:      [DMESG-WARN][103] ([fdo#112261]) -> [FAIL][104]
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
    - fi-icl-u2:          [DMESG-WARN][105] ([fdo#110595]) -> [FAIL][106]
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@i915_pm_rpm@module-reload.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@i915_pm_rpm@module-reload.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small:
    - fi-bwr-2160:        [SKIP][107] ([fdo#109271]) -> [FAIL][108] +3 similar issues
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bwr-2160/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bwr-2160/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-bdw-5557u:       [SKIP][109] ([fdo#109271]) -> [FAIL][110]
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bdw-5557u/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bdw-5557u/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-byt-n2820:       [SKIP][111] ([fdo#109271]) -> [FAIL][112]
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-hsw-4770:        [SKIP][113] ([fdo#109271]) -> [FAIL][114]
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-byt-j1900:       [SKIP][115] ([fdo#109271]) -> [FAIL][116]
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-j1900/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-j1900/igt@kms_addfb_basic@addf

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* [Intel-gfx] ✗ Fi.CI.BAT: failure for fb_create drive-through cleanups
@ 2019-11-15  9:50   ` Patchwork
  0 siblings, 0 replies; 89+ messages in thread
From: Patchwork @ 2019-11-15  9:50 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: intel-gfx

== Series Details ==

Series: fb_create drive-through cleanups
URL   : https://patchwork.freedesktop.org/series/69514/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_7350 -> Patchwork_15274
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_15274 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_15274, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_15274:

### IGT changes ###

#### Possible regressions ####

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-hsw-4770r:       [PASS][1] -> [FAIL][2] +62 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770r/igt@i915_pm_rpm@basic-pci-d3-state.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770r/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@i915_pm_rpm@module-reload:
    - fi-cfl-8700k:       [PASS][3] -> [FAIL][4] +63 similar issues
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cfl-8700k/igt@i915_pm_rpm@module-reload.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cfl-8700k/igt@i915_pm_rpm@module-reload.html

  * igt@kms_addfb_basic@addfb25-bad-modifier:
    - fi-gdg-551:         [PASS][5] -> [FAIL][6] +54 similar issues
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-gdg-551/igt@kms_addfb_basic@addfb25-bad-modifier.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-gdg-551/igt@kms_addfb_basic@addfb25-bad-modifier.html

  * igt@kms_addfb_basic@addfb25-modifier-no-flag:
    - fi-cfl-guc:         [PASS][7] -> [FAIL][8] +63 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cfl-guc/igt@kms_addfb_basic@addfb25-modifier-no-flag.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cfl-guc/igt@kms_addfb_basic@addfb25-modifier-no-flag.html

  * igt@kms_addfb_basic@addfb25-y-tiled:
    - fi-kbl-r:           [PASS][9] -> [FAIL][10] +68 similar issues
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-r/igt@kms_addfb_basic@addfb25-y-tiled.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-r/igt@kms_addfb_basic@addfb25-y-tiled.html
    - fi-byt-n2820:       [PASS][11] -> [FAIL][12] +59 similar issues
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled.html
    - fi-bsw-nick:        [PASS][13] -> [FAIL][14] +35 similar issues
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-nick/igt@kms_addfb_basic@addfb25-y-tiled.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-nick/igt@kms_addfb_basic@addfb25-y-tiled.html

  * igt@kms_addfb_basic@addfb25-yf-tiled:
    - fi-snb-2520m:       [PASS][15] -> [FAIL][16] +59 similar issues
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2520m/igt@kms_addfb_basic@addfb25-yf-tiled.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2520m/igt@kms_addfb_basic@addfb25-yf-tiled.html

  * igt@kms_addfb_basic@bad-pitch-1024:
    - fi-bxt-dsi:         [PASS][17] -> [FAIL][18] +64 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bxt-dsi/igt@kms_addfb_basic@bad-pitch-1024.html
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bxt-dsi/igt@kms_addfb_basic@bad-pitch-1024.html

  * igt@kms_addfb_basic@bad-pitch-128:
    - fi-cml-u2:          [PASS][19] -> [FAIL][20] +68 similar issues
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cml-u2/igt@kms_addfb_basic@bad-pitch-128.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cml-u2/igt@kms_addfb_basic@bad-pitch-128.html

  * igt@kms_addfb_basic@bad-pitch-32:
    - fi-whl-u:           [PASS][21] -> [FAIL][22] +64 similar issues
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-whl-u/igt@kms_addfb_basic@bad-pitch-32.html
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-whl-u/igt@kms_addfb_basic@bad-pitch-32.html

  * igt@kms_addfb_basic@basic:
    - fi-byt-j1900:       [PASS][23] -> [FAIL][24] +60 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-j1900/igt@kms_addfb_basic@basic.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-j1900/igt@kms_addfb_basic@basic.html

  * igt@kms_addfb_basic@bo-too-small:
    - fi-icl-y:           [PASS][25] -> [FAIL][26] +64 similar issues
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-y/igt@kms_addfb_basic@bo-too-small.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-y/igt@kms_addfb_basic@bo-too-small.html

  * igt@kms_addfb_basic@clobberred-modifier:
    - fi-icl-guc:         [PASS][27] -> [FAIL][28] +68 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-guc/igt@kms_addfb_basic@clobberred-modifier.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-guc/igt@kms_addfb_basic@clobberred-modifier.html

  * igt@kms_addfb_basic@invalid-get-prop-any:
    - fi-skl-6600u:       [PASS][29] -> [FAIL][30] +68 similar issues
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6600u/igt@kms_addfb_basic@invalid-get-prop-any.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6600u/igt@kms_addfb_basic@invalid-get-prop-any.html
    - fi-ivb-3770:        [PASS][31] -> [FAIL][32] +60 similar issues
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ivb-3770/igt@kms_addfb_basic@invalid-get-prop-any.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ivb-3770/igt@kms_addfb_basic@invalid-get-prop-any.html

  * igt@kms_addfb_basic@invalid-set-prop:
    - fi-hsw-4770:        [PASS][33] -> [FAIL][34] +63 similar issues
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770/igt@kms_addfb_basic@invalid-set-prop.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770/igt@kms_addfb_basic@invalid-set-prop.html

  * igt@kms_addfb_basic@invalid-set-prop-any:
    - fi-glk-dsi:         [PASS][35] -> [FAIL][36] +64 similar issues
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-glk-dsi/igt@kms_addfb_basic@invalid-set-prop-any.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-glk-dsi/igt@kms_addfb_basic@invalid-set-prop-any.html

  * igt@kms_addfb_basic@no-handle:
    - fi-icl-u2:          [PASS][37] -> [FAIL][38] +67 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@kms_addfb_basic@no-handle.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@kms_addfb_basic@no-handle.html

  * igt@kms_addfb_basic@size-max:
    - fi-apl-guc:         [PASS][39] -> [FAIL][40] +63 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-apl-guc/igt@kms_addfb_basic@size-max.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-apl-guc/igt@kms_addfb_basic@size-max.html

  * igt@kms_addfb_basic@unused-modifier:
    - fi-bdw-5557u:       [PASS][41] -> [FAIL][42] +62 similar issues
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bdw-5557u/igt@kms_addfb_basic@unused-modifier.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bdw-5557u/igt@kms_addfb_basic@unused-modifier.html
    - fi-icl-dsi:         [PASS][43] -> [FAIL][44] +47 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-dsi/igt@kms_addfb_basic@unused-modifier.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@kms_addfb_basic@unused-modifier.html
    - fi-bsw-kefka:       [PASS][45] -> [FAIL][46] +61 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-kefka/igt@kms_addfb_basic@unused-modifier.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-kefka/igt@kms_addfb_basic@unused-modifier.html
    - fi-kbl-8809g:       [PASS][47] -> [FAIL][48] +36 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-8809g/igt@kms_addfb_basic@unused-modifier.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-8809g/igt@kms_addfb_basic@unused-modifier.html
    - fi-kbl-guc:         [PASS][49] -> [FAIL][50] +36 similar issues
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-guc/igt@kms_addfb_basic@unused-modifier.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-guc/igt@kms_addfb_basic@unused-modifier.html

  * igt@kms_addfb_basic@unused-offsets:
    - fi-bwr-2160:        [PASS][51] -> [FAIL][52] +54 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bwr-2160/igt@kms_addfb_basic@unused-offsets.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bwr-2160/igt@kms_addfb_basic@unused-offsets.html
    - fi-blb-e6850:       [PASS][53] -> [FAIL][54] +54 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-blb-e6850/igt@kms_addfb_basic@unused-offsets.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-blb-e6850/igt@kms_addfb_basic@unused-offsets.html

  * igt@kms_chamelium@dp-crc-fast:
    - fi-kbl-7500u:       [PASS][55] -> [FAIL][56] +65 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-7500u/igt@kms_chamelium@dp-crc-fast.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - fi-kbl-soraka:      [PASS][57] -> [FAIL][58] +68 similar issues
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-soraka/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-soraka/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size:
    - fi-skl-guc:         [PASS][59] -> [FAIL][60] +64 similar issues
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-guc/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-guc/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html

  * igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size:
    - fi-bsw-n3050:       [PASS][61] -> [FAIL][62] +53 similar issues
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bsw-n3050/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bsw-n3050/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
    - fi-skl-6700k2:      [PASS][63] -> [FAIL][64] +64 similar issues
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6700k2/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6700k2/igt@kms_cursor_legacy@basic-flip-before-cursor-varying-size.html

  * igt@kms_flip@basic-flip-vs-dpms:
    - fi-ilk-650:         [PASS][65] -> [FAIL][66] +59 similar issues
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms.html
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ilk-650/igt@kms_flip@basic-flip-vs-dpms.html
    - fi-pnv-d510:        [PASS][67] -> [FAIL][68] +54 similar issues
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-pnv-d510/igt@kms_flip@basic-flip-vs-dpms.html
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-pnv-d510/igt@kms_flip@basic-flip-vs-dpms.html
    - fi-skl-6770hq:      [PASS][69] -> [FAIL][70] +62 similar issues
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6770hq/igt@kms_flip@basic-flip-vs-dpms.html
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6770hq/igt@kms_flip@basic-flip-vs-dpms.html

  * igt@kms_flip@basic-flip-vs-modeset:
    - fi-kbl-x1275:       [PASS][71] -> [FAIL][72] +63 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-kbl-x1275/igt@kms_flip@basic-flip-vs-modeset.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - fi-hsw-peppy:       [PASS][73] -> [FAIL][74] +63 similar issues
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-peppy/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-peppy/igt@kms_flip@basic-flip-vs-wf_vblank.html
    - fi-snb-2600:        [PASS][75] -> [FAIL][76] +59 similar issues
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2600/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2600/igt@kms_flip@basic-flip-vs-wf_vblank.html

  * igt@kms_frontbuffer_tracking@basic:
    - fi-icl-u3:          [PASS][77] -> [FAIL][78] +69 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u3/igt@kms_frontbuffer_tracking@basic.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence:
    - fi-elk-e7500:       [PASS][79] -> [FAIL][80] +54 similar issues
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-elk-e7500/igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence.html
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-elk-e7500/igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence.html

  * igt@kms_pipe_crc_basic@read-crc-pipe-a:
    - fi-icl-dsi:         NOTRUN -> [FAIL][81] +14 similar issues
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@kms_pipe_crc_basic@read-crc-pipe-a.html

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
    - fi-skl-lmem:        [PASS][82] -> [FAIL][83] +62 similar issues
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-lmem/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-lmem/igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a.html

  * igt@prime_vgem@basic-fence-flip:
    - fi-icl-u2:          [PASS][84] -> [SKIP][85]
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@prime_vgem@basic-fence-flip.html
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-guc:         [PASS][86] -> [SKIP][87]
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-guc/igt@prime_vgem@basic-fence-flip.html
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-guc/igt@prime_vgem@basic-fence-flip.html
    - fi-cml-u2:          [PASS][88] -> [SKIP][89]
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-cml-u2/igt@prime_vgem@basic-fence-flip.html
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-cml-u2/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-u3:          [PASS][90] -> [SKIP][91]
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u3/igt@prime_vgem@basic-fence-flip.html
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u3/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-dsi:         NOTRUN -> [SKIP][92]
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-dsi/igt@prime_vgem@basic-fence-flip.html
    - fi-icl-y:           [PASS][93] -> [SKIP][94]
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-y/igt@prime_vgem@basic-fence-flip.html
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-y/igt@prime_vgem@basic-fence-flip.html

  
#### Warnings ####

  * igt@i915_pm_rpm@basic-rte:
    - fi-snb-2520m:       [SKIP][95] ([fdo#109271]) -> [FAIL][96] +3 similar issues
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-snb-2520m/igt@i915_pm_rpm@basic-rte.html
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-snb-2520m/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_pm_rpm@module-reload:
    - fi-pnv-d510:        [SKIP][97] ([fdo#109271]) -> [FAIL][98] +3 similar issues
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-pnv-d510/igt@i915_pm_rpm@module-reload.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-pnv-d510/igt@i915_pm_rpm@module-reload.html
    - fi-ilk-650:         [SKIP][99] ([fdo#109271]) -> [FAIL][100] +3 similar issues
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-ilk-650/igt@i915_pm_rpm@module-reload.html
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-ilk-650/igt@i915_pm_rpm@module-reload.html
    - fi-elk-e7500:       [SKIP][101] ([fdo#109271]) -> [FAIL][102] +4 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-elk-e7500/igt@i915_pm_rpm@module-reload.html
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-elk-e7500/igt@i915_pm_rpm@module-reload.html
    - fi-skl-6770hq:      [DMESG-WARN][103] ([fdo#112261]) -> [FAIL][104]
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-skl-6770hq/igt@i915_pm_rpm@module-reload.html
    - fi-icl-u2:          [DMESG-WARN][105] ([fdo#110595]) -> [FAIL][106]
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-icl-u2/igt@i915_pm_rpm@module-reload.html
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-icl-u2/igt@i915_pm_rpm@module-reload.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small:
    - fi-bwr-2160:        [SKIP][107] ([fdo#109271]) -> [FAIL][108] +3 similar issues
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bwr-2160/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bwr-2160/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-bdw-5557u:       [SKIP][109] ([fdo#109271]) -> [FAIL][110]
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-bdw-5557u/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-bdw-5557u/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-byt-n2820:       [SKIP][111] ([fdo#109271]) -> [FAIL][112]
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-n2820/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-hsw-4770:        [SKIP][113] ([fdo#109271]) -> [FAIL][114]
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-hsw-4770/igt@kms_addfb_basic@addfb25-y-tiled-small.html
    - fi-byt-j1900:       [SKIP][115] ([fdo#109271]) -> [FAIL][116]
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_7350/fi-byt-j1900/igt@kms_addfb_basic@addfb25-y-tiled-small.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/fi-byt-j1900/igt@kms_addfb_basic@addf

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_15274/index.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15 10:33     ` Oleksandr Andrushchenko
  0 siblings, 0 replies; 89+ messages in thread
From: Oleksandr Andrushchenko @ 2019-11-15 10:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel

On 11/15/19 11:21 AM, Daniel Vetter wrote:
> The current code is a pretty good wtf moment, since we drop the
> reference before we use it. It's not a big deal, because a) we only
> use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> already holds a full reference for us.
>
> Might as well take the real pointer ins't of complicated games that
> baffle.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> Cc: xen-devel@lists.xenproject.org
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> index ff506bc99414..4f34c5208180 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
>   	if (IS_ERR_OR_NULL(fb))
>   		return fb;
>   
> -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!gem_obj) {
> -		DRM_ERROR("Failed to lookup GEM object\n");
> -		ret = -ENOENT;
> -		goto fail;
> -	}
> -
> -	drm_gem_object_put_unlocked(gem_obj);
> +	gem_obj = fb->obj[0];
>   
>   	ret = xen_drm_front_fb_attach(drm_info->front_info,
>   				      xen_drm_front_dbuf_to_cookie(gem_obj),
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

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

* Re: [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15 10:33     ` Oleksandr Andrushchenko
  0 siblings, 0 replies; 89+ messages in thread
From: Oleksandr Andrushchenko @ 2019-11-15 10:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel

On 11/15/19 11:21 AM, Daniel Vetter wrote:
> The current code is a pretty good wtf moment, since we drop the
> reference before we use it. It's not a big deal, because a) we only
> use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> already holds a full reference for us.
>
> Might as well take the real pointer ins't of complicated games that
> baffle.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> Cc: xen-devel@lists.xenproject.org
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> index ff506bc99414..4f34c5208180 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
>   	if (IS_ERR_OR_NULL(fb))
>   		return fb;
>   
> -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!gem_obj) {
> -		DRM_ERROR("Failed to lookup GEM object\n");
> -		ret = -ENOENT;
> -		goto fail;
> -	}
> -
> -	drm_gem_object_put_unlocked(gem_obj);
> +	gem_obj = fb->obj[0];
>   
>   	ret = xen_drm_front_fb_attach(drm_info->front_info,
>   				      xen_drm_front_dbuf_to_cookie(gem_obj),
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15 10:33     ` Oleksandr Andrushchenko
  0 siblings, 0 replies; 89+ messages in thread
From: Oleksandr Andrushchenko @ 2019-11-15 10:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel

On 11/15/19 11:21 AM, Daniel Vetter wrote:
> The current code is a pretty good wtf moment, since we drop the
> reference before we use it. It's not a big deal, because a) we only
> use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> already holds a full reference for us.
>
> Might as well take the real pointer ins't of complicated games that
> baffle.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> Cc: xen-devel@lists.xenproject.org
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> index ff506bc99414..4f34c5208180 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
>   	if (IS_ERR_OR_NULL(fb))
>   		return fb;
>   
> -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!gem_obj) {
> -		DRM_ERROR("Failed to lookup GEM object\n");
> -		ret = -ENOENT;
> -		goto fail;
> -	}
> -
> -	drm_gem_object_put_unlocked(gem_obj);
> +	gem_obj = fb->obj[0];
>   
>   	ret = xen_drm_front_fb_attach(drm_info->front_info,
>   				      xen_drm_front_dbuf_to_cookie(gem_obj),
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Xen-devel] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-15 10:33     ` Oleksandr Andrushchenko
  0 siblings, 0 replies; 89+ messages in thread
From: Oleksandr Andrushchenko @ 2019-11-15 10:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel

On 11/15/19 11:21 AM, Daniel Vetter wrote:
> The current code is a pretty good wtf moment, since we drop the
> reference before we use it. It's not a big deal, because a) we only
> use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> already holds a full reference for us.
>
> Might as well take the real pointer ins't of complicated games that
> baffle.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> Cc: xen-devel@lists.xenproject.org
Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> ---
>   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
>   1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> index ff506bc99414..4f34c5208180 100644
> --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
>   	if (IS_ERR_OR_NULL(fb))
>   		return fb;
>   
> -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!gem_obj) {
> -		DRM_ERROR("Failed to lookup GEM object\n");
> -		ret = -ENOENT;
> -		goto fail;
> -	}
> -
> -	drm_gem_object_put_unlocked(gem_obj);
> +	gem_obj = fb->obj[0];
>   
>   	ret = xen_drm_front_fb_attach(drm_info->front_info,
>   				      xen_drm_front_dbuf_to_cookie(gem_obj),
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

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

* Re: [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 10:49     ` Pekka Paalanen
  0 siblings, 0 replies; 89+ messages in thread
From: Pekka Paalanen @ 2019-11-15 10:49 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development


[-- Attachment #1.1: Type: text/plain, Size: 2338 bytes --]

On Fri, 15 Nov 2019 10:21:13 +0100
Daniel Vetter <daniel.vetter@ffwll.ch> wrote:

> - Our limit is uint32_t, make that explicit.
> 
> - Untangle the one overflow check, I think (but not sure) that with
>   all three together you could overflow the uint64_t and it'd look
>   cool again. Hence two steps. Also go with the more common (and imo
>   safer approach) of reducing the range we accept, instead of trying
>   to compute the overflow in high enough precision.
> 
> - The above would blow up if we get a 0 pitches, so check for that
>   too, but only if block_size is a thing.
> 
> Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> index 57564318ceea..3141c6ed6dd2 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
>  			return -EINVAL;
>  		}
>  
> -		if (min_pitch > UINT_MAX)
> +		if (min_pitch > U8_MAX)

This looks odd, but I don't know what min_pitch is or why it should be
limited to 255(?). What's with the U8, should it not be U32?

>  			return -ERANGE;
>  
> -		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> -			return -ERANGE;
> +		if (block_size) {
> +			if (r->pitches[i] < min_pitch) {
> +				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> +				return -EINVAL;
> +			}
>  
> -		if (block_size && r->pitches[i] < min_pitch) {
> -			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> -			return -EINVAL;
> +			if (height > U8_MAX / r->pitches[i])
> +				return -ERANGE;
> +
> +			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)

Aside from the U8 again, this looks strange too. You want to check that
offset + height * pitch does not exceed MAX?

Wouldn't that be height > (MAX - offset) / pitch for bad?

If offset cannot be negative, this could also replace height > U8_MAX /
r->pitches[i].

> +				return -ERANGE;
>  		}
>  
>  		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {

Thanks,
pq

[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 10:49     ` Pekka Paalanen
  0 siblings, 0 replies; 89+ messages in thread
From: Pekka Paalanen @ 2019-11-15 10:49 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development


[-- Attachment #1.1: Type: text/plain, Size: 2338 bytes --]

On Fri, 15 Nov 2019 10:21:13 +0100
Daniel Vetter <daniel.vetter@ffwll.ch> wrote:

> - Our limit is uint32_t, make that explicit.
> 
> - Untangle the one overflow check, I think (but not sure) that with
>   all three together you could overflow the uint64_t and it'd look
>   cool again. Hence two steps. Also go with the more common (and imo
>   safer approach) of reducing the range we accept, instead of trying
>   to compute the overflow in high enough precision.
> 
> - The above would blow up if we get a 0 pitches, so check for that
>   too, but only if block_size is a thing.
> 
> Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> index 57564318ceea..3141c6ed6dd2 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
>  			return -EINVAL;
>  		}
>  
> -		if (min_pitch > UINT_MAX)
> +		if (min_pitch > U8_MAX)

This looks odd, but I don't know what min_pitch is or why it should be
limited to 255(?). What's with the U8, should it not be U32?

>  			return -ERANGE;
>  
> -		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> -			return -ERANGE;
> +		if (block_size) {
> +			if (r->pitches[i] < min_pitch) {
> +				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> +				return -EINVAL;
> +			}
>  
> -		if (block_size && r->pitches[i] < min_pitch) {
> -			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> -			return -EINVAL;
> +			if (height > U8_MAX / r->pitches[i])
> +				return -ERANGE;
> +
> +			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)

Aside from the U8 again, this looks strange too. You want to check that
offset + height * pitch does not exceed MAX?

Wouldn't that be height > (MAX - offset) / pitch for bad?

If offset cannot be negative, this could also replace height > U8_MAX /
r->pitches[i].

> +				return -ERANGE;
>  		}
>  
>  		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {

Thanks,
pq

[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 12:44     ` Ville Syrjälä
  0 siblings, 0 replies; 89+ messages in thread
From: Ville Syrjälä @ 2019-11-15 12:44 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	Pekka Paalanen

On Fri, Nov 15, 2019 at 10:21:13AM +0100, Daniel Vetter wrote:
> - Our limit is uint32_t, make that explicit.
> 
> - Untangle the one overflow check, I think (but not sure) that with
>   all three together you could overflow the uint64_t and it'd look
>   cool again.

It can't overflow. All theree inputs are u32 so the max value
you can get is 0xffffffff00000000.

> Hence two steps. Also go with the more common (and imo
>   safer approach) 

Also results in multiple divisions which is needlessly expensive.
The original is just mul+add.

> of reducing the range we accept, instead of trying
>   to compute the overflow in high enough precision.
> 
> - The above would blow up if we get a 0 pitches, so check for that
>   too, but only if block_size is a thing.
> 
> Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> index 57564318ceea..3141c6ed6dd2 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
>  			return -EINVAL;
>  		}
>  
> -		if (min_pitch > UINT_MAX)
> +		if (min_pitch > U8_MAX)

U8?

>  			return -ERANGE;
>  
> -		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> -			return -ERANGE;
> +		if (block_size) {
> +			if (r->pitches[i] < min_pitch) {
> +				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> +				return -EINVAL;
> +			}
>  
> -		if (block_size && r->pitches[i] < min_pitch) {
> -			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> -			return -EINVAL;
> +			if (height > U8_MAX / r->pitches[i])
> +				return -ERANGE;
> +
> +			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
> +				return -ERANGE;
>  		}
>  
>  		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
> -- 
> 2.24.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 12:44     ` Ville Syrjälä
  0 siblings, 0 replies; 89+ messages in thread
From: Ville Syrjälä @ 2019-11-15 12:44 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	Pekka Paalanen

On Fri, Nov 15, 2019 at 10:21:13AM +0100, Daniel Vetter wrote:
> - Our limit is uint32_t, make that explicit.
> 
> - Untangle the one overflow check, I think (but not sure) that with
>   all three together you could overflow the uint64_t and it'd look
>   cool again.

It can't overflow. All theree inputs are u32 so the max value
you can get is 0xffffffff00000000.

> Hence two steps. Also go with the more common (and imo
>   safer approach) 

Also results in multiple divisions which is needlessly expensive.
The original is just mul+add.

> of reducing the range we accept, instead of trying
>   to compute the overflow in high enough precision.
> 
> - The above would blow up if we get a 0 pitches, so check for that
>   too, but only if block_size is a thing.
> 
> Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
>  1 file changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> index 57564318ceea..3141c6ed6dd2 100644
> --- a/drivers/gpu/drm/drm_framebuffer.c
> +++ b/drivers/gpu/drm/drm_framebuffer.c
> @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
>  			return -EINVAL;
>  		}
>  
> -		if (min_pitch > UINT_MAX)
> +		if (min_pitch > U8_MAX)

U8?

>  			return -ERANGE;
>  
> -		if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> -			return -ERANGE;
> +		if (block_size) {
> +			if (r->pitches[i] < min_pitch) {
> +				DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> +				return -EINVAL;
> +			}
>  
> -		if (block_size && r->pitches[i] < min_pitch) {
> -			DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> -			return -EINVAL;
> +			if (height > U8_MAX / r->pitches[i])
> +				return -ERANGE;
> +
> +			if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
> +				return -ERANGE;
>  		}
>  
>  		if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
> -- 
> 2.24.0
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15 13:21     ` Jyri Sarha
  0 siblings, 0 replies; 89+ messages in thread
From: Jyri Sarha @ 2019-11-15 13:21 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen

On 15/11/2019 11:21, Daniel Vetter wrote:
> Doesn't do anything.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jyri Sarha <jsarha@ti.com>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>

Acked-by: Jyri Sarha <jsarha@ti.com>

> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 2a9e67597375..a160880bea0a 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
>  
>  static struct of_device_id tilcdc_of_match[];
>  
> -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  static int tilcdc_atomic_check(struct drm_device *dev,
>  			       struct drm_atomic_state *state)
>  {
> @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = tilcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = tilcdc_atomic_check,
>  	.atomic_commit = tilcdc_commit,
>  };
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15 13:21     ` Jyri Sarha
  0 siblings, 0 replies; 89+ messages in thread
From: Jyri Sarha @ 2019-11-15 13:21 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen

On 15/11/2019 11:21, Daniel Vetter wrote:
> Doesn't do anything.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jyri Sarha <jsarha@ti.com>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>

Acked-by: Jyri Sarha <jsarha@ti.com>

> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 2a9e67597375..a160880bea0a 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
>  
>  static struct of_device_id tilcdc_of_match[];
>  
> -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  static int tilcdc_atomic_check(struct drm_device *dev,
>  			       struct drm_atomic_state *state)
>  {
> @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = tilcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = tilcdc_atomic_check,
>  	.atomic_commit = tilcdc_commit,
>  };
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-15 13:21     ` Jyri Sarha
  0 siblings, 0 replies; 89+ messages in thread
From: Jyri Sarha @ 2019-11-15 13:21 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen

On 15/11/2019 11:21, Daniel Vetter wrote:
> Doesn't do anything.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jyri Sarha <jsarha@ti.com>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>

Acked-by: Jyri Sarha <jsarha@ti.com>

> ---
>  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> index 2a9e67597375..a160880bea0a 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
>  
>  static struct of_device_id tilcdc_of_match[];
>  
> -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> -}
> -
>  static int tilcdc_atomic_check(struct drm_device *dev,
>  			       struct drm_atomic_state *state)
>  {
> @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
>  }
>  
>  static const struct drm_mode_config_funcs mode_config_funcs = {
> -	.fb_create = tilcdc_fb_create,
> +	.fb_create = drm_gem_fb_create,
>  	.atomic_check = tilcdc_atomic_check,
>  	.atomic_commit = tilcdc_commit,
>  };
> 


-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 15:26       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15 15:26 UTC (permalink / raw)
  To: Ville Syrjälä
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	Pekka Paalanen

On Fri, Nov 15, 2019 at 1:44 PM Ville Syrjälä
<ville.syrjala@linux.intel.com> wrote:
>
> On Fri, Nov 15, 2019 at 10:21:13AM +0100, Daniel Vetter wrote:
> > - Our limit is uint32_t, make that explicit.
> >
> > - Untangle the one overflow check, I think (but not sure) that with
> >   all three together you could overflow the uint64_t and it'd look
> >   cool again.
>
> It can't overflow. All theree inputs are u32 so the max value
> you can get is 0xffffffff00000000.

Hm right, I just checked, I guess I should have beforehand.

> > Hence two steps. Also go with the more common (and imo
> >   safer approach)
>
> Also results in multiple divisions which is needlessly expensive.
> The original is just mul+add.
>
> > of reducing the range we accept, instead of trying
> >   to compute the overflow in high enough precision.
> >
> > - The above would blow up if we get a 0 pitches, so check for that
> >   too, but only if block_size is a thing.
> >
> > Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > ---
> >  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
> >  1 file changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> > index 57564318ceea..3141c6ed6dd2 100644
> > --- a/drivers/gpu/drm/drm_framebuffer.c
> > +++ b/drivers/gpu/drm/drm_framebuffer.c
> > @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
> >                       return -EINVAL;
> >               }
> >
> > -             if (min_pitch > UINT_MAX)
> > +             if (min_pitch > U8_MAX)
>
> U8?

Oh dear, some patch editing gone really wrong. I think I'll drop this
one here, not doing any good :-)
-Daniel

>
> >                       return -ERANGE;
> >
> > -             if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> > -                     return -ERANGE;
> > +             if (block_size) {
> > +                     if (r->pitches[i] < min_pitch) {
> > +                             DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> > +                             return -EINVAL;
> > +                     }
> >
> > -             if (block_size && r->pitches[i] < min_pitch) {
> > -                     DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> > -                     return -EINVAL;
> > +                     if (height > U8_MAX / r->pitches[i])
> > +                             return -ERANGE;
> > +
> > +                     if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
> > +                             return -ERANGE;
> >               }
> >
> >               if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
> > --
> > 2.24.0
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Ville Syrjälä
> Intel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 1/8] drm/fb: More paranoia in addfb checks
@ 2019-11-15 15:26       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-15 15:26 UTC (permalink / raw)
  To: Ville Syrjälä
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	Pekka Paalanen

On Fri, Nov 15, 2019 at 1:44 PM Ville Syrjälä
<ville.syrjala@linux.intel.com> wrote:
>
> On Fri, Nov 15, 2019 at 10:21:13AM +0100, Daniel Vetter wrote:
> > - Our limit is uint32_t, make that explicit.
> >
> > - Untangle the one overflow check, I think (but not sure) that with
> >   all three together you could overflow the uint64_t and it'd look
> >   cool again.
>
> It can't overflow. All theree inputs are u32 so the max value
> you can get is 0xffffffff00000000.

Hm right, I just checked, I guess I should have beforehand.

> > Hence two steps. Also go with the more common (and imo
> >   safer approach)
>
> Also results in multiple divisions which is needlessly expensive.
> The original is just mul+add.
>
> > of reducing the range we accept, instead of trying
> >   to compute the overflow in high enough precision.
> >
> > - The above would blow up if we get a 0 pitches, so check for that
> >   too, but only if block_size is a thing.
> >
> > Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > ---
> >  drivers/gpu/drm/drm_framebuffer.c | 17 +++++++++++------
> >  1 file changed, 11 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
> > index 57564318ceea..3141c6ed6dd2 100644
> > --- a/drivers/gpu/drm/drm_framebuffer.c
> > +++ b/drivers/gpu/drm/drm_framebuffer.c
> > @@ -214,15 +214,20 @@ static int framebuffer_check(struct drm_device *dev,
> >                       return -EINVAL;
> >               }
> >
> > -             if (min_pitch > UINT_MAX)
> > +             if (min_pitch > U8_MAX)
>
> U8?

Oh dear, some patch editing gone really wrong. I think I'll drop this
one here, not doing any good :-)
-Daniel

>
> >                       return -ERANGE;
> >
> > -             if ((uint64_t) height * r->pitches[i] + r->offsets[i] > UINT_MAX)
> > -                     return -ERANGE;
> > +             if (block_size) {
> > +                     if (r->pitches[i] < min_pitch) {
> > +                             DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> > +                             return -EINVAL;
> > +                     }
> >
> > -             if (block_size && r->pitches[i] < min_pitch) {
> > -                     DRM_DEBUG_KMS("bad pitch %u for plane %d\n", r->pitches[i], i);
> > -                     return -EINVAL;
> > +                     if (height > U8_MAX / r->pitches[i])
> > +                             return -ERANGE;
> > +
> > +                     if (r->offsets[i] > U8_MAX / r->pitches[i] - height)
> > +                             return -ERANGE;
> >               }
> >
> >               if (r->modifier[i] && !(r->flags & DRM_MODE_FB_MODIFIERS)) {
> > --
> > 2.24.0
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
> --
> Ville Syrjälä
> Intel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
  2019-11-15  9:33     ` Boris Brezillon
  (?)
@ 2019-11-19 21:22       ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:22 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, DRI Development, Ludovic Desroches,
	Daniel Vetter, Sam Ravnborg, linux-arm-kernel

On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> On Fri, 15 Nov 2019 10:21:14 +0100
> Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> 
> > Spotted while looking through them all.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sam Ravnborg <sam@ravnborg.org>
> > Cc: Boris Brezillon <bbrezillon@kernel.org>
> 
> Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

Merged, thanks for taking a look.
-Daniel

> 
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > ---
> >  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > index 92640298ad41..8dc917a1270b 100644
> > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
> >  	return IRQ_HANDLED;
> >  }
> >  
> > -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  struct atmel_hlcdc_dc_commit {
> >  	struct work_struct work;
> >  	struct drm_device *dev;
> > @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = atmel_hlcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> >  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
> >  };
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-19 21:22       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:22 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, DRI Development,
	Ludovic Desroches, Daniel Vetter, Sam Ravnborg, linux-arm-kernel

On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> On Fri, 15 Nov 2019 10:21:14 +0100
> Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> 
> > Spotted while looking through them all.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sam Ravnborg <sam@ravnborg.org>
> > Cc: Boris Brezillon <bbrezillon@kernel.org>
> 
> Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

Merged, thanks for taking a look.
-Daniel

> 
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > ---
> >  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > index 92640298ad41..8dc917a1270b 100644
> > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
> >  	return IRQ_HANDLED;
> >  }
> >  
> > -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  struct atmel_hlcdc_dc_commit {
> >  	struct work_struct work;
> >  	struct drm_device *dev;
> > @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = atmel_hlcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> >  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
> >  };
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-19 21:22       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:22 UTC (permalink / raw)
  To: Boris Brezillon
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, DRI Development,
	Ludovic Desroches, Daniel Vetter, Sam Ravnborg, linux-arm-kernel

On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> On Fri, 15 Nov 2019 10:21:14 +0100
> Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> 
> > Spotted while looking through them all.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sam Ravnborg <sam@ravnborg.org>
> > Cc: Boris Brezillon <bbrezillon@kernel.org>
> 
> Acked-by: Boris Brezillon <boris.brezillon@collabora.com>

Merged, thanks for taking a look.
-Daniel

> 
> > Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
> > Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > ---
> >  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > index 92640298ad41..8dc917a1270b 100644
> > --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c
> > @@ -557,12 +557,6 @@ static irqreturn_t atmel_hlcdc_dc_irq_handler(int irq, void *data)
> >  	return IRQ_HANDLED;
> >  }
> >  
> > -static struct drm_framebuffer *atmel_hlcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  struct atmel_hlcdc_dc_commit {
> >  	struct work_struct work;
> >  	struct drm_device *dev;
> > @@ -657,7 +651,7 @@ static int atmel_hlcdc_dc_atomic_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = atmel_hlcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> >  	.atomic_commit = atmel_hlcdc_dc_atomic_commit,
> >  };
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Jyri Sarha
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 03:21:20PM +0200, Jyri Sarha wrote:
> On 15/11/2019 11:21, Daniel Vetter wrote:
> > Doesn't do anything.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Jyri Sarha <jsarha@ti.com>
> > Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> 
> Acked-by: Jyri Sarha <jsarha@ti.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> 
> > ---
> >  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > index 2a9e67597375..a160880bea0a 100644
> > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
> >  
> >  static struct of_device_id tilcdc_of_match[];
> >  
> > -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  static int tilcdc_atomic_check(struct drm_device *dev,
> >  			       struct drm_atomic_state *state)
> >  {
> > @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = tilcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = tilcdc_atomic_check,
> >  	.atomic_commit = tilcdc_commit,
> >  };
> > 
> 
> 
> -- 
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Jyri Sarha
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 03:21:20PM +0200, Jyri Sarha wrote:
> On 15/11/2019 11:21, Daniel Vetter wrote:
> > Doesn't do anything.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Jyri Sarha <jsarha@ti.com>
> > Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> 
> Acked-by: Jyri Sarha <jsarha@ti.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> 
> > ---
> >  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > index 2a9e67597375..a160880bea0a 100644
> > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
> >  
> >  static struct of_device_id tilcdc_of_match[];
> >  
> > -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  static int tilcdc_atomic_check(struct drm_device *dev,
> >  			       struct drm_atomic_state *state)
> >  {
> > @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = tilcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = tilcdc_atomic_check,
> >  	.atomic_commit = tilcdc_commit,
> >  };
> > 
> 
> 
> -- 
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Jyri Sarha
  Cc: Daniel Vetter, Intel Graphics Development, Tomi Valkeinen,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 03:21:20PM +0200, Jyri Sarha wrote:
> On 15/11/2019 11:21, Daniel Vetter wrote:
> > Doesn't do anything.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Jyri Sarha <jsarha@ti.com>
> > Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> 
> Acked-by: Jyri Sarha <jsarha@ti.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> 
> > ---
> >  drivers/gpu/drm/tilcdc/tilcdc_drv.c | 8 +-------
> >  1 file changed, 1 insertion(+), 7 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > index 2a9e67597375..a160880bea0a 100644
> > --- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > +++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
> > @@ -64,12 +64,6 @@ void tilcdc_module_cleanup(struct tilcdc_module *mod)
> >  
> >  static struct of_device_id tilcdc_of_match[];
> >  
> > -static struct drm_framebuffer *tilcdc_fb_create(struct drm_device *dev,
> > -		struct drm_file *file_priv, const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -	return drm_gem_fb_create(dev, file_priv, mode_cmd);
> > -}
> > -
> >  static int tilcdc_atomic_check(struct drm_device *dev,
> >  			       struct drm_atomic_state *state)
> >  {
> > @@ -140,7 +134,7 @@ static int tilcdc_commit(struct drm_device *dev,
> >  }
> >  
> >  static const struct drm_mode_config_funcs mode_config_funcs = {
> > -	.fb_create = tilcdc_fb_create,
> > +	.fb_create = drm_gem_fb_create,
> >  	.atomic_check = tilcdc_atomic_check,
> >  	.atomic_commit = tilcdc_commit,
> >  };
> > 
> 
> 
> -- 
> Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
> Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Oleksandr Andrushchenko
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 10:33:24AM +0000, Oleksandr Andrushchenko wrote:
> On 11/15/19 11:21 AM, Daniel Vetter wrote:
> > The current code is a pretty good wtf moment, since we drop the
> > reference before we use it. It's not a big deal, because a) we only
> > use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> > already holds a full reference for us.
> >
> > Might as well take the real pointer ins't of complicated games that
> > baffle.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> > Cc: xen-devel@lists.xenproject.org
> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> > ---
> >   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
> >   1 file changed, 1 insertion(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > index ff506bc99414..4f34c5208180 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
> >   	if (IS_ERR_OR_NULL(fb))
> >   		return fb;
> >   
> > -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> > -	if (!gem_obj) {
> > -		DRM_ERROR("Failed to lookup GEM object\n");
> > -		ret = -ENOENT;
> > -		goto fail;
> > -	}
> > -
> > -	drm_gem_object_put_unlocked(gem_obj);
> > +	gem_obj = fb->obj[0];
> >   
> >   	ret = xen_drm_front_fb_attach(drm_info->front_info,
> >   				      xen_drm_front_dbuf_to_cookie(gem_obj),

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Oleksandr Andrushchenko
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 10:33:24AM +0000, Oleksandr Andrushchenko wrote:
> On 11/15/19 11:21 AM, Daniel Vetter wrote:
> > The current code is a pretty good wtf moment, since we drop the
> > reference before we use it. It's not a big deal, because a) we only
> > use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> > already holds a full reference for us.
> >
> > Might as well take the real pointer ins't of complicated games that
> > baffle.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> > Cc: xen-devel@lists.xenproject.org
> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> > ---
> >   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
> >   1 file changed, 1 insertion(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > index ff506bc99414..4f34c5208180 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
> >   	if (IS_ERR_OR_NULL(fb))
> >   		return fb;
> >   
> > -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> > -	if (!gem_obj) {
> > -		DRM_ERROR("Failed to lookup GEM object\n");
> > -		ret = -ENOENT;
> > -		goto fail;
> > -	}
> > -
> > -	drm_gem_object_put_unlocked(gem_obj);
> > +	gem_obj = fb->obj[0];
> >   
> >   	ret = xen_drm_front_fb_attach(drm_info->front_info,
> >   				      xen_drm_front_dbuf_to_cookie(gem_obj),

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [Xen-devel] [PATCH 6/8] drm/xen: Simplify fb_create
@ 2019-11-19 21:25       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-19 21:25 UTC (permalink / raw)
  To: Oleksandr Andrushchenko
  Cc: Daniel Vetter, Intel Graphics Development, xen-devel,
	DRI Development, Daniel Vetter

On Fri, Nov 15, 2019 at 10:33:24AM +0000, Oleksandr Andrushchenko wrote:
> On 11/15/19 11:21 AM, Daniel Vetter wrote:
> > The current code is a pretty good wtf moment, since we drop the
> > reference before we use it. It's not a big deal, because a) we only
> > use the pointer, so doesn't blow up and the real reason b) fb->obj[0]
> > already holds a full reference for us.
> >
> > Might as well take the real pointer ins't of complicated games that
> > baffle.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
> > Cc: xen-devel@lists.xenproject.org
> Reviewed-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>

Thanks for taking a look, pushed to drm-misc-next.
-Daniel

> > ---
> >   drivers/gpu/drm/xen/xen_drm_front_kms.c | 9 +--------
> >   1 file changed, 1 insertion(+), 8 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xen/xen_drm_front_kms.c b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > index ff506bc99414..4f34c5208180 100644
> > --- a/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > +++ b/drivers/gpu/drm/xen/xen_drm_front_kms.c
> > @@ -63,14 +63,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
> >   	if (IS_ERR_OR_NULL(fb))
> >   		return fb;
> >   
> > -	gem_obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> > -	if (!gem_obj) {
> > -		DRM_ERROR("Failed to lookup GEM object\n");
> > -		ret = -ENOENT;
> > -		goto fail;
> > -	}
> > -
> > -	drm_gem_object_put_unlocked(gem_obj);
> > +	gem_obj = fb->obj[0];
> >   
> >   	ret = xen_drm_front_fb_attach(drm_info->front_info,
> >   				      xen_drm_front_dbuf_to_cookie(gem_obj),

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

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

* Re: [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups
@ 2019-11-20 10:46     ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-20 10:46 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

On Fri, Nov 15, 2019 at 10:21:20AM +0100, Daniel Vetter wrote:
> We're doing a great job for really simple drivers right now, but still
> a lot of boilerplate for the bigger ones.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

Ping for some review/acks on this and the earlier driver patches (not
patch 1, that one is bad).

Thanks, Daniel

> ---
>  Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
> index 3ec509381fc5..2d85f37284a1 100644
> --- a/Documentation/gpu/todo.rst
> +++ b/Documentation/gpu/todo.rst
> @@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert
>  
>  Level: Intermediate
>  
> +drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
> +-----------------------------------------------------------------
> +
> +A lot more drivers could be switched over to the drm_gem_framebuffer helpers.
> +Various hold-ups:
> +
> +- Need to switch over to the generic dirty tracking code using
> +  drm_atomic_helper_dirtyfb first (e.g. qxl).
> +
> +- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb
> +  setup code can't be deleted.
> +
> +- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For
> +  atomic drivers we could check for valid formats by calling
> +  drm_plane_check_pixel_format() against all planes, and pass if any plane
> +  supports the format. For non-atomic that's not possible since like the format
> +  list for the primary plane is fake and we'd therefor reject valid formats.
> +
> +- Many drivers subclass drm_framebuffer, we'd need a embedding compatible
> +  version of the varios drm_gem_fb_create functions. Maybe called
> +  drm_gem_fb_create/_with_dirty/_with_funcs as needed.
> +
> +Contact: Daniel Vetter
> +
> +Level: Intermediate
> +
>  Clean up mmap forwarding
>  ------------------------
>  
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups
@ 2019-11-20 10:46     ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-20 10:46 UTC (permalink / raw)
  To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter

On Fri, Nov 15, 2019 at 10:21:20AM +0100, Daniel Vetter wrote:
> We're doing a great job for really simple drivers right now, but still
> a lot of boilerplate for the bigger ones.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

Ping for some review/acks on this and the earlier driver patches (not
patch 1, that one is bad).

Thanks, Daniel

> ---
>  Documentation/gpu/todo.rst | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
> index 3ec509381fc5..2d85f37284a1 100644
> --- a/Documentation/gpu/todo.rst
> +++ b/Documentation/gpu/todo.rst
> @@ -182,6 +182,32 @@ Contact: Maintainer of the driver you plan to convert
>  
>  Level: Intermediate
>  
> +drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
> +-----------------------------------------------------------------
> +
> +A lot more drivers could be switched over to the drm_gem_framebuffer helpers.
> +Various hold-ups:
> +
> +- Need to switch over to the generic dirty tracking code using
> +  drm_atomic_helper_dirtyfb first (e.g. qxl).
> +
> +- Need to switch to drm_fbdev_generic_setup(), otherwise a lot of the custom fb
> +  setup code can't be deleted.
> +
> +- Many drivers wrap drm_gem_fb_create() only to check for valid formats. For
> +  atomic drivers we could check for valid formats by calling
> +  drm_plane_check_pixel_format() against all planes, and pass if any plane
> +  supports the format. For non-atomic that's not possible since like the format
> +  list for the primary plane is fake and we'd therefor reject valid formats.
> +
> +- Many drivers subclass drm_framebuffer, we'd need a embedding compatible
> +  version of the varios drm_gem_fb_create functions. Maybe called
> +  drm_gem_fb_create/_with_dirty/_with_funcs as needed.
> +
> +Contact: Daniel Vetter
> +
> +Level: Intermediate
> +
>  Clean up mmap forwarding
>  ------------------------
>  
> -- 
> 2.24.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
  2019-11-15  9:21   ` Daniel Vetter
  (?)
  (?)
@ 2019-11-22  7:42     ` CK Hu
  -1 siblings, 0 replies; 89+ messages in thread
From: CK Hu @ 2019-11-22  7:42 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, DRI Development, linux-mediatek,
	Philipp Zabel, Matthias Brugger, linux-arm-kernel

Hi, Daniel:

On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> Aside: There's a few other fb_create implementations which
> simply check for valid buffer format (or an approximation thereof),
> and then call drm_gem_fb_create. For atomic drivers at least we could
> walk all planes and make sure the format/modifier combo is valid,
> and remove even more code.
> 
> For non-atomic drivers that's not possible, since the format list for
> the primary buffer might be garbage (and most likely it is).
> 
> Also delete mtk_drm_fb.[hc] since it would now only contain one
> function.

Acked-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-mediatek@lists.infradead.org
> ---
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
>  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
>  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
>  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
>  4 files changed, 15 insertions(+), 107 deletions(-)
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 84d14213d992..2b1c122066ea 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -16,8 +16,10 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_fb_helper.h>
> +#include <drm/drm_fourcc.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_cma_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_of.h>
>  #include <drm/drm_probe_helper.h>
>  #include <drm/drm_vblank.h>
> @@ -27,7 +29,6 @@
>  #include "mtk_drm_ddp.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  
>  #define DRIVER_NAME "mediatek"
> @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
>  	return 0;
>  }
>  
> +static struct drm_framebuffer *
> +mtk_drm_mode_fb_create(struct drm_device *dev,
> +		       struct drm_file *file,
> +		       const struct drm_mode_fb_cmd2 *cmd)
> +{
> +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> +
> +	if (info->num_planes != 1)
> +		return ERR_PTR(-EINVAL);
> +
> +	return drm_gem_fb_create(dev, file, cmd);
> +}
> +
>  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
>  	.fb_create = mtk_drm_mode_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> deleted file mode 100644
> index 3f230a28a2dc..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#include <linux/dma-buf.h>
> -#include <linux/dma-resv.h>
> -
> -#include <drm/drm_modeset_helper.h>
> -#include <drm/drm_fb_helper.h>
> -#include <drm/drm_fourcc.h>
> -#include <drm/drm_gem.h>
> -#include <drm/drm_gem_framebuffer_helper.h>
> -
> -#include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
> -#include "mtk_drm_gem.h"
> -
> -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> -	.create_handle = drm_gem_fb_create_handle,
> -	.destroy = drm_gem_fb_destroy,
> -};
> -
> -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> -					const struct drm_mode_fb_cmd2 *mode,
> -					struct drm_gem_object *obj)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> -	struct drm_framebuffer *fb;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> -	if (!fb)
> -		return ERR_PTR(-ENOMEM);
> -
> -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> -
> -	fb->obj[0] = obj;
> -
> -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> -	if (ret) {
> -		DRM_ERROR("failed to initialize framebuffer\n");
> -		kfree(fb);
> -		return ERR_PTR(ret);
> -	}
> -
> -	return fb;
> -}
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *gem;
> -	unsigned int width = cmd->width;
> -	unsigned int height = cmd->height;
> -	unsigned int size, bpp;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> -	if (!gem)
> -		return ERR_PTR(-ENOENT);
> -
> -	bpp = info->cpp[0];
> -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> -	size += cmd->offsets[0];
> -
> -	if (gem->size < size) {
> -		ret = -EINVAL;
> -		goto unreference;
> -	}
> -
> -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto unreference;
> -	}
> -
> -	return fb;
> -
> -unreference:
> -	drm_gem_object_put_unlocked(gem);
> -	return ERR_PTR(ret);
> -}
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> deleted file mode 100644
> index eb64d26001c6..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#ifndef MTK_DRM_FB_H
> -#define MTK_DRM_FB_H
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd);
> -
> -#endif /* MTK_DRM_FB_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index 3b0cc91c7023..540ef2faa40a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -13,7 +13,6 @@
>  #include "mtk_drm_crtc.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  #include "mtk_drm_plane.h"
>  

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22  7:42     ` CK Hu
  0 siblings, 0 replies; 89+ messages in thread
From: CK Hu @ 2019-11-22  7:42 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, DRI Development, linux-mediatek,
	Philipp Zabel, Matthias Brugger, linux-arm-kernel

Hi, Daniel:

On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> Aside: There's a few other fb_create implementations which
> simply check for valid buffer format (or an approximation thereof),
> and then call drm_gem_fb_create. For atomic drivers at least we could
> walk all planes and make sure the format/modifier combo is valid,
> and remove even more code.
> 
> For non-atomic drivers that's not possible, since the format list for
> the primary buffer might be garbage (and most likely it is).
> 
> Also delete mtk_drm_fb.[hc] since it would now only contain one
> function.

Acked-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-mediatek@lists.infradead.org
> ---
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
>  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
>  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
>  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
>  4 files changed, 15 insertions(+), 107 deletions(-)
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 84d14213d992..2b1c122066ea 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -16,8 +16,10 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_fb_helper.h>
> +#include <drm/drm_fourcc.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_cma_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_of.h>
>  #include <drm/drm_probe_helper.h>
>  #include <drm/drm_vblank.h>
> @@ -27,7 +29,6 @@
>  #include "mtk_drm_ddp.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  
>  #define DRIVER_NAME "mediatek"
> @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
>  	return 0;
>  }
>  
> +static struct drm_framebuffer *
> +mtk_drm_mode_fb_create(struct drm_device *dev,
> +		       struct drm_file *file,
> +		       const struct drm_mode_fb_cmd2 *cmd)
> +{
> +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> +
> +	if (info->num_planes != 1)
> +		return ERR_PTR(-EINVAL);
> +
> +	return drm_gem_fb_create(dev, file, cmd);
> +}
> +
>  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
>  	.fb_create = mtk_drm_mode_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> deleted file mode 100644
> index 3f230a28a2dc..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#include <linux/dma-buf.h>
> -#include <linux/dma-resv.h>
> -
> -#include <drm/drm_modeset_helper.h>
> -#include <drm/drm_fb_helper.h>
> -#include <drm/drm_fourcc.h>
> -#include <drm/drm_gem.h>
> -#include <drm/drm_gem_framebuffer_helper.h>
> -
> -#include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
> -#include "mtk_drm_gem.h"
> -
> -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> -	.create_handle = drm_gem_fb_create_handle,
> -	.destroy = drm_gem_fb_destroy,
> -};
> -
> -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> -					const struct drm_mode_fb_cmd2 *mode,
> -					struct drm_gem_object *obj)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> -	struct drm_framebuffer *fb;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> -	if (!fb)
> -		return ERR_PTR(-ENOMEM);
> -
> -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> -
> -	fb->obj[0] = obj;
> -
> -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> -	if (ret) {
> -		DRM_ERROR("failed to initialize framebuffer\n");
> -		kfree(fb);
> -		return ERR_PTR(ret);
> -	}
> -
> -	return fb;
> -}
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *gem;
> -	unsigned int width = cmd->width;
> -	unsigned int height = cmd->height;
> -	unsigned int size, bpp;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> -	if (!gem)
> -		return ERR_PTR(-ENOENT);
> -
> -	bpp = info->cpp[0];
> -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> -	size += cmd->offsets[0];
> -
> -	if (gem->size < size) {
> -		ret = -EINVAL;
> -		goto unreference;
> -	}
> -
> -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto unreference;
> -	}
> -
> -	return fb;
> -
> -unreference:
> -	drm_gem_object_put_unlocked(gem);
> -	return ERR_PTR(ret);
> -}
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> deleted file mode 100644
> index eb64d26001c6..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#ifndef MTK_DRM_FB_H
> -#define MTK_DRM_FB_H
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd);
> -
> -#endif /* MTK_DRM_FB_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index 3b0cc91c7023..540ef2faa40a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -13,7 +13,6 @@
>  #include "mtk_drm_crtc.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  #include "mtk_drm_plane.h"
>  

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22  7:42     ` CK Hu
  0 siblings, 0 replies; 89+ messages in thread
From: CK Hu @ 2019-11-22  7:42 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, DRI Development, linux-mediatek,
	Matthias Brugger, linux-arm-kernel

Hi, Daniel:

On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> Aside: There's a few other fb_create implementations which
> simply check for valid buffer format (or an approximation thereof),
> and then call drm_gem_fb_create. For atomic drivers at least we could
> walk all planes and make sure the format/modifier combo is valid,
> and remove even more code.
> 
> For non-atomic drivers that's not possible, since the format list for
> the primary buffer might be garbage (and most likely it is).
> 
> Also delete mtk_drm_fb.[hc] since it would now only contain one
> function.

Acked-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-mediatek@lists.infradead.org
> ---
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
>  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
>  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
>  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
>  4 files changed, 15 insertions(+), 107 deletions(-)
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 84d14213d992..2b1c122066ea 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -16,8 +16,10 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_fb_helper.h>
> +#include <drm/drm_fourcc.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_cma_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_of.h>
>  #include <drm/drm_probe_helper.h>
>  #include <drm/drm_vblank.h>
> @@ -27,7 +29,6 @@
>  #include "mtk_drm_ddp.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  
>  #define DRIVER_NAME "mediatek"
> @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
>  	return 0;
>  }
>  
> +static struct drm_framebuffer *
> +mtk_drm_mode_fb_create(struct drm_device *dev,
> +		       struct drm_file *file,
> +		       const struct drm_mode_fb_cmd2 *cmd)
> +{
> +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> +
> +	if (info->num_planes != 1)
> +		return ERR_PTR(-EINVAL);
> +
> +	return drm_gem_fb_create(dev, file, cmd);
> +}
> +
>  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
>  	.fb_create = mtk_drm_mode_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> deleted file mode 100644
> index 3f230a28a2dc..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#include <linux/dma-buf.h>
> -#include <linux/dma-resv.h>
> -
> -#include <drm/drm_modeset_helper.h>
> -#include <drm/drm_fb_helper.h>
> -#include <drm/drm_fourcc.h>
> -#include <drm/drm_gem.h>
> -#include <drm/drm_gem_framebuffer_helper.h>
> -
> -#include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
> -#include "mtk_drm_gem.h"
> -
> -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> -	.create_handle = drm_gem_fb_create_handle,
> -	.destroy = drm_gem_fb_destroy,
> -};
> -
> -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> -					const struct drm_mode_fb_cmd2 *mode,
> -					struct drm_gem_object *obj)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> -	struct drm_framebuffer *fb;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> -	if (!fb)
> -		return ERR_PTR(-ENOMEM);
> -
> -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> -
> -	fb->obj[0] = obj;
> -
> -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> -	if (ret) {
> -		DRM_ERROR("failed to initialize framebuffer\n");
> -		kfree(fb);
> -		return ERR_PTR(ret);
> -	}
> -
> -	return fb;
> -}
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *gem;
> -	unsigned int width = cmd->width;
> -	unsigned int height = cmd->height;
> -	unsigned int size, bpp;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> -	if (!gem)
> -		return ERR_PTR(-ENOENT);
> -
> -	bpp = info->cpp[0];
> -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> -	size += cmd->offsets[0];
> -
> -	if (gem->size < size) {
> -		ret = -EINVAL;
> -		goto unreference;
> -	}
> -
> -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto unreference;
> -	}
> -
> -	return fb;
> -
> -unreference:
> -	drm_gem_object_put_unlocked(gem);
> -	return ERR_PTR(ret);
> -}
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> deleted file mode 100644
> index eb64d26001c6..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#ifndef MTK_DRM_FB_H
> -#define MTK_DRM_FB_H
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd);
> -
> -#endif /* MTK_DRM_FB_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index 3b0cc91c7023..540ef2faa40a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -13,7 +13,6 @@
>  #include "mtk_drm_crtc.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  #include "mtk_drm_plane.h"
>  

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22  7:42     ` CK Hu
  0 siblings, 0 replies; 89+ messages in thread
From: CK Hu @ 2019-11-22  7:42 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Intel Graphics Development, DRI Development, linux-mediatek,
	Philipp Zabel, Matthias Brugger, linux-arm-kernel

Hi, Daniel:

On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> Aside: There's a few other fb_create implementations which
> simply check for valid buffer format (or an approximation thereof),
> and then call drm_gem_fb_create. For atomic drivers at least we could
> walk all planes and make sure the format/modifier combo is valid,
> and remove even more code.
> 
> For non-atomic drivers that's not possible, since the format list for
> the primary buffer might be garbage (and most likely it is).
> 
> Also delete mtk_drm_fb.[hc] since it would now only contain one
> function.

Acked-by: CK Hu <ck.hu@mediatek.com>

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: CK Hu <ck.hu@mediatek.com>
> Cc: Philipp Zabel <p.zabel@pengutronix.de>
> Cc: Matthias Brugger <matthias.bgg@gmail.com>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-mediatek@lists.infradead.org
> ---
>  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
>  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
>  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
>  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
>  4 files changed, 15 insertions(+), 107 deletions(-)
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
>  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> index 84d14213d992..2b1c122066ea 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> @@ -16,8 +16,10 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_drv.h>
>  #include <drm/drm_fb_helper.h>
> +#include <drm/drm_fourcc.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_cma_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_of.h>
>  #include <drm/drm_probe_helper.h>
>  #include <drm/drm_vblank.h>
> @@ -27,7 +29,6 @@
>  #include "mtk_drm_ddp.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  
>  #define DRIVER_NAME "mediatek"
> @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
>  	return 0;
>  }
>  
> +static struct drm_framebuffer *
> +mtk_drm_mode_fb_create(struct drm_device *dev,
> +		       struct drm_file *file,
> +		       const struct drm_mode_fb_cmd2 *cmd)
> +{
> +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> +
> +	if (info->num_planes != 1)
> +		return ERR_PTR(-EINVAL);
> +
> +	return drm_gem_fb_create(dev, file, cmd);
> +}
> +
>  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
>  	.fb_create = mtk_drm_mode_fb_create,
>  	.atomic_check = drm_atomic_helper_check,
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> deleted file mode 100644
> index 3f230a28a2dc..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#include <linux/dma-buf.h>
> -#include <linux/dma-resv.h>
> -
> -#include <drm/drm_modeset_helper.h>
> -#include <drm/drm_fb_helper.h>
> -#include <drm/drm_fourcc.h>
> -#include <drm/drm_gem.h>
> -#include <drm/drm_gem_framebuffer_helper.h>
> -
> -#include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
> -#include "mtk_drm_gem.h"
> -
> -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> -	.create_handle = drm_gem_fb_create_handle,
> -	.destroy = drm_gem_fb_destroy,
> -};
> -
> -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> -					const struct drm_mode_fb_cmd2 *mode,
> -					struct drm_gem_object *obj)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> -	struct drm_framebuffer *fb;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> -	if (!fb)
> -		return ERR_PTR(-ENOMEM);
> -
> -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> -
> -	fb->obj[0] = obj;
> -
> -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> -	if (ret) {
> -		DRM_ERROR("failed to initialize framebuffer\n");
> -		kfree(fb);
> -		return ERR_PTR(ret);
> -	}
> -
> -	return fb;
> -}
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *gem;
> -	unsigned int width = cmd->width;
> -	unsigned int height = cmd->height;
> -	unsigned int size, bpp;
> -	int ret;
> -
> -	if (info->num_planes != 1)
> -		return ERR_PTR(-EINVAL);
> -
> -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> -	if (!gem)
> -		return ERR_PTR(-ENOENT);
> -
> -	bpp = info->cpp[0];
> -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> -	size += cmd->offsets[0];
> -
> -	if (gem->size < size) {
> -		ret = -EINVAL;
> -		goto unreference;
> -	}
> -
> -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto unreference;
> -	}
> -
> -	return fb;
> -
> -unreference:
> -	drm_gem_object_put_unlocked(gem);
> -	return ERR_PTR(ret);
> -}
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> deleted file mode 100644
> index eb64d26001c6..000000000000
> --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0-only */
> -/*
> - * Copyright (c) 2015 MediaTek Inc.
> - */
> -
> -#ifndef MTK_DRM_FB_H
> -#define MTK_DRM_FB_H
> -
> -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> -					       struct drm_file *file,
> -					       const struct drm_mode_fb_cmd2 *cmd);
> -
> -#endif /* MTK_DRM_FB_H */
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> index 3b0cc91c7023..540ef2faa40a 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> @@ -13,7 +13,6 @@
>  #include "mtk_drm_crtc.h"
>  #include "mtk_drm_ddp_comp.h"
>  #include "mtk_drm_drv.h"
> -#include "mtk_drm_fb.h"
>  #include "mtk_drm_gem.h"
>  #include "mtk_drm_plane.h"
>  

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  8:09     ` Thomas Zimmermann
  0 siblings, 0 replies; 89+ messages in thread
From: Thomas Zimmermann @ 2019-11-22  8:09 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development


[-- Attachment #1.1.1: Type: text/plain, Size: 7205 bytes --]

Hi

Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> Again we could delete a lot more if we'd switch over to the generic
> fbdev stuff.

Actually, I do have patches for this since forever. I didn't post them
yet as I couldn't test them. Maybe I should post them and see what
people say.

Best regards
Thomas

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
>  4 files changed, 19 insertions(+), 63 deletions(-)
> 
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 6527a97f68a3..2d0920ec4554 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
>  	s64 gpu_addr = 0;
>  	unsigned int line_l;
>  	struct hibmc_drm_private *priv = plane->dev->dev_private;
> -	struct hibmc_framebuffer *hibmc_fb;
>  	struct drm_gem_vram_object *gbo;
>  
>  	if (!state->fb)
>  		return;
>  
> -	hibmc_fb = to_hibmc_framebuffer(state->fb);
> -	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> +	gbo = drm_gem_vram_of_gem(fb->obj[0]);
>  
>  	gpu_addr = drm_gem_vram_offset(gbo);
>  	if (WARN_ON_ONCE(gpu_addr < 0))
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> index e58ecd7edcf8..ab5b4a4a2095 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> @@ -20,14 +20,9 @@
>  struct drm_device;
>  struct drm_gem_object;
>  
> -struct hibmc_framebuffer {
> -	struct drm_framebuffer fb;
> -	struct drm_gem_object *obj;
> -};
> -
>  struct hibmc_fbdev {
>  	struct drm_fb_helper helper; /* must be first */
> -	struct hibmc_framebuffer *fb;
> +	struct drm_framebuffer *fb;
>  	int size;
>  };
>  
> @@ -47,8 +42,6 @@ struct hibmc_drm_private {
>  	struct hibmc_fbdev *fbdev;
>  };
>  
> -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> -
>  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
>  			  unsigned int power_mode);
>  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
>  
>  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
>  		     struct drm_gem_object **obj);
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> index b4c1cea051e8..446aeedc9e29 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
>  
>  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
>  {
> -	struct hibmc_framebuffer *gfb = fbdev->fb;
>  	struct drm_fb_helper *fbh = &fbdev->helper;
>  
>  	drm_fb_helper_unregister_fbi(fbh);
>  
>  	drm_fb_helper_fini(fbh);
>  
> -	if (gfb)
> -		drm_framebuffer_put(&gfb->fb);
> +	if (fbdev->fb)
> +		drm_framebuffer_put(fbdev->fb);
>  }
>  
>  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> index 21b684eab5c9..386033b0d3a2 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> @@ -16,6 +16,7 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_vram_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_print.h>
>  
>  #include "hibmc_drm_drv.h"
> @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
>  	return 0;
>  }
>  
> -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> -{
> -	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> -
> -	drm_gem_object_put_unlocked(hibmc_fb->obj);
> -	drm_framebuffer_cleanup(fb);
> -	kfree(hibmc_fb);
> -}
> -
>  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> -	.destroy = hibmc_user_framebuffer_destroy,
> +	.destroy	= drm_gem_fb_destroy,
> +	.create_handle	= drm_gem_fb_create_handle,
>  };
>  
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj)
>  {
> -	struct hibmc_framebuffer *hibmc_fb;
> +	struct drm_framebuffer *fb;
>  	int ret;
>  
> -	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> -	if (!hibmc_fb) {
> -		DRM_ERROR("failed to allocate hibmc_fb\n");
> +	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> +	if (!fb) {
> +		DRM_ERROR("failed to allocate fb\n");
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> -	hibmc_fb->obj = obj;
> -	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> +	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> +	fb->obj[0] = obj;
> +	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
>  	if (ret) {
>  		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> -		kfree(hibmc_fb);
> +		kfree(fb);
>  		return ERR_PTR(ret);
>  	}
>  
> -	return hibmc_fb;
> -}
> -
> -static struct drm_framebuffer *
> -hibmc_user_framebuffer_create(struct drm_device *dev,
> -			      struct drm_file *filp,
> -			      const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_gem_object *obj;
> -	struct hibmc_framebuffer *hibmc_fb;
> -
> -	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> -			 mode_cmd->width, mode_cmd->height,
> -			 (mode_cmd->pixel_format) & 0xff,
> -			 (mode_cmd->pixel_format >> 8)  & 0xff,
> -			 (mode_cmd->pixel_format >> 16) & 0xff,
> -			 (mode_cmd->pixel_format >> 24) & 0xff);
> -
> -	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!obj)
> -		return ERR_PTR(-ENOENT);
> -
> -	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> -	if (IS_ERR(hibmc_fb)) {
> -		drm_gem_object_put_unlocked(obj);
> -		return ERR_PTR((long)hibmc_fb);
> -	}
> -	return &hibmc_fb->fb;
> +	return fb;
>  }
>  
>  const struct drm_mode_config_funcs hibmc_mode_funcs = {
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = drm_atomic_helper_commit,
> -	.fb_create = hibmc_user_framebuffer_create,
> +	.fb_create = drm_gem_fb_create,
>  };
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  8:09     ` Thomas Zimmermann
  0 siblings, 0 replies; 89+ messages in thread
From: Thomas Zimmermann @ 2019-11-22  8:09 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development


[-- Attachment #1.1.1: Type: text/plain, Size: 7205 bytes --]

Hi

Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> Again we could delete a lot more if we'd switch over to the generic
> fbdev stuff.

Actually, I do have patches for this since forever. I didn't post them
yet as I couldn't test them. Maybe I should post them and see what
people say.

Best regards
Thomas

> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
>  4 files changed, 19 insertions(+), 63 deletions(-)
> 
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 6527a97f68a3..2d0920ec4554 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
>  	s64 gpu_addr = 0;
>  	unsigned int line_l;
>  	struct hibmc_drm_private *priv = plane->dev->dev_private;
> -	struct hibmc_framebuffer *hibmc_fb;
>  	struct drm_gem_vram_object *gbo;
>  
>  	if (!state->fb)
>  		return;
>  
> -	hibmc_fb = to_hibmc_framebuffer(state->fb);
> -	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> +	gbo = drm_gem_vram_of_gem(fb->obj[0]);
>  
>  	gpu_addr = drm_gem_vram_offset(gbo);
>  	if (WARN_ON_ONCE(gpu_addr < 0))
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> index e58ecd7edcf8..ab5b4a4a2095 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> @@ -20,14 +20,9 @@
>  struct drm_device;
>  struct drm_gem_object;
>  
> -struct hibmc_framebuffer {
> -	struct drm_framebuffer fb;
> -	struct drm_gem_object *obj;
> -};
> -
>  struct hibmc_fbdev {
>  	struct drm_fb_helper helper; /* must be first */
> -	struct hibmc_framebuffer *fb;
> +	struct drm_framebuffer *fb;
>  	int size;
>  };
>  
> @@ -47,8 +42,6 @@ struct hibmc_drm_private {
>  	struct hibmc_fbdev *fbdev;
>  };
>  
> -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> -
>  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
>  			  unsigned int power_mode);
>  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
>  
>  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
>  		     struct drm_gem_object **obj);
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> index b4c1cea051e8..446aeedc9e29 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
>  
>  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
>  {
> -	struct hibmc_framebuffer *gfb = fbdev->fb;
>  	struct drm_fb_helper *fbh = &fbdev->helper;
>  
>  	drm_fb_helper_unregister_fbi(fbh);
>  
>  	drm_fb_helper_fini(fbh);
>  
> -	if (gfb)
> -		drm_framebuffer_put(&gfb->fb);
> +	if (fbdev->fb)
> +		drm_framebuffer_put(fbdev->fb);
>  }
>  
>  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> index 21b684eab5c9..386033b0d3a2 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> @@ -16,6 +16,7 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_vram_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_print.h>
>  
>  #include "hibmc_drm_drv.h"
> @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
>  	return 0;
>  }
>  
> -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> -{
> -	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> -
> -	drm_gem_object_put_unlocked(hibmc_fb->obj);
> -	drm_framebuffer_cleanup(fb);
> -	kfree(hibmc_fb);
> -}
> -
>  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> -	.destroy = hibmc_user_framebuffer_destroy,
> +	.destroy	= drm_gem_fb_destroy,
> +	.create_handle	= drm_gem_fb_create_handle,
>  };
>  
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj)
>  {
> -	struct hibmc_framebuffer *hibmc_fb;
> +	struct drm_framebuffer *fb;
>  	int ret;
>  
> -	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> -	if (!hibmc_fb) {
> -		DRM_ERROR("failed to allocate hibmc_fb\n");
> +	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> +	if (!fb) {
> +		DRM_ERROR("failed to allocate fb\n");
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> -	hibmc_fb->obj = obj;
> -	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> +	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> +	fb->obj[0] = obj;
> +	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
>  	if (ret) {
>  		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> -		kfree(hibmc_fb);
> +		kfree(fb);
>  		return ERR_PTR(ret);
>  	}
>  
> -	return hibmc_fb;
> -}
> -
> -static struct drm_framebuffer *
> -hibmc_user_framebuffer_create(struct drm_device *dev,
> -			      struct drm_file *filp,
> -			      const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_gem_object *obj;
> -	struct hibmc_framebuffer *hibmc_fb;
> -
> -	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> -			 mode_cmd->width, mode_cmd->height,
> -			 (mode_cmd->pixel_format) & 0xff,
> -			 (mode_cmd->pixel_format >> 8)  & 0xff,
> -			 (mode_cmd->pixel_format >> 16) & 0xff,
> -			 (mode_cmd->pixel_format >> 24) & 0xff);
> -
> -	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!obj)
> -		return ERR_PTR(-ENOENT);
> -
> -	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> -	if (IS_ERR(hibmc_fb)) {
> -		drm_gem_object_put_unlocked(obj);
> -		return ERR_PTR((long)hibmc_fb);
> -	}
> -	return &hibmc_fb->fb;
> +	return fb;
>  }
>  
>  const struct drm_mode_config_funcs hibmc_mode_funcs = {
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = drm_atomic_helper_commit,
> -	.fb_create = hibmc_user_framebuffer_create,
> +	.fb_create = drm_gem_fb_create,
>  };
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  8:16     ` Thomas Zimmermann
  0 siblings, 0 replies; 89+ messages in thread
From: Thomas Zimmermann @ 2019-11-22  8:16 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development


[-- Attachment #1.1.1: Type: text/plain, Size: 7190 bytes --]

Hi

Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> Again we could delete a lot more if we'd switch over to the generic
> fbdev stuff.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

There's one comment below. Except for that,

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
>  4 files changed, 19 insertions(+), 63 deletions(-)
> 
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 6527a97f68a3..2d0920ec4554 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
>  	s64 gpu_addr = 0;
>  	unsigned int line_l;
>  	struct hibmc_drm_private *priv = plane->dev->dev_private;
> -	struct hibmc_framebuffer *hibmc_fb;
>  	struct drm_gem_vram_object *gbo;
>  
>  	if (!state->fb)
>  		return;
>  
> -	hibmc_fb = to_hibmc_framebuffer(state->fb);
> -	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> +	gbo = drm_gem_vram_of_gem(fb->obj[0]);

There's no fb in this function. You have to use state->fb,

>  
>  	gpu_addr = drm_gem_vram_offset(gbo);
>  	if (WARN_ON_ONCE(gpu_addr < 0))
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> index e58ecd7edcf8..ab5b4a4a2095 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> @@ -20,14 +20,9 @@
>  struct drm_device;
>  struct drm_gem_object;
>  
> -struct hibmc_framebuffer {
> -	struct drm_framebuffer fb;
> -	struct drm_gem_object *obj;
> -};
> -
>  struct hibmc_fbdev {
>  	struct drm_fb_helper helper; /* must be first */
> -	struct hibmc_framebuffer *fb;
> +	struct drm_framebuffer *fb;
>  	int size;
>  };
>  
> @@ -47,8 +42,6 @@ struct hibmc_drm_private {
>  	struct hibmc_fbdev *fbdev;
>  };
>  
> -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> -
>  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
>  			  unsigned int power_mode);
>  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
>  
>  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
>  		     struct drm_gem_object **obj);
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> index b4c1cea051e8..446aeedc9e29 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
>  
>  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
>  {
> -	struct hibmc_framebuffer *gfb = fbdev->fb;
>  	struct drm_fb_helper *fbh = &fbdev->helper;
>  
>  	drm_fb_helper_unregister_fbi(fbh);
>  
>  	drm_fb_helper_fini(fbh);
>  
> -	if (gfb)
> -		drm_framebuffer_put(&gfb->fb);
> +	if (fbdev->fb)
> +		drm_framebuffer_put(fbdev->fb);
>  }
>  
>  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> index 21b684eab5c9..386033b0d3a2 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> @@ -16,6 +16,7 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_vram_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_print.h>
>  
>  #include "hibmc_drm_drv.h"
> @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
>  	return 0;
>  }
>  
> -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> -{
> -	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> -
> -	drm_gem_object_put_unlocked(hibmc_fb->obj);
> -	drm_framebuffer_cleanup(fb);
> -	kfree(hibmc_fb);
> -}
> -
>  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> -	.destroy = hibmc_user_framebuffer_destroy,
> +	.destroy	= drm_gem_fb_destroy,
> +	.create_handle	= drm_gem_fb_create_handle,
>  };
>  
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj)
>  {
> -	struct hibmc_framebuffer *hibmc_fb;
> +	struct drm_framebuffer *fb;
>  	int ret;
>  
> -	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> -	if (!hibmc_fb) {
> -		DRM_ERROR("failed to allocate hibmc_fb\n");
> +	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> +	if (!fb) {
> +		DRM_ERROR("failed to allocate fb\n");
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> -	hibmc_fb->obj = obj;
> -	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> +	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> +	fb->obj[0] = obj;
> +	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
>  	if (ret) {
>  		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> -		kfree(hibmc_fb);
> +		kfree(fb);
>  		return ERR_PTR(ret);
>  	}
>  
> -	return hibmc_fb;
> -}
> -
> -static struct drm_framebuffer *
> -hibmc_user_framebuffer_create(struct drm_device *dev,
> -			      struct drm_file *filp,
> -			      const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_gem_object *obj;
> -	struct hibmc_framebuffer *hibmc_fb;
> -
> -	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> -			 mode_cmd->width, mode_cmd->height,
> -			 (mode_cmd->pixel_format) & 0xff,
> -			 (mode_cmd->pixel_format >> 8)  & 0xff,
> -			 (mode_cmd->pixel_format >> 16) & 0xff,
> -			 (mode_cmd->pixel_format >> 24) & 0xff);
> -
> -	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!obj)
> -		return ERR_PTR(-ENOENT);
> -
> -	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> -	if (IS_ERR(hibmc_fb)) {
> -		drm_gem_object_put_unlocked(obj);
> -		return ERR_PTR((long)hibmc_fb);
> -	}
> -	return &hibmc_fb->fb;
> +	return fb;
>  }
>  
>  const struct drm_mode_config_funcs hibmc_mode_funcs = {
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = drm_atomic_helper_commit,
> -	.fb_create = hibmc_user_framebuffer_create,
> +	.fb_create = drm_gem_fb_create,
>  };
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  8:16     ` Thomas Zimmermann
  0 siblings, 0 replies; 89+ messages in thread
From: Thomas Zimmermann @ 2019-11-22  8:16 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development; +Cc: Daniel Vetter, Intel Graphics Development


[-- Attachment #1.1.1: Type: text/plain, Size: 7190 bytes --]

Hi

Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> Again we could delete a lot more if we'd switch over to the generic
> fbdev stuff.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

There's one comment below. Except for that,

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
>  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
>  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
>  4 files changed, 19 insertions(+), 63 deletions(-)
> 
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 6527a97f68a3..2d0920ec4554 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
>  	s64 gpu_addr = 0;
>  	unsigned int line_l;
>  	struct hibmc_drm_private *priv = plane->dev->dev_private;
> -	struct hibmc_framebuffer *hibmc_fb;
>  	struct drm_gem_vram_object *gbo;
>  
>  	if (!state->fb)
>  		return;
>  
> -	hibmc_fb = to_hibmc_framebuffer(state->fb);
> -	gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> +	gbo = drm_gem_vram_of_gem(fb->obj[0]);

There's no fb in this function. You have to use state->fb,

>  
>  	gpu_addr = drm_gem_vram_offset(gbo);
>  	if (WARN_ON_ONCE(gpu_addr < 0))
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> index e58ecd7edcf8..ab5b4a4a2095 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> @@ -20,14 +20,9 @@
>  struct drm_device;
>  struct drm_gem_object;
>  
> -struct hibmc_framebuffer {
> -	struct drm_framebuffer fb;
> -	struct drm_gem_object *obj;
> -};
> -
>  struct hibmc_fbdev {
>  	struct drm_fb_helper helper; /* must be first */
> -	struct hibmc_framebuffer *fb;
> +	struct drm_framebuffer *fb;
>  	int size;
>  };
>  
> @@ -47,8 +42,6 @@ struct hibmc_drm_private {
>  	struct hibmc_fbdev *fbdev;
>  };
>  
> -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> -
>  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
>  			  unsigned int power_mode);
>  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
>  
>  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
>  		     struct drm_gem_object **obj);
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> index b4c1cea051e8..446aeedc9e29 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
>  
>  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
>  {
> -	struct hibmc_framebuffer *gfb = fbdev->fb;
>  	struct drm_fb_helper *fbh = &fbdev->helper;
>  
>  	drm_fb_helper_unregister_fbi(fbh);
>  
>  	drm_fb_helper_fini(fbh);
>  
> -	if (gfb)
> -		drm_framebuffer_put(&gfb->fb);
> +	if (fbdev->fb)
> +		drm_framebuffer_put(fbdev->fb);
>  }
>  
>  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> index 21b684eab5c9..386033b0d3a2 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> @@ -16,6 +16,7 @@
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_gem.h>
>  #include <drm/drm_gem_vram_helper.h>
> +#include <drm/drm_gem_framebuffer_helper.h>
>  #include <drm/drm_print.h>
>  
>  #include "hibmc_drm_drv.h"
> @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
>  	return 0;
>  }
>  
> -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> -{
> -	struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> -
> -	drm_gem_object_put_unlocked(hibmc_fb->obj);
> -	drm_framebuffer_cleanup(fb);
> -	kfree(hibmc_fb);
> -}
> -
>  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> -	.destroy = hibmc_user_framebuffer_destroy,
> +	.destroy	= drm_gem_fb_destroy,
> +	.create_handle	= drm_gem_fb_create_handle,
>  };
>  
> -struct hibmc_framebuffer *
> +struct drm_framebuffer *
>  hibmc_framebuffer_init(struct drm_device *dev,
>  		       const struct drm_mode_fb_cmd2 *mode_cmd,
>  		       struct drm_gem_object *obj)
>  {
> -	struct hibmc_framebuffer *hibmc_fb;
> +	struct drm_framebuffer *fb;
>  	int ret;
>  
> -	hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> -	if (!hibmc_fb) {
> -		DRM_ERROR("failed to allocate hibmc_fb\n");
> +	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> +	if (!fb) {
> +		DRM_ERROR("failed to allocate fb\n");
>  		return ERR_PTR(-ENOMEM);
>  	}
>  
> -	drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> -	hibmc_fb->obj = obj;
> -	ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> +	drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> +	fb->obj[0] = obj;
> +	ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
>  	if (ret) {
>  		DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> -		kfree(hibmc_fb);
> +		kfree(fb);
>  		return ERR_PTR(ret);
>  	}
>  
> -	return hibmc_fb;
> -}
> -
> -static struct drm_framebuffer *
> -hibmc_user_framebuffer_create(struct drm_device *dev,
> -			      struct drm_file *filp,
> -			      const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	struct drm_gem_object *obj;
> -	struct hibmc_framebuffer *hibmc_fb;
> -
> -	DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> -			 mode_cmd->width, mode_cmd->height,
> -			 (mode_cmd->pixel_format) & 0xff,
> -			 (mode_cmd->pixel_format >> 8)  & 0xff,
> -			 (mode_cmd->pixel_format >> 16) & 0xff,
> -			 (mode_cmd->pixel_format >> 24) & 0xff);
> -
> -	obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> -	if (!obj)
> -		return ERR_PTR(-ENOENT);
> -
> -	hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> -	if (IS_ERR(hibmc_fb)) {
> -		drm_gem_object_put_unlocked(obj);
> -		return ERR_PTR((long)hibmc_fb);
> -	}
> -	return &hibmc_fb->fb;
> +	return fb;
>  }
>  
>  const struct drm_mode_config_funcs hibmc_mode_funcs = {
>  	.atomic_check = drm_atomic_helper_check,
>  	.atomic_commit = drm_atomic_helper_commit,
> -	.fb_create = hibmc_user_framebuffer_create,
> +	.fb_create = drm_gem_fb_create,
>  };
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  9:12       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22  9:12 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development

On Fri, Nov 22, 2019 at 9:16 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> > Again we could delete a lot more if we'd switch over to the generic
> > fbdev stuff.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> There's one comment below. Except for that,
>
> Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> > ---
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
> >  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
> >  4 files changed, 19 insertions(+), 63 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > index 6527a97f68a3..2d0920ec4554 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
> >       s64 gpu_addr = 0;
> >       unsigned int line_l;
> >       struct hibmc_drm_private *priv = plane->dev->dev_private;
> > -     struct hibmc_framebuffer *hibmc_fb;
> >       struct drm_gem_vram_object *gbo;
> >
> >       if (!state->fb)
> >               return;
> >
> > -     hibmc_fb = to_hibmc_framebuffer(state->fb);
> > -     gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> > +     gbo = drm_gem_vram_of_gem(fb->obj[0]);
>
> There's no fb in this function. You have to use state->fb,

Uh, hibmc is the one driver that doesn't compile on arm32 :-/ I'll
drop my patch here and take a look at your series and try to review
it. Then imo wait 2 weeks or so for somet testing from maintainers,
and push either way. If it works great, if it breaks you have your
tester then :-)
-Daniel

>
> >
> >       gpu_addr = drm_gem_vram_offset(gbo);
> >       if (WARN_ON_ONCE(gpu_addr < 0))
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > index e58ecd7edcf8..ab5b4a4a2095 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > @@ -20,14 +20,9 @@
> >  struct drm_device;
> >  struct drm_gem_object;
> >
> > -struct hibmc_framebuffer {
> > -     struct drm_framebuffer fb;
> > -     struct drm_gem_object *obj;
> > -};
> > -
> >  struct hibmc_fbdev {
> >       struct drm_fb_helper helper; /* must be first */
> > -     struct hibmc_framebuffer *fb;
> > +     struct drm_framebuffer *fb;
> >       int size;
> >  };
> >
> > @@ -47,8 +42,6 @@ struct hibmc_drm_private {
> >       struct hibmc_fbdev *fbdev;
> >  };
> >
> > -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> > -
> >  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
> >                         unsigned int power_mode);
> >  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> > @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
> >
> >  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
> >                    struct drm_gem_object **obj);
> > -struct hibmc_framebuffer *
> > +struct drm_framebuffer *
> >  hibmc_framebuffer_init(struct drm_device *dev,
> >                      const struct drm_mode_fb_cmd2 *mode_cmd,
> >                      struct drm_gem_object *obj);
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > index b4c1cea051e8..446aeedc9e29 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
> >
> >  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
> >  {
> > -     struct hibmc_framebuffer *gfb = fbdev->fb;
> >       struct drm_fb_helper *fbh = &fbdev->helper;
> >
> >       drm_fb_helper_unregister_fbi(fbh);
> >
> >       drm_fb_helper_fini(fbh);
> >
> > -     if (gfb)
> > -             drm_framebuffer_put(&gfb->fb);
> > +     if (fbdev->fb)
> > +             drm_framebuffer_put(fbdev->fb);
> >  }
> >
> >  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > index 21b684eab5c9..386033b0d3a2 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > @@ -16,6 +16,7 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_vram_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_print.h>
> >
> >  #include "hibmc_drm_drv.h"
> > @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
> >       return 0;
> >  }
> >
> > -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> > -{
> > -     struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> > -
> > -     drm_gem_object_put_unlocked(hibmc_fb->obj);
> > -     drm_framebuffer_cleanup(fb);
> > -     kfree(hibmc_fb);
> > -}
> > -
> >  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> > -     .destroy = hibmc_user_framebuffer_destroy,
> > +     .destroy        = drm_gem_fb_destroy,
> > +     .create_handle  = drm_gem_fb_create_handle,
> >  };
> >
> > -struct hibmc_framebuffer *
> > +struct drm_framebuffer *
> >  hibmc_framebuffer_init(struct drm_device *dev,
> >                      const struct drm_mode_fb_cmd2 *mode_cmd,
> >                      struct drm_gem_object *obj)
> >  {
> > -     struct hibmc_framebuffer *hibmc_fb;
> > +     struct drm_framebuffer *fb;
> >       int ret;
> >
> > -     hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> > -     if (!hibmc_fb) {
> > -             DRM_ERROR("failed to allocate hibmc_fb\n");
> > +     fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > +     if (!fb) {
> > +             DRM_ERROR("failed to allocate fb\n");
> >               return ERR_PTR(-ENOMEM);
> >       }
> >
> > -     drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> > -     hibmc_fb->obj = obj;
> > -     ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> > +     drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> > +     fb->obj[0] = obj;
> > +     ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
> >       if (ret) {
> >               DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> > -             kfree(hibmc_fb);
> > +             kfree(fb);
> >               return ERR_PTR(ret);
> >       }
> >
> > -     return hibmc_fb;
> > -}
> > -
> > -static struct drm_framebuffer *
> > -hibmc_user_framebuffer_create(struct drm_device *dev,
> > -                           struct drm_file *filp,
> > -                           const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -     struct drm_gem_object *obj;
> > -     struct hibmc_framebuffer *hibmc_fb;
> > -
> > -     DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> > -                      mode_cmd->width, mode_cmd->height,
> > -                      (mode_cmd->pixel_format) & 0xff,
> > -                      (mode_cmd->pixel_format >> 8)  & 0xff,
> > -                      (mode_cmd->pixel_format >> 16) & 0xff,
> > -                      (mode_cmd->pixel_format >> 24) & 0xff);
> > -
> > -     obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> > -     if (!obj)
> > -             return ERR_PTR(-ENOENT);
> > -
> > -     hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> > -     if (IS_ERR(hibmc_fb)) {
> > -             drm_gem_object_put_unlocked(obj);
> > -             return ERR_PTR((long)hibmc_fb);
> > -     }
> > -     return &hibmc_fb->fb;
> > +     return fb;
> >  }
> >
> >  const struct drm_mode_config_funcs hibmc_mode_funcs = {
> >       .atomic_check = drm_atomic_helper_check,
> >       .atomic_commit = drm_atomic_helper_commit,
> > -     .fb_create = hibmc_user_framebuffer_create,
> > +     .fb_create = drm_gem_fb_create,
> >  };
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Felix Imendörffer
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create
@ 2019-11-22  9:12       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22  9:12 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development

On Fri, Nov 22, 2019 at 9:16 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 15.11.19 um 10:21 schrieb Daniel Vetter:
> > Again we could delete a lot more if we'd switch over to the generic
> > fbdev stuff.
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> There's one comment below. Except for that,
>
> Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> > ---
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c    |  4 +-
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h   | 11 +---
> >  .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c |  5 +-
> >  drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c   | 62 +++++--------------
> >  4 files changed, 19 insertions(+), 63 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > index 6527a97f68a3..2d0920ec4554 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> > @@ -99,14 +99,12 @@ static void hibmc_plane_atomic_update(struct drm_plane *plane,
> >       s64 gpu_addr = 0;
> >       unsigned int line_l;
> >       struct hibmc_drm_private *priv = plane->dev->dev_private;
> > -     struct hibmc_framebuffer *hibmc_fb;
> >       struct drm_gem_vram_object *gbo;
> >
> >       if (!state->fb)
> >               return;
> >
> > -     hibmc_fb = to_hibmc_framebuffer(state->fb);
> > -     gbo = drm_gem_vram_of_gem(hibmc_fb->obj);
> > +     gbo = drm_gem_vram_of_gem(fb->obj[0]);
>
> There's no fb in this function. You have to use state->fb,

Uh, hibmc is the one driver that doesn't compile on arm32 :-/ I'll
drop my patch here and take a look at your series and try to review
it. Then imo wait 2 weeks or so for somet testing from maintainers,
and push either way. If it works great, if it breaks you have your
tester then :-)
-Daniel

>
> >
> >       gpu_addr = drm_gem_vram_offset(gbo);
> >       if (WARN_ON_ONCE(gpu_addr < 0))
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > index e58ecd7edcf8..ab5b4a4a2095 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
> > @@ -20,14 +20,9 @@
> >  struct drm_device;
> >  struct drm_gem_object;
> >
> > -struct hibmc_framebuffer {
> > -     struct drm_framebuffer fb;
> > -     struct drm_gem_object *obj;
> > -};
> > -
> >  struct hibmc_fbdev {
> >       struct drm_fb_helper helper; /* must be first */
> > -     struct hibmc_framebuffer *fb;
> > +     struct drm_framebuffer *fb;
> >       int size;
> >  };
> >
> > @@ -47,8 +42,6 @@ struct hibmc_drm_private {
> >       struct hibmc_fbdev *fbdev;
> >  };
> >
> > -#define to_hibmc_framebuffer(x) container_of(x, struct hibmc_framebuffer, fb)
> > -
> >  void hibmc_set_power_mode(struct hibmc_drm_private *priv,
> >                         unsigned int power_mode);
> >  void hibmc_set_current_gate(struct hibmc_drm_private *priv,
> > @@ -61,7 +54,7 @@ void hibmc_fbdev_fini(struct hibmc_drm_private *priv);
> >
> >  int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
> >                    struct drm_gem_object **obj);
> > -struct hibmc_framebuffer *
> > +struct drm_framebuffer *
> >  hibmc_framebuffer_init(struct drm_device *dev,
> >                      const struct drm_mode_fb_cmd2 *mode_cmd,
> >                      struct drm_gem_object *obj);
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > index b4c1cea051e8..446aeedc9e29 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c
> > @@ -141,15 +141,14 @@ static int hibmc_drm_fb_create(struct drm_fb_helper *helper,
> >
> >  static void hibmc_fbdev_destroy(struct hibmc_fbdev *fbdev)
> >  {
> > -     struct hibmc_framebuffer *gfb = fbdev->fb;
> >       struct drm_fb_helper *fbh = &fbdev->helper;
> >
> >       drm_fb_helper_unregister_fbi(fbh);
> >
> >       drm_fb_helper_fini(fbh);
> >
> > -     if (gfb)
> > -             drm_framebuffer_put(&gfb->fb);
> > +     if (fbdev->fb)
> > +             drm_framebuffer_put(fbdev->fb);
> >  }
> >
> >  static const struct drm_fb_helper_funcs hibmc_fbdev_helper_funcs = {
> > diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > index 21b684eab5c9..386033b0d3a2 100644
> > --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
> > @@ -16,6 +16,7 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_vram_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_print.h>
> >
> >  #include "hibmc_drm_drv.h"
> > @@ -97,74 +98,39 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
> >       return 0;
> >  }
> >
> > -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb)
> > -{
> > -     struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb);
> > -
> > -     drm_gem_object_put_unlocked(hibmc_fb->obj);
> > -     drm_framebuffer_cleanup(fb);
> > -     kfree(hibmc_fb);
> > -}
> > -
> >  static const struct drm_framebuffer_funcs hibmc_fb_funcs = {
> > -     .destroy = hibmc_user_framebuffer_destroy,
> > +     .destroy        = drm_gem_fb_destroy,
> > +     .create_handle  = drm_gem_fb_create_handle,
> >  };
> >
> > -struct hibmc_framebuffer *
> > +struct drm_framebuffer *
> >  hibmc_framebuffer_init(struct drm_device *dev,
> >                      const struct drm_mode_fb_cmd2 *mode_cmd,
> >                      struct drm_gem_object *obj)
> >  {
> > -     struct hibmc_framebuffer *hibmc_fb;
> > +     struct drm_framebuffer *fb;
> >       int ret;
> >
> > -     hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL);
> > -     if (!hibmc_fb) {
> > -             DRM_ERROR("failed to allocate hibmc_fb\n");
> > +     fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > +     if (!fb) {
> > +             DRM_ERROR("failed to allocate fb\n");
> >               return ERR_PTR(-ENOMEM);
> >       }
> >
> > -     drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd);
> > -     hibmc_fb->obj = obj;
> > -     ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs);
> > +     drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
> > +     fb->obj[0] = obj;
> > +     ret = drm_framebuffer_init(dev, fb, &hibmc_fb_funcs);
> >       if (ret) {
> >               DRM_ERROR("drm_framebuffer_init failed: %d\n", ret);
> > -             kfree(hibmc_fb);
> > +             kfree(fb);
> >               return ERR_PTR(ret);
> >       }
> >
> > -     return hibmc_fb;
> > -}
> > -
> > -static struct drm_framebuffer *
> > -hibmc_user_framebuffer_create(struct drm_device *dev,
> > -                           struct drm_file *filp,
> > -                           const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -     struct drm_gem_object *obj;
> > -     struct hibmc_framebuffer *hibmc_fb;
> > -
> > -     DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n",
> > -                      mode_cmd->width, mode_cmd->height,
> > -                      (mode_cmd->pixel_format) & 0xff,
> > -                      (mode_cmd->pixel_format >> 8)  & 0xff,
> > -                      (mode_cmd->pixel_format >> 16) & 0xff,
> > -                      (mode_cmd->pixel_format >> 24) & 0xff);
> > -
> > -     obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]);
> > -     if (!obj)
> > -             return ERR_PTR(-ENOENT);
> > -
> > -     hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj);
> > -     if (IS_ERR(hibmc_fb)) {
> > -             drm_gem_object_put_unlocked(obj);
> > -             return ERR_PTR((long)hibmc_fb);
> > -     }
> > -     return &hibmc_fb->fb;
> > +     return fb;
> >  }
> >
> >  const struct drm_mode_config_funcs hibmc_mode_funcs = {
> >       .atomic_check = drm_atomic_helper_check,
> >       .atomic_commit = drm_atomic_helper_commit,
> > -     .fb_create = hibmc_user_framebuffer_create,
> > +     .fb_create = drm_gem_fb_create,
> >  };
> >
>
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Maxfeldstr. 5, 90409 Nürnberg, Germany
> (HRB 36809, AG Nürnberg)
> Geschäftsführer: Felix Imendörffer
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
  2019-11-22  7:42     ` CK Hu
                         ` (2 preceding siblings ...)
  (?)
@ 2019-11-22 17:09       ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22 17:09 UTC (permalink / raw)
  To: CK Hu
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	linux-mediatek, Philipp Zabel, Matthias Brugger,
	linux-arm-kernel

On Fri, Nov 22, 2019 at 03:42:39PM +0800, CK Hu wrote:
> Hi, Daniel:
> 
> On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> > Aside: There's a few other fb_create implementations which
> > simply check for valid buffer format (or an approximation thereof),
> > and then call drm_gem_fb_create. For atomic drivers at least we could
> > walk all planes and make sure the format/modifier combo is valid,
> > and remove even more code.
> > 
> > For non-atomic drivers that's not possible, since the format list for
> > the primary buffer might be garbage (and most likely it is).
> > 
> > Also delete mtk_drm_fb.[hc] since it would now only contain one
> > function.
> 
> Acked-by: CK Hu <ck.hu@mediatek.com>

Pushed to drm-misc-next, thanks for taking a look.
-Daniel

> 
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: CK Hu <ck.hu@mediatek.com>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-mediatek@lists.infradead.org
> > ---
> >  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
> >  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
> >  4 files changed, 15 insertions(+), 107 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 84d14213d992..2b1c122066ea 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -16,8 +16,10 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_drv.h>
> >  #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_fourcc.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_cma_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_of.h>
> >  #include <drm/drm_probe_helper.h>
> >  #include <drm/drm_vblank.h>
> > @@ -27,7 +29,6 @@
> >  #include "mtk_drm_ddp.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  
> >  #define DRIVER_NAME "mediatek"
> > @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
> >  	return 0;
> >  }
> >  
> > +static struct drm_framebuffer *
> > +mtk_drm_mode_fb_create(struct drm_device *dev,
> > +		       struct drm_file *file,
> > +		       const struct drm_mode_fb_cmd2 *cmd)
> > +{
> > +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > +
> > +	if (info->num_planes != 1)
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	return drm_gem_fb_create(dev, file, cmd);
> > +}
> > +
> >  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
> >  	.fb_create = mtk_drm_mode_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > deleted file mode 100644
> > index 3f230a28a2dc..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ /dev/null
> > @@ -1,92 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0-only
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#include <linux/dma-buf.h>
> > -#include <linux/dma-resv.h>
> > -
> > -#include <drm/drm_modeset_helper.h>
> > -#include <drm/drm_fb_helper.h>
> > -#include <drm/drm_fourcc.h>
> > -#include <drm/drm_gem.h>
> > -#include <drm/drm_gem_framebuffer_helper.h>
> > -
> > -#include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> > -#include "mtk_drm_gem.h"
> > -
> > -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> > -	.create_handle = drm_gem_fb_create_handle,
> > -	.destroy = drm_gem_fb_destroy,
> > -};
> > -
> > -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> > -					const struct drm_mode_fb_cmd2 *mode,
> > -					struct drm_gem_object *obj)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> > -	struct drm_framebuffer *fb;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > -	if (!fb)
> > -		return ERR_PTR(-ENOMEM);
> > -
> > -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> > -
> > -	fb->obj[0] = obj;
> > -
> > -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> > -	if (ret) {
> > -		DRM_ERROR("failed to initialize framebuffer\n");
> > -		kfree(fb);
> > -		return ERR_PTR(ret);
> > -	}
> > -
> > -	return fb;
> > -}
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > -	struct drm_framebuffer *fb;
> > -	struct drm_gem_object *gem;
> > -	unsigned int width = cmd->width;
> > -	unsigned int height = cmd->height;
> > -	unsigned int size, bpp;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> > -	if (!gem)
> > -		return ERR_PTR(-ENOENT);
> > -
> > -	bpp = info->cpp[0];
> > -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> > -	size += cmd->offsets[0];
> > -
> > -	if (gem->size < size) {
> > -		ret = -EINVAL;
> > -		goto unreference;
> > -	}
> > -
> > -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> > -	if (IS_ERR(fb)) {
> > -		ret = PTR_ERR(fb);
> > -		goto unreference;
> > -	}
> > -
> > -	return fb;
> > -
> > -unreference:
> > -	drm_gem_object_put_unlocked(gem);
> > -	return ERR_PTR(ret);
> > -}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > deleted file mode 100644
> > index eb64d26001c6..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#ifndef MTK_DRM_FB_H
> > -#define MTK_DRM_FB_H
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd);
> > -
> > -#endif /* MTK_DRM_FB_H */
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > index 3b0cc91c7023..540ef2faa40a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > @@ -13,7 +13,6 @@
> >  #include "mtk_drm_crtc.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  #include "mtk_drm_plane.h"
> >  
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22 17:09       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22 17:09 UTC (permalink / raw)
  To: CK Hu
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	linux-mediatek, Philipp Zabel, Matthias Brugger,
	linux-arm-kernel

On Fri, Nov 22, 2019 at 03:42:39PM +0800, CK Hu wrote:
> Hi, Daniel:
> 
> On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> > Aside: There's a few other fb_create implementations which
> > simply check for valid buffer format (or an approximation thereof),
> > and then call drm_gem_fb_create. For atomic drivers at least we could
> > walk all planes and make sure the format/modifier combo is valid,
> > and remove even more code.
> > 
> > For non-atomic drivers that's not possible, since the format list for
> > the primary buffer might be garbage (and most likely it is).
> > 
> > Also delete mtk_drm_fb.[hc] since it would now only contain one
> > function.
> 
> Acked-by: CK Hu <ck.hu@mediatek.com>

Pushed to drm-misc-next, thanks for taking a look.
-Daniel

> 
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: CK Hu <ck.hu@mediatek.com>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-mediatek@lists.infradead.org
> > ---
> >  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
> >  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
> >  4 files changed, 15 insertions(+), 107 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 84d14213d992..2b1c122066ea 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -16,8 +16,10 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_drv.h>
> >  #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_fourcc.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_cma_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_of.h>
> >  #include <drm/drm_probe_helper.h>
> >  #include <drm/drm_vblank.h>
> > @@ -27,7 +29,6 @@
> >  #include "mtk_drm_ddp.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  
> >  #define DRIVER_NAME "mediatek"
> > @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
> >  	return 0;
> >  }
> >  
> > +static struct drm_framebuffer *
> > +mtk_drm_mode_fb_create(struct drm_device *dev,
> > +		       struct drm_file *file,
> > +		       const struct drm_mode_fb_cmd2 *cmd)
> > +{
> > +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > +
> > +	if (info->num_planes != 1)
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	return drm_gem_fb_create(dev, file, cmd);
> > +}
> > +
> >  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
> >  	.fb_create = mtk_drm_mode_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > deleted file mode 100644
> > index 3f230a28a2dc..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ /dev/null
> > @@ -1,92 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0-only
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#include <linux/dma-buf.h>
> > -#include <linux/dma-resv.h>
> > -
> > -#include <drm/drm_modeset_helper.h>
> > -#include <drm/drm_fb_helper.h>
> > -#include <drm/drm_fourcc.h>
> > -#include <drm/drm_gem.h>
> > -#include <drm/drm_gem_framebuffer_helper.h>
> > -
> > -#include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> > -#include "mtk_drm_gem.h"
> > -
> > -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> > -	.create_handle = drm_gem_fb_create_handle,
> > -	.destroy = drm_gem_fb_destroy,
> > -};
> > -
> > -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> > -					const struct drm_mode_fb_cmd2 *mode,
> > -					struct drm_gem_object *obj)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> > -	struct drm_framebuffer *fb;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > -	if (!fb)
> > -		return ERR_PTR(-ENOMEM);
> > -
> > -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> > -
> > -	fb->obj[0] = obj;
> > -
> > -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> > -	if (ret) {
> > -		DRM_ERROR("failed to initialize framebuffer\n");
> > -		kfree(fb);
> > -		return ERR_PTR(ret);
> > -	}
> > -
> > -	return fb;
> > -}
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > -	struct drm_framebuffer *fb;
> > -	struct drm_gem_object *gem;
> > -	unsigned int width = cmd->width;
> > -	unsigned int height = cmd->height;
> > -	unsigned int size, bpp;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> > -	if (!gem)
> > -		return ERR_PTR(-ENOENT);
> > -
> > -	bpp = info->cpp[0];
> > -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> > -	size += cmd->offsets[0];
> > -
> > -	if (gem->size < size) {
> > -		ret = -EINVAL;
> > -		goto unreference;
> > -	}
> > -
> > -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> > -	if (IS_ERR(fb)) {
> > -		ret = PTR_ERR(fb);
> > -		goto unreference;
> > -	}
> > -
> > -	return fb;
> > -
> > -unreference:
> > -	drm_gem_object_put_unlocked(gem);
> > -	return ERR_PTR(ret);
> > -}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > deleted file mode 100644
> > index eb64d26001c6..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#ifndef MTK_DRM_FB_H
> > -#define MTK_DRM_FB_H
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd);
> > -
> > -#endif /* MTK_DRM_FB_H */
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > index 3b0cc91c7023..540ef2faa40a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > @@ -13,7 +13,6 @@
> >  #include "mtk_drm_crtc.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  #include "mtk_drm_plane.h"
> >  
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22 17:09       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22 17:09 UTC (permalink / raw)
  To: CK Hu
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	linux-mediatek, Philipp Zabel, Matthias Brugger,
	linux-arm-kernel

On Fri, Nov 22, 2019 at 03:42:39PM +0800, CK Hu wrote:
> Hi, Daniel:
> 
> On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> > Aside: There's a few other fb_create implementations which
> > simply check for valid buffer format (or an approximation thereof),
> > and then call drm_gem_fb_create. For atomic drivers at least we could
> > walk all planes and make sure the format/modifier combo is valid,
> > and remove even more code.
> > 
> > For non-atomic drivers that's not possible, since the format list for
> > the primary buffer might be garbage (and most likely it is).
> > 
> > Also delete mtk_drm_fb.[hc] since it would now only contain one
> > function.
> 
> Acked-by: CK Hu <ck.hu@mediatek.com>

Pushed to drm-misc-next, thanks for taking a look.
-Daniel

> 
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: CK Hu <ck.hu@mediatek.com>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-mediatek@lists.infradead.org
> > ---
> >  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
> >  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
> >  4 files changed, 15 insertions(+), 107 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 84d14213d992..2b1c122066ea 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -16,8 +16,10 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_drv.h>
> >  #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_fourcc.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_cma_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_of.h>
> >  #include <drm/drm_probe_helper.h>
> >  #include <drm/drm_vblank.h>
> > @@ -27,7 +29,6 @@
> >  #include "mtk_drm_ddp.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  
> >  #define DRIVER_NAME "mediatek"
> > @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
> >  	return 0;
> >  }
> >  
> > +static struct drm_framebuffer *
> > +mtk_drm_mode_fb_create(struct drm_device *dev,
> > +		       struct drm_file *file,
> > +		       const struct drm_mode_fb_cmd2 *cmd)
> > +{
> > +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > +
> > +	if (info->num_planes != 1)
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	return drm_gem_fb_create(dev, file, cmd);
> > +}
> > +
> >  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
> >  	.fb_create = mtk_drm_mode_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > deleted file mode 100644
> > index 3f230a28a2dc..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ /dev/null
> > @@ -1,92 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0-only
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#include <linux/dma-buf.h>
> > -#include <linux/dma-resv.h>
> > -
> > -#include <drm/drm_modeset_helper.h>
> > -#include <drm/drm_fb_helper.h>
> > -#include <drm/drm_fourcc.h>
> > -#include <drm/drm_gem.h>
> > -#include <drm/drm_gem_framebuffer_helper.h>
> > -
> > -#include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> > -#include "mtk_drm_gem.h"
> > -
> > -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> > -	.create_handle = drm_gem_fb_create_handle,
> > -	.destroy = drm_gem_fb_destroy,
> > -};
> > -
> > -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> > -					const struct drm_mode_fb_cmd2 *mode,
> > -					struct drm_gem_object *obj)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> > -	struct drm_framebuffer *fb;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > -	if (!fb)
> > -		return ERR_PTR(-ENOMEM);
> > -
> > -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> > -
> > -	fb->obj[0] = obj;
> > -
> > -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> > -	if (ret) {
> > -		DRM_ERROR("failed to initialize framebuffer\n");
> > -		kfree(fb);
> > -		return ERR_PTR(ret);
> > -	}
> > -
> > -	return fb;
> > -}
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > -	struct drm_framebuffer *fb;
> > -	struct drm_gem_object *gem;
> > -	unsigned int width = cmd->width;
> > -	unsigned int height = cmd->height;
> > -	unsigned int size, bpp;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> > -	if (!gem)
> > -		return ERR_PTR(-ENOENT);
> > -
> > -	bpp = info->cpp[0];
> > -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> > -	size += cmd->offsets[0];
> > -
> > -	if (gem->size < size) {
> > -		ret = -EINVAL;
> > -		goto unreference;
> > -	}
> > -
> > -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> > -	if (IS_ERR(fb)) {
> > -		ret = PTR_ERR(fb);
> > -		goto unreference;
> > -	}
> > -
> > -	return fb;
> > -
> > -unreference:
> > -	drm_gem_object_put_unlocked(gem);
> > -	return ERR_PTR(ret);
> > -}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > deleted file mode 100644
> > index eb64d26001c6..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#ifndef MTK_DRM_FB_H
> > -#define MTK_DRM_FB_H
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd);
> > -
> > -#endif /* MTK_DRM_FB_H */
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > index 3b0cc91c7023..540ef2faa40a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > @@ -13,7 +13,6 @@
> >  #include "mtk_drm_crtc.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  #include "mtk_drm_plane.h"
> >  
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22 17:09       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22 17:09 UTC (permalink / raw)
  To: CK Hu
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	linux-mediatek, Matthias Brugger, linux-arm-kernel

On Fri, Nov 22, 2019 at 03:42:39PM +0800, CK Hu wrote:
> Hi, Daniel:
> 
> On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> > Aside: There's a few other fb_create implementations which
> > simply check for valid buffer format (or an approximation thereof),
> > and then call drm_gem_fb_create. For atomic drivers at least we could
> > walk all planes and make sure the format/modifier combo is valid,
> > and remove even more code.
> > 
> > For non-atomic drivers that's not possible, since the format list for
> > the primary buffer might be garbage (and most likely it is).
> > 
> > Also delete mtk_drm_fb.[hc] since it would now only contain one
> > function.
> 
> Acked-by: CK Hu <ck.hu@mediatek.com>

Pushed to drm-misc-next, thanks for taking a look.
-Daniel

> 
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: CK Hu <ck.hu@mediatek.com>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-mediatek@lists.infradead.org
> > ---
> >  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
> >  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
> >  4 files changed, 15 insertions(+), 107 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 84d14213d992..2b1c122066ea 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -16,8 +16,10 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_drv.h>
> >  #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_fourcc.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_cma_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_of.h>
> >  #include <drm/drm_probe_helper.h>
> >  #include <drm/drm_vblank.h>
> > @@ -27,7 +29,6 @@
> >  #include "mtk_drm_ddp.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  
> >  #define DRIVER_NAME "mediatek"
> > @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
> >  	return 0;
> >  }
> >  
> > +static struct drm_framebuffer *
> > +mtk_drm_mode_fb_create(struct drm_device *dev,
> > +		       struct drm_file *file,
> > +		       const struct drm_mode_fb_cmd2 *cmd)
> > +{
> > +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > +
> > +	if (info->num_planes != 1)
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	return drm_gem_fb_create(dev, file, cmd);
> > +}
> > +
> >  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
> >  	.fb_create = mtk_drm_mode_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > deleted file mode 100644
> > index 3f230a28a2dc..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ /dev/null
> > @@ -1,92 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0-only
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#include <linux/dma-buf.h>
> > -#include <linux/dma-resv.h>
> > -
> > -#include <drm/drm_modeset_helper.h>
> > -#include <drm/drm_fb_helper.h>
> > -#include <drm/drm_fourcc.h>
> > -#include <drm/drm_gem.h>
> > -#include <drm/drm_gem_framebuffer_helper.h>
> > -
> > -#include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> > -#include "mtk_drm_gem.h"
> > -
> > -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> > -	.create_handle = drm_gem_fb_create_handle,
> > -	.destroy = drm_gem_fb_destroy,
> > -};
> > -
> > -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> > -					const struct drm_mode_fb_cmd2 *mode,
> > -					struct drm_gem_object *obj)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> > -	struct drm_framebuffer *fb;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > -	if (!fb)
> > -		return ERR_PTR(-ENOMEM);
> > -
> > -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> > -
> > -	fb->obj[0] = obj;
> > -
> > -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> > -	if (ret) {
> > -		DRM_ERROR("failed to initialize framebuffer\n");
> > -		kfree(fb);
> > -		return ERR_PTR(ret);
> > -	}
> > -
> > -	return fb;
> > -}
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > -	struct drm_framebuffer *fb;
> > -	struct drm_gem_object *gem;
> > -	unsigned int width = cmd->width;
> > -	unsigned int height = cmd->height;
> > -	unsigned int size, bpp;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> > -	if (!gem)
> > -		return ERR_PTR(-ENOENT);
> > -
> > -	bpp = info->cpp[0];
> > -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> > -	size += cmd->offsets[0];
> > -
> > -	if (gem->size < size) {
> > -		ret = -EINVAL;
> > -		goto unreference;
> > -	}
> > -
> > -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> > -	if (IS_ERR(fb)) {
> > -		ret = PTR_ERR(fb);
> > -		goto unreference;
> > -	}
> > -
> > -	return fb;
> > -
> > -unreference:
> > -	drm_gem_object_put_unlocked(gem);
> > -	return ERR_PTR(ret);
> > -}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > deleted file mode 100644
> > index eb64d26001c6..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#ifndef MTK_DRM_FB_H
> > -#define MTK_DRM_FB_H
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd);
> > -
> > -#endif /* MTK_DRM_FB_H */
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > index 3b0cc91c7023..540ef2faa40a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > @@ -13,7 +13,6 @@
> >  #include "mtk_drm_crtc.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  #include "mtk_drm_plane.h"
> >  
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create
@ 2019-11-22 17:09       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-22 17:09 UTC (permalink / raw)
  To: CK Hu
  Cc: Daniel Vetter, Intel Graphics Development, DRI Development,
	linux-mediatek, Philipp Zabel, Matthias Brugger,
	linux-arm-kernel

On Fri, Nov 22, 2019 at 03:42:39PM +0800, CK Hu wrote:
> Hi, Daniel:
> 
> On Fri, 2019-11-15 at 10:21 +0100, Daniel Vetter wrote:
> > Aside: There's a few other fb_create implementations which
> > simply check for valid buffer format (or an approximation thereof),
> > and then call drm_gem_fb_create. For atomic drivers at least we could
> > walk all planes and make sure the format/modifier combo is valid,
> > and remove even more code.
> > 
> > For non-atomic drivers that's not possible, since the format list for
> > the primary buffer might be garbage (and most likely it is).
> > 
> > Also delete mtk_drm_fb.[hc] since it would now only contain one
> > function.
> 
> Acked-by: CK Hu <ck.hu@mediatek.com>

Pushed to drm-misc-next, thanks for taking a look.
-Daniel

> 
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> > Cc: CK Hu <ck.hu@mediatek.com>
> > Cc: Philipp Zabel <p.zabel@pengutronix.de>
> > Cc: Matthias Brugger <matthias.bgg@gmail.com>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-mediatek@lists.infradead.org
> > ---
> >  drivers/gpu/drm/mediatek/mtk_drm_drv.c   | 16 ++++-
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.c    | 92 ------------------------
> >  drivers/gpu/drm/mediatek/mtk_drm_fb.h    | 13 ----
> >  drivers/gpu/drm/mediatek/mtk_drm_plane.c |  1 -
> >  4 files changed, 15 insertions(+), 107 deletions(-)
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.c
> >  delete mode 100644 drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > 
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > index 84d14213d992..2b1c122066ea 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
> > @@ -16,8 +16,10 @@
> >  #include <drm/drm_atomic_helper.h>
> >  #include <drm/drm_drv.h>
> >  #include <drm/drm_fb_helper.h>
> > +#include <drm/drm_fourcc.h>
> >  #include <drm/drm_gem.h>
> >  #include <drm/drm_gem_cma_helper.h>
> > +#include <drm/drm_gem_framebuffer_helper.h>
> >  #include <drm/drm_of.h>
> >  #include <drm/drm_probe_helper.h>
> >  #include <drm/drm_vblank.h>
> > @@ -27,7 +29,6 @@
> >  #include "mtk_drm_ddp.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  
> >  #define DRIVER_NAME "mediatek"
> > @@ -115,6 +116,19 @@ static int mtk_atomic_commit(struct drm_device *drm,
> >  	return 0;
> >  }
> >  
> > +static struct drm_framebuffer *
> > +mtk_drm_mode_fb_create(struct drm_device *dev,
> > +		       struct drm_file *file,
> > +		       const struct drm_mode_fb_cmd2 *cmd)
> > +{
> > +	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > +
> > +	if (info->num_planes != 1)
> > +		return ERR_PTR(-EINVAL);
> > +
> > +	return drm_gem_fb_create(dev, file, cmd);
> > +}
> > +
> >  static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = {
> >  	.fb_create = mtk_drm_mode_fb_create,
> >  	.atomic_check = drm_atomic_helper_check,
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.c b/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > deleted file mode 100644
> > index 3f230a28a2dc..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.c
> > +++ /dev/null
> > @@ -1,92 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.0-only
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#include <linux/dma-buf.h>
> > -#include <linux/dma-resv.h>
> > -
> > -#include <drm/drm_modeset_helper.h>
> > -#include <drm/drm_fb_helper.h>
> > -#include <drm/drm_fourcc.h>
> > -#include <drm/drm_gem.h>
> > -#include <drm/drm_gem_framebuffer_helper.h>
> > -
> > -#include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> > -#include "mtk_drm_gem.h"
> > -
> > -static const struct drm_framebuffer_funcs mtk_drm_fb_funcs = {
> > -	.create_handle = drm_gem_fb_create_handle,
> > -	.destroy = drm_gem_fb_destroy,
> > -};
> > -
> > -static struct drm_framebuffer *mtk_drm_framebuffer_init(struct drm_device *dev,
> > -					const struct drm_mode_fb_cmd2 *mode,
> > -					struct drm_gem_object *obj)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, mode);
> > -	struct drm_framebuffer *fb;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
> > -	if (!fb)
> > -		return ERR_PTR(-ENOMEM);
> > -
> > -	drm_helper_mode_fill_fb_struct(dev, fb, mode);
> > -
> > -	fb->obj[0] = obj;
> > -
> > -	ret = drm_framebuffer_init(dev, fb, &mtk_drm_fb_funcs);
> > -	if (ret) {
> > -		DRM_ERROR("failed to initialize framebuffer\n");
> > -		kfree(fb);
> > -		return ERR_PTR(ret);
> > -	}
> > -
> > -	return fb;
> > -}
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd)
> > -{
> > -	const struct drm_format_info *info = drm_get_format_info(dev, cmd);
> > -	struct drm_framebuffer *fb;
> > -	struct drm_gem_object *gem;
> > -	unsigned int width = cmd->width;
> > -	unsigned int height = cmd->height;
> > -	unsigned int size, bpp;
> > -	int ret;
> > -
> > -	if (info->num_planes != 1)
> > -		return ERR_PTR(-EINVAL);
> > -
> > -	gem = drm_gem_object_lookup(file, cmd->handles[0]);
> > -	if (!gem)
> > -		return ERR_PTR(-ENOENT);
> > -
> > -	bpp = info->cpp[0];
> > -	size = (height - 1) * cmd->pitches[0] + width * bpp;
> > -	size += cmd->offsets[0];
> > -
> > -	if (gem->size < size) {
> > -		ret = -EINVAL;
> > -		goto unreference;
> > -	}
> > -
> > -	fb = mtk_drm_framebuffer_init(dev, cmd, gem);
> > -	if (IS_ERR(fb)) {
> > -		ret = PTR_ERR(fb);
> > -		goto unreference;
> > -	}
> > -
> > -	return fb;
> > -
> > -unreference:
> > -	drm_gem_object_put_unlocked(gem);
> > -	return ERR_PTR(ret);
> > -}
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_fb.h b/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > deleted file mode 100644
> > index eb64d26001c6..000000000000
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_fb.h
> > +++ /dev/null
> > @@ -1,13 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -/*
> > - * Copyright (c) 2015 MediaTek Inc.
> > - */
> > -
> > -#ifndef MTK_DRM_FB_H
> > -#define MTK_DRM_FB_H
> > -
> > -struct drm_framebuffer *mtk_drm_mode_fb_create(struct drm_device *dev,
> > -					       struct drm_file *file,
> > -					       const struct drm_mode_fb_cmd2 *cmd);
> > -
> > -#endif /* MTK_DRM_FB_H */
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > index 3b0cc91c7023..540ef2faa40a 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c
> > @@ -13,7 +13,6 @@
> >  #include "mtk_drm_crtc.h"
> >  #include "mtk_drm_ddp_comp.h"
> >  #include "mtk_drm_drv.h"
> > -#include "mtk_drm_fb.h"
> >  #include "mtk_drm_gem.h"
> >  #include "mtk_drm_plane.h"
> >  
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
  2019-11-19 21:22       ` Daniel Vetter
  (?)
  (?)
@ 2019-11-23  8:49         ` Sam Ravnborg
  -1 siblings, 0 replies; 89+ messages in thread
From: Sam Ravnborg @ 2019-11-23  8:49 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, DRI Development, Ludovic Desroches,
	Boris Brezillon, Daniel Vetter, linux-arm-kernel

Hi Daniel.
On Tue, Nov 19, 2019 at 10:22:31PM +0100, Daniel Vetter wrote:
> On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> > On Fri, 15 Nov 2019 10:21:14 +0100
> > Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > 
> > > Spotted while looking through them all.
> > > 
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Boris Brezillon <bbrezillon@kernel.org>
> > 
> > Acked-by: Boris Brezillon <boris.brezillon@collabora.com>
> 
> Merged, thanks for taking a look.

Hi Daniel, thanks for merging this.

	Sam

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-23  8:49         ` Sam Ravnborg
  0 siblings, 0 replies; 89+ messages in thread
From: Sam Ravnborg @ 2019-11-23  8:49 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, DRI Development, Ludovic Desroches,
	Boris Brezillon, Daniel Vetter, linux-arm-kernel

Hi Daniel.
On Tue, Nov 19, 2019 at 10:22:31PM +0100, Daniel Vetter wrote:
> On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> > On Fri, 15 Nov 2019 10:21:14 +0100
> > Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > 
> > > Spotted while looking through them all.
> > > 
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Boris Brezillon <bbrezillon@kernel.org>
> > 
> > Acked-by: Boris Brezillon <boris.brezillon@collabora.com>
> 
> Merged, thanks for taking a look.

Hi Daniel, thanks for merging this.

	Sam

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

* Re: [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-23  8:49         ` Sam Ravnborg
  0 siblings, 0 replies; 89+ messages in thread
From: Sam Ravnborg @ 2019-11-23  8:49 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, DRI Development,
	Ludovic Desroches, Boris Brezillon, Daniel Vetter,
	linux-arm-kernel

Hi Daniel.
On Tue, Nov 19, 2019 at 10:22:31PM +0100, Daniel Vetter wrote:
> On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> > On Fri, 15 Nov 2019 10:21:14 +0100
> > Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > 
> > > Spotted while looking through them all.
> > > 
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Boris Brezillon <bbrezillon@kernel.org>
> > 
> > Acked-by: Boris Brezillon <boris.brezillon@collabora.com>
> 
> Merged, thanks for taking a look.

Hi Daniel, thanks for merging this.

	Sam
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 2/8] drm/atmel: ditch fb_create wrapper
@ 2019-11-23  8:49         ` Sam Ravnborg
  0 siblings, 0 replies; 89+ messages in thread
From: Sam Ravnborg @ 2019-11-23  8:49 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: Alexandre Belloni, Boris Brezillon, Daniel Vetter,
	Intel Graphics Development, Nicolas Ferre, DRI Development,
	Ludovic Desroches, Daniel Vetter, linux-arm-kernel

Hi Daniel.
On Tue, Nov 19, 2019 at 10:22:31PM +0100, Daniel Vetter wrote:
> On Fri, Nov 15, 2019 at 10:33:24AM +0100, Boris Brezillon wrote:
> > On Fri, 15 Nov 2019 10:21:14 +0100
> > Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > 
> > > Spotted while looking through them all.
> > > 
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Boris Brezillon <bbrezillon@kernel.org>
> > 
> > Acked-by: Boris Brezillon <boris.brezillon@collabora.com>
> 
> Merged, thanks for taking a look.

Hi Daniel, thanks for merging this.

	Sam
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
  2019-11-15  9:21   ` Daniel Vetter
  (?)
  (?)
@ 2019-11-27 11:45     ` Andrzej Pietrasiewicz
  -1 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 11:45 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org

I carried out limited testing with modetest on a rockpi4,
using this command:

for i in `./modetest -c | grep ^[[:space:]]*[1-9][0-9]*x[1-9][0-9]* | cut -f3 
-d" " | grep -v i$ | uniq`; do ./modetest -s41:$i -C; done

All modes (excluding those whose names end with an "i", e.g. 1920x1080i)
produced sensible output which seems no different to what is produced
when the patch in question is not applied.

If such a test scope is acceptable, you can add my

Tested-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>

> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {
> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];
> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,
>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 11:45     ` Andrzej Pietrasiewicz
  0 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 11:45 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org

I carried out limited testing with modetest on a rockpi4,
using this command:

for i in `./modetest -c | grep ^[[:space:]]*[1-9][0-9]*x[1-9][0-9]* | cut -f3 
-d" " | grep -v i$ | uniq`; do ./modetest -s41:$i -C; done

All modes (excluding those whose names end with an "i", e.g. 1920x1080i)
produced sensible output which seems no different to what is produced
when the patch in question is not applied.

If such a test scope is acceptable, you can add my

Tested-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>

> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {
> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];
> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,
>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 11:45     ` Andrzej Pietrasiewicz
  0 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 11:45 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org

I carried out limited testing with modetest on a rockpi4,
using this command:

for i in `./modetest -c | grep ^[[:space:]]*[1-9][0-9]*x[1-9][0-9]* | cut -f3 
-d" " | grep -v i$ | uniq`; do ./modetest -s41:$i -C; done

All modes (excluding those whose names end with an "i", e.g. 1920x1080i)
produced sensible output which seems no different to what is produced
when the patch in question is not applied.

If such a test scope is acceptable, you can add my

Tested-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>

> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {
> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];
> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,
>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [Intel-gfx] [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 11:45     ` Andrzej Pietrasiewicz
  0 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 11:45 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org

I carried out limited testing with modetest on a rockpi4,
using this command:

for i in `./modetest -c | grep ^[[:space:]]*[1-9][0-9]*x[1-9][0-9]* | cut -f3 
-d" " | grep -v i$ | uniq`; do ./modetest -s41:$i -C; done

All modes (excluding those whose names end with an "i", e.g. 1920x1080i)
produced sensible output which seems no different to what is produced
when the patch in question is not applied.

If such a test scope is acceptable, you can add my

Tested-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>

> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {
> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];
> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,
>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
  2019-11-15  9:21   ` Daniel Vetter
  (?)
@ 2019-11-27 17:33     ` Andrzej Pietrasiewicz
  -1 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 17:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

After applying this patch there are some slight differences
in the effective behavior of the code.

I can't tell if they are important, please see below.

Andrzej

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org
> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {

drm_gem_fb_create_with_funcs(), if no error happens,
iterates exactly info->num_planes times,
but the function being removed here iterates
min_t(int, info->num_planes, 3) times.

Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];

This computation in drm_gem_fb_create_with_funcs looks like this:

		min_size = (height - 1) * mode_cmd->pitches[i]
			 + drm_format_info_min_pitch(info, i, width)
			 + mode_cmd->offsets[i];

Perhaps that's actually the same thing?

> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,

That way you leave out the ->dirty() callback from
static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

I'd say instead:

struct drm_framebuffer *
rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
		       const struct drm_mode_fb_cmd2 *mode_cmd)
{
	return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
					    &rockchip_drm_fb_funcs);
}

and then

+	.fb_create = rockchip_gem_fb_create,

>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 17:33     ` Andrzej Pietrasiewicz
  0 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 17:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

After applying this patch there are some slight differences
in the effective behavior of the code.

I can't tell if they are important, please see below.

Andrzej

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org
> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {

drm_gem_fb_create_with_funcs(), if no error happens,
iterates exactly info->num_planes times,
but the function being removed here iterates
min_t(int, info->num_planes, 3) times.

Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];

This computation in drm_gem_fb_create_with_funcs looks like this:

		min_size = (height - 1) * mode_cmd->pitches[i]
			 + drm_format_info_min_pitch(info, i, width)
			 + mode_cmd->offsets[i];

Perhaps that's actually the same thing?

> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,

That way you leave out the ->dirty() callback from
static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

I'd say instead:

struct drm_framebuffer *
rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
		       const struct drm_mode_fb_cmd2 *mode_cmd)
{
	return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
					    &rockchip_drm_fb_funcs);
}

and then

+	.fb_create = rockchip_gem_fb_create,

>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [Intel-gfx] [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 17:33     ` Andrzej Pietrasiewicz
  0 siblings, 0 replies; 89+ messages in thread
From: Andrzej Pietrasiewicz @ 2019-11-27 17:33 UTC (permalink / raw)
  To: Daniel Vetter, DRI Development
  Cc: linux-rockchip, Intel Graphics Development, linux-arm-kernel,
	Daniel Vetter

Hi Daniel,

After applying this patch there are some slight differences
in the effective behavior of the code.

I can't tell if they are important, please see below.

Andrzej

W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> If rockchip would switch over to the generic fbdev setup we could
> grabage collect even more of all this code (all of the remaining fb
> handling code really).
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org
> ---
>   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
>   1 file changed, 1 insertion(+), 53 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> index ca01234c037c..081dbdaa0b07 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
>   	return fb;
>   }
>   
> -static struct drm_framebuffer *
> -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> -			const struct drm_mode_fb_cmd2 *mode_cmd)
> -{
> -	const struct drm_format_info *info = drm_get_format_info(dev,
> -								 mode_cmd);
> -	struct drm_framebuffer *fb;
> -	struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> -	struct drm_gem_object *obj;
> -	int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> -	int ret;
> -	int i;
> -
> -	for (i = 0; i < num_planes; i++) {

drm_gem_fb_create_with_funcs(), if no error happens,
iterates exactly info->num_planes times,
but the function being removed here iterates
min_t(int, info->num_planes, 3) times.

Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

> -		unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> -		unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> -		unsigned int min_size;
> -
> -		obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> -		if (!obj) {
> -			DRM_DEV_ERROR(dev->dev,
> -				      "Failed to lookup GEM object\n");
> -			ret = -ENXIO;
> -			goto err_gem_object_unreference;
> -		}
> -
> -		min_size = (height - 1) * mode_cmd->pitches[i] +
> -			mode_cmd->offsets[i] +
> -			width * info->cpp[i];

This computation in drm_gem_fb_create_with_funcs looks like this:

		min_size = (height - 1) * mode_cmd->pitches[i]
			 + drm_format_info_min_pitch(info, i, width)
			 + mode_cmd->offsets[i];

Perhaps that's actually the same thing?

> -
> -		if (obj->size < min_size) {
> -			drm_gem_object_put_unlocked(obj);
> -			ret = -EINVAL;
> -			goto err_gem_object_unreference;
> -		}
> -		objs[i] = obj;
> -	}
> -
> -	fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> -	if (IS_ERR(fb)) {
> -		ret = PTR_ERR(fb);
> -		goto err_gem_object_unreference;
> -	}
> -
> -	return fb;
> -
> -err_gem_object_unreference:
> -	for (i--; i >= 0; i--)
> -		drm_gem_object_put_unlocked(objs[i]);
> -	return ERR_PTR(ret);
> -}
> -
>   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
>   	.atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
>   };
>   
>   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> -	.fb_create = rockchip_user_fb_create,
> +	.fb_create = drm_gem_fb_create,

That way you leave out the ->dirty() callback from
static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

I'd say instead:

struct drm_framebuffer *
rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
		       const struct drm_mode_fb_cmd2 *mode_cmd)
{
	return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
					    &rockchip_drm_fb_funcs);
}

and then

+	.fb_create = rockchip_gem_fb_create,

>   	.output_poll_changed = drm_fb_helper_output_poll_changed,
>   	.atomic_check = drm_atomic_helper_check,
>   	.atomic_commit = drm_atomic_helper_commit,
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
  2019-11-27 17:33     ` Andrzej Pietrasiewicz
  (?)
@ 2019-11-27 17:54       ` Daniel Vetter
  -1 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-27 17:54 UTC (permalink / raw)
  To: Andrzej Pietrasiewicz
  Cc: open list:ARM/Rockchip SoC...,
	Intel Graphics Development, Linux ARM, DRI Development,
	Daniel Vetter

On Wed, Nov 27, 2019 at 6:33 PM Andrzej Pietrasiewicz
<andrzej.p@collabora.com> wrote:
>
> Hi Daniel,
>
> After applying this patch there are some slight differences
> in the effective behavior of the code.
>
> I can't tell if they are important, please see below.
>
> Andrzej
>
> W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> > If rockchip would switch over to the generic fbdev setup we could
> > grabage collect even more of all this code (all of the remaining fb
> > handling code really).
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sandy Huang <hjc@rock-chips.com>
> > Cc: "Heiko Stübner" <heiko@sntech.de>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-rockchip@lists.infradead.org
> > ---
> >   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
> >   1 file changed, 1 insertion(+), 53 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > index ca01234c037c..081dbdaa0b07 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
> >       return fb;
> >   }
> >
> > -static struct drm_framebuffer *
> > -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> > -                     const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -     const struct drm_format_info *info = drm_get_format_info(dev,
> > -                                                              mode_cmd);
> > -     struct drm_framebuffer *fb;
> > -     struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> > -     struct drm_gem_object *obj;
> > -     int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> > -     int ret;
> > -     int i;
> > -
> > -     for (i = 0; i < num_planes; i++) {
>
> drm_gem_fb_create_with_funcs(), if no error happens,
> iterates exactly info->num_planes times,
> but the function being removed here iterates
> min_t(int, info->num_planes, 3) times.
>
> Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

rockchip only supports fourcc codes with at most 3 planes. Now we're
not checking for that here, it'll only be caught later on in the
ATOMIC ioctl. So would be nice to fix, but it's a preexisting bug (the
todo.rst patch has an idea how to fix this for good). So really
doesn't matter whether we fill out the 4th plane or not. Also iirc we
don't have any fourcc code with 4 planes right now.

> > -             unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> > -             unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> > -             unsigned int min_size;
> > -
> > -             obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> > -             if (!obj) {
> > -                     DRM_DEV_ERROR(dev->dev,
> > -                                   "Failed to lookup GEM object\n");
> > -                     ret = -ENXIO;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -
> > -             min_size = (height - 1) * mode_cmd->pitches[i] +
> > -                     mode_cmd->offsets[i] +
> > -                     width * info->cpp[i];
>
> This computation in drm_gem_fb_create_with_funcs looks like this:
>
>                 min_size = (height - 1) * mode_cmd->pitches[i]
>                          + drm_format_info_min_pitch(info, i, width)
>                          + mode_cmd->offsets[i];
>
> Perhaps that's actually the same thing?
>
> > -
> > -             if (obj->size < min_size) {
> > -                     drm_gem_object_put_unlocked(obj);
> > -                     ret = -EINVAL;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -             objs[i] = obj;
> > -     }
> > -
> > -     fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> > -     if (IS_ERR(fb)) {
> > -             ret = PTR_ERR(fb);
> > -             goto err_gem_object_unreference;
> > -     }
> > -
> > -     return fb;
> > -
> > -err_gem_object_unreference:
> > -     for (i--; i >= 0; i--)
> > -             drm_gem_object_put_unlocked(objs[i]);
> > -     return ERR_PTR(ret);
> > -}
> > -
> >   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
> >       .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
> >   };
> >
> >   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> > -     .fb_create = rockchip_user_fb_create,
> > +     .fb_create = drm_gem_fb_create,
>
> That way you leave out the ->dirty() callback from
> static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

Oops indeed. Subject of this patch is right, but the actual patch
isn't, this should be drm_gem_fb_create_with_dirty, then it's a 100%
matching replacement. Thanks for catching this, I'll send out an
updated patch.
-Daniel

>
> I'd say instead:
>
> struct drm_framebuffer *
> rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
>                        const struct drm_mode_fb_cmd2 *mode_cmd)
> {
>         return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
>                                             &rockchip_drm_fb_funcs);
> }
>
> and then
>
> +       .fb_create = rockchip_gem_fb_create,
>
> >       .output_poll_changed = drm_fb_helper_output_poll_changed,
> >       .atomic_check = drm_atomic_helper_check,
> >       .atomic_commit = drm_atomic_helper_commit,
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 17:54       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-27 17:54 UTC (permalink / raw)
  To: Andrzej Pietrasiewicz
  Cc: open list:ARM/Rockchip SoC...,
	Intel Graphics Development, Linux ARM, DRI Development,
	Daniel Vetter

On Wed, Nov 27, 2019 at 6:33 PM Andrzej Pietrasiewicz
<andrzej.p@collabora.com> wrote:
>
> Hi Daniel,
>
> After applying this patch there are some slight differences
> in the effective behavior of the code.
>
> I can't tell if they are important, please see below.
>
> Andrzej
>
> W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> > If rockchip would switch over to the generic fbdev setup we could
> > grabage collect even more of all this code (all of the remaining fb
> > handling code really).
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sandy Huang <hjc@rock-chips.com>
> > Cc: "Heiko Stübner" <heiko@sntech.de>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-rockchip@lists.infradead.org
> > ---
> >   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
> >   1 file changed, 1 insertion(+), 53 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > index ca01234c037c..081dbdaa0b07 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
> >       return fb;
> >   }
> >
> > -static struct drm_framebuffer *
> > -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> > -                     const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -     const struct drm_format_info *info = drm_get_format_info(dev,
> > -                                                              mode_cmd);
> > -     struct drm_framebuffer *fb;
> > -     struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> > -     struct drm_gem_object *obj;
> > -     int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> > -     int ret;
> > -     int i;
> > -
> > -     for (i = 0; i < num_planes; i++) {
>
> drm_gem_fb_create_with_funcs(), if no error happens,
> iterates exactly info->num_planes times,
> but the function being removed here iterates
> min_t(int, info->num_planes, 3) times.
>
> Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

rockchip only supports fourcc codes with at most 3 planes. Now we're
not checking for that here, it'll only be caught later on in the
ATOMIC ioctl. So would be nice to fix, but it's a preexisting bug (the
todo.rst patch has an idea how to fix this for good). So really
doesn't matter whether we fill out the 4th plane or not. Also iirc we
don't have any fourcc code with 4 planes right now.

> > -             unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> > -             unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> > -             unsigned int min_size;
> > -
> > -             obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> > -             if (!obj) {
> > -                     DRM_DEV_ERROR(dev->dev,
> > -                                   "Failed to lookup GEM object\n");
> > -                     ret = -ENXIO;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -
> > -             min_size = (height - 1) * mode_cmd->pitches[i] +
> > -                     mode_cmd->offsets[i] +
> > -                     width * info->cpp[i];
>
> This computation in drm_gem_fb_create_with_funcs looks like this:
>
>                 min_size = (height - 1) * mode_cmd->pitches[i]
>                          + drm_format_info_min_pitch(info, i, width)
>                          + mode_cmd->offsets[i];
>
> Perhaps that's actually the same thing?
>
> > -
> > -             if (obj->size < min_size) {
> > -                     drm_gem_object_put_unlocked(obj);
> > -                     ret = -EINVAL;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -             objs[i] = obj;
> > -     }
> > -
> > -     fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> > -     if (IS_ERR(fb)) {
> > -             ret = PTR_ERR(fb);
> > -             goto err_gem_object_unreference;
> > -     }
> > -
> > -     return fb;
> > -
> > -err_gem_object_unreference:
> > -     for (i--; i >= 0; i--)
> > -             drm_gem_object_put_unlocked(objs[i]);
> > -     return ERR_PTR(ret);
> > -}
> > -
> >   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
> >       .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
> >   };
> >
> >   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> > -     .fb_create = rockchip_user_fb_create,
> > +     .fb_create = drm_gem_fb_create,
>
> That way you leave out the ->dirty() callback from
> static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

Oops indeed. Subject of this patch is right, but the actual patch
isn't, this should be drm_gem_fb_create_with_dirty, then it's a 100%
matching replacement. Thanks for catching this, I'll send out an
updated patch.
-Daniel

>
> I'd say instead:
>
> struct drm_framebuffer *
> rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
>                        const struct drm_mode_fb_cmd2 *mode_cmd)
> {
>         return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
>                                             &rockchip_drm_fb_funcs);
> }
>
> and then
>
> +       .fb_create = rockchip_gem_fb_create,
>
> >       .output_poll_changed = drm_fb_helper_output_poll_changed,
> >       .atomic_check = drm_atomic_helper_check,
> >       .atomic_commit = drm_atomic_helper_commit,
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [Intel-gfx] [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty
@ 2019-11-27 17:54       ` Daniel Vetter
  0 siblings, 0 replies; 89+ messages in thread
From: Daniel Vetter @ 2019-11-27 17:54 UTC (permalink / raw)
  To: Andrzej Pietrasiewicz
  Cc: open list:ARM/Rockchip SoC...,
	Intel Graphics Development, Linux ARM, DRI Development,
	Daniel Vetter

On Wed, Nov 27, 2019 at 6:33 PM Andrzej Pietrasiewicz
<andrzej.p@collabora.com> wrote:
>
> Hi Daniel,
>
> After applying this patch there are some slight differences
> in the effective behavior of the code.
>
> I can't tell if they are important, please see below.
>
> Andrzej
>
> W dniu 15.11.2019 o 10:21, Daniel Vetter pisze:
> > If rockchip would switch over to the generic fbdev setup we could
> > grabage collect even more of all this code (all of the remaining fb
> > handling code really).
> >
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> > Cc: Sandy Huang <hjc@rock-chips.com>
> > Cc: "Heiko Stübner" <heiko@sntech.de>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Cc: linux-rockchip@lists.infradead.org
> > ---
> >   drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 54 +---------------------
> >   1 file changed, 1 insertion(+), 53 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > index ca01234c037c..081dbdaa0b07 100644
> > --- a/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > +++ b/drivers/gpu/drm/rockchip/rockchip_drm_fb.c
> > @@ -53,64 +53,12 @@ rockchip_fb_alloc(struct drm_device *dev, const struct drm_mode_fb_cmd2 *mode_cm
> >       return fb;
> >   }
> >
> > -static struct drm_framebuffer *
> > -rockchip_user_fb_create(struct drm_device *dev, struct drm_file *file_priv,
> > -                     const struct drm_mode_fb_cmd2 *mode_cmd)
> > -{
> > -     const struct drm_format_info *info = drm_get_format_info(dev,
> > -                                                              mode_cmd);
> > -     struct drm_framebuffer *fb;
> > -     struct drm_gem_object *objs[ROCKCHIP_MAX_FB_BUFFER];
> > -     struct drm_gem_object *obj;
> > -     int num_planes = min_t(int, info->num_planes, ROCKCHIP_MAX_FB_BUFFER);
> > -     int ret;
> > -     int i;
> > -
> > -     for (i = 0; i < num_planes; i++) {
>
> drm_gem_fb_create_with_funcs(), if no error happens,
> iterates exactly info->num_planes times,
> but the function being removed here iterates
> min_t(int, info->num_planes, 3) times.
>
> Is it ensured earlier elsewhere that info->num_planes does not exceed 3?

rockchip only supports fourcc codes with at most 3 planes. Now we're
not checking for that here, it'll only be caught later on in the
ATOMIC ioctl. So would be nice to fix, but it's a preexisting bug (the
todo.rst patch has an idea how to fix this for good). So really
doesn't matter whether we fill out the 4th plane or not. Also iirc we
don't have any fourcc code with 4 planes right now.

> > -             unsigned int width = mode_cmd->width / (i ? info->hsub : 1);
> > -             unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
> > -             unsigned int min_size;
> > -
> > -             obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[i]);
> > -             if (!obj) {
> > -                     DRM_DEV_ERROR(dev->dev,
> > -                                   "Failed to lookup GEM object\n");
> > -                     ret = -ENXIO;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -
> > -             min_size = (height - 1) * mode_cmd->pitches[i] +
> > -                     mode_cmd->offsets[i] +
> > -                     width * info->cpp[i];
>
> This computation in drm_gem_fb_create_with_funcs looks like this:
>
>                 min_size = (height - 1) * mode_cmd->pitches[i]
>                          + drm_format_info_min_pitch(info, i, width)
>                          + mode_cmd->offsets[i];
>
> Perhaps that's actually the same thing?
>
> > -
> > -             if (obj->size < min_size) {
> > -                     drm_gem_object_put_unlocked(obj);
> > -                     ret = -EINVAL;
> > -                     goto err_gem_object_unreference;
> > -             }
> > -             objs[i] = obj;
> > -     }
> > -
> > -     fb = rockchip_fb_alloc(dev, mode_cmd, objs, i);
> > -     if (IS_ERR(fb)) {
> > -             ret = PTR_ERR(fb);
> > -             goto err_gem_object_unreference;
> > -     }
> > -
> > -     return fb;
> > -
> > -err_gem_object_unreference:
> > -     for (i--; i >= 0; i--)
> > -             drm_gem_object_put_unlocked(objs[i]);
> > -     return ERR_PTR(ret);
> > -}
> > -
> >   static const struct drm_mode_config_helper_funcs rockchip_mode_config_helpers = {
> >       .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm,
> >   };
> >
> >   static const struct drm_mode_config_funcs rockchip_drm_mode_config_funcs = {
> > -     .fb_create = rockchip_user_fb_create,
> > +     .fb_create = drm_gem_fb_create,
>
> That way you leave out the ->dirty() callback from
> static const struct drm_framebuffer_funcs rockchip_drm_fb_funcs

Oops indeed. Subject of this patch is right, but the actual patch
isn't, this should be drm_gem_fb_create_with_dirty, then it's a 100%
matching replacement. Thanks for catching this, I'll send out an
updated patch.
-Daniel

>
> I'd say instead:
>
> struct drm_framebuffer *
> rockchip_gem_fb_create(struct drm_device *dev, struct drm_file *file,
>                        const struct drm_mode_fb_cmd2 *mode_cmd)
> {
>         return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
>                                             &rockchip_drm_fb_funcs);
> }
>
> and then
>
> +       .fb_create = rockchip_gem_fb_create,
>
> >       .output_poll_changed = drm_fb_helper_output_poll_changed,
> >       .atomic_check = drm_atomic_helper_check,
> >       .atomic_commit = drm_atomic_helper_commit,
> >
>


-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

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

end of thread, other threads:[~2019-11-27 17:54 UTC | newest]

Thread overview: 89+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-15  9:21 [PATCH 0/8] fb_create drive-through cleanups Daniel Vetter
2019-11-15  9:21 ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21 ` Daniel Vetter
2019-11-15  9:21 ` [PATCH 1/8] drm/fb: More paranoia in addfb checks Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15 10:49   ` Pekka Paalanen
2019-11-15 10:49     ` [Intel-gfx] " Pekka Paalanen
2019-11-15 12:44   ` Ville Syrjälä
2019-11-15 12:44     ` Ville Syrjälä
2019-11-15 15:26     ` Daniel Vetter
2019-11-15 15:26       ` Daniel Vetter
2019-11-15  9:21 ` [PATCH 2/8] drm/atmel: ditch fb_create wrapper Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15  9:33   ` Boris Brezillon
2019-11-15  9:33     ` [Intel-gfx] " Boris Brezillon
2019-11-15  9:33     ` Boris Brezillon
2019-11-19 21:22     ` Daniel Vetter
2019-11-19 21:22       ` [Intel-gfx] " Daniel Vetter
2019-11-19 21:22       ` Daniel Vetter
2019-11-23  8:49       ` Sam Ravnborg
2019-11-23  8:49         ` [Intel-gfx] " Sam Ravnborg
2019-11-23  8:49         ` Sam Ravnborg
2019-11-23  8:49         ` Sam Ravnborg
2019-11-15  9:21 ` [PATCH 3/8] drm/mediatek: don't open-code drm_gem_fb_create Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-22  7:42   ` CK Hu
2019-11-22  7:42     ` [Intel-gfx] " CK Hu
2019-11-22  7:42     ` CK Hu
2019-11-22  7:42     ` CK Hu
2019-11-22 17:09     ` Daniel Vetter
2019-11-22 17:09       ` [Intel-gfx] " Daniel Vetter
2019-11-22 17:09       ` Daniel Vetter
2019-11-22 17:09       ` Daniel Vetter
2019-11-22 17:09       ` Daniel Vetter
2019-11-15  9:21 ` [PATCH 4/8] drm/rockchip: Use drm_gem_fb_create_with_dirty Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-27 11:45   ` Andrzej Pietrasiewicz
2019-11-27 11:45     ` [Intel-gfx] " Andrzej Pietrasiewicz
2019-11-27 11:45     ` Andrzej Pietrasiewicz
2019-11-27 11:45     ` Andrzej Pietrasiewicz
2019-11-27 17:33   ` Andrzej Pietrasiewicz
2019-11-27 17:33     ` [Intel-gfx] " Andrzej Pietrasiewicz
2019-11-27 17:33     ` Andrzej Pietrasiewicz
2019-11-27 17:54     ` Daniel Vetter
2019-11-27 17:54       ` [Intel-gfx] " Daniel Vetter
2019-11-27 17:54       ` Daniel Vetter
2019-11-15  9:21 ` [PATCH 5/8] drm/tilcdc: Drop drm_gem_fb_create wrapper Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-15 13:21   ` Jyri Sarha
2019-11-15 13:21     ` [Intel-gfx] " Jyri Sarha
2019-11-15 13:21     ` Jyri Sarha
2019-11-19 21:25     ` Daniel Vetter
2019-11-19 21:25       ` [Intel-gfx] " Daniel Vetter
2019-11-19 21:25       ` Daniel Vetter
2019-11-15  9:21 ` [PATCH 6/8] drm/xen: Simplify fb_create Daniel Vetter
2019-11-15  9:21   ` [Xen-devel] " Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15 10:33   ` Oleksandr Andrushchenko
2019-11-15 10:33     ` [Xen-devel] " Oleksandr Andrushchenko
2019-11-15 10:33     ` [Intel-gfx] " Oleksandr Andrushchenko
2019-11-15 10:33     ` Oleksandr Andrushchenko
2019-11-19 21:25     ` Daniel Vetter
2019-11-19 21:25       ` [Xen-devel] " Daniel Vetter
2019-11-19 21:25       ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21 ` [PATCH 7/8] drm/hibmc: Use drm_gem_fb_create Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-22  8:09   ` Thomas Zimmermann
2019-11-22  8:09     ` [Intel-gfx] " Thomas Zimmermann
2019-11-22  8:16   ` Thomas Zimmermann
2019-11-22  8:16     ` [Intel-gfx] " Thomas Zimmermann
2019-11-22  9:12     ` Daniel Vetter
2019-11-22  9:12       ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21 ` [PATCH 8/8] drm/todo: Add entry for fb funcs related cleanups Daniel Vetter
2019-11-15  9:21   ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:21   ` Daniel Vetter
2019-11-20 10:46   ` Daniel Vetter
2019-11-20 10:46     ` [Intel-gfx] " Daniel Vetter
2019-11-15  9:30 ` ✗ Fi.CI.CHECKPATCH: warning for fb_create drive-through cleanups Patchwork
2019-11-15  9:30   ` [Intel-gfx] " Patchwork
2019-11-15  9:50 ` ✗ Fi.CI.BAT: failure " Patchwork
2019-11-15  9:50   ` [Intel-gfx] " Patchwork

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.