mirror of
https://github.com/torvalds/linux.git
synced 2026-06-05 04:56:13 +02:00
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: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20201215154243.540115-2-maxime@cerno.tech
This commit is contained in:
parent
9ede6f0a55
commit
ee6965c864
|
|
@ -503,8 +503,6 @@ static void vc4_crtc_atomic_disable(struct drm_crtc *crtc,
|
|||
static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
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 vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
|
||||
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc);
|
||||
|
|
@ -517,7 +515,7 @@ static void vc4_crtc_atomic_enable(struct drm_crtc *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)
|
||||
vc4_encoder->pre_crtc_configure(encoder);
|
||||
|
|
@ -593,7 +591,7 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc,
|
|||
struct drm_connector_state *conn_state;
|
||||
int ret, i;
|
||||
|
||||
ret = vc4_hvs_atomic_check(crtc, crtc_state);
|
||||
ret = vc4_hvs_atomic_check(crtc, state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
|||
|
|
@ -913,11 +913,10 @@ void vc4_irq_reset(struct drm_device *dev);
|
|||
extern struct platform_driver vc4_hvs_driver;
|
||||
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_atomic_check(struct drm_crtc *crtc, struct drm_crtc_state *state);
|
||||
void vc4_hvs_atomic_enable(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
|
||||
void vc4_hvs_atomic_disable(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
|
||||
void vc4_hvs_atomic_flush(struct drm_crtc *crtc,
|
||||
struct drm_atomic_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_atomic_state *state);
|
||||
void vc4_hvs_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_state *state);
|
||||
void vc4_hvs_atomic_flush(struct drm_crtc *crtc, struct drm_atomic_state *state);
|
||||
void vc4_hvs_dump_state(struct drm_device *dev);
|
||||
void vc4_hvs_unmask_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)
|
|||
SCALER_DISPSTATX_EMPTY);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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 vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
struct drm_plane *plane;
|
||||
|
|
@ -341,10 +341,10 @@ int vc4_hvs_atomic_check(struct drm_crtc *crtc,
|
|||
/* The pixelvalve can only feed one encoder (and encoders are
|
||||
* 1:1 with connectors.)
|
||||
*/
|
||||
if (hweight32(state->connector_mask) > 1)
|
||||
if (hweight32(crtc_state->connector_mask) > 1)
|
||||
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++; /* Account for SCALER_CTL0_END. */
|
||||
|
|
@ -391,11 +391,12 @@ static void vc4_hvs_update_dlist(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 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;
|
||||
bool oneshot = vc4_state->feed_txp;
|
||||
|
||||
|
|
@ -404,9 +405,10 @@ void vc4_hvs_atomic_enable(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_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
|
||||
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(old_state);
|
||||
unsigned int chan = vc4_state->assigned_channel;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
int ret;
|
||||
|
||||
ret = vc4_hvs_atomic_check(crtc, crtc_state);
|
||||
ret = vc4_hvs_atomic_check(crtc, state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
@ -407,23 +407,19 @@ static int vc4_txp_atomic_check(struct drm_crtc *crtc,
|
|||
static void vc4_txp_atomic_enable(struct drm_crtc *crtc,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
|
||||
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,
|
||||
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;
|
||||
|
||||
/* Disable vblank irq handling before crtc is disabled. */
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user