Commit 76e8cfd8 authored by Thomas Zimmermann's avatar Thomas Zimmermann

drm/msm: Convert to CRTC VBLANK callbacks

VBLANK callbacks in struct drm_driver are deprecated in favor of
their equivalents in struct drm_crtc_funcs. Convert msm over.
Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Tested-by: default avatarYannick Fertré <yannick.fertre@st.com>
Acked-by: default avatarRob Clark <robdclark@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123135943.24140-14-tzimmermann@suse.de
parent 273eb5ed
...@@ -1281,6 +1281,8 @@ static const struct drm_crtc_funcs dpu_crtc_funcs = { ...@@ -1281,6 +1281,8 @@ static const struct drm_crtc_funcs dpu_crtc_funcs = {
.atomic_destroy_state = dpu_crtc_destroy_state, .atomic_destroy_state = dpu_crtc_destroy_state,
.late_register = dpu_crtc_late_register, .late_register = dpu_crtc_late_register,
.early_unregister = dpu_crtc_early_unregister, .early_unregister = dpu_crtc_early_unregister,
.enable_vblank = msm_crtc_enable_vblank,
.disable_vblank = msm_crtc_disable_vblank,
}; };
static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = { static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = {
......
...@@ -481,6 +481,8 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = { ...@@ -481,6 +481,8 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = {
.reset = drm_atomic_helper_crtc_reset, .reset = drm_atomic_helper_crtc_reset,
.atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state,
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state, .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
.enable_vblank = msm_crtc_enable_vblank,
.disable_vblank = msm_crtc_disable_vblank,
}; };
static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = { static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = {
......
...@@ -471,6 +471,17 @@ static bool mdp5_crtc_get_scanout_position(struct drm_crtc *crtc, ...@@ -471,6 +471,17 @@ static bool mdp5_crtc_get_scanout_position(struct drm_crtc *crtc,
return true; return true;
} }
static u32 mdp5_crtc_get_vblank_counter(struct drm_crtc *crtc)
{
struct drm_encoder *encoder;
encoder = get_encoder_from_crtc(crtc);
if (!encoder)
return 0;
return mdp5_encoder_get_framecount(encoder);
}
static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc, static void mdp5_crtc_atomic_disable(struct drm_crtc *crtc,
struct drm_crtc_state *old_state) struct drm_crtc_state *old_state)
{ {
...@@ -1120,6 +1131,10 @@ static const struct drm_crtc_funcs mdp5_crtc_funcs = { ...@@ -1120,6 +1131,10 @@ static const struct drm_crtc_funcs mdp5_crtc_funcs = {
.cursor_set = mdp5_crtc_cursor_set, .cursor_set = mdp5_crtc_cursor_set,
.cursor_move = mdp5_crtc_cursor_move, .cursor_move = mdp5_crtc_cursor_move,
.atomic_print_state = mdp5_crtc_atomic_print_state, .atomic_print_state = mdp5_crtc_atomic_print_state,
.get_vblank_counter = mdp5_crtc_get_vblank_counter,
.enable_vblank = msm_crtc_enable_vblank,
.disable_vblank = msm_crtc_disable_vblank,
.get_vblank_timestamp = drm_crtc_vblank_helper_get_vblank_timestamp,
}; };
static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = { static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
......
...@@ -583,38 +583,6 @@ static int get_clk(struct platform_device *pdev, struct clk **clkp, ...@@ -583,38 +583,6 @@ static int get_clk(struct platform_device *pdev, struct clk **clkp,
return 0; return 0;
} }
static struct drm_encoder *get_encoder_from_crtc(struct drm_crtc *crtc)
{
struct drm_device *dev = crtc->dev;
struct drm_encoder *encoder;
drm_for_each_encoder(encoder, dev)
if (encoder->crtc == crtc)
return encoder;
return NULL;
}
static u32 mdp5_get_vblank_counter(struct drm_device *dev, unsigned int pipe)
{
struct msm_drm_private *priv = dev->dev_private;
struct drm_crtc *crtc;
struct drm_encoder *encoder;
if (pipe >= priv->num_crtcs)
return 0;
crtc = priv->crtcs[pipe];
if (!crtc)
return 0;
encoder = get_encoder_from_crtc(crtc);
if (!encoder)
return 0;
return mdp5_encoder_get_framecount(encoder);
}
struct msm_kms *mdp5_kms_init(struct drm_device *dev) struct msm_kms *mdp5_kms_init(struct drm_device *dev)
{ {
struct msm_drm_private *priv = dev->dev_private; struct msm_drm_private *priv = dev->dev_private;
...@@ -702,8 +670,6 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev) ...@@ -702,8 +670,6 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
dev->mode_config.max_width = 0xffff; dev->mode_config.max_width = 0xffff;
dev->mode_config.max_height = 0xffff; dev->mode_config.max_height = 0xffff;
dev->driver->get_vblank_timestamp = drm_calc_vbltimestamp_from_scanoutpos;
dev->driver->get_vblank_counter = mdp5_get_vblank_counter;
dev->max_vblank_count = 0; /* max_vblank_count is set on each CRTC */ dev->max_vblank_count = 0; /* max_vblank_count is set on each CRTC */
dev->vblank_disable_immediate = true; dev->vblank_disable_immediate = true;
......
...@@ -660,8 +660,10 @@ static void msm_irq_uninstall(struct drm_device *dev) ...@@ -660,8 +660,10 @@ static void msm_irq_uninstall(struct drm_device *dev)
kms->funcs->irq_uninstall(kms); kms->funcs->irq_uninstall(kms);
} }
static int msm_enable_vblank(struct drm_device *dev, unsigned int pipe) int msm_crtc_enable_vblank(struct drm_crtc *crtc)
{ {
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
struct msm_drm_private *priv = dev->dev_private; struct msm_drm_private *priv = dev->dev_private;
struct msm_kms *kms = priv->kms; struct msm_kms *kms = priv->kms;
if (!kms) if (!kms)
...@@ -670,8 +672,10 @@ static int msm_enable_vblank(struct drm_device *dev, unsigned int pipe) ...@@ -670,8 +672,10 @@ static int msm_enable_vblank(struct drm_device *dev, unsigned int pipe)
return vblank_ctrl_queue_work(priv, pipe, true); return vblank_ctrl_queue_work(priv, pipe, true);
} }
static void msm_disable_vblank(struct drm_device *dev, unsigned int pipe) void msm_crtc_disable_vblank(struct drm_crtc *crtc)
{ {
struct drm_device *dev = crtc->dev;
unsigned int pipe = crtc->index;
struct msm_drm_private *priv = dev->dev_private; struct msm_drm_private *priv = dev->dev_private;
struct msm_kms *kms = priv->kms; struct msm_kms *kms = priv->kms;
if (!kms) if (!kms)
...@@ -996,8 +1000,6 @@ static struct drm_driver msm_driver = { ...@@ -996,8 +1000,6 @@ static struct drm_driver msm_driver = {
.irq_preinstall = msm_irq_preinstall, .irq_preinstall = msm_irq_preinstall,
.irq_postinstall = msm_irq_postinstall, .irq_postinstall = msm_irq_postinstall,
.irq_uninstall = msm_irq_uninstall, .irq_uninstall = msm_irq_uninstall,
.enable_vblank = msm_enable_vblank,
.disable_vblank = msm_disable_vblank,
.gem_free_object_unlocked = msm_gem_free_object, .gem_free_object_unlocked = msm_gem_free_object,
.gem_vm_ops = &vm_ops, .gem_vm_ops = &vm_ops,
.dumb_create = msm_gem_dumb_create, .dumb_create = msm_gem_dumb_create,
......
...@@ -232,6 +232,9 @@ struct drm_atomic_state *msm_atomic_state_alloc(struct drm_device *dev); ...@@ -232,6 +232,9 @@ struct drm_atomic_state *msm_atomic_state_alloc(struct drm_device *dev);
void msm_atomic_state_clear(struct drm_atomic_state *state); void msm_atomic_state_clear(struct drm_atomic_state *state);
void msm_atomic_state_free(struct drm_atomic_state *state); void msm_atomic_state_free(struct drm_atomic_state *state);
int msm_crtc_enable_vblank(struct drm_crtc *crtc);
void msm_crtc_disable_vblank(struct drm_crtc *crtc);
int msm_gem_init_vma(struct msm_gem_address_space *aspace, int msm_gem_init_vma(struct msm_gem_address_space *aspace,
struct msm_gem_vma *vma, int npages); struct msm_gem_vma *vma, int npages);
void msm_gem_purge_vma(struct msm_gem_address_space *aspace, void msm_gem_purge_vma(struct msm_gem_address_space *aspace,
......
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