Commit ee6965c8 authored by Maxime Ripard's avatar Maxime Ripard

drm/vc4: hvs: Align the HVS atomic hooks to the new API

Since the CRTC setup in vc4 is split between the PixelValves/TXP and the
HVS, only the PV/TXP atomic hooks were updated in the previous commits, but
it makes sense to update the HVS ones too.
Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20201215154243.540115-2-maxime@cerno.tech
parent 9ede6f0a
...@@ -503,8 +503,6 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc, ...@@ -503,8 +503,6 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
struct drm_atomic_state *state) struct drm_atomic_state *state)
{ {
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
crtc);
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc); struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc); struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc);
...@@ -517,7 +515,7 @@ static void vc4_crtc_atomic_enable(struct drm_crtc *crtc, ...@@ -517,7 +515,7 @@ static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
*/ */
drm_crtc_vblank_on(crtc); drm_crtc_vblank_on(crtc);
vc4_hvs_atomic_enable(crtc, old_state); vc4_hvs_atomic_enable(crtc, state);
if (vc4_encoder->pre_crtc_configure) if (vc4_encoder->pre_crtc_configure)
vc4_encoder->pre_crtc_configure(encoder); vc4_encoder->pre_crtc_configure(encoder);
...@@ -593,7 +591,7 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc, ...@@ -593,7 +591,7 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc,
struct drm_connector_state *conn_state; struct drm_connector_state *conn_state;
int ret, i; int ret, i;
ret = vc4_hvs_atomic_check(crtc, crtc_state); ret = vc4_hvs_atomic_check(crtc, state);
if (ret) if (ret)
return ret; return ret;
......
...@@ -913,11 +913,10 @@ void vc4_irq_reset(struct drm_device *dev); ...@@ -913,11 +913,10 @@ void vc4_irq_reset(struct drm_device *dev);
extern struct platform_driver vc4_hvs_driver; extern struct platform_driver vc4_hvs_driver;
void vc4_hvs_stop_channel(struct drm_device *dev, unsigned int output); void vc4_hvs_stop_channel(struct drm_device *dev, unsigned int output);
int vc4_hvs_get_fifo_from_output(struct drm_device *dev, unsigned int output); int vc4_hvs_get_fifo_from_output(struct drm_device *dev, unsigned int output);
int vc4_hvs_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *state); int vc4_hvs_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state);
void vc4_hvs_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state); void vc4_hvs_atomic_enable(struct drm_crtc *crtc, struct drm_atomic_state *state);
void vc4_hvs_atomic_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state); void vc4_hvs_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *state);
void vc4_hvs_atomic_flush(struct drm_crtc *crtc, void vc4_hvs_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_state *state);
struct drm_atomic_state *state);
void vc4_hvs_dump_state(struct drm_device *dev); void vc4_hvs_dump_state(struct drm_device *dev);
void vc4_hvs_unmask_underrun(struct drm_device *dev, int channel); void vc4_hvs_unmask_underrun(struct drm_device *dev, int channel);
void vc4_hvs_mask_underrun(struct drm_device *dev, int channel); void vc4_hvs_mask_underrun(struct drm_device *dev, int channel);
......
...@@ -326,10 +326,10 @@ void vc4_hvs_stop_channel(struct drm_device *dev, unsigned int chan) ...@@ -326,10 +326,10 @@ void vc4_hvs_stop_channel(struct drm_device *dev, unsigned int chan)
SCALER_DISPSTATX_EMPTY); SCALER_DISPSTATX_EMPTY);
} }
int vc4_hvs_atomic_check(struct drm_crtc *crtc, int vc4_hvs_atomic_check(struct drm_crtc *crtc, struct drm_atomic_state *state)
struct drm_crtc_state *state)
{ {
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(state); struct drm_crtc_state *crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc_state);
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
struct drm_plane *plane; struct drm_plane *plane;
...@@ -341,10 +341,10 @@ int vc4_hvs_atomic_check(struct drm_crtc *crtc, ...@@ -341,10 +341,10 @@ int vc4_hvs_atomic_check(struct drm_crtc *crtc,
/* The pixelvalve can only feed one encoder (and encoders are /* The pixelvalve can only feed one encoder (and encoders are
* 1:1 with connectors.) * 1:1 with connectors.)
*/ */
if (hweight32(state->connector_mask) > 1) if (hweight32(crtc_state->connector_mask) > 1)
return -EINVAL; return -EINVAL;
drm_atomic_crtc_state_for_each_plane_state(plane, plane_state, state) drm_atomic_crtc_state_for_each_plane_state(plane, plane_state, crtc_state)
dlist_count += vc4_plane_dlist_size(plane_state); dlist_count += vc4_plane_dlist_size(plane_state);
dlist_count++; /* Account for SCALER_CTL0_END. */ dlist_count++; /* Account for SCALER_CTL0_END. */
...@@ -391,11 +391,12 @@ static void vc4_hvs_update_dlist(struct drm_crtc *crtc) ...@@ -391,11 +391,12 @@ static void vc4_hvs_update_dlist(struct drm_crtc *crtc)
} }
void vc4_hvs_atomic_enable(struct drm_crtc *crtc, void vc4_hvs_atomic_enable(struct drm_crtc *crtc,
struct drm_crtc_state *old_state) struct drm_atomic_state *state)
{ {
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct vc4_dev *vc4 = to_vc4_dev(dev); struct vc4_dev *vc4 = to_vc4_dev(dev);
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc->state); struct drm_crtc_state *new_crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(new_crtc_state);
struct drm_display_mode *mode = &crtc->state->adjusted_mode; struct drm_display_mode *mode = &crtc->state->adjusted_mode;
bool oneshot = vc4_state->feed_txp; bool oneshot = vc4_state->feed_txp;
...@@ -404,9 +405,10 @@ void vc4_hvs_atomic_enable(struct drm_crtc *crtc, ...@@ -404,9 +405,10 @@ void vc4_hvs_atomic_enable(struct drm_crtc *crtc,
} }
void vc4_hvs_atomic_disable(struct drm_crtc *crtc, void vc4_hvs_atomic_disable(struct drm_crtc *crtc,
struct drm_crtc_state *old_state) struct drm_atomic_state *state)
{ {
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(old_state); struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(old_state);
unsigned int chan = vc4_state->assigned_channel; unsigned int chan = vc4_state->assigned_channel;
......
...@@ -394,7 +394,7 @@ static int vc4_txp_atomic_check(struct drm_crtc *crtc, ...@@ -394,7 +394,7 @@ static int vc4_txp_atomic_check(struct drm_crtc *crtc,
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc_state); struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc_state);
int ret; int ret;
ret = vc4_hvs_atomic_check(crtc, crtc_state); ret = vc4_hvs_atomic_check(crtc, state);
if (ret) if (ret)
return ret; return ret;
...@@ -407,23 +407,19 @@ static int vc4_txp_atomic_check(struct drm_crtc *crtc, ...@@ -407,23 +407,19 @@ static int vc4_txp_atomic_check(struct drm_crtc *crtc,
static void vc4_txp_atomic_enable(struct drm_crtc *crtc, static void vc4_txp_atomic_enable(struct drm_crtc *crtc,
struct drm_atomic_state *state) struct drm_atomic_state *state)
{ {
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
crtc);
drm_crtc_vblank_on(crtc); drm_crtc_vblank_on(crtc);
vc4_hvs_atomic_enable(crtc, old_state); vc4_hvs_atomic_enable(crtc, state);
} }
static void vc4_txp_atomic_disable(struct drm_crtc *crtc, static void vc4_txp_atomic_disable(struct drm_crtc *crtc,
struct drm_atomic_state *state) struct drm_atomic_state *state)
{ {
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
crtc);
struct drm_device *dev = crtc->dev; struct drm_device *dev = crtc->dev;
/* Disable vblank irq handling before crtc is disabled. */ /* Disable vblank irq handling before crtc is disabled. */
drm_crtc_vblank_off(crtc); drm_crtc_vblank_off(crtc);
vc4_hvs_atomic_disable(crtc, old_state); vc4_hvs_atomic_disable(crtc, state);
/* /*
* Make sure we issue a vblank event after disabling the CRTC if * Make sure we issue a vblank event after disabling the CRTC if
......
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