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: Lucas Stach <l.stach@pengutronix.de> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
Родитель
2f64a55443
Коммит
a2ceec52d9
|
@ -550,8 +550,8 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
|
||||||
ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id,
|
ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id,
|
||||||
drm_rect_width(&state->src) >> 16,
|
drm_rect_width(&state->src) >> 16,
|
||||||
drm_rect_height(&state->src) >> 16,
|
drm_rect_height(&state->src) >> 16,
|
||||||
fb->pitches[0],
|
fb->pitches[0], fb->format->format,
|
||||||
fb->format->format, &eba);
|
0, &eba);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (old_state->fb && !drm_atomic_crtc_needs_modeset(crtc_state)) {
|
if (old_state->fb && !drm_atomic_crtc_needs_modeset(crtc_state)) {
|
||||||
|
|
|
@ -133,7 +133,14 @@ bool ipu_prg_format_supported(struct ipu_soc *ipu, uint32_t format,
|
||||||
if (info->num_planes != 1)
|
if (info->num_planes != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return true;
|
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);
|
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,
|
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
|
||||||
unsigned int axi_id, unsigned int width,
|
unsigned int axi_id, unsigned int width,
|
||||||
unsigned int height, unsigned int stride,
|
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);
|
int prg_chan = ipu_prg_ipu_to_prg_chan(ipu_chan->num);
|
||||||
struct ipu_prg *prg = ipu_chan->ipu->prg_priv;
|
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;
|
return ret;
|
||||||
|
|
||||||
ipu_pre_configure(prg->pres[chan->used_pre],
|
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);
|
pm_runtime_get_sync(prg->dev);
|
||||||
|
|
|
@ -344,7 +344,7 @@ void ipu_prg_channel_disable(struct ipuv3_channel *ipu_chan);
|
||||||
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
|
int ipu_prg_channel_configure(struct ipuv3_channel *ipu_chan,
|
||||||
unsigned int axi_id, unsigned int width,
|
unsigned int axi_id, unsigned int width,
|
||||||
unsigned int height, unsigned int stride,
|
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
|
* IPU CMOS Sensor Interface (csi) functions
|
||||||
|
|
Загрузка…
Ссылка в новой задаче