* [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler
@ 2012-10-22 17:13 Damien Lespiau
0 siblings, 0 replies; 5+ messages in thread
From: Damien Lespiau @ 2012-10-22 17:13 UTC (permalink / raw)
To: intel-gfx
From: Damien Lespiau <damien.lespiau@intel.com>
Haswell does not have a scaler in the sprite pipeline anymore, so let's
ensure:
1/ We bail out of update_plate() when someone is trying to ask to
display a scaled framebuffer,
2/ We never write to the nonexistent SPR_SCALE register
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_sprite.c | 14 +++++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 0942fb4..97c714d 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -221,6 +221,7 @@ struct intel_plane {
struct drm_plane base;
enum pipe pipe;
struct drm_i915_gem_object *obj;
+ bool can_scale;
int max_downscale;
u32 lut_r[1024], lut_g[1024], lut_b[1024];
void (*update_plane)(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index f2ca943..ccfaa6f 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -136,7 +136,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
I915_WRITE(SPRLINOFF(pipe), offset);
}
I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
- I915_WRITE(SPRSCALE(pipe), sprscale);
+ if (intel_plane->can_scale)
+ I915_WRITE(SPRSCALE(pipe), sprscale);
I915_WRITE(SPRCTL(pipe), sprctl);
I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
POSTING_READ(SPRSURF(pipe));
@@ -474,6 +475,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
goto out;
/*
+ * We may not have a scaler, eg. HSW does not have it any more
+ */
+ if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
+ return -EINVAL;
+
+ /*
* We can take a larger source and scale it down, but
* only so much... 16x is the max on SNB.
*/
@@ -666,6 +673,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
switch (INTEL_INFO(dev)->gen) {
case 5:
case 6:
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 16;
intel_plane->update_plane = ilk_update_plane;
intel_plane->disable_plane = ilk_disable_plane;
@@ -682,6 +690,10 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
break;
case 7:
+ if (IS_HASWELL(dev))
+ intel_plane->can_scale = false;
+ else
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 2;
intel_plane->update_plane = ivb_update_plane;
intel_plane->disable_plane = ivb_disable_plane;
--
1.7.11.7
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler
2012-10-23 14:45 ` Daniel Vetter
@ 2012-10-23 15:00 ` Paulo Zanoni
0 siblings, 0 replies; 5+ messages in thread
From: Paulo Zanoni @ 2012-10-23 15:00 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
Hi
2012/10/23 Daniel Vetter <daniel@ffwll.ch>:
> On Tue, Oct 23, 2012 at 07:16:03AM -0700, Jesse Barnes wrote:
>> On Mon, 22 Oct 2012 18:19:27 +0100
>> Damien Lespiau <damien.lespiau@gmail.com> wrote:
>>
>> > From: Damien Lespiau <damien.lespiau@intel.com>
>> >
>> > Haswell does not have a scaler in the sprite pipeline anymore, so let's
>> > ensure:
>> > 1/ We bail out of update_plate() when someone is trying to ask to
>> > display a scaled framebuffer,
>> > 2/ We never write to the nonexistent SPR_SCALE register
>> >
>> > Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
>> > ---
>> > drivers/gpu/drm/i915/intel_drv.h | 1 +
>> > drivers/gpu/drm/i915/intel_sprite.c | 14 +++++++++++++-
>> > 2 files changed, 14 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
>> > index 0942fb4..97c714d 100644
>> > --- a/drivers/gpu/drm/i915/intel_drv.h
>> > +++ b/drivers/gpu/drm/i915/intel_drv.h
>> > @@ -221,6 +221,7 @@ struct intel_plane {
>> > struct drm_plane base;
>> > enum pipe pipe;
>> > struct drm_i915_gem_object *obj;
>> > + bool can_scale;
>> > int max_downscale;
>> > u32 lut_r[1024], lut_g[1024], lut_b[1024];
>> > void (*update_plane)(struct drm_plane *plane,
>> > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
>> > index f2ca943..ccfaa6f 100644
>> > --- a/drivers/gpu/drm/i915/intel_sprite.c
>> > +++ b/drivers/gpu/drm/i915/intel_sprite.c
>> > @@ -136,7 +136,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
>> > I915_WRITE(SPRLINOFF(pipe), offset);
>> > }
>> > I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
>> > - I915_WRITE(SPRSCALE(pipe), sprscale);
>> > + if (intel_plane->can_scale)
>> > + I915_WRITE(SPRSCALE(pipe), sprscale);
>> > I915_WRITE(SPRCTL(pipe), sprctl);
>> > I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
>> > POSTING_READ(SPRSURF(pipe));
>> > @@ -474,6 +475,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
>> > goto out;
>> >
>> > /*
>> > + * We may not have a scaler, eg. HSW does not have it any more
>> > + */
>> > + if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
>> > + return -EINVAL;
>> > +
>> > + /*
>> > * We can take a larger source and scale it down, but
>> > * only so much... 16x is the max on SNB.
>> > */
>> > @@ -666,6 +673,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
>> > switch (INTEL_INFO(dev)->gen) {
>> > case 5:
>> > case 6:
>> > + intel_plane->can_scale = true;
>> > intel_plane->max_downscale = 16;
>> > intel_plane->update_plane = ilk_update_plane;
>> > intel_plane->disable_plane = ilk_disable_plane;
>> > @@ -682,6 +690,10 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
>> > break;
>> >
>> > case 7:
>> > + if (IS_HASWELL(dev))
>> > + intel_plane->can_scale = false;
>> > + else
>> > + intel_plane->can_scale = true;
>> > intel_plane->max_downscale = 2;
>> > intel_plane->update_plane = ivb_update_plane;
>> > intel_plane->disable_plane = ivb_disable_plane;
>>
>> Yeah, looks fine.
>
> Queued for -next, thanks for the patch.
After testing this, I see we also need to patch ivb_disable_plane to
not write SPRSCALE. Everything else looks correct, so no problem to
include this in a separate patch.
> -Daniel
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Paulo Zanoni
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler
2012-10-23 14:16 ` Jesse Barnes
@ 2012-10-23 14:45 ` Daniel Vetter
2012-10-23 15:00 ` Paulo Zanoni
0 siblings, 1 reply; 5+ messages in thread
From: Daniel Vetter @ 2012-10-23 14:45 UTC (permalink / raw)
To: Jesse Barnes; +Cc: intel-gfx
On Tue, Oct 23, 2012 at 07:16:03AM -0700, Jesse Barnes wrote:
> On Mon, 22 Oct 2012 18:19:27 +0100
> Damien Lespiau <damien.lespiau@gmail.com> wrote:
>
> > From: Damien Lespiau <damien.lespiau@intel.com>
> >
> > Haswell does not have a scaler in the sprite pipeline anymore, so let's
> > ensure:
> > 1/ We bail out of update_plate() when someone is trying to ask to
> > display a scaled framebuffer,
> > 2/ We never write to the nonexistent SPR_SCALE register
> >
> > Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
> > ---
> > drivers/gpu/drm/i915/intel_drv.h | 1 +
> > drivers/gpu/drm/i915/intel_sprite.c | 14 +++++++++++++-
> > 2 files changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> > index 0942fb4..97c714d 100644
> > --- a/drivers/gpu/drm/i915/intel_drv.h
> > +++ b/drivers/gpu/drm/i915/intel_drv.h
> > @@ -221,6 +221,7 @@ struct intel_plane {
> > struct drm_plane base;
> > enum pipe pipe;
> > struct drm_i915_gem_object *obj;
> > + bool can_scale;
> > int max_downscale;
> > u32 lut_r[1024], lut_g[1024], lut_b[1024];
> > void (*update_plane)(struct drm_plane *plane,
> > diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> > index f2ca943..ccfaa6f 100644
> > --- a/drivers/gpu/drm/i915/intel_sprite.c
> > +++ b/drivers/gpu/drm/i915/intel_sprite.c
> > @@ -136,7 +136,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
> > I915_WRITE(SPRLINOFF(pipe), offset);
> > }
> > I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
> > - I915_WRITE(SPRSCALE(pipe), sprscale);
> > + if (intel_plane->can_scale)
> > + I915_WRITE(SPRSCALE(pipe), sprscale);
> > I915_WRITE(SPRCTL(pipe), sprctl);
> > I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
> > POSTING_READ(SPRSURF(pipe));
> > @@ -474,6 +475,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
> > goto out;
> >
> > /*
> > + * We may not have a scaler, eg. HSW does not have it any more
> > + */
> > + if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
> > + return -EINVAL;
> > +
> > + /*
> > * We can take a larger source and scale it down, but
> > * only so much... 16x is the max on SNB.
> > */
> > @@ -666,6 +673,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
> > switch (INTEL_INFO(dev)->gen) {
> > case 5:
> > case 6:
> > + intel_plane->can_scale = true;
> > intel_plane->max_downscale = 16;
> > intel_plane->update_plane = ilk_update_plane;
> > intel_plane->disable_plane = ilk_disable_plane;
> > @@ -682,6 +690,10 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
> > break;
> >
> > case 7:
> > + if (IS_HASWELL(dev))
> > + intel_plane->can_scale = false;
> > + else
> > + intel_plane->can_scale = true;
> > intel_plane->max_downscale = 2;
> > intel_plane->update_plane = ivb_update_plane;
> > intel_plane->disable_plane = ivb_disable_plane;
>
> Yeah, looks fine.
Queued for -next, thanks for the patch.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler
2012-10-22 17:19 Damien Lespiau
@ 2012-10-23 14:16 ` Jesse Barnes
2012-10-23 14:45 ` Daniel Vetter
0 siblings, 1 reply; 5+ messages in thread
From: Jesse Barnes @ 2012-10-23 14:16 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Mon, 22 Oct 2012 18:19:27 +0100
Damien Lespiau <damien.lespiau@gmail.com> wrote:
> From: Damien Lespiau <damien.lespiau@intel.com>
>
> Haswell does not have a scaler in the sprite pipeline anymore, so let's
> ensure:
> 1/ We bail out of update_plate() when someone is trying to ask to
> display a scaled framebuffer,
> 2/ We never write to the nonexistent SPR_SCALE register
>
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
> ---
> drivers/gpu/drm/i915/intel_drv.h | 1 +
> drivers/gpu/drm/i915/intel_sprite.c | 14 +++++++++++++-
> 2 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index 0942fb4..97c714d 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -221,6 +221,7 @@ struct intel_plane {
> struct drm_plane base;
> enum pipe pipe;
> struct drm_i915_gem_object *obj;
> + bool can_scale;
> int max_downscale;
> u32 lut_r[1024], lut_g[1024], lut_b[1024];
> void (*update_plane)(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
> index f2ca943..ccfaa6f 100644
> --- a/drivers/gpu/drm/i915/intel_sprite.c
> +++ b/drivers/gpu/drm/i915/intel_sprite.c
> @@ -136,7 +136,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
> I915_WRITE(SPRLINOFF(pipe), offset);
> }
> I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
> - I915_WRITE(SPRSCALE(pipe), sprscale);
> + if (intel_plane->can_scale)
> + I915_WRITE(SPRSCALE(pipe), sprscale);
> I915_WRITE(SPRCTL(pipe), sprctl);
> I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
> POSTING_READ(SPRSURF(pipe));
> @@ -474,6 +475,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
> goto out;
>
> /*
> + * We may not have a scaler, eg. HSW does not have it any more
> + */
> + if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
> + return -EINVAL;
> +
> + /*
> * We can take a larger source and scale it down, but
> * only so much... 16x is the max on SNB.
> */
> @@ -666,6 +673,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
> switch (INTEL_INFO(dev)->gen) {
> case 5:
> case 6:
> + intel_plane->can_scale = true;
> intel_plane->max_downscale = 16;
> intel_plane->update_plane = ilk_update_plane;
> intel_plane->disable_plane = ilk_disable_plane;
> @@ -682,6 +690,10 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
> break;
>
> case 7:
> + if (IS_HASWELL(dev))
> + intel_plane->can_scale = false;
> + else
> + intel_plane->can_scale = true;
> intel_plane->max_downscale = 2;
> intel_plane->update_plane = ivb_update_plane;
> intel_plane->disable_plane = ivb_disable_plane;
Yeah, looks fine.
Thanks,
--
Jesse Barnes, Intel Open Source Technology Center
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler
@ 2012-10-22 17:19 Damien Lespiau
2012-10-23 14:16 ` Jesse Barnes
0 siblings, 1 reply; 5+ messages in thread
From: Damien Lespiau @ 2012-10-22 17:19 UTC (permalink / raw)
To: intel-gfx
From: Damien Lespiau <damien.lespiau@intel.com>
Haswell does not have a scaler in the sprite pipeline anymore, so let's
ensure:
1/ We bail out of update_plate() when someone is trying to ask to
display a scaled framebuffer,
2/ We never write to the nonexistent SPR_SCALE register
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/intel_drv.h | 1 +
drivers/gpu/drm/i915/intel_sprite.c | 14 +++++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 0942fb4..97c714d 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -221,6 +221,7 @@ struct intel_plane {
struct drm_plane base;
enum pipe pipe;
struct drm_i915_gem_object *obj;
+ bool can_scale;
int max_downscale;
u32 lut_r[1024], lut_g[1024], lut_b[1024];
void (*update_plane)(struct drm_plane *plane,
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index f2ca943..ccfaa6f 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -136,7 +136,8 @@ ivb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
I915_WRITE(SPRLINOFF(pipe), offset);
}
I915_WRITE(SPRSIZE(pipe), (crtc_h << 16) | crtc_w);
- I915_WRITE(SPRSCALE(pipe), sprscale);
+ if (intel_plane->can_scale)
+ I915_WRITE(SPRSCALE(pipe), sprscale);
I915_WRITE(SPRCTL(pipe), sprctl);
I915_MODIFY_DISPBASE(SPRSURF(pipe), obj->gtt_offset);
POSTING_READ(SPRSURF(pipe));
@@ -474,6 +475,12 @@ intel_update_plane(struct drm_plane *plane, struct drm_crtc *crtc,
goto out;
/*
+ * We may not have a scaler, eg. HSW does not have it any more
+ */
+ if (!intel_plane->can_scale && (crtc_w != src_w || crtc_h != src_h))
+ return -EINVAL;
+
+ /*
* We can take a larger source and scale it down, but
* only so much... 16x is the max on SNB.
*/
@@ -666,6 +673,7 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
switch (INTEL_INFO(dev)->gen) {
case 5:
case 6:
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 16;
intel_plane->update_plane = ilk_update_plane;
intel_plane->disable_plane = ilk_disable_plane;
@@ -682,6 +690,10 @@ intel_plane_init(struct drm_device *dev, enum pipe pipe)
break;
case 7:
+ if (IS_HASWELL(dev))
+ intel_plane->can_scale = false;
+ else
+ intel_plane->can_scale = true;
intel_plane->max_downscale = 2;
intel_plane->update_plane = ivb_update_plane;
intel_plane->disable_plane = ivb_disable_plane;
--
1.7.11.7
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-10-23 15:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-22 17:13 [PATCH] drm/i915: Don't try to use SPR_SCALE when we don't have a sprite scaler Damien Lespiau
2012-10-22 17:19 Damien Lespiau
2012-10-23 14:16 ` Jesse Barnes
2012-10-23 14:45 ` Daniel Vetter
2012-10-23 15:00 ` Paulo Zanoni
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.