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

Commit a2ceec52 authored by Lucas Stach's avatar Lucas Stach Committed by Philipp Zabel
Browse files

gpu: ipu-v3: prg: add modifier support



Allow to pass through the modifier to the PRE unit and extend the
format check with the supported modifiers.

Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
parent 2f64a554
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -550,8 +550,8 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
		ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id,
					  drm_rect_width(&state->src) >> 16,
					  drm_rect_height(&state->src) >> 16,
					  fb->pitches[0],
					  fb->format->format, &eba);
					  fb->pitches[0], fb->format->format,
					  0, &eba);
	}

	if (old_state->fb && !drm_atomic_crtc_needs_modeset(crtc_state)) {
+10 −3
Original line number Diff line number Diff line
@@ -133,7 +133,14 @@ bool ipu_prg_format_supported(struct ipu_soc *ipu, uint32_t format,
	if (info->num_planes != 1)
		return false;

	switch (modifier) {
	case DRM_FORMAT_MOD_LINEAR:
	case DRM_FORMAT_MOD_VIVANTE_TILED:
	case DRM_FORMAT_MOD_VIVANTE_SUPER_TILED:
		return true;
	default:
		return false;
	}
}
EXPORT_SYMBOL_GPL(ipu_prg_format_supported);

@@ -266,7 +273,7 @@ EXPORT_SYMBOL_GPL(ipu_prg_channel_disable);
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
			      unsigned int axi_id, unsigned int width,
			      unsigned int height, unsigned int stride,
			      u32 format, unsigned long *eba)
			      u32 format, uint64_t modifier, unsigned long *eba)
{
	int prg_chan = ipu_prg_ipu_to_prg_chan(ipu_chan->num);
	struct ipu_prg *prg = ipu_chan->ipu->prg_priv;
@@ -287,7 +294,7 @@ int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
		return ret;

	ipu_pre_configure(prg->pres[chan->used_pre],
			  width, height, stride, format, 0, *eba);
			  width, height, stride, format, modifier, *eba);


	pm_runtime_get_sync(prg->dev);
+1 −1
Original line number Diff line number Diff line
@@ -344,7 +344,7 @@ void ipu_prg_channel_disable(struct ipuv3_channel *ipu_chan);
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
			      unsigned int axi_id,  unsigned int width,
			      unsigned int height, unsigned int stride,
			      u32 format, unsigned long *eba);
			      u32 format, uint64_t modifier, unsigned long *eba);

/*
 * IPU CMOS Sensor Interface (csi) functions