Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-17 Thread Rodrigo Vivi
On Tue, Feb 16, 2016 at 7:50 AM, Daniel Vetter  wrote:
> On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
>> Framecounter register is read-only so DMC cannot restore it
>> after exiting DC5 and DC6.
>>
>> Easiest way to go is to avoid the counter and use vblank
>> interruptions for this platform and for all the following
>> ones since DMC came to stay. At least while we can't change
>> this register to read-write.
>>
>> Signed-off-by: Rodrigo Vivi 
>
> Now my comments also in public:
> - Do we still get reasonable dc5 residency with this - it means we'll keep
>   vblank irq running forever.
>
> - I'm a bit unclear on what exactly this fixes - have you tested that
>   long-lasting vblank waits are still accurate? Just want to make sure we
>   don't just paper over the issue and desktops can still get stuck waiting
>   for a vblank.

apparently no... so please just ignore this patch for now... after a
while with that patch I was seeing the issue again...

>
> Just a bit suprised that the only problem is the framecounter, and not
> that vblanks stop happening too.
>
> We need to also know these details for the proper fix, which will involve
> grabbing power well references (might need a new one for vblank
> interrupts) to make sure.

Yeap, I liked this idea... so combining a power domain reference with
a vblank count restore once we know the dc off is blocked we could
workaround this case... something like:

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 25a8937..2b18778 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2743,7 +2743,10 @@ static int gen8_enable_vblank(struct drm_device
*dev, unsigned int pipe)
struct drm_i915_private *dev_priv = dev->dev_private;
unsigned long irqflags;

+   intel_display_power_get(dev_priv, POWER_DOMAIN_VBLANK);
+
spin_lock_irqsave(_priv->irq_lock, irqflags);
+   dev->vblank[pipe].last = g4x_get_vblank_counter(dev, pipe);
bdw_enable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
spin_unlock_irqrestore(_priv->irq_lock, irqflags);

@@ -2796,6 +2799,8 @@ static void gen8_disable_vblank(struct
drm_device *dev, unsigned int pipe)
spin_lock_irqsave(_priv->irq_lock, irqflags);
bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
spin_unlock_irqrestore(_priv->irq_lock, irqflags);
+
+   intel_display_power_put(dev_priv, POWER_DOMAIN_VBLANK);
 }

where POWER_DOMAIN_VBLANK is part of:
#define SKL_DISPLAY_DC_OFF_POWER_DOMAINS (  \
BIT(POWER_DOMAIN_VBLANK) |  \


However I have my dmesg flooded by:


[   69.025562] BUG: sleeping function called from invalid context at
drivers/base/power/runtime.c:955
[   69.025576] in_atomic(): 1, irqs_disabled(): 1, pid: 995, name: Xorg
[   69.025582] Preemption disabled at:[]
drm_vblank_get+0x4e/0xd0

[   69.025619] CPU: 3 PID: 995 Comm: Xorg Tainted: G U  W
4.5.0-rc4+ #11
[   69.025628] Hardware name: Intel Corporation Kabylake Client
platform/Skylake U DDR3L RVP7, BIOS KBLSE2R1.R00.X019.B01.1512230743
12/23/2015
[   69.025637]   88003f0bfbb0 8148e983

[   69.025653]  880085b04200 88003f0bfbd0 81133ece
81d77f23
[   69.025667]  03bb 88003f0bfbf8 81133f89
88016913a098
[   69.025680] Call Trace:
[   69.025697]  [] dump_stack+0x65/0x92
[   69.025711]  [] ___might_sleep+0x10e/0x180
[   69.025722]  [] __might_sleep+0x49/0x80
[   69.025739]  [] __pm_runtime_resume+0x79/0x80
[   69.025841]  [] intel_runtime_pm_get+0x28/0x90 [i915]
[   69.025924]  [] intel_display_power_get+0x19/0x50 [i915]
[   69.025995]  [] gen8_enable_vblank+0x34/0xc0 [i915]
[   69.026016]  [] drm_vblank_enable+0x76/0xd0




Another thing that I search in the spec was for an Interrupt to know
when we came back from DC5 or DC6 or got power well re-enabled, so we
would be able to restore the drm last counter... but I couldn't find
any...


Any other idea?


>
> Cheers, Daniel
>
>> ---
>>  drivers/gpu/drm/i915/i915_irq.c | 7 +--
>>  1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_irq.c 
>> b/drivers/gpu/drm/i915/i915_irq.c
>> index 25a8937..c294a4b 100644
>> --- a/drivers/gpu/drm/i915/i915_irq.c
>> +++ b/drivers/gpu/drm/i915/i915_irq.c
>> @@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>>
>>   pm_qos_add_request(_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 
>> PM_QOS_DEFAULT_VALUE);
>>
>> - if (IS_GEN2(dev_priv)) {
>> + if (INTEL_INFO(dev_priv)->gen >= 9) {
>> + dev->max_vblank_count = 0;
>> + dev->driver->get_vblank_counter = g4x_get_vblank_counter;
>> + } else if (IS_GEN2(dev_priv)) {
>>   dev->max_vblank_count = 0;
>>   dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
>>   } else if (IS_G4X(dev_priv) || 

Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-16 Thread Daniel Vetter
On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
> Framecounter register is read-only so DMC cannot restore it
> after exiting DC5 and DC6.
> 
> Easiest way to go is to avoid the counter and use vblank
> interruptions for this platform and for all the following
> ones since DMC came to stay. At least while we can't change
> this register to read-write.
> 
> Signed-off-by: Rodrigo Vivi 

Now my comments also in public:
- Do we still get reasonable dc5 residency with this - it means we'll keep
  vblank irq running forever.

- I'm a bit unclear on what exactly this fixes - have you tested that
  long-lasting vblank waits are still accurate? Just want to make sure we
  don't just paper over the issue and desktops can still get stuck waiting
  for a vblank.

Just a bit suprised that the only problem is the framecounter, and not
that vblanks stop happening too.

We need to also know these details for the proper fix, which will involve
grabbing power well references (might need a new one for vblank
interrupts) to make sure.

Cheers, Daniel

> ---
>  drivers/gpu/drm/i915/i915_irq.c | 7 +--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 25a8937..c294a4b 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>  
>   pm_qos_add_request(_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 
> PM_QOS_DEFAULT_VALUE);
>  
> - if (IS_GEN2(dev_priv)) {
> + if (INTEL_INFO(dev_priv)->gen >= 9) {
> + dev->max_vblank_count = 0;
> + dev->driver->get_vblank_counter = g4x_get_vblank_counter;
> + } else if (IS_GEN2(dev_priv)) {
>   dev->max_vblank_count = 0;
>   dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
>   } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
> @@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>* Gen2 doesn't have a hardware frame counter and so depends on
>* vblank interrupts to produce sane vblank seuquence numbers.
>*/
> - if (!IS_GEN2(dev_priv))
> + if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   dev->vblank_disable_immediate = true;
>  
>   dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
> -- 
> 2.4.3
> 
> ___
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-12 Thread David Weinehall
On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
> Framecounter register is read-only so DMC cannot restore it
> after exiting DC5 and DC6.
> 
> Easiest way to go is to avoid the counter and use vblank
> interruptions for this platform and for all the following
> ones since DMC came to stay. At least while we can't change
> this register to read-write.
> 
> Signed-off-by: Rodrigo Vivi 
> ---
>  drivers/gpu/drm/i915/i915_irq.c | 7 +--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 25a8937..c294a4b 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>  
>   pm_qos_add_request(_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 
> PM_QOS_DEFAULT_VALUE);
>  
> - if (IS_GEN2(dev_priv)) {
> + if (INTEL_INFO(dev_priv)->gen >= 9) {
> + dev->max_vblank_count = 0;
> + dev->driver->get_vblank_counter = g4x_get_vblank_counter;
> + } else if (IS_GEN2(dev_priv)) {
>   dev->max_vblank_count = 0;
>   dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
>   } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
> @@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>* Gen2 doesn't have a hardware frame counter and so depends on
>* vblank interrupts to produce sane vblank seuquence numbers.
>*/
> - if (!IS_GEN2(dev_priv))
> + if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)

I think this should be:

if (INTEL_INFO(dev_priv)->gen < 9)

If gen < 9, then IS_GEN2 is always true, also ! has higher precedence
than >=, so you're essentially comparing whether the logical negation of
INTEL_INFO(dev_priv)->gen is >= 9.


Kind regards, David
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-12 Thread Vivi, Rodrigo
doh!! sent the wrong version... going to sent the right one now...

On Fri, 2016-02-12 at 09:32 +0800, kbuild test robot wrote:
> Hi Rodrigo,
> 
> [auto build test WARNING on drm-intel/for-linux-next]
> [also build test WARNING on v4.5-rc3 next-20160211]
> [if your patch is applied to the wrong git tree, please drop us a 
> note to help improving the system]
> 
> url:https://github.com/0day-ci/linux/commits/Rodrigo-Vivi/drm-i91
> 5-Avoid-vblank-counter-for-gen9/20160212-090608
> base:   git://anongit.freedesktop.org/drm-intel for-linux-next
> config: x86_64-randconfig-x000-201606 (attached as .config)
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64 
> 
> All warnings (new ones prefixed by >>):
> 
>In file included from include/uapi/linux/stddef.h:1:0,
> from include/linux/stddef.h:4,
> from include/uapi/linux/posix_types.h:4,
> from include/uapi/linux/types.h:13,
> from include/linux/types.h:5,
> from include/linux/sysrq.h:18,
> from drivers/gpu/drm/i915/i915_irq.c:31:
>drivers/gpu/drm/i915/i915_irq.c: In function 'intel_irq_init':
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of 
> constant '9' with boolean expression is always false [-Wbool-compare]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:147:28: note: in definition of macro 
> '__trace_if'
>  if (__builtin_constant_p((cond)) ? !!(cond) :   \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is 
> only applied to the left hand side of comparison [-Wlogical-not
> -parentheses]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:147:28: note: in definition of macro 
> '__trace_if'
>  if (__builtin_constant_p((cond)) ? !!(cond) :   \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of 
> constant '9' with boolean expression is always false [-Wbool-compare]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:147:40: note: in definition of macro 
> '__trace_if'
>  if (__builtin_constant_p((cond)) ? !!(cond) :   \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is 
> only applied to the left hand side of comparison [-Wlogical-not
> -parentheses]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:147:40: note: in definition of macro 
> '__trace_if'
>  if (__builtin_constant_p((cond)) ? !!(cond) :   \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of 
> constant '9' with boolean expression is always false [-Wbool-compare]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:158:16: note: in definition of macro 
> '__trace_if'
>   __r = !!(cond); \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
>drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is 
> only applied to the left hand side of comparison [-Wlogical-not
> -parentheses]
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   ^
>include/linux/compiler.h:158:16: note: in definition of macro 
> '__trace_if'
>   __r = !!(cond); \
>^
> > > drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of 
> > > macro 'if'
>  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>  ^
> 
> vim +/if +4578 drivers/gpu/drm/i915/i915_irq.c
> 
>   4562} else if (IS_GEN2(dev_priv)) {
>   4563

Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-12 Thread Ville Syrjälä
On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
> Framecounter register is read-only so DMC cannot restore it
> after exiting DC5 and DC6.
> 
> Easiest way to go is to avoid the counter and use vblank
> interruptions for this platform and for all the following
> ones since DMC came to stay. At least while we can't change
> this register to read-write.
> 
> Signed-off-by: Rodrigo Vivi 
> ---
>  drivers/gpu/drm/i915/i915_irq.c | 7 +--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 25a8937..c294a4b 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>  
>   pm_qos_add_request(_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 
> PM_QOS_DEFAULT_VALUE);
>  
> - if (IS_GEN2(dev_priv)) {
> + if (INTEL_INFO(dev_priv)->gen >= 9) {
> + dev->max_vblank_count = 0;
> + dev->driver->get_vblank_counter = g4x_get_vblank_counter;

= i8xx_get_vblank_counter

> + } else if (IS_GEN2(dev_priv)) {
>   dev->max_vblank_count = 0;
>   dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
>   } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
> @@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
>* Gen2 doesn't have a hardware frame counter and so depends on
>* vblank interrupts to produce sane vblank seuquence numbers.
>*/
> - if (!IS_GEN2(dev_priv))
> + if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
>   dev->vblank_disable_immediate = true;

You can just drop this part.

>  
>   dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
> -- 
> 2.4.3
> 
> ___
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Ville Syrjälä
Intel OTC
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-12 Thread Vivi, Rodrigo
Oh, actually please just ignore this patch completely.
More work here need to be done. This apparently helped on the issue
that I was facing here but doesnt' solve completely.

On Fri, 2016-02-12 at 07:58 -0800, Rodrigo Vivi wrote:
> On Fri, 2016-02-12 at 11:34 +0200, David Weinehall wrote:
> > On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
> > > Framecounter register is read-only so DMC cannot restore it
> > > after exiting DC5 and DC6.
> > > 
> > > Easiest way to go is to avoid the counter and use vblank
> > > interruptions for this platform and for all the following
> > > ones since DMC came to stay. At least while we can't change
> > > this register to read-write.
> > > 
> > > Signed-off-by: Rodrigo Vivi 
> > > ---
> > >  drivers/gpu/drm/i915/i915_irq.c | 7 +--
> > >  1 file changed, 5 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/i915_irq.c 
> > > b/drivers/gpu/drm/i915/i915_irq.c
> > > index 25a8937..c294a4b 100644
> > > --- a/drivers/gpu/drm/i915/i915_irq.c
> > > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > > @@ -4556,7 +4556,10 @@ void intel_irq_init(struct 
> > > drm_i915_private 
> > > *dev_priv)
> > >  
> > >   pm_qos_add_request(_priv->pm_qos, 
> > > PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE);
> > >  
> > > - if (IS_GEN2(dev_priv)) {
> > > + if (INTEL_INFO(dev_priv)->gen >= 9) {
> > > + dev->max_vblank_count = 0;
> > > + dev->driver->get_vblank_counter = 
> > > g4x_get_vblank_counter;
> > > + } else if (IS_GEN2(dev_priv)) {
> > >   dev->max_vblank_count = 0;
> > >   dev->driver->get_vblank_counter = 
> > > i8xx_get_vblank_counter;
> > >   } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen 
> > > > = 5) {
> > > @@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private 
> > > *dev_priv)
> > >* Gen2 doesn't have a hardware frame counter and so 
> > > depends on
> > >* vblank interrupts to produce sane vblank seuquence 
> > > numbers.
> > >*/
> > > - if (!IS_GEN2(dev_priv))
> > > + if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 
> > > 9)
> > 
> > I think this should be:
> > 
> > if (INTEL_INFO(dev_priv)->gen < 9)
> 
> Yeap, < 9 is better...
> 
> > 
> > If gen < 9, then IS_GEN2 is always true, also ! has higher 
> > precedence
> > than >=, so you're essentially comparing whether the logical 
> > negation 
> > of
> > INTEL_INFO(dev_priv)->gen is >= 9.
> 
> but it is also !gen2
> 
> So I believe the right is
> 
> if (INTEL_INFO(dev_priv)->gen < 9 && !IS_GEN2(dev_priv))
> 
> agree?
> 
> > 
> > 
> > Kind regards, David
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-12 Thread Vivi, Rodrigo
On Fri, 2016-02-12 at 11:34 +0200, David Weinehall wrote:
> On Thu, Feb 11, 2016 at 09:00:47AM -0800, Rodrigo Vivi wrote:
> > Framecounter register is read-only so DMC cannot restore it
> > after exiting DC5 and DC6.
> > 
> > Easiest way to go is to avoid the counter and use vblank
> > interruptions for this platform and for all the following
> > ones since DMC came to stay. At least while we can't change
> > this register to read-write.
> > 
> > Signed-off-by: Rodrigo Vivi 
> > ---
> >  drivers/gpu/drm/i915/i915_irq.c | 7 +--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_irq.c 
> > b/drivers/gpu/drm/i915/i915_irq.c
> > index 25a8937..c294a4b 100644
> > --- a/drivers/gpu/drm/i915/i915_irq.c
> > +++ b/drivers/gpu/drm/i915/i915_irq.c
> > @@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private 
> > *dev_priv)
> >  
> > pm_qos_add_request(_priv->pm_qos, 
> > PM_QOS_CPU_DMA_LATENCY, PM_QOS_DEFAULT_VALUE);
> >  
> > -   if (IS_GEN2(dev_priv)) {
> > +   if (INTEL_INFO(dev_priv)->gen >= 9) {
> > +   dev->max_vblank_count = 0;
> > +   dev->driver->get_vblank_counter = 
> > g4x_get_vblank_counter;
> > +   } else if (IS_GEN2(dev_priv)) {
> > dev->max_vblank_count = 0;
> > dev->driver->get_vblank_counter = 
> > i8xx_get_vblank_counter;
> > } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen 
> > >= 5) {
> > @@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private 
> > *dev_priv)
> >  * Gen2 doesn't have a hardware frame counter and so 
> > depends on
> >  * vblank interrupts to produce sane vblank seuquence 
> > numbers.
> >  */
> > -   if (!IS_GEN2(dev_priv))
> > +   if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
> 
> I think this should be:
> 
> if (INTEL_INFO(dev_priv)->gen < 9)

Yeap, < 9 is better...

> 
> If gen < 9, then IS_GEN2 is always true, also ! has higher precedence
> than >=, so you're essentially comparing whether the logical negation 
> of
> INTEL_INFO(dev_priv)->gen is >= 9.

but it is also !gen2

So I believe the right is

if (INTEL_INFO(dev_priv)->gen < 9 && !IS_GEN2(dev_priv))

agree?

> 
> 
> Kind regards, David
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-11 Thread Rodrigo Vivi
Framecounter register is read-only so DMC cannot restore it
after exiting DC5 and DC6.

Easiest way to go is to avoid the counter and use vblank
interruptions for this platform and for all the following
ones since DMC came to stay. At least while we can't change
this register to read-write.

Signed-off-by: Rodrigo Vivi 
---
 drivers/gpu/drm/i915/i915_irq.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 25a8937..c294a4b 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -4556,7 +4556,10 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
 
pm_qos_add_request(_priv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 
PM_QOS_DEFAULT_VALUE);
 
-   if (IS_GEN2(dev_priv)) {
+   if (INTEL_INFO(dev_priv)->gen >= 9) {
+   dev->max_vblank_count = 0;
+   dev->driver->get_vblank_counter = g4x_get_vblank_counter;
+   } else if (IS_GEN2(dev_priv)) {
dev->max_vblank_count = 0;
dev->driver->get_vblank_counter = i8xx_get_vblank_counter;
} else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
@@ -4572,7 +4575,7 @@ void intel_irq_init(struct drm_i915_private *dev_priv)
 * Gen2 doesn't have a hardware frame counter and so depends on
 * vblank interrupts to produce sane vblank seuquence numbers.
 */
-   if (!IS_GEN2(dev_priv))
+   if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
dev->vblank_disable_immediate = true;
 
dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
-- 
2.4.3

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-11 Thread kbuild test robot
Hi Rodrigo,

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on v4.5-rc3 next-20160211]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Rodrigo-Vivi/drm-i915-Avoid-vblank-counter-for-gen9/20160212-090608
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-x011-201606 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/i915/i915_irq.c: In function 'intel_irq_init':
>> drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of constant '9' 
>> with boolean expression is always false [-Wbool-compare]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is only 
>> applied to the left hand side of comparison [-Wlogical-not-parentheses]

vim +/9 +4578 drivers/gpu/drm/i915/i915_irq.c

  4562  } else if (IS_GEN2(dev_priv)) {
  4563  dev->max_vblank_count = 0;
  4564  dev->driver->get_vblank_counter = 
i8xx_get_vblank_counter;
  4565  } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
  4566  dev->max_vblank_count = 0x; /* full 32 bit 
counter */
  4567  dev->driver->get_vblank_counter = 
g4x_get_vblank_counter;
  4568  } else {
  4569  dev->driver->get_vblank_counter = 
i915_get_vblank_counter;
  4570  dev->max_vblank_count = 0xff; /* only 24 bits of 
frame count */
  4571  }
  4572  
  4573  /*
  4574   * Opt out of the vblank disable timer on everything except 
gen2.
  4575   * Gen2 doesn't have a hardware frame counter and so depends on
  4576   * vblank interrupts to produce sane vblank seuquence numbers.
  4577   */
> 4578  if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  4579  dev->vblank_disable_immediate = true;
  4580  
  4581  dev->driver->get_vblank_timestamp = i915_get_vblank_timestamp;
  4582  dev->driver->get_scanout_position = i915_get_crtc_scanoutpos;
  4583  
  4584  if (IS_CHERRYVIEW(dev_priv)) {
  4585  dev->driver->irq_handler = cherryview_irq_handler;
  4586  dev->driver->irq_preinstall = cherryview_irq_preinstall;

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH] drm/i915: Avoid vblank counter for gen9+

2016-02-11 Thread kbuild test robot
Hi Rodrigo,

[auto build test WARNING on drm-intel/for-linux-next]
[also build test WARNING on v4.5-rc3 next-20160211]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improving the system]

url:
https://github.com/0day-ci/linux/commits/Rodrigo-Vivi/drm-i915-Avoid-vblank-counter-for-gen9/20160212-090608
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
config: x86_64-randconfig-x000-201606 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   In file included from include/uapi/linux/stddef.h:1:0,
from include/linux/stddef.h:4,
from include/uapi/linux/posix_types.h:4,
from include/uapi/linux/types.h:13,
from include/linux/types.h:5,
from include/linux/sysrq.h:18,
from drivers/gpu/drm/i915/i915_irq.c:31:
   drivers/gpu/drm/i915/i915_irq.c: In function 'intel_irq_init':
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of constant '9' 
with boolean expression is always false [-Wbool-compare]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
 if (__builtin_constant_p((cond)) ? !!(cond) :   \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is only 
applied to the left hand side of comparison [-Wlogical-not-parentheses]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
 if (__builtin_constant_p((cond)) ? !!(cond) :   \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of constant '9' 
with boolean expression is always false [-Wbool-compare]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:147:40: note: in definition of macro '__trace_if'
 if (__builtin_constant_p((cond)) ? !!(cond) :   \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is only 
applied to the left hand side of comparison [-Wlogical-not-parentheses]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:147:40: note: in definition of macro '__trace_if'
 if (__builtin_constant_p((cond)) ? !!(cond) :   \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: comparison of constant '9' 
with boolean expression is always false [-Wbool-compare]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:158:16: note: in definition of macro '__trace_if'
  __r = !!(cond); \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^
   drivers/gpu/drm/i915/i915_irq.c:4578:55: warning: logical not is only 
applied to the left hand side of comparison [-Wlogical-not-parentheses]
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
  ^
   include/linux/compiler.h:158:16: note: in definition of macro '__trace_if'
  __r = !!(cond); \
   ^
>> drivers/gpu/drm/i915/i915_irq.c:4578:2: note: in expansion of macro 'if'
 if (!IS_GEN2(dev_priv) && !INTEL_INFO(dev_priv)->gen >= 9)
 ^

vim +/if +4578 drivers/gpu/drm/i915/i915_irq.c

  4562  } else if (IS_GEN2(dev_priv)) {
  4563  dev->max_vblank_count = 0;
  4564  dev->driver->get_vblank_counter = 
i8xx_get_vblank_counter;
  4565  } else if (IS_G4X(dev_priv) || INTEL_INFO(dev_priv)->gen >= 5) {
  4566  dev->max_vblank_count = 0x; /* full 32 bit 
counter */
  4567  dev->driver->get_vblank_counter = 
g4x_get_vblank_counter;
  4568  } else {
  4569