[Intel-gfx] [PATCH v2 3/3] drm/i915: Add MCR ranges for gen11 and gen12
Daniele Ceraolo Spurio
daniele.ceraolospurio at intel.com
Tue May 12 20:57:44 UTC 2020
On 5/1/20 9:57 PM, Matt Roper wrote:
> The multicast register ranges are slightly different for gen11 and gen12
> than the table we have for gen8. This information never got updated in
> the bspec, so this patch is based on a spreadsheet provided by the
> hardware team while they work on getting the official documentation
> updated.
>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_workarounds.c | 45 ++++++++++++++++++---
> 1 file changed, 39 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_workarounds.c b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> index b11b83546696..370607514e7b 100644
> --- a/drivers/gpu/drm/i915/gt/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/gt/intel_workarounds.c
> @@ -1668,10 +1668,12 @@ create_scratch(struct i915_address_space *vm, int count)
> return ERR_PTR(err);
> }
>
> -static const struct {
> +struct mcr_range {
> u32 start;
> u32 end;
> -} mcr_ranges_gen8[] = {
> +};
> +
> +static const struct mcr_range mcr_ranges_gen8[] = {
> { .start = 0x5500, .end = 0x55ff },
> { .start = 0x7000, .end = 0x7fff },
> { .start = 0x9400, .end = 0x97ff },
> @@ -1680,11 +1682,42 @@ static const struct {
> {},
> };
>
> +static const struct mcr_range mcr_ranges_gen11[] = {
> + { .start = 0x5500, .end = 0x55ff },
> + { .start = 0x7000, .end = 0x7fff },
> + { .start = 0x8140, .end = 0x815f },
> + { .start = 0x8c00, .end = 0x8cff },
> + { .start = 0x94d0, .end = 0x955f },
> + { .start = 0xb000, .end = 0xb3ff },
> + { .start = 0xdf00, .end = 0xe8ff },
> + { .start = 0x24400, .end = 0x24fff },
> + {},
> +};
> +
> +static const struct mcr_range mcr_ranges_gen12[] = {
> + { .start = 0xb00, .end = 0xbff },
> + { .start = 0x1000, .end = 0x1fff },
> + { .start = 0x8150, .end = 0x815f },
> + { .start = 0x8700, .end = 0x87ff },
> + { .start = 0x9520, .end = 0x955f },
> + { .start = 0xb100, .end = 0xb3ff },
> + { .start = 0xde80, .end = 0xe8ff },
> + { .start = 0x24a00, .end = 0x24a7f },
> + {},
> +};
> +
The tables match what's in the magic spreadsheet.
Given that the steering ranges usually match forcewake ranges, IMO
long-term we should aim to unify the 2 into a single table, but that's
something for another time.
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
Daniele
> static bool mcr_range(struct drm_i915_private *i915, u32 offset)
> {
> + const struct mcr_range *range_list;
> int i;
>
> - if (INTEL_GEN(i915) < 8)
> + if (INTEL_GEN(i915) >= 12)
> + range_list = mcr_ranges_gen12;
> + else if (INTEL_GEN(i915) >= 11)
> + range_list = mcr_ranges_gen11;
> + else if (INTEL_GEN(i915) >= 8)
> + range_list = mcr_ranges_gen8;
> + else
> return false;
>
> /*
> @@ -1692,9 +1725,9 @@ static bool mcr_range(struct drm_i915_private *i915, u32 offset)
> * which only controls CPU initiated MMIO. Routing does not
> * work for CS access so we cannot verify them on this path.
> */
> - for (i = 0; mcr_ranges_gen8[i].start; i++)
> - if (offset >= mcr_ranges_gen8[i].start &&
> - offset <= mcr_ranges_gen8[i].end)
> + for (i = 0; range_list[i].start; i++)
> + if (offset >= range_list[i].start &&
> + offset <= range_list[i].end)
> return true;
>
> return false;
>
More information about the Intel-gfx
mailing list