FAILED: patch "[PATCH] drm/ingenic: Switch IPU plane to type OVERLAY" failed to apply to 5.10-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 68b433fe6937cfa3f8975d18643d5956254edd6a Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Mon, 29 Mar 2021 18:50:45 +0100
Subject: [PATCH] drm/ingenic: Switch IPU plane to type OVERLAY
It should have been an OVERLAY from the beginning. The documentation stipulates that there should be an unique PRIMARY plane per CRTC.
drivers/gpu/drm/ingenic/ingenic-drm-drv.c +5 -6
@@ -419,7 +419,7 @@ static void ingenic_drm_plane_enable(struct ingenic_drm *priv,unsigned int en_bit;if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) +if (plane != &priv->f0) en_bit =JZ_LCD_OSDC_F1EN ;else en_bit =JZ_LCD_OSDC_F0EN ;
@@ -434,7 +434,7 @@ void ingenic_drm_plane_disable(struct device *dev, struct drm_plane *plane)unsigned int en_bit;if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) +if (plane != &priv->f0) en_bit =JZ_LCD_OSDC_F1EN ;else en_bit =JZ_LCD_OSDC_F0EN ;
@@ -461,8 +461,7 @@ void ingenic_drm_plane_config(struct device *dev,ingenic_drm_plane_enable (priv, plane); -if (priv->soc_info->has_osd && - plane->type ==DRM_PLANE_TYPE_PRIMARY ) { +if (priv->soc_info->has_osd && plane != &priv->f0) {switch (fourcc) {case DRM_FORMAT_XRGB1555 : ctrl |=JZ_LCD_OSDCTRL_RGB555 ;
@@ -510,7 +509,7 @@ void ingenic_drm_plane_config(struct device *dev, }if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) { +if (plane != &priv->f0) { xy_reg =JZ_REG_LCD_XYP1 ; size_reg =JZ_REG_LCD_SIZE1 ; }else {
@@ -561,7 +560,7 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane, height = newstate->src_h >>16 ; cpp = newstate->fb->format->cpp[0 ]; -if (!priv->soc_info->has_osd || plane->type ==DRM_PLANE_TYPE_OVERLAY ) +if (!priv->soc_info->has_osd || plane == &priv->f0) hwdesc = &priv->dma_hwdescs->hwdesc_f0;else hwdesc = &priv->dma_hwdescs->hwdesc_f1;
drivers/gpu/drm/ingenic/ingenic-ipu.c +1 -1
@@ -767,7 +767,7 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) err =drm_universal_plane_init (drm, plane,1 , &ingenic_ipu_plane_funcs, soc_info->formats, soc_info->num_formats, -NULL ,DRM_PLANE_TYPE_PRIMARY ,NULL ); +NULL ,DRM_PLANE_TYPE_OVERLAY ,NULL );if (err) {dev_err (dev,"Failed to init plane: %i\n" , err);return err;
Paul Cercueil
maintainercover drm/ingenic: backports for v5.10.x
Hi Greg,
Here are two patches for the ingenic-drm driver that couldn't be applied to the stable v5.10.x automatically. I backported them manually so that they can be applied there.
Cheers,
-Paul
Paul Cercueil (2):
drm/ingenic: Fix non-OSD mode
drm/ingenic: Switch IPU plane to type OVERLAY
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 20 +++++++++++--------- drivers/gpu/drm/ingenic/ingenic-ipu.c | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-)
Signature · 1 line
2.30.2
gregkh
maintainerRe: [PATCH 0/2] drm/ingenic: backports for v5.10.x
Quoted 5 lines · Paul Cercueil
Hi Greg,
Here are two patches for the ingenic-drm driver that couldn't be applied to the stable v5.10.x automatically. I backported them manually so that they can be applied there.
All now queued up, thanks.
greg k-h
Paul Cercueil
maintainerPATCH 1/2 drm/ingenic: Fix non-OSD mode
In reply to [email protected]commit 7b4957684e5d813fcbdc98144e3cc5c4467b3e2e upstream.
Even though the JZ4740 did not have the OSD mode, it had (according to the documentation) two DMA channels, but there is absolutely no information about how to select the second DMA channel.
Make the ingenic-drm driver work in non-OSD mode by using the foreground0 plane (which is bound to the DMA0 channel) as the primary plane, instead of the foreground1 plane, which is the primary plane when in OSD mode.
--- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)
drivers/gpu/drm/ingenic/ingenic-drm-drv.c +7 -4
@@ -455,7 +455,7 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane, height = state->src_h >>16 ; cpp = state->fb->format->cpp[0 ]; -if (priv->soc_info->has_osd && plane->type ==DRM_PLANE_TYPE_OVERLAY ) +if (!priv->soc_info->has_osd || plane->type ==DRM_PLANE_TYPE_OVERLAY ) hwdesc = priv->dma_hwdesc_f0;else hwdesc = priv->dma_hwdesc_f1;
@@ -692,6 +692,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)const struct jz_soc_info *soc_info;struct ingenic_drm *priv;struct clk *parent_clk; +struct drm_plane *primary;struct drm_bridge *bridge;struct drm_panel *panel;struct drm_encoder *encoder;
@@ -784,9 +785,11 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)if (soc_info->has_osd) priv->ipu_plane =drm_plane_from_index (drm,0 ); -drm_plane_helper_add (&priv->f1, &ingenic_drm_plane_helper_funcs); + primary = priv->soc_info->has_osd ? &priv->f1 : &priv->f0; - ret = drm_universal_plane_init(drm, &priv->f1, 1, +drm_plane_helper_add (primary, &ingenic_drm_plane_helper_funcs); + + ret = drm_universal_plane_init(drm, primary, 1, &ingenic_drm_primary_plane_funcs, ingenic_drm_primary_formats, ARRAY_SIZE(ingenic_drm_primary_formats),
@@ -798,7 +801,7 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)drm_crtc_helper_add (&priv->crtc, &ingenic_drm_crtc_helper_funcs); - ret =drm_crtc_init_with_planes (drm, &priv->crtc, &priv->f1, + ret =drm_crtc_init_with_planes (drm, &priv->crtc, primary,NULL , &ingenic_drm_crtc_funcs,NULL );if (ret) {dev_err (dev,"Failed to init CRTC: %i\n" , ret);
Signature · 1 line
2.30.2
Paul Cercueil
maintainerPATCH 2/2 drm/ingenic: Switch IPU plane to type OVERLAY
In reply to [email protected]commit 68b433fe6937cfa3f8975d18643d5956254edd6a upstream.
It should have been an OVERLAY from the beginning. The documentation stipulates that there should be an unique PRIMARY plane per CRTC.
--- drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 11 +++++------ drivers/gpu/drm/ingenic/ingenic-ipu.c | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-)
drivers/gpu/drm/ingenic/ingenic-drm-drv.c +5 -6
@@ -347,7 +347,7 @@ static void ingenic_drm_plane_enable(struct ingenic_drm *priv,unsigned int en_bit;if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) +if (plane != &priv->f0) en_bit =JZ_LCD_OSDC_F1EN ;else en_bit =JZ_LCD_OSDC_F0EN ;
@@ -362,7 +362,7 @@ void ingenic_drm_plane_disable(struct device *dev, struct drm_plane *plane)unsigned int en_bit;if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) +if (plane != &priv->f0) en_bit =JZ_LCD_OSDC_F1EN ;else en_bit =JZ_LCD_OSDC_F0EN ;
@@ -389,8 +389,7 @@ void ingenic_drm_plane_config(struct device *dev,ingenic_drm_plane_enable (priv, plane); -if (priv->soc_info->has_osd && - plane->type ==DRM_PLANE_TYPE_PRIMARY ) { +if (priv->soc_info->has_osd && plane != &priv->f0) {switch (fourcc) {case DRM_FORMAT_XRGB1555 : ctrl |=JZ_LCD_OSDCTRL_RGB555 ;
@@ -423,7 +422,7 @@ void ingenic_drm_plane_config(struct device *dev, }if (priv->soc_info->has_osd) { -if (plane->type ==DRM_PLANE_TYPE_PRIMARY ) { +if (plane != &priv->f0) { xy_reg =JZ_REG_LCD_XYP1 ; size_reg =JZ_REG_LCD_SIZE1 ; }else {
@@ -455,7 +454,7 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane, height = state->src_h >>16 ; cpp = state->fb->format->cpp[0 ]; -if (!priv->soc_info->has_osd || plane->type ==DRM_PLANE_TYPE_OVERLAY ) +if (!priv->soc_info->has_osd || plane == &priv->f0) hwdesc = priv->dma_hwdesc_f0;else hwdesc = priv->dma_hwdesc_f1;
drivers/gpu/drm/ingenic/ingenic-ipu.c +1 -1
@@ -753,7 +753,7 @@ static int ingenic_ipu_bind(struct device *dev, struct device *master, void *d) err =drm_universal_plane_init (drm, plane,1 , &ingenic_ipu_plane_funcs, soc_info->formats, soc_info->num_formats, -NULL ,DRM_PLANE_TYPE_PRIMARY ,NULL ); +NULL ,DRM_PLANE_TYPE_OVERLAY ,NULL );if (err) {dev_err (dev,"Failed to init plane: %i\n" , err);return err;
Signature · 1 line
2.30.2