All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 00/13]
@ 2023-05-30 15:02 ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

DRM provides a number of wrappers around fbdev cfb_() sys_(), fb_io_()
and fb_sys_() helpers. The DRM functions don't provide any additional
functionality for most DRM drivers. So remove them and call the fbdev
I/O helpers directly.

The DRM fbdev I/O wrappers were originally added because <linux/fb.h>
does not protect its content with CONFIG_FB. DRM fbdev emulation did
not build if the config option had been disabled. This has been
fixed. For fbdev-generic and i915, the wrappers added support for damage
handling. But this is better handled within the two callers, as each
is special in its damage handling.

Patch 1 adds several internal Kconfig options that DRM drivers (and
possibly other fbdev code) will use to select the correct set of I/O
helpers. Patch 2 adds initializers for struct fb_ops and generator
macros for the callback functions. These macros will simplify drivers.
This patchset applies the new options and macros to DRM fbdev emulation,
but regular fbdev drivers can use them as well.

Patches 3 to 9 replace the DRM wrappers in a number of fbdev emulations.
Patch 10 exports two helpers for damage handling. Patches 11 to 13
update msm, fbdev-generic and i915 with the help of the exported functions.
The patches also remove DRM's fbdev I/O helpers, which are now unused.

DRM's fbdev helpers had to select fbdev I/O helpers for I/O and for
system memory. Each fbdev emulation now selects the correct helpers
for itself. Depending on the selected DRM drivers, kernel builds will
now only contain the necessary fbdev I/O helpers and might be slightly
smaller in size.

v5:
	* fix whitespace errors (Jingfeng)
	* move msm patch to later position make it build
v4:
	* use initializer and generator macros for struct fb_ops
	* partially support damage handling in msm (Dmitri)
v3:
	* fix Kconfig options (Jingfeng)
	* minimize changes to exynos (Sam)
v2:
	* simplify Kconfig handling (Sam)

Thomas Zimmermann (13):
  fbdev: Add Kconfig options to select different fb_ops helpers
  fbdev: Add initializer macros for struct fb_ops
  drm/armada: Use regular fbdev I/O helpers
  drm/exynos: Use regular fbdev I/O helpers
  drm/gma500: Use regular fbdev I/O helpers
  drm/radeon: Use regular fbdev I/O helpers
  drm/fbdev-dma: Use regular fbdev I/O helpers
  drm/omapdrm: Use regular fbdev I/O helpers
  drm/tegra: Use regular fbdev I/O helpers
  drm/fb-helper: Export helpers for marking damage areas
  drm/msm: Use regular fbdev I/O helpers
  drm/fbdev-generic: Implement dedicated fbdev I/O helpers
  drm/i915: Implement dedicated fbdev I/O helpers

 drivers/gpu/drm/Kconfig                    |  10 +-
 drivers/gpu/drm/armada/Kconfig             |   1 +
 drivers/gpu/drm/armada/armada_fbdev.c      |   7 +-
 drivers/gpu/drm/drm_fb_helper.c            | 236 ++-------------------
 drivers/gpu/drm/drm_fbdev_dma.c            |  11 +-
 drivers/gpu/drm/drm_fbdev_generic.c        |  11 +-
 drivers/gpu/drm/exynos/Kconfig             |   1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c  |   9 +-
 drivers/gpu/drm/gma500/Kconfig             |   1 +
 drivers/gpu/drm/gma500/fbdev.c             |   8 +-
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +-
 drivers/gpu/drm/msm/Kconfig                |   1 +
 drivers/gpu/drm/msm/msm_fbdev.c            |  17 +-
 drivers/gpu/drm/omapdrm/Kconfig            |   1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c       |  11 +-
 drivers/gpu/drm/radeon/Kconfig             |   1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c      |   9 +-
 drivers/gpu/drm/tegra/Kconfig              |   1 +
 drivers/gpu/drm/tegra/fbdev.c              |   8 +-
 drivers/video/fbdev/Kconfig                |  21 ++
 include/drm/drm_fb_helper.h                |  83 +-------
 include/linux/fb.h                         | 112 ++++++++++
 23 files changed, 212 insertions(+), 363 deletions(-)


base-commit: cf59b48ea3c0c0075d7c4e8538177d38999da7b0
-- 
2.40.1


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

* [PATCH v5 00/13]
@ 2023-05-30 15:02 ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

DRM provides a number of wrappers around fbdev cfb_() sys_(), fb_io_()
and fb_sys_() helpers. The DRM functions don't provide any additional
functionality for most DRM drivers. So remove them and call the fbdev
I/O helpers directly.

The DRM fbdev I/O wrappers were originally added because <linux/fb.h>
does not protect its content with CONFIG_FB. DRM fbdev emulation did
not build if the config option had been disabled. This has been
fixed. For fbdev-generic and i915, the wrappers added support for damage
handling. But this is better handled within the two callers, as each
is special in its damage handling.

Patch 1 adds several internal Kconfig options that DRM drivers (and
possibly other fbdev code) will use to select the correct set of I/O
helpers. Patch 2 adds initializers for struct fb_ops and generator
macros for the callback functions. These macros will simplify drivers.
This patchset applies the new options and macros to DRM fbdev emulation,
but regular fbdev drivers can use them as well.

Patches 3 to 9 replace the DRM wrappers in a number of fbdev emulations.
Patch 10 exports two helpers for damage handling. Patches 11 to 13
update msm, fbdev-generic and i915 with the help of the exported functions.
The patches also remove DRM's fbdev I/O helpers, which are now unused.

DRM's fbdev helpers had to select fbdev I/O helpers for I/O and for
system memory. Each fbdev emulation now selects the correct helpers
for itself. Depending on the selected DRM drivers, kernel builds will
now only contain the necessary fbdev I/O helpers and might be slightly
smaller in size.

v5:
	* fix whitespace errors (Jingfeng)
	* move msm patch to later position make it build
v4:
	* use initializer and generator macros for struct fb_ops
	* partially support damage handling in msm (Dmitri)
v3:
	* fix Kconfig options (Jingfeng)
	* minimize changes to exynos (Sam)
v2:
	* simplify Kconfig handling (Sam)

Thomas Zimmermann (13):
  fbdev: Add Kconfig options to select different fb_ops helpers
  fbdev: Add initializer macros for struct fb_ops
  drm/armada: Use regular fbdev I/O helpers
  drm/exynos: Use regular fbdev I/O helpers
  drm/gma500: Use regular fbdev I/O helpers
  drm/radeon: Use regular fbdev I/O helpers
  drm/fbdev-dma: Use regular fbdev I/O helpers
  drm/omapdrm: Use regular fbdev I/O helpers
  drm/tegra: Use regular fbdev I/O helpers
  drm/fb-helper: Export helpers for marking damage areas
  drm/msm: Use regular fbdev I/O helpers
  drm/fbdev-generic: Implement dedicated fbdev I/O helpers
  drm/i915: Implement dedicated fbdev I/O helpers

 drivers/gpu/drm/Kconfig                    |  10 +-
 drivers/gpu/drm/armada/Kconfig             |   1 +
 drivers/gpu/drm/armada/armada_fbdev.c      |   7 +-
 drivers/gpu/drm/drm_fb_helper.c            | 236 ++-------------------
 drivers/gpu/drm/drm_fbdev_dma.c            |  11 +-
 drivers/gpu/drm/drm_fbdev_generic.c        |  11 +-
 drivers/gpu/drm/exynos/Kconfig             |   1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c  |   9 +-
 drivers/gpu/drm/gma500/Kconfig             |   1 +
 drivers/gpu/drm/gma500/fbdev.c             |   8 +-
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +-
 drivers/gpu/drm/msm/Kconfig                |   1 +
 drivers/gpu/drm/msm/msm_fbdev.c            |  17 +-
 drivers/gpu/drm/omapdrm/Kconfig            |   1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c       |  11 +-
 drivers/gpu/drm/radeon/Kconfig             |   1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c      |   9 +-
 drivers/gpu/drm/tegra/Kconfig              |   1 +
 drivers/gpu/drm/tegra/fbdev.c              |   8 +-
 drivers/video/fbdev/Kconfig                |  21 ++
 include/drm/drm_fb_helper.h                |  83 +-------
 include/linux/fb.h                         | 112 ++++++++++
 23 files changed, 212 insertions(+), 363 deletions(-)


base-commit: cf59b48ea3c0c0075d7c4e8538177d38999da7b0
-- 
2.40.1


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

* [PATCH v5 00/13]
@ 2023-05-30 15:02 ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

DRM provides a number of wrappers around fbdev cfb_() sys_(), fb_io_()
and fb_sys_() helpers. The DRM functions don't provide any additional
functionality for most DRM drivers. So remove them and call the fbdev
I/O helpers directly.

The DRM fbdev I/O wrappers were originally added because <linux/fb.h>
does not protect its content with CONFIG_FB. DRM fbdev emulation did
not build if the config option had been disabled. This has been
fixed. For fbdev-generic and i915, the wrappers added support for damage
handling. But this is better handled within the two callers, as each
is special in its damage handling.

Patch 1 adds several internal Kconfig options that DRM drivers (and
possibly other fbdev code) will use to select the correct set of I/O
helpers. Patch 2 adds initializers for struct fb_ops and generator
macros for the callback functions. These macros will simplify drivers.
This patchset applies the new options and macros to DRM fbdev emulation,
but regular fbdev drivers can use them as well.

Patches 3 to 9 replace the DRM wrappers in a number of fbdev emulations.
Patch 10 exports two helpers for damage handling. Patches 11 to 13
update msm, fbdev-generic and i915 with the help of the exported functions.
The patches also remove DRM's fbdev I/O helpers, which are now unused.

DRM's fbdev helpers had to select fbdev I/O helpers for I/O and for
system memory. Each fbdev emulation now selects the correct helpers
for itself. Depending on the selected DRM drivers, kernel builds will
now only contain the necessary fbdev I/O helpers and might be slightly
smaller in size.

v5:
	* fix whitespace errors (Jingfeng)
	* move msm patch to later position make it build
v4:
	* use initializer and generator macros for struct fb_ops
	* partially support damage handling in msm (Dmitri)
v3:
	* fix Kconfig options (Jingfeng)
	* minimize changes to exynos (Sam)
v2:
	* simplify Kconfig handling (Sam)

Thomas Zimmermann (13):
  fbdev: Add Kconfig options to select different fb_ops helpers
  fbdev: Add initializer macros for struct fb_ops
  drm/armada: Use regular fbdev I/O helpers
  drm/exynos: Use regular fbdev I/O helpers
  drm/gma500: Use regular fbdev I/O helpers
  drm/radeon: Use regular fbdev I/O helpers
  drm/fbdev-dma: Use regular fbdev I/O helpers
  drm/omapdrm: Use regular fbdev I/O helpers
  drm/tegra: Use regular fbdev I/O helpers
  drm/fb-helper: Export helpers for marking damage areas
  drm/msm: Use regular fbdev I/O helpers
  drm/fbdev-generic: Implement dedicated fbdev I/O helpers
  drm/i915: Implement dedicated fbdev I/O helpers

 drivers/gpu/drm/Kconfig                    |  10 +-
 drivers/gpu/drm/armada/Kconfig             |   1 +
 drivers/gpu/drm/armada/armada_fbdev.c      |   7 +-
 drivers/gpu/drm/drm_fb_helper.c            | 236 ++-------------------
 drivers/gpu/drm/drm_fbdev_dma.c            |  11 +-
 drivers/gpu/drm/drm_fbdev_generic.c        |  11 +-
 drivers/gpu/drm/exynos/Kconfig             |   1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c  |   9 +-
 drivers/gpu/drm/gma500/Kconfig             |   1 +
 drivers/gpu/drm/gma500/fbdev.c             |   8 +-
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +-
 drivers/gpu/drm/msm/Kconfig                |   1 +
 drivers/gpu/drm/msm/msm_fbdev.c            |  17 +-
 drivers/gpu/drm/omapdrm/Kconfig            |   1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c       |  11 +-
 drivers/gpu/drm/radeon/Kconfig             |   1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c      |   9 +-
 drivers/gpu/drm/tegra/Kconfig              |   1 +
 drivers/gpu/drm/tegra/fbdev.c              |   8 +-
 drivers/video/fbdev/Kconfig                |  21 ++
 include/drm/drm_fb_helper.h                |  83 +-------
 include/linux/fb.h                         | 112 ++++++++++
 23 files changed, 212 insertions(+), 363 deletions(-)


base-commit: cf59b48ea3c0c0075d7c4e8538177d38999da7b0
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [Intel-gfx] [PATCH v5 00/13]
@ 2023-05-30 15:02 ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

DRM provides a number of wrappers around fbdev cfb_() sys_(), fb_io_()
and fb_sys_() helpers. The DRM functions don't provide any additional
functionality for most DRM drivers. So remove them and call the fbdev
I/O helpers directly.

The DRM fbdev I/O wrappers were originally added because <linux/fb.h>
does not protect its content with CONFIG_FB. DRM fbdev emulation did
not build if the config option had been disabled. This has been
fixed. For fbdev-generic and i915, the wrappers added support for damage
handling. But this is better handled within the two callers, as each
is special in its damage handling.

Patch 1 adds several internal Kconfig options that DRM drivers (and
possibly other fbdev code) will use to select the correct set of I/O
helpers. Patch 2 adds initializers for struct fb_ops and generator
macros for the callback functions. These macros will simplify drivers.
This patchset applies the new options and macros to DRM fbdev emulation,
but regular fbdev drivers can use them as well.

Patches 3 to 9 replace the DRM wrappers in a number of fbdev emulations.
Patch 10 exports two helpers for damage handling. Patches 11 to 13
update msm, fbdev-generic and i915 with the help of the exported functions.
The patches also remove DRM's fbdev I/O helpers, which are now unused.

DRM's fbdev helpers had to select fbdev I/O helpers for I/O and for
system memory. Each fbdev emulation now selects the correct helpers
for itself. Depending on the selected DRM drivers, kernel builds will
now only contain the necessary fbdev I/O helpers and might be slightly
smaller in size.

v5:
	* fix whitespace errors (Jingfeng)
	* move msm patch to later position make it build
v4:
	* use initializer and generator macros for struct fb_ops
	* partially support damage handling in msm (Dmitri)
v3:
	* fix Kconfig options (Jingfeng)
	* minimize changes to exynos (Sam)
v2:
	* simplify Kconfig handling (Sam)

Thomas Zimmermann (13):
  fbdev: Add Kconfig options to select different fb_ops helpers
  fbdev: Add initializer macros for struct fb_ops
  drm/armada: Use regular fbdev I/O helpers
  drm/exynos: Use regular fbdev I/O helpers
  drm/gma500: Use regular fbdev I/O helpers
  drm/radeon: Use regular fbdev I/O helpers
  drm/fbdev-dma: Use regular fbdev I/O helpers
  drm/omapdrm: Use regular fbdev I/O helpers
  drm/tegra: Use regular fbdev I/O helpers
  drm/fb-helper: Export helpers for marking damage areas
  drm/msm: Use regular fbdev I/O helpers
  drm/fbdev-generic: Implement dedicated fbdev I/O helpers
  drm/i915: Implement dedicated fbdev I/O helpers

 drivers/gpu/drm/Kconfig                    |  10 +-
 drivers/gpu/drm/armada/Kconfig             |   1 +
 drivers/gpu/drm/armada/armada_fbdev.c      |   7 +-
 drivers/gpu/drm/drm_fb_helper.c            | 236 ++-------------------
 drivers/gpu/drm/drm_fbdev_dma.c            |  11 +-
 drivers/gpu/drm/drm_fbdev_generic.c        |  11 +-
 drivers/gpu/drm/exynos/Kconfig             |   1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c  |   9 +-
 drivers/gpu/drm/gma500/Kconfig             |   1 +
 drivers/gpu/drm/gma500/fbdev.c             |   8 +-
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +-
 drivers/gpu/drm/msm/Kconfig                |   1 +
 drivers/gpu/drm/msm/msm_fbdev.c            |  17 +-
 drivers/gpu/drm/omapdrm/Kconfig            |   1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c       |  11 +-
 drivers/gpu/drm/radeon/Kconfig             |   1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c      |   9 +-
 drivers/gpu/drm/tegra/Kconfig              |   1 +
 drivers/gpu/drm/tegra/fbdev.c              |   8 +-
 drivers/video/fbdev/Kconfig                |  21 ++
 include/drm/drm_fb_helper.h                |  83 +-------
 include/linux/fb.h                         | 112 ++++++++++
 23 files changed, 212 insertions(+), 363 deletions(-)


base-commit: cf59b48ea3c0c0075d7c4e8538177d38999da7b0
-- 
2.40.1


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

* [PATCH v5 01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Many fbdev drivers use the same set of fb_ops helpers. Add Kconfig
options to select them at once. This will help with making DRM's
fbdev emulation code more modular, but can also be used to simplify
fbdev's driver configs.

v3:
	* fix select statement (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/video/fbdev/Kconfig | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index e8889035c882..6df9bd09454a 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -158,6 +158,27 @@ config FB_DEFERRED_IO
 	bool
 	depends on FB
 
+config FB_IO_HELPERS
+	bool
+	depends on FB
+	select FB_CFB_COPYAREA
+	select FB_CFB_FILLRECT
+	select FB_CFB_IMAGEBLIT
+
+config FB_SYS_HELPERS
+	bool
+	depends on FB
+	select FB_SYS_COPYAREA
+	select FB_SYS_FILLRECT
+	select FB_SYS_FOPS
+	select FB_SYS_IMAGEBLIT
+
+config FB_SYS_HELPERS_DEFERRED
+	bool
+	depends on FB
+	select FB_DEFERRED_IO
+	select FB_SYS_HELPERS
+
 config FB_HECUBA
 	tristate
 	depends on FB
-- 
2.40.1


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

* [PATCH v5 01/13] fbdev: Add Kconfig options to select different fb_ops helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Many fbdev drivers use the same set of fb_ops helpers. Add Kconfig
options to select them at once. This will help with making DRM's
fbdev emulation code more modular, but can also be used to simplify
fbdev's driver configs.

v3:
	* fix select statement (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/video/fbdev/Kconfig | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index e8889035c882..6df9bd09454a 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -158,6 +158,27 @@ config FB_DEFERRED_IO
 	bool
 	depends on FB
 
+config FB_IO_HELPERS
+	bool
+	depends on FB
+	select FB_CFB_COPYAREA
+	select FB_CFB_FILLRECT
+	select FB_CFB_IMAGEBLIT
+
+config FB_SYS_HELPERS
+	bool
+	depends on FB
+	select FB_SYS_COPYAREA
+	select FB_SYS_FILLRECT
+	select FB_SYS_FOPS
+	select FB_SYS_IMAGEBLIT
+
+config FB_SYS_HELPERS_DEFERRED
+	bool
+	depends on FB
+	select FB_DEFERRED_IO
+	select FB_SYS_HELPERS
+
 config FB_HECUBA
 	tristate
 	depends on FB
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 01/13] fbdev: Add Kconfig options to select different fb_ops helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Many fbdev drivers use the same set of fb_ops helpers. Add Kconfig
options to select them at once. This will help with making DRM's
fbdev emulation code more modular, but can also be used to simplify
fbdev's driver configs.

v3:
	* fix select statement (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/video/fbdev/Kconfig | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index e8889035c882..6df9bd09454a 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -158,6 +158,27 @@ config FB_DEFERRED_IO
 	bool
 	depends on FB
 
+config FB_IO_HELPERS
+	bool
+	depends on FB
+	select FB_CFB_COPYAREA
+	select FB_CFB_FILLRECT
+	select FB_CFB_IMAGEBLIT
+
+config FB_SYS_HELPERS
+	bool
+	depends on FB
+	select FB_SYS_COPYAREA
+	select FB_SYS_FILLRECT
+	select FB_SYS_FOPS
+	select FB_SYS_IMAGEBLIT
+
+config FB_SYS_HELPERS_DEFERRED
+	bool
+	depends on FB
+	select FB_DEFERRED_IO
+	select FB_SYS_HELPERS
+
 config FB_HECUBA
 	tristate
 	depends on FB
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 01/13] fbdev: Add Kconfig options to select different fb_ops helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Many fbdev drivers use the same set of fb_ops helpers. Add Kconfig
options to select them at once. This will help with making DRM's
fbdev emulation code more modular, but can also be used to simplify
fbdev's driver configs.

v3:
	* fix select statement (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/video/fbdev/Kconfig | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index e8889035c882..6df9bd09454a 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -158,6 +158,27 @@ config FB_DEFERRED_IO
 	bool
 	depends on FB
 
+config FB_IO_HELPERS
+	bool
+	depends on FB
+	select FB_CFB_COPYAREA
+	select FB_CFB_FILLRECT
+	select FB_CFB_IMAGEBLIT
+
+config FB_SYS_HELPERS
+	bool
+	depends on FB
+	select FB_SYS_COPYAREA
+	select FB_SYS_FILLRECT
+	select FB_SYS_FOPS
+	select FB_SYS_IMAGEBLIT
+
+config FB_SYS_HELPERS_DEFERRED
+	bool
+	depends on FB
+	select FB_DEFERRED_IO
+	select FB_SYS_HELPERS
+
 config FB_HECUBA
 	tristate
 	depends on FB
-- 
2.40.1


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

* [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

For framebuffers in I/O and system memory, add macros that set
struct fb_ops to the respective callback functions.

For deferred I/O, add macros that generate callback functions with
damage handling. Add initializer macros that set struct fb_ops to
the generated callbacks.

These macros can remove a lot boilerplate code from fbdev drivers.
The drivers are supposed to use the macro that is required for its
framebuffer. Each macro is split into smaller helpers, so that
drivers with non-standard callbacks can pick and customize callbacks
as needed. There are individual helper macros for read/write, mmap
and drawing.

v5:
	* fix whitespace errors (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/include/linux/fb.h b/include/linux/fb.h
index 2cf8efcb9e32..ce6823e157e6 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
 			   size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in I/O memory.
+ */
+
+#define __FB_DEFAULT_IO_OPS_RDWR \
+	.fb_read	= fb_io_read, \
+	.fb_write	= fb_io_write
+
+#define __FB_DEFAULT_IO_OPS_DRAW \
+	.fb_fillrect	= cfb_fillrect, \
+	.fb_copyarea	= cfb_copyarea, \
+	.fb_imageblit	= cfb_imageblit
+
+#define __FB_DEFAULT_IO_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_IO_OPS \
+	__FB_DEFAULT_IO_OPS_RDWR, \
+	__FB_DEFAULT_IO_OPS_DRAW, \
+	__FB_DEFAULT_IO_OPS_MMAP
+
 /*
  * Drawing operations where framebuffer is in system RAM
  */
+
 extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
 extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
 extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
@@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
 			    size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in system memory.
+ */
+
+#define __FB_DEFAULT_SYS_OPS_RDWR \
+	.fb_read	= fb_sys_read, \
+	.fb_write	= fb_sys_write
+
+#define __FB_DEFAULT_SYS_OPS_DRAW \
+	.fb_fillrect	= sys_fillrect, \
+	.fb_copyarea	= sys_copyarea, \
+	.fb_imageblit	= sys_imageblit
+
+#define __FB_DEFAULT_SYS_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_SYS_OPS \
+	__FB_DEFAULT_SYS_OPS_RDWR, \
+	__FB_DEFAULT_SYS_OPS_DRAW, \
+	__FB_DEFAULT_SYS_OPS_MMAP
+
 /* drivers/video/fbmem.c */
 extern int register_framebuffer(struct fb_info *fb_info);
 extern void unregister_framebuffer(struct fb_info *fb_info);
@@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
 extern int fb_deferred_io_fsync(struct file *file, loff_t start,
 				loff_t end, int datasync);
 
+/*
+ * Generate callbacks for deferred I/O
+ */
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
+	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
+					       size_t count, loff_t *ppos) \
+	{ \
+		return fb_ ## __mode ## _read(info, buf, count, ppos); \
+	} \
+	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
+						size_t count, loff_t *ppos) \
+	{ \
+		unsigned long offset = *ppos; \
+		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
+		if (ret > 0) \
+			__damage_range(info, offset, ret); \
+		return ret; \
+	}
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
+	static void __prefix ## _defio_fillrect(struct fb_info *info, \
+						const struct fb_fillrect *rect) \
+	{ \
+		__mode ## _fillrect(info, rect); \
+		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
+	} \
+	static void __prefix ## _defio_copyarea(struct fb_info *info, \
+						const struct fb_copyarea *area) \
+	{ \
+		__mode ## _copyarea(info, area); \
+		__damage_area(info, area->dx, area->dy, area->width, area->height); \
+	} \
+	static void __prefix ## _defio_imageblit(struct fb_info *info, \
+						 const struct fb_image *image) \
+	{ \
+		__mode ## _imageblit(info, image); \
+		__damage_area(info, image->dx, image->dy, image->width, image->height); \
+	}
+
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
+
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
+
+/*
+ * Initializes struct fb_ops for deferred I/O.
+ */
+
+#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
+	.fb_read	= __prefix ## _defio_read, \
+	.fb_write	= __prefix ## _defio_write
+
+#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
+	.fb_fillrect	= __prefix ## _defio_fillrect, \
+	.fb_copyarea	= __prefix ## _defio_copyarea, \
+	.fb_imageblit	= __prefix ## _defio_imageblit
+
+#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
+	.fb_mmap	= fb_deferred_io_mmap
+
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
+
 static inline bool fb_be_math(struct fb_info *info)
 {
 #ifdef CONFIG_FB_FOREIGN_ENDIAN
-- 
2.40.1


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

* [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

For framebuffers in I/O and system memory, add macros that set
struct fb_ops to the respective callback functions.

For deferred I/O, add macros that generate callback functions with
damage handling. Add initializer macros that set struct fb_ops to
the generated callbacks.

These macros can remove a lot boilerplate code from fbdev drivers.
The drivers are supposed to use the macro that is required for its
framebuffer. Each macro is split into smaller helpers, so that
drivers with non-standard callbacks can pick and customize callbacks
as needed. There are individual helper macros for read/write, mmap
and drawing.

v5:
	* fix whitespace errors (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/include/linux/fb.h b/include/linux/fb.h
index 2cf8efcb9e32..ce6823e157e6 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
 			   size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in I/O memory.
+ */
+
+#define __FB_DEFAULT_IO_OPS_RDWR \
+	.fb_read	= fb_io_read, \
+	.fb_write	= fb_io_write
+
+#define __FB_DEFAULT_IO_OPS_DRAW \
+	.fb_fillrect	= cfb_fillrect, \
+	.fb_copyarea	= cfb_copyarea, \
+	.fb_imageblit	= cfb_imageblit
+
+#define __FB_DEFAULT_IO_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_IO_OPS \
+	__FB_DEFAULT_IO_OPS_RDWR, \
+	__FB_DEFAULT_IO_OPS_DRAW, \
+	__FB_DEFAULT_IO_OPS_MMAP
+
 /*
  * Drawing operations where framebuffer is in system RAM
  */
+
 extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
 extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
 extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
@@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
 			    size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in system memory.
+ */
+
+#define __FB_DEFAULT_SYS_OPS_RDWR \
+	.fb_read	= fb_sys_read, \
+	.fb_write	= fb_sys_write
+
+#define __FB_DEFAULT_SYS_OPS_DRAW \
+	.fb_fillrect	= sys_fillrect, \
+	.fb_copyarea	= sys_copyarea, \
+	.fb_imageblit	= sys_imageblit
+
+#define __FB_DEFAULT_SYS_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_SYS_OPS \
+	__FB_DEFAULT_SYS_OPS_RDWR, \
+	__FB_DEFAULT_SYS_OPS_DRAW, \
+	__FB_DEFAULT_SYS_OPS_MMAP
+
 /* drivers/video/fbmem.c */
 extern int register_framebuffer(struct fb_info *fb_info);
 extern void unregister_framebuffer(struct fb_info *fb_info);
@@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
 extern int fb_deferred_io_fsync(struct file *file, loff_t start,
 				loff_t end, int datasync);
 
+/*
+ * Generate callbacks for deferred I/O
+ */
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
+	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
+					       size_t count, loff_t *ppos) \
+	{ \
+		return fb_ ## __mode ## _read(info, buf, count, ppos); \
+	} \
+	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
+						size_t count, loff_t *ppos) \
+	{ \
+		unsigned long offset = *ppos; \
+		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
+		if (ret > 0) \
+			__damage_range(info, offset, ret); \
+		return ret; \
+	}
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
+	static void __prefix ## _defio_fillrect(struct fb_info *info, \
+						const struct fb_fillrect *rect) \
+	{ \
+		__mode ## _fillrect(info, rect); \
+		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
+	} \
+	static void __prefix ## _defio_copyarea(struct fb_info *info, \
+						const struct fb_copyarea *area) \
+	{ \
+		__mode ## _copyarea(info, area); \
+		__damage_area(info, area->dx, area->dy, area->width, area->height); \
+	} \
+	static void __prefix ## _defio_imageblit(struct fb_info *info, \
+						 const struct fb_image *image) \
+	{ \
+		__mode ## _imageblit(info, image); \
+		__damage_area(info, image->dx, image->dy, image->width, image->height); \
+	}
+
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
+
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
+
+/*
+ * Initializes struct fb_ops for deferred I/O.
+ */
+
+#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
+	.fb_read	= __prefix ## _defio_read, \
+	.fb_write	= __prefix ## _defio_write
+
+#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
+	.fb_fillrect	= __prefix ## _defio_fillrect, \
+	.fb_copyarea	= __prefix ## _defio_copyarea, \
+	.fb_imageblit	= __prefix ## _defio_imageblit
+
+#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
+	.fb_mmap	= fb_deferred_io_mmap
+
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
+
 static inline bool fb_be_math(struct fb_info *info)
 {
 #ifdef CONFIG_FB_FOREIGN_ENDIAN
-- 
2.40.1


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

* [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

For framebuffers in I/O and system memory, add macros that set
struct fb_ops to the respective callback functions.

For deferred I/O, add macros that generate callback functions with
damage handling. Add initializer macros that set struct fb_ops to
the generated callbacks.

These macros can remove a lot boilerplate code from fbdev drivers.
The drivers are supposed to use the macro that is required for its
framebuffer. Each macro is split into smaller helpers, so that
drivers with non-standard callbacks can pick and customize callbacks
as needed. There are individual helper macros for read/write, mmap
and drawing.

v5:
	* fix whitespace errors (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/include/linux/fb.h b/include/linux/fb.h
index 2cf8efcb9e32..ce6823e157e6 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
 			   size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in I/O memory.
+ */
+
+#define __FB_DEFAULT_IO_OPS_RDWR \
+	.fb_read	= fb_io_read, \
+	.fb_write	= fb_io_write
+
+#define __FB_DEFAULT_IO_OPS_DRAW \
+	.fb_fillrect	= cfb_fillrect, \
+	.fb_copyarea	= cfb_copyarea, \
+	.fb_imageblit	= cfb_imageblit
+
+#define __FB_DEFAULT_IO_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_IO_OPS \
+	__FB_DEFAULT_IO_OPS_RDWR, \
+	__FB_DEFAULT_IO_OPS_DRAW, \
+	__FB_DEFAULT_IO_OPS_MMAP
+
 /*
  * Drawing operations where framebuffer is in system RAM
  */
+
 extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
 extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
 extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
@@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
 			    size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in system memory.
+ */
+
+#define __FB_DEFAULT_SYS_OPS_RDWR \
+	.fb_read	= fb_sys_read, \
+	.fb_write	= fb_sys_write
+
+#define __FB_DEFAULT_SYS_OPS_DRAW \
+	.fb_fillrect	= sys_fillrect, \
+	.fb_copyarea	= sys_copyarea, \
+	.fb_imageblit	= sys_imageblit
+
+#define __FB_DEFAULT_SYS_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_SYS_OPS \
+	__FB_DEFAULT_SYS_OPS_RDWR, \
+	__FB_DEFAULT_SYS_OPS_DRAW, \
+	__FB_DEFAULT_SYS_OPS_MMAP
+
 /* drivers/video/fbmem.c */
 extern int register_framebuffer(struct fb_info *fb_info);
 extern void unregister_framebuffer(struct fb_info *fb_info);
@@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
 extern int fb_deferred_io_fsync(struct file *file, loff_t start,
 				loff_t end, int datasync);
 
+/*
+ * Generate callbacks for deferred I/O
+ */
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
+	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
+					       size_t count, loff_t *ppos) \
+	{ \
+		return fb_ ## __mode ## _read(info, buf, count, ppos); \
+	} \
+	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
+						size_t count, loff_t *ppos) \
+	{ \
+		unsigned long offset = *ppos; \
+		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
+		if (ret > 0) \
+			__damage_range(info, offset, ret); \
+		return ret; \
+	}
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
+	static void __prefix ## _defio_fillrect(struct fb_info *info, \
+						const struct fb_fillrect *rect) \
+	{ \
+		__mode ## _fillrect(info, rect); \
+		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
+	} \
+	static void __prefix ## _defio_copyarea(struct fb_info *info, \
+						const struct fb_copyarea *area) \
+	{ \
+		__mode ## _copyarea(info, area); \
+		__damage_area(info, area->dx, area->dy, area->width, area->height); \
+	} \
+	static void __prefix ## _defio_imageblit(struct fb_info *info, \
+						 const struct fb_image *image) \
+	{ \
+		__mode ## _imageblit(info, image); \
+		__damage_area(info, image->dx, image->dy, image->width, image->height); \
+	}
+
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
+
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
+
+/*
+ * Initializes struct fb_ops for deferred I/O.
+ */
+
+#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
+	.fb_read	= __prefix ## _defio_read, \
+	.fb_write	= __prefix ## _defio_write
+
+#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
+	.fb_fillrect	= __prefix ## _defio_fillrect, \
+	.fb_copyarea	= __prefix ## _defio_copyarea, \
+	.fb_imageblit	= __prefix ## _defio_imageblit
+
+#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
+	.fb_mmap	= fb_deferred_io_mmap
+
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
+
 static inline bool fb_be_math(struct fb_info *info)
 {
 #ifdef CONFIG_FB_FOREIGN_ENDIAN
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [Intel-gfx] [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

For framebuffers in I/O and system memory, add macros that set
struct fb_ops to the respective callback functions.

For deferred I/O, add macros that generate callback functions with
damage handling. Add initializer macros that set struct fb_ops to
the generated callbacks.

These macros can remove a lot boilerplate code from fbdev drivers.
The drivers are supposed to use the macro that is required for its
framebuffer. Each macro is split into smaller helpers, so that
drivers with non-standard callbacks can pick and customize callbacks
as needed. There are individual helper macros for read/write, mmap
and drawing.

v5:
	* fix whitespace errors (Jingfeng)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
---
 include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 112 insertions(+)

diff --git a/include/linux/fb.h b/include/linux/fb.h
index 2cf8efcb9e32..ce6823e157e6 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
 			   size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in I/O memory.
+ */
+
+#define __FB_DEFAULT_IO_OPS_RDWR \
+	.fb_read	= fb_io_read, \
+	.fb_write	= fb_io_write
+
+#define __FB_DEFAULT_IO_OPS_DRAW \
+	.fb_fillrect	= cfb_fillrect, \
+	.fb_copyarea	= cfb_copyarea, \
+	.fb_imageblit	= cfb_imageblit
+
+#define __FB_DEFAULT_IO_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_IO_OPS \
+	__FB_DEFAULT_IO_OPS_RDWR, \
+	__FB_DEFAULT_IO_OPS_DRAW, \
+	__FB_DEFAULT_IO_OPS_MMAP
+
 /*
  * Drawing operations where framebuffer is in system RAM
  */
+
 extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
 extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
 extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
@@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
 extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
 			    size_t count, loff_t *ppos);
 
+/*
+ * Initializes struct fb_ops for framebuffers in system memory.
+ */
+
+#define __FB_DEFAULT_SYS_OPS_RDWR \
+	.fb_read	= fb_sys_read, \
+	.fb_write	= fb_sys_write
+
+#define __FB_DEFAULT_SYS_OPS_DRAW \
+	.fb_fillrect	= sys_fillrect, \
+	.fb_copyarea	= sys_copyarea, \
+	.fb_imageblit	= sys_imageblit
+
+#define __FB_DEFAULT_SYS_OPS_MMAP \
+	.fb_mmap	= NULL // default implementation
+
+#define FB_DEFAULT_SYS_OPS \
+	__FB_DEFAULT_SYS_OPS_RDWR, \
+	__FB_DEFAULT_SYS_OPS_DRAW, \
+	__FB_DEFAULT_SYS_OPS_MMAP
+
 /* drivers/video/fbmem.c */
 extern int register_framebuffer(struct fb_info *fb_info);
 extern void unregister_framebuffer(struct fb_info *fb_info);
@@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
 extern int fb_deferred_io_fsync(struct file *file, loff_t start,
 				loff_t end, int datasync);
 
+/*
+ * Generate callbacks for deferred I/O
+ */
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
+	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
+					       size_t count, loff_t *ppos) \
+	{ \
+		return fb_ ## __mode ## _read(info, buf, count, ppos); \
+	} \
+	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
+						size_t count, loff_t *ppos) \
+	{ \
+		unsigned long offset = *ppos; \
+		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
+		if (ret > 0) \
+			__damage_range(info, offset, ret); \
+		return ret; \
+	}
+
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
+	static void __prefix ## _defio_fillrect(struct fb_info *info, \
+						const struct fb_fillrect *rect) \
+	{ \
+		__mode ## _fillrect(info, rect); \
+		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
+	} \
+	static void __prefix ## _defio_copyarea(struct fb_info *info, \
+						const struct fb_copyarea *area) \
+	{ \
+		__mode ## _copyarea(info, area); \
+		__damage_area(info, area->dx, area->dy, area->width, area->height); \
+	} \
+	static void __prefix ## _defio_imageblit(struct fb_info *info, \
+						 const struct fb_image *image) \
+	{ \
+		__mode ## _imageblit(info, image); \
+		__damage_area(info, image->dx, image->dy, image->width, image->height); \
+	}
+
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
+
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
+
+/*
+ * Initializes struct fb_ops for deferred I/O.
+ */
+
+#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
+	.fb_read	= __prefix ## _defio_read, \
+	.fb_write	= __prefix ## _defio_write
+
+#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
+	.fb_fillrect	= __prefix ## _defio_fillrect, \
+	.fb_copyarea	= __prefix ## _defio_copyarea, \
+	.fb_imageblit	= __prefix ## _defio_imageblit
+
+#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
+	.fb_mmap	= fb_deferred_io_mmap
+
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
+
 static inline bool fb_be_math(struct fb_info *info)
 {
 #ifdef CONFIG_FB_FOREIGN_ENDIAN
-- 
2.40.1


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

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Russell King

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Russell King,
	dri-devel, amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Russell King

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [Intel-gfx] [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Russell King,
	dri-devel, amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 04/13] drm/exynos: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                     ` (2 preceding siblings ...)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Inki Dae, Seung-Woo Kim, Kyungmin Park,
	Krzysztof Kozlowski, Alim Akhtar

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Exynos does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v3:
	* don't reorder Makefile rules (Sam)
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/gpu/drm/exynos/Kconfig            | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 0cb92d651ff1..7ca7e1dab52c 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,6 +7,7 @@ config DRM_EXYNOS
 	select DRM_DISPLAY_HELPER if DRM_EXYNOS_DP
 	select DRM_KMS_HELPER
 	select VIDEOMODE_HELPERS
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_SOC_HDMI_CODEC if SND_SOC
 	help
 	  Choose this option if you have a Samsung SoC Exynos chipset.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index ea4b3d248aac..fdf65587f1fe 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -8,6 +8,8 @@
  *	Seung-Woo Kim <sw0312.kim@samsung.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -47,13 +49,10 @@ static void exynos_drm_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops exynos_drm_fb_ops = {
 	.owner		= THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap        = exynos_drm_fb_mmap,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= exynos_drm_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 04/13] drm/exynos: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Inki Dae, Seung-Woo Kim, Kyungmin Park,
	Krzysztof Kozlowski, Alim Akhtar

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Exynos does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v3:
	* don't reorder Makefile rules (Sam)
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/gpu/drm/exynos/Kconfig            | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 0cb92d651ff1..7ca7e1dab52c 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,6 +7,7 @@ config DRM_EXYNOS
 	select DRM_DISPLAY_HELPER if DRM_EXYNOS_DP
 	select DRM_KMS_HELPER
 	select VIDEOMODE_HELPERS
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_SOC_HDMI_CODEC if SND_SOC
 	help
 	  Choose this option if you have a Samsung SoC Exynos chipset.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index ea4b3d248aac..fdf65587f1fe 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -8,6 +8,8 @@
  *	Seung-Woo Kim <sw0312.kim@samsung.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -47,13 +49,10 @@ static void exynos_drm_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops exynos_drm_fb_ops = {
 	.owner		= THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap        = exynos_drm_fb_mmap,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= exynos_drm_fb_destroy,
 };
 
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 04/13] drm/exynos: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, Alim Akhtar, linux-arm-msm, intel-gfx,
	Seung-Woo Kim, Krzysztof Kozlowski, dri-devel, Kyungmin Park,
	amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Exynos does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v3:
	* don't reorder Makefile rules (Sam)
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/gpu/drm/exynos/Kconfig            | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 0cb92d651ff1..7ca7e1dab52c 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,6 +7,7 @@ config DRM_EXYNOS
 	select DRM_DISPLAY_HELPER if DRM_EXYNOS_DP
 	select DRM_KMS_HELPER
 	select VIDEOMODE_HELPERS
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_SOC_HDMI_CODEC if SND_SOC
 	help
 	  Choose this option if you have a Samsung SoC Exynos chipset.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index ea4b3d248aac..fdf65587f1fe 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -8,6 +8,8 @@
  *	Seung-Woo Kim <sw0312.kim@samsung.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -47,13 +49,10 @@ static void exynos_drm_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops exynos_drm_fb_ops = {
 	.owner		= THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap        = exynos_drm_fb_mmap,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= exynos_drm_fb_destroy,
 };
 
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 04/13] drm/exynos: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, Alim Akhtar, linux-arm-msm, intel-gfx,
	Seung-Woo Kim, Krzysztof Kozlowski, dri-devel, Inki Dae,
	Kyungmin Park, amd-gfx, Thomas Zimmermann, linux-tegra,
	freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Exynos does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v3:
	* don't reorder Makefile rules (Sam)
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/gpu/drm/exynos/Kconfig            | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 0cb92d651ff1..7ca7e1dab52c 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,6 +7,7 @@ config DRM_EXYNOS
 	select DRM_DISPLAY_HELPER if DRM_EXYNOS_DP
 	select DRM_KMS_HELPER
 	select VIDEOMODE_HELPERS
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_SOC_HDMI_CODEC if SND_SOC
 	help
 	  Choose this option if you have a Samsung SoC Exynos chipset.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index ea4b3d248aac..fdf65587f1fe 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -8,6 +8,8 @@
  *	Seung-Woo Kim <sw0312.kim@samsung.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -47,13 +49,10 @@ static void exynos_drm_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops exynos_drm_fb_ops = {
 	.owner		= THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap        = exynos_drm_fb_mmap,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= exynos_drm_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 04/13] drm/exynos: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, Alim Akhtar, linux-arm-msm, intel-gfx,
	Seung-Woo Kim, Krzysztof Kozlowski, dri-devel, Inki Dae,
	Kyungmin Park, amd-gfx, Thomas Zimmermann, linux-tegra,
	freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Exynos does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v3:
	* don't reorder Makefile rules (Sam)
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/gpu/drm/exynos/Kconfig            | 1 +
 drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 9 ++++-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 0cb92d651ff1..7ca7e1dab52c 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,6 +7,7 @@ config DRM_EXYNOS
 	select DRM_DISPLAY_HELPER if DRM_EXYNOS_DP
 	select DRM_KMS_HELPER
 	select VIDEOMODE_HELPERS
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_SOC_HDMI_CODEC if SND_SOC
 	help
 	  Choose this option if you have a Samsung SoC Exynos chipset.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index ea4b3d248aac..fdf65587f1fe 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -8,6 +8,8 @@
  *	Seung-Woo Kim <sw0312.kim@samsung.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -47,13 +49,10 @@ static void exynos_drm_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops exynos_drm_fb_ops = {
 	.owner		= THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap        = exynos_drm_fb_mmap,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= exynos_drm_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 05/13] drm/gma500: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                     ` (2 preceding siblings ...)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Patrik Jakobsson

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Gma500 does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/Kconfig | 1 +
 drivers/gpu/drm/gma500/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 2efc0eb41c64..cd3d92725ed4 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -3,6 +3,7 @@ config DRM_GMA500
 	tristate "Intel GMA500/600/3600/3650 KMS Framebuffer"
 	depends on DRM && PCI && X86 && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select I2C
 	select I2C_ALGOBIT
 	# GMA500 depends on ACPI_VIDEO when ACPI is enabled, just like i915
diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
index 4f0309548b2b..955cbe9f05a7 100644
--- a/drivers/gpu/drm/gma500/fbdev.c
+++ b/drivers/gpu/drm/gma500/fbdev.c
@@ -5,6 +5,7 @@
  *
  **************************************************************************/
 
+#include <linux/fb.h>
 #include <linux/pfn_t.h>
 
 #include <drm/drm_crtc_helper.h>
@@ -134,13 +135,10 @@ static void psb_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops psb_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_setcolreg = psb_fbdev_fb_setcolreg,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap = psb_fbdev_fb_mmap,
 	.fb_destroy = psb_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 05/13] drm/gma500: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel,
	Patrik Jakobsson, amd-gfx, Thomas Zimmermann, linux-tegra,
	freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Gma500 does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/Kconfig | 1 +
 drivers/gpu/drm/gma500/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 2efc0eb41c64..cd3d92725ed4 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -3,6 +3,7 @@ config DRM_GMA500
 	tristate "Intel GMA500/600/3600/3650 KMS Framebuffer"
 	depends on DRM && PCI && X86 && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select I2C
 	select I2C_ALGOBIT
 	# GMA500 depends on ACPI_VIDEO when ACPI is enabled, just like i915
diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
index 4f0309548b2b..955cbe9f05a7 100644
--- a/drivers/gpu/drm/gma500/fbdev.c
+++ b/drivers/gpu/drm/gma500/fbdev.c
@@ -5,6 +5,7 @@
  *
  **************************************************************************/
 
+#include <linux/fb.h>
 #include <linux/pfn_t.h>
 
 #include <drm/drm_crtc_helper.h>
@@ -134,13 +135,10 @@ static void psb_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops psb_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_setcolreg = psb_fbdev_fb_setcolreg,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap = psb_fbdev_fb_mmap,
 	.fb_destroy = psb_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 05/13] drm/gma500: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Patrik Jakobsson

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Gma500 does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/Kconfig | 1 +
 drivers/gpu/drm/gma500/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 2efc0eb41c64..cd3d92725ed4 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -3,6 +3,7 @@ config DRM_GMA500
 	tristate "Intel GMA500/600/3600/3650 KMS Framebuffer"
 	depends on DRM && PCI && X86 && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select I2C
 	select I2C_ALGOBIT
 	# GMA500 depends on ACPI_VIDEO when ACPI is enabled, just like i915
diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
index 4f0309548b2b..955cbe9f05a7 100644
--- a/drivers/gpu/drm/gma500/fbdev.c
+++ b/drivers/gpu/drm/gma500/fbdev.c
@@ -5,6 +5,7 @@
  *
  **************************************************************************/
 
+#include <linux/fb.h>
 #include <linux/pfn_t.h>
 
 #include <drm/drm_crtc_helper.h>
@@ -134,13 +135,10 @@ static void psb_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops psb_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_setcolreg = psb_fbdev_fb_setcolreg,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap = psb_fbdev_fb_mmap,
 	.fb_destroy = psb_fbdev_fb_destroy,
 };
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 05/13] drm/gma500: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Gma500 does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/Kconfig | 1 +
 drivers/gpu/drm/gma500/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 2efc0eb41c64..cd3d92725ed4 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -3,6 +3,7 @@ config DRM_GMA500
 	tristate "Intel GMA500/600/3600/3650 KMS Framebuffer"
 	depends on DRM && PCI && X86 && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select I2C
 	select I2C_ALGOBIT
 	# GMA500 depends on ACPI_VIDEO when ACPI is enabled, just like i915
diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
index 4f0309548b2b..955cbe9f05a7 100644
--- a/drivers/gpu/drm/gma500/fbdev.c
+++ b/drivers/gpu/drm/gma500/fbdev.c
@@ -5,6 +5,7 @@
  *
  **************************************************************************/
 
+#include <linux/fb.h>
 #include <linux/pfn_t.h>
 
 #include <drm/drm_crtc_helper.h>
@@ -134,13 +135,10 @@ static void psb_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops psb_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_setcolreg = psb_fbdev_fb_setcolreg,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap = psb_fbdev_fb_mmap,
 	.fb_destroy = psb_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 05/13] drm/gma500: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Gma500 does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
---
 drivers/gpu/drm/gma500/Kconfig | 1 +
 drivers/gpu/drm/gma500/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/gma500/Kconfig b/drivers/gpu/drm/gma500/Kconfig
index 2efc0eb41c64..cd3d92725ed4 100644
--- a/drivers/gpu/drm/gma500/Kconfig
+++ b/drivers/gpu/drm/gma500/Kconfig
@@ -3,6 +3,7 @@ config DRM_GMA500
 	tristate "Intel GMA500/600/3600/3650 KMS Framebuffer"
 	depends on DRM && PCI && X86 && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select I2C
 	select I2C_ALGOBIT
 	# GMA500 depends on ACPI_VIDEO when ACPI is enabled, just like i915
diff --git a/drivers/gpu/drm/gma500/fbdev.c b/drivers/gpu/drm/gma500/fbdev.c
index 4f0309548b2b..955cbe9f05a7 100644
--- a/drivers/gpu/drm/gma500/fbdev.c
+++ b/drivers/gpu/drm/gma500/fbdev.c
@@ -5,6 +5,7 @@
  *
  **************************************************************************/
 
+#include <linux/fb.h>
 #include <linux/pfn_t.h>
 
 #include <drm/drm_crtc_helper.h>
@@ -134,13 +135,10 @@ static void psb_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops psb_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_IO_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_setcolreg = psb_fbdev_fb_setcolreg,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	__FB_DEFAULT_IO_OPS_DRAW,
 	.fb_mmap = psb_fbdev_fb_mmap,
 	.fb_destroy = psb_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 06/13] drm/radeon: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Alex Deucher, Christian König, Pan,
	Xinhui

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Radeon does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
---
 drivers/gpu/drm/radeon/Kconfig        | 1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig
index e19d77d58810..fe498c8af1bb 100644
--- a/drivers/gpu/drm/radeon/Kconfig
+++ b/drivers/gpu/drm/radeon/Kconfig
@@ -11,6 +11,7 @@ config DRM_RADEON
 	select DRM_SUBALLOC_HELPER
         select DRM_TTM
 	select DRM_TTM_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_HDA_COMPONENT if SND_HDA_CORE
 	select POWER_SUPPLY
 	select HWMON
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fe76e29910ef..28212c2d6c98 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -24,6 +24,7 @@
  *     David Airlie
  */
 
+#include <linux/fb.h>
 #include <linux/pci.h>
 #include <linux/pm_runtime.h>
 #include <linux/vga_switcheroo.h>
@@ -190,14 +191,10 @@ static void radeon_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops radeon_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
-	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_open = radeon_fbdev_fb_open,
 	.fb_release = radeon_fbdev_fb_release,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	FB_DEFAULT_IO_OPS,
+	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_destroy = radeon_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 06/13] drm/radeon: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Pan, Xinhui,
	dri-devel, Alex Deucher, amd-gfx, Thomas Zimmermann, linux-tegra,
	freedreno, Christian König, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Radeon does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
---
 drivers/gpu/drm/radeon/Kconfig        | 1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig
index e19d77d58810..fe498c8af1bb 100644
--- a/drivers/gpu/drm/radeon/Kconfig
+++ b/drivers/gpu/drm/radeon/Kconfig
@@ -11,6 +11,7 @@ config DRM_RADEON
 	select DRM_SUBALLOC_HELPER
         select DRM_TTM
 	select DRM_TTM_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_HDA_COMPONENT if SND_HDA_CORE
 	select POWER_SUPPLY
 	select HWMON
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fe76e29910ef..28212c2d6c98 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -24,6 +24,7 @@
  *     David Airlie
  */
 
+#include <linux/fb.h>
 #include <linux/pci.h>
 #include <linux/pm_runtime.h>
 #include <linux/vga_switcheroo.h>
@@ -190,14 +191,10 @@ static void radeon_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops radeon_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
-	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_open = radeon_fbdev_fb_open,
 	.fb_release = radeon_fbdev_fb_release,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	FB_DEFAULT_IO_OPS,
+	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_destroy = radeon_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 06/13] drm/radeon: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Alex Deucher, Christian König, Pan,
	Xinhui

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Radeon does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
---
 drivers/gpu/drm/radeon/Kconfig        | 1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig
index e19d77d58810..fe498c8af1bb 100644
--- a/drivers/gpu/drm/radeon/Kconfig
+++ b/drivers/gpu/drm/radeon/Kconfig
@@ -11,6 +11,7 @@ config DRM_RADEON
 	select DRM_SUBALLOC_HELPER
         select DRM_TTM
 	select DRM_TTM_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_HDA_COMPONENT if SND_HDA_CORE
 	select POWER_SUPPLY
 	select HWMON
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fe76e29910ef..28212c2d6c98 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -24,6 +24,7 @@
  *     David Airlie
  */
 
+#include <linux/fb.h>
 #include <linux/pci.h>
 #include <linux/pm_runtime.h>
 #include <linux/vga_switcheroo.h>
@@ -190,14 +191,10 @@ static void radeon_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops radeon_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
-	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_open = radeon_fbdev_fb_open,
 	.fb_release = radeon_fbdev_fb_release,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	FB_DEFAULT_IO_OPS,
+	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_destroy = radeon_fbdev_fb_destroy,
 };
 
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [Intel-gfx] [PATCH v5 06/13] drm/radeon: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Pan, Xinhui,
	dri-devel, Alex Deucher, amd-gfx, Thomas Zimmermann, linux-tegra,
	freedreno, Christian König, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Radeon does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
---
 drivers/gpu/drm/radeon/Kconfig        | 1 +
 drivers/gpu/drm/radeon/radeon_fbdev.c | 9 +++------
 2 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig
index e19d77d58810..fe498c8af1bb 100644
--- a/drivers/gpu/drm/radeon/Kconfig
+++ b/drivers/gpu/drm/radeon/Kconfig
@@ -11,6 +11,7 @@ config DRM_RADEON
 	select DRM_SUBALLOC_HELPER
         select DRM_TTM
 	select DRM_TTM_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select SND_HDA_COMPONENT if SND_HDA_CORE
 	select POWER_SUPPLY
 	select HWMON
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index fe76e29910ef..28212c2d6c98 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -24,6 +24,7 @@
  *     David Airlie
  */
 
+#include <linux/fb.h>
 #include <linux/pci.h>
 #include <linux/pm_runtime.h>
 #include <linux/vga_switcheroo.h>
@@ -190,14 +191,10 @@ static void radeon_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops radeon_fbdev_fb_ops = {
 	.owner = THIS_MODULE,
-	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_open = radeon_fbdev_fb_open,
 	.fb_release = radeon_fbdev_fb_release,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
+	FB_DEFAULT_IO_OPS,
+	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_destroy = radeon_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 07/13] drm/fbdev-dma: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Fbdev-dma does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/Kconfig         |  1 +
 drivers/gpu/drm/drm_fbdev_dma.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index ba3fb04bb691..77fb10ddd8a2 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -223,6 +223,7 @@ config DRM_TTM_HELPER
 config DRM_GEM_DMA_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Choose this if you need the GEM DMA helper functions
 
diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
index 728deffcc0d9..d86773fa8ab0 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -1,5 +1,7 @@
 // SPDX-License-Identifier: MIT
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -64,14 +66,11 @@ static const struct fb_ops drm_fbdev_dma_fb_ops = {
 	.owner = THIS_MODULE,
 	.fb_open = drm_fbdev_dma_fb_open,
 	.fb_release = drm_fbdev_dma_fb_release,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-	.fb_destroy = drm_fbdev_dma_fb_destroy,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = drm_fbdev_dma_fb_mmap,
+	.fb_destroy = drm_fbdev_dma_fb_destroy,
 };
 
 /*
-- 
2.40.1


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

* [PATCH v5 07/13] drm/fbdev-dma: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Fbdev-dma does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/Kconfig         |  1 +
 drivers/gpu/drm/drm_fbdev_dma.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index ba3fb04bb691..77fb10ddd8a2 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -223,6 +223,7 @@ config DRM_TTM_HELPER
 config DRM_GEM_DMA_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Choose this if you need the GEM DMA helper functions
 
diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
index 728deffcc0d9..d86773fa8ab0 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -1,5 +1,7 @@
 // SPDX-License-Identifier: MIT
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -64,14 +66,11 @@ static const struct fb_ops drm_fbdev_dma_fb_ops = {
 	.owner = THIS_MODULE,
 	.fb_open = drm_fbdev_dma_fb_open,
 	.fb_release = drm_fbdev_dma_fb_release,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-	.fb_destroy = drm_fbdev_dma_fb_destroy,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = drm_fbdev_dma_fb_mmap,
+	.fb_destroy = drm_fbdev_dma_fb_destroy,
 };
 
 /*
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 07/13] drm/fbdev-dma: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Fbdev-dma does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/Kconfig         |  1 +
 drivers/gpu/drm/drm_fbdev_dma.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index ba3fb04bb691..77fb10ddd8a2 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -223,6 +223,7 @@ config DRM_TTM_HELPER
 config DRM_GEM_DMA_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Choose this if you need the GEM DMA helper functions
 
diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
index 728deffcc0d9..d86773fa8ab0 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -1,5 +1,7 @@
 // SPDX-License-Identifier: MIT
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -64,14 +66,11 @@ static const struct fb_ops drm_fbdev_dma_fb_ops = {
 	.owner = THIS_MODULE,
 	.fb_open = drm_fbdev_dma_fb_open,
 	.fb_release = drm_fbdev_dma_fb_release,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-	.fb_destroy = drm_fbdev_dma_fb_destroy,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = drm_fbdev_dma_fb_mmap,
+	.fb_destroy = drm_fbdev_dma_fb_destroy,
 };
 
 /*
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 07/13] drm/fbdev-dma: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Fbdev-dma does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/Kconfig         |  1 +
 drivers/gpu/drm/drm_fbdev_dma.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index ba3fb04bb691..77fb10ddd8a2 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -223,6 +223,7 @@ config DRM_TTM_HELPER
 config DRM_GEM_DMA_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Choose this if you need the GEM DMA helper functions
 
diff --git a/drivers/gpu/drm/drm_fbdev_dma.c b/drivers/gpu/drm/drm_fbdev_dma.c
index 728deffcc0d9..d86773fa8ab0 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -1,5 +1,7 @@
 // SPDX-License-Identifier: MIT
 
+#include <linux/fb.h>
+
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_drv.h>
 #include <drm/drm_fb_helper.h>
@@ -64,14 +66,11 @@ static const struct fb_ops drm_fbdev_dma_fb_ops = {
 	.owner = THIS_MODULE,
 	.fb_open = drm_fbdev_dma_fb_open,
 	.fb_release = drm_fbdev_dma_fb_release,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-	.fb_destroy = drm_fbdev_dma_fb_destroy,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = drm_fbdev_dma_fb_mmap,
+	.fb_destroy = drm_fbdev_dma_fb_destroy,
 };
 
 /*
-- 
2.40.1


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

* [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Tomi Valkeinen

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Tomi Valkeinen <tomba@kernel.org>
---
 drivers/gpu/drm/omapdrm/Kconfig      |  1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
index 76ded1568bd0..b4ac76c9f31b 100644
--- a/drivers/gpu/drm/omapdrm/Kconfig
+++ b/drivers/gpu/drm/omapdrm/Kconfig
@@ -4,6 +4,7 @@ config DRM_OMAP
 	depends on DRM && OF
 	depends on ARCH_OMAP2PLUS
 	select DRM_KMS_HELPER
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select VIDEOMODE_HELPERS
 	select HDMI
 	default n
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index b950e93b3846..b7ccce0704a3 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <rob@ti.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops omap_fb_ops = {
 	.owner = THIS_MODULE,
-
+	FB_DEFAULT_SYS_OPS,
 	.fb_check_var	= drm_fb_helper_check_var,
 	.fb_set_par	= drm_fb_helper_set_par,
 	.fb_setcmap	= drm_fb_helper_setcmap,
 	.fb_blank	= drm_fb_helper_blank,
 	.fb_pan_display = omap_fbdev_pan_display,
 	.fb_ioctl	= drm_fb_helper_ioctl,
-
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-
 	.fb_destroy = omap_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Tomi Valkeinen

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Tomi Valkeinen <tomba@kernel.org>
---
 drivers/gpu/drm/omapdrm/Kconfig      |  1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
index 76ded1568bd0..b4ac76c9f31b 100644
--- a/drivers/gpu/drm/omapdrm/Kconfig
+++ b/drivers/gpu/drm/omapdrm/Kconfig
@@ -4,6 +4,7 @@ config DRM_OMAP
 	depends on DRM && OF
 	depends on ARCH_OMAP2PLUS
 	select DRM_KMS_HELPER
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select VIDEOMODE_HELPERS
 	select HDMI
 	default n
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index b950e93b3846..b7ccce0704a3 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <rob@ti.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops omap_fb_ops = {
 	.owner = THIS_MODULE,
-
+	FB_DEFAULT_SYS_OPS,
 	.fb_check_var	= drm_fb_helper_check_var,
 	.fb_set_par	= drm_fb_helper_set_par,
 	.fb_setcmap	= drm_fb_helper_setcmap,
 	.fb_blank	= drm_fb_helper_blank,
 	.fb_pan_display = omap_fbdev_pan_display,
 	.fb_ioctl	= drm_fb_helper_ioctl,
-
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-
 	.fb_destroy = omap_fbdev_fb_destroy,
 };
 
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, Tomi Valkeinen, linux-arm-msm, intel-gfx,
	dri-devel, amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Tomi Valkeinen <tomba@kernel.org>
---
 drivers/gpu/drm/omapdrm/Kconfig      |  1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
index 76ded1568bd0..b4ac76c9f31b 100644
--- a/drivers/gpu/drm/omapdrm/Kconfig
+++ b/drivers/gpu/drm/omapdrm/Kconfig
@@ -4,6 +4,7 @@ config DRM_OMAP
 	depends on DRM && OF
 	depends on ARCH_OMAP2PLUS
 	select DRM_KMS_HELPER
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select VIDEOMODE_HELPERS
 	select HDMI
 	default n
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index b950e93b3846..b7ccce0704a3 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <rob@ti.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops omap_fb_ops = {
 	.owner = THIS_MODULE,
-
+	FB_DEFAULT_SYS_OPS,
 	.fb_check_var	= drm_fb_helper_check_var,
 	.fb_set_par	= drm_fb_helper_set_par,
 	.fb_setcmap	= drm_fb_helper_setcmap,
 	.fb_blank	= drm_fb_helper_blank,
 	.fb_pan_display = omap_fbdev_pan_display,
 	.fb_ioctl	= drm_fb_helper_ioctl,
-
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-
 	.fb_destroy = omap_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, Tomi Valkeinen, linux-arm-msm, intel-gfx,
	dri-devel, amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Tomi Valkeinen <tomba@kernel.org>
---
 drivers/gpu/drm/omapdrm/Kconfig      |  1 +
 drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
index 76ded1568bd0..b4ac76c9f31b 100644
--- a/drivers/gpu/drm/omapdrm/Kconfig
+++ b/drivers/gpu/drm/omapdrm/Kconfig
@@ -4,6 +4,7 @@ config DRM_OMAP
 	depends on DRM && OF
 	depends on ARCH_OMAP2PLUS
 	select DRM_KMS_HELPER
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select VIDEOMODE_HELPERS
 	select HDMI
 	default n
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index b950e93b3846..b7ccce0704a3 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <rob@ti.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops omap_fb_ops = {
 	.owner = THIS_MODULE,
-
+	FB_DEFAULT_SYS_OPS,
 	.fb_check_var	= drm_fb_helper_check_var,
 	.fb_set_par	= drm_fb_helper_set_par,
 	.fb_setcmap	= drm_fb_helper_setcmap,
 	.fb_blank	= drm_fb_helper_blank,
 	.fb_pan_display = omap_fbdev_pan_display,
 	.fb_ioctl	= drm_fb_helper_ioctl,
-
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
-
 	.fb_destroy = omap_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 09/13] drm/tegra: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Thierry Reding, Mikko Perttunen,
	Jonathan Hunter

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Tegra does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
---
 drivers/gpu/drm/tegra/Kconfig | 1 +
 drivers/gpu/drm/tegra/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 56453ca277c2..498313778175 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -12,6 +12,7 @@ config DRM_TEGRA
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select TEGRA_HOST1X
 	select INTERCONNECT
 	select IOMMU_IOVA
diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
index dca9eccae466..e74d9be981c7 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -8,6 +8,7 @@
  */
 
 #include <linux/console.h>
+#include <linux/fb.h>
 #include <linux/vmalloc.h>
 
 #include <drm/drm_drv.h>
@@ -58,12 +59,9 @@ static void tegra_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops tegra_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = tegra_fb_mmap,
 	.fb_destroy = tegra_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 09/13] drm/tegra: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Thierry Reding, Mikko Perttunen,
	Jonathan Hunter

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Tegra does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
---
 drivers/gpu/drm/tegra/Kconfig | 1 +
 drivers/gpu/drm/tegra/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 56453ca277c2..498313778175 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -12,6 +12,7 @@ config DRM_TEGRA
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select TEGRA_HOST1X
 	select INTERCONNECT
 	select IOMMU_IOVA
diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
index dca9eccae466..e74d9be981c7 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -8,6 +8,7 @@
  */
 
 #include <linux/console.h>
+#include <linux/fb.h>
 #include <linux/vmalloc.h>
 
 #include <drm/drm_drv.h>
@@ -58,12 +59,9 @@ static void tegra_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops tegra_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = tegra_fb_mmap,
 	.fb_destroy = tegra_fbdev_fb_destroy,
 };
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 09/13] drm/tegra: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel,
	Mikko Perttunen, Thierry Reding, amd-gfx, Thomas Zimmermann,
	linux-tegra, Jonathan Hunter, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Tegra does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
---
 drivers/gpu/drm/tegra/Kconfig | 1 +
 drivers/gpu/drm/tegra/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 56453ca277c2..498313778175 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -12,6 +12,7 @@ config DRM_TEGRA
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select TEGRA_HOST1X
 	select INTERCONNECT
 	select IOMMU_IOVA
diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
index dca9eccae466..e74d9be981c7 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -8,6 +8,7 @@
  */
 
 #include <linux/console.h>
+#include <linux/fb.h>
 #include <linux/vmalloc.h>
 
 #include <drm/drm_drv.h>
@@ -58,12 +59,9 @@ static void tegra_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops tegra_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = tegra_fb_mmap,
 	.fb_destroy = tegra_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 09/13] drm/tegra: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel,
	Mikko Perttunen, amd-gfx, Thomas Zimmermann, linux-tegra,
	Jonathan Hunter, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Tegra does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
---
 drivers/gpu/drm/tegra/Kconfig | 1 +
 drivers/gpu/drm/tegra/fbdev.c | 8 +++-----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 56453ca277c2..498313778175 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -12,6 +12,7 @@ config DRM_TEGRA
 	select DRM_KMS_HELPER
 	select DRM_MIPI_DSI
 	select DRM_PANEL
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select TEGRA_HOST1X
 	select INTERCONNECT
 	select IOMMU_IOVA
diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
index dca9eccae466..e74d9be981c7 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -8,6 +8,7 @@
  */
 
 #include <linux/console.h>
+#include <linux/fb.h>
 #include <linux/vmalloc.h>
 
 #include <drm/drm_drv.h>
@@ -58,12 +59,9 @@ static void tegra_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops tegra_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_SYS_OPS_RDWR,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_SYS_OPS_DRAW,
 	.fb_mmap = tegra_fb_mmap,
 	.fb_destroy = tegra_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 10/13] drm/fb-helper: Export helpers for marking damage areas
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Export drm_fb_helper_damage() and drm_fb_helper_damage_range(), which
handle damage areas for fbdev emulation. This is a temporary export
that allows to move the DRM I/O helpers for fbdev into drivers. Only
fbdev-generic and i915 need them. Both will be updated to implement
damage handling by themselves and the exported functions will be removed.

v4:
	* update interfaces

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/drm_fb_helper.c | 22 ++++++++++++++++++++++
 include/drm/drm_fb_helper.h     |  3 +++
 2 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 8dc376b771d2..7071c810ba83 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -670,6 +670,28 @@ static void drm_fb_helper_memory_range_to_clip(struct fb_info *info, off_t off,
 	drm_rect_init(clip, x1, y1, x2 - x1, y2 - y1);
 }
 
+/* Don't use in new code. */
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+	struct drm_rect damage_area;
+
+	drm_fb_helper_memory_range_to_clip(info, off, len, &damage_area);
+	drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1,
+			     drm_rect_width(&damage_area),
+			     drm_rect_height(&damage_area));
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_range);
+
+/* Don't use in new code. */
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+
+	drm_fb_helper_damage(fb_helper, x, y, width, height);
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_area);
+
 /**
  * drm_fb_helper_deferred_io() - fbdev deferred_io callback function
  * @info: fb_info struct pointer
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 72032c354a30..7d5804882be7 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -253,6 +253,9 @@ void drm_fb_helper_fill_info(struct fb_info *info,
 			     struct drm_fb_helper *fb_helper,
 			     struct drm_fb_helper_surface_size *sizes);
 
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len);
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height);
+
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
 ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-- 
2.40.1


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

* [PATCH v5 10/13] drm/fb-helper: Export helpers for marking damage areas
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Export drm_fb_helper_damage() and drm_fb_helper_damage_range(), which
handle damage areas for fbdev emulation. This is a temporary export
that allows to move the DRM I/O helpers for fbdev into drivers. Only
fbdev-generic and i915 need them. Both will be updated to implement
damage handling by themselves and the exported functions will be removed.

v4:
	* update interfaces

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/drm_fb_helper.c | 22 ++++++++++++++++++++++
 include/drm/drm_fb_helper.h     |  3 +++
 2 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 8dc376b771d2..7071c810ba83 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -670,6 +670,28 @@ static void drm_fb_helper_memory_range_to_clip(struct fb_info *info, off_t off,
 	drm_rect_init(clip, x1, y1, x2 - x1, y2 - y1);
 }
 
+/* Don't use in new code. */
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+	struct drm_rect damage_area;
+
+	drm_fb_helper_memory_range_to_clip(info, off, len, &damage_area);
+	drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1,
+			     drm_rect_width(&damage_area),
+			     drm_rect_height(&damage_area));
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_range);
+
+/* Don't use in new code. */
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+
+	drm_fb_helper_damage(fb_helper, x, y, width, height);
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_area);
+
 /**
  * drm_fb_helper_deferred_io() - fbdev deferred_io callback function
  * @info: fb_info struct pointer
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 72032c354a30..7d5804882be7 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -253,6 +253,9 @@ void drm_fb_helper_fill_info(struct fb_info *info,
 			     struct drm_fb_helper *fb_helper,
 			     struct drm_fb_helper_surface_size *sizes);
 
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len);
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height);
+
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
 ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 10/13] drm/fb-helper: Export helpers for marking damage areas
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Export drm_fb_helper_damage() and drm_fb_helper_damage_range(), which
handle damage areas for fbdev emulation. This is a temporary export
that allows to move the DRM I/O helpers for fbdev into drivers. Only
fbdev-generic and i915 need them. Both will be updated to implement
damage handling by themselves and the exported functions will be removed.

v4:
	* update interfaces

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/drm_fb_helper.c | 22 ++++++++++++++++++++++
 include/drm/drm_fb_helper.h     |  3 +++
 2 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 8dc376b771d2..7071c810ba83 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -670,6 +670,28 @@ static void drm_fb_helper_memory_range_to_clip(struct fb_info *info, off_t off,
 	drm_rect_init(clip, x1, y1, x2 - x1, y2 - y1);
 }
 
+/* Don't use in new code. */
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+	struct drm_rect damage_area;
+
+	drm_fb_helper_memory_range_to_clip(info, off, len, &damage_area);
+	drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1,
+			     drm_rect_width(&damage_area),
+			     drm_rect_height(&damage_area));
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_range);
+
+/* Don't use in new code. */
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+
+	drm_fb_helper_damage(fb_helper, x, y, width, height);
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_area);
+
 /**
  * drm_fb_helper_deferred_io() - fbdev deferred_io callback function
  * @info: fb_info struct pointer
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 72032c354a30..7d5804882be7 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -253,6 +253,9 @@ void drm_fb_helper_fill_info(struct fb_info *info,
 			     struct drm_fb_helper *fb_helper,
 			     struct drm_fb_helper_surface_size *sizes);
 
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len);
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height);
+
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
 ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 10/13] drm/fb-helper: Export helpers for marking damage areas
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Export drm_fb_helper_damage() and drm_fb_helper_damage_range(), which
handle damage areas for fbdev emulation. This is a temporary export
that allows to move the DRM I/O helpers for fbdev into drivers. Only
fbdev-generic and i915 need them. Both will be updated to implement
damage handling by themselves and the exported functions will be removed.

v4:
	* update interfaces

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/drm_fb_helper.c | 22 ++++++++++++++++++++++
 include/drm/drm_fb_helper.h     |  3 +++
 2 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 8dc376b771d2..7071c810ba83 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -670,6 +670,28 @@ static void drm_fb_helper_memory_range_to_clip(struct fb_info *info, off_t off,
 	drm_rect_init(clip, x1, y1, x2 - x1, y2 - y1);
 }
 
+/* Don't use in new code. */
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+	struct drm_rect damage_area;
+
+	drm_fb_helper_memory_range_to_clip(info, off, len, &damage_area);
+	drm_fb_helper_damage(fb_helper, damage_area.x1, damage_area.y1,
+			     drm_rect_width(&damage_area),
+			     drm_rect_height(&damage_area));
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_range);
+
+/* Don't use in new code. */
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height)
+{
+	struct drm_fb_helper *fb_helper = info->par;
+
+	drm_fb_helper_damage(fb_helper, x, y, width, height);
+}
+EXPORT_SYMBOL(drm_fb_helper_damage_area);
+
 /**
  * drm_fb_helper_deferred_io() - fbdev deferred_io callback function
  * @info: fb_info struct pointer
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 72032c354a30..7d5804882be7 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -253,6 +253,9 @@ void drm_fb_helper_fill_info(struct fb_info *info,
 			     struct drm_fb_helper *fb_helper,
 			     struct drm_fb_helper_surface_size *sizes);
 
+void drm_fb_helper_damage_range(struct fb_info *info, off_t off, size_t len);
+void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u32 height);
+
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
 ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-- 
2.40.1


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

* [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                     ` (2 preceding siblings ...)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Dmitry Baryshkov, Rob Clark, Abhinav Kumar,
	Sean Paul

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Msm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

Msm's fbdev emulation has been incomplete as it didn't implement
damage handling. Partilly fix this by implementing damage handling
for write and draw operation. It is still missing for mmaped pages.

v4:
	* use initializer macros for struct fb_ops
	* partially support damage handling
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Sean Paul <sean@poorly.run>
---
 drivers/gpu/drm/msm/Kconfig     |  1 +
 drivers/gpu/drm/msm/msm_fbdev.c | 17 ++++++++---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 85f5ab1d552c..a78662bd6273 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -21,6 +21,7 @@ config DRM_MSM
 	select DRM_BRIDGE
 	select DRM_PANEL_BRIDGE
 	select DRM_SCHED
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select SHMEM
 	select TMPFS
 	select QCOM_SCM
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index ce0ba6d1979a..fa9c1cbffae3 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <robdclark@gmail.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -23,6 +25,10 @@ module_param(fbdev, bool, 0600);
  * fbdev funcs, to implement legacy fbdev interface on top of drm driver
  */
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(msm_fbdev,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area)
+
 static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
@@ -52,16 +58,9 @@ static void msm_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops msm_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(msm_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
-
-	/* Note: to properly handle manual update displays, we wrap the
-	 * basic fbdev ops which write to the framebuffer
-	 */
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(msm_fbdev),
 	.fb_mmap = msm_fbdev_mmap,
 	.fb_destroy = msm_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Dmitry Baryshkov, Rob Clark, Abhinav Kumar,
	Sean Paul

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Msm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

Msm's fbdev emulation has been incomplete as it didn't implement
damage handling. Partilly fix this by implementing damage handling
for write and draw operation. It is still missing for mmaped pages.

v4:
	* use initializer macros for struct fb_ops
	* partially support damage handling
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Sean Paul <sean@poorly.run>
---
 drivers/gpu/drm/msm/Kconfig     |  1 +
 drivers/gpu/drm/msm/msm_fbdev.c | 17 ++++++++---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 85f5ab1d552c..a78662bd6273 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -21,6 +21,7 @@ config DRM_MSM
 	select DRM_BRIDGE
 	select DRM_PANEL_BRIDGE
 	select DRM_SCHED
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select SHMEM
 	select TMPFS
 	select QCOM_SCM
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index ce0ba6d1979a..fa9c1cbffae3 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <robdclark@gmail.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -23,6 +25,10 @@ module_param(fbdev, bool, 0600);
  * fbdev funcs, to implement legacy fbdev interface on top of drm driver
  */
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(msm_fbdev,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area)
+
 static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
@@ -52,16 +58,9 @@ static void msm_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops msm_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(msm_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
-
-	/* Note: to properly handle manual update displays, we wrap the
-	 * basic fbdev ops which write to the framebuffer
-	 */
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(msm_fbdev),
 	.fb_mmap = msm_fbdev_mmap,
 	.fb_destroy = msm_fbdev_fb_destroy,
 };
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: Sean Paul, linux-samsung-soc, linux-arm-msm, intel-gfx,
	Abhinav Kumar, dri-devel, Dmitry Baryshkov, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Msm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

Msm's fbdev emulation has been incomplete as it didn't implement
damage handling. Partilly fix this by implementing damage handling
for write and draw operation. It is still missing for mmaped pages.

v4:
	* use initializer macros for struct fb_ops
	* partially support damage handling
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Sean Paul <sean@poorly.run>
---
 drivers/gpu/drm/msm/Kconfig     |  1 +
 drivers/gpu/drm/msm/msm_fbdev.c | 17 ++++++++---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 85f5ab1d552c..a78662bd6273 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -21,6 +21,7 @@ config DRM_MSM
 	select DRM_BRIDGE
 	select DRM_PANEL_BRIDGE
 	select DRM_SCHED
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select SHMEM
 	select TMPFS
 	select QCOM_SCM
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index ce0ba6d1979a..fa9c1cbffae3 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <robdclark@gmail.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -23,6 +25,10 @@ module_param(fbdev, bool, 0600);
  * fbdev funcs, to implement legacy fbdev interface on top of drm driver
  */
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(msm_fbdev,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area)
+
 static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
@@ -52,16 +58,9 @@ static void msm_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops msm_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(msm_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
-
-	/* Note: to properly handle manual update displays, we wrap the
-	 * basic fbdev ops which write to the framebuffer
-	 */
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(msm_fbdev),
 	.fb_mmap = msm_fbdev_mmap,
 	.fb_destroy = msm_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Abhinav Kumar,
	dri-devel, Dmitry Baryshkov, amd-gfx, Thomas Zimmermann,
	linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Msm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

Msm's fbdev emulation has been incomplete as it didn't implement
damage handling. Partilly fix this by implementing damage handling
for write and draw operation. It is still missing for mmaped pages.

v4:
	* use initializer macros for struct fb_ops
	* partially support damage handling
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Sean Paul <sean@poorly.run>
---
 drivers/gpu/drm/msm/Kconfig     |  1 +
 drivers/gpu/drm/msm/msm_fbdev.c | 17 ++++++++---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 85f5ab1d552c..a78662bd6273 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -21,6 +21,7 @@ config DRM_MSM
 	select DRM_BRIDGE
 	select DRM_PANEL_BRIDGE
 	select DRM_SCHED
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select SHMEM
 	select TMPFS
 	select QCOM_SCM
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index ce0ba6d1979a..fa9c1cbffae3 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <robdclark@gmail.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -23,6 +25,10 @@ module_param(fbdev, bool, 0600);
  * fbdev funcs, to implement legacy fbdev interface on top of drm driver
  */
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(msm_fbdev,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area)
+
 static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
@@ -52,16 +58,9 @@ static void msm_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops msm_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(msm_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
-
-	/* Note: to properly handle manual update displays, we wrap the
-	 * basic fbdev ops which write to the framebuffer
-	 */
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(msm_fbdev),
 	.fb_mmap = msm_fbdev_mmap,
 	.fb_destroy = msm_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: Sean Paul, linux-samsung-soc, linux-arm-msm, intel-gfx,
	Abhinav Kumar, dri-devel, Dmitry Baryshkov, Rob Clark, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Msm does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

Msm's fbdev emulation has been incomplete as it didn't implement
damage handling. Partilly fix this by implementing damage handling
for write and draw operation. It is still missing for mmaped pages.

v4:
	* use initializer macros for struct fb_ops
	* partially support damage handling
v2:
	* use FB_SYS_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Cc: Sean Paul <sean@poorly.run>
---
 drivers/gpu/drm/msm/Kconfig     |  1 +
 drivers/gpu/drm/msm/msm_fbdev.c | 17 ++++++++---------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index 85f5ab1d552c..a78662bd6273 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -21,6 +21,7 @@ config DRM_MSM
 	select DRM_BRIDGE
 	select DRM_PANEL_BRIDGE
 	select DRM_SCHED
+	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
 	select SHMEM
 	select TMPFS
 	select QCOM_SCM
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index ce0ba6d1979a..fa9c1cbffae3 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -4,6 +4,8 @@
  * Author: Rob Clark <robdclark@gmail.com>
  */
 
+#include <linux/fb.h>
+
 #include <drm/drm_drv.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_helper.h>
@@ -23,6 +25,10 @@ module_param(fbdev, bool, 0600);
  * fbdev funcs, to implement legacy fbdev interface on top of drm driver
  */
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(msm_fbdev,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area)
+
 static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 {
 	struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
@@ -52,16 +58,9 @@ static void msm_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops msm_fb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(msm_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
-
-	/* Note: to properly handle manual update displays, we wrap the
-	 * basic fbdev ops which write to the framebuffer
-	 */
-	.fb_read = drm_fb_helper_sys_read,
-	.fb_write = drm_fb_helper_sys_write,
-	.fb_fillrect = drm_fb_helper_sys_fillrect,
-	.fb_copyarea = drm_fb_helper_sys_copyarea,
-	.fb_imageblit = drm_fb_helper_sys_imageblit,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(msm_fbdev),
 	.fb_mmap = msm_fbdev_mmap,
 	.fb_destroy = msm_fbdev_fb_destroy,
 };
-- 
2.40.1


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

* [PATCH v5 12/13] drm/fbdev-generic: Implement dedicated fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the callbacks. Fbdev-generic was the
only caller of the DRM helpers, so remove them from the helper
module.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_SYS_HELPERS_DEFERRED option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
---
 drivers/gpu/drm/Kconfig             |   6 +-
 drivers/gpu/drm/drm_fb_helper.c     | 107 ----------------------------
 drivers/gpu/drm/drm_fbdev_generic.c |  11 ++-
 include/drm/drm_fb_helper.h         |  41 -----------
 4 files changed, 6 insertions(+), 159 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 77fb10ddd8a2..92a782827b7b 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -95,6 +95,7 @@ config DRM_KUNIT_TEST
 config DRM_KMS_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  CRTC helpers for KMS drivers.
 
@@ -135,11 +136,6 @@ config DRM_FBDEV_EMULATION
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
-	select FB_DEFERRED_IO
-	select FB_SYS_FOPS
-	select FB_SYS_FILLRECT
-	select FB_SYS_COPYAREA
-	select FB_SYS_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7071c810ba83..7f6e54967acb 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_sys_read - Implements struct &fb_ops.fb_read for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_sys_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_read);
-
-/**
- * drm_fb_helper_sys_write - Implements struct &fb_ops.fb_write for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_sys_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_write);
-
-/**
- * drm_fb_helper_sys_fillrect - wrapper around sys_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around sys_fillrect implemented by fbdev core
- */
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_fillrect);
-
-/**
- * drm_fb_helper_sys_copyarea - wrapper around sys_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around sys_copyarea implemented by fbdev core
- */
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_copyarea);
-
-/**
- * drm_fb_helper_sys_imageblit - wrapper around sys_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around sys_imageblit implemented by fbdev core
- */
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_imageblit);
-
 /**
  * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
  * @info: fb_info struct pointer
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index 8e5148bf40bb..98ae703848a0 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -34,6 +34,10 @@ static int drm_fbdev_generic_fb_release(struct fb_info *info, int user)
 	return 0;
 }
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(drm_fbdev_generic,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area);
+
 static void drm_fbdev_generic_fb_destroy(struct fb_info *info)
 {
 	struct drm_fb_helper *fb_helper = info->par;
@@ -56,13 +60,8 @@ static const struct fb_ops drm_fbdev_generic_fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_open	= drm_fbdev_generic_fb_open,
 	.fb_release	= drm_fbdev_generic_fb_release,
-	.fb_read	= drm_fb_helper_sys_read,
-	.fb_write	= drm_fb_helper_sys_write,
+	FB_DEFAULT_DEFERRED_OPS(drm_fbdev_generic),
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect	= drm_fb_helper_sys_fillrect,
-	.fb_copyarea	= drm_fb_helper_sys_copyarea,
-	.fb_imageblit	= drm_fb_helper_sys_imageblit,
-	.fb_mmap	= fb_deferred_io_mmap,
 	.fb_destroy	= drm_fbdev_generic_fb_destroy,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 7d5804882be7..b50fd0c0b713 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 			       size_t count, loff_t *ppos);
 ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
@@ -397,35 +385,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
-					     char __user *buf, size_t count,
-					     loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
-					      const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 					     size_t count, loff_t *ppos)
 {
-- 
2.40.1


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

* [PATCH v5 12/13] drm/fbdev-generic: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the callbacks. Fbdev-generic was the
only caller of the DRM helpers, so remove them from the helper
module.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_SYS_HELPERS_DEFERRED option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
---
 drivers/gpu/drm/Kconfig             |   6 +-
 drivers/gpu/drm/drm_fb_helper.c     | 107 ----------------------------
 drivers/gpu/drm/drm_fbdev_generic.c |  11 ++-
 include/drm/drm_fb_helper.h         |  41 -----------
 4 files changed, 6 insertions(+), 159 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 77fb10ddd8a2..92a782827b7b 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -95,6 +95,7 @@ config DRM_KUNIT_TEST
 config DRM_KMS_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  CRTC helpers for KMS drivers.
 
@@ -135,11 +136,6 @@ config DRM_FBDEV_EMULATION
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
-	select FB_DEFERRED_IO
-	select FB_SYS_FOPS
-	select FB_SYS_FILLRECT
-	select FB_SYS_COPYAREA
-	select FB_SYS_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7071c810ba83..7f6e54967acb 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_sys_read - Implements struct &fb_ops.fb_read for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_sys_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_read);
-
-/**
- * drm_fb_helper_sys_write - Implements struct &fb_ops.fb_write for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_sys_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_write);
-
-/**
- * drm_fb_helper_sys_fillrect - wrapper around sys_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around sys_fillrect implemented by fbdev core
- */
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_fillrect);
-
-/**
- * drm_fb_helper_sys_copyarea - wrapper around sys_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around sys_copyarea implemented by fbdev core
- */
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_copyarea);
-
-/**
- * drm_fb_helper_sys_imageblit - wrapper around sys_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around sys_imageblit implemented by fbdev core
- */
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_imageblit);
-
 /**
  * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
  * @info: fb_info struct pointer
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index 8e5148bf40bb..98ae703848a0 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -34,6 +34,10 @@ static int drm_fbdev_generic_fb_release(struct fb_info *info, int user)
 	return 0;
 }
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(drm_fbdev_generic,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area);
+
 static void drm_fbdev_generic_fb_destroy(struct fb_info *info)
 {
 	struct drm_fb_helper *fb_helper = info->par;
@@ -56,13 +60,8 @@ static const struct fb_ops drm_fbdev_generic_fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_open	= drm_fbdev_generic_fb_open,
 	.fb_release	= drm_fbdev_generic_fb_release,
-	.fb_read	= drm_fb_helper_sys_read,
-	.fb_write	= drm_fb_helper_sys_write,
+	FB_DEFAULT_DEFERRED_OPS(drm_fbdev_generic),
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect	= drm_fb_helper_sys_fillrect,
-	.fb_copyarea	= drm_fb_helper_sys_copyarea,
-	.fb_imageblit	= drm_fb_helper_sys_imageblit,
-	.fb_mmap	= fb_deferred_io_mmap,
 	.fb_destroy	= drm_fbdev_generic_fb_destroy,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 7d5804882be7..b50fd0c0b713 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 			       size_t count, loff_t *ppos);
 ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
@@ -397,35 +385,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
-					     char __user *buf, size_t count,
-					     loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
-					      const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 					     size_t count, loff_t *ppos)
 {
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 12/13] drm/fbdev-generic: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the callbacks. Fbdev-generic was the
only caller of the DRM helpers, so remove them from the helper
module.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_SYS_HELPERS_DEFERRED option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
---
 drivers/gpu/drm/Kconfig             |   6 +-
 drivers/gpu/drm/drm_fb_helper.c     | 107 ----------------------------
 drivers/gpu/drm/drm_fbdev_generic.c |  11 ++-
 include/drm/drm_fb_helper.h         |  41 -----------
 4 files changed, 6 insertions(+), 159 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 77fb10ddd8a2..92a782827b7b 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -95,6 +95,7 @@ config DRM_KUNIT_TEST
 config DRM_KMS_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  CRTC helpers for KMS drivers.
 
@@ -135,11 +136,6 @@ config DRM_FBDEV_EMULATION
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
-	select FB_DEFERRED_IO
-	select FB_SYS_FOPS
-	select FB_SYS_FILLRECT
-	select FB_SYS_COPYAREA
-	select FB_SYS_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7071c810ba83..7f6e54967acb 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_sys_read - Implements struct &fb_ops.fb_read for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_sys_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_read);
-
-/**
- * drm_fb_helper_sys_write - Implements struct &fb_ops.fb_write for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_sys_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_write);
-
-/**
- * drm_fb_helper_sys_fillrect - wrapper around sys_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around sys_fillrect implemented by fbdev core
- */
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_fillrect);
-
-/**
- * drm_fb_helper_sys_copyarea - wrapper around sys_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around sys_copyarea implemented by fbdev core
- */
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_copyarea);
-
-/**
- * drm_fb_helper_sys_imageblit - wrapper around sys_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around sys_imageblit implemented by fbdev core
- */
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_imageblit);
-
 /**
  * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
  * @info: fb_info struct pointer
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index 8e5148bf40bb..98ae703848a0 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -34,6 +34,10 @@ static int drm_fbdev_generic_fb_release(struct fb_info *info, int user)
 	return 0;
 }
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(drm_fbdev_generic,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area);
+
 static void drm_fbdev_generic_fb_destroy(struct fb_info *info)
 {
 	struct drm_fb_helper *fb_helper = info->par;
@@ -56,13 +60,8 @@ static const struct fb_ops drm_fbdev_generic_fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_open	= drm_fbdev_generic_fb_open,
 	.fb_release	= drm_fbdev_generic_fb_release,
-	.fb_read	= drm_fb_helper_sys_read,
-	.fb_write	= drm_fb_helper_sys_write,
+	FB_DEFAULT_DEFERRED_OPS(drm_fbdev_generic),
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect	= drm_fb_helper_sys_fillrect,
-	.fb_copyarea	= drm_fb_helper_sys_copyarea,
-	.fb_imageblit	= drm_fb_helper_sys_imageblit,
-	.fb_mmap	= fb_deferred_io_mmap,
 	.fb_destroy	= drm_fbdev_generic_fb_destroy,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 7d5804882be7..b50fd0c0b713 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 			       size_t count, loff_t *ppos);
 ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
@@ -397,35 +385,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
-					     char __user *buf, size_t count,
-					     loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
-					      const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 					     size_t count, loff_t *ppos)
 {
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 12/13] drm/fbdev-generic: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, linux-tegra, freedreno, linux-arm-kernel

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the callbacks. Fbdev-generic was the
only caller of the DRM helpers, so remove them from the helper
module.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_SYS_HELPERS_DEFERRED option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Sui Jingfeng <suijingfeng@loongson.cn>
Reviewed-by: Sui Jingfeng <suijingfeng@loongson.cn>
---
 drivers/gpu/drm/Kconfig             |   6 +-
 drivers/gpu/drm/drm_fb_helper.c     | 107 ----------------------------
 drivers/gpu/drm/drm_fbdev_generic.c |  11 ++-
 include/drm/drm_fb_helper.h         |  41 -----------
 4 files changed, 6 insertions(+), 159 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 77fb10ddd8a2..92a782827b7b 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -95,6 +95,7 @@ config DRM_KUNIT_TEST
 config DRM_KMS_HELPER
 	tristate
 	depends on DRM
+	select FB_SYS_HELPERS_DEFERRED if DRM_FBDEV_EMULATION
 	help
 	  CRTC helpers for KMS drivers.
 
@@ -135,11 +136,6 @@ config DRM_FBDEV_EMULATION
 	select FB_CFB_FILLRECT
 	select FB_CFB_COPYAREA
 	select FB_CFB_IMAGEBLIT
-	select FB_DEFERRED_IO
-	select FB_SYS_FOPS
-	select FB_SYS_FILLRECT
-	select FB_SYS_COPYAREA
-	select FB_SYS_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7071c810ba83..7f6e54967acb 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_sys_read - Implements struct &fb_ops.fb_read for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_sys_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_read);
-
-/**
- * drm_fb_helper_sys_write - Implements struct &fb_ops.fb_write for system memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_sys_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_write);
-
-/**
- * drm_fb_helper_sys_fillrect - wrapper around sys_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around sys_fillrect implemented by fbdev core
- */
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_fillrect);
-
-/**
- * drm_fb_helper_sys_copyarea - wrapper around sys_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around sys_copyarea implemented by fbdev core
- */
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_copyarea);
-
-/**
- * drm_fb_helper_sys_imageblit - wrapper around sys_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around sys_imageblit implemented by fbdev core
- */
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	sys_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_sys_imageblit);
-
 /**
  * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
  * @info: fb_info struct pointer
diff --git a/drivers/gpu/drm/drm_fbdev_generic.c b/drivers/gpu/drm/drm_fbdev_generic.c
index 8e5148bf40bb..98ae703848a0 100644
--- a/drivers/gpu/drm/drm_fbdev_generic.c
+++ b/drivers/gpu/drm/drm_fbdev_generic.c
@@ -34,6 +34,10 @@ static int drm_fbdev_generic_fb_release(struct fb_info *info, int user)
 	return 0;
 }
 
+FB_GEN_DEFAULT_DEFERRED_SYS_OPS(drm_fbdev_generic,
+				drm_fb_helper_damage_range,
+				drm_fb_helper_damage_area);
+
 static void drm_fbdev_generic_fb_destroy(struct fb_info *info)
 {
 	struct drm_fb_helper *fb_helper = info->par;
@@ -56,13 +60,8 @@ static const struct fb_ops drm_fbdev_generic_fb_ops = {
 	.owner		= THIS_MODULE,
 	.fb_open	= drm_fbdev_generic_fb_open,
 	.fb_release	= drm_fbdev_generic_fb_release,
-	.fb_read	= drm_fb_helper_sys_read,
-	.fb_write	= drm_fb_helper_sys_write,
+	FB_DEFAULT_DEFERRED_OPS(drm_fbdev_generic),
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_fillrect	= drm_fb_helper_sys_fillrect,
-	.fb_copyarea	= drm_fb_helper_sys_copyarea,
-	.fb_imageblit	= drm_fb_helper_sys_imageblit,
-	.fb_mmap	= fb_deferred_io_mmap,
 	.fb_destroy	= drm_fbdev_generic_fb_destroy,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index 7d5804882be7..b50fd0c0b713 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_sys_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_sys_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_sys_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_sys_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_sys_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 			       size_t count, loff_t *ppos);
 ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
@@ -397,35 +385,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_sys_read(struct fb_info *info,
-					     char __user *buf, size_t count,
-					     loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_sys_write(struct fb_info *info,
-					      const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_sys_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_sys_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_sys_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
 					     size_t count, loff_t *ppos)
 {
-- 
2.40.1


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

* [PATCH v5 13/13] drm/i915: Implement dedicated fbdev I/O helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                     ` (2 preceding siblings ...)
  (?)
@ 2023-05-30 15:02   ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi,
	Tvrtko Ursulin, Ville Syrjälä

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the fbdev callbacks. i915 was the only
caller of the DRM helpers, so remove them from the helper module.

i915's fbdev emulation is still incomplete as it doesn't implement
deferred I/O and damage handling for mmaped pages.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_IO_HELPERS options

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/Kconfig                    |   3 -
 drivers/gpu/drm/drm_fb_helper.c            | 107 ---------------------
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +--
 include/drm/drm_fb_helper.h                |  39 --------
 5 files changed, 9 insertions(+), 155 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 92a782827b7b..bb2e48cc6cd6 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -133,9 +133,6 @@ config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM_KMS_HELPER
 	depends on FB=y || FB=DRM_KMS_HELPER
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7f6e54967acb..61a5d450cc20 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_io_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_read);
-
-/**
- * drm_fb_helper_cfb_write - Implements struct &fb_ops.fb_write for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_io_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_write);
-
-/**
- * drm_fb_helper_cfb_fillrect - wrapper around cfb_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around cfb_fillrect implemented by fbdev core
- */
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
-
-/**
- * drm_fb_helper_cfb_copyarea - wrapper around cfb_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around cfb_copyarea implemented by fbdev core
- */
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
-
-/**
- * drm_fb_helper_cfb_imageblit - wrapper around cfb_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around cfb_imageblit implemented by fbdev core
- */
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
-
 /**
  * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
  * @fb_helper: driver-allocated fbdev helper, can be NULL
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index e4f4d2e3fdfe..01b5a8272a27 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -17,6 +17,7 @@ config DRM_I915
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select RELAY
 	select I2C
 	select I2C_ALGOBIT
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index aab1ae74a8f7..eccaceaf8b9d 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -28,6 +28,7 @@
 #include <linux/console.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -84,6 +85,10 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
 	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
 }
 
+FB_GEN_DEFAULT_DEFERRED_IO_OPS(intel_fbdev,
+			       drm_fb_helper_damage_range,
+			       drm_fb_helper_damage_area)
+
 static int intel_fbdev_set_par(struct fb_info *info)
 {
 	struct intel_fbdev *ifbdev = to_intel_fbdev(info->par);
@@ -132,15 +137,12 @@ static int intel_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 
 static const struct fb_ops intelfb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(intel_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_set_par = intel_fbdev_set_par,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
-	.fb_pan_display = intel_fbdev_pan_display,
 	.fb_blank = intel_fbdev_blank,
+	.fb_pan_display = intel_fbdev_pan_display,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(intel_fbdev),
 	.fb_mmap = intel_fbdev_mmap,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b50fd0c0b713..4863b0f8299e 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend);
 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper,
 					bool suspend);
@@ -385,33 +373,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-					     size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
 					     bool suspend)
 {
-- 
2.40.1


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

* [PATCH v5 13/13] drm/i915: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Jani Nikula, Joonas Lahtinen, Rodrigo Vivi,
	Tvrtko Ursulin, Ville Syrjälä

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the fbdev callbacks. i915 was the only
caller of the DRM helpers, so remove them from the helper module.

i915's fbdev emulation is still incomplete as it doesn't implement
deferred I/O and damage handling for mmaped pages.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_IO_HELPERS options

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/Kconfig                    |   3 -
 drivers/gpu/drm/drm_fb_helper.c            | 107 ---------------------
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +--
 include/drm/drm_fb_helper.h                |  39 --------
 5 files changed, 9 insertions(+), 155 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 92a782827b7b..bb2e48cc6cd6 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -133,9 +133,6 @@ config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM_KMS_HELPER
 	depends on FB=y || FB=DRM_KMS_HELPER
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7f6e54967acb..61a5d450cc20 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_io_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_read);
-
-/**
- * drm_fb_helper_cfb_write - Implements struct &fb_ops.fb_write for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_io_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_write);
-
-/**
- * drm_fb_helper_cfb_fillrect - wrapper around cfb_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around cfb_fillrect implemented by fbdev core
- */
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
-
-/**
- * drm_fb_helper_cfb_copyarea - wrapper around cfb_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around cfb_copyarea implemented by fbdev core
- */
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
-
-/**
- * drm_fb_helper_cfb_imageblit - wrapper around cfb_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around cfb_imageblit implemented by fbdev core
- */
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
-
 /**
  * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
  * @fb_helper: driver-allocated fbdev helper, can be NULL
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index e4f4d2e3fdfe..01b5a8272a27 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -17,6 +17,7 @@ config DRM_I915
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select RELAY
 	select I2C
 	select I2C_ALGOBIT
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index aab1ae74a8f7..eccaceaf8b9d 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -28,6 +28,7 @@
 #include <linux/console.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -84,6 +85,10 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
 	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
 }
 
+FB_GEN_DEFAULT_DEFERRED_IO_OPS(intel_fbdev,
+			       drm_fb_helper_damage_range,
+			       drm_fb_helper_damage_area)
+
 static int intel_fbdev_set_par(struct fb_info *info)
 {
 	struct intel_fbdev *ifbdev = to_intel_fbdev(info->par);
@@ -132,15 +137,12 @@ static int intel_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 
 static const struct fb_ops intelfb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(intel_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_set_par = intel_fbdev_set_par,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
-	.fb_pan_display = intel_fbdev_pan_display,
 	.fb_blank = intel_fbdev_blank,
+	.fb_pan_display = intel_fbdev_pan_display,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(intel_fbdev),
 	.fb_mmap = intel_fbdev_mmap,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b50fd0c0b713..4863b0f8299e 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend);
 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper,
 					bool suspend);
@@ -385,33 +373,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-					     size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
 					     bool suspend)
 {
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 13/13] drm/i915: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: Tvrtko Ursulin, linux-samsung-soc, linux-arm-msm, intel-gfx,
	dri-devel, amd-gfx, Thomas Zimmermann, Rodrigo Vivi, linux-tegra,
	freedreno, linux-arm-kernel

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the fbdev callbacks. i915 was the only
caller of the DRM helpers, so remove them from the helper module.

i915's fbdev emulation is still incomplete as it doesn't implement
deferred I/O and damage handling for mmaped pages.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_IO_HELPERS options

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/Kconfig                    |   3 -
 drivers/gpu/drm/drm_fb_helper.c            | 107 ---------------------
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +--
 include/drm/drm_fb_helper.h                |  39 --------
 5 files changed, 9 insertions(+), 155 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 92a782827b7b..bb2e48cc6cd6 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -133,9 +133,6 @@ config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM_KMS_HELPER
 	depends on FB=y || FB=DRM_KMS_HELPER
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7f6e54967acb..61a5d450cc20 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_io_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_read);
-
-/**
- * drm_fb_helper_cfb_write - Implements struct &fb_ops.fb_write for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_io_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_write);
-
-/**
- * drm_fb_helper_cfb_fillrect - wrapper around cfb_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around cfb_fillrect implemented by fbdev core
- */
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
-
-/**
- * drm_fb_helper_cfb_copyarea - wrapper around cfb_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around cfb_copyarea implemented by fbdev core
- */
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
-
-/**
- * drm_fb_helper_cfb_imageblit - wrapper around cfb_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around cfb_imageblit implemented by fbdev core
- */
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
-
 /**
  * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
  * @fb_helper: driver-allocated fbdev helper, can be NULL
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index e4f4d2e3fdfe..01b5a8272a27 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -17,6 +17,7 @@ config DRM_I915
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select RELAY
 	select I2C
 	select I2C_ALGOBIT
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index aab1ae74a8f7..eccaceaf8b9d 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -28,6 +28,7 @@
 #include <linux/console.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -84,6 +85,10 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
 	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
 }
 
+FB_GEN_DEFAULT_DEFERRED_IO_OPS(intel_fbdev,
+			       drm_fb_helper_damage_range,
+			       drm_fb_helper_damage_area)
+
 static int intel_fbdev_set_par(struct fb_info *info)
 {
 	struct intel_fbdev *ifbdev = to_intel_fbdev(info->par);
@@ -132,15 +137,12 @@ static int intel_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 
 static const struct fb_ops intelfb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(intel_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_set_par = intel_fbdev_set_par,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
-	.fb_pan_display = intel_fbdev_pan_display,
 	.fb_blank = intel_fbdev_blank,
+	.fb_pan_display = intel_fbdev_pan_display,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(intel_fbdev),
 	.fb_mmap = intel_fbdev_mmap,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b50fd0c0b713..4863b0f8299e 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend);
 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper,
 					bool suspend);
@@ -385,33 +373,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-					     size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
 					     bool suspend)
 {
-- 
2.40.1


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

* [Intel-gfx] [PATCH v5 13/13] drm/i915: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	Thomas Zimmermann, Rodrigo Vivi, linux-tegra, freedreno,
	linux-arm-kernel

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the fbdev callbacks. i915 was the only
caller of the DRM helpers, so remove them from the helper module.

i915's fbdev emulation is still incomplete as it doesn't implement
deferred I/O and damage handling for mmaped pages.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_IO_HELPERS options

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/Kconfig                    |   3 -
 drivers/gpu/drm/drm_fb_helper.c            | 107 ---------------------
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +--
 include/drm/drm_fb_helper.h                |  39 --------
 5 files changed, 9 insertions(+), 155 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 92a782827b7b..bb2e48cc6cd6 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -133,9 +133,6 @@ config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM_KMS_HELPER
 	depends on FB=y || FB=DRM_KMS_HELPER
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7f6e54967acb..61a5d450cc20 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_io_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_read);
-
-/**
- * drm_fb_helper_cfb_write - Implements struct &fb_ops.fb_write for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_io_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_write);
-
-/**
- * drm_fb_helper_cfb_fillrect - wrapper around cfb_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around cfb_fillrect implemented by fbdev core
- */
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
-
-/**
- * drm_fb_helper_cfb_copyarea - wrapper around cfb_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around cfb_copyarea implemented by fbdev core
- */
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
-
-/**
- * drm_fb_helper_cfb_imageblit - wrapper around cfb_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around cfb_imageblit implemented by fbdev core
- */
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
-
 /**
  * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
  * @fb_helper: driver-allocated fbdev helper, can be NULL
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index e4f4d2e3fdfe..01b5a8272a27 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -17,6 +17,7 @@ config DRM_I915
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select RELAY
 	select I2C
 	select I2C_ALGOBIT
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index aab1ae74a8f7..eccaceaf8b9d 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -28,6 +28,7 @@
 #include <linux/console.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -84,6 +85,10 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
 	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
 }
 
+FB_GEN_DEFAULT_DEFERRED_IO_OPS(intel_fbdev,
+			       drm_fb_helper_damage_range,
+			       drm_fb_helper_damage_area)
+
 static int intel_fbdev_set_par(struct fb_info *info)
 {
 	struct intel_fbdev *ifbdev = to_intel_fbdev(info->par);
@@ -132,15 +137,12 @@ static int intel_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 
 static const struct fb_ops intelfb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(intel_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_set_par = intel_fbdev_set_par,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
-	.fb_pan_display = intel_fbdev_pan_display,
 	.fb_blank = intel_fbdev_blank,
+	.fb_pan_display = intel_fbdev_pan_display,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(intel_fbdev),
 	.fb_mmap = intel_fbdev_mmap,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b50fd0c0b713..4863b0f8299e 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend);
 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper,
 					bool suspend);
@@ -385,33 +373,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-					     size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
 					     bool suspend)
 {
-- 
2.40.1


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

* [PATCH v5 13/13] drm/i915: Implement dedicated fbdev I/O helpers
@ 2023-05-30 15:02   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:02 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: Jani Nikula, Tvrtko Ursulin, linux-samsung-soc, linux-arm-msm,
	intel-gfx, Joonas Lahtinen, dri-devel, Ville Syrjälä,
	amd-gfx, Thomas Zimmermann, Rodrigo Vivi, linux-tegra, freedreno,
	linux-arm-kernel

Implement dedicated fbdev helpers for framebuffer I/O instead
of using DRM's helpers. Use an fbdev generator macro for
deferred I/O to create the fbdev callbacks. i915 was the only
caller of the DRM helpers, so remove them from the helper module.

i915's fbdev emulation is still incomplete as it doesn't implement
deferred I/O and damage handling for mmaped pages.

v4:
	* generate deferred-I/O helpers
	* use initializer macros for fb_ops
v2:
	* use FB_IO_HELPERS options

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Cc: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
---
 drivers/gpu/drm/Kconfig                    |   3 -
 drivers/gpu/drm/drm_fb_helper.c            | 107 ---------------------
 drivers/gpu/drm/i915/Kconfig               |   1 +
 drivers/gpu/drm/i915/display/intel_fbdev.c |  14 +--
 include/drm/drm_fb_helper.h                |  39 --------
 5 files changed, 9 insertions(+), 155 deletions(-)

diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 92a782827b7b..bb2e48cc6cd6 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -133,9 +133,6 @@ config DRM_FBDEV_EMULATION
 	bool "Enable legacy fbdev support for your modesetting driver"
 	depends on DRM_KMS_HELPER
 	depends on FB=y || FB=DRM_KMS_HELPER
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
 	select FRAMEBUFFER_CONSOLE if !EXPERT
 	select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE
 	default y
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7f6e54967acb..61a5d450cc20 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -736,113 +736,6 @@ void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagerefli
 }
 EXPORT_SYMBOL(drm_fb_helper_deferred_io);
 
-/**
- * drm_fb_helper_cfb_read - Implements struct &fb_ops.fb_read for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to read from framebuffer memory
- * @count: number of bytes to read from framebuffer memory
- * @ppos: read offset within framebuffer memory
- *
- * Returns:
- * The number of bytes read on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos)
-{
-	return fb_io_read(info, buf, count, ppos);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_read);
-
-/**
- * drm_fb_helper_cfb_write - Implements struct &fb_ops.fb_write for I/O memory
- * @info: fb_info struct pointer
- * @buf: userspace buffer to write to framebuffer memory
- * @count: number of bytes to write to framebuffer memory
- * @ppos: write offset within framebuffer memory
- *
- * Returns:
- * The number of bytes written on success, or an error code otherwise.
- */
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos)
-{
-	struct drm_fb_helper *helper = info->par;
-	loff_t pos = *ppos;
-	ssize_t ret;
-	struct drm_rect damage_area;
-
-	ret = fb_io_write(info, buf, count, ppos);
-	if (ret <= 0)
-		return ret;
-
-	if (helper->funcs->fb_dirty) {
-		drm_fb_helper_memory_range_to_clip(info, pos, ret, &damage_area);
-		drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
-				     drm_rect_width(&damage_area),
-				     drm_rect_height(&damage_area));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_write);
-
-/**
- * drm_fb_helper_cfb_fillrect - wrapper around cfb_fillrect
- * @info: fbdev registered by the helper
- * @rect: info about rectangle to fill
- *
- * A wrapper around cfb_fillrect implemented by fbdev core
- */
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_fillrect(info, rect);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, rect->dx, rect->dy, rect->width, rect->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_fillrect);
-
-/**
- * drm_fb_helper_cfb_copyarea - wrapper around cfb_copyarea
- * @info: fbdev registered by the helper
- * @area: info about area to copy
- *
- * A wrapper around cfb_copyarea implemented by fbdev core
- */
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_copyarea(info, area);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, area->dx, area->dy, area->width, area->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_copyarea);
-
-/**
- * drm_fb_helper_cfb_imageblit - wrapper around cfb_imageblit
- * @info: fbdev registered by the helper
- * @image: info about image to blit
- *
- * A wrapper around cfb_imageblit implemented by fbdev core
- */
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image)
-{
-	struct drm_fb_helper *helper = info->par;
-
-	cfb_imageblit(info, image);
-
-	if (helper->funcs->fb_dirty)
-		drm_fb_helper_damage(helper, image->dx, image->dy, image->width, image->height);
-}
-EXPORT_SYMBOL(drm_fb_helper_cfb_imageblit);
-
 /**
  * drm_fb_helper_set_suspend - wrapper around fb_set_suspend
  * @fb_helper: driver-allocated fbdev helper, can be NULL
diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index e4f4d2e3fdfe..01b5a8272a27 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -17,6 +17,7 @@ config DRM_I915
 	select DRM_KMS_HELPER
 	select DRM_PANEL
 	select DRM_MIPI_DSI
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	select RELAY
 	select I2C
 	select I2C_ALGOBIT
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
index aab1ae74a8f7..eccaceaf8b9d 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -28,6 +28,7 @@
 #include <linux/console.h>
 #include <linux/delay.h>
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
@@ -84,6 +85,10 @@ static void intel_fbdev_invalidate(struct intel_fbdev *ifbdev)
 	intel_frontbuffer_invalidate(to_frontbuffer(ifbdev), ORIGIN_CPU);
 }
 
+FB_GEN_DEFAULT_DEFERRED_IO_OPS(intel_fbdev,
+			       drm_fb_helper_damage_range,
+			       drm_fb_helper_damage_area)
+
 static int intel_fbdev_set_par(struct fb_info *info)
 {
 	struct intel_fbdev *ifbdev = to_intel_fbdev(info->par);
@@ -132,15 +137,12 @@ static int intel_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
 
 static const struct fb_ops intelfb_ops = {
 	.owner = THIS_MODULE,
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(intel_fbdev),
 	DRM_FB_HELPER_DEFAULT_OPS,
 	.fb_set_par = intel_fbdev_set_par,
-	.fb_read = drm_fb_helper_cfb_read,
-	.fb_write = drm_fb_helper_cfb_write,
-	.fb_fillrect = drm_fb_helper_cfb_fillrect,
-	.fb_copyarea = drm_fb_helper_cfb_copyarea,
-	.fb_imageblit = drm_fb_helper_cfb_imageblit,
-	.fb_pan_display = intel_fbdev_pan_display,
 	.fb_blank = intel_fbdev_blank,
+	.fb_pan_display = intel_fbdev_pan_display,
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(intel_fbdev),
 	.fb_mmap = intel_fbdev_mmap,
 };
 
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
index b50fd0c0b713..4863b0f8299e 100644
--- a/include/drm/drm_fb_helper.h
+++ b/include/drm/drm_fb_helper.h
@@ -258,18 +258,6 @@ void drm_fb_helper_damage_area(struct fb_info *info, u32 x, u32 y, u32 width, u3
 
 void drm_fb_helper_deferred_io(struct fb_info *info, struct list_head *pagereflist);
 
-ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-			       size_t count, loff_t *ppos);
-ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-				size_t count, loff_t *ppos);
-
-void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-				const struct fb_fillrect *rect);
-void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-				const struct fb_copyarea *area);
-void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-				 const struct fb_image *image);
-
 void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper, bool suspend);
 void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper,
 					bool suspend);
@@ -385,33 +373,6 @@ static inline int drm_fb_helper_defio_init(struct drm_fb_helper *fb_helper)
 	return -ENODEV;
 }
 
-static inline ssize_t drm_fb_helper_cfb_read(struct fb_info *info, char __user *buf,
-					     size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline ssize_t drm_fb_helper_cfb_write(struct fb_info *info, const char __user *buf,
-					      size_t count, loff_t *ppos)
-{
-	return -ENODEV;
-}
-
-static inline void drm_fb_helper_cfb_fillrect(struct fb_info *info,
-					      const struct fb_fillrect *rect)
-{
-}
-
-static inline void drm_fb_helper_cfb_copyarea(struct fb_info *info,
-					      const struct fb_copyarea *area)
-{
-}
-
-static inline void drm_fb_helper_cfb_imageblit(struct fb_info *info,
-					       const struct fb_image *image)
-{
-}
-
 static inline void drm_fb_helper_set_suspend(struct drm_fb_helper *fb_helper,
 					     bool suspend)
 {
-- 
2.40.1


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

* [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                   ` (15 preceding siblings ...)
  (?)
@ 2023-05-31  7:12 ` Patchwork
  2023-05-31  7:19   ` Thomas Zimmermann
  -1 siblings, 1 reply; 86+ messages in thread
From: Patchwork @ 2023-05-31  7:12 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
URL   : https://patchwork.freedesktop.org/series/118574/
State : warning

== Summary ==

Error: dim checkpatch failed
d99c025b8fad fbdev: Add Kconfig options to select different fb_ops helpers
305b772ca6c4 fbdev: Add initializer macros for struct fb_ops
-:50: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#50: FILE: include/linux/fb.h:557:
+#define FB_DEFAULT_IO_OPS \
+	__FB_DEFAULT_IO_OPS_RDWR, \
+	__FB_DEFAULT_IO_OPS_DRAW, \
+	__FB_DEFAULT_IO_OPS_MMAP

-:82: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#82: FILE: include/linux/fb.h:590:
+#define FB_DEFAULT_SYS_OPS \
+	__FB_DEFAULT_SYS_OPS_RDWR, \
+	__FB_DEFAULT_SYS_OPS_DRAW, \
+	__FB_DEFAULT_SYS_OPS_MMAP

-:114: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__damage_area' - possible side-effects?
#114: FILE: include/linux/fb.h:670:
+#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
+	static void __prefix ## _defio_fillrect(struct fb_info *info, \
+						const struct fb_fillrect *rect) \
+	{ \
+		__mode ## _fillrect(info, rect); \
+		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
+	} \
+	static void __prefix ## _defio_copyarea(struct fb_info *info, \
+						const struct fb_copyarea *area) \
+	{ \
+		__mode ## _copyarea(info, area); \
+		__damage_area(info, area->dx, area->dy, area->width, area->height); \
+	} \
+	static void __prefix ## _defio_imageblit(struct fb_info *info, \
+						 const struct fb_image *image) \
+	{ \
+		__mode ## _imageblit(info, image); \
+		__damage_area(info, image->dx, image->dy, image->width, image->height); \
+	}

-:134: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#134: FILE: include/linux/fb.h:690:
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)

-:134: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
#134: FILE: include/linux/fb.h:690:
+#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)

-:138: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#138: FILE: include/linux/fb.h:694:
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)

-:138: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
#138: FILE: include/linux/fb.h:694:
+#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
+	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)

-:158: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#158: FILE: include/linux/fb.h:714:
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)

-:158: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
#158: FILE: include/linux/fb.h:714:
+#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
+	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
+	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)

total: 5 errors, 0 warnings, 4 checks, 133 lines checked
8cf81153d9be drm/armada: Use regular fbdev I/O helpers
ae8753bfd372 drm/exynos: Use regular fbdev I/O helpers
85594d867943 drm/gma500: Use regular fbdev I/O helpers
580f4398003e drm/radeon: Use regular fbdev I/O helpers
b93785cdb74b drm/fbdev-dma: Use regular fbdev I/O helpers
f2d84d66e5d2 drm/omapdrm: Use regular fbdev I/O helpers
dc9598d0aa4a drm/tegra: Use regular fbdev I/O helpers
641517a16a6d drm/fb-helper: Export helpers for marking damage areas
aea558947b7a drm/msm: Use regular fbdev I/O helpers
8632dc90593a drm/fbdev-generic: Implement dedicated fbdev I/O helpers
f7a0a9d697f2 drm/i915: Implement dedicated fbdev I/O helpers



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

* [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                   ` (16 preceding siblings ...)
  (?)
@ 2023-05-31  7:12 ` Patchwork
  2023-05-31  7:20   ` Thomas Zimmermann
  -1 siblings, 1 reply; 86+ messages in thread
From: Patchwork @ 2023-05-31  7:12 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

== Series Details ==

Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
URL   : https://patchwork.freedesktop.org/series/118574/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
+drivers/gpu/drm/radeon/atombios_encoders.c:1079:52:    expected unsigned short [addressable] [assigned] [usertype] usInitInfo
+drivers/gpu/drm/radeon/atombios_encoders.c:1079:52:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:1079:52: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:1085:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:1085:62:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:1085:62: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:1087:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:1087:62:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:1087:62: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:1089:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:1089:62:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:1089:62: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:1136:52: warning: too many warnings
+drivers/gpu/drm/radeon/atombios_encoders.c:389:27:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:389:27:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:389:27: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:445:38:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:445:38:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:445:38: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:518:59:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:518:59:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:518:59: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:528:50:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:528:50:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:528:50: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:534:50:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:534:50:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:534:50: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:604:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:604:46:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:604:46: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:629:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:629:46:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:629:46: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:877:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:877:46:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:877:46: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:914:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:914:46:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:914:46: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/atombios_encoders.c:937:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
+drivers/gpu/drm/radeon/atombios_encoders.c:937:46:    got restricted __le16 [usertype]
+drivers/gpu/drm/radeon/atombios_encoders.c:937:46: warning: incorrect type in assignment (different base types)
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:594:6: warning: symbol 'radeon_register_atpx_handler' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:612:6: warning: symbol 'radeon_unregister_atpx_handler' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:64:6: warning: symbol 'radeon_has_atpx' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:68:6: warning: symbol 'radeon_has_atpx_dgpu_power_cntl' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:72:6: warning: symbol 'radeon_is_atpx_hybrid' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_atpx_handler.c:76:6: warning: symbol 'radeon_atpx_dgpu_req_power_for_displays' was not declared. Should it be static?
+drivers/gpu/drm/radeon/radeon_kms.c:270:43:    expected void const [noderef] __user *from
+drivers/gpu/drm/radeon/radeon_kms.c:270:43:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:270:43: warning: incorrect type in argument 2 (different address spaces)
+drivers/gpu/drm/radeon/radeon_kms.c:327:43:    expected void const [noderef] __user *from
+drivers/gpu/drm/radeon/radeon_kms.c:327:43:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:327:43: warning: incorrect type in argument 2 (different address spaces)
+drivers/gpu/drm/radeon/radeon_kms.c:339:43:    expected void const [noderef] __user *from
+drivers/gpu/drm/radeon/radeon_kms.c:339:43:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:339:43: warning: incorrect type in argument 2 (different address spaces)
+drivers/gpu/drm/radeon/radeon_kms.c:475:43:    expected void const [noderef] __user *from
+drivers/gpu/drm/radeon/radeon_kms.c:475:43:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:475:43: warning: incorrect type in argument 2 (different address spaces)
+drivers/gpu/drm/radeon/radeon_kms.c:600:43:    expected void const [noderef] __user *from
+drivers/gpu/drm/radeon/radeon_kms.c:600:43:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:600:43: warning: incorrect type in argument 2 (different address spaces)
+drivers/gpu/drm/radeon/radeon_kms.c:617:26:    expected void [noderef] __user *to
+drivers/gpu/drm/radeon/radeon_kms.c:617:26:    got unsigned int [usertype] *[assigned] value_ptr
+drivers/gpu/drm/radeon/radeon_kms.c:617:26: warning: incorrect type in argument 1 (different address spaces)
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non



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

* Re: [Intel-gfx]  ✗ Fi.CI.CHECKPATCH: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-31  7:12 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers Patchwork
@ 2023-05-31  7:19   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-31  7:19 UTC (permalink / raw)
  To: intel-gfx


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

These warnings are expected, but invalid.

Am 31.05.23 um 09:12 schrieb Patchwork:
> == Series Details ==
> 
> Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
> URL   : https://patchwork.freedesktop.org/series/118574/
> State : warning
> 
> == Summary ==
> 
> Error: dim checkpatch failed
> d99c025b8fad fbdev: Add Kconfig options to select different fb_ops helpers
> 305b772ca6c4 fbdev: Add initializer macros for struct fb_ops
> -:50: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
> #50: FILE: include/linux/fb.h:557:
> +#define FB_DEFAULT_IO_OPS \
> +	__FB_DEFAULT_IO_OPS_RDWR, \
> +	__FB_DEFAULT_IO_OPS_DRAW, \
> +	__FB_DEFAULT_IO_OPS_MMAP
> 
> -:82: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
> #82: FILE: include/linux/fb.h:590:
> +#define FB_DEFAULT_SYS_OPS \
> +	__FB_DEFAULT_SYS_OPS_RDWR, \
> +	__FB_DEFAULT_SYS_OPS_DRAW, \
> +	__FB_DEFAULT_SYS_OPS_MMAP
> 
> -:114: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__damage_area' - possible side-effects?
> #114: FILE: include/linux/fb.h:670:
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
> +	static void __prefix ## _defio_fillrect(struct fb_info *info, \
> +						const struct fb_fillrect *rect) \
> +	{ \
> +		__mode ## _fillrect(info, rect); \
> +		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
> +	} \
> +	static void __prefix ## _defio_copyarea(struct fb_info *info, \
> +						const struct fb_copyarea *area) \
> +	{ \
> +		__mode ## _copyarea(info, area); \
> +		__damage_area(info, area->dx, area->dy, area->width, area->height); \
> +	} \
> +	static void __prefix ## _defio_imageblit(struct fb_info *info, \
> +						 const struct fb_image *image) \
> +	{ \
> +		__mode ## _imageblit(info, image); \
> +		__damage_area(info, image->dx, image->dy, image->width, image->height); \
> +	}
> 
> -:134: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
> #134: FILE: include/linux/fb.h:690:
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> 
> -:134: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
> #134: FILE: include/linux/fb.h:690:
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> 
> -:138: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
> #138: FILE: include/linux/fb.h:694:
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> 
> -:138: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
> #138: FILE: include/linux/fb.h:694:
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> 
> -:158: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
> #158: FILE: include/linux/fb.h:714:
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> 
> -:158: CHECK:MACRO_ARG_REUSE: Macro argument reuse '__prefix' - possible side-effects?
> #158: FILE: include/linux/fb.h:714:
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> 
> total: 5 errors, 0 warnings, 4 checks, 133 lines checked
> 8cf81153d9be drm/armada: Use regular fbdev I/O helpers
> ae8753bfd372 drm/exynos: Use regular fbdev I/O helpers
> 85594d867943 drm/gma500: Use regular fbdev I/O helpers
> 580f4398003e drm/radeon: Use regular fbdev I/O helpers
> b93785cdb74b drm/fbdev-dma: Use regular fbdev I/O helpers
> f2d84d66e5d2 drm/omapdrm: Use regular fbdev I/O helpers
> dc9598d0aa4a drm/tegra: Use regular fbdev I/O helpers
> 641517a16a6d drm/fb-helper: Export helpers for marking damage areas
> aea558947b7a drm/msm: Use regular fbdev I/O helpers
> 8632dc90593a drm/fbdev-generic: Implement dedicated fbdev I/O helpers
> f7a0a9d697f2 drm/i915: Implement dedicated fbdev I/O helpers
> 
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

* Re: [Intel-gfx]  ✗ Fi.CI.SPARSE: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-31  7:12 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
@ 2023-05-31  7:20   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-31  7:20 UTC (permalink / raw)
  To: intel-gfx


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

I have no idea what this error is about. And it looks unrelated to 
anything in the patchset.

Am 31.05.23 um 09:12 schrieb Patchwork:
> == Series Details ==
> 
> Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
> URL   : https://patchwork.freedesktop.org/series/118574/
> State : warning
> 
> == Summary ==
> 
> Error: dim sparse failed
> Sparse version: v0.6.2
> Fast mode used, each commit won't be checked separately.
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:117:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:148:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:150:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:154:26: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:156:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:174:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:176:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:180:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:182:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:186:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:188:9: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:192:35: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:16: warning: unreplaced symbol 'oldbit'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:195:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:237:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:239:9: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
> +./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
> +./drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:316:49: error: static assertion failed: "amd_sriov_msg_vf2pf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
> +drivers/gpu/drm/amd/amdgpu/amdgv_sriovmsg.h:320:49: error: static assertion failed: "amd_sriov_msg_pf2vf_info must be 1 KB"
> +drivers/gpu/drm/radeon/atombios_encoders.c:1079:52:    expected unsigned short [addressable] [assigned] [usertype] usInitInfo
> +drivers/gpu/drm/radeon/atombios_encoders.c:1079:52:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:1079:52: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:1085:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:1085:62:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:1085:62: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:1087:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:1087:62:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:1087:62: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:1089:62:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:1089:62:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:1089:62: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:1136:52: warning: too many warnings
> +drivers/gpu/drm/radeon/atombios_encoders.c:389:27:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:389:27:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:389:27: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:445:38:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:445:38:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:445:38: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:518:59:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:518:59:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:518:59: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:528:50:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:528:50:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:528:50: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:534:50:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:534:50:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:534:50: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:604:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:604:46:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:604:46: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:629:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:629:46:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:629:46: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:877:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:877:46:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:877:46: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:914:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:914:46:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:914:46: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/atombios_encoders.c:937:46:    expected unsigned short [addressable] [assigned] [usertype] usPixelClock
> +drivers/gpu/drm/radeon/atombios_encoders.c:937:46:    got restricted __le16 [usertype]
> +drivers/gpu/drm/radeon/atombios_encoders.c:937:46: warning: incorrect type in assignment (different base types)
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:594:6: warning: symbol 'radeon_register_atpx_handler' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:612:6: warning: symbol 'radeon_unregister_atpx_handler' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:64:6: warning: symbol 'radeon_has_atpx' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:68:6: warning: symbol 'radeon_has_atpx_dgpu_power_cntl' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:72:6: warning: symbol 'radeon_is_atpx_hybrid' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_atpx_handler.c:76:6: warning: symbol 'radeon_atpx_dgpu_req_power_for_displays' was not declared. Should it be static?
> +drivers/gpu/drm/radeon/radeon_kms.c:270:43:    expected void const [noderef] __user *from
> +drivers/gpu/drm/radeon/radeon_kms.c:270:43:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:270:43: warning: incorrect type in argument 2 (different address spaces)
> +drivers/gpu/drm/radeon/radeon_kms.c:327:43:    expected void const [noderef] __user *from
> +drivers/gpu/drm/radeon/radeon_kms.c:327:43:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:327:43: warning: incorrect type in argument 2 (different address spaces)
> +drivers/gpu/drm/radeon/radeon_kms.c:339:43:    expected void const [noderef] __user *from
> +drivers/gpu/drm/radeon/radeon_kms.c:339:43:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:339:43: warning: incorrect type in argument 2 (different address spaces)
> +drivers/gpu/drm/radeon/radeon_kms.c:475:43:    expected void const [noderef] __user *from
> +drivers/gpu/drm/radeon/radeon_kms.c:475:43:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:475:43: warning: incorrect type in argument 2 (different address spaces)
> +drivers/gpu/drm/radeon/radeon_kms.c:600:43:    expected void const [noderef] __user *from
> +drivers/gpu/drm/radeon/radeon_kms.c:600:43:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:600:43: warning: incorrect type in argument 2 (different address spaces)
> +drivers/gpu/drm/radeon/radeon_kms.c:617:26:    expected void [noderef] __user *to
> +drivers/gpu/drm/radeon/radeon_kms.c:617:26:    got unsigned int [usertype] *[assigned] value_ptr
> +drivers/gpu/drm/radeon/radeon_kms.c:617:26: warning: incorrect type in argument 1 (different address spaces)
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
> +./include/asm-generic/bitops/generic-non
> 
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

* [Intel-gfx] ✓ Fi.CI.BAT: success for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                   ` (17 preceding siblings ...)
  (?)
@ 2023-05-31  7:31 ` Patchwork
  -1 siblings, 0 replies; 86+ messages in thread
From: Patchwork @ 2023-05-31  7:31 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 4994 bytes --]

== Series Details ==

Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
URL   : https://patchwork.freedesktop.org/series/118574/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13204 -> Patchwork_118574v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (36 -> 36)
------------------------------

  No changes in participating hosts

Known issues
------------

  Here are the changes found in Patchwork_118574v1 that come from known issues:

### CI changes ###

#### Issues hit ####

  * boot:
    - fi-kbl-8809g:       [PASS][1] -> [FAIL][2] ([i915#8293] / [i915#8298])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/fi-kbl-8809g/boot.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/fi-kbl-8809g/boot.html

  

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@basic-pci-d3-state:
    - fi-hsw-4770:        [PASS][3] -> [SKIP][4] ([fdo#109271])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/fi-hsw-4770/igt@i915_pm_rpm@basic-pci-d3-state.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/fi-hsw-4770/igt@i915_pm_rpm@basic-pci-d3-state.html

  * igt@i915_pm_rpm@basic-rte:
    - fi-hsw-4770:        [PASS][5] -> [FAIL][6] ([i915#7364])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/fi-hsw-4770/igt@i915_pm_rpm@basic-rte.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/fi-hsw-4770/igt@i915_pm_rpm@basic-rte.html

  * igt@i915_selftest@live@hangcheck:
    - fi-skl-guc:         [PASS][7] -> [DMESG-WARN][8] ([i915#8073])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/fi-skl-guc/igt@i915_selftest@live@hangcheck.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/fi-skl-guc/igt@i915_selftest@live@hangcheck.html
    - bat-dg2-11:         [PASS][9] -> [ABORT][10] ([i915#7913] / [i915#7979])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/bat-dg2-11/igt@i915_selftest@live@hangcheck.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/bat-dg2-11/igt@i915_selftest@live@hangcheck.html

  * igt@i915_selftest@live@requests:
    - bat-rpls-1:         [PASS][11] -> [ABORT][12] ([i915#4983] / [i915#7911] / [i915#7920])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/bat-rpls-1/igt@i915_selftest@live@requests.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/bat-rpls-1/igt@i915_selftest@live@requests.html

  * igt@kms_pipe_crc_basic@read-crc:
    - bat-adlp-9:         NOTRUN -> [SKIP][13] ([i915#3546]) +1 similar issue
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/bat-adlp-9/igt@kms_pipe_crc_basic@read-crc.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#3546]: https://gitlab.freedesktop.org/drm/intel/issues/3546
  [i915#4983]: https://gitlab.freedesktop.org/drm/intel/issues/4983
  [i915#7364]: https://gitlab.freedesktop.org/drm/intel/issues/7364
  [i915#7911]: https://gitlab.freedesktop.org/drm/intel/issues/7911
  [i915#7913]: https://gitlab.freedesktop.org/drm/intel/issues/7913
  [i915#7920]: https://gitlab.freedesktop.org/drm/intel/issues/7920
  [i915#7979]: https://gitlab.freedesktop.org/drm/intel/issues/7979
  [i915#8073]: https://gitlab.freedesktop.org/drm/intel/issues/8073
  [i915#8293]: https://gitlab.freedesktop.org/drm/intel/issues/8293
  [i915#8298]: https://gitlab.freedesktop.org/drm/intel/issues/8298


Build changes
-------------

  * Linux: CI_DRM_13204 -> Patchwork_118574v1

  CI-20190529: 20190529
  CI_DRM_13204: 83a048e62ecf7838b583389e60c1defa530a5668 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7311: c031030f39aff973330668a5a2f1593408da78ae @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_118574v1: 83a048e62ecf7838b583389e60c1defa530a5668 @ git://anongit.freedesktop.org/gfx-ci/linux


### Linux commits

637bfcec83cc drm/i915: Implement dedicated fbdev I/O helpers
d171961dcec1 drm/fbdev-generic: Implement dedicated fbdev I/O helpers
587d6084e619 drm/msm: Use regular fbdev I/O helpers
23a2dde4e89b drm/fb-helper: Export helpers for marking damage areas
e8dca382c462 drm/tegra: Use regular fbdev I/O helpers
4e438b46c55c drm/omapdrm: Use regular fbdev I/O helpers
979f18306e03 drm/fbdev-dma: Use regular fbdev I/O helpers
c3ff7af4d343 drm/radeon: Use regular fbdev I/O helpers
670992894865 drm/gma500: Use regular fbdev I/O helpers
36497010d91d drm/exynos: Use regular fbdev I/O helpers
d6b0f3aaaa9f drm/armada: Use regular fbdev I/O helpers
0c9ddc4b50bc fbdev: Add initializer macros for struct fb_ops
beb2cac64a62 fbdev: Add Kconfig options to select different fb_ops helpers

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/index.html

[-- Attachment #2: Type: text/html, Size: 5812 bytes --]

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

* Re: [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
  2023-05-30 15:02   ` Thomas Zimmermann
  (?)
  (?)
@ 2023-05-31  8:20     ` Tomi Valkeinen
  -1 siblings, 0 replies; 86+ messages in thread
From: Tomi Valkeinen @ 2023-05-31  8:20 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra

On 30/05/2023 18:02, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Tomi Valkeinen <tomba@kernel.org>
> ---
>   drivers/gpu/drm/omapdrm/Kconfig      |  1 +
>   drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
>   2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
> index 76ded1568bd0..b4ac76c9f31b 100644
> --- a/drivers/gpu/drm/omapdrm/Kconfig
> +++ b/drivers/gpu/drm/omapdrm/Kconfig
> @@ -4,6 +4,7 @@ config DRM_OMAP
>   	depends on DRM && OF
>   	depends on ARCH_OMAP2PLUS
>   	select DRM_KMS_HELPER
> +	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
>   	select VIDEOMODE_HELPERS
>   	select HDMI
>   	default n
> diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> index b950e93b3846..b7ccce0704a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> @@ -4,6 +4,8 @@
>    * Author: Rob Clark <rob@ti.com>
>    */
>   
> +#include <linux/fb.h>
> +
>   #include <drm/drm_drv.h>
>   #include <drm/drm_crtc_helper.h>
>   #include <drm/drm_fb_helper.h>
> @@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
>   
>   static const struct fb_ops omap_fb_ops = {
>   	.owner = THIS_MODULE,
> -
> +	FB_DEFAULT_SYS_OPS,
>   	.fb_check_var	= drm_fb_helper_check_var,
>   	.fb_set_par	= drm_fb_helper_set_par,
>   	.fb_setcmap	= drm_fb_helper_setcmap,
>   	.fb_blank	= drm_fb_helper_blank,
>   	.fb_pan_display = omap_fbdev_pan_display,
>   	.fb_ioctl	= drm_fb_helper_ioctl,
> -
> -	.fb_read = drm_fb_helper_sys_read,
> -	.fb_write = drm_fb_helper_sys_write,
> -	.fb_fillrect = drm_fb_helper_sys_fillrect,
> -	.fb_copyarea = drm_fb_helper_sys_copyarea,
> -	.fb_imageblit = drm_fb_helper_sys_imageblit,
> -
>   	.fb_destroy = omap_fbdev_fb_destroy,
>   };
>   

Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

  Tomi


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

* Re: [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-31  8:20     ` Tomi Valkeinen
  0 siblings, 0 replies; 86+ messages in thread
From: Tomi Valkeinen @ 2023-05-31  8:20 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra

On 30/05/2023 18:02, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Tomi Valkeinen <tomba@kernel.org>
> ---
>   drivers/gpu/drm/omapdrm/Kconfig      |  1 +
>   drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
>   2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
> index 76ded1568bd0..b4ac76c9f31b 100644
> --- a/drivers/gpu/drm/omapdrm/Kconfig
> +++ b/drivers/gpu/drm/omapdrm/Kconfig
> @@ -4,6 +4,7 @@ config DRM_OMAP
>   	depends on DRM && OF
>   	depends on ARCH_OMAP2PLUS
>   	select DRM_KMS_HELPER
> +	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
>   	select VIDEOMODE_HELPERS
>   	select HDMI
>   	default n
> diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> index b950e93b3846..b7ccce0704a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> @@ -4,6 +4,8 @@
>    * Author: Rob Clark <rob@ti.com>
>    */
>   
> +#include <linux/fb.h>
> +
>   #include <drm/drm_drv.h>
>   #include <drm/drm_crtc_helper.h>
>   #include <drm/drm_fb_helper.h>
> @@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
>   
>   static const struct fb_ops omap_fb_ops = {
>   	.owner = THIS_MODULE,
> -
> +	FB_DEFAULT_SYS_OPS,
>   	.fb_check_var	= drm_fb_helper_check_var,
>   	.fb_set_par	= drm_fb_helper_set_par,
>   	.fb_setcmap	= drm_fb_helper_setcmap,
>   	.fb_blank	= drm_fb_helper_blank,
>   	.fb_pan_display = omap_fbdev_pan_display,
>   	.fb_ioctl	= drm_fb_helper_ioctl,
> -
> -	.fb_read = drm_fb_helper_sys_read,
> -	.fb_write = drm_fb_helper_sys_write,
> -	.fb_fillrect = drm_fb_helper_sys_fillrect,
> -	.fb_copyarea = drm_fb_helper_sys_copyarea,
> -	.fb_imageblit = drm_fb_helper_sys_imageblit,
> -
>   	.fb_destroy = omap_fbdev_fb_destroy,
>   };
>   

Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

  Tomi


_______________________________________________
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] 86+ messages in thread

* Re: [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-31  8:20     ` Tomi Valkeinen
  0 siblings, 0 replies; 86+ messages in thread
From: Tomi Valkeinen @ 2023-05-31  8:20 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel

On 30/05/2023 18:02, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Tomi Valkeinen <tomba@kernel.org>
> ---
>   drivers/gpu/drm/omapdrm/Kconfig      |  1 +
>   drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
>   2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
> index 76ded1568bd0..b4ac76c9f31b 100644
> --- a/drivers/gpu/drm/omapdrm/Kconfig
> +++ b/drivers/gpu/drm/omapdrm/Kconfig
> @@ -4,6 +4,7 @@ config DRM_OMAP
>   	depends on DRM && OF
>   	depends on ARCH_OMAP2PLUS
>   	select DRM_KMS_HELPER
> +	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
>   	select VIDEOMODE_HELPERS
>   	select HDMI
>   	default n
> diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> index b950e93b3846..b7ccce0704a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> @@ -4,6 +4,8 @@
>    * Author: Rob Clark <rob@ti.com>
>    */
>   
> +#include <linux/fb.h>
> +
>   #include <drm/drm_drv.h>
>   #include <drm/drm_crtc_helper.h>
>   #include <drm/drm_fb_helper.h>
> @@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
>   
>   static const struct fb_ops omap_fb_ops = {
>   	.owner = THIS_MODULE,
> -
> +	FB_DEFAULT_SYS_OPS,
>   	.fb_check_var	= drm_fb_helper_check_var,
>   	.fb_set_par	= drm_fb_helper_set_par,
>   	.fb_setcmap	= drm_fb_helper_setcmap,
>   	.fb_blank	= drm_fb_helper_blank,
>   	.fb_pan_display = omap_fbdev_pan_display,
>   	.fb_ioctl	= drm_fb_helper_ioctl,
> -
> -	.fb_read = drm_fb_helper_sys_read,
> -	.fb_write = drm_fb_helper_sys_write,
> -	.fb_fillrect = drm_fb_helper_sys_fillrect,
> -	.fb_copyarea = drm_fb_helper_sys_copyarea,
> -	.fb_imageblit = drm_fb_helper_sys_imageblit,
> -
>   	.fb_destroy = omap_fbdev_fb_destroy,
>   };
>   

Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

  Tomi


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

* Re: [Intel-gfx] [PATCH v5 08/13] drm/omapdrm: Use regular fbdev I/O helpers
@ 2023-05-31  8:20     ` Tomi Valkeinen
  0 siblings, 0 replies; 86+ messages in thread
From: Tomi Valkeinen @ 2023-05-31  8:20 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel

On 30/05/2023 18:02, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Omapdrm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Tomi Valkeinen <tomba@kernel.org>
> ---
>   drivers/gpu/drm/omapdrm/Kconfig      |  1 +
>   drivers/gpu/drm/omapdrm/omap_fbdev.c | 11 +++--------
>   2 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
> index 76ded1568bd0..b4ac76c9f31b 100644
> --- a/drivers/gpu/drm/omapdrm/Kconfig
> +++ b/drivers/gpu/drm/omapdrm/Kconfig
> @@ -4,6 +4,7 @@ config DRM_OMAP
>   	depends on DRM && OF
>   	depends on ARCH_OMAP2PLUS
>   	select DRM_KMS_HELPER
> +	select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
>   	select VIDEOMODE_HELPERS
>   	select HDMI
>   	default n
> diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> index b950e93b3846..b7ccce0704a3 100644
> --- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
> +++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
> @@ -4,6 +4,8 @@
>    * Author: Rob Clark <rob@ti.com>
>    */
>   
> +#include <linux/fb.h>
> +
>   #include <drm/drm_drv.h>
>   #include <drm/drm_crtc_helper.h>
>   #include <drm/drm_fb_helper.h>
> @@ -95,20 +97,13 @@ static void omap_fbdev_fb_destroy(struct fb_info *info)
>   
>   static const struct fb_ops omap_fb_ops = {
>   	.owner = THIS_MODULE,
> -
> +	FB_DEFAULT_SYS_OPS,
>   	.fb_check_var	= drm_fb_helper_check_var,
>   	.fb_set_par	= drm_fb_helper_set_par,
>   	.fb_setcmap	= drm_fb_helper_setcmap,
>   	.fb_blank	= drm_fb_helper_blank,
>   	.fb_pan_display = omap_fbdev_pan_display,
>   	.fb_ioctl	= drm_fb_helper_ioctl,
> -
> -	.fb_read = drm_fb_helper_sys_read,
> -	.fb_write = drm_fb_helper_sys_write,
> -	.fb_fillrect = drm_fb_helper_sys_fillrect,
> -	.fb_copyarea = drm_fb_helper_sys_copyarea,
> -	.fb_imageblit = drm_fb_helper_sys_imageblit,
> -
>   	.fb_destroy = omap_fbdev_fb_destroy,
>   };
>   

Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

  Tomi


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

* [Intel-gfx] ✓ Fi.CI.IGT: success for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
  2023-05-30 15:02 ` Thomas Zimmermann
                   ` (18 preceding siblings ...)
  (?)
@ 2023-06-01 13:42 ` Patchwork
  -1 siblings, 0 replies; 86+ messages in thread
From: Patchwork @ 2023-06-01 13:42 UTC (permalink / raw)
  To: Thomas Zimmermann; +Cc: intel-gfx

[-- Attachment #1: Type: text/plain, Size: 19205 bytes --]

== Series Details ==

Series: series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers
URL   : https://patchwork.freedesktop.org/series/118574/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_13204_full -> Patchwork_118574v1_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (7 -> 7)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@kms_flip@dpms-off-confusion@b-hdmi-a3:
    - {shard-dg1}:        [PASS][1] -> [INCOMPLETE][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-dg1-13/igt@kms_flip@dpms-off-confusion@b-hdmi-a3.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-dg1-13/igt@kms_flip@dpms-off-confusion@b-hdmi-a3.html

  
New tests
---------

  New tests have been introduced between CI_DRM_13204_full and Patchwork_118574v1_full:

### New IGT tests (4) ###

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-a-hdmi-a-3:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-b-hdmi-a-3:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-c-hdmi-a-3:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-d-hdmi-a-3:
    - Statuses : 1 skip(s)
    - Exec time: [0.0] s

  

Known issues
------------

  Here are the changes found in Patchwork_118574v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_barrier_race@remote-request@rcs0:
    - shard-apl:          [PASS][3] -> [ABORT][4] ([i915#7461] / [i915#8211] / [i915#8234])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-apl3/igt@gem_barrier_race@remote-request@rcs0.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-apl3/igt@gem_barrier_race@remote-request@rcs0.html

  * igt@gem_busy@close-race:
    - shard-glk:          [PASS][5] -> [ABORT][6] ([i915#6016])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-glk2/igt@gem_busy@close-race.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk7/igt@gem_busy@close-race.html

  * igt@gem_close_race@multigpu-basic-process:
    - shard-apl:          NOTRUN -> [SKIP][7] ([fdo#109271]) +6 similar issues
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-apl6/igt@gem_close_race@multigpu-basic-process.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-glk:          [PASS][8] -> [FAIL][9] ([i915#2846])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-glk8/igt@gem_exec_fair@basic-deadline.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk4/igt@gem_exec_fair@basic-deadline.html

  * igt@i915_module_load@load:
    - shard-glk:          NOTRUN -> [SKIP][10] ([fdo#109271] / [i915#6227])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk1/igt@i915_module_load@load.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][11] -> [INCOMPLETE][12] ([i915#7790])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-snb5/igt@i915_pm_rps@reset.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-snb1/igt@i915_pm_rps@reset.html

  * igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
    - shard-glk:          NOTRUN -> [FAIL][13] ([i915#72])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk1/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html

  * igt@kms_hdmi_inject@inject-audio:
    - shard-glk:          [PASS][14] -> [SKIP][15] ([fdo#109271])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-glk1/igt@kms_hdmi_inject@inject-audio.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk3/igt@kms_hdmi_inject@inject-audio.html

  * igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-c-dp-1:
    - shard-apl:          NOTRUN -> [SKIP][16] ([fdo#109271] / [i915#4579])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-apl6/igt@kms_plane_scaling@plane-downscale-with-pixel-format-factor-0-25@pipe-c-dp-1.html

  * igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-vga-1:
    - shard-snb:          NOTRUN -> [SKIP][17] ([fdo#109271]) +20 similar issues
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-snb4/igt@kms_plane_scaling@plane-scaler-with-clipping-clamping-rotation@pipe-a-vga-1.html

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-c-hdmi-a-3 (NEW):
    - {shard-dg1}:        NOTRUN -> [SKIP][18] ([i915#5176]) +2 similar issues
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-dg1-12/igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-c-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-d-hdmi-a-3 (NEW):
    - {shard-dg1}:        NOTRUN -> [SKIP][19] ([i915#4579] / [i915#5176])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-dg1-12/igt@kms_plane_scaling@plane-scaler-with-rotation-unity-scaling@pipe-d-hdmi-a-3.html

  * igt@kms_plane_scaling@plane-upscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1:
    - shard-snb:          NOTRUN -> [SKIP][20] ([fdo#109271] / [i915#4579]) +11 similar issues
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-snb1/igt@kms_plane_scaling@plane-upscale-with-modifiers-factor-0-25@pipe-b-hdmi-a-1.html

  * igt@kms_selftest@all-tests:
    - shard-glk:          NOTRUN -> [SKIP][21] ([fdo#109271] / [i915#4579]) +1 similar issue
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk1/igt@kms_selftest@all-tests.html

  * igt@vc4/vc4_wait_bo@used-bo-0ns:
    - shard-glk:          NOTRUN -> [SKIP][22] ([fdo#109271]) +4 similar issues
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk1/igt@vc4/vc4_wait_bo@used-bo-0ns.html

  
#### Possible fixes ####

  * igt@drm_fdinfo@most-busy-idle-check-all@rcs0:
    - {shard-rkl}:        [FAIL][23] ([i915#7742]) -> [PASS][24]
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-7/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-6/igt@drm_fdinfo@most-busy-idle-check-all@rcs0.html

  * igt@gem_ctx_exec@basic-nohangcheck:
    - {shard-tglu}:       [FAIL][25] ([i915#6268]) -> [PASS][26]
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-tglu-10/igt@gem_ctx_exec@basic-nohangcheck.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-tglu-3/igt@gem_ctx_exec@basic-nohangcheck.html

  * igt@gem_eio@hibernate:
    - {shard-tglu}:       [ABORT][27] ([i915#7975] / [i915#8213] / [i915#8398]) -> [PASS][28]
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-tglu-10/igt@gem_eio@hibernate.html
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-tglu-9/igt@gem_eio@hibernate.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
    - {shard-tglu}:       [FAIL][29] ([i915#2842]) -> [PASS][30]
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-tglu-9/igt@gem_exec_fair@basic-pace-share@rcs0.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-tglu-5/igt@gem_exec_fair@basic-pace-share@rcs0.html

  * igt@gem_exec_fair@basic-pace@bcs0:
    - {shard-rkl}:        [FAIL][31] ([i915#2842]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-6/igt@gem_exec_fair@basic-pace@bcs0.html
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-6/igt@gem_exec_fair@basic-pace@bcs0.html

  * igt@gem_userptr_blits@huge-split:
    - shard-apl:          [FAIL][33] ([i915#3318]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-apl3/igt@gem_userptr_blits@huge-split.html
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-apl2/igt@gem_userptr_blits@huge-split.html

  * igt@gen9_exec_parse@allowed-single:
    - shard-apl:          [ABORT][35] ([i915#5566]) -> [PASS][36]
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-apl6/igt@gen9_exec_parse@allowed-single.html
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-apl6/igt@gen9_exec_parse@allowed-single.html

  * igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a:
    - {shard-dg1}:        [SKIP][37] ([i915#1937] / [i915#4579]) -> [PASS][38]
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-dg1-12/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-dg1-19/igt@i915_pm_lpsp@kms-lpsp@kms-lpsp-hdmi-a.html

  * igt@i915_pm_rpm@dpms-lpsp:
    - {shard-rkl}:        [SKIP][39] ([i915#1397]) -> [PASS][40] +3 similar issues
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-1/igt@i915_pm_rpm@dpms-lpsp.html
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-7/igt@i915_pm_rpm@dpms-lpsp.html

  * igt@i915_pm_rpm@modeset-lpsp-stress-no-wait:
    - {shard-dg1}:        [SKIP][41] ([i915#1397]) -> [PASS][42]
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-dg1-17/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-dg1-19/igt@i915_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - {shard-rkl}:        [FAIL][43] ([i915#3743]) -> [PASS][44]
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-7/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_cursor_legacy@single-move@pipe-b:
    - {shard-rkl}:        [INCOMPLETE][45] ([i915#8011]) -> [PASS][46]
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-7/igt@kms_cursor_legacy@single-move@pipe-b.html
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-6/igt@kms_cursor_legacy@single-move@pipe-b.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-hdmi-a1-hdmi-a2:
    - shard-glk:          [FAIL][47] ([i915#79]) -> [PASS][48] +1 similar issue
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-glk6/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-hdmi-a1-hdmi-a2.html
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk8/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-hdmi-a1-hdmi-a2.html

  * igt@kms_flip_tiling@flip-change-tiling@hdmi-a-1-pipe-c-y-to-y:
    - shard-glk:          [INCOMPLETE][49] -> [PASS][50]
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-glk7/igt@kms_flip_tiling@flip-change-tiling@hdmi-a-1-pipe-c-y-to-y.html
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-glk1/igt@kms_flip_tiling@flip-change-tiling@hdmi-a-1-pipe-c-y-to-y.html

  * igt@kms_rotation_crc@multiplane-rotation:
    - {shard-rkl}:        [ABORT][51] ([i915#8311]) -> [PASS][52]
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-rkl-4/igt@kms_rotation_crc@multiplane-rotation.html
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-rkl-4/igt@kms_rotation_crc@multiplane-rotation.html

  
#### Warnings ####

  * igt@kms_hdmi_inject@inject-audio:
    - shard-snb:          [FAIL][53] ([IGT#3]) -> [SKIP][54] ([fdo#109271])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_13204/shard-snb6/igt@kms_hdmi_inject@inject-audio.html
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/shard-snb5/igt@kms_hdmi_inject@inject-audio.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [IGT#3]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/3
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [fdo#109291]: https://bugs.freedesktop.org/show_bug.cgi?id=109291
  [fdo#109315]: https://bugs.freedesktop.org/show_bug.cgi?id=109315
  [fdo#109506]: https://bugs.freedesktop.org/show_bug.cgi?id=109506
  [fdo#110723]: https://bugs.freedesktop.org/show_bug.cgi?id=110723
  [fdo#111068]: https://bugs.freedesktop.org/show_bug.cgi?id=111068
  [fdo#111614]: https://bugs.freedesktop.org/show_bug.cgi?id=111614
  [fdo#111615]: https://bugs.freedesktop.org/show_bug.cgi?id=111615
  [fdo#111825]: https://bugs.freedesktop.org/show_bug.cgi?id=111825
  [fdo#111827]: https://bugs.freedesktop.org/show_bug.cgi?id=111827
  [i915#1072]: https://gitlab.freedesktop.org/drm/intel/issues/1072
  [i915#1397]: https://gitlab.freedesktop.org/drm/intel/issues/1397
  [i915#1825]: https://gitlab.freedesktop.org/drm/intel/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/intel/issues/1839
  [i915#1937]: https://gitlab.freedesktop.org/drm/intel/issues/1937
  [i915#2527]: https://gitlab.freedesktop.org/drm/intel/issues/2527
  [i915#2575]: https://gitlab.freedesktop.org/drm/intel/issues/2575
  [i915#2587]: https://gitlab.freedesktop.org/drm/intel/issues/2587
  [i915#2672]: https://gitlab.freedesktop.org/drm/intel/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/intel/issues/280
  [i915#2842]: https://gitlab.freedesktop.org/drm/intel/issues/2842
  [i915#2846]: https://gitlab.freedesktop.org/drm/intel/issues/2846
  [i915#3023]: https://gitlab.freedesktop.org/drm/intel/issues/3023
  [i915#3281]: https://gitlab.freedesktop.org/drm/intel/issues/3281
  [i915#3282]: https://gitlab.freedesktop.org/drm/intel/issues/3282
  [i915#3297]: https://gitlab.freedesktop.org/drm/intel/issues/3297
  [i915#3318]: https://gitlab.freedesktop.org/drm/intel/issues/3318
  [i915#3359]: https://gitlab.freedesktop.org/drm/intel/issues/3359
  [i915#3458]: https://gitlab.freedesktop.org/drm/intel/issues/3458
  [i915#3555]: https://gitlab.freedesktop.org/drm/intel/issues/3555
  [i915#3638]: https://gitlab.freedesktop.org/drm/intel/issues/3638
  [i915#3689]: https://gitlab.freedesktop.org/drm/intel/issues/3689
  [i915#3708]: https://gitlab.freedesktop.org/drm/intel/issues/3708
  [i915#3734]: https://gitlab.freedesktop.org/drm/intel/issues/3734
  [i915#3743]: https://gitlab.freedesktop.org/drm/intel/issues/3743
  [i915#3778]: https://gitlab.freedesktop.org/drm/intel/issues/3778
  [i915#3804]: https://gitlab.freedesktop.org/drm/intel/issues/3804
  [i915#3886]: https://gitlab.freedesktop.org/drm/intel/issues/3886
  [i915#3952]: https://gitlab.freedesktop.org/drm/intel/issues/3952
  [i915#4070]: https://gitlab.freedesktop.org/drm/intel/issues/4070
  [i915#4077]: https://gitlab.freedesktop.org/drm/intel/issues/4077
  [i915#4078]: https://gitlab.freedesktop.org/drm/intel/issues/4078
  [i915#4270]: https://gitlab.freedesktop.org/drm/intel/issues/4270
  [i915#4538]: https://gitlab.freedesktop.org/drm/intel/issues/4538
  [i915#4579]: https://gitlab.freedesktop.org/drm/intel/issues/4579
  [i915#4613]: https://gitlab.freedesktop.org/drm/intel/issues/4613
  [i915#4771]: https://gitlab.freedesktop.org/drm/intel/issues/4771
  [i915#4833]: https://gitlab.freedesktop.org/drm/intel/issues/4833
  [i915#4860]: https://gitlab.freedesktop.org/drm/intel/issues/4860
  [i915#4958]: https://gitlab.freedesktop.org/drm/intel/issues/4958
  [i915#5176]: https://gitlab.freedesktop.org/drm/intel/issues/5176
  [i915#5235]: https://gitlab.freedesktop.org/drm/intel/issues/5235
  [i915#5286]: https://gitlab.freedesktop.org/drm/intel/issues/5286
  [i915#5289]: https://gitlab.freedesktop.org/drm/intel/issues/5289
  [i915#5325]: https://gitlab.freedesktop.org/drm/intel/issues/5325
  [i915#533]: https://gitlab.freedesktop.org/drm/intel/issues/533
  [i915#5354]: https://gitlab.freedesktop.org/drm/intel/issues/5354
  [i915#5566]: https://gitlab.freedesktop.org/drm/intel/issues/5566
  [i915#6016]: https://gitlab.freedesktop.org/drm/intel/issues/6016
  [i915#6095]: https://gitlab.freedesktop.org/drm/intel/issues/6095
  [i915#6227]: https://gitlab.freedesktop.org/drm/intel/issues/6227
  [i915#6268]: https://gitlab.freedesktop.org/drm/intel/issues/6268
  [i915#658]: https://gitlab.freedesktop.org/drm/intel/issues/658
  [i915#6768]: https://gitlab.freedesktop.org/drm/intel/issues/6768
  [i915#6953]: https://gitlab.freedesktop.org/drm/intel/issues/6953
  [i915#72]: https://gitlab.freedesktop.org/drm/intel/issues/72
  [i915#7461]: https://gitlab.freedesktop.org/drm/intel/issues/7461
  [i915#7561]: https://gitlab.freedesktop.org/drm/intel/issues/7561
  [i915#7711]: https://gitlab.freedesktop.org/drm/intel/issues/7711
  [i915#7742]: https://gitlab.freedesktop.org/drm/intel/issues/7742
  [i915#7790]: https://gitlab.freedesktop.org/drm/intel/issues/7790
  [i915#7828]: https://gitlab.freedesktop.org/drm/intel/issues/7828
  [i915#79]: https://gitlab.freedesktop.org/drm/intel/issues/79
  [i915#7921]: https://gitlab.freedesktop.org/drm/intel/issues/7921
  [i915#7975]: https://gitlab.freedesktop.org/drm/intel/issues/7975
  [i915#8011]: https://gitlab.freedesktop.org/drm/intel/issues/8011
  [i915#8211]: https://gitlab.freedesktop.org/drm/intel/issues/8211
  [i915#8213]: https://gitlab.freedesktop.org/drm/intel/issues/8213
  [i915#8228]: https://gitlab.freedesktop.org/drm/intel/issues/8228
  [i915#8234]: https://gitlab.freedesktop.org/drm/intel/issues/8234
  [i915#8292]: https://gitlab.freedesktop.org/drm/intel/issues/8292
  [i915#8311]: https://gitlab.freedesktop.org/drm/intel/issues/8311
  [i915#8347]: https://gitlab.freedesktop.org/drm/intel/issues/8347
  [i915#8398]: https://gitlab.freedesktop.org/drm/intel/issues/8398
  [i915#8411]: https://gitlab.freedesktop.org/drm/intel/issues/8411
  [i915#8414]: https://gitlab.freedesktop.org/drm/intel/issues/8414
  [i915#8502]: https://gitlab.freedesktop.org/drm/intel/issues/8502


Build changes
-------------

  * Linux: CI_DRM_13204 -> Patchwork_118574v1

  CI-20190529: 20190529
  CI_DRM_13204: 83a048e62ecf7838b583389e60c1defa530a5668 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7311: c031030f39aff973330668a5a2f1593408da78ae @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_118574v1: 83a048e62ecf7838b583389e60c1defa530a5668 @ git://anongit.freedesktop.org/gfx-ci/linux
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_118574v1/index.html

[-- Attachment #2: Type: text/html, Size: 17520 bytes --]

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

* Re: [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
  2023-05-30 15:02   ` Thomas Zimmermann
                       ` (2 preceding siblings ...)
  (?)
@ 2023-06-01 16:24     ` Abhinav Kumar
  -1 siblings, 0 replies; 86+ messages in thread
From: Abhinav Kumar @ 2023-06-01 16:24 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra, Dmitry Baryshkov,
	Rob Clark, Sean Paul



On 5/30/2023 8:02 AM, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Msm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> Msm's fbdev emulation has been incomplete as it didn't implement
> damage handling. Partilly fix this by implementing damage handling
> for write and draw operation. It is still missing for mmaped pages.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> 	* partially support damage handling
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Cc: Sean Paul <sean@poorly.run>
> ---

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>

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

* Re: [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-06-01 16:24     ` Abhinav Kumar
  0 siblings, 0 replies; 86+ messages in thread
From: Abhinav Kumar @ 2023-06-01 16:24 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra, Dmitry Baryshkov,
	Rob Clark, Sean Paul



On 5/30/2023 8:02 AM, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Msm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> Msm's fbdev emulation has been incomplete as it didn't implement
> damage handling. Partilly fix this by implementing damage handling
> for write and draw operation. It is still missing for mmaped pages.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> 	* partially support damage handling
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Cc: Sean Paul <sean@poorly.run>
> ---

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>

_______________________________________________
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] 86+ messages in thread

* Re: [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-06-01 16:24     ` Abhinav Kumar
  0 siblings, 0 replies; 86+ messages in thread
From: Abhinav Kumar @ 2023-06-01 16:24 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: Sean Paul, linux-samsung-soc, linux-arm-msm, intel-gfx,
	dri-devel, Dmitry Baryshkov, amd-gfx, linux-tegra, freedreno,
	linux-arm-kernel



On 5/30/2023 8:02 AM, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Msm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> Msm's fbdev emulation has been incomplete as it didn't implement
> damage handling. Partilly fix this by implementing damage handling
> for write and draw operation. It is still missing for mmaped pages.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> 	* partially support damage handling
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Cc: Sean Paul <sean@poorly.run>
> ---

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>

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

* Re: [Intel-gfx] [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-06-01 16:24     ` Abhinav Kumar
  0 siblings, 0 replies; 86+ messages in thread
From: Abhinav Kumar @ 2023-06-01 16:24 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel,
	Dmitry Baryshkov, amd-gfx, linux-tegra, freedreno,
	linux-arm-kernel



On 5/30/2023 8:02 AM, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Msm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> Msm's fbdev emulation has been incomplete as it didn't implement
> damage handling. Partilly fix this by implementing damage handling
> for write and draw operation. It is still missing for mmaped pages.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> 	* partially support damage handling
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Cc: Sean Paul <sean@poorly.run>
> ---

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>

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

* Re: [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers
@ 2023-06-01 16:24     ` Abhinav Kumar
  0 siblings, 0 replies; 86+ messages in thread
From: Abhinav Kumar @ 2023-06-01 16:24 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: Sean Paul, linux-samsung-soc, linux-arm-msm, intel-gfx,
	dri-devel, Dmitry Baryshkov, Rob Clark, amd-gfx, linux-tegra,
	freedreno, linux-arm-kernel



On 5/30/2023 8:02 AM, Thomas Zimmermann wrote:
> Use the regular fbdev helpers for framebuffer I/O instead of DRM's
> helpers. Msm does not use damage handling, so DRM's fbdev helpers
> are mere wrappers around the fbdev code.
> 
> By using fbdev helpers directly within each DRM fbdev emulation,
> we can eventually remove DRM's wrapper functions entirely.
> 
> Msm's fbdev emulation has been incomplete as it didn't implement
> damage handling. Partilly fix this by implementing damage handling
> for write and draw operation. It is still missing for mmaped pages.
> 
> v4:
> 	* use initializer macros for struct fb_ops
> 	* partially support damage handling
> v2:
> 	* use FB_SYS_HELPERS option
> 
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Acked-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
> Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
> Cc: Sean Paul <sean@poorly.run>
> ---

Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>

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

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
  2023-05-30 15:02   ` Thomas Zimmermann
  (?)
  (?)
@ 2023-06-14 11:29     ` Christian König
  -1 siblings, 0 replies; 86+ messages in thread
From: Christian König @ 2023-06-14 11:29 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel



Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
> For framebuffers in I/O and system memory, add macros that set
> struct fb_ops to the respective callback functions.
>
> For deferred I/O, add macros that generate callback functions with
> damage handling. Add initializer macros that set struct fb_ops to
> the generated callbacks.
>
> These macros can remove a lot boilerplate code from fbdev drivers.
> The drivers are supposed to use the macro that is required for its
> framebuffer. Each macro is split into smaller helpers, so that
> drivers with non-standard callbacks can pick and customize callbacks
> as needed. There are individual helper macros for read/write, mmap
> and drawing.
>
> v5:
> 	* fix whitespace errors (Jingfeng)
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> ---
>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 112 insertions(+)
>
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index 2cf8efcb9e32..ce6823e157e6 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
>   			   size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in I/O memory.
> + */
> +
> +#define __FB_DEFAULT_IO_OPS_RDWR \
> +	.fb_read	= fb_io_read, \
> +	.fb_write	= fb_io_write
> +
> +#define __FB_DEFAULT_IO_OPS_DRAW \
> +	.fb_fillrect	= cfb_fillrect, \
> +	.fb_copyarea	= cfb_copyarea, \
> +	.fb_imageblit	= cfb_imageblit
> +
> +#define __FB_DEFAULT_IO_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation

// style comment in a macro? That's usually a very bad idea.

Christian.

> +
> +#define FB_DEFAULT_IO_OPS \
> +	__FB_DEFAULT_IO_OPS_RDWR, \
> +	__FB_DEFAULT_IO_OPS_DRAW, \
> +	__FB_DEFAULT_IO_OPS_MMAP
> +
>   /*
>    * Drawing operations where framebuffer is in system RAM
>    */
> +
>   extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
>   extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
>   extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
>   			    size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in system memory.
> + */
> +
> +#define __FB_DEFAULT_SYS_OPS_RDWR \
> +	.fb_read	= fb_sys_read, \
> +	.fb_write	= fb_sys_write
> +
> +#define __FB_DEFAULT_SYS_OPS_DRAW \
> +	.fb_fillrect	= sys_fillrect, \
> +	.fb_copyarea	= sys_copyarea, \
> +	.fb_imageblit	= sys_imageblit
> +
> +#define __FB_DEFAULT_SYS_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation
> +
> +#define FB_DEFAULT_SYS_OPS \
> +	__FB_DEFAULT_SYS_OPS_RDWR, \
> +	__FB_DEFAULT_SYS_OPS_DRAW, \
> +	__FB_DEFAULT_SYS_OPS_MMAP
> +
>   /* drivers/video/fbmem.c */
>   extern int register_framebuffer(struct fb_info *fb_info);
>   extern void unregister_framebuffer(struct fb_info *fb_info);
> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>   				loff_t end, int datasync);
>   
> +/*
> + * Generate callbacks for deferred I/O
> + */
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
> +	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
> +					       size_t count, loff_t *ppos) \
> +	{ \
> +		return fb_ ## __mode ## _read(info, buf, count, ppos); \
> +	} \
> +	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
> +						size_t count, loff_t *ppos) \
> +	{ \
> +		unsigned long offset = *ppos; \
> +		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
> +		if (ret > 0) \
> +			__damage_range(info, offset, ret); \
> +		return ret; \
> +	}
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
> +	static void __prefix ## _defio_fillrect(struct fb_info *info, \
> +						const struct fb_fillrect *rect) \
> +	{ \
> +		__mode ## _fillrect(info, rect); \
> +		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
> +	} \
> +	static void __prefix ## _defio_copyarea(struct fb_info *info, \
> +						const struct fb_copyarea *area) \
> +	{ \
> +		__mode ## _copyarea(info, area); \
> +		__damage_area(info, area->dx, area->dy, area->width, area->height); \
> +	} \
> +	static void __prefix ## _defio_imageblit(struct fb_info *info, \
> +						 const struct fb_image *image) \
> +	{ \
> +		__mode ## _imageblit(info, image); \
> +		__damage_area(info, image->dx, image->dy, image->width, image->height); \
> +	}
> +
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> +
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> +
> +/*
> + * Initializes struct fb_ops for deferred I/O.
> + */
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
> +	.fb_read	= __prefix ## _defio_read, \
> +	.fb_write	= __prefix ## _defio_write
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
> +	.fb_fillrect	= __prefix ## _defio_fillrect, \
> +	.fb_copyarea	= __prefix ## _defio_copyarea, \
> +	.fb_imageblit	= __prefix ## _defio_imageblit
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
> +	.fb_mmap	= fb_deferred_io_mmap
> +
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> +
>   static inline bool fb_be_math(struct fb_info *info)
>   {
>   #ifdef CONFIG_FB_FOREIGN_ENDIAN


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

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:29     ` Christian König
  0 siblings, 0 replies; 86+ messages in thread
From: Christian König @ 2023-06-14 11:29 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel



Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
> For framebuffers in I/O and system memory, add macros that set
> struct fb_ops to the respective callback functions.
>
> For deferred I/O, add macros that generate callback functions with
> damage handling. Add initializer macros that set struct fb_ops to
> the generated callbacks.
>
> These macros can remove a lot boilerplate code from fbdev drivers.
> The drivers are supposed to use the macro that is required for its
> framebuffer. Each macro is split into smaller helpers, so that
> drivers with non-standard callbacks can pick and customize callbacks
> as needed. There are individual helper macros for read/write, mmap
> and drawing.
>
> v5:
> 	* fix whitespace errors (Jingfeng)
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> ---
>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 112 insertions(+)
>
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index 2cf8efcb9e32..ce6823e157e6 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
>   			   size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in I/O memory.
> + */
> +
> +#define __FB_DEFAULT_IO_OPS_RDWR \
> +	.fb_read	= fb_io_read, \
> +	.fb_write	= fb_io_write
> +
> +#define __FB_DEFAULT_IO_OPS_DRAW \
> +	.fb_fillrect	= cfb_fillrect, \
> +	.fb_copyarea	= cfb_copyarea, \
> +	.fb_imageblit	= cfb_imageblit
> +
> +#define __FB_DEFAULT_IO_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation

// style comment in a macro? That's usually a very bad idea.

Christian.

> +
> +#define FB_DEFAULT_IO_OPS \
> +	__FB_DEFAULT_IO_OPS_RDWR, \
> +	__FB_DEFAULT_IO_OPS_DRAW, \
> +	__FB_DEFAULT_IO_OPS_MMAP
> +
>   /*
>    * Drawing operations where framebuffer is in system RAM
>    */
> +
>   extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
>   extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
>   extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
>   			    size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in system memory.
> + */
> +
> +#define __FB_DEFAULT_SYS_OPS_RDWR \
> +	.fb_read	= fb_sys_read, \
> +	.fb_write	= fb_sys_write
> +
> +#define __FB_DEFAULT_SYS_OPS_DRAW \
> +	.fb_fillrect	= sys_fillrect, \
> +	.fb_copyarea	= sys_copyarea, \
> +	.fb_imageblit	= sys_imageblit
> +
> +#define __FB_DEFAULT_SYS_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation
> +
> +#define FB_DEFAULT_SYS_OPS \
> +	__FB_DEFAULT_SYS_OPS_RDWR, \
> +	__FB_DEFAULT_SYS_OPS_DRAW, \
> +	__FB_DEFAULT_SYS_OPS_MMAP
> +
>   /* drivers/video/fbmem.c */
>   extern int register_framebuffer(struct fb_info *fb_info);
>   extern void unregister_framebuffer(struct fb_info *fb_info);
> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>   				loff_t end, int datasync);
>   
> +/*
> + * Generate callbacks for deferred I/O
> + */
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
> +	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
> +					       size_t count, loff_t *ppos) \
> +	{ \
> +		return fb_ ## __mode ## _read(info, buf, count, ppos); \
> +	} \
> +	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
> +						size_t count, loff_t *ppos) \
> +	{ \
> +		unsigned long offset = *ppos; \
> +		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
> +		if (ret > 0) \
> +			__damage_range(info, offset, ret); \
> +		return ret; \
> +	}
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
> +	static void __prefix ## _defio_fillrect(struct fb_info *info, \
> +						const struct fb_fillrect *rect) \
> +	{ \
> +		__mode ## _fillrect(info, rect); \
> +		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
> +	} \
> +	static void __prefix ## _defio_copyarea(struct fb_info *info, \
> +						const struct fb_copyarea *area) \
> +	{ \
> +		__mode ## _copyarea(info, area); \
> +		__damage_area(info, area->dx, area->dy, area->width, area->height); \
> +	} \
> +	static void __prefix ## _defio_imageblit(struct fb_info *info, \
> +						 const struct fb_image *image) \
> +	{ \
> +		__mode ## _imageblit(info, image); \
> +		__damage_area(info, image->dx, image->dy, image->width, image->height); \
> +	}
> +
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> +
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> +
> +/*
> + * Initializes struct fb_ops for deferred I/O.
> + */
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
> +	.fb_read	= __prefix ## _defio_read, \
> +	.fb_write	= __prefix ## _defio_write
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
> +	.fb_fillrect	= __prefix ## _defio_fillrect, \
> +	.fb_copyarea	= __prefix ## _defio_copyarea, \
> +	.fb_imageblit	= __prefix ## _defio_imageblit
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
> +	.fb_mmap	= fb_deferred_io_mmap
> +
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> +
>   static inline bool fb_be_math(struct fb_info *info)
>   {
>   #ifdef CONFIG_FB_FOREIGN_ENDIAN


_______________________________________________
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] 86+ messages in thread

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:29     ` Christian König
  0 siblings, 0 replies; 86+ messages in thread
From: Christian König @ 2023-06-14 11:29 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, amd-gfx, dri-devel,
	linux-tegra, freedreno, linux-arm-kernel



Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
> For framebuffers in I/O and system memory, add macros that set
> struct fb_ops to the respective callback functions.
>
> For deferred I/O, add macros that generate callback functions with
> damage handling. Add initializer macros that set struct fb_ops to
> the generated callbacks.
>
> These macros can remove a lot boilerplate code from fbdev drivers.
> The drivers are supposed to use the macro that is required for its
> framebuffer. Each macro is split into smaller helpers, so that
> drivers with non-standard callbacks can pick and customize callbacks
> as needed. There are individual helper macros for read/write, mmap
> and drawing.
>
> v5:
> 	* fix whitespace errors (Jingfeng)
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> ---
>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 112 insertions(+)
>
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index 2cf8efcb9e32..ce6823e157e6 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
>   			   size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in I/O memory.
> + */
> +
> +#define __FB_DEFAULT_IO_OPS_RDWR \
> +	.fb_read	= fb_io_read, \
> +	.fb_write	= fb_io_write
> +
> +#define __FB_DEFAULT_IO_OPS_DRAW \
> +	.fb_fillrect	= cfb_fillrect, \
> +	.fb_copyarea	= cfb_copyarea, \
> +	.fb_imageblit	= cfb_imageblit
> +
> +#define __FB_DEFAULT_IO_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation

// style comment in a macro? That's usually a very bad idea.

Christian.

> +
> +#define FB_DEFAULT_IO_OPS \
> +	__FB_DEFAULT_IO_OPS_RDWR, \
> +	__FB_DEFAULT_IO_OPS_DRAW, \
> +	__FB_DEFAULT_IO_OPS_MMAP
> +
>   /*
>    * Drawing operations where framebuffer is in system RAM
>    */
> +
>   extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
>   extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
>   extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
>   			    size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in system memory.
> + */
> +
> +#define __FB_DEFAULT_SYS_OPS_RDWR \
> +	.fb_read	= fb_sys_read, \
> +	.fb_write	= fb_sys_write
> +
> +#define __FB_DEFAULT_SYS_OPS_DRAW \
> +	.fb_fillrect	= sys_fillrect, \
> +	.fb_copyarea	= sys_copyarea, \
> +	.fb_imageblit	= sys_imageblit
> +
> +#define __FB_DEFAULT_SYS_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation
> +
> +#define FB_DEFAULT_SYS_OPS \
> +	__FB_DEFAULT_SYS_OPS_RDWR, \
> +	__FB_DEFAULT_SYS_OPS_DRAW, \
> +	__FB_DEFAULT_SYS_OPS_MMAP
> +
>   /* drivers/video/fbmem.c */
>   extern int register_framebuffer(struct fb_info *fb_info);
>   extern void unregister_framebuffer(struct fb_info *fb_info);
> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>   				loff_t end, int datasync);
>   
> +/*
> + * Generate callbacks for deferred I/O
> + */
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
> +	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
> +					       size_t count, loff_t *ppos) \
> +	{ \
> +		return fb_ ## __mode ## _read(info, buf, count, ppos); \
> +	} \
> +	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
> +						size_t count, loff_t *ppos) \
> +	{ \
> +		unsigned long offset = *ppos; \
> +		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
> +		if (ret > 0) \
> +			__damage_range(info, offset, ret); \
> +		return ret; \
> +	}
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
> +	static void __prefix ## _defio_fillrect(struct fb_info *info, \
> +						const struct fb_fillrect *rect) \
> +	{ \
> +		__mode ## _fillrect(info, rect); \
> +		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
> +	} \
> +	static void __prefix ## _defio_copyarea(struct fb_info *info, \
> +						const struct fb_copyarea *area) \
> +	{ \
> +		__mode ## _copyarea(info, area); \
> +		__damage_area(info, area->dx, area->dy, area->width, area->height); \
> +	} \
> +	static void __prefix ## _defio_imageblit(struct fb_info *info, \
> +						 const struct fb_image *image) \
> +	{ \
> +		__mode ## _imageblit(info, image); \
> +		__damage_area(info, image->dx, image->dy, image->width, image->height); \
> +	}
> +
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> +
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> +
> +/*
> + * Initializes struct fb_ops for deferred I/O.
> + */
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
> +	.fb_read	= __prefix ## _defio_read, \
> +	.fb_write	= __prefix ## _defio_write
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
> +	.fb_fillrect	= __prefix ## _defio_fillrect, \
> +	.fb_copyarea	= __prefix ## _defio_copyarea, \
> +	.fb_imageblit	= __prefix ## _defio_imageblit
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
> +	.fb_mmap	= fb_deferred_io_mmap
> +
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> +
>   static inline bool fb_be_math(struct fb_info *info)
>   {
>   #ifdef CONFIG_FB_FOREIGN_ENDIAN


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

* Re: [Intel-gfx] [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:29     ` Christian König
  0 siblings, 0 replies; 86+ messages in thread
From: Christian König @ 2023-06-14 11:29 UTC (permalink / raw)
  To: Thomas Zimmermann, daniel, airlied, maarten.lankhorst, mripard,
	javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, amd-gfx, dri-devel,
	linux-tegra, freedreno, linux-arm-kernel



Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
> For framebuffers in I/O and system memory, add macros that set
> struct fb_ops to the respective callback functions.
>
> For deferred I/O, add macros that generate callback functions with
> damage handling. Add initializer macros that set struct fb_ops to
> the generated callbacks.
>
> These macros can remove a lot boilerplate code from fbdev drivers.
> The drivers are supposed to use the macro that is required for its
> framebuffer. Each macro is split into smaller helpers, so that
> drivers with non-standard callbacks can pick and customize callbacks
> as needed. There are individual helper macros for read/write, mmap
> and drawing.
>
> v5:
> 	* fix whitespace errors (Jingfeng)
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> ---
>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 112 insertions(+)
>
> diff --git a/include/linux/fb.h b/include/linux/fb.h
> index 2cf8efcb9e32..ce6823e157e6 100644
> --- a/include/linux/fb.h
> +++ b/include/linux/fb.h
> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
>   			   size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in I/O memory.
> + */
> +
> +#define __FB_DEFAULT_IO_OPS_RDWR \
> +	.fb_read	= fb_io_read, \
> +	.fb_write	= fb_io_write
> +
> +#define __FB_DEFAULT_IO_OPS_DRAW \
> +	.fb_fillrect	= cfb_fillrect, \
> +	.fb_copyarea	= cfb_copyarea, \
> +	.fb_imageblit	= cfb_imageblit
> +
> +#define __FB_DEFAULT_IO_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation

// style comment in a macro? That's usually a very bad idea.

Christian.

> +
> +#define FB_DEFAULT_IO_OPS \
> +	__FB_DEFAULT_IO_OPS_RDWR, \
> +	__FB_DEFAULT_IO_OPS_DRAW, \
> +	__FB_DEFAULT_IO_OPS_MMAP
> +
>   /*
>    * Drawing operations where framebuffer is in system RAM
>    */
> +
>   extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
>   extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
>   extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
>   			    size_t count, loff_t *ppos);
>   
> +/*
> + * Initializes struct fb_ops for framebuffers in system memory.
> + */
> +
> +#define __FB_DEFAULT_SYS_OPS_RDWR \
> +	.fb_read	= fb_sys_read, \
> +	.fb_write	= fb_sys_write
> +
> +#define __FB_DEFAULT_SYS_OPS_DRAW \
> +	.fb_fillrect	= sys_fillrect, \
> +	.fb_copyarea	= sys_copyarea, \
> +	.fb_imageblit	= sys_imageblit
> +
> +#define __FB_DEFAULT_SYS_OPS_MMAP \
> +	.fb_mmap	= NULL // default implementation
> +
> +#define FB_DEFAULT_SYS_OPS \
> +	__FB_DEFAULT_SYS_OPS_RDWR, \
> +	__FB_DEFAULT_SYS_OPS_DRAW, \
> +	__FB_DEFAULT_SYS_OPS_MMAP
> +
>   /* drivers/video/fbmem.c */
>   extern int register_framebuffer(struct fb_info *fb_info);
>   extern void unregister_framebuffer(struct fb_info *fb_info);
> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info *info);
>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>   				loff_t end, int datasync);
>   
> +/*
> + * Generate callbacks for deferred I/O
> + */
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, __mode) \
> +	static ssize_t __prefix ## _defio_read(struct fb_info *info, char __user *buf, \
> +					       size_t count, loff_t *ppos) \
> +	{ \
> +		return fb_ ## __mode ## _read(info, buf, count, ppos); \
> +	} \
> +	static ssize_t __prefix ## _defio_write(struct fb_info *info, const char __user *buf, \
> +						size_t count, loff_t *ppos) \
> +	{ \
> +		unsigned long offset = *ppos; \
> +		ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
> +		if (ret > 0) \
> +			__damage_range(info, offset, ret); \
> +		return ret; \
> +	}
> +
> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, __mode) \
> +	static void __prefix ## _defio_fillrect(struct fb_info *info, \
> +						const struct fb_fillrect *rect) \
> +	{ \
> +		__mode ## _fillrect(info, rect); \
> +		__damage_area(info, rect->dx, rect->dy, rect->width, rect->height); \
> +	} \
> +	static void __prefix ## _defio_copyarea(struct fb_info *info, \
> +						const struct fb_copyarea *area) \
> +	{ \
> +		__mode ## _copyarea(info, area); \
> +		__damage_area(info, area->dx, area->dy, area->width, area->height); \
> +	} \
> +	static void __prefix ## _defio_imageblit(struct fb_info *info, \
> +						 const struct fb_image *image) \
> +	{ \
> +		__mode ## _imageblit(info, image); \
> +		__damage_area(info, image->dx, image->dy, image->width, image->height); \
> +	}
> +
> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
> +
> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, __damage_area) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
> +	__FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
> +
> +/*
> + * Initializes struct fb_ops for deferred I/O.
> + */
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
> +	.fb_read	= __prefix ## _defio_read, \
> +	.fb_write	= __prefix ## _defio_write
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
> +	.fb_fillrect	= __prefix ## _defio_fillrect, \
> +	.fb_copyarea	= __prefix ## _defio_copyarea, \
> +	.fb_imageblit	= __prefix ## _defio_imageblit
> +
> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
> +	.fb_mmap	= fb_deferred_io_mmap
> +
> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
> +	__FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
> +	__FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
> +
>   static inline bool fb_be_math(struct fb_info *info)
>   {
>   #ifdef CONFIG_FB_FOREIGN_ENDIAN


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

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
  2023-06-14 11:29     ` Christian König
  (?)
  (?)
@ 2023-06-14 11:52       ` Thomas Zimmermann
  -1 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 11:52 UTC (permalink / raw)
  To: Christian König, daniel, airlied, maarten.lankhorst,
	mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, amd-gfx, dri-devel,
	linux-tegra, freedreno, linux-arm-kernel


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

Hi

Am 14.06.23 um 13:29 schrieb Christian König:
> 
> 
> Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
>> For framebuffers in I/O and system memory, add macros that set
>> struct fb_ops to the respective callback functions.
>>
>> For deferred I/O, add macros that generate callback functions with
>> damage handling. Add initializer macros that set struct fb_ops to
>> the generated callbacks.
>>
>> These macros can remove a lot boilerplate code from fbdev drivers.
>> The drivers are supposed to use the macro that is required for its
>> framebuffer. Each macro is split into smaller helpers, so that
>> drivers with non-standard callbacks can pick and customize callbacks
>> as needed. There are individual helper macros for read/write, mmap
>> and drawing.
>>
>> v5:
>>     * fix whitespace errors (Jingfeng)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 112 insertions(+)
>>
>> diff --git a/include/linux/fb.h b/include/linux/fb.h
>> index 2cf8efcb9e32..ce6823e157e6 100644
>> --- a/include/linux/fb.h
>> +++ b/include/linux/fb.h
>> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_io_write(struct fb_info *info, const char __user 
>> *buf,
>>                  size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in I/O memory.
>> + */
>> +
>> +#define __FB_DEFAULT_IO_OPS_RDWR \
>> +    .fb_read    = fb_io_read, \
>> +    .fb_write    = fb_io_write
>> +
>> +#define __FB_DEFAULT_IO_OPS_DRAW \
>> +    .fb_fillrect    = cfb_fillrect, \
>> +    .fb_copyarea    = cfb_copyarea, \
>> +    .fb_imageblit    = cfb_imageblit
>> +
>> +#define __FB_DEFAULT_IO_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
> 
> // style comment in a macro? That's usually a very bad idea.

I think I see it now. Thanks! That should delete any commas at the end 
of the line. I'll send out an update. It works so far, as I only used 
that macro in the correct way.

Best regards
Thomas

> 
> Christian.
> 
>> +
>> +#define FB_DEFAULT_IO_OPS \
>> +    __FB_DEFAULT_IO_OPS_RDWR, \
>> +    __FB_DEFAULT_IO_OPS_DRAW, \
>> +    __FB_DEFAULT_IO_OPS_MMAP
>> +
>>   /*
>>    * Drawing operations where framebuffer is in system RAM
>>    */
>> +
>>   extern void sys_fillrect(struct fb_info *info, const struct 
>> fb_fillrect *rect);
>>   extern void sys_copyarea(struct fb_info *info, const struct 
>> fb_copyarea *area);
>>   extern void sys_imageblit(struct fb_info *info, const struct 
>> fb_image *image);
>> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user 
>> *buf,
>>                   size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in system memory.
>> + */
>> +
>> +#define __FB_DEFAULT_SYS_OPS_RDWR \
>> +    .fb_read    = fb_sys_read, \
>> +    .fb_write    = fb_sys_write
>> +
>> +#define __FB_DEFAULT_SYS_OPS_DRAW \
>> +    .fb_fillrect    = sys_fillrect, \
>> +    .fb_copyarea    = sys_copyarea, \
>> +    .fb_imageblit    = sys_imageblit
>> +
>> +#define __FB_DEFAULT_SYS_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
>> +
>> +#define FB_DEFAULT_SYS_OPS \
>> +    __FB_DEFAULT_SYS_OPS_RDWR, \
>> +    __FB_DEFAULT_SYS_OPS_DRAW, \
>> +    __FB_DEFAULT_SYS_OPS_MMAP
>> +
>>   /* drivers/video/fbmem.c */
>>   extern int register_framebuffer(struct fb_info *fb_info);
>>   extern void unregister_framebuffer(struct fb_info *fb_info);
>> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info 
>> *info);
>>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>>                   loff_t end, int datasync);
>> +/*
>> + * Generate callbacks for deferred I/O
>> + */
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, 
>> __mode) \
>> +    static ssize_t __prefix ## _defio_read(struct fb_info *info, char 
>> __user *buf, \
>> +                           size_t count, loff_t *ppos) \
>> +    { \
>> +        return fb_ ## __mode ## _read(info, buf, count, ppos); \
>> +    } \
>> +    static ssize_t __prefix ## _defio_write(struct fb_info *info, 
>> const char __user *buf, \
>> +                        size_t count, loff_t *ppos) \
>> +    { \
>> +        unsigned long offset = *ppos; \
>> +        ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
>> +        if (ret > 0) \
>> +            __damage_range(info, offset, ret); \
>> +        return ret; \
>> +    }
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, 
>> __mode) \
>> +    static void __prefix ## _defio_fillrect(struct fb_info *info, \
>> +                        const struct fb_fillrect *rect) \
>> +    { \
>> +        __mode ## _fillrect(info, rect); \
>> +        __damage_area(info, rect->dx, rect->dy, rect->width, 
>> rect->height); \
>> +    } \
>> +    static void __prefix ## _defio_copyarea(struct fb_info *info, \
>> +                        const struct fb_copyarea *area) \
>> +    { \
>> +        __mode ## _copyarea(info, area); \
>> +        __damage_area(info, area->dx, area->dy, area->width, 
>> area->height); \
>> +    } \
>> +    static void __prefix ## _defio_imageblit(struct fb_info *info, \
>> +                         const struct fb_image *image) \
>> +    { \
>> +        __mode ## _imageblit(info, image); \
>> +        __damage_area(info, image->dx, image->dy, image->width, 
>> image->height); \
>> +    }
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
>> +
>> +/*
>> + * Initializes struct fb_ops for deferred I/O.
>> + */
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
>> +    .fb_read    = __prefix ## _defio_read, \
>> +    .fb_write    = __prefix ## _defio_write
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
>> +    .fb_fillrect    = __prefix ## _defio_fillrect, \
>> +    .fb_copyarea    = __prefix ## _defio_copyarea, \
>> +    .fb_imageblit    = __prefix ## _defio_imageblit
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
>> +    .fb_mmap    = fb_deferred_io_mmap
>> +
>> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
>> +    __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
>> +
>>   static inline bool fb_be_math(struct fb_info *info)
>>   {
>>   #ifdef CONFIG_FB_FOREIGN_ENDIAN
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:52       ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 11:52 UTC (permalink / raw)
  To: Christian König, daniel, airlied, maarten.lankhorst,
	mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, amd-gfx, dri-devel,
	linux-tegra, freedreno, linux-arm-kernel


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

Hi

Am 14.06.23 um 13:29 schrieb Christian König:
> 
> 
> Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
>> For framebuffers in I/O and system memory, add macros that set
>> struct fb_ops to the respective callback functions.
>>
>> For deferred I/O, add macros that generate callback functions with
>> damage handling. Add initializer macros that set struct fb_ops to
>> the generated callbacks.
>>
>> These macros can remove a lot boilerplate code from fbdev drivers.
>> The drivers are supposed to use the macro that is required for its
>> framebuffer. Each macro is split into smaller helpers, so that
>> drivers with non-standard callbacks can pick and customize callbacks
>> as needed. There are individual helper macros for read/write, mmap
>> and drawing.
>>
>> v5:
>>     * fix whitespace errors (Jingfeng)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 112 insertions(+)
>>
>> diff --git a/include/linux/fb.h b/include/linux/fb.h
>> index 2cf8efcb9e32..ce6823e157e6 100644
>> --- a/include/linux/fb.h
>> +++ b/include/linux/fb.h
>> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_io_write(struct fb_info *info, const char __user 
>> *buf,
>>                  size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in I/O memory.
>> + */
>> +
>> +#define __FB_DEFAULT_IO_OPS_RDWR \
>> +    .fb_read    = fb_io_read, \
>> +    .fb_write    = fb_io_write
>> +
>> +#define __FB_DEFAULT_IO_OPS_DRAW \
>> +    .fb_fillrect    = cfb_fillrect, \
>> +    .fb_copyarea    = cfb_copyarea, \
>> +    .fb_imageblit    = cfb_imageblit
>> +
>> +#define __FB_DEFAULT_IO_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
> 
> // style comment in a macro? That's usually a very bad idea.

I think I see it now. Thanks! That should delete any commas at the end 
of the line. I'll send out an update. It works so far, as I only used 
that macro in the correct way.

Best regards
Thomas

> 
> Christian.
> 
>> +
>> +#define FB_DEFAULT_IO_OPS \
>> +    __FB_DEFAULT_IO_OPS_RDWR, \
>> +    __FB_DEFAULT_IO_OPS_DRAW, \
>> +    __FB_DEFAULT_IO_OPS_MMAP
>> +
>>   /*
>>    * Drawing operations where framebuffer is in system RAM
>>    */
>> +
>>   extern void sys_fillrect(struct fb_info *info, const struct 
>> fb_fillrect *rect);
>>   extern void sys_copyarea(struct fb_info *info, const struct 
>> fb_copyarea *area);
>>   extern void sys_imageblit(struct fb_info *info, const struct 
>> fb_image *image);
>> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user 
>> *buf,
>>                   size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in system memory.
>> + */
>> +
>> +#define __FB_DEFAULT_SYS_OPS_RDWR \
>> +    .fb_read    = fb_sys_read, \
>> +    .fb_write    = fb_sys_write
>> +
>> +#define __FB_DEFAULT_SYS_OPS_DRAW \
>> +    .fb_fillrect    = sys_fillrect, \
>> +    .fb_copyarea    = sys_copyarea, \
>> +    .fb_imageblit    = sys_imageblit
>> +
>> +#define __FB_DEFAULT_SYS_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
>> +
>> +#define FB_DEFAULT_SYS_OPS \
>> +    __FB_DEFAULT_SYS_OPS_RDWR, \
>> +    __FB_DEFAULT_SYS_OPS_DRAW, \
>> +    __FB_DEFAULT_SYS_OPS_MMAP
>> +
>>   /* drivers/video/fbmem.c */
>>   extern int register_framebuffer(struct fb_info *fb_info);
>>   extern void unregister_framebuffer(struct fb_info *fb_info);
>> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info 
>> *info);
>>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>>                   loff_t end, int datasync);
>> +/*
>> + * Generate callbacks for deferred I/O
>> + */
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, 
>> __mode) \
>> +    static ssize_t __prefix ## _defio_read(struct fb_info *info, char 
>> __user *buf, \
>> +                           size_t count, loff_t *ppos) \
>> +    { \
>> +        return fb_ ## __mode ## _read(info, buf, count, ppos); \
>> +    } \
>> +    static ssize_t __prefix ## _defio_write(struct fb_info *info, 
>> const char __user *buf, \
>> +                        size_t count, loff_t *ppos) \
>> +    { \
>> +        unsigned long offset = *ppos; \
>> +        ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
>> +        if (ret > 0) \
>> +            __damage_range(info, offset, ret); \
>> +        return ret; \
>> +    }
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, 
>> __mode) \
>> +    static void __prefix ## _defio_fillrect(struct fb_info *info, \
>> +                        const struct fb_fillrect *rect) \
>> +    { \
>> +        __mode ## _fillrect(info, rect); \
>> +        __damage_area(info, rect->dx, rect->dy, rect->width, 
>> rect->height); \
>> +    } \
>> +    static void __prefix ## _defio_copyarea(struct fb_info *info, \
>> +                        const struct fb_copyarea *area) \
>> +    { \
>> +        __mode ## _copyarea(info, area); \
>> +        __damage_area(info, area->dx, area->dy, area->width, 
>> area->height); \
>> +    } \
>> +    static void __prefix ## _defio_imageblit(struct fb_info *info, \
>> +                         const struct fb_image *image) \
>> +    { \
>> +        __mode ## _imageblit(info, image); \
>> +        __damage_area(info, image->dx, image->dy, image->width, 
>> image->height); \
>> +    }
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
>> +
>> +/*
>> + * Initializes struct fb_ops for deferred I/O.
>> + */
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
>> +    .fb_read    = __prefix ## _defio_read, \
>> +    .fb_write    = __prefix ## _defio_write
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
>> +    .fb_fillrect    = __prefix ## _defio_fillrect, \
>> +    .fb_copyarea    = __prefix ## _defio_copyarea, \
>> +    .fb_imageblit    = __prefix ## _defio_imageblit
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
>> +    .fb_mmap    = fb_deferred_io_mmap
>> +
>> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
>> +    __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
>> +
>>   static inline bool fb_be_math(struct fb_info *info)
>>   {
>>   #ifdef CONFIG_FB_FOREIGN_ENDIAN
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

_______________________________________________
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] 86+ messages in thread

* Re: [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:52       ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 11:52 UTC (permalink / raw)
  To: Christian König, daniel, airlied, maarten.lankhorst,
	mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel


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

Hi

Am 14.06.23 um 13:29 schrieb Christian König:
> 
> 
> Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
>> For framebuffers in I/O and system memory, add macros that set
>> struct fb_ops to the respective callback functions.
>>
>> For deferred I/O, add macros that generate callback functions with
>> damage handling. Add initializer macros that set struct fb_ops to
>> the generated callbacks.
>>
>> These macros can remove a lot boilerplate code from fbdev drivers.
>> The drivers are supposed to use the macro that is required for its
>> framebuffer. Each macro is split into smaller helpers, so that
>> drivers with non-standard callbacks can pick and customize callbacks
>> as needed. There are individual helper macros for read/write, mmap
>> and drawing.
>>
>> v5:
>>     * fix whitespace errors (Jingfeng)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 112 insertions(+)
>>
>> diff --git a/include/linux/fb.h b/include/linux/fb.h
>> index 2cf8efcb9e32..ce6823e157e6 100644
>> --- a/include/linux/fb.h
>> +++ b/include/linux/fb.h
>> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_io_write(struct fb_info *info, const char __user 
>> *buf,
>>                  size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in I/O memory.
>> + */
>> +
>> +#define __FB_DEFAULT_IO_OPS_RDWR \
>> +    .fb_read    = fb_io_read, \
>> +    .fb_write    = fb_io_write
>> +
>> +#define __FB_DEFAULT_IO_OPS_DRAW \
>> +    .fb_fillrect    = cfb_fillrect, \
>> +    .fb_copyarea    = cfb_copyarea, \
>> +    .fb_imageblit    = cfb_imageblit
>> +
>> +#define __FB_DEFAULT_IO_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
> 
> // style comment in a macro? That's usually a very bad idea.

I think I see it now. Thanks! That should delete any commas at the end 
of the line. I'll send out an update. It works so far, as I only used 
that macro in the correct way.

Best regards
Thomas

> 
> Christian.
> 
>> +
>> +#define FB_DEFAULT_IO_OPS \
>> +    __FB_DEFAULT_IO_OPS_RDWR, \
>> +    __FB_DEFAULT_IO_OPS_DRAW, \
>> +    __FB_DEFAULT_IO_OPS_MMAP
>> +
>>   /*
>>    * Drawing operations where framebuffer is in system RAM
>>    */
>> +
>>   extern void sys_fillrect(struct fb_info *info, const struct 
>> fb_fillrect *rect);
>>   extern void sys_copyarea(struct fb_info *info, const struct 
>> fb_copyarea *area);
>>   extern void sys_imageblit(struct fb_info *info, const struct 
>> fb_image *image);
>> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user 
>> *buf,
>>                   size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in system memory.
>> + */
>> +
>> +#define __FB_DEFAULT_SYS_OPS_RDWR \
>> +    .fb_read    = fb_sys_read, \
>> +    .fb_write    = fb_sys_write
>> +
>> +#define __FB_DEFAULT_SYS_OPS_DRAW \
>> +    .fb_fillrect    = sys_fillrect, \
>> +    .fb_copyarea    = sys_copyarea, \
>> +    .fb_imageblit    = sys_imageblit
>> +
>> +#define __FB_DEFAULT_SYS_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
>> +
>> +#define FB_DEFAULT_SYS_OPS \
>> +    __FB_DEFAULT_SYS_OPS_RDWR, \
>> +    __FB_DEFAULT_SYS_OPS_DRAW, \
>> +    __FB_DEFAULT_SYS_OPS_MMAP
>> +
>>   /* drivers/video/fbmem.c */
>>   extern int register_framebuffer(struct fb_info *fb_info);
>>   extern void unregister_framebuffer(struct fb_info *fb_info);
>> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info 
>> *info);
>>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>>                   loff_t end, int datasync);
>> +/*
>> + * Generate callbacks for deferred I/O
>> + */
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, 
>> __mode) \
>> +    static ssize_t __prefix ## _defio_read(struct fb_info *info, char 
>> __user *buf, \
>> +                           size_t count, loff_t *ppos) \
>> +    { \
>> +        return fb_ ## __mode ## _read(info, buf, count, ppos); \
>> +    } \
>> +    static ssize_t __prefix ## _defio_write(struct fb_info *info, 
>> const char __user *buf, \
>> +                        size_t count, loff_t *ppos) \
>> +    { \
>> +        unsigned long offset = *ppos; \
>> +        ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
>> +        if (ret > 0) \
>> +            __damage_range(info, offset, ret); \
>> +        return ret; \
>> +    }
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, 
>> __mode) \
>> +    static void __prefix ## _defio_fillrect(struct fb_info *info, \
>> +                        const struct fb_fillrect *rect) \
>> +    { \
>> +        __mode ## _fillrect(info, rect); \
>> +        __damage_area(info, rect->dx, rect->dy, rect->width, 
>> rect->height); \
>> +    } \
>> +    static void __prefix ## _defio_copyarea(struct fb_info *info, \
>> +                        const struct fb_copyarea *area) \
>> +    { \
>> +        __mode ## _copyarea(info, area); \
>> +        __damage_area(info, area->dx, area->dy, area->width, 
>> area->height); \
>> +    } \
>> +    static void __prefix ## _defio_imageblit(struct fb_info *info, \
>> +                         const struct fb_image *image) \
>> +    { \
>> +        __mode ## _imageblit(info, image); \
>> +        __damage_area(info, image->dx, image->dy, image->width, 
>> image->height); \
>> +    }
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
>> +
>> +/*
>> + * Initializes struct fb_ops for deferred I/O.
>> + */
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
>> +    .fb_read    = __prefix ## _defio_read, \
>> +    .fb_write    = __prefix ## _defio_write
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
>> +    .fb_fillrect    = __prefix ## _defio_fillrect, \
>> +    .fb_copyarea    = __prefix ## _defio_copyarea, \
>> +    .fb_imageblit    = __prefix ## _defio_imageblit
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
>> +    .fb_mmap    = fb_deferred_io_mmap
>> +
>> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
>> +    __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
>> +
>>   static inline bool fb_be_math(struct fb_info *info)
>>   {
>>   #ifdef CONFIG_FB_FOREIGN_ENDIAN
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

* Re: [Intel-gfx] [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops
@ 2023-06-14 11:52       ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-06-14 11:52 UTC (permalink / raw)
  To: Christian König, daniel, airlied, maarten.lankhorst,
	mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, dri-devel, amd-gfx,
	linux-tegra, freedreno, linux-arm-kernel


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

Hi

Am 14.06.23 um 13:29 schrieb Christian König:
> 
> 
> Am 30.05.23 um 17:02 schrieb Thomas Zimmermann:
>> For framebuffers in I/O and system memory, add macros that set
>> struct fb_ops to the respective callback functions.
>>
>> For deferred I/O, add macros that generate callback functions with
>> damage handling. Add initializer macros that set struct fb_ops to
>> the generated callbacks.
>>
>> These macros can remove a lot boilerplate code from fbdev drivers.
>> The drivers are supposed to use the macro that is required for its
>> framebuffer. Each macro is split into smaller helpers, so that
>> drivers with non-standard callbacks can pick and customize callbacks
>> as needed. There are individual helper macros for read/write, mmap
>> and drawing.
>>
>> v5:
>>     * fix whitespace errors (Jingfeng)
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
>> ---
>>   include/linux/fb.h | 112 +++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 112 insertions(+)
>>
>> diff --git a/include/linux/fb.h b/include/linux/fb.h
>> index 2cf8efcb9e32..ce6823e157e6 100644
>> --- a/include/linux/fb.h
>> +++ b/include/linux/fb.h
>> @@ -538,9 +538,31 @@ extern ssize_t fb_io_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_io_write(struct fb_info *info, const char __user 
>> *buf,
>>                  size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in I/O memory.
>> + */
>> +
>> +#define __FB_DEFAULT_IO_OPS_RDWR \
>> +    .fb_read    = fb_io_read, \
>> +    .fb_write    = fb_io_write
>> +
>> +#define __FB_DEFAULT_IO_OPS_DRAW \
>> +    .fb_fillrect    = cfb_fillrect, \
>> +    .fb_copyarea    = cfb_copyarea, \
>> +    .fb_imageblit    = cfb_imageblit
>> +
>> +#define __FB_DEFAULT_IO_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
> 
> // style comment in a macro? That's usually a very bad idea.

I think I see it now. Thanks! That should delete any commas at the end 
of the line. I'll send out an update. It works so far, as I only used 
that macro in the correct way.

Best regards
Thomas

> 
> Christian.
> 
>> +
>> +#define FB_DEFAULT_IO_OPS \
>> +    __FB_DEFAULT_IO_OPS_RDWR, \
>> +    __FB_DEFAULT_IO_OPS_DRAW, \
>> +    __FB_DEFAULT_IO_OPS_MMAP
>> +
>>   /*
>>    * Drawing operations where framebuffer is in system RAM
>>    */
>> +
>>   extern void sys_fillrect(struct fb_info *info, const struct 
>> fb_fillrect *rect);
>>   extern void sys_copyarea(struct fb_info *info, const struct 
>> fb_copyarea *area);
>>   extern void sys_imageblit(struct fb_info *info, const struct 
>> fb_image *image);
>> @@ -549,6 +571,27 @@ extern ssize_t fb_sys_read(struct fb_info *info, 
>> char __user *buf,
>>   extern ssize_t fb_sys_write(struct fb_info *info, const char __user 
>> *buf,
>>                   size_t count, loff_t *ppos);
>> +/*
>> + * Initializes struct fb_ops for framebuffers in system memory.
>> + */
>> +
>> +#define __FB_DEFAULT_SYS_OPS_RDWR \
>> +    .fb_read    = fb_sys_read, \
>> +    .fb_write    = fb_sys_write
>> +
>> +#define __FB_DEFAULT_SYS_OPS_DRAW \
>> +    .fb_fillrect    = sys_fillrect, \
>> +    .fb_copyarea    = sys_copyarea, \
>> +    .fb_imageblit    = sys_imageblit
>> +
>> +#define __FB_DEFAULT_SYS_OPS_MMAP \
>> +    .fb_mmap    = NULL // default implementation
>> +
>> +#define FB_DEFAULT_SYS_OPS \
>> +    __FB_DEFAULT_SYS_OPS_RDWR, \
>> +    __FB_DEFAULT_SYS_OPS_DRAW, \
>> +    __FB_DEFAULT_SYS_OPS_MMAP
>> +
>>   /* drivers/video/fbmem.c */
>>   extern int register_framebuffer(struct fb_info *fb_info);
>>   extern void unregister_framebuffer(struct fb_info *fb_info);
>> @@ -604,6 +647,75 @@ extern void fb_deferred_io_cleanup(struct fb_info 
>> *info);
>>   extern int fb_deferred_io_fsync(struct file *file, loff_t start,
>>                   loff_t end, int datasync);
>> +/*
>> + * Generate callbacks for deferred I/O
>> + */
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, 
>> __mode) \
>> +    static ssize_t __prefix ## _defio_read(struct fb_info *info, char 
>> __user *buf, \
>> +                           size_t count, loff_t *ppos) \
>> +    { \
>> +        return fb_ ## __mode ## _read(info, buf, count, ppos); \
>> +    } \
>> +    static ssize_t __prefix ## _defio_write(struct fb_info *info, 
>> const char __user *buf, \
>> +                        size_t count, loff_t *ppos) \
>> +    { \
>> +        unsigned long offset = *ppos; \
>> +        ssize_t ret = fb_ ## __mode ## _write(info, buf, count, ppos); \
>> +        if (ret > 0) \
>> +            __damage_range(info, offset, ret); \
>> +        return ret; \
>> +    }
>> +
>> +#define __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, 
>> __mode) \
>> +    static void __prefix ## _defio_fillrect(struct fb_info *info, \
>> +                        const struct fb_fillrect *rect) \
>> +    { \
>> +        __mode ## _fillrect(info, rect); \
>> +        __damage_area(info, rect->dx, rect->dy, rect->width, 
>> rect->height); \
>> +    } \
>> +    static void __prefix ## _defio_copyarea(struct fb_info *info, \
>> +                        const struct fb_copyarea *area) \
>> +    { \
>> +        __mode ## _copyarea(info, area); \
>> +        __damage_area(info, area->dx, area->dy, area->width, 
>> area->height); \
>> +    } \
>> +    static void __prefix ## _defio_imageblit(struct fb_info *info, \
>> +                         const struct fb_image *image) \
>> +    { \
>> +        __mode ## _imageblit(info, image); \
>> +        __damage_area(info, image->dx, image->dy, image->width, 
>> image->height); \
>> +    }
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_IO_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, io) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, cfb)
>> +
>> +#define FB_GEN_DEFAULT_DEFERRED_SYS_OPS(__prefix, __damage_range, 
>> __damage_area) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_RDWR(__prefix, __damage_range, sys) \
>> +    __FB_GEN_DEFAULT_DEFERRED_OPS_DRAW(__prefix, __damage_area, sys)
>> +
>> +/*
>> + * Initializes struct fb_ops for deferred I/O.
>> + */
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix) \
>> +    .fb_read    = __prefix ## _defio_read, \
>> +    .fb_write    = __prefix ## _defio_write
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix) \
>> +    .fb_fillrect    = __prefix ## _defio_fillrect, \
>> +    .fb_copyarea    = __prefix ## _defio_copyarea, \
>> +    .fb_imageblit    = __prefix ## _defio_imageblit
>> +
>> +#define __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix) \
>> +    .fb_mmap    = fb_deferred_io_mmap
>> +
>> +#define FB_DEFAULT_DEFERRED_OPS(__prefix) \
>> +    __FB_DEFAULT_DEFERRED_OPS_RDWR(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_DRAW(__prefix), \
>> +    __FB_DEFAULT_DEFERRED_OPS_MMAP(__prefix)
>> +
>>   static inline bool fb_be_math(struct fb_info *info)
>>   {
>>   #ifdef CONFIG_FB_FOREIGN_ENDIAN
> 

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)

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

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

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
  2023-05-30 15:12 [PATCH v5 00/13] drm/fbdev: Remove DRM's helpers for fbdev I/O Thomas Zimmermann
  2023-05-30 15:12   ` Thomas Zimmermann
@ 2023-05-30 15:12   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:12 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Russell King

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
@ 2023-05-30 15:12   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:12 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: dri-devel, linux-arm-kernel, linux-samsung-soc, intel-gfx,
	linux-arm-msm, freedreno, amd-gfx, linux-tegra,
	Thomas Zimmermann, Russell King

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


_______________________________________________
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] 86+ messages in thread

* [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers
@ 2023-05-30 15:12   ` Thomas Zimmermann
  0 siblings, 0 replies; 86+ messages in thread
From: Thomas Zimmermann @ 2023-05-30 15:12 UTC (permalink / raw)
  To: daniel, airlied, maarten.lankhorst, mripard, javierm, sam, suijingfeng
  Cc: linux-samsung-soc, linux-arm-msm, intel-gfx, Russell King,
	dri-devel, amd-gfx, Thomas Zimmermann, linux-tegra, freedreno,
	linux-arm-kernel

Use the regular fbdev helpers for framebuffer I/O instead of DRM's
helpers. Armada does not use damage handling, so DRM's fbdev helpers
are mere wrappers around the fbdev code.

By using fbdev helpers directly within each DRM fbdev emulation,
we can eventually remove DRM's wrapper functions entirely.

v4:
	* use initializer macros for struct fb_ops
v2:
	* use FB_IO_HELPERS option

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Russell King <linux@armlinux.org.uk>
---
 drivers/gpu/drm/armada/Kconfig        | 1 +
 drivers/gpu/drm/armada/armada_fbdev.c | 7 ++-----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/armada/Kconfig b/drivers/gpu/drm/armada/Kconfig
index f5c66d89ba99..5afade25e217 100644
--- a/drivers/gpu/drm/armada/Kconfig
+++ b/drivers/gpu/drm/armada/Kconfig
@@ -3,6 +3,7 @@ config DRM_ARMADA
 	tristate "DRM support for Marvell Armada SoCs"
 	depends on DRM && HAVE_CLK && ARM && MMU
 	select DRM_KMS_HELPER
+	select FB_IO_HELPERS if DRM_FBDEV_EMULATION
 	help
 	  Support the "LCD" controllers found on the Marvell Armada 510
 	  devices.  There are two controllers on the device, each controller
diff --git a/drivers/gpu/drm/armada/armada_fbdev.c b/drivers/gpu/drm/armada/armada_fbdev.c
index 0a5fd1aa86eb..3943e89cc06c 100644
--- a/drivers/gpu/drm/armada/armada_fbdev.c
+++ b/drivers/gpu/drm/armada/armada_fbdev.c
@@ -5,6 +5,7 @@
  */
 
 #include <linux/errno.h>
+#include <linux/fb.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -33,12 +34,8 @@ static void armada_fbdev_fb_destroy(struct fb_info *info)
 
 static const struct fb_ops armada_fb_ops = {
 	.owner		= THIS_MODULE,
+	FB_DEFAULT_IO_OPS,
 	DRM_FB_HELPER_DEFAULT_OPS,
-	.fb_read	= drm_fb_helper_cfb_read,
-	.fb_write	= drm_fb_helper_cfb_write,
-	.fb_fillrect	= drm_fb_helper_cfb_fillrect,
-	.fb_copyarea	= drm_fb_helper_cfb_copyarea,
-	.fb_imageblit	= drm_fb_helper_cfb_imageblit,
 	.fb_destroy	= armada_fbdev_fb_destroy,
 };
 
-- 
2.40.1


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

end of thread, other threads:[~2023-06-20 18:28 UTC | newest]

Thread overview: 86+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-30 15:02 [PATCH v5 00/13] Thomas Zimmermann
2023-05-30 15:02 ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02 ` Thomas Zimmermann
2023-05-30 15:02 ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 01/13] fbdev: Add Kconfig options to select different fb_ops helpers Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 02/13] fbdev: Add initializer macros for struct fb_ops Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-06-14 11:29   ` Christian König
2023-06-14 11:29     ` [Intel-gfx] " Christian König
2023-06-14 11:29     ` Christian König
2023-06-14 11:29     ` Christian König
2023-06-14 11:52     ` Thomas Zimmermann
2023-06-14 11:52       ` [Intel-gfx] " Thomas Zimmermann
2023-06-14 11:52       ` Thomas Zimmermann
2023-06-14 11:52       ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 04/13] drm/exynos: " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 05/13] drm/gma500: " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 06/13] drm/radeon: " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 07/13] drm/fbdev-dma: " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 08/13] drm/omapdrm: " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-31  8:20   ` Tomi Valkeinen
2023-05-31  8:20     ` [Intel-gfx] " Tomi Valkeinen
2023-05-31  8:20     ` Tomi Valkeinen
2023-05-31  8:20     ` Tomi Valkeinen
2023-05-30 15:02 ` [PATCH v5 09/13] drm/tegra: " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 10/13] drm/fb-helper: Export helpers for marking damage areas Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 11/13] drm/msm: Use regular fbdev I/O helpers Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-06-01 16:24   ` Abhinav Kumar
2023-06-01 16:24     ` Abhinav Kumar
2023-06-01 16:24     ` [Intel-gfx] " Abhinav Kumar
2023-06-01 16:24     ` Abhinav Kumar
2023-06-01 16:24     ` Abhinav Kumar
2023-05-30 15:02 ` [PATCH v5 12/13] drm/fbdev-generic: Implement dedicated " Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02 ` [PATCH v5 13/13] drm/i915: " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` [Intel-gfx] " Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-30 15:02   ` Thomas Zimmermann
2023-05-31  7:12 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [v5,01/13] fbdev: Add Kconfig options to select different fb_ops helpers Patchwork
2023-05-31  7:19   ` Thomas Zimmermann
2023-05-31  7:12 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2023-05-31  7:20   ` Thomas Zimmermann
2023-05-31  7:31 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2023-06-01 13:42 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2023-05-30 15:12 [PATCH v5 00/13] drm/fbdev: Remove DRM's helpers for fbdev I/O Thomas Zimmermann
2023-05-30 15:12 ` [PATCH v5 03/13] drm/armada: Use regular fbdev I/O helpers Thomas Zimmermann
2023-05-30 15:12   ` Thomas Zimmermann
2023-05-30 15:12   ` Thomas Zimmermann

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.