]> git.baikalelectronics.ru Git - kernel.git/commit
drm/i915: Consider HW CSB write pointer before resetting the sw read pointer
authorMichel Thierry <michel.thierry@intel.com>
Mon, 28 Sep 2015 12:25:12 +0000 (13:25 +0100)
committerJani Nikula <jani.nikula@intel.com>
Mon, 28 Sep 2015 14:23:19 +0000 (17:23 +0300)
commitd8f991a67ce6445b36f15d8012b71f0a3a4babf4
treea06f6886d3494c07a811782942931b9c76795333
parent1183a0ab0d6cd5ed824049493d04c4771741746c
drm/i915: Consider HW CSB write pointer before resetting the sw read pointer

A previous commit resets the Context Status Buffer (CSB) read pointer in
ring init
    commit d74e3bdf832a ("drm/i915: Reset CSB read pointer in ring init")

This is generally correct, but this pointer is not reset after
suspend/resume in some platforms (cht). In this case, the driver should
read the register value instead of resetting the sw read counter to 0.
Otherwise we process old events, leading to unwanted pre-emptions or
something worse.

But in other platforms (bdw) and also during GPU reset or power up, the
CSBWP is reset to 0x7 (an invalid number), and in this case the read
pointer should be set to 5 (the interrupt code will increment this
counter one more time, and will start reading from CSB[0]).

v2: When the CSB registers are reset, the read pointer needs to be set
to 5, otherwise the first write (CSB[0]) won't be read (Mika).
Replace magic numbers with GEN8_CSB_ENTRIES (6) and GEN8_CSB_PTR_MASK
(0x07).

Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Cc: stable@vger.kernel.org # v4.0+
Signed-off-by: Lei Shen <lei.shen@intel.com>
Signed-off-by: Deepak S <deepak.s@intel.com>
Signed-off-by: Michel Thierry <michel.thierry@intel.com>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/intel_lrc.c
drivers/gpu/drm/i915/intel_lrc.h