Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49fb560a authored by Fabien DESSENNE's avatar Fabien DESSENNE Committed by Vincent Abriou
Browse files

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: default avatarFabien Dessenne <fabien.dessenne@st.com>
Acked-by: default avatarBenjamin Gaignard <benjamin.gaignard@linaro.org>
parent dd841870
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -332,6 +332,7 @@ struct sti_hqvdp_cmd {
 * @hqvdp_cmd_paddr:   physical address of hqvdp_cmd
 * @vtg:               vtg for main data path
 * @xp70_initialized:  true if xp70 is already initialized
 * @vtg_registered:    true if registered to VTG
 */
struct sti_hqvdp {
	struct device *dev;
@@ -347,6 +348,7 @@ struct sti_hqvdp {
	u32 hqvdp_cmd_paddr;
	struct sti_vtg *vtg;
	bool xp70_initialized;
	bool vtg_registered;
};

#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");

	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;
	}

	if (!hqvdp->xp70_initialized) {
	if (!hqvdp->xp70_initialized)
		/* Start HQVDP XP70 coprocessor */
		sti_hqvdp_start_xp70(hqvdp);

	if (!hqvdp->vtg_registered) {
		/* Prevent VTG shutdown */
		if (clk_prepare_enable(hqvdp->clk_pix_main)) {
			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");
			return -EINVAL;
		}
		hqvdp->vtg_registered = true;
	}

	DRM_DEBUG_KMS("CRTC:%d (%s) drm plane:%d (%s)\n",