[openchrome-devel] drm-openchrome: Branch 'drm-next-5.5' - 12 commits - drivers/gpu/drm
Kevin Brace
kevinbrace at kemper.freedesktop.org
Thu Oct 17 01:02:48 UTC 2019
drivers/gpu/drm/openchrome/Makefile | 2
drivers/gpu/drm/openchrome/openchrome_crtc.c | 382 +-----------------------
drivers/gpu/drm/openchrome/openchrome_cursor.c | 385 +++++++++++++++++++++++++
drivers/gpu/drm/openchrome/openchrome_drv.h | 25 +
drivers/gpu/drm/openchrome/openchrome_fb.c | 164 +---------
drivers/gpu/drm/openchrome/openchrome_fbdev.c | 118 +++++++
drivers/gpu/drm/openchrome/openchrome_init.c | 36 ++
drivers/gpu/drm/openchrome/openchrome_ttm.c | 4
8 files changed, 602 insertions(+), 514 deletions(-)
New commits:
commit d693feb416eff609e51ebb996efacf89141e81fe
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 18:01:57 2019 -0700
drm/openchrome: Version bumped to 3.1.18
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 9e3b7759ed86..c34d78f5a2b9 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -52,10 +52,10 @@
#define DRIVER_MAJOR 3
#define DRIVER_MINOR 1
-#define DRIVER_PATCHLEVEL 17
+#define DRIVER_PATCHLEVEL 18
#define DRIVER_NAME "openchrome"
#define DRIVER_DESC "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE "20191014"
+#define DRIVER_DATE "20191016"
#define DRIVER_AUTHOR "OpenChrome Project"
commit 139b4b70b42443af71418abfa11d3465fe4b3ddd
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 18:01:29 2019 -0700
drm/openchrome: Move openchrome_mode_config_init() inside openchrome_fb.c
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c
index 7f9bb6814a5e..56b1da592556 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fb.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fb.c
@@ -117,6 +117,27 @@ static const struct drm_mode_config_funcs via_mode_funcs = {
.output_poll_changed = via_output_poll_changed
};
+void openchrome_mode_config_init(
+ struct openchrome_drm_private *dev_private)
+{
+ struct drm_device *dev = dev_private->dev;
+
+ DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+ drm_mode_config_init(dev);
+
+ dev->mode_config.min_width = 0;
+ dev->mode_config.min_height = 0;
+ dev->mode_config.max_width = 2044;
+ dev->mode_config.max_height = 4096;
+
+ dev->mode_config.funcs = &via_mode_funcs;
+
+ dev->mode_config.preferred_depth = 24;
+
+ DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
static struct fb_ops via_fb_ops = {
.owner = THIS_MODULE,
.fb_check_var = drm_fb_helper_check_var,
@@ -231,24 +252,3 @@ exit:
struct drm_fb_helper_funcs via_drm_fb_helper_funcs = {
.fb_probe = via_fb_probe,
};
-
-void openchrome_mode_config_init(
- struct openchrome_drm_private *dev_private)
-{
- struct drm_device *dev = dev_private->dev;
-
- DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
- drm_mode_config_init(dev);
-
- dev->mode_config.min_width = 0;
- dev->mode_config.min_height = 0;
- dev->mode_config.max_width = 2044;
- dev->mode_config.max_height = 4096;
-
- dev->mode_config.funcs = &via_mode_funcs;
-
- dev->mode_config.preferred_depth = 24;
-
- DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-}
commit c586f890100ec8d292214e54c56a893c0137c3ec
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 17:22:56 2019 -0700
drm/openchrome: Move FBDEV code into openchrome_fbdev.c
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/Makefile b/drivers/gpu/drm/openchrome/Makefile
index 73f688dde579..b7fc2ff9dc8d 100644
--- a/drivers/gpu/drm/openchrome/Makefile
+++ b/drivers/gpu/drm/openchrome/Makefile
@@ -12,6 +12,7 @@ openchrome-y := openchrome_analog.o \
openchrome_drv.o \
openchrome_encoder.o \
openchrome_fb.o \
+ openchrome_fbdev.o \
openchrome_fp.o \
openchrome_hdmi.o \
openchrome_i2c.o \
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index a78ee673e1b3..9e3b7759ed86 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -316,4 +316,6 @@ extern const struct drm_plane_funcs openchrome_cursor_drm_plane_funcs;
extern const uint32_t openchrome_cursor_formats[];
extern const unsigned int openchrome_cursor_formats_size;
+extern struct drm_fb_helper_funcs via_drm_fb_helper_funcs;
+
#endif /* _OPENCHROME_DRV_H */
diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c
index 836f3ba7b40f..7f9bb6814a5e 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fb.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fb.c
@@ -228,7 +228,7 @@ exit:
return ret;
}
-static struct drm_fb_helper_funcs via_drm_fb_helper_funcs = {
+struct drm_fb_helper_funcs via_drm_fb_helper_funcs = {
.fb_probe = via_fb_probe,
};
@@ -252,87 +252,3 @@ void openchrome_mode_config_init(
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
}
-
-int via_fbdev_init(struct drm_device *dev)
-{
- struct openchrome_drm_private *dev_private = dev->dev_private;
- struct via_framebuffer_device *via_fbdev;
- int bpp_sel = 32;
- int ret = 0;
-
- DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
- via_fbdev = kzalloc(sizeof(struct via_framebuffer_device),
- GFP_KERNEL);
- if (!via_fbdev) {
- ret = -ENOMEM;
- goto exit;
- }
-
- dev_private->via_fbdev = via_fbdev;
-
- drm_fb_helper_prepare(dev, &via_fbdev->helper,
- &via_drm_fb_helper_funcs);
-
- ret = drm_fb_helper_init(dev, &via_fbdev->helper,
- dev->mode_config.num_connector);
- if (ret) {
- goto free_fbdev;
- }
-
- ret = drm_fb_helper_single_add_all_connectors(&via_fbdev->helper);
- if (ret) {
- goto free_fb_helper;
- }
-
- drm_helper_disable_unused_functions(dev);
- ret = drm_fb_helper_initial_config(&via_fbdev->helper, bpp_sel);
- if (ret) {
- goto free_fb_helper;
- }
-
- goto exit;
-free_fb_helper:
- drm_fb_helper_fini(&via_fbdev->helper);
-free_fbdev:
- kfree(via_fbdev);
-exit:
- DRM_DEBUG_KMS("Exiting %s.\n", __func__);
- return ret;
-}
-
-void via_fbdev_fini(struct drm_device *dev)
-{
- struct openchrome_drm_private *dev_private = dev->dev_private;
- struct drm_fb_helper *fb_helper = &dev_private->via_fbdev->helper;
- struct via_framebuffer *via_fb = &dev_private->via_fbdev->via_fb;
- struct fb_info *info;
-
- DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
- if (!fb_helper) {
- goto exit;
- }
-
- info = fb_helper->fbdev;
- if (info) {
- unregister_framebuffer(info);
- kfree(info->apertures);
- framebuffer_release(info);
- fb_helper->fbdev = NULL;
- }
-
- if (via_fb->gem) {
- drm_gem_object_put_unlocked(via_fb->gem);
- via_fb->gem = NULL;
- }
-
- drm_fb_helper_fini(&dev_private->via_fbdev->helper);
- drm_framebuffer_cleanup(&dev_private->via_fbdev->via_fb.fb);
- if (dev_private->via_fbdev) {
- kfree(dev_private->via_fbdev);
- dev_private->via_fbdev = NULL;
- }
-exit:
- DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-}
diff --git a/drivers/gpu/drm/openchrome/openchrome_fbdev.c b/drivers/gpu/drm/openchrome/openchrome_fbdev.c
new file mode 100644
index 000000000000..58fe9c0398d3
--- /dev/null
+++ b/drivers/gpu/drm/openchrome/openchrome_fbdev.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2012 James Simmons <jsimmons at infradead.org>. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include <linux/fb.h>
+
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_drv.h>
+#include <drm/drm_fb_helper.h>
+#include <drm/drm_gem.h>
+
+#include "openchrome_drv.h"
+
+
+int via_fbdev_init(struct drm_device *dev)
+{
+ struct openchrome_drm_private *dev_private = dev->dev_private;
+ struct via_framebuffer_device *via_fbdev;
+ int bpp_sel = 32;
+ int ret = 0;
+
+ DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+ via_fbdev = kzalloc(sizeof(struct via_framebuffer_device),
+ GFP_KERNEL);
+ if (!via_fbdev) {
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ dev_private->via_fbdev = via_fbdev;
+
+ drm_fb_helper_prepare(dev, &via_fbdev->helper,
+ &via_drm_fb_helper_funcs);
+
+ ret = drm_fb_helper_init(dev, &via_fbdev->helper,
+ dev->mode_config.num_connector);
+ if (ret) {
+ goto free_fbdev;
+ }
+
+ ret = drm_fb_helper_single_add_all_connectors(&via_fbdev->helper);
+ if (ret) {
+ goto free_fb_helper;
+ }
+
+ drm_helper_disable_unused_functions(dev);
+ ret = drm_fb_helper_initial_config(&via_fbdev->helper, bpp_sel);
+ if (ret) {
+ goto free_fb_helper;
+ }
+
+ goto exit;
+free_fb_helper:
+ drm_fb_helper_fini(&via_fbdev->helper);
+free_fbdev:
+ kfree(via_fbdev);
+exit:
+ DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+ return ret;
+}
+
+void via_fbdev_fini(struct drm_device *dev)
+{
+ struct openchrome_drm_private *dev_private = dev->dev_private;
+ struct drm_fb_helper *fb_helper = &dev_private->
+ via_fbdev->helper;
+ struct via_framebuffer *via_fb = &dev_private->
+ via_fbdev->via_fb;
+ struct fb_info *info;
+
+ DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+ if (!fb_helper) {
+ goto exit;
+ }
+
+ info = fb_helper->fbdev;
+ if (info) {
+ unregister_framebuffer(info);
+ kfree(info->apertures);
+ framebuffer_release(info);
+ fb_helper->fbdev = NULL;
+ }
+
+ if (via_fb->gem) {
+ drm_gem_object_put_unlocked(via_fb->gem);
+ via_fb->gem = NULL;
+ }
+
+ drm_fb_helper_fini(&dev_private->via_fbdev->helper);
+ drm_framebuffer_cleanup(&dev_private->via_fbdev->via_fb.fb);
+ if (dev_private->via_fbdev) {
+ kfree(dev_private->via_fbdev);
+ dev_private->via_fbdev = NULL;
+ }
+exit:
+ DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
commit a70a803174d93c0aa817fc6cf5f9abf254dd6af8
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 17:03:18 2019 -0700
drm/openchrome: Change how drm_crtc_init_with_planes() is invoked
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 867a9a14d51e..4249cc9910e5 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -2295,17 +2295,28 @@ int via_crtc_init(struct drm_device *dev, uint32_t index)
goto free_cursor;
}
- if (index) {
+ if (iga->index) {
drm_crtc_helper_add(crtc,
&openchrome_iga2_drm_crtc_helper_funcs);
- ret = drm_crtc_init_with_planes(dev, crtc, primary,
- cursor, &openchrome_iga2_drm_crtc_funcs,
+ ret = drm_crtc_init_with_planes(dev, crtc,
+ primary, cursor,
+ &openchrome_iga2_drm_crtc_funcs,
NULL);
- if (ret) {
- DRM_ERROR("Failed to initialize CRTC!\n");
- goto cleanup_cursor;
- }
+ } else {
+ drm_crtc_helper_add(crtc,
+ &openchrome_iga1_drm_crtc_helper_funcs);
+ ret = drm_crtc_init_with_planes(dev, crtc,
+ primary, cursor,
+ &openchrome_iga1_drm_crtc_funcs,
+ NULL);
+ }
+ if (ret) {
+ DRM_ERROR("Failed to initialize CRTC!\n");
+ goto cleanup_cursor;
+ }
+
+ if (iga->index) {
iga->timings.htotal.count = ARRAY_SIZE(iga2_hor_total);
iga->timings.htotal.regs = iga2_hor_total;
@@ -2380,16 +2391,6 @@ int via_crtc_init(struct drm_device *dev, uint32_t index)
iga->offset.count = ARRAY_SIZE(iga2_offset) - 1;
iga->offset.regs = iga2_offset;
} else {
- drm_crtc_helper_add(crtc,
- &openchrome_iga1_drm_crtc_helper_funcs);
- ret = drm_crtc_init_with_planes(dev, crtc, primary,
- cursor, &openchrome_iga1_drm_crtc_funcs,
- NULL);
- if (ret) {
- DRM_ERROR("Failed to initialize CRTC!\n");
- goto cleanup_cursor;
- }
-
iga->timings.htotal.count = ARRAY_SIZE(iga1_hor_total);
iga->timings.htotal.regs = iga1_hor_total;
commit 12721675e2eba407bcc6c8ce95877ec3c39e5818
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 16:46:14 2019 -0700
drm/openchrome: Move VRAM initialization code into openchrome_init.c
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 33eb94aa251f..a78ee673e1b3 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -263,6 +263,10 @@ extern int via_hdmi_audio;
extern struct ttm_bo_driver openchrome_bo_driver;
int openchrome_vram_detect(struct openchrome_drm_private *dev_private);
+extern int openchrome_vram_init(
+ struct openchrome_drm_private *dev_private);
+extern void openchrome_vram_fini(
+ struct openchrome_drm_private *dev_private);
int openchrome_mmio_init(struct openchrome_drm_private *dev_private);
void openchrome_mmio_fini(struct openchrome_drm_private *dev_private);
void openchrome_graphics_unlock(
@@ -276,10 +280,6 @@ extern void via_engine_init(struct drm_device *dev);
int openchrome_dev_pm_ops_suspend(struct device *dev);
int openchrome_dev_pm_ops_resume(struct device *dev);
-extern int openchrome_vram_init(
- struct openchrome_drm_private *dev_private);
-extern void openchrome_vram_fini(
- struct openchrome_drm_private *dev_private);
void openchrome_mode_config_init(
struct openchrome_drm_private *dev_private);
diff --git a/drivers/gpu/drm/openchrome/openchrome_fb.c b/drivers/gpu/drm/openchrome/openchrome_fb.c
index 53efa28efc8f..836f3ba7b40f 100644
--- a/drivers/gpu/drm/openchrome/openchrome_fb.c
+++ b/drivers/gpu/drm/openchrome/openchrome_fb.c
@@ -28,42 +28,6 @@
#include "openchrome_drv.h"
-int openchrome_vram_init(struct openchrome_drm_private *dev_private)
-{
- int ret = 0;
-
- DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
- /* Add an MTRR for the video RAM. */
- dev_private->vram_mtrr = arch_phys_wc_add(
- dev_private->vram_start,
- dev_private->vram_size);
-
- DRM_INFO("VIA Technologies Chrome IGP VRAM "
- "Physical Address: 0x%08llx\n",
- dev_private->vram_start);
- DRM_INFO("VIA Technologies Chrome IGP VRAM "
- "Size: %llu\n",
- (unsigned long long) dev_private->vram_size >> 20);
-
- DRM_DEBUG_KMS("Exiting %s.\n", __func__);
- return ret;
-}
-
-void openchrome_vram_fini(struct openchrome_drm_private *dev_private)
-{
- DRM_DEBUG_KMS("Entered %s.\n", __func__);
-
- if (dev_private->vram_mtrr) {
- arch_phys_wc_del(dev_private->vram_mtrr);
- arch_io_free_memtype_wc(dev_private->vram_start,
- dev_private->vram_size);
- dev_private->vram_mtrr = 0;
- }
-
- DRM_DEBUG_KMS("Exiting %s.\n", __func__);
-}
-
static int
via_user_framebuffer_create_handle(struct drm_framebuffer *fb,
struct drm_file *file_priv,
diff --git a/drivers/gpu/drm/openchrome/openchrome_init.c b/drivers/gpu/drm/openchrome/openchrome_init.c
index 2dd287d3d86e..e49fdc0c1ad9 100644
--- a/drivers/gpu/drm/openchrome/openchrome_init.c
+++ b/drivers/gpu/drm/openchrome/openchrome_init.c
@@ -970,6 +970,42 @@ out_err:
return ret;
}
+int openchrome_vram_init(struct openchrome_drm_private *dev_private)
+{
+ int ret = 0;
+
+ DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+ /* Add an MTRR for the video RAM. */
+ dev_private->vram_mtrr = arch_phys_wc_add(
+ dev_private->vram_start,
+ dev_private->vram_size);
+
+ DRM_INFO("VIA Technologies Chrome IGP VRAM "
+ "Physical Address: 0x%08llx\n",
+ dev_private->vram_start);
+ DRM_INFO("VIA Technologies Chrome IGP VRAM "
+ "Size: %llu\n",
+ (unsigned long long) dev_private->vram_size >> 20);
+
+ DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+ return ret;
+}
+
+void openchrome_vram_fini(struct openchrome_drm_private *dev_private)
+{
+ DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+ if (dev_private->vram_mtrr) {
+ arch_phys_wc_del(dev_private->vram_mtrr);
+ arch_io_free_memtype_wc(dev_private->vram_start,
+ dev_private->vram_size);
+ dev_private->vram_mtrr = 0;
+ }
+
+ DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+}
+
int openchrome_mmio_init(
struct openchrome_drm_private *dev_private)
{
commit 215876a8252369c73d9a88b894aab4e1c0e1d59e
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 16:45:19 2019 -0700
drm/openchrome: Use <drm/ttm/*.h> rather than "ttm/*.h" for TTM headers
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 26c51025ff4c..33eb94aa251f 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -40,9 +40,9 @@
#include <drm/drm_ioctl.h>
#include <drm/drm_plane.h>
-#include "ttm/ttm_bo_api.h"
-#include "ttm/ttm_bo_driver.h"
-#include "ttm/ttm_placement.h"
+#include <drm/ttm/ttm_bo_api.h>
+#include <drm/ttm/ttm_bo_driver.h>
+#include <drm/ttm/ttm_placement.h>
#include <drm/via_drm.h>
commit 4668841359f0e23355893d681a68c51588fd34ad
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 16:42:26 2019 -0700
drm/openchrome: Add PCI ID and TTM headers to openchrome_ttm.c
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_ttm.c b/drivers/gpu/drm/openchrome/openchrome_ttm.c
index 7ecfd15daee1..cf258d21774d 100644
--- a/drivers/gpu/drm/openchrome/openchrome_ttm.c
+++ b/drivers/gpu/drm/openchrome/openchrome_ttm.c
@@ -35,6 +35,10 @@
*
*/
+#include <linux/pci.h>
+
+#include <drm/ttm/ttm_bo_api.h>
+#include <drm/ttm/ttm_bo_driver.h>
#include "openchrome_drv.h"
commit a80a0df53cf363fdcfac7f06c3f0888b8ba0f600
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Wed Oct 16 16:41:28 2019 -0700
drm/openchrome: Move cursor plane code into openchrome_cursor.c
This happened thanks to universal plane related restructuring of
DRM / KMS interface.
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/Makefile b/drivers/gpu/drm/openchrome/Makefile
index 261c40f8e3eb..73f688dde579 100644
--- a/drivers/gpu/drm/openchrome/Makefile
+++ b/drivers/gpu/drm/openchrome/Makefile
@@ -7,6 +7,7 @@ openchrome-y := openchrome_analog.o \
openchrome_clocks.o \
openchrome_crtc.o \
openchrome_crtc_hw.o \
+ openchrome_cursor.o \
openchrome_display.o \
openchrome_drv.o \
openchrome_encoder.o \
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index d300c862c034..867a9a14d51e 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -168,135 +168,6 @@ static void via_iga2_set_color_depth(
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
}
-static void openchrome_hide_cursor(struct drm_crtc *crtc)
-{
- struct drm_device *dev = crtc->dev;
- struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
- struct openchrome_drm_private *dev_private =
- crtc->dev->dev_private;
- uint32_t temp;
-
- switch (dev->pdev->device) {
- case PCI_DEVICE_ID_VIA_PM800:
- case PCI_DEVICE_ID_VIA_VT3157:
- case PCI_DEVICE_ID_VIA_VT3343:
- case PCI_DEVICE_ID_VIA_P4M900:
- case PCI_DEVICE_ID_VIA_VT1122:
- case PCI_DEVICE_ID_VIA_VX875:
- case PCI_DEVICE_ID_VIA_VX900_VGA:
- if (iga->index) {
- temp = VIA_READ(HI_CONTROL);
- VIA_WRITE(HI_CONTROL, temp & 0xFFFFFFFA);
- } else {
- temp = VIA_READ(PRIM_HI_CTRL);
- VIA_WRITE(PRIM_HI_CTRL, temp & 0xFFFFFFFA);
- }
-
- break;
- default:
- temp = VIA_READ(HI_CONTROL);
- VIA_WRITE(HI_CONTROL, temp & 0xFFFFFFFA);
- break;
- }
-}
-
-static void openchrome_show_cursor(struct drm_crtc *crtc)
-{
- struct drm_device *dev = crtc->dev;
- struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
- struct openchrome_drm_private *dev_private =
- crtc->dev->dev_private;
-
- switch (dev->pdev->device) {
- case PCI_DEVICE_ID_VIA_PM800:
- case PCI_DEVICE_ID_VIA_VT3157:
- case PCI_DEVICE_ID_VIA_VT3343:
- case PCI_DEVICE_ID_VIA_P4M900:
- case PCI_DEVICE_ID_VIA_VT1122:
- case PCI_DEVICE_ID_VIA_VX875:
- case PCI_DEVICE_ID_VIA_VX900_VGA:
- /* Program Hardware Icon (HI) FIFO, foreground, and
- * background colors. */
- if (iga->index) {
- VIA_WRITE(HI_TRANSPARENT_COLOR, 0x00000000);
- VIA_WRITE(HI_INVTCOLOR, 0x00FFFFFF);
- VIA_WRITE(ALPHA_V3_PREFIFO_CONTROL, 0x000E0000);
- VIA_WRITE(ALPHA_V3_FIFO_CONTROL, 0x0E0F0000);
- } else {
- VIA_WRITE(PRIM_HI_TRANSCOLOR, 0x00000000);
- VIA_WRITE(PRIM_HI_INVTCOLOR, 0x00FFFFFF);
- VIA_WRITE(V327_HI_INVTCOLOR, 0x00FFFFFF);
- VIA_WRITE(PRIM_HI_FIFO, 0x0D000D0F);
- }
-
- break;
- default:
- VIA_WRITE(HI_TRANSPARENT_COLOR, 0x00000000);
- VIA_WRITE(HI_INVTCOLOR, 0x00FFFFFF);
- VIA_WRITE(ALPHA_V3_PREFIFO_CONTROL, 0x000E0000);
- VIA_WRITE(ALPHA_V3_FIFO_CONTROL, 0xE0F0000);
- break;
- }
-
- switch (dev->pdev->device) {
- case PCI_DEVICE_ID_VIA_PM800:
- case PCI_DEVICE_ID_VIA_VT3157:
- case PCI_DEVICE_ID_VIA_VT3343:
- case PCI_DEVICE_ID_VIA_P4M900:
- case PCI_DEVICE_ID_VIA_VT1122:
- case PCI_DEVICE_ID_VIA_VX875:
- case PCI_DEVICE_ID_VIA_VX900_VGA:
- /* Turn on Hardware icon Cursor */
- if (iga->index) {
- VIA_WRITE(HI_CONTROL, 0xB6000005);
- } else {
- VIA_WRITE(PRIM_HI_CTRL, 0x36000005);
- }
-
- break;
- default:
- if (iga->index) {
- VIA_WRITE(HI_CONTROL, 0xB6000005);
- } else {
- VIA_WRITE(HI_CONTROL, 0x36000005);
- }
-
- break;
- }
-}
-
-static void openchrome_cursor_address(struct drm_crtc *crtc)
-{
- struct drm_device *dev = crtc->dev;
- struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
- struct openchrome_drm_private *dev_private =
- crtc->dev->dev_private;
-
- if (!iga->cursor_bo->kmap.bo) {
- return;
- }
-
- switch (dev->pdev->device) {
- case PCI_DEVICE_ID_VIA_PM800:
- case PCI_DEVICE_ID_VIA_VT3157:
- case PCI_DEVICE_ID_VIA_VT3343:
- case PCI_DEVICE_ID_VIA_P4M900:
- case PCI_DEVICE_ID_VIA_VT1122:
- case PCI_DEVICE_ID_VIA_VX875:
- case PCI_DEVICE_ID_VIA_VX900_VGA:
- /* Program the HI offset. */
- if (iga->index) {
- VIA_WRITE(HI_FBOFFSET, iga->cursor_bo->kmap.bo->offset);
- } else {
- VIA_WRITE(PRIM_HI_FBOFFSET, iga->cursor_bo->kmap.bo->offset);
- }
- break;
- default:
- VIA_WRITE(HI_FBOFFSET, iga->cursor_bo->kmap.bo->offset);
- break;
- }
-}
-
static int via_iga1_gamma_set(struct drm_crtc *crtc,
u16 *r, u16 *g, u16 *b,
uint32_t size,
@@ -2371,204 +2242,6 @@ static const uint32_t openchrome_primary_formats[] = {
DRM_FORMAT_RGB332,
};
-static void openchrome_set_hi_location(struct drm_crtc *crtc,
- int crtc_x,
- int crtc_y)
-{
- struct drm_device *dev = crtc->dev;
- struct via_crtc *iga = container_of(crtc,
- struct via_crtc, base);
- struct openchrome_drm_private *dev_private =
- crtc->dev->dev_private;
- uint32_t location_x = 0, location_y = 0;
- uint32_t offset_x = 0, offset_y = 0;
-
- if (crtc_x < 0) {
- offset_x = -crtc_x;
- } else {
- location_x = crtc_x;
- }
-
- if (crtc_y < 0) {
- offset_y = -crtc_y;
- } else {
- location_y = crtc_y;
- }
-
- switch (dev->pdev->device) {
- case PCI_DEVICE_ID_VIA_PM800:
- case PCI_DEVICE_ID_VIA_VT3157:
- case PCI_DEVICE_ID_VIA_VT3343:
- case PCI_DEVICE_ID_VIA_P4M900:
- case PCI_DEVICE_ID_VIA_VT1122:
- case PCI_DEVICE_ID_VIA_VX875:
- case PCI_DEVICE_ID_VIA_VX900_VGA:
- if (iga->index) {
- VIA_WRITE(HI_POSSTART,
- (((location_x & 0x07ff) << 16) |
- (location_y & 0x07ff)));
- VIA_WRITE(HI_CENTEROFFSET,
- (((offset_x & 0x07ff) << 16) |
- (offset_y & 0x07ff)));
- } else {
- VIA_WRITE(PRIM_HI_POSSTART,
- (((location_x & 0x07ff) << 16) |
- (location_y & 0x07ff)));
- VIA_WRITE(PRIM_HI_CENTEROFFSET,
- (((offset_x & 0x07ff) << 16) |
- (offset_y & 0x07ff)));
- }
-
- break;
- default:
- VIA_WRITE(HI_POSSTART,
- (((location_x & 0x07ff) << 16) |
- (location_y & 0x07ff)));
- VIA_WRITE(HI_CENTEROFFSET,
- (((offset_x & 0x07ff) << 16) |
- (offset_y & 0x07ff)));
- break;
- }
-}
-
-static int openchrome_cursor_update_plane(struct drm_plane *plane,
- struct drm_crtc *crtc,
- struct drm_framebuffer *fb,
- int crtc_x, int crtc_y,
- unsigned int crtc_w,
- unsigned int crtc_h,
- uint32_t src_x, uint32_t src_y,
- uint32_t src_w, uint32_t src_h,
- struct drm_modeset_acquire_ctx *ctx)
-{
- struct drm_device *dev = plane->dev;
- struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
- struct via_framebuffer *via_fb;
- struct openchrome_bo *user_bo;
- struct drm_gem_object *gem;
- uint32_t *user_bo_src, *cursor_dst;
- bool is_iomem;
- uint32_t i;
- uint32_t width, height;
- uint32_t max_width = 64, max_height = 64;
- int ret = 0;
-
- if (!crtc) {
- DRM_ERROR("Invalid CRTC!\n");
- ret = -EINVAL;
- goto exit;
- }
-
- if (!crtc->enabled) {
- DRM_ERROR("CRTC is currently disabled!\n");
- ret = -EINVAL;
- goto exit;
- }
-
- if (!fb) {
- DRM_ERROR("Invalid frame buffer!\n");
- ret = -EINVAL;
- goto exit;
- }
-
- if ((fb->width != 64) || (fb->height != 64)) {
- DRM_ERROR("Cursor dimensions are expected to be "
- "64 x 64.\n");
- ret = -EINVAL;
- goto exit;
- }
-
- if (fb->width != fb->height) {
- DRM_ERROR("Hardware cursor is expected to have "
- "square dimensions.\n");
- ret = -EINVAL;
- goto exit;
- }
-
- if (fb != crtc->cursor->fb) {
- if ((dev->pdev->device == PCI_DEVICE_ID_VIA_CLE266) ||
- (dev->pdev->device == PCI_DEVICE_ID_VIA_KM400)) {
- if ((fb->width == 64) || (fb->height == 64)) {
- max_width >>= 1;
- max_height >>= 1;
- }
- }
-
- width = fb->width;
- height = fb->height;
-
- via_fb = container_of(fb, struct via_framebuffer, fb);
- gem = via_fb->gem;
- user_bo = container_of(gem, struct openchrome_bo, gem);
- ret = ttm_bo_kmap(&user_bo->ttm_bo, 0,
- user_bo->ttm_bo.num_pages,
- &user_bo->kmap);
- if (ret) {
- goto exit;
- }
-
- user_bo_src = ttm_kmap_obj_virtual(&user_bo->kmap,
- &is_iomem);
- cursor_dst =
- ttm_kmap_obj_virtual(&iga->cursor_bo->kmap,
- &is_iomem);
- memset_io(cursor_dst, 0x0,
- iga->cursor_bo->kmap.bo->mem.size);
- for (i = 0; i < height; i++) {
- __iowrite32_copy(cursor_dst, user_bo_src, width);
- user_bo_src += width;
- cursor_dst += max_width;
- }
-
- ttm_bo_kunmap(&user_bo->kmap);
-
- openchrome_cursor_address(crtc);
- } else {
- crtc->cursor_x = crtc_x;
- crtc->cursor_y = crtc_y;
- openchrome_set_hi_location(crtc, crtc_x, crtc_y);
- }
-
- openchrome_show_cursor(crtc);
-exit:
- return ret;
-}
-
-static int openchrome_cursor_disable_plane(struct drm_plane *plane,
- struct drm_modeset_acquire_ctx *ctx)
-{
- if (plane->crtc) {
- openchrome_hide_cursor(plane->crtc);
- }
-
- if (plane->fb) {
- drm_framebuffer_put(plane->fb);
- plane->fb = NULL;
- }
-
- return 0;
-}
-
-static void openchrome_cursor_destroy(struct drm_plane *plane)
-{
- if (plane->crtc) {
- openchrome_hide_cursor(plane->crtc);
- }
-
- drm_plane_cleanup(plane);
-}
-
-static const struct
-drm_plane_funcs openchrome_cursor_drm_plane_funcs = {
- .update_plane = openchrome_cursor_update_plane,
- .disable_plane = openchrome_cursor_disable_plane,
- .destroy = openchrome_cursor_destroy,
-};
-
-static const uint32_t openchrome_cursor_formats[] = {
- DRM_FORMAT_ARGB8888
-};
-
int via_crtc_init(struct drm_device *dev, uint32_t index)
{
struct openchrome_drm_private *dev_private =
@@ -2614,7 +2287,7 @@ int via_crtc_init(struct drm_device *dev, uint32_t index)
ret = drm_universal_plane_init(dev, cursor, possible_crtcs,
&openchrome_cursor_drm_plane_funcs,
openchrome_cursor_formats,
- ARRAY_SIZE(openchrome_cursor_formats),
+ openchrome_cursor_formats_size,
NULL, DRM_PLANE_TYPE_CURSOR, NULL);
if (ret) {
DRM_ERROR("Failed to initialize a cursor "
diff --git a/drivers/gpu/drm/openchrome/openchrome_cursor.c b/drivers/gpu/drm/openchrome/openchrome_cursor.c
new file mode 100644
index 000000000000..878274ca84fd
--- /dev/null
+++ b/drivers/gpu/drm/openchrome/openchrome_cursor.c
@@ -0,0 +1,385 @@
+/*
+ * Copyright © 2019 Kevin Brace
+ * Copyright 2012 James Simmons <jsimmons at infradead.org>. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including
+ * the next paragraph) shall be included in all copies or substantial
+ * portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+/*
+ * Author(s):
+ *
+ * Kevin Brace <kevinbrace at gmx.com>
+ * James Simmons <jsimmons at infradead.org>
+ */
+
+#include <linux/pci_ids.h>
+
+#include <drm/drm_crtc.h>
+#include <drm/drm_fourcc.h>
+#include <drm/drm_framebuffer.h>
+#include <drm/drm_mode.h>
+#include <drm/drm_modeset_helper_vtables.h>
+#include <drm/drm_plane.h>
+#include <drm/drm_plane_helper.h>
+
+#include <drm/ttm/ttm_bo_api.h>
+#include <drm/ttm/ttm_bo_driver.h>
+
+#include "openchrome_drv.h"
+
+
+static void openchrome_hide_cursor(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct via_crtc *iga = container_of(crtc,
+ struct via_crtc, base);
+ struct openchrome_drm_private *dev_private =
+ crtc->dev->dev_private;
+ uint32_t temp;
+
+ switch (dev->pdev->device) {
+ case PCI_DEVICE_ID_VIA_PM800:
+ case PCI_DEVICE_ID_VIA_VT3157:
+ case PCI_DEVICE_ID_VIA_VT3343:
+ case PCI_DEVICE_ID_VIA_P4M900:
+ case PCI_DEVICE_ID_VIA_VT1122:
+ case PCI_DEVICE_ID_VIA_VX875:
+ case PCI_DEVICE_ID_VIA_VX900_VGA:
+ if (iga->index) {
+ temp = VIA_READ(HI_CONTROL);
+ VIA_WRITE(HI_CONTROL, temp & 0xFFFFFFFA);
+ } else {
+ temp = VIA_READ(PRIM_HI_CTRL);
+ VIA_WRITE(PRIM_HI_CTRL, temp & 0xFFFFFFFA);
+ }
+
+ break;
+ default:
+ temp = VIA_READ(HI_CONTROL);
+ VIA_WRITE(HI_CONTROL, temp & 0xFFFFFFFA);
+ break;
+ }
+}
+
+static void openchrome_show_cursor(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct via_crtc *iga = container_of(crtc,
+ struct via_crtc, base);
+ struct openchrome_drm_private *dev_private =
+ crtc->dev->dev_private;
+
+ switch (dev->pdev->device) {
+ case PCI_DEVICE_ID_VIA_PM800:
+ case PCI_DEVICE_ID_VIA_VT3157:
+ case PCI_DEVICE_ID_VIA_VT3343:
+ case PCI_DEVICE_ID_VIA_P4M900:
+ case PCI_DEVICE_ID_VIA_VT1122:
+ case PCI_DEVICE_ID_VIA_VX875:
+ case PCI_DEVICE_ID_VIA_VX900_VGA:
+ /* Program Hardware Icon (HI) FIFO, foreground, and
+ * background colors. */
+ if (iga->index) {
+ VIA_WRITE(HI_TRANSPARENT_COLOR, 0x00000000);
+ VIA_WRITE(HI_INVTCOLOR, 0x00FFFFFF);
+ VIA_WRITE(ALPHA_V3_PREFIFO_CONTROL,
+ 0x000E0000);
+ VIA_WRITE(ALPHA_V3_FIFO_CONTROL, 0x0E0F0000);
+ } else {
+ VIA_WRITE(PRIM_HI_TRANSCOLOR, 0x00000000);
+ VIA_WRITE(PRIM_HI_INVTCOLOR, 0x00FFFFFF);
+ VIA_WRITE(V327_HI_INVTCOLOR, 0x00FFFFFF);
+ VIA_WRITE(PRIM_HI_FIFO, 0x0D000D0F);
+ }
+
+ break;
+ default:
+ VIA_WRITE(HI_TRANSPARENT_COLOR, 0x00000000);
+ VIA_WRITE(HI_INVTCOLOR, 0x00FFFFFF);
+ VIA_WRITE(ALPHA_V3_PREFIFO_CONTROL, 0x000E0000);
+ VIA_WRITE(ALPHA_V3_FIFO_CONTROL, 0xE0F0000);
+ break;
+ }
+
+ switch (dev->pdev->device) {
+ case PCI_DEVICE_ID_VIA_PM800:
+ case PCI_DEVICE_ID_VIA_VT3157:
+ case PCI_DEVICE_ID_VIA_VT3343:
+ case PCI_DEVICE_ID_VIA_P4M900:
+ case PCI_DEVICE_ID_VIA_VT1122:
+ case PCI_DEVICE_ID_VIA_VX875:
+ case PCI_DEVICE_ID_VIA_VX900_VGA:
+ /* Turn on Hardware icon Cursor */
+ if (iga->index) {
+ VIA_WRITE(HI_CONTROL, 0xB6000005);
+ } else {
+ VIA_WRITE(PRIM_HI_CTRL, 0x36000005);
+ }
+
+ break;
+ default:
+ if (iga->index) {
+ VIA_WRITE(HI_CONTROL, 0xB6000005);
+ } else {
+ VIA_WRITE(HI_CONTROL, 0x36000005);
+ }
+
+ break;
+ }
+}
+
+static void openchrome_cursor_address(struct drm_crtc *crtc)
+{
+ struct drm_device *dev = crtc->dev;
+ struct via_crtc *iga = container_of(crtc,
+ struct via_crtc, base);
+ struct openchrome_drm_private *dev_private =
+ crtc->dev->dev_private;
+
+ if (!iga->cursor_bo->kmap.bo) {
+ return;
+ }
+
+ switch (dev->pdev->device) {
+ case PCI_DEVICE_ID_VIA_PM800:
+ case PCI_DEVICE_ID_VIA_VT3157:
+ case PCI_DEVICE_ID_VIA_VT3343:
+ case PCI_DEVICE_ID_VIA_P4M900:
+ case PCI_DEVICE_ID_VIA_VT1122:
+ case PCI_DEVICE_ID_VIA_VX875:
+ case PCI_DEVICE_ID_VIA_VX900_VGA:
+ /* Program the HI offset. */
+ if (iga->index) {
+ VIA_WRITE(HI_FBOFFSET,
+ iga->cursor_bo->kmap.bo->offset);
+ } else {
+ VIA_WRITE(PRIM_HI_FBOFFSET,
+ iga->cursor_bo->kmap.bo->offset);
+ }
+ break;
+ default:
+ VIA_WRITE(HI_FBOFFSET,
+ iga->cursor_bo->kmap.bo->offset);
+ break;
+ }
+}
+
+static void openchrome_set_hi_location(struct drm_crtc *crtc,
+ int crtc_x,
+ int crtc_y)
+{
+ struct drm_device *dev = crtc->dev;
+ struct via_crtc *iga = container_of(crtc,
+ struct via_crtc, base);
+ struct openchrome_drm_private *dev_private =
+ crtc->dev->dev_private;
+ uint32_t location_x = 0, location_y = 0;
+ uint32_t offset_x = 0, offset_y = 0;
+
+ if (crtc_x < 0) {
+ offset_x = -crtc_x;
+ } else {
+ location_x = crtc_x;
+ }
+
+ if (crtc_y < 0) {
+ offset_y = -crtc_y;
+ } else {
+ location_y = crtc_y;
+ }
+
+ switch (dev->pdev->device) {
+ case PCI_DEVICE_ID_VIA_PM800:
+ case PCI_DEVICE_ID_VIA_VT3157:
+ case PCI_DEVICE_ID_VIA_VT3343:
+ case PCI_DEVICE_ID_VIA_P4M900:
+ case PCI_DEVICE_ID_VIA_VT1122:
+ case PCI_DEVICE_ID_VIA_VX875:
+ case PCI_DEVICE_ID_VIA_VX900_VGA:
+ if (iga->index) {
+ VIA_WRITE(HI_POSSTART,
+ (((location_x & 0x07ff) << 16) |
+ (location_y & 0x07ff)));
+ VIA_WRITE(HI_CENTEROFFSET,
+ (((offset_x & 0x07ff) << 16) |
+ (offset_y & 0x07ff)));
+ } else {
+ VIA_WRITE(PRIM_HI_POSSTART,
+ (((location_x & 0x07ff) << 16) |
+ (location_y & 0x07ff)));
+ VIA_WRITE(PRIM_HI_CENTEROFFSET,
+ (((offset_x & 0x07ff) << 16) |
+ (offset_y & 0x07ff)));
+ }
+
+ break;
+ default:
+ VIA_WRITE(HI_POSSTART,
+ (((location_x & 0x07ff) << 16) |
+ (location_y & 0x07ff)));
+ VIA_WRITE(HI_CENTEROFFSET,
+ (((offset_x & 0x07ff) << 16) |
+ (offset_y & 0x07ff)));
+ break;
+ }
+}
+
+static int openchrome_cursor_update_plane(struct drm_plane *plane,
+ struct drm_crtc *crtc,
+ struct drm_framebuffer *fb,
+ int crtc_x, int crtc_y,
+ unsigned int crtc_w,
+ unsigned int crtc_h,
+ uint32_t src_x, uint32_t src_y,
+ uint32_t src_w, uint32_t src_h,
+ struct drm_modeset_acquire_ctx *ctx)
+{
+ struct drm_device *dev = plane->dev;
+ struct via_crtc *iga = container_of(crtc,
+ struct via_crtc, base);
+ struct via_framebuffer *via_fb;
+ struct openchrome_bo *user_bo;
+ struct drm_gem_object *gem;
+ uint32_t *user_bo_src, *cursor_dst;
+ bool is_iomem;
+ uint32_t i;
+ uint32_t width, height;
+ uint32_t max_width = 64, max_height = 64;
+ int ret = 0;
+
+ if (!crtc) {
+ DRM_ERROR("Invalid CRTC!\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (!crtc->enabled) {
+ DRM_ERROR("CRTC is currently disabled!\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (!fb) {
+ DRM_ERROR("Invalid frame buffer!\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if ((fb->width != 64) || (fb->height != 64)) {
+ DRM_ERROR("Cursor dimensions are expected to be "
+ "64 x 64.\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (fb->width != fb->height) {
+ DRM_ERROR("Hardware cursor is expected to have "
+ "square dimensions.\n");
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (fb != crtc->cursor->fb) {
+ if ((dev->pdev->device == PCI_DEVICE_ID_VIA_CLE266) ||
+ (dev->pdev->device == PCI_DEVICE_ID_VIA_KM400)) {
+ if ((fb->width == 64) || (fb->height == 64)) {
+ max_width >>= 1;
+ max_height >>= 1;
+ }
+ }
+
+ width = fb->width;
+ height = fb->height;
+
+ via_fb = container_of(fb, struct via_framebuffer, fb);
+ gem = via_fb->gem;
+ user_bo = container_of(gem, struct openchrome_bo, gem);
+ ret = ttm_bo_kmap(&user_bo->ttm_bo, 0,
+ user_bo->ttm_bo.num_pages,
+ &user_bo->kmap);
+ if (ret) {
+ goto exit;
+ }
+
+ user_bo_src = ttm_kmap_obj_virtual(&user_bo->kmap,
+ &is_iomem);
+ cursor_dst =
+ ttm_kmap_obj_virtual(&iga->cursor_bo->kmap,
+ &is_iomem);
+ memset_io(cursor_dst, 0x0,
+ iga->cursor_bo->kmap.bo->mem.size);
+ for (i = 0; i < height; i++) {
+ __iowrite32_copy(cursor_dst, user_bo_src,
+ width);
+ user_bo_src += width;
+ cursor_dst += max_width;
+ }
+
+ ttm_bo_kunmap(&user_bo->kmap);
+
+ openchrome_cursor_address(crtc);
+ } else {
+ crtc->cursor_x = crtc_x;
+ crtc->cursor_y = crtc_y;
+ openchrome_set_hi_location(crtc, crtc_x, crtc_y);
+ }
+
+ openchrome_show_cursor(crtc);
+exit:
+ return ret;
+}
+
+static int openchrome_cursor_disable_plane(struct drm_plane *plane,
+ struct drm_modeset_acquire_ctx *ctx)
+{
+ if (plane->crtc) {
+ openchrome_hide_cursor(plane->crtc);
+ }
+
+ if (plane->fb) {
+ drm_framebuffer_put(plane->fb);
+ plane->fb = NULL;
+ }
+
+ return 0;
+}
+
+static void openchrome_cursor_destroy(struct drm_plane *plane)
+{
+ if (plane->crtc) {
+ openchrome_hide_cursor(plane->crtc);
+ }
+
+ drm_plane_cleanup(plane);
+}
+
+const struct drm_plane_funcs openchrome_cursor_drm_plane_funcs = {
+ .update_plane = openchrome_cursor_update_plane,
+ .disable_plane = openchrome_cursor_disable_plane,
+ .destroy = openchrome_cursor_destroy,
+};
+
+const uint32_t openchrome_cursor_formats[] = {
+ DRM_FORMAT_ARGB8888,
+};
+
+const unsigned int openchrome_cursor_formats_size =
+ ARRAY_SIZE(openchrome_cursor_formats);
diff --git a/drivers/gpu/drm/openchrome/openchrome_drv.h b/drivers/gpu/drm/openchrome/openchrome_drv.h
index 349453078091..26c51025ff4c 100644
--- a/drivers/gpu/drm/openchrome/openchrome_drv.h
+++ b/drivers/gpu/drm/openchrome/openchrome_drv.h
@@ -38,6 +38,7 @@
#include <drm/drm_gem.h>
#include <drm/drm_ioctl.h>
+#include <drm/drm_plane.h>
#include "ttm/ttm_bo_api.h"
#include "ttm/ttm_bo_driver.h"
@@ -311,4 +312,8 @@ void openchrome_transmitter_display_source(
struct openchrome_drm_private *dev_private,
u32 di_port, int index);
+extern const struct drm_plane_funcs openchrome_cursor_drm_plane_funcs;
+extern const uint32_t openchrome_cursor_formats[];
+extern const unsigned int openchrome_cursor_formats_size;
+
#endif /* _OPENCHROME_DRV_H */
commit 1b5aca04bc5025db104f50df79f220d0f8b16422
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Tue Oct 15 17:19:55 2019 -0700
drm/openchrome: Rename via_cursor_address() to openchrome_cursor_address()
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 9e9fb0bbf3cd..d300c862c034 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -265,7 +265,7 @@ static void openchrome_show_cursor(struct drm_crtc *crtc)
}
}
-static void via_cursor_address(struct drm_crtc *crtc)
+static void openchrome_cursor_address(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
@@ -2522,7 +2522,7 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane,
ttm_bo_kunmap(&user_bo->kmap);
- via_cursor_address(crtc);
+ openchrome_cursor_address(crtc);
} else {
crtc->cursor_x = crtc_x;
crtc->cursor_y = crtc_y;
commit e192035ff89293307f86d3ca98da5b4cbb7e6320
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Tue Oct 15 17:17:28 2019 -0700
drm/openchrome: Rename via_hide_cursor() to openchrome_hide_cursor()
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 8c352b49c7d4..9e9fb0bbf3cd 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -168,7 +168,7 @@ static void via_iga2_set_color_depth(
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
}
-static void via_hide_cursor(struct drm_crtc *crtc)
+static void openchrome_hide_cursor(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
@@ -2538,7 +2538,7 @@ static int openchrome_cursor_disable_plane(struct drm_plane *plane,
struct drm_modeset_acquire_ctx *ctx)
{
if (plane->crtc) {
- via_hide_cursor(plane->crtc);
+ openchrome_hide_cursor(plane->crtc);
}
if (plane->fb) {
@@ -2552,7 +2552,7 @@ static int openchrome_cursor_disable_plane(struct drm_plane *plane,
static void openchrome_cursor_destroy(struct drm_plane *plane)
{
if (plane->crtc) {
- via_hide_cursor(plane->crtc);
+ openchrome_hide_cursor(plane->crtc);
}
drm_plane_cleanup(plane);
commit 4d8653644a65845882b0df98c193980a9b0c348d
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Tue Oct 15 17:07:19 2019 -0700
drm/openchrome: Rename via_show_cursor() to openchrome_show_cursor()
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 795368e68fd6..8c352b49c7d4 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -200,7 +200,7 @@ static void via_hide_cursor(struct drm_crtc *crtc)
}
}
-static void via_show_cursor(struct drm_crtc *crtc)
+static void openchrome_show_cursor(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
struct via_crtc *iga = container_of(crtc, struct via_crtc, base);
@@ -2529,7 +2529,7 @@ static int openchrome_cursor_update_plane(struct drm_plane *plane,
openchrome_set_hi_location(crtc, crtc_x, crtc_y);
}
- via_show_cursor(crtc);
+ openchrome_show_cursor(crtc);
exit:
return ret;
}
commit 6b39e5a08e9731f19bc92748b539b439b1a05800
Author: Kevin Brace <kevinbrace at gmx.com>
Date: Tue Oct 15 17:04:00 2019 -0700
drm/openchrome: Stop accessing hardware cursor from mode setting callbacks
Since cursor plane is now in use, hardware cursor should not be accessed
from primary plane related mode setting callbacks.
Signed-off-by: Kevin Brace <kevinbrace at gmx.com>
diff --git a/drivers/gpu/drm/openchrome/openchrome_crtc.c b/drivers/gpu/drm/openchrome/openchrome_crtc.c
index 5dbe22f9fcf0..795368e68fd6 100644
--- a/drivers/gpu/drm/openchrome/openchrome_crtc.c
+++ b/drivers/gpu/drm/openchrome/openchrome_crtc.c
@@ -1750,9 +1750,6 @@ via_iga1_crtc_disable(struct drm_crtc *crtc)
{
DRM_DEBUG_KMS("Entered %s.\n", __func__);
- /* Turn off the cursor */
- via_hide_cursor(crtc);
-
via_iga1_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
@@ -1957,12 +1954,6 @@ via_iga1_crtc_mode_set(struct drm_crtc *crtc,
}
ret = via_iga1_crtc_mode_set_base(crtc, x, y, fb);
-
- /* Specify the cursor pattern. */
- via_cursor_address(crtc);
-
- /* Turn off the cursor. */
- via_hide_cursor(crtc);
exit:
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
return ret;
@@ -2057,9 +2048,6 @@ via_iga2_crtc_disable(struct drm_crtc *crtc)
{
DRM_DEBUG_KMS("Entered %s.\n", __func__);
- /* Turn off the cursor */
- via_hide_cursor(crtc);
-
via_iga2_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
@@ -2295,12 +2283,6 @@ via_iga2_crtc_mode_set(struct drm_crtc *crtc,
}
ret = via_iga2_crtc_mode_set_base(crtc, x, y, fb);
-
- /* Specify the cursor pattern. */
- via_cursor_address(crtc);
-
- /* Turn off the cursor. */
- via_hide_cursor(crtc);
exit:
DRM_DEBUG_KMS("Exiting %s.\n", __func__);
return ret;
More information about the openchrome-devel
mailing list