From: Thomas Zimmermann <tzimmermann@suse.de>
To: airlied@redhat.com, daniel@ffwll.ch, noralf@tronnes.org,
kraxel@redhat.com, emil.l.velikov@gmail.com, sam@ravnborg.org,
yc_chen@aspeedtech.com
Cc: Thomas Zimmermann <tzimmermann@suse.de>, dri-devel@lists.freedesktop.org
Subject: [PATCH v2 06/14] drm/ast: Replace ast_cursor_move() with ast_cursor_show()
Date: Thu, 2 Jul 2020 13:50:21 +0200 [thread overview]
Message-ID: <20200702115029.5281-7-tzimmermann@suse.de> (raw)
In-Reply-To: <20200702115029.5281-1-tzimmermann@suse.de>
Having a cursor move function is misleading, as it actually enables the
cursor's image for displaying. So rename it to ast_cursor_show(). It's
semantics is to show a cursor at the specified location on the screen.
The displayed cursor is always the image in the cursor front BO.
This change also simplifies struct ast_crtc to being a mere wrapper around
around struct drm_crtc. It will be removed by a later patch.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/ast/ast_cursor.c | 42 ++++++++++++++++++++------------
drivers/gpu/drm/ast/ast_drv.h | 4 +--
drivers/gpu/drm/ast/ast_mode.c | 12 ++++-----
3 files changed, 35 insertions(+), 23 deletions(-)
diff --git a/drivers/gpu/drm/ast/ast_cursor.c b/drivers/gpu/drm/ast/ast_cursor.c
index 815d95b2f392..8f8fdc831830 100644
--- a/drivers/gpu/drm/ast/ast_cursor.c
+++ b/drivers/gpu/drm/ast/ast_cursor.c
@@ -227,12 +227,27 @@ void ast_cursor_page_flip(struct ast_private *ast)
ast->cursor.next_index %= ARRAY_SIZE(ast->cursor.gbo);
}
-int ast_cursor_move(struct drm_crtc *crtc, int x, int y)
+static void ast_cursor_set_location(struct ast_private *ast, u16 x, u16 y,
+ u8 x_offset, u8 y_offset)
+{
+ u8 x0 = (x & 0x00ff);
+ u8 x1 = (x & 0x0f00) >> 8;
+ u8 y0 = (y & 0x00ff);
+ u8 y1 = (y & 0x0700) >> 8;
+
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc2, x_offset);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc3, y_offset);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc4, x0);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc5, x1);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc6, y0);
+ ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc7, y1);
+}
+
+int ast_cursor_show(struct ast_private *ast, int x, int y,
+ unsigned int offset_x, unsigned int offset_y)
{
- struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
- struct ast_private *ast = to_ast_private(crtc->dev);
struct drm_gem_vram_object *gbo;
- int x_offset, y_offset;
+ u8 x_offset, y_offset;
u8 *dst, *sig;
u8 jreg;
@@ -245,23 +260,20 @@ int ast_cursor_move(struct drm_crtc *crtc, int x, int y)
writel(x, sig + AST_HWC_SIGNATURE_X);
writel(y, sig + AST_HWC_SIGNATURE_Y);
- x_offset = ast_crtc->offset_x;
- y_offset = ast_crtc->offset_y;
if (x < 0) {
- x_offset = (-x) + ast_crtc->offset_x;
+ x_offset = (-x) + offset_x;
x = 0;
+ } else {
+ x_offset = offset_x;
}
-
if (y < 0) {
- y_offset = (-y) + ast_crtc->offset_y;
+ y_offset = (-y) + offset_y;
y = 0;
+ } else {
+ y_offset = offset_y;
}
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc2, x_offset);
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc3, y_offset);
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc4, (x & 0xff));
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc5, ((x >> 8) & 0x0f));
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc6, (y & 0xff));
- ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xc7, ((y >> 8) & 0x07));
+
+ ast_cursor_set_location(ast, x, y, x_offset, y_offset);
/* dummy write to fire HWC */
jreg = 0x02 |
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index e973c1ab96cb..b00091798ef5 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -239,7 +239,6 @@ struct ast_connector {
struct ast_crtc {
struct drm_crtc base;
- u8 offset_x, offset_y;
};
#define to_ast_crtc(x) container_of(x, struct ast_crtc, base)
@@ -320,6 +319,7 @@ int ast_cursor_init(struct ast_private *ast);
void ast_cursor_fini(struct ast_private *ast);
int ast_cursor_blit(struct ast_private *ast, struct drm_framebuffer *fb);
void ast_cursor_page_flip(struct ast_private *ast);
-int ast_cursor_move(struct drm_crtc *crtc, int x, int y);
+int ast_cursor_show(struct ast_private *ast, int x, int y,
+ unsigned int offset_x, unsigned int offset_y);
#endif
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 32365f16c78c..b452f9e28d7c 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -661,21 +661,21 @@ ast_cursor_plane_helper_atomic_update(struct drm_plane *plane,
struct drm_plane_state *old_state)
{
struct drm_plane_state *state = plane->state;
- struct drm_crtc *crtc = state->crtc;
struct drm_framebuffer *fb = state->fb;
- struct ast_private *ast = to_ast_private(plane->dev);
- struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
+ struct ast_private *ast = plane->dev->dev_private;
+ unsigned int offset_x, offset_y;
u8 jreg;
- ast_crtc->offset_x = AST_MAX_HWC_WIDTH - fb->width;
- ast_crtc->offset_y = AST_MAX_HWC_WIDTH - fb->height;
+ offset_x = AST_MAX_HWC_WIDTH - fb->width;
+ offset_y = AST_MAX_HWC_WIDTH - fb->height;
if (state->fb != old_state->fb) {
/* A new cursor image was installed. */
ast_cursor_page_flip(ast);
}
- ast_cursor_move(crtc, state->crtc_x, state->crtc_y);
+ ast_cursor_show(ast, state->crtc_x, state->crtc_y,
+ offset_x, offset_y);
jreg = 0x2;
/* enable ARGB cursor */
--
2.27.0
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2020-07-02 11:50 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-02 11:50 [PATCH v2 00/14] drm/ast: Managed modesetting Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 01/14] drm/ast: Move cursor functions to ast_cursor.c Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 02/14] drm/ast: Pass struct ast_private instance to cursor init/fini functions Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 03/14] drm/ast: Move cursor fb pinning and mapping into helper Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 04/14] drm/ast: Update cursor image and checksum from same function Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 05/14] drm/ast: Move cursor pageflip into helper Thomas Zimmermann
2020-07-02 11:50 ` Thomas Zimmermann [this message]
2020-07-02 11:50 ` [PATCH v2 07/14] drm/ast: Don't enable HW cursors twice during atomic update Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 08/14] drm/ast: Add helper to hide cursor Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 09/14] drm/ast: Keep cursor HW BOs mapped Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 10/14] drm/ast: Managed cursor release Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 11/14] drm/ast: Init cursors before creating modesetting structures Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 12/14] drm/ast: Replace struct ast_crtc with struct drm_crtc Thomas Zimmermann
2020-07-03 6:38 ` Sam Ravnborg
2020-07-03 6:51 ` Thomas Zimmermann
2020-07-03 11:11 ` Sam Ravnborg
2020-07-02 11:50 ` [PATCH v2 13/14] drm/ast: Use managed mode-config init Thomas Zimmermann
2020-07-02 11:50 ` [PATCH v2 14/14] drm/ast: Initialize mode setting in ast_mode_config_init() Thomas Zimmermann
2020-07-03 6:44 ` [PATCH v2 00/14] drm/ast: Managed modesetting Sam Ravnborg
2020-07-03 6:53 ` Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200702115029.5281-7-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@redhat.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=emil.l.velikov@gmail.com \
--cc=kraxel@redhat.com \
--cc=noralf@tronnes.org \
--cc=sam@ravnborg.org \
--cc=yc_chen@aspeedtech.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.