Commit 30c63715 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/plane-helper: Export individual helpers

Export the individual plane helpers that make up the plane functions and
align the naming with other helpers. The plane helpers are for non-atomic
modesetting and exporting them will simplify a later conversion of drivers
to atomic modesetting.

With struct drm_plane_funcs removed from drm_plane_helper.h, also remove
the include statements. It only needs linux/types.h for uint32_t and a
number of forward declarations.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: default avatarSam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220720083058.15371-6-tzimmermann@suse.de
parent 254e5e88
...@@ -85,6 +85,7 @@ ...@@ -85,6 +85,7 @@
#include <drm/drm_vblank.h> #include <drm/drm_vblank.h>
#include <drm/drm_audio_component.h> #include <drm/drm_audio_component.h>
#include <drm/drm_gem_atomic_helper.h> #include <drm/drm_gem_atomic_helper.h>
#include <drm/drm_plane_helper.h>
#include "ivsrcid/dcn/irqsrcs_dcn_1_0.h" #include "ivsrcid/dcn/irqsrcs_dcn_1_0.h"
...@@ -7717,7 +7718,7 @@ static void dm_drm_plane_destroy_state(struct drm_plane *plane, ...@@ -7717,7 +7718,7 @@ static void dm_drm_plane_destroy_state(struct drm_plane *plane,
static const struct drm_plane_funcs dm_plane_funcs = { static const struct drm_plane_funcs dm_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
.reset = dm_drm_plane_reset, .reset = dm_drm_plane_reset,
.atomic_duplicate_state = dm_drm_plane_duplicate_state, .atomic_duplicate_state = dm_drm_plane_duplicate_state,
.atomic_destroy_state = dm_drm_plane_destroy_state, .atomic_destroy_state = dm_drm_plane_destroy_state,
......
...@@ -288,7 +288,7 @@ struct drm_plane_state *armada_plane_duplicate_state(struct drm_plane *plane) ...@@ -288,7 +288,7 @@ struct drm_plane_state *armada_plane_duplicate_state(struct drm_plane *plane)
static const struct drm_plane_funcs armada_primary_plane_funcs = { static const struct drm_plane_funcs armada_primary_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
.reset = armada_plane_reset, .reset = armada_plane_reset,
.atomic_duplicate_state = armada_plane_duplicate_state, .atomic_duplicate_state = armada_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
......
...@@ -108,6 +108,12 @@ static const uint32_t safe_modeset_formats[] = { ...@@ -108,6 +108,12 @@ static const uint32_t safe_modeset_formats[] = {
DRM_FORMAT_ARGB8888, DRM_FORMAT_ARGB8888,
}; };
static const struct drm_plane_funcs primary_plane_funcs = {
.update_plane = drm_plane_helper_update_primary,
.disable_plane = drm_plane_helper_disable_primary,
.destroy = drm_plane_helper_destroy,
};
static struct drm_plane *create_primary_plane(struct drm_device *dev) static struct drm_plane *create_primary_plane(struct drm_device *dev)
{ {
struct drm_plane *primary; struct drm_plane *primary;
...@@ -127,7 +133,7 @@ static struct drm_plane *create_primary_plane(struct drm_device *dev) ...@@ -127,7 +133,7 @@ static struct drm_plane *create_primary_plane(struct drm_device *dev)
/* possible_crtc's will be filled in later by crtc_init */ /* possible_crtc's will be filled in later by crtc_init */
ret = drm_universal_plane_init(dev, primary, 0, ret = drm_universal_plane_init(dev, primary, 0,
&drm_primary_helper_funcs, &primary_plane_funcs,
safe_modeset_formats, safe_modeset_formats,
ARRAY_SIZE(safe_modeset_formats), ARRAY_SIZE(safe_modeset_formats),
NULL, NULL,
......
...@@ -145,13 +145,36 @@ static int drm_plane_helper_check_update(struct drm_plane *plane, ...@@ -145,13 +145,36 @@ static int drm_plane_helper_check_update(struct drm_plane *plane,
return 0; return 0;
} }
static int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *crtc, /**
struct drm_framebuffer *fb, * drm_plane_helper_update_primary - Helper for updating primary planes
int crtc_x, int crtc_y, * @plane: plane to update
unsigned int crtc_w, unsigned int crtc_h, * @crtc: the plane's new CRTC
uint32_t src_x, uint32_t src_y, * @fb: the plane's new framebuffer
uint32_t src_w, uint32_t src_h, * @crtc_x: x coordinate within CRTC
struct drm_modeset_acquire_ctx *ctx) * @crtc_y: y coordinate within CRTC
* @crtc_w: width coordinate within CRTC
* @crtc_h: height coordinate within CRTC
* @src_x: x coordinate within source
* @src_y: y coordinate within source
* @src_w: width coordinate within source
* @src_h: height coordinate within source
* @ctx: modeset locking context
*
* This helper validates the given parameters and updates the primary plane.
*
* This function is only useful for non-atomic modesetting. Don't use
* it in new drivers.
*
* Returns:
* Zero on success, or an errno code otherwise.
*/
int drm_plane_helper_update_primary(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_mode_set set = { struct drm_mode_set set = {
.crtc = crtc, .crtc = crtc,
...@@ -218,31 +241,40 @@ static int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *c ...@@ -218,31 +241,40 @@ static int drm_primary_helper_update(struct drm_plane *plane, struct drm_crtc *c
kfree(connector_list); kfree(connector_list);
return ret; return ret;
} }
EXPORT_SYMBOL(drm_plane_helper_update_primary);
static int drm_primary_helper_disable(struct drm_plane *plane, /**
struct drm_modeset_acquire_ctx *ctx) * drm_plane_helper_disable_primary - Helper for disabling primary planes
* @plane: plane to disable
* @ctx: modeset locking context
*
* This helper returns an error when trying to disable the primary
* plane.
*
* This function is only useful for non-atomic modesetting. Don't use
* it in new drivers.
*
* Returns:
* An errno code.
*/
int drm_plane_helper_disable_primary(struct drm_plane *plane,
struct drm_modeset_acquire_ctx *ctx)
{ {
return -EINVAL; return -EINVAL;
} }
EXPORT_SYMBOL(drm_plane_helper_disable_primary);
/** /**
* drm_primary_helper_destroy() - Helper for primary plane destruction * drm_plane_helper_destroy() - Helper for primary plane destruction
* @plane: plane to destroy * @plane: plane to destroy
* *
* Provides a default plane destroy handler for primary planes. This handler * Provides a default plane destroy handler for primary planes. This handler
* is called during CRTC destruction. We disable the primary plane, remove * is called during CRTC destruction. We disable the primary plane, remove
* it from the DRM plane list, and deallocate the plane structure. * it from the DRM plane list, and deallocate the plane structure.
*/ */
void drm_primary_helper_destroy(struct drm_plane *plane) void drm_plane_helper_destroy(struct drm_plane *plane)
{ {
drm_plane_cleanup(plane); drm_plane_cleanup(plane);
kfree(plane); kfree(plane);
} }
EXPORT_SYMBOL(drm_primary_helper_destroy); EXPORT_SYMBOL(drm_plane_helper_destroy);
const struct drm_plane_funcs drm_primary_helper_funcs = {
.update_plane = drm_primary_helper_update,
.disable_plane = drm_primary_helper_disable,
.destroy = drm_primary_helper_destroy,
};
EXPORT_SYMBOL(drm_primary_helper_funcs);
...@@ -1275,6 +1275,12 @@ static const uint32_t modeset_formats[] = { ...@@ -1275,6 +1275,12 @@ static const uint32_t modeset_formats[] = {
DRM_FORMAT_XRGB1555, DRM_FORMAT_XRGB1555,
}; };
static const struct drm_plane_funcs nv04_primary_plane_funcs = {
.update_plane = drm_plane_helper_update_primary,
.disable_plane = drm_plane_helper_disable_primary,
.destroy = drm_plane_helper_destroy,
};
static struct drm_plane * static struct drm_plane *
create_primary_plane(struct drm_device *dev) create_primary_plane(struct drm_device *dev)
{ {
...@@ -1289,7 +1295,7 @@ create_primary_plane(struct drm_device *dev) ...@@ -1289,7 +1295,7 @@ create_primary_plane(struct drm_device *dev)
/* possible_crtc's will be filled in later by crtc_init */ /* possible_crtc's will be filled in later by crtc_init */
ret = drm_universal_plane_init(dev, primary, 0, ret = drm_universal_plane_init(dev, primary, 0,
&drm_primary_helper_funcs, &nv04_primary_plane_funcs,
modeset_formats, modeset_formats,
ARRAY_SIZE(modeset_formats), NULL, ARRAY_SIZE(modeset_formats), NULL,
DRM_PLANE_TYPE_PRIMARY, NULL); DRM_PLANE_TYPE_PRIMARY, NULL);
......
...@@ -902,7 +902,7 @@ static const struct drm_plane_helper_funcs qxl_cursor_helper_funcs = { ...@@ -902,7 +902,7 @@ static const struct drm_plane_helper_funcs qxl_cursor_helper_funcs = {
static const struct drm_plane_funcs qxl_cursor_plane_funcs = { static const struct drm_plane_funcs qxl_cursor_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
.reset = drm_atomic_helper_plane_reset, .reset = drm_atomic_helper_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
...@@ -924,7 +924,7 @@ static const struct drm_plane_helper_funcs primary_helper_funcs = { ...@@ -924,7 +924,7 @@ static const struct drm_plane_helper_funcs primary_helper_funcs = {
static const struct drm_plane_funcs qxl_primary_plane_funcs = { static const struct drm_plane_funcs qxl_primary_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
.reset = drm_atomic_helper_plane_reset, .reset = drm_atomic_helper_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
......
...@@ -477,7 +477,7 @@ static const struct drm_plane_helper_funcs vbox_cursor_helper_funcs = { ...@@ -477,7 +477,7 @@ static const struct drm_plane_helper_funcs vbox_cursor_helper_funcs = {
static const struct drm_plane_funcs vbox_cursor_plane_funcs = { static const struct drm_plane_funcs vbox_cursor_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
DRM_GEM_SHADOW_PLANE_FUNCS, DRM_GEM_SHADOW_PLANE_FUNCS,
}; };
...@@ -496,7 +496,7 @@ static const struct drm_plane_helper_funcs vbox_primary_helper_funcs = { ...@@ -496,7 +496,7 @@ static const struct drm_plane_helper_funcs vbox_primary_helper_funcs = {
static const struct drm_plane_funcs vbox_primary_plane_funcs = { static const struct drm_plane_funcs vbox_primary_plane_funcs = {
.update_plane = drm_atomic_helper_update_plane, .update_plane = drm_atomic_helper_update_plane,
.disable_plane = drm_atomic_helper_disable_plane, .disable_plane = drm_atomic_helper_disable_plane,
.destroy = drm_primary_helper_destroy, .destroy = drm_plane_helper_destroy,
.reset = drm_atomic_helper_plane_reset, .reset = drm_atomic_helper_plane_reset,
.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_plane_destroy_state, .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
......
...@@ -24,12 +24,22 @@ ...@@ -24,12 +24,22 @@
#ifndef DRM_PLANE_HELPER_H #ifndef DRM_PLANE_HELPER_H
#define DRM_PLANE_HELPER_H #define DRM_PLANE_HELPER_H
#include <drm/drm_rect.h> #include <linux/types.h>
#include <drm/drm_crtc.h>
#include <drm/drm_modeset_helper_vtables.h>
#include <drm/drm_modeset_helper.h>
void drm_primary_helper_destroy(struct drm_plane *plane); struct drm_crtc;
extern const struct drm_plane_funcs drm_primary_helper_funcs; struct drm_framebuffer;
struct drm_modeset_acquire_ctx;
struct drm_plane;
int drm_plane_helper_update_primary(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);
int drm_plane_helper_disable_primary(struct drm_plane *plane,
struct drm_modeset_acquire_ctx *ctx);
void drm_plane_helper_destroy(struct drm_plane *plane);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment