mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
drm/i915: Add new function to copy subslices for a slice
Add a new function to copy subslices for a specified slice between intel_sseu structures for the purpose of determining power-gate status. Note that currently ss_stride has a max of 1. Signed-off-by: Stuart Summers <stuart.summers@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20190823160307.180813-11-stuart.summers@intel.com
This commit is contained in:
parent
eaef5b3c41
commit
668df17f59
@ -3726,6 +3726,15 @@ i915_cache_sharing_set(void *data, u64 val)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
intel_sseu_copy_subslices(const struct sseu_dev_info *sseu, int slice,
|
||||||
|
u8 *to_mask)
|
||||||
|
{
|
||||||
|
int offset = slice * sseu->ss_stride;
|
||||||
|
|
||||||
|
memcpy(&to_mask[offset], &sseu->subslice_mask[offset], sseu->ss_stride);
|
||||||
|
}
|
||||||
|
|
||||||
DEFINE_SIMPLE_ATTRIBUTE(i915_cache_sharing_fops,
|
DEFINE_SIMPLE_ATTRIBUTE(i915_cache_sharing_fops,
|
||||||
i915_cache_sharing_get, i915_cache_sharing_set,
|
i915_cache_sharing_get, i915_cache_sharing_set,
|
||||||
"%llu\n");
|
"%llu\n");
|
||||||
@ -3799,7 +3808,7 @@ static void gen10_sseu_device_status(struct drm_i915_private *dev_priv,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
sseu->slice_mask |= BIT(s);
|
sseu->slice_mask |= BIT(s);
|
||||||
sseu->subslice_mask[s] = info->sseu.subslice_mask[s];
|
intel_sseu_copy_subslices(&info->sseu, s, sseu->subslice_mask);
|
||||||
|
|
||||||
for (ss = 0; ss < info->sseu.max_subslices; ss++) {
|
for (ss = 0; ss < info->sseu.max_subslices; ss++) {
|
||||||
unsigned int eu_cnt;
|
unsigned int eu_cnt;
|
||||||
@ -3850,7 +3859,8 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv,
|
|||||||
sseu->slice_mask |= BIT(s);
|
sseu->slice_mask |= BIT(s);
|
||||||
|
|
||||||
if (IS_GEN9_BC(dev_priv))
|
if (IS_GEN9_BC(dev_priv))
|
||||||
sseu->subslice_mask[s] = info->sseu.subslice_mask[s];
|
intel_sseu_copy_subslices(&info->sseu, s,
|
||||||
|
sseu->subslice_mask);
|
||||||
|
|
||||||
for (ss = 0; ss < info->sseu.max_subslices; ss++) {
|
for (ss = 0; ss < info->sseu.max_subslices; ss++) {
|
||||||
unsigned int eu_cnt;
|
unsigned int eu_cnt;
|
||||||
@ -3886,7 +3896,8 @@ static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,
|
|||||||
if (sseu->slice_mask) {
|
if (sseu->slice_mask) {
|
||||||
sseu->eu_per_subslice = info->sseu.eu_per_subslice;
|
sseu->eu_per_subslice = info->sseu.eu_per_subslice;
|
||||||
for (s = 0; s < fls(sseu->slice_mask); s++)
|
for (s = 0; s < fls(sseu->slice_mask); s++)
|
||||||
sseu->subslice_mask[s] = info->sseu.subslice_mask[s];
|
intel_sseu_copy_subslices(&info->sseu, s,
|
||||||
|
sseu->subslice_mask);
|
||||||
sseu->eu_total = sseu->eu_per_subslice *
|
sseu->eu_total = sseu->eu_per_subslice *
|
||||||
intel_sseu_subslice_total(sseu);
|
intel_sseu_subslice_total(sseu);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user