Re: [PATCH v1 3/3] drm/tegra: dc: Dedicate overlay plane to cursor on older Tegra's

2018-03-17 Thread Dmitry Osipenko
On 16.03.2018 10:36, Daniel Vetter wrote:
> On Thu, Mar 15, 2018 at 11:45 AM, Thierry Reding
>  wrote:
>> On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote:
>>> Older Tegra's do not support RGBA format for the cursor, but instead
>>> overlay plane could be used for it. Since there is no much use for the
>>> overlays on a regular desktop and HW-accelerated cursor is much better
>>> than a SW cursor, let's dedicate one overlay plane to the mouse cursor.
>>>
>>> Signed-off-by: Dmitry Osipenko 
>>> ---
>>>  drivers/gpu/drm/tegra/dc.c | 28 +++-
>>>  1 file changed, 23 insertions(+), 5 deletions(-)
>>
>> Applied. I'm not entirely happy that we need to sacrifice one of the
>> overlay windows for this, but you're right, it's probably okay given
>> how little planes are used on a regular desktop.
>>
>> We could always provide a module parameter to switch this on and off
>> if that's ever something we want.
> 
> The idea with universal planes is that you can (at least try to) use
> the cursor overlay plane as a normal plane. It is only a hint to
> userspace, there's no requirement anywhere in atomic that you only use
> it as a cursor. That way desktops get a good hint for what the cursor
> plane should be, everyone else can still use all the planes.

Indeed, thank you for pointing at it. That is a nice feature.


Re: [PATCH v1 3/3] drm/tegra: dc: Dedicate overlay plane to cursor on older Tegra's

2018-03-16 Thread Daniel Vetter
On Thu, Mar 15, 2018 at 11:45 AM, Thierry Reding
 wrote:
> On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote:
>> Older Tegra's do not support RGBA format for the cursor, but instead
>> overlay plane could be used for it. Since there is no much use for the
>> overlays on a regular desktop and HW-accelerated cursor is much better
>> than a SW cursor, let's dedicate one overlay plane to the mouse cursor.
>>
>> Signed-off-by: Dmitry Osipenko 
>> ---
>>  drivers/gpu/drm/tegra/dc.c | 28 +++-
>>  1 file changed, 23 insertions(+), 5 deletions(-)
>
> Applied. I'm not entirely happy that we need to sacrifice one of the
> overlay windows for this, but you're right, it's probably okay given
> how little planes are used on a regular desktop.
>
> We could always provide a module parameter to switch this on and off
> if that's ever something we want.

The idea with universal planes is that you can (at least try to) use
the cursor overlay plane as a normal plane. It is only a hint to
userspace, there's no requirement anywhere in atomic that you only use
it as a cursor. That way desktops get a good hint for what the cursor
plane should be, everyone else can still use all the planes.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


Re: [PATCH v1 3/3] drm/tegra: dc: Dedicate overlay plane to cursor on older Tegra's

2018-03-15 Thread Thierry Reding
On Thu, Mar 15, 2018 at 04:00:25AM +0300, Dmitry Osipenko wrote:
> Older Tegra's do not support RGBA format for the cursor, but instead
> overlay plane could be used for it. Since there is no much use for the
> overlays on a regular desktop and HW-accelerated cursor is much better
> than a SW cursor, let's dedicate one overlay plane to the mouse cursor.
> 
> Signed-off-by: Dmitry Osipenko 
> ---
>  drivers/gpu/drm/tegra/dc.c | 28 +++-
>  1 file changed, 23 insertions(+), 5 deletions(-)

Applied. I'm not entirely happy that we need to sacrifice one of the
overlay windows for this, but you're right, it's probably okay given
how little planes are used on a regular desktop.

We could always provide a module parameter to switch this on and off
if that's ever something we want.

Applied, thanks.

Thierry


signature.asc
Description: PGP signature


[PATCH v1 3/3] drm/tegra: dc: Dedicate overlay plane to cursor on older Tegra's

2018-03-14 Thread Dmitry Osipenko
Older Tegra's do not support RGBA format for the cursor, but instead
overlay plane could be used for it. Since there is no much use for the
overlays on a regular desktop and HW-accelerated cursor is much better
than a SW cursor, let's dedicate one overlay plane to the mouse cursor.

Signed-off-by: Dmitry Osipenko 
---
 drivers/gpu/drm/tegra/dc.c | 28 +++-
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
index 22bf513612d1..e4d567ec07cc 100644
--- a/drivers/gpu/drm/tegra/dc.c
+++ b/drivers/gpu/drm/tegra/dc.c
@@ -857,9 +857,11 @@ static const u32 tegra124_overlay_formats[] = {
 
 static struct drm_plane *tegra_dc_overlay_plane_create(struct drm_device *drm,
   struct tegra_dc *dc,
-  unsigned int index)
+  unsigned int index,
+  bool cursor)
 {
unsigned long possible_crtcs = tegra_plane_get_possible_crtcs(drm);
+   enum drm_plane_type type = DRM_PLANE_TYPE_OVERLAY;
struct tegra_plane *plane;
unsigned int num_formats;
const u32 *formats;
@@ -876,10 +878,12 @@ static struct drm_plane 
*tegra_dc_overlay_plane_create(struct drm_device *drm,
num_formats = dc->soc->num_overlay_formats;
formats = dc->soc->overlay_formats;
 
+   if (cursor)
+   type = DRM_PLANE_TYPE_CURSOR;
+
err = drm_universal_plane_init(drm, &plane->base, possible_crtcs,
   &tegra_plane_funcs, formats,
-  num_formats, NULL,
-  DRM_PLANE_TYPE_OVERLAY, NULL);
+  num_formats, NULL, type, NULL);
if (err < 0) {
kfree(plane);
return ERR_PTR(err);
@@ -931,6 +935,7 @@ static struct drm_plane *tegra_dc_add_planes(struct 
drm_device *drm,
 struct tegra_dc *dc)
 {
struct drm_plane *planes[2], *primary;
+   unsigned int planes_num;
unsigned int i;
int err;
 
@@ -938,8 +943,14 @@ static struct drm_plane *tegra_dc_add_planes(struct 
drm_device *drm,
if (IS_ERR(primary))
return primary;
 
-   for (i = 0; i < 2; i++) {
-   planes[i] = tegra_dc_overlay_plane_create(drm, dc, 1 + i);
+   if (dc->soc->supports_cursor)
+   planes_num = 2;
+   else
+   planes_num = 1;
+
+   for (i = 0; i < planes_num; i++) {
+   planes[i] = tegra_dc_overlay_plane_create(drm, dc, 1 + i,
+ false);
if (IS_ERR(planes[i])) {
err = PTR_ERR(planes[i]);
 
@@ -1857,6 +1868,13 @@ static int tegra_dc_init(struct host1x_client *client)
err = PTR_ERR(cursor);
goto cleanup;
}
+   } else {
+   /* dedicate one overlay to mouse cursor */
+   cursor = tegra_dc_overlay_plane_create(drm, dc, 2, true);
+   if (IS_ERR(cursor)) {
+   err = PTR_ERR(cursor);
+   goto cleanup;
+   }
}
 
err = drm_crtc_init_with_planes(drm, &dc->base, primary, cursor,
-- 
2.16.1