Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-09-09 Thread Thomas Zimmermann

Hi

Am 08.09.21 um 21:31 schrieb Sam Ravnborg:

Hi Thomas,

On Wed, Sep 08, 2021 at 07:50:42PM +0200, Thomas Zimmermann wrote:

Hi

Am 03.08.21 um 07:10 schrieb Sam Ravnborg:

Hi Anitha,

On Mon, Aug 02, 2021 at 08:44:26PM +, Chrisanthus, Anitha wrote:

Hi Sam,
Thanks. Where should this go, drm-misc-fixes or drm-misc-next?


Looks like a drm-misc-next candidate to me.
I may improve something for existing users, but it does not look like it
fixes an existing bug.


I found this patch in drm-misc-fixes, although it doesn't look like a
bugfix. It should have gone into drm-misc-next. See [1]. If it indeed
belongs into drm-misc-fixes, it certainly should have contained a Fixes tag.


The patch fixes some warnings that has become errors the last week.
Anitha pinged me about it, but I failed to followup. So in the end it
was applied to shut up the warning => errors.


Thanks for reply. I cc'd Dave, as he intended to not merge the rsp PR 
this week. Maybe the patch is important enough.


Best regards
Thomas



Sam



--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


OpenPGP_signature
Description: OpenPGP digital signature


Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-09-08 Thread Sam Ravnborg
Hi Thomas,

On Wed, Sep 08, 2021 at 07:50:42PM +0200, Thomas Zimmermann wrote:
> Hi
> 
> Am 03.08.21 um 07:10 schrieb Sam Ravnborg:
> > Hi Anitha,
> > 
> > On Mon, Aug 02, 2021 at 08:44:26PM +, Chrisanthus, Anitha wrote:
> > > Hi Sam,
> > > Thanks. Where should this go, drm-misc-fixes or drm-misc-next?
> > 
> > Looks like a drm-misc-next candidate to me.
> > I may improve something for existing users, but it does not look like it
> > fixes an existing bug.
> 
> I found this patch in drm-misc-fixes, although it doesn't look like a
> bugfix. It should have gone into drm-misc-next. See [1]. If it indeed
> belongs into drm-misc-fixes, it certainly should have contained a Fixes tag.

The patch fixes some warnings that has become errors the last week.
Anitha pinged me about it, but I failed to followup. So in the end it
was applied to shut up the warning => errors.

Sam


Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-09-08 Thread Thomas Zimmermann

Hi

Am 03.08.21 um 07:10 schrieb Sam Ravnborg:

Hi Anitha,

On Mon, Aug 02, 2021 at 08:44:26PM +, Chrisanthus, Anitha wrote:

Hi Sam,
Thanks. Where should this go, drm-misc-fixes or drm-misc-next?


Looks like a drm-misc-next candidate to me.
I may improve something for existing users, but it does not look like it
fixes an existing bug.


I found this patch in drm-misc-fixes, although it doesn't look like a 
bugfix. It should have gone into drm-misc-next. See [1]. If it indeed 
belongs into drm-misc-fixes, it certainly should have contained a Fixes tag.


Best regards
Thomas

[1] 
https://drm.pages.freedesktop.org/maintainer-tools/committer-drm-misc.html#where-do-i-apply-my-patch




Sam



--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer


OpenPGP_signature
Description: OpenPGP digital signature


Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-08-02 Thread Sam Ravnborg
Hi Anitha,

On Mon, Aug 02, 2021 at 08:44:26PM +, Chrisanthus, Anitha wrote:
> Hi Sam,
> Thanks. Where should this go, drm-misc-fixes or drm-misc-next?

Looks like a drm-misc-next candidate to me.
I may improve something for existing users, but it does not look like it
fixes an existing bug.

Sam


RE: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-08-02 Thread Chrisanthus, Anitha
Hi Sam,
Thanks. Where should this go, drm-misc-fixes or drm-misc-next?

Anitha

> -Original Message-
> From: Sam Ravnborg 
> Sent: Wednesday, July 28, 2021 12:29 AM
> To: Chrisanthus, Anitha 
> Cc: dri-devel@lists.freedesktop.org; Dea, Edmund J
> 
> Subject: Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane
> 
> Hi Anitha,
> On Tue, Jul 27, 2021 at 05:31:25PM -0700, Anitha Chrisanthus wrote:
> > From: Edmund Dea 
> >
> > Enable one additional plane that is alpha blended on top
> > of the primary plane.
> >
> > Signed-off-by: Edmund Dea 
> Your s-o-b is missing.
> 
> With this fixed:
> Acked-by: Sam Ravnborg 
> > ---
> >  drivers/gpu/drm/kmb/kmb_drv.c   |  8 ++--
> >  drivers/gpu/drm/kmb/kmb_plane.c | 81 +-
> ---
> >  drivers/gpu/drm/kmb/kmb_plane.h |  5 +-
> >  drivers/gpu/drm/kmb/kmb_regs.h  |  3 ++
> >  4 files changed, 82 insertions(+), 15 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/kmb/kmb_drv.c
> b/drivers/gpu/drm/kmb/kmb_drv.c
> > index 12f35c43d838..d0de1db03493 100644
> > --- a/drivers/gpu/drm/kmb/kmb_drv.c
> > +++ b/drivers/gpu/drm/kmb/kmb_drv.c
> > @@ -173,10 +173,10 @@ static int kmb_setup_mode_config(struct
> drm_device *drm)
> > ret = drmm_mode_config_init(drm);
> > if (ret)
> > return ret;
> > -   drm->mode_config.min_width = KMB_MIN_WIDTH;
> > -   drm->mode_config.min_height = KMB_MIN_HEIGHT;
> > -   drm->mode_config.max_width = KMB_MAX_WIDTH;
> > -   drm->mode_config.max_height = KMB_MAX_HEIGHT;
> > +   drm->mode_config.min_width = KMB_FB_MIN_WIDTH;
> > +   drm->mode_config.min_height = KMB_FB_MIN_HEIGHT;
> > +   drm->mode_config.max_width = KMB_FB_MAX_WIDTH;
> > +   drm->mode_config.max_height = KMB_FB_MAX_HEIGHT;
> > drm->mode_config.funcs = _mode_config_funcs;
> >
> > ret = kmb_setup_crtc(drm);
> > diff --git a/drivers/gpu/drm/kmb/kmb_plane.c
> b/drivers/gpu/drm/kmb/kmb_plane.c
> > index 4523af949ea1..cbe4e981d73e 100644
> > --- a/drivers/gpu/drm/kmb/kmb_plane.c
> > +++ b/drivers/gpu/drm/kmb/kmb_plane.c
> > @@ -118,9 +118,10 @@ static int kmb_plane_atomic_check(struct
> drm_plane *plane,
> > if (ret)
> > return ret;
> >
> > -   if (new_plane_state->crtc_w > KMB_MAX_WIDTH || new_plane_state-
> >crtc_h > KMB_MAX_HEIGHT)
> > -   return -EINVAL;
> > -   if (new_plane_state->crtc_w < KMB_MIN_WIDTH || new_plane_state-
> >crtc_h < KMB_MIN_HEIGHT)
> > +   if (new_plane_state->crtc_w > KMB_FB_MAX_WIDTH ||
> > +   new_plane_state->crtc_h > KMB_FB_MAX_HEIGHT ||
> > +   new_plane_state->crtc_w < KMB_FB_MIN_WIDTH ||
> > +   new_plane_state->crtc_h < KMB_FB_MIN_HEIGHT)
> > return -EINVAL;
> >
> > /* Due to HW limitations, changing plane height or width after
> > @@ -311,6 +312,44 @@ static void config_csc(struct kmb_drm_private
> *kmb, int plane_id)
> > kmb_write_lcd(kmb, LCD_LAYERn_CSC_OFF3(plane_id),
> csc_coef_lcd[11]);
> >  }
> >
> > +static void kmb_plane_set_alpha(struct kmb_drm_private *kmb,
> > +   const struct drm_plane_state *state,
> > +   unsigned char plane_id,
> > +   unsigned int *val)
> > +{
> > +   u16 plane_alpha = state->alpha;
> > +   u16 pixel_blend_mode = state->pixel_blend_mode;
> > +   int has_alpha = state->fb->format->has_alpha;
> > +
> > +   if (plane_alpha != DRM_BLEND_ALPHA_OPAQUE)
> > +   *val |= LCD_LAYER_ALPHA_STATIC;
> > +
> > +   if (has_alpha) {
> > +   switch (pixel_blend_mode) {
> > +   case DRM_MODE_BLEND_PIXEL_NONE:
> > +   break;
> > +   case DRM_MODE_BLEND_PREMULTI:
> > +   *val |= LCD_LAYER_ALPHA_EMBED |
> LCD_LAYER_ALPHA_PREMULT;
> > +   break;
> > +   case DRM_MODE_BLEND_COVERAGE:
> > +   *val |= LCD_LAYER_ALPHA_EMBED;
> > +   break;
> > +   default:
> > +   DRM_DEBUG("Missing pixel blend mode case (%s ==
> %ld)\n",
> > + __stringify(pixel_blend_mode),
> > + (long)pixel_blend_mode);
> > +   break;
> > +   }
> > +   }
> > +
> > +   if (plane_alpha == DRM_BLEND_ALPHA_OPAQUE && !has_alpha) {
> > +   *val &= LCD_LAYER_ALPHA_DISABLED

Re: [PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-07-28 Thread Sam Ravnborg
Hi Anitha,
On Tue, Jul 27, 2021 at 05:31:25PM -0700, Anitha Chrisanthus wrote:
> From: Edmund Dea 
> 
> Enable one additional plane that is alpha blended on top
> of the primary plane.
> 
> Signed-off-by: Edmund Dea 
Your s-o-b is missing.

With this fixed:
Acked-by: Sam Ravnborg 
> ---
>  drivers/gpu/drm/kmb/kmb_drv.c   |  8 ++--
>  drivers/gpu/drm/kmb/kmb_plane.c | 81 +
>  drivers/gpu/drm/kmb/kmb_plane.h |  5 +-
>  drivers/gpu/drm/kmb/kmb_regs.h  |  3 ++
>  4 files changed, 82 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/gpu/drm/kmb/kmb_drv.c b/drivers/gpu/drm/kmb/kmb_drv.c
> index 12f35c43d838..d0de1db03493 100644
> --- a/drivers/gpu/drm/kmb/kmb_drv.c
> +++ b/drivers/gpu/drm/kmb/kmb_drv.c
> @@ -173,10 +173,10 @@ static int kmb_setup_mode_config(struct drm_device *drm)
>   ret = drmm_mode_config_init(drm);
>   if (ret)
>   return ret;
> - drm->mode_config.min_width = KMB_MIN_WIDTH;
> - drm->mode_config.min_height = KMB_MIN_HEIGHT;
> - drm->mode_config.max_width = KMB_MAX_WIDTH;
> - drm->mode_config.max_height = KMB_MAX_HEIGHT;
> + drm->mode_config.min_width = KMB_FB_MIN_WIDTH;
> + drm->mode_config.min_height = KMB_FB_MIN_HEIGHT;
> + drm->mode_config.max_width = KMB_FB_MAX_WIDTH;
> + drm->mode_config.max_height = KMB_FB_MAX_HEIGHT;
>   drm->mode_config.funcs = _mode_config_funcs;
>  
>   ret = kmb_setup_crtc(drm);
> diff --git a/drivers/gpu/drm/kmb/kmb_plane.c b/drivers/gpu/drm/kmb/kmb_plane.c
> index 4523af949ea1..cbe4e981d73e 100644
> --- a/drivers/gpu/drm/kmb/kmb_plane.c
> +++ b/drivers/gpu/drm/kmb/kmb_plane.c
> @@ -118,9 +118,10 @@ static int kmb_plane_atomic_check(struct drm_plane 
> *plane,
>   if (ret)
>   return ret;
>  
> - if (new_plane_state->crtc_w > KMB_MAX_WIDTH || new_plane_state->crtc_h 
> > KMB_MAX_HEIGHT)
> - return -EINVAL;
> - if (new_plane_state->crtc_w < KMB_MIN_WIDTH || new_plane_state->crtc_h 
> < KMB_MIN_HEIGHT)
> + if (new_plane_state->crtc_w > KMB_FB_MAX_WIDTH ||
> + new_plane_state->crtc_h > KMB_FB_MAX_HEIGHT ||
> + new_plane_state->crtc_w < KMB_FB_MIN_WIDTH ||
> + new_plane_state->crtc_h < KMB_FB_MIN_HEIGHT)
>   return -EINVAL;
>  
>   /* Due to HW limitations, changing plane height or width after
> @@ -311,6 +312,44 @@ static void config_csc(struct kmb_drm_private *kmb, int 
> plane_id)
>   kmb_write_lcd(kmb, LCD_LAYERn_CSC_OFF3(plane_id), csc_coef_lcd[11]);
>  }
>  
> +static void kmb_plane_set_alpha(struct kmb_drm_private *kmb,
> + const struct drm_plane_state *state,
> + unsigned char plane_id,
> + unsigned int *val)
> +{
> + u16 plane_alpha = state->alpha;
> + u16 pixel_blend_mode = state->pixel_blend_mode;
> + int has_alpha = state->fb->format->has_alpha;
> +
> + if (plane_alpha != DRM_BLEND_ALPHA_OPAQUE)
> + *val |= LCD_LAYER_ALPHA_STATIC;
> +
> + if (has_alpha) {
> + switch (pixel_blend_mode) {
> + case DRM_MODE_BLEND_PIXEL_NONE:
> + break;
> + case DRM_MODE_BLEND_PREMULTI:
> + *val |= LCD_LAYER_ALPHA_EMBED | LCD_LAYER_ALPHA_PREMULT;
> + break;
> + case DRM_MODE_BLEND_COVERAGE:
> + *val |= LCD_LAYER_ALPHA_EMBED;
> + break;
> + default:
> + DRM_DEBUG("Missing pixel blend mode case (%s == %ld)\n",
> +   __stringify(pixel_blend_mode),
> +   (long)pixel_blend_mode);
> + break;
> + }
> + }
> +
> + if (plane_alpha == DRM_BLEND_ALPHA_OPAQUE && !has_alpha) {
> + *val &= LCD_LAYER_ALPHA_DISABLED;
> + return;
> + }
> +
> + kmb_write_lcd(kmb, LCD_LAYERn_ALPHA(plane_id), plane_alpha);
> +}
> +
>  static void kmb_plane_atomic_update(struct drm_plane *plane,
>   struct drm_atomic_state *state)
>  {
> @@ -341,11 +380,12 @@ static void kmb_plane_atomic_update(struct drm_plane 
> *plane,
>   fb = new_plane_state->fb;
>   if (!fb)
>   return;
> +
>   num_planes = fb->format->num_planes;
>   kmb_plane = to_kmb_plane(plane);
> - plane_id = kmb_plane->id;
>  
>   kmb = to_kmb(plane->dev);
> + plane_id = kmb_plane->id;
>  
>   spin_lock_irq(>irq_lock);
>   if (kmb->kmb_under_flow || kmb->kmb_flush_done) {
> @@ -467,20 +507,32 @@ static void kmb_plane_atomic_update(struct drm_plane 
> *plane,
>   config_csc(kmb, plane_id);
>   }
>  
> + kmb_plane_set_alpha(kmb, plane->state, plane_id, );
> +
>   kmb_write_lcd(kmb, LCD_LAYERn_CFG(plane_id), val);
>  
> + /* Configure LCD_CONTROL */
> + ctrl = kmb_read_lcd(kmb, LCD_CONTROL);
> +
> + /* Set layer blending config */
> + ctrl 

[PATCH 13/14] drm/kmb: Enable alpha blended second plane

2021-07-27 Thread Anitha Chrisanthus
From: Edmund Dea 

Enable one additional plane that is alpha blended on top
of the primary plane.

Signed-off-by: Edmund Dea 
---
 drivers/gpu/drm/kmb/kmb_drv.c   |  8 ++--
 drivers/gpu/drm/kmb/kmb_plane.c | 81 +
 drivers/gpu/drm/kmb/kmb_plane.h |  5 +-
 drivers/gpu/drm/kmb/kmb_regs.h  |  3 ++
 4 files changed, 82 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/kmb/kmb_drv.c b/drivers/gpu/drm/kmb/kmb_drv.c
index 12f35c43d838..d0de1db03493 100644
--- a/drivers/gpu/drm/kmb/kmb_drv.c
+++ b/drivers/gpu/drm/kmb/kmb_drv.c
@@ -173,10 +173,10 @@ static int kmb_setup_mode_config(struct drm_device *drm)
ret = drmm_mode_config_init(drm);
if (ret)
return ret;
-   drm->mode_config.min_width = KMB_MIN_WIDTH;
-   drm->mode_config.min_height = KMB_MIN_HEIGHT;
-   drm->mode_config.max_width = KMB_MAX_WIDTH;
-   drm->mode_config.max_height = KMB_MAX_HEIGHT;
+   drm->mode_config.min_width = KMB_FB_MIN_WIDTH;
+   drm->mode_config.min_height = KMB_FB_MIN_HEIGHT;
+   drm->mode_config.max_width = KMB_FB_MAX_WIDTH;
+   drm->mode_config.max_height = KMB_FB_MAX_HEIGHT;
drm->mode_config.funcs = _mode_config_funcs;
 
ret = kmb_setup_crtc(drm);
diff --git a/drivers/gpu/drm/kmb/kmb_plane.c b/drivers/gpu/drm/kmb/kmb_plane.c
index 4523af949ea1..cbe4e981d73e 100644
--- a/drivers/gpu/drm/kmb/kmb_plane.c
+++ b/drivers/gpu/drm/kmb/kmb_plane.c
@@ -118,9 +118,10 @@ static int kmb_plane_atomic_check(struct drm_plane *plane,
if (ret)
return ret;
 
-   if (new_plane_state->crtc_w > KMB_MAX_WIDTH || new_plane_state->crtc_h 
> KMB_MAX_HEIGHT)
-   return -EINVAL;
-   if (new_plane_state->crtc_w < KMB_MIN_WIDTH || new_plane_state->crtc_h 
< KMB_MIN_HEIGHT)
+   if (new_plane_state->crtc_w > KMB_FB_MAX_WIDTH ||
+   new_plane_state->crtc_h > KMB_FB_MAX_HEIGHT ||
+   new_plane_state->crtc_w < KMB_FB_MIN_WIDTH ||
+   new_plane_state->crtc_h < KMB_FB_MIN_HEIGHT)
return -EINVAL;
 
/* Due to HW limitations, changing plane height or width after
@@ -311,6 +312,44 @@ static void config_csc(struct kmb_drm_private *kmb, int 
plane_id)
kmb_write_lcd(kmb, LCD_LAYERn_CSC_OFF3(plane_id), csc_coef_lcd[11]);
 }
 
+static void kmb_plane_set_alpha(struct kmb_drm_private *kmb,
+   const struct drm_plane_state *state,
+   unsigned char plane_id,
+   unsigned int *val)
+{
+   u16 plane_alpha = state->alpha;
+   u16 pixel_blend_mode = state->pixel_blend_mode;
+   int has_alpha = state->fb->format->has_alpha;
+
+   if (plane_alpha != DRM_BLEND_ALPHA_OPAQUE)
+   *val |= LCD_LAYER_ALPHA_STATIC;
+
+   if (has_alpha) {
+   switch (pixel_blend_mode) {
+   case DRM_MODE_BLEND_PIXEL_NONE:
+   break;
+   case DRM_MODE_BLEND_PREMULTI:
+   *val |= LCD_LAYER_ALPHA_EMBED | LCD_LAYER_ALPHA_PREMULT;
+   break;
+   case DRM_MODE_BLEND_COVERAGE:
+   *val |= LCD_LAYER_ALPHA_EMBED;
+   break;
+   default:
+   DRM_DEBUG("Missing pixel blend mode case (%s == %ld)\n",
+ __stringify(pixel_blend_mode),
+ (long)pixel_blend_mode);
+   break;
+   }
+   }
+
+   if (plane_alpha == DRM_BLEND_ALPHA_OPAQUE && !has_alpha) {
+   *val &= LCD_LAYER_ALPHA_DISABLED;
+   return;
+   }
+
+   kmb_write_lcd(kmb, LCD_LAYERn_ALPHA(plane_id), plane_alpha);
+}
+
 static void kmb_plane_atomic_update(struct drm_plane *plane,
struct drm_atomic_state *state)
 {
@@ -341,11 +380,12 @@ static void kmb_plane_atomic_update(struct drm_plane 
*plane,
fb = new_plane_state->fb;
if (!fb)
return;
+
num_planes = fb->format->num_planes;
kmb_plane = to_kmb_plane(plane);
-   plane_id = kmb_plane->id;
 
kmb = to_kmb(plane->dev);
+   plane_id = kmb_plane->id;
 
spin_lock_irq(>irq_lock);
if (kmb->kmb_under_flow || kmb->kmb_flush_done) {
@@ -467,20 +507,32 @@ static void kmb_plane_atomic_update(struct drm_plane 
*plane,
config_csc(kmb, plane_id);
}
 
+   kmb_plane_set_alpha(kmb, plane->state, plane_id, );
+
kmb_write_lcd(kmb, LCD_LAYERn_CFG(plane_id), val);
 
+   /* Configure LCD_CONTROL */
+   ctrl = kmb_read_lcd(kmb, LCD_CONTROL);
+
+   /* Set layer blending config */
+   ctrl &= ~LCD_CTRL_ALPHA_ALL;
+   ctrl |= LCD_CTRL_ALPHA_BOTTOM_VL1 |
+   LCD_CTRL_ALPHA_BLEND_VL2;
+
+   ctrl &= ~LCD_CTRL_ALPHA_BLEND_BKGND_DISABLE;
+
switch (plane_id) {
case LAYER_0:
-   ctrl =