mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/vc4: crtc: Rework a bit the CRTC state code
The current CRTC state reset hook in vc4 allocates a vc4_crtc_state
structure as a drm_crtc_state, and relies on the fact that vc4_crtc_state
embeds drm_crtc_state as its first member, and therefore can be safely
cast.
However, this is pretty fragile especially since there's no check for this
in place, and we're going to need to access vc4_crtc_state member at reset
so this looks like a good occasion to make it more robust.
Fixes: 6d6e500391
("drm/vc4: Allocate the right amount of space for boot-time CRTC state.")
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Tested-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200923084032.218619-1-maxime@cerno.tech
This commit is contained in:
parent
de19456135
commit
427c4a0680
@ -852,11 +852,18 @@ void vc4_crtc_destroy_state(struct drm_crtc *crtc,
|
||||
|
||||
void vc4_crtc_reset(struct drm_crtc *crtc)
|
||||
{
|
||||
struct vc4_crtc_state *vc4_crtc_state;
|
||||
|
||||
if (crtc->state)
|
||||
vc4_crtc_destroy_state(crtc, crtc->state);
|
||||
crtc->state = kzalloc(sizeof(struct vc4_crtc_state), GFP_KERNEL);
|
||||
if (crtc->state)
|
||||
__drm_atomic_helper_crtc_reset(crtc, crtc->state);
|
||||
|
||||
vc4_crtc_state = kzalloc(sizeof(*vc4_crtc_state), GFP_KERNEL);
|
||||
if (!vc4_crtc_state) {
|
||||
crtc->state = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
__drm_atomic_helper_crtc_reset(crtc, &vc4_crtc_state->base);
|
||||
}
|
||||
|
||||
static const struct drm_crtc_funcs vc4_crtc_funcs = {
|
||||
|
Loading…
Reference in New Issue
Block a user