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

Commit fcad73b9 authored by Liviu Dudau's avatar Liviu Dudau
Browse files

drm/mali-dp: Rotated planes need a larger pitch size.



Rotated planes need a pitch size that is aligned to 8 bytes
for older DP500 and DP550 and at least 64 bytes for DP650. Replace
the malidp_hw_pitch_valid() function with one that calculates
the correct pitch alignment to take into account rotation.

Signed-off-by: default avatarLiviu Dudau <liviu.dudau@arm.com>
parent 963976cf
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -285,10 +285,16 @@ void malidp_se_irq_fini(struct drm_device *drm);
u8 malidp_hw_get_format_id(const struct malidp_hw_regmap *map,
			   u8 layer_id, u32 format);

static inline bool malidp_hw_pitch_valid(struct malidp_hw_device *hwdev,
					 unsigned int pitch)
static inline u8 malidp_hw_get_pitch_align(struct malidp_hw_device *hwdev, bool rotated)
{
	return !(pitch & (hwdev->hw->map.bus_align_bytes - 1));
	/*
	 * only hardware that cannot do 8 bytes bus alignments have further
	 * constraints on rotated planes
	 */
	if (hwdev->hw->map.bus_align_bytes == 8)
		return 8;
	else
		return hwdev->hw->map.bus_align_bytes << (rotated ? 2 : 0);
}

/* U16.16 */
+3 −1
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ static int malidp_de_plane_check(struct drm_plane *plane,
{
	struct malidp_plane *mp = to_malidp_plane(plane);
	struct malidp_plane_state *ms = to_malidp_plane_state(state);
	bool rotated = state->rotation & MALIDP_ROTATED_MASK;
	struct drm_framebuffer *fb;
	int i, ret;

@@ -191,7 +192,8 @@ static int malidp_de_plane_check(struct drm_plane *plane,

	ms->n_planes = fb->format->num_planes;
	for (i = 0; i < ms->n_planes; i++) {
		if (!malidp_hw_pitch_valid(mp->hwdev, fb->pitches[i])) {
		u8 alignment = malidp_hw_get_pitch_align(mp->hwdev, rotated);
		if (fb->pitches[i] & (alignment - 1)) {
			DRM_DEBUG_KMS("Invalid pitch %u for plane %d\n",
				      fb->pitches[i], i);
			return -EINVAL;