Skip to content

Commit d3d5792

Browse files
kgardinemikuint
authored andcommitted
drm/i915/icl: Update subslice define for ICL 11
ICL 11 has a greater number of maximum subslices. This patch reflects this. v2: GEN11 updates to MCR_SELECTOR (Oscar) v3: Copypasta error in the new defines (Lionel) Bspec: 21139 BSpec: 21108 Signed-off-by: Kelvin Gardiner <kelvin.gardiner@intel.com> Reviewed-by: Oscar Mateo <oscar.mateo@intel.com> (v1) Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> (v1) Signed-off-by: Oscar Mateo <oscar.mateo@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180316121456.11577-3-mika.kuoppala@linux.intel.com Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
1 parent d53d5ff commit d3d5792

File tree

3 files changed

+23
-5
lines changed

3 files changed

+23
-5
lines changed

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,6 +2151,10 @@ enum i915_power_well_id {
21512151
#define GEN8_MCR_SLICE_MASK GEN8_MCR_SLICE(3)
21522152
#define GEN8_MCR_SUBSLICE(subslice) (((subslice) & 3) << 24)
21532153
#define GEN8_MCR_SUBSLICE_MASK GEN8_MCR_SUBSLICE(3)
2154+
#define GEN11_MCR_SLICE(slice) (((slice) & 0xf) << 27)
2155+
#define GEN11_MCR_SLICE_MASK GEN11_MCR_SLICE(0xf)
2156+
#define GEN11_MCR_SUBSLICE(subslice) (((subslice) & 0x7) << 24)
2157+
#define GEN11_MCR_SUBSLICE_MASK GEN11_MCR_SUBSLICE(0x7)
21542158
#define RING_IPEIR(base) _MMIO((base)+0x64)
21552159
#define RING_IPEHR(base) _MMIO((base)+0x68)
21562160
/*

drivers/gpu/drm/i915/intel_engine_cs.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -800,10 +800,24 @@ static inline uint32_t
800800
read_subslice_reg(struct drm_i915_private *dev_priv, int slice,
801801
int subslice, i915_reg_t reg)
802802
{
803+
uint32_t mcr_slice_subslice_mask;
804+
uint32_t mcr_slice_subslice_select;
803805
uint32_t mcr;
804806
uint32_t ret;
805807
enum forcewake_domains fw_domains;
806808

809+
if (INTEL_GEN(dev_priv) >= 11) {
810+
mcr_slice_subslice_mask = GEN11_MCR_SLICE_MASK |
811+
GEN11_MCR_SUBSLICE_MASK;
812+
mcr_slice_subslice_select = GEN11_MCR_SLICE(slice) |
813+
GEN11_MCR_SUBSLICE(subslice);
814+
} else {
815+
mcr_slice_subslice_mask = GEN8_MCR_SLICE_MASK |
816+
GEN8_MCR_SUBSLICE_MASK;
817+
mcr_slice_subslice_select = GEN8_MCR_SLICE(slice) |
818+
GEN8_MCR_SUBSLICE(subslice);
819+
}
820+
807821
fw_domains = intel_uncore_forcewake_for_reg(dev_priv, reg,
808822
FW_REG_READ);
809823
fw_domains |= intel_uncore_forcewake_for_reg(dev_priv,
@@ -818,14 +832,14 @@ read_subslice_reg(struct drm_i915_private *dev_priv, int slice,
818832
* The HW expects the slice and sublice selectors to be reset to 0
819833
* after reading out the registers.
820834
*/
821-
WARN_ON_ONCE(mcr & (GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK));
822-
mcr &= ~(GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK);
823-
mcr |= GEN8_MCR_SLICE(slice) | GEN8_MCR_SUBSLICE(subslice);
835+
WARN_ON_ONCE(mcr & mcr_slice_subslice_mask);
836+
mcr &= ~mcr_slice_subslice_mask;
837+
mcr |= mcr_slice_subslice_select;
824838
I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
825839

826840
ret = I915_READ_FW(reg);
827841

828-
mcr &= ~(GEN8_MCR_SLICE_MASK | GEN8_MCR_SUBSLICE_MASK);
842+
mcr &= ~mcr_slice_subslice_mask;
829843
I915_WRITE_FW(GEN8_MCR_SELECTOR, mcr);
830844

831845
intel_uncore_forcewake_put__locked(dev_priv, fw_domains);

drivers/gpu/drm/i915/intel_ringbuffer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ hangcheck_action_to_str(const enum intel_engine_hangcheck_action a)
8686
}
8787

8888
#define I915_MAX_SLICES 3
89-
#define I915_MAX_SUBSLICES 3
89+
#define I915_MAX_SUBSLICES 8
9090

9191
#define instdone_slice_mask(dev_priv__) \
9292
(INTEL_GEN(dev_priv__) == 7 ? \

0 commit comments

Comments
 (0)