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

Commit 2d123af8 authored by Steve Cohen's avatar Steve Cohen
Browse files

drm/msm: update framebuffer pixel formats, modifier & num_planes



This change updates the DRM driver ported from 4.9 to align with
the corresponding DRM framework changes.  This includes using the
new drm_format_info structure for the pixel format, depth, number
of planes, bit's per pixel, and horizontal/vertical subsumpling.
Also, in 4.9 "modifiers" was an array which could contain a unique
value per plane.  This is now deprecated in favor of using a single
modifier for all planes.  Any formats which require the old
functionality should enumerate a new modifier for each unique
combination of modifiers needed.

Change-Id: I1c6fb29aef5f7a8d2bcd646c70059ba1251be721
Signed-off-by: default avatarSteve Cohen <cohens@codeaurora.org>
parent 117f2bd5
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -174,8 +174,7 @@ uint32_t mdp_get_formats(uint32_t *pixel_formats, uint32_t max_formats,
const struct msm_format *mdp_get_format(
		struct msm_kms *kms,
		uint32_t format,
		const uint64_t *modifiers,
		uint32_t modifiers_len)
		const uint64_t modifier)
{
	int i;
	for (i = 0; i < ARRAY_SIZE(formats); i++) {
+1 −2
Original line number Diff line number Diff line
@@ -99,8 +99,7 @@ struct mdp_format {

uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats, bool rgb_only);
const struct msm_format *mdp_get_format(struct msm_kms *kms,
		uint32_t format, const uint64_t *modifiers,
		uint32_t modifiers_len);
		uint32_t format, const uint64_t *modifier);

/* MDP capabilities */
#define MDP_CAP_SMP		BIT(0)	/* Shared Memory Pool                 */
+7 −7
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ static void msm_framebuffer_destroy(struct drm_framebuffer *fb)
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;

	DBG("destroy: FB ID: %d (%p)", fb->base.id, fb);

@@ -99,7 +99,7 @@ void msm_framebuffer_describe(struct drm_framebuffer *fb, struct seq_file *m)
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;
	seq_printf(m, "fb: %dx%d@%4.4s (%2d, ID:%d)\n",
			fb->width, fb->height, (char *)&fb->format->format,
			drm_framebuffer_read_refcount(fb), fb->base.id);
@@ -140,7 +140,7 @@ static int msm_framebuffer_kmap(struct drm_framebuffer *fb)
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;
	if (atomic_inc_return(&msm_fb->kmap_count) > 1)
		return 0;

@@ -171,7 +171,7 @@ static void msm_framebuffer_kunmap(struct drm_framebuffer *fb)
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;
	if (atomic_dec_return(&msm_fb->kmap_count) > 0)
		return;

@@ -205,7 +205,7 @@ int msm_framebuffer_prepare(struct drm_framebuffer *fb,
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;
	for (i = 0; i < n; i++) {
		ret = msm_gem_get_iova(msm_fb->planes[i], aspace, &iova);
		DBG("FB[%u]: iova[%d]: %08llx (%d)", fb->base.id, i, iova, ret);
@@ -231,7 +231,7 @@ void msm_framebuffer_cleanup(struct drm_framebuffer *fb,
	}

	msm_fb = to_msm_framebuffer(fb);
	n = drm_format_num_planes(fb->pixel_format);
	n = fb->format->num_planes;

	if (msm_fb->flags & MSM_FRAMEBUFFER_FLAG_KMAP)
		msm_framebuffer_kunmap(fb);
@@ -346,7 +346,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
	vsub = drm_format_vert_chroma_subsampling(mode_cmd->pixel_format);

	format = kms->funcs->get_format(kms, mode_cmd->pixel_format,
			mode_cmd->modifier, num_planes);
			mode_cmd->modifier[0]);
	if (!format) {
		dev_err(dev->dev, "unsupported pixel format: %4.4s\n",
				(char *)&mode_cmd->pixel_format);
+1 −2
Original line number Diff line number Diff line
@@ -74,8 +74,7 @@ struct msm_kms_funcs {
	/* get msm_format w/ optional format modifiers from drm_mode_fb_cmd2 */
	const struct msm_format *(*get_format)(struct msm_kms *kms,
					const uint32_t format,
					const uint64_t *modifiers,
					const uint32_t modifiers_len);
					const uint64_t modifier);
	/* do format checking on format modified through fb_cmd2 modifiers */
	int (*check_modified_format)(const struct msm_kms *kms,
			const struct msm_format *msm_fmt,
+9 −8
Original line number Diff line number Diff line
@@ -1387,7 +1387,7 @@ static void _sde_crtc_blend_setup_mixer(struct drm_crtc *crtc,
		SDE_EVT32(DRMID(crtc), DRMID(plane), stage_idx,
			sde_plane_pipe(plane) - SSPP_VIG0, pstate->stage,
			pstate->multirect_index, pstate->multirect_mode,
			format->base.pixel_format, fb ? fb->modifier[0] : 0);
			format->base.pixel_format, fb ? fb->modifier : 0);

		/* blend config update */
		for (lm_idx = 0; lm_idx < sde_crtc->num_mixers; lm_idx++) {
@@ -5269,14 +5269,15 @@ static int _sde_debugfs_status_show(struct seq_file *s, void *data)
		if (plane->state->fb) {
			fb = plane->state->fb;

			seq_printf(s, "\tfb:%d image format:%4.4s wxh:%ux%u bpp:%d\n",
				fb->base.id, (char *) &fb->pixel_format,
				fb->width, fb->height, fb->bits_per_pixel);
			seq_printf(s, "\tfb:%d image format:%4.4s wxh:%ux%u ",
				fb->base.id, (char *) &fb->format->format,
				fb->width, fb->height);
			for (i = 0; i < ARRAY_SIZE(fb->format->cpp); ++i)
				seq_printf(s, "cpp[%d]:%u ",
						i, fb->format->cpp[i]);
			seq_puts(s, "\n\t");

			seq_puts(s, "\t");
			for (i = 0; i < ARRAY_SIZE(fb->modifier); i++)
				seq_printf(s, "modifier[%d]:%8llu ", i,
							fb->modifier[i]);
			seq_printf(s, "modifier:%8llu ", fb->modifier);
			seq_puts(s, "\n");

			seq_puts(s, "\t");
Loading