From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/2] drm/i915: Slice/Subslice/EU info via GETPARAM Date: Mon, 4 Aug 2014 10:20:37 +0200 Message-ID: <20140804082037.GP8727@phenom.ffwll.local> References: <1406771987-1127-1-git-send-email-jeff.mcgee@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 4883B6E35D for ; Mon, 4 Aug 2014 01:20:27 -0700 (PDT) Received: by mail-wi0-f177.google.com with SMTP id ho1so4505232wib.16 for ; Mon, 04 Aug 2014 01:20:24 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1406771987-1127-1-git-send-email-jeff.mcgee@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: jeff.mcgee@intel.com Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org On Wed, Jul 30, 2014 at 08:59:46PM -0500, jeff.mcgee@intel.com wrote: > From: Jeff McGee > = > Define a struct to capture information on the device's Slice/Subslice/EU > (SSEU) configuration. Add this struct to the main device info struct. > Define a packed bitfield form for the SSEU info and share it with > userspace via a new GETPARAM option. > = > Starting with Cherryview, devices may have a varying number of EU for > a given ID due to creative fusing. The surest way to determine the > configuration is by reading fuses which is best done in the kernel and > communicated to userspace. The immediate need from userspace is to > determine the number of threads of compute work that can be safely > submitted. > = > The definition of SSEU as a new drm/i915 component, with its own header > file and soon-to-be source file, is in anticipation of lots of upcoming > code for its management, particularly the power gating functionality. > = > Signed-off-by: Jeff McGee > --- > drivers/gpu/drm/i915/i915_dma.c | 3 +++ > drivers/gpu/drm/i915/i915_drv.h | 3 +++ > drivers/gpu/drm/i915/intel_sseu.h | 40 +++++++++++++++++++++++++++++++++= ++++++ > include/uapi/drm/i915_drm.h | 18 ++++++++++++++++++ > 4 files changed, 64 insertions(+) > create mode 100644 drivers/gpu/drm/i915/intel_sseu.h > = > diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_= dma.c > index 2e7f03a..f581848 100644 > --- a/drivers/gpu/drm/i915/i915_dma.c > +++ b/drivers/gpu/drm/i915/i915_dma.c > @@ -1025,6 +1025,9 @@ static int i915_getparam(struct drm_device *dev, vo= id *data, > case I915_PARAM_CMD_PARSER_VERSION: > value =3D i915_cmd_parser_get_version(); > break; > + case I915_PARAM_SSEU_INFO: > + value =3D INTEL_INFO(dev)->sseu.gp_sseu_info; > + break; > default: > DRM_DEBUG("Unknown parameter %d\n", param->param); > return -EINVAL; > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_= drv.h > index 18c9ad8..01adafd 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -45,6 +45,7 @@ > #include > #include > #include > +#include "intel_sseu.h" > = > /* General customization: > */ > @@ -562,6 +563,8 @@ struct intel_device_info { > int trans_offsets[I915_MAX_TRANSCODERS]; > int palette_offsets[I915_MAX_PIPES]; > int cursor_offsets[I915_MAX_PIPES]; > + /* Slice/Subslice/EU info */ > + struct intel_sseu_info sseu; > }; > = > #undef DEFINE_FLAG > diff --git a/drivers/gpu/drm/i915/intel_sseu.h b/drivers/gpu/drm/i915/int= el_sseu.h > new file mode 100644 > index 0000000..7db7175 > --- /dev/null > +++ b/drivers/gpu/drm/i915/intel_sseu.h > @@ -0,0 +1,40 @@ > +/* > + * Copyright =A9 2014 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person obtaining= a > + * copy of this software and associated documentation files (the "Softwa= re"), > + * to deal in the Software without restriction, including without limita= tion > + * the rights to use, copy, modify, merge, publish, distribute, sublicen= se, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the = next > + * paragraph) shall be included in all copies or substantial portions of= the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRE= SS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILI= TY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SH= ALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR = OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISI= NG > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER D= EALINGS > + * IN THE SOFTWARE. > + * > + */ > +#ifndef _INTEL_SSEU_H_ > +#define _INTEL_SSEU_H_ > + > +struct intel_sseu_info { > + /* Total slice count */ > + unsigned int slice_cnt; > + /* Total subslice count */ > + unsigned int subslice_cnt; > + /* Total execution unit count */ > + unsigned int eu_cnt; > + /* Thread count per EU */ > + unsigned int threads_per_eu; > + /* Bit field representation for I915_PARAM_SSEU_INFO */ > + u32 gp_sseu_info; > +}; > + > +#endif > diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h > index ff57f07..b99c1a2 100644 > --- a/include/uapi/drm/i915_drm.h > +++ b/include/uapi/drm/i915_drm.h > @@ -171,6 +171,23 @@ typedef struct _drm_i915_sarea { > #define I915_BOX_TEXTURE_LOAD 0x8 > #define I915_BOX_LOST_CONTEXT 0x10 > = > +/* > + * Slice/Subslice/EU Info > + * - Accessed via GETPARAM ioctl option I915_PARAM_SSEU_INFO > + * - SLICE_CNT: total slice count > + * - SUBSLICE_CNT: total subslice count > + * - EU_CNT: total execution unit count > + * - THREADS_PER_EU: thread count per EU > +*/ > +#define I915_SSEU_INFO_SLICE_CNT_MASK 0xf > +#define I915_SSEU_INFO_SLICE_CNT_SHIFT 0 > +#define I915_SSEU_INFO_SUBSLICE_CNT_MASK (0x3f<<4) > +#define I915_SSEU_INFO_SUBSLICE_CNT_SHIFT 4 > +#define I915_SSEU_INFO_EU_CNT_MASK (0xff<<10) > +#define I915_SSEU_INFO_EU_CNT_SHIFT 10 > +#define I915_SSEU_INFO_THREADS_PER_EU_MASK (0xf<<18) > +#define I915_SSEU_INFO_THREADS_PER_EU_SHIFT 18 Tbh this looks a bit too tricky, I'd just allocate a pile of getparm numbers, one for each - they're cheap. Also, usual broken record request: I need open-source userspace using this (mesa, ddx, libva). -Daniel > + > /* I915 specific ioctls > * The device specific ioctl range is 0x40 to 0x79. > */ > @@ -340,6 +357,7 @@ typedef struct drm_i915_irq_wait { > #define I915_PARAM_HAS_EXEC_HANDLE_LUT 26 > #define I915_PARAM_HAS_WT 27 > #define I915_PARAM_CMD_PARSER_VERSION 28 > +#define I915_PARAM_SSEU_INFO 29 > = > typedef struct drm_i915_getparam { > int param; > -- = > 2.0.1 > = > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- = Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch