drm/sti: load XP70 firmware only once
When a plane is enabled, after having been disabled, do not reload XP70 firmware again, but only register VTG again Signed-off-by: Fabien Dessenne <fabien.dessenne@st.com> Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
This commit is contained in:
parent
dd841870d0
commit
49fb560a7b
|
@ -332,6 +332,7 @@ struct sti_hqvdp_cmd {
|
||||||
* @hqvdp_cmd_paddr: physical address of hqvdp_cmd
|
* @hqvdp_cmd_paddr: physical address of hqvdp_cmd
|
||||||
* @vtg: vtg for main data path
|
* @vtg: vtg for main data path
|
||||||
* @xp70_initialized: true if xp70 is already initialized
|
* @xp70_initialized: true if xp70 is already initialized
|
||||||
|
* @vtg_registered: true if registered to VTG
|
||||||
*/
|
*/
|
||||||
struct sti_hqvdp {
|
struct sti_hqvdp {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
@ -347,6 +348,7 @@ struct sti_hqvdp {
|
||||||
u32 hqvdp_cmd_paddr;
|
u32 hqvdp_cmd_paddr;
|
||||||
struct sti_vtg *vtg;
|
struct sti_vtg *vtg;
|
||||||
bool xp70_initialized;
|
bool xp70_initialized;
|
||||||
|
bool vtg_registered;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define to_sti_hqvdp(x) container_of(x, struct sti_hqvdp, plane)
|
#define to_sti_hqvdp(x) container_of(x, struct sti_hqvdp, plane)
|
||||||
|
@ -771,7 +773,7 @@ static void sti_hqvdp_disable(struct sti_hqvdp *hqvdp)
|
||||||
DRM_ERROR("XP70 could not revert to idle\n");
|
DRM_ERROR("XP70 could not revert to idle\n");
|
||||||
|
|
||||||
hqvdp->plane.status = STI_PLANE_DISABLED;
|
hqvdp->plane.status = STI_PLANE_DISABLED;
|
||||||
hqvdp->xp70_initialized = false;
|
hqvdp->vtg_registered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1064,10 +1066,11 @@ static int sti_hqvdp_atomic_check(struct drm_plane *drm_plane,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hqvdp->xp70_initialized) {
|
if (!hqvdp->xp70_initialized)
|
||||||
/* Start HQVDP XP70 coprocessor */
|
/* Start HQVDP XP70 coprocessor */
|
||||||
sti_hqvdp_start_xp70(hqvdp);
|
sti_hqvdp_start_xp70(hqvdp);
|
||||||
|
|
||||||
|
if (!hqvdp->vtg_registered) {
|
||||||
/* Prevent VTG shutdown */
|
/* Prevent VTG shutdown */
|
||||||
if (clk_prepare_enable(hqvdp->clk_pix_main)) {
|
if (clk_prepare_enable(hqvdp->clk_pix_main)) {
|
||||||
DRM_ERROR("Failed to prepare/enable pix main clk\n");
|
DRM_ERROR("Failed to prepare/enable pix main clk\n");
|
||||||
|
@ -1081,6 +1084,7 @@ static int sti_hqvdp_atomic_check(struct drm_plane *drm_plane,
|
||||||
DRM_ERROR("Cannot register VTG notifier\n");
|
DRM_ERROR("Cannot register VTG notifier\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
hqvdp->vtg_registered = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DRM_DEBUG_KMS("CRTC:%d (%s) drm plane:%d (%s)\n",
|
DRM_DEBUG_KMS("CRTC:%d (%s) drm plane:%d (%s)\n",
|
||||||
|
|
Loading…
Reference in New Issue