* [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers
@ 2023-07-06 12:46 Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 01/11] fbdev: Add fb_ops init macros for framebuffers in DMA-able memory Thomas Zimmermann
` (10 more replies)
0 siblings, 11 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Add fbdev helpers for framebuffers in DMA-able memory and update
fbdev emulation in the respective DRM drivers. DMA memory used to
handled as system memory. Improve this and prepare for possible
future changes.
Patch 1 adds initializer macros for struct fb_ops and a Kconfig
token for framebuffers in DMA memory.
Patches 2 to 4 update fbdev-dma and tegra. No functional changes
are expected as both used system memory before.
Patches 5 and 6 update exynos to use DMA helpers. Exynos incorrectly
used fbdev's I/O-memory helpers. Fix this.
Patches 7 to 9 update omapdrm to use DMA helpers. Patch 7 first
reworks the driver's mmap to current best practices. This also makes
it suitable for use with fbdev, which patches 8 and 9 implement.
Patchies 10 removes some fbdev macros for system memory that are now
unused; patch 11 fixes some comments.
The patchset would ideally go through drm-misc-next. Future patches
can build upon it and update fbdev drivers in similar ways.
v2:
* fix omap mmap flags
* drop FBINFO_DEFAULT from patches
* minor cleanups
Thomas Zimmermann (11):
fbdev: Add fb_ops init macros for framebuffers in DMA-able memory
drm/fbdev-dma: Use fbdev DMA helpers
drm/tegra: Use fbdev DMA helpers
drm/tegra: Set fbdev FBINFO_VIRTFB flag
drm/exynos: Use fbdev DMA helpers
drm/exynos: Set fbdev FBINFO_VIRTFB flag
drm/omapdrm: Set VM flags in GEM-object mmap function
drm/omapdrm: Use GEM mmap for fbdev emulation
drm/omapdrm: Set fbdev FBINFO_VIRTFB flag
fbdev: Remove FB_DEFAULT_SYS_OPS
fbdev: Harmonize some comments in <linux/fb.h>
drivers/gpu/drm/Kconfig | 2 +-
drivers/gpu/drm/drm_fbdev_dma.c | 4 ++--
drivers/gpu/drm/exynos/Kconfig | 2 +-
drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 5 ++--
drivers/gpu/drm/omapdrm/Kconfig | 2 +-
drivers/gpu/drm/omapdrm/omap_drv.c | 12 +---------
drivers/gpu/drm/omapdrm/omap_fbdev.c | 16 +++++++++++--
drivers/gpu/drm/omapdrm/omap_gem.c | 24 +++++--------------
drivers/gpu/drm/omapdrm/omap_gem.h | 3 ---
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 7 +-----
drivers/gpu/drm/tegra/Kconfig | 2 +-
drivers/gpu/drm/tegra/fbdev.c | 5 ++--
drivers/video/fbdev/Kconfig | 8 +++++++
include/linux/fb.h | 29 ++++++++++-------------
14 files changed, 55 insertions(+), 66 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 01/11] fbdev: Add fb_ops init macros for framebuffers in DMA-able memory
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 02/11] drm/fbdev-dma: Use fbdev DMA helpers Thomas Zimmermann
` (9 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Helge Deller, dri-devel,
Thomas Zimmermann, linux-tegra, linux-arm-kernel
Add initializer macros for struct fb_ops for framebuffers in DMA-able
memory areas. Also add a corresponding Kconfig token. As of now, this
is equivalent to system framebuffers and mostly useful for labeling
drivers correctly.
A later patch may add a generic DMA-specific mmap operation. Linux
offers a number of dma_mmap_*() helpers for different use cases.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Helge Deller <deller@gmx.de>
---
drivers/video/fbdev/Kconfig | 8 ++++++++
include/linux/fb.h | 13 +++++++++++++
2 files changed, 21 insertions(+)
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index cecf15418632..f14229757311 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -168,6 +168,14 @@ config FB_DEFERRED_IO
bool
depends on FB
+config FB_DMA_HELPERS
+ bool
+ depends on FB
+ select FB_SYS_COPYAREA
+ select FB_SYS_FILLRECT
+ select FB_SYS_FOPS
+ select FB_SYS_IMAGEBLIT
+
config FB_IO_HELPERS
bool
depends on FB
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 1d5c13f34b09..1191a78c5289 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -594,6 +594,19 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
__FB_DEFAULT_SYS_OPS_DRAW, \
__FB_DEFAULT_SYS_OPS_MMAP
+/*
+ * Helpers for framebuffers in DMA-able memory
+ */
+
+#define __FB_DEFAULT_DMA_OPS_RDWR \
+ .fb_read = fb_sys_read, \
+ .fb_write = fb_sys_write
+
+#define __FB_DEFAULT_DMA_OPS_DRAW \
+ .fb_fillrect = sys_fillrect, \
+ .fb_copyarea = sys_copyarea, \
+ .fb_imageblit = sys_imageblit
+
/* drivers/video/fbmem.c */
extern int register_framebuffer(struct fb_info *fb_info);
extern void unregister_framebuffer(struct fb_info *fb_info);
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 02/11] drm/fbdev-dma: Use fbdev DMA helpers
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 01/11] fbdev: Add fb_ops init macros for framebuffers in DMA-able memory Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 03/11] drm/tegra: " Thomas Zimmermann
` (8 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Use fbdev's DMA helpers for fbdev-dma. They are equivalent to the
previously used system-memory helpers, so no functional changes here.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/Kconfig | 2 +-
drivers/gpu/drm/drm_fbdev_dma.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index afb3b2f5f425..da3aa0625c36 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -216,7 +216,7 @@ config DRM_TTM_HELPER
config DRM_GEM_DMA_HELPER
tristate
depends on DRM
- select FB_SYS_HELPERS if DRM_FBDEV_EMULATION
+ select FB_DMA_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 8217f1ddc007..040c229a1737 100644
--- a/drivers/gpu/drm/drm_fbdev_dma.c
+++ b/drivers/gpu/drm/drm_fbdev_dma.c
@@ -62,9 +62,9 @@ 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_DEFAULT_SYS_OPS_RDWR,
+ __FB_DEFAULT_DMA_OPS_RDWR,
DRM_FB_HELPER_DEFAULT_OPS,
- __FB_DEFAULT_SYS_OPS_DRAW,
+ __FB_DEFAULT_DMA_OPS_DRAW,
.fb_mmap = drm_fbdev_dma_fb_mmap,
.fb_destroy = drm_fbdev_dma_fb_destroy,
};
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 03/11] drm/tegra: Use fbdev DMA helpers
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 01/11] fbdev: Add fb_ops init macros for framebuffers in DMA-able memory Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 02/11] drm/fbdev-dma: Use fbdev DMA helpers Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
` (7 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Mikko Perttunen,
Thierry Reding, Thomas Zimmermann, linux-tegra, linux-arm-kernel
Use fbdev's DMA helpers for fbdev emulation. They are equivalent to the
previously used system-memory helpers, so no functional changes here.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
---
drivers/gpu/drm/tegra/Kconfig | 2 +-
drivers/gpu/drm/tegra/fbdev.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/tegra/Kconfig b/drivers/gpu/drm/tegra/Kconfig
index 498313778175..39452c8480c1 100644
--- a/drivers/gpu/drm/tegra/Kconfig
+++ b/drivers/gpu/drm/tegra/Kconfig
@@ -12,7 +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 FB_DMA_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 e74d9be981c7..82577b7c88da 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -59,9 +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,
+ __FB_DEFAULT_DMA_OPS_RDWR,
DRM_FB_HELPER_DEFAULT_OPS,
- __FB_DEFAULT_SYS_OPS_DRAW,
+ __FB_DEFAULT_DMA_OPS_DRAW,
.fb_mmap = tegra_fb_mmap,
.fb_destroy = tegra_fbdev_fb_destroy,
};
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (2 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 03/11] drm/tegra: " Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 14:31 ` Thierry Reding
2023-07-06 12:46 ` [PATCH v2 05/11] drm/exynos: Use fbdev DMA helpers Thomas Zimmermann
` (6 subsequent siblings)
10 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Mikko Perttunen,
Thierry Reding, Thomas Zimmermann, linux-tegra, linux-arm-kernel
Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
in DMA-able memory and should be accessed with the CPU's regular
memory ops.
v2:
* drop FBINFO_DEFAULT
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
---
drivers/gpu/drm/tegra/fbdev.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
index 82577b7c88da..d8460c5dc91e 100644
--- a/drivers/gpu/drm/tegra/fbdev.c
+++ b/drivers/gpu/drm/tegra/fbdev.c
@@ -132,6 +132,7 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
}
}
+ info->flags |= FBINFO_VIRTFB;
info->screen_base = (void __iomem *)bo->vaddr + offset;
info->screen_size = size;
info->fix.smem_start = (unsigned long)(bo->iova + offset);
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 05/11] drm/exynos: Use fbdev DMA helpers
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (3 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
` (5 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Alim Akhtar, Seung-Woo Kim,
Krzysztof Kozlowski, dri-devel, Kyungmin Park, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Use fbdev's DMA helpers for fbdev emulation. The driver previously
used the I/O-memory helpers, while allocating DMA-able system memory.
This could (in theory) result in bus errors from accessing the memory
range.
This bug has been present since the exynos driver was first added.
v2:
* drop the pointless Fixes tag (Javier)
* fix typo in commit message
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Inki Dae <inki.dae@samsung.com>
Acked-by: Maxime Ripard <mripard@kernel.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 | 2 +-
drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig
index 7ca7e1dab52c..661b42ad4873 100644
--- a/drivers/gpu/drm/exynos/Kconfig
+++ b/drivers/gpu/drm/exynos/Kconfig
@@ -7,7 +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 FB_DMA_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 fdf65587f1fe..7ca3424b59ce 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -49,9 +49,9 @@ 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,
+ __FB_DEFAULT_DMA_OPS_RDWR,
DRM_FB_HELPER_DEFAULT_OPS,
- __FB_DEFAULT_IO_OPS_DRAW,
+ __FB_DEFAULT_DMA_OPS_DRAW,
.fb_mmap = exynos_drm_fb_mmap,
.fb_destroy = exynos_drm_fb_destroy,
};
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (4 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 05/11] drm/exynos: Use fbdev DMA helpers Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-07 2:01 ` 대인기/Tizen Platform Lab(SR)/삼성전자
2023-07-06 12:46 ` [PATCH v2 07/11] drm/omapdrm: Set VM flags in GEM-object mmap function Thomas Zimmermann
` (4 subsequent siblings)
10 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Alim Akhtar, Seung-Woo Kim,
Krzysztof Kozlowski, dri-devel, Kyungmin Park, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
in DMA-able memory and should be accessed with the CPU's regular
memory ops.
v2:
* drop FBINFO_FLAG_DEFAULT
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.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/exynos_drm_fbdev.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 7ca3424b59ce..828318de8529 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -79,6 +79,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
offset = fbi->var.xoffset * fb->format->cpp[0];
offset += fbi->var.yoffset * fb->pitches[0];
+ fbi->flags |= FBINFO_VIRTFB;
fbi->screen_buffer = exynos_gem->kvaddr + offset;
fbi->screen_size = size;
fbi->fix.smem_len = size;
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 07/11] drm/omapdrm: Set VM flags in GEM-object mmap function
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (5 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 08/11] drm/omapdrm: Use GEM mmap for fbdev emulation Thomas Zimmermann
` (3 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Tomi Valkeinen, dri-devel,
Thomas Zimmermann, linux-tegra, linux-arm-kernel
Use the mmap callback in struct drm_gem_object_funcs to set the
VM flags. Replace a number of mmap helpers in omapdrm with their
GEM helper counterparts. Generate DRM's file-operations instance
with GEM's DEFINE_DRM_GEM_FOPS.
The omapdrm driver uses DRM's drm_gem_mmap() helper to prepare
the VMA structure. It then modifies the resulting VMA state in
its own helper omap_gem_mmap_obj(). The patch improves this by
setting up the VMA in the mmap callback in drm_gem_object_funcs,
which is called from within drm_gem_mmap().
Omapdrm's omap_gem_mmap() and omap_gem_mmap() can then be removed
from the driver. A call to drm_gem_mmap() is sufficient for the
mmap operation.
Finally, with the omap functions gone, the drivers file_ops in
omapdriver_fops can be generated with DEFINE_DRM_GEM_FOPS, which
sets DRM's default helpers.
v2:
* detailed commit message (Javier)
* do not set VM_PFNMAP
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/omapdrm/omap_drv.c | 12 +-----------
drivers/gpu/drm/omapdrm/omap_gem.c | 24 ++++++-----------------
drivers/gpu/drm/omapdrm/omap_gem.h | 3 ---
drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c | 7 +------
4 files changed, 8 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index e2697fe80e62..afeeb7737552 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -636,17 +636,7 @@ static int dev_open(struct drm_device *dev, struct drm_file *file)
return 0;
}
-static const struct file_operations omapdriver_fops = {
- .owner = THIS_MODULE,
- .open = drm_open,
- .unlocked_ioctl = drm_ioctl,
- .compat_ioctl = drm_compat_ioctl,
- .release = drm_release,
- .mmap = omap_gem_mmap,
- .poll = drm_poll,
- .read = drm_read,
- .llseek = noop_llseek,
-};
+DEFINE_DRM_GEM_FOPS(omapdriver_fops);
static const struct drm_driver omap_drm_driver = {
.driver_features = DRIVER_MODESET | DRIVER_GEM |
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index 6b58a5bb7b44..c48fa531ca32 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -524,26 +524,11 @@ static vm_fault_t omap_gem_fault(struct vm_fault *vmf)
return ret;
}
-/** We override mainly to fix up some of the vm mapping flags.. */
-int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma)
-{
- int ret;
-
- ret = drm_gem_mmap(filp, vma);
- if (ret) {
- DBG("mmap failed: %d", ret);
- return ret;
- }
-
- return omap_gem_mmap_obj(vma->vm_private_data, vma);
-}
-
-int omap_gem_mmap_obj(struct drm_gem_object *obj,
- struct vm_area_struct *vma)
+static int omap_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
{
struct omap_gem_object *omap_obj = to_omap_bo(obj);
- vm_flags_mod(vma, VM_MIXEDMAP, VM_PFNMAP);
+ vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP | VM_IO | VM_MIXEDMAP);
if (omap_obj->flags & OMAP_BO_WC) {
vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
@@ -563,12 +548,14 @@ int omap_gem_mmap_obj(struct drm_gem_object *obj,
* address_space (so unmap_mapping_range does what we want,
* in particular in the case of mmap'd dmabufs)
*/
- vma->vm_pgoff = 0;
+ vma->vm_pgoff -= drm_vma_node_start(&obj->vma_node);
vma_set_file(vma, obj->filp);
vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
}
+ vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
+
return 0;
}
@@ -1282,6 +1269,7 @@ static const struct vm_operations_struct omap_gem_vm_ops = {
static const struct drm_gem_object_funcs omap_gem_object_funcs = {
.free = omap_gem_free_object,
.export = omap_gem_prime_export,
+ .mmap = omap_gem_object_mmap,
.vm_ops = &omap_gem_vm_ops,
};
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.h b/drivers/gpu/drm/omapdrm/omap_gem.h
index 4d4488939f6b..fec3fa0e4c33 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.h
+++ b/drivers/gpu/drm/omapdrm/omap_gem.h
@@ -57,9 +57,6 @@ int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
struct drm_mode_create_dumb *args);
/* mmap() Interface */
-int omap_gem_mmap(struct file *filp, struct vm_area_struct *vma);
-int omap_gem_mmap_obj(struct drm_gem_object *obj,
- struct vm_area_struct *vma);
u64 omap_gem_mmap_offset(struct drm_gem_object *obj);
size_t omap_gem_mmap_size(struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
index 8e194dbc9506..36f9ee4baad3 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c
@@ -64,13 +64,8 @@ static int omap_gem_dmabuf_mmap(struct dma_buf *buffer,
struct vm_area_struct *vma)
{
struct drm_gem_object *obj = buffer->priv;
- int ret = 0;
- ret = drm_gem_mmap_obj(obj, omap_gem_mmap_size(obj), vma);
- if (ret < 0)
- return ret;
-
- return omap_gem_mmap_obj(obj, vma);
+ return drm_gem_mmap_obj(obj, omap_gem_mmap_size(obj), vma);
}
static const struct dma_buf_ops omap_dmabuf_ops = {
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 08/11] drm/omapdrm: Use GEM mmap for fbdev emulation
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (6 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 07/11] drm/omapdrm: Set VM flags in GEM-object mmap function Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 09/11] drm/omapdrm: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
` (2 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Tomi Valkeinen, dri-devel,
Thomas Zimmermann, linux-tegra, linux-arm-kernel
The fbdev emulation currently uses fbdev's default mmap code, which
has been written for I/O memory. Provide an mmap that uses GEM's mmap
infrastructure.
Utilize fine-grained fbdev macros to initialize struct fb_ops. The
macros set the read/write and the draw callbacks for DMA memory. Set
the fb_mmap callback to omapdrm's new mmap helper. Also select the
correct Kconfig token for fbdev's DMA helpers. Note that the DMA
helpers are the same as for system memory.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/omapdrm/Kconfig | 2 +-
drivers/gpu/drm/omapdrm/omap_fbdev.c | 15 +++++++++++++--
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/Kconfig b/drivers/gpu/drm/omapdrm/Kconfig
index b4ac76c9f31b..d3c4877e465c 100644
--- a/drivers/gpu/drm/omapdrm/Kconfig
+++ b/drivers/gpu/drm/omapdrm/Kconfig
@@ -4,7 +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 FB_DMA_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 b7ccce0704a3..b1a2d00ef52d 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -76,6 +76,15 @@ static int omap_fbdev_pan_display(struct fb_var_screeninfo *var,
return drm_fb_helper_pan_display(var, fbi);
}
+static int omap_fbdev_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)
+{
+ struct drm_fb_helper *helper = info->par;
+ struct drm_framebuffer *fb = helper->fb;
+ struct drm_gem_object *bo = drm_gem_fb_get_obj(fb, 0);
+
+ return drm_gem_mmap_obj(bo, omap_gem_mmap_size(bo), vma);
+}
+
static void omap_fbdev_fb_destroy(struct fb_info *info)
{
struct drm_fb_helper *helper = info->par;
@@ -97,14 +106,16 @@ 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_DEFAULT_DMA_OPS_RDWR,
.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_DEFAULT_DMA_OPS_DRAW,
.fb_ioctl = drm_fb_helper_ioctl,
- .fb_destroy = omap_fbdev_fb_destroy,
+ .fb_mmap = omap_fbdev_fb_mmap,
+ .fb_destroy = omap_fbdev_fb_destroy,
};
static int omap_fbdev_create(struct drm_fb_helper *helper,
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 09/11] drm/omapdrm: Set fbdev FBINFO_VIRTFB flag
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (7 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 08/11] drm/omapdrm: Use GEM mmap for fbdev emulation Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 10/11] fbdev: Remove FB_DEFAULT_SYS_OPS Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h> Thomas Zimmermann
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Tomi Valkeinen, dri-devel,
Thomas Zimmermann, linux-tegra, linux-arm-kernel
Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
in DMA-able memory and should be accessed with the CPU's regular
memory ops.
v2:
* drop FBINFO_DEFAULT
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
drivers/gpu/drm/omapdrm/omap_fbdev.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/omapdrm/omap_fbdev.c b/drivers/gpu/drm/omapdrm/omap_fbdev.c
index b1a2d00ef52d..2821182f1d93 100644
--- a/drivers/gpu/drm/omapdrm/omap_fbdev.c
+++ b/drivers/gpu/drm/omapdrm/omap_fbdev.c
@@ -207,6 +207,7 @@ static int omap_fbdev_create(struct drm_fb_helper *helper,
drm_fb_helper_fill_info(fbi, helper, sizes);
+ fbi->flags |= FBINFO_VIRTFB;
fbi->screen_buffer = omap_gem_vaddr(bo);
fbi->screen_size = bo->size;
fbi->fix.smem_start = dma_addr;
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 10/11] fbdev: Remove FB_DEFAULT_SYS_OPS
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (8 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 09/11] drm/omapdrm: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h> Thomas Zimmermann
10 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, Helge Deller, dri-devel,
Thomas Zimmermann, linux-tegra, linux-arm-kernel
Remove the initializer macro FB_DEFAULT_SYS_OPS and its helper macro
__FB_DEFAULT_SYS_OPS_MMAP. There are no users.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Acked-by: Maxime Ripard <mripard@kernel.org>
Cc: Helge Deller <deller@gmx.de> (maintainer:FRAMEBUFFER LAYER)
---
include/linux/fb.h | 8 --------
1 file changed, 8 deletions(-)
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 1191a78c5289..d370f84fbca9 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -586,14 +586,6 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
.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
-
/*
* Helpers for framebuffers in DMA-able memory
*/
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h>
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
` (9 preceding siblings ...)
2023-07-06 12:46 ` [PATCH v2 10/11] fbdev: Remove FB_DEFAULT_SYS_OPS Thomas Zimmermann
@ 2023-07-06 12:46 ` Thomas Zimmermann
2023-07-06 13:07 ` Javier Martinez Canillas
10 siblings, 1 reply; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 12:46 UTC (permalink / raw)
To: javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Make the comments for I/O, system and DMA memory say the same.
Makes the header file's structure more obvious.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Suggested-by: Javier Martinez Canillas <javierm@redhat.com>
---
include/linux/fb.h | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)
diff --git a/include/linux/fb.h b/include/linux/fb.h
index d370f84fbca9..c8ca9c265fda 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -529,7 +529,7 @@ extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var);
extern int fb_blank(struct fb_info *info, int blank);
/*
- * Drawing operations where framebuffer is in I/O memory
+ * Helpers for framebuffers in I/O memory
*/
extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
@@ -540,10 +540,6 @@ 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
@@ -562,7 +558,7 @@ extern ssize_t fb_io_write(struct fb_info *info, const char __user *buf,
__FB_DEFAULT_IO_OPS_MMAP
/*
- * Drawing operations where framebuffer is in system RAM
+ * Helpers for framebuffers in system memory
*/
extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
@@ -573,10 +569,6 @@ 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
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h>
2023-07-06 12:46 ` [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h> Thomas Zimmermann
@ 2023-07-06 13:07 ` Javier Martinez Canillas
0 siblings, 0 replies; 16+ messages in thread
From: Javier Martinez Canillas @ 2023-07-06 13:07 UTC (permalink / raw)
To: Thomas Zimmermann, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, dri-devel, Thomas Zimmermann,
linux-tegra, linux-arm-kernel
Thomas Zimmermann <tzimmermann@suse.de> writes:
Hello Thomas,
> Make the comments for I/O, system and DMA memory say the same.
> Makes the header file's structure more obvious.
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Suggested-by: Javier Martinez Canillas <javierm@redhat.com>
> ---
Looks good to me. Thanks!
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
--
Best regards,
Javier Martinez Canillas
Core Platforms
Red Hat
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag
2023-07-06 12:46 ` [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
@ 2023-07-06 14:31 ` Thierry Reding
2023-07-06 14:47 ` Thomas Zimmermann
0 siblings, 1 reply; 16+ messages in thread
From: Thierry Reding @ 2023-07-06 14:31 UTC (permalink / raw)
To: Thomas Zimmermann
Cc: linux-fbdev, linux-samsung-soc, javierm, dri-devel,
Mikko Perttunen, mripard, linux-tegra, linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 1275 bytes --]
On Thu, Jul 06, 2023 at 02:46:42PM +0200, Thomas Zimmermann wrote:
> Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
> in DMA-able memory and should be accessed with the CPU's regular
> memory ops.
>
> v2:
> * drop FBINFO_DEFAULT
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Mikko Perttunen <mperttunen@nvidia.com>
> ---
> drivers/gpu/drm/tegra/fbdev.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
> index 82577b7c88da..d8460c5dc91e 100644
> --- a/drivers/gpu/drm/tegra/fbdev.c
> +++ b/drivers/gpu/drm/tegra/fbdev.c
> @@ -132,6 +132,7 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
> }
> }
>
> + info->flags |= FBINFO_VIRTFB;
> info->screen_base = (void __iomem *)bo->vaddr + offset;
As part of this, do we also need to set info->screen_buffer instead of
info->screen_base? The drm_fbdev_dma_helper functions do that.
Thierry
> info->screen_size = size;
> info->fix.smem_start = (unsigned long)(bo->iova + offset);
> --
> 2.41.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag
2023-07-06 14:31 ` Thierry Reding
@ 2023-07-06 14:47 ` Thomas Zimmermann
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Zimmermann @ 2023-07-06 14:47 UTC (permalink / raw)
To: Thierry Reding
Cc: linux-fbdev, linux-samsung-soc, javierm, dri-devel,
Mikko Perttunen, mripard, linux-tegra, linux-arm-kernel
[-- Attachment #1.1: Type: text/plain, Size: 1691 bytes --]
Hi
Am 06.07.23 um 16:31 schrieb Thierry Reding:
> On Thu, Jul 06, 2023 at 02:46:42PM +0200, Thomas Zimmermann wrote:
>> Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
>> in DMA-able memory and should be accessed with the CPU's regular
>> memory ops.
>>
>> v2:
>> * drop FBINFO_DEFAULT
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
>> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
>> Acked-by: Maxime Ripard <mripard@kernel.org>
>> Cc: Thierry Reding <thierry.reding@gmail.com>
>> Cc: Mikko Perttunen <mperttunen@nvidia.com>
>> ---
>> drivers/gpu/drm/tegra/fbdev.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/gpu/drm/tegra/fbdev.c b/drivers/gpu/drm/tegra/fbdev.c
>> index 82577b7c88da..d8460c5dc91e 100644
>> --- a/drivers/gpu/drm/tegra/fbdev.c
>> +++ b/drivers/gpu/drm/tegra/fbdev.c
>> @@ -132,6 +132,7 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper,
>> }
>> }
>>
>> + info->flags |= FBINFO_VIRTFB;
>> info->screen_base = (void __iomem *)bo->vaddr + offset;
>
> As part of this, do we also need to set info->screen_buffer instead of
> info->screen_base? The drm_fbdev_dma_helper functions do that.
Indeed, good point. I'll update this in the next iteration.
Best regards
Thomas
>
> Thierry
>
>> info->screen_size = size;
>> info->fix.smem_start = (unsigned long)(bo->iova + offset);
>> --
>> 2.41.0
>>
--
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] 16+ messages in thread
* RE: [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag
2023-07-06 12:46 ` [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
@ 2023-07-07 2:01 ` 대인기/Tizen Platform Lab(SR)/삼성전자
0 siblings, 0 replies; 16+ messages in thread
From: 대인기/Tizen Platform Lab(SR)/삼성전자 @ 2023-07-07 2:01 UTC (permalink / raw)
To: 'Thomas Zimmermann', javierm, maarten.lankhorst, mripard
Cc: linux-fbdev, linux-samsung-soc, 'Seung-Woo Kim',
'Krzysztof Kozlowski', dri-devel, 'Kyungmin Park',
'Alim Akhtar',
linux-tegra, linux-arm-kernel
Hi,
> -----Original Message-----
> From: Thomas Zimmermann <tzimmermann@suse.de>
> Sent: Thursday, July 6, 2023 9:47 PM
> To: javierm@redhat.com; maarten.lankhorst@linux.intel.com;
> mripard@kernel.org
> Cc: dri-devel@lists.freedesktop.org; linux-arm-kernel@lists.infradead.org;
> linux-samsung-soc@vger.kernel.org; linux-tegra@vger.kernel.org; linux-
> fbdev@vger.kernel.org; Thomas Zimmermann <tzimmermann@suse.de>; Inki Dae
> <inki.dae@samsung.com>; Seung-Woo Kim <sw0312.kim@samsung.com>; Kyungmin
> Park <kyungmin.park@samsung.com>; Krzysztof Kozlowski
> <krzysztof.kozlowski@linaro.org>; Alim Akhtar <alim.akhtar@samsung.com>
> Subject: [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag
>
> Mark the framebuffer with FBINFO_VIRTFB. The framebuffer range is
> in DMA-able memory and should be accessed with the CPU's regular
> memory ops.
>
> v2:
> * drop FBINFO_FLAG_DEFAULT
>
> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
> Acked-by: Maxime Ripard <mripard@kernel.org>
Acked-by : Inki Dae <inki.dae@samsung.com>
Thanks,
Inki Dae
> 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/exynos_drm_fbdev.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> index 7ca3424b59ce..828318de8529 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
> @@ -79,6 +79,7 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper
> *helper,
> offset = fbi->var.xoffset * fb->format->cpp[0];
> offset += fbi->var.yoffset * fb->pitches[0];
>
> + fbi->flags |= FBINFO_VIRTFB;
> fbi->screen_buffer = exynos_gem->kvaddr + offset;
> fbi->screen_size = size;
> fbi->fix.smem_len = size;
> --
> 2.41.0
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-07-07 2:01 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-06 12:46 [PATCH v2 00/11] drm: Improve fbdev emulation for DMA-able framebuffers Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 01/11] fbdev: Add fb_ops init macros for framebuffers in DMA-able memory Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 02/11] drm/fbdev-dma: Use fbdev DMA helpers Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 03/11] drm/tegra: " Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 04/11] drm/tegra: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
2023-07-06 14:31 ` Thierry Reding
2023-07-06 14:47 ` Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 05/11] drm/exynos: Use fbdev DMA helpers Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 06/11] drm/exynos: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
2023-07-07 2:01 ` 대인기/Tizen Platform Lab(SR)/삼성전자
2023-07-06 12:46 ` [PATCH v2 07/11] drm/omapdrm: Set VM flags in GEM-object mmap function Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 08/11] drm/omapdrm: Use GEM mmap for fbdev emulation Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 09/11] drm/omapdrm: Set fbdev FBINFO_VIRTFB flag Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 10/11] fbdev: Remove FB_DEFAULT_SYS_OPS Thomas Zimmermann
2023-07-06 12:46 ` [PATCH v2 11/11] fbdev: Harmonize some comments in <linux/fb.h> Thomas Zimmermann
2023-07-06 13:07 ` Javier Martinez Canillas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).