aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff McGee <jeff.mcgee@intel.com>2015-03-09 19:06:54 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-03-17 17:30:31 -0400
commita1559ffefb2a80eabbee65d7cc04e828d4fd557d (patch)
tree6fc5ff825c6714e2c7f5ace5f05fc8155028c010
parentcd9bfacb8726681c9bda57a679d8f7ba61ecc9f8 (diff)
drm/i915: Export total subslice and EU counts
Setup new I915_GETPARAM ioctl entries for subslice total and EU total. Userspace drivers need these values when constructing GPGPU commands. This kernel query method is intended to replace the PCI ID-based tables that userspace drivers currently maintain. The kernel driver can employ fuse register reads as needed to ensure the most accurate determination of GT config attributes. This first became important with Cherryview in which the config could differ between devices with the same PCI ID. The kernel detection of these values is device-specific and not included in this patch. Because zero is not a valid value for any of these parameters, a value of zero is interpreted as unknown for the device. Userspace drivers should continue to maintain ID-based tables for older devices not supported by the new query method. v2: Increment our I915_GETPARAM indices to fit after REVISION which was merged ahead of us. For: VIZ-4636 Signed-off-by: Jeff McGee <jeff.mcgee@intel.com> Tested-by: Zhigang Gong <zhigang.gong@linux.intel.com> Acked-by: Zhigang Gong <zhigang.gong@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_dma.c10
-rw-r--r--include/uapi/drm/i915_drm.h2
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 8e914303b831..d49ed68f041e 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -153,6 +153,16 @@ static int i915_getparam(struct drm_device *dev, void *data,
153 case I915_PARAM_MMAP_VERSION: 153 case I915_PARAM_MMAP_VERSION:
154 value = 1; 154 value = 1;
155 break; 155 break;
156 case I915_PARAM_SUBSLICE_TOTAL:
157 value = INTEL_INFO(dev)->subslice_total;
158 if (!value)
159 return -ENODEV;
160 break;
161 case I915_PARAM_EU_TOTAL:
162 value = INTEL_INFO(dev)->eu_total;
163 if (!value)
164 return -ENODEV;
165 break;
156 default: 166 default:
157 DRM_DEBUG("Unknown parameter %d\n", param->param); 167 DRM_DEBUG("Unknown parameter %d\n", param->param);
158 return -EINVAL; 168 return -EINVAL;
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index b768f3b21eaa..8d1be9073380 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -348,6 +348,8 @@ typedef struct drm_i915_irq_wait {
348#define I915_PARAM_MMAP_VERSION 30 348#define I915_PARAM_MMAP_VERSION 30
349#define I915_PARAM_HAS_BSD2 31 349#define I915_PARAM_HAS_BSD2 31
350#define I915_PARAM_REVISION 32 350#define I915_PARAM_REVISION 32
351#define I915_PARAM_SUBSLICE_TOTAL 33
352#define I915_PARAM_EU_TOTAL 34
351 353
352typedef struct drm_i915_getparam { 354typedef struct drm_i915_getparam {
353 int param; 355 int param;