Message ID | 1540567966-13504-1-git-send-email-tomasz.lis@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v4,1/2] drm/i915/skl: Rework MOCS tables to keep common part in a define | expand |
On Fri, Oct 26, 2018 at 05:32:45PM +0200, Tomasz Lis wrote: > The MOCS tables are going to be very similar across platforms. > > To reduce the amount of copied code, this patch rips the common part and > puts it into a definition valid for all gen9 platforms. > > Signed-off-by: Tomasz Lis <tomasz.lis@intel.com> > Suggested-by: Lucas De Marchi <lucas.demarchi@intel.com> > Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> > Cc: Lucas De Marchi <lucas.demarchi@intel.com> yeah, this is what I was suggesting. Not sure if in future this will blow out of proportion - we need to remember that each table is 64 entries of this struct in the ro section. If this happens, then maybe we will need to change the approach and move the idx inside the entry rather than 64-entry arrays. I think this can be left for later if/when there's need. Right now this improves the status quo IMO. Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> thanks Lucas De Marchi > --- > drivers/gpu/drm/i915/intel_mocs.c | 61 ++++++++++++++------------------------- > 1 file changed, 22 insertions(+), 39 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_mocs.c b/drivers/gpu/drm/i915/intel_mocs.c > index 77e9871..76aed59 100644 > --- a/drivers/gpu/drm/i915/intel_mocs.c > +++ b/drivers/gpu/drm/i915/intel_mocs.c > @@ -96,26 +96,29 @@ struct drm_i915_mocs_table { > * may only be updated incrementally by adding entries at the > * end. > */ > -static const struct drm_i915_mocs_entry skylake_mocs_table[] = { > - [I915_MOCS_UNCACHED] = { > - /* 0x00000009 */ > - .control_value = LE_CACHEABILITY(LE_UC) | > - LE_TGT_CACHE(LE_TC_LLC_ELLC) | > - LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | > - LE_PFM(0) | LE_SCF(0), > > - /* 0x0010 */ > - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), > - }, > - [I915_MOCS_PTE] = { > - /* 0x00000038 */ > - .control_value = LE_CACHEABILITY(LE_PAGETABLE) | > - LE_TGT_CACHE(LE_TC_LLC_ELLC) | > - LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | > - LE_PFM(0) | LE_SCF(0), > - /* 0x0030 */ > - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), > +#define GEN9_MOCS_TABLE \ > + [I915_MOCS_UNCACHED] = { \ > + /* 0x00000009 */ \ > + .control_value = LE_CACHEABILITY(LE_UC) | \ > + LE_TGT_CACHE(LE_TC_LLC_ELLC) | \ > + LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | \ > + LE_PFM(0) | LE_SCF(0), \ > + /* 0x0010 */ \ > + .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), \ > + }, \ > + [I915_MOCS_PTE] = { \ > + /* 0x00000038 */ \ > + .control_value = LE_CACHEABILITY(LE_PAGETABLE) | \ > + LE_TGT_CACHE(LE_TC_LLC_ELLC) | \ > + LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | \ > + LE_PFM(0) | LE_SCF(0), \ > + /* 0x0030 */ \ > + .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), \ > }, > + > +static const struct drm_i915_mocs_entry skylake_mocs_table[] = { > + GEN9_MOCS_TABLE > [I915_MOCS_CACHED] = { > /* 0x0000003b */ > .control_value = LE_CACHEABILITY(LE_WB) | > @@ -129,33 +132,13 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = { > > /* NOTE: the LE_TGT_CACHE is not used on Broxton */ > static const struct drm_i915_mocs_entry broxton_mocs_table[] = { > - [I915_MOCS_UNCACHED] = { > - /* 0x00000009 */ > - .control_value = LE_CACHEABILITY(LE_UC) | > - LE_TGT_CACHE(LE_TC_LLC_ELLC) | > - LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | > - LE_PFM(0) | LE_SCF(0), > - > - /* 0x0010 */ > - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), > - }, > - [I915_MOCS_PTE] = { > - /* 0x00000038 */ > - .control_value = LE_CACHEABILITY(LE_PAGETABLE) | > - LE_TGT_CACHE(LE_TC_LLC_ELLC) | > - LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | > - LE_PFM(0) | LE_SCF(0), > - > - /* 0x0030 */ > - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), > - }, > + GEN9_MOCS_TABLE > [I915_MOCS_CACHED] = { > /* 0x00000039 */ > .control_value = LE_CACHEABILITY(LE_UC) | > LE_TGT_CACHE(LE_TC_LLC_ELLC) | > LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | > LE_PFM(0) | LE_SCF(0), > - > /* 0x0030 */ > .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), > }, > -- > 2.7.4 >
diff --git a/drivers/gpu/drm/i915/intel_mocs.c b/drivers/gpu/drm/i915/intel_mocs.c index 77e9871..76aed59 100644 --- a/drivers/gpu/drm/i915/intel_mocs.c +++ b/drivers/gpu/drm/i915/intel_mocs.c @@ -96,26 +96,29 @@ struct drm_i915_mocs_table { * may only be updated incrementally by adding entries at the * end. */ -static const struct drm_i915_mocs_entry skylake_mocs_table[] = { - [I915_MOCS_UNCACHED] = { - /* 0x00000009 */ - .control_value = LE_CACHEABILITY(LE_UC) | - LE_TGT_CACHE(LE_TC_LLC_ELLC) | - LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | - LE_PFM(0) | LE_SCF(0), - /* 0x0010 */ - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), - }, - [I915_MOCS_PTE] = { - /* 0x00000038 */ - .control_value = LE_CACHEABILITY(LE_PAGETABLE) | - LE_TGT_CACHE(LE_TC_LLC_ELLC) | - LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | - LE_PFM(0) | LE_SCF(0), - /* 0x0030 */ - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), +#define GEN9_MOCS_TABLE \ + [I915_MOCS_UNCACHED] = { \ + /* 0x00000009 */ \ + .control_value = LE_CACHEABILITY(LE_UC) | \ + LE_TGT_CACHE(LE_TC_LLC_ELLC) | \ + LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | \ + LE_PFM(0) | LE_SCF(0), \ + /* 0x0010 */ \ + .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), \ + }, \ + [I915_MOCS_PTE] = { \ + /* 0x00000038 */ \ + .control_value = LE_CACHEABILITY(LE_PAGETABLE) | \ + LE_TGT_CACHE(LE_TC_LLC_ELLC) | \ + LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | \ + LE_PFM(0) | LE_SCF(0), \ + /* 0x0030 */ \ + .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), \ }, + +static const struct drm_i915_mocs_entry skylake_mocs_table[] = { + GEN9_MOCS_TABLE [I915_MOCS_CACHED] = { /* 0x0000003b */ .control_value = LE_CACHEABILITY(LE_WB) | @@ -129,33 +132,13 @@ static const struct drm_i915_mocs_entry skylake_mocs_table[] = { /* NOTE: the LE_TGT_CACHE is not used on Broxton */ static const struct drm_i915_mocs_entry broxton_mocs_table[] = { - [I915_MOCS_UNCACHED] = { - /* 0x00000009 */ - .control_value = LE_CACHEABILITY(LE_UC) | - LE_TGT_CACHE(LE_TC_LLC_ELLC) | - LE_LRUM(0) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | - LE_PFM(0) | LE_SCF(0), - - /* 0x0010 */ - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_UC), - }, - [I915_MOCS_PTE] = { - /* 0x00000038 */ - .control_value = LE_CACHEABILITY(LE_PAGETABLE) | - LE_TGT_CACHE(LE_TC_LLC_ELLC) | - LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | - LE_PFM(0) | LE_SCF(0), - - /* 0x0030 */ - .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), - }, + GEN9_MOCS_TABLE [I915_MOCS_CACHED] = { /* 0x00000039 */ .control_value = LE_CACHEABILITY(LE_UC) | LE_TGT_CACHE(LE_TC_LLC_ELLC) | LE_LRUM(3) | LE_AOM(0) | LE_RSC(0) | LE_SCC(0) | LE_PFM(0) | LE_SCF(0), - /* 0x0030 */ .l3cc_value = L3_ESC(0) | L3_SCC(0) | L3_CACHEABILITY(L3_WB), },
The MOCS tables are going to be very similar across platforms. To reduce the amount of copied code, this patch rips the common part and puts it into a definition valid for all gen9 platforms. Signed-off-by: Tomasz Lis <tomasz.lis@intel.com> Suggested-by: Lucas De Marchi <lucas.demarchi@intel.com> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Lucas De Marchi <lucas.demarchi@intel.com> --- drivers/gpu/drm/i915/intel_mocs.c | 61 ++++++++++++++------------------------- 1 file changed, 22 insertions(+), 39 deletions(-)