Commit 3373ce2e authored by Imre Deak's avatar Imre Deak

drm/i915: Give proper names to MOCS entries

The purpose for each MOCS entry isn't well defined atm. Defining these
is important to remove any uncertainty about the use of these entries
for example in terms of performance and GPU/CPU coherency.

Suggested by Ville.

v4:
- Rename I915_MOCS_AUTO to I915_MOCS_PTE. (Chris)

CC: Rong R Yang <rong.r.yang@intel.com>
CC: Yakui Zhao <yakui.zhao@intel.com>
CC: Ville Syrjälä <ville.syrjala@linux.intel.com>
CC: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1467383528-16142-1-git-send-email-imre.deak@intel.com
parent 6bee14ed
...@@ -97,7 +97,8 @@ struct drm_i915_mocs_table { ...@@ -97,7 +97,8 @@ struct drm_i915_mocs_table {
* end. * end.
*/ */
static const struct drm_i915_mocs_entry skylake_mocs_table[] = { static const struct drm_i915_mocs_entry skylake_mocs_table[] = {
{ /* 0x00000009 */ [I915_MOCS_UNCACHED] = {
/* 0x00000009 */
.control_value = LE_CACHEABILITY(LE_UC) | .control_value = LE_CACHEABILITY(LE_UC) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) |
...@@ -106,7 +107,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = { ...@@ -106,7 +107,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = {
/* 0x0010 */ /* 0x0010 */
.l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC),
}, },
{ [I915_MOCS_PTE] = {
/* 0x00000038 */ /* 0x00000038 */
.control_value = LE_CACHEABILITY(LE_PAGETABLE) | .control_value = LE_CACHEABILITY(LE_PAGETABLE) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
...@@ -115,7 +116,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = { ...@@ -115,7 +116,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = {
/* 0x0030 */ /* 0x0030 */
.l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB),
}, },
{ [I915_MOCS_CACHED] = {
/* 0x0000003b */ /* 0x0000003b */
.control_value = LE_CACHEABILITY(LE_WB) | .control_value = LE_CACHEABILITY(LE_WB) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
...@@ -128,7 +129,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = { ...@@ -128,7 +129,7 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = {
/* NOTE: the LE_TGT_CACHE is not used on Broxton */ /* NOTE: the LE_TGT_CACHE is not used on Broxton */
static const struct drm_i915_mocs_entry broxton_mocs_table[] = { static const struct drm_i915_mocs_entry broxton_mocs_table[] = {
{ [I915_MOCS_UNCACHED] = {
/* 0x00000009 */ /* 0x00000009 */
.control_value = LE_CACHEABILITY(LE_UC) | .control_value = LE_CACHEABILITY(LE_UC) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
...@@ -138,7 +139,7 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = { ...@@ -138,7 +139,7 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = {
/* 0x0010 */ /* 0x0010 */
.l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC),
}, },
{ [I915_MOCS_PTE] = {
/* 0x00000038 */ /* 0x00000038 */
.control_value = LE_CACHEABILITY(LE_PAGETABLE) | .control_value = LE_CACHEABILITY(LE_PAGETABLE) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
...@@ -148,7 +149,7 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = { ...@@ -148,7 +149,7 @@ static const struct drm_i915_mocs_entry broxton_mocs_table[] = {
/* 0x0030 */ /* 0x0030 */
.l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB),
}, },
{ [I915_MOCS_CACHED] = {
/* 0x00000039 */ /* 0x00000039 */
.control_value = LE_CACHEABILITY(LE_UC) | .control_value = LE_CACHEABILITY(LE_UC) |
LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) |
......
...@@ -62,6 +62,30 @@ extern "C" { ...@@ -62,6 +62,30 @@ extern "C" {
#define I915_ERROR_UEVENT "ERROR" #define I915_ERROR_UEVENT "ERROR"
#define I915_RESET_UEVENT "RESET" #define I915_RESET_UEVENT "RESET"
/*
* MOCS indexes used for GPU surfaces, defining the cacheability of the
* surface data and the coherency for this data wrt. CPU vs. GPU accesses.
*/
enum i915_mocs_table_index {
/*
* Not cached anywhere, coherency between CPU and GPU accesses is
* guaranteed.
*/
I915_MOCS_UNCACHED,
/*
* Cacheability and coherency controlled by the kernel automatically
* based on the DRM_I915_GEM_SET_CACHING IOCTL setting and the current
* usage of the surface (used for display scanout or not).
*/
I915_MOCS_PTE,
/*
* Cached in all GPU caches available on the platform.
* Coherency between CPU and GPU accesses to the surface is not
* guaranteed without extra synchronization.
*/
I915_MOCS_CACHED,
};
/* Each region is a minimum of 16k, and there are at most 255 of them. /* Each region is a minimum of 16k, and there are at most 255 of them.
*/ */
#define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment