All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
To: Lionel Landwerlin <lionel.g.landwerlin@intel.com>,
	igt-dev@lists.freedesktop.org
Subject: Re: [igt-dev] [PATCH i-g-t v9 1/3] include: bump drm uAPI headers
Date: Mon, 12 Mar 2018 11:56:10 +0000	[thread overview]
Message-ID: <62b9589f-dcde-3158-498f-55357873a42a@linux.intel.com> (raw)
In-Reply-To: <20180309145034.25757-1-lionel.g.landwerlin@intel.com>


On 09/03/2018 14:50, Lionel Landwerlin wrote:
> Taken from drm-tip :
> 
> commit 1e6aa7e55c28ecd842b8b4599e4273c2429ee061
> Author: Jani Nikula <jani.nikula@intel.com>
> Date:   Tue Mar 6 12:41:55 2018 +0200
> 
>      drm/i915/icl: do not save DDI A/E sharing bit for ICL
> 
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> ---
>   include/drm-uapi/amdgpu_drm.h |   4 +
>   include/drm-uapi/drm_fourcc.h |  38 +++++----
>   include/drm-uapi/drm_mode.h   |  34 ++++++--
>   include/drm-uapi/exynos_drm.h | 192 +-----------------------------------------
>   include/drm-uapi/i915_drm.h   | 152 ++++++++++++++++++++++++++++++++-
>   include/drm-uapi/vc4_drm.h    |  76 +++++++++++++++++
>   lib/igt_perf.h                |   7 --
>   7 files changed, 277 insertions(+), 226 deletions(-)
> 
> diff --git a/include/drm-uapi/amdgpu_drm.h b/include/drm-uapi/amdgpu_drm.h
> index 4d21191a..1816bd82 100644
> --- a/include/drm-uapi/amdgpu_drm.h
> +++ b/include/drm-uapi/amdgpu_drm.h
> @@ -664,6 +664,10 @@ struct drm_amdgpu_cs_chunk_data {
>   	#define AMDGPU_INFO_SENSOR_VDDNB		0x6
>   	/* Subquery id: Query graphics voltage */
>   	#define AMDGPU_INFO_SENSOR_VDDGFX		0x7
> +	/* Subquery id: Query GPU stable pstate shader clock */
> +	#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK		0x8
> +	/* Subquery id: Query GPU stable pstate memory clock */
> +	#define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK		0x9
>   /* Number of VRAM page faults on CPU access. */
>   #define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS	0x1E
>   #define AMDGPU_INFO_VRAM_LOST_COUNTER		0x1F
> diff --git a/include/drm-uapi/drm_fourcc.h b/include/drm-uapi/drm_fourcc.h
> index 3ad838d3..e04613d3 100644
> --- a/include/drm-uapi/drm_fourcc.h
> +++ b/include/drm-uapi/drm_fourcc.h
> @@ -178,7 +178,7 @@ extern "C" {
>   #define DRM_FORMAT_MOD_VENDOR_NONE    0
>   #define DRM_FORMAT_MOD_VENDOR_INTEL   0x01
>   #define DRM_FORMAT_MOD_VENDOR_AMD     0x02
> -#define DRM_FORMAT_MOD_VENDOR_NV      0x03
> +#define DRM_FORMAT_MOD_VENDOR_NVIDIA  0x03
>   #define DRM_FORMAT_MOD_VENDOR_SAMSUNG 0x04
>   #define DRM_FORMAT_MOD_VENDOR_QCOM    0x05
>   #define DRM_FORMAT_MOD_VENDOR_VIVANTE 0x06
> @@ -188,7 +188,7 @@ extern "C" {
>   #define DRM_FORMAT_RESERVED	      ((1ULL << 56) - 1)
>   
>   #define fourcc_mod_code(vendor, val) \
> -	((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | (val & 0x00ffffffffffffffULL))
> +	((((__u64)DRM_FORMAT_MOD_VENDOR_## vendor) << 56) | ((val) & 0x00ffffffffffffffULL))
>   
>   /*
>    * Format Modifier tokens:
> @@ -338,29 +338,17 @@ extern "C" {
>    */
>   #define DRM_FORMAT_MOD_VIVANTE_SPLIT_SUPER_TILED fourcc_mod_code(VIVANTE, 4)
>   
> -/* NVIDIA Tegra frame buffer modifiers */
> -
> -/*
> - * Some modifiers take parameters, for example the number of vertical GOBs in
> - * a block. Reserve the lower 32 bits for parameters
> - */
> -#define __fourcc_mod_tegra_mode_shift 32
> -#define fourcc_mod_tegra_code(val, params) \
> -	fourcc_mod_code(NV, ((((__u64)val) << __fourcc_mod_tegra_mode_shift) | params))
> -#define fourcc_mod_tegra_mod(m) \
> -	(m & ~((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
> -#define fourcc_mod_tegra_param(m) \
> -	(m & ((1ULL << __fourcc_mod_tegra_mode_shift) - 1))
> +/* NVIDIA frame buffer modifiers */
>   
>   /*
>    * Tegra Tiled Layout, used by Tegra 2, 3 and 4.
>    *
>    * Pixels are arranged in simple tiles of 16 x 16 bytes.
>    */
> -#define NV_FORMAT_MOD_TEGRA_TILED fourcc_mod_tegra_code(1, 0)
> +#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1)
>   
>   /*
> - * Tegra 16Bx2 Block Linear layout, used by TK1/TX1
> + * 16Bx2 Block Linear layout, used by desktop GPUs, and Tegra K1 and later
>    *
>    * Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked
>    * vertically by a power of 2 (1 to 32 GOBs) to form a block.
> @@ -380,7 +368,21 @@ extern "C" {
>    * Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format
>    * in full detail.
>    */
> -#define NV_FORMAT_MOD_TEGRA_16BX2_BLOCK(v) fourcc_mod_tegra_code(2, v)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \
> +	fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf))
> +
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \
> +	fourcc_mod_code(NVIDIA, 0x10)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \
> +	fourcc_mod_code(NVIDIA, 0x11)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \
> +	fourcc_mod_code(NVIDIA, 0x12)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \
> +	fourcc_mod_code(NVIDIA, 0x13)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \
> +	fourcc_mod_code(NVIDIA, 0x14)
> +#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \
> +	fourcc_mod_code(NVIDIA, 0x15)
>   
>   /*
>    * Broadcom VC4 "T" format
> diff --git a/include/drm-uapi/drm_mode.h b/include/drm-uapi/drm_mode.h
> index 5597a871..2c575794 100644
> --- a/include/drm-uapi/drm_mode.h
> +++ b/include/drm-uapi/drm_mode.h
> @@ -38,14 +38,18 @@ extern "C" {
>   #define DRM_DISPLAY_MODE_LEN	32
>   #define DRM_PROP_NAME_LEN	32
>   
> -#define DRM_MODE_TYPE_BUILTIN	(1<<0)
> -#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN)
> -#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN)
> +#define DRM_MODE_TYPE_BUILTIN	(1<<0) /* deprecated */
> +#define DRM_MODE_TYPE_CLOCK_C	((1<<1) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
> +#define DRM_MODE_TYPE_CRTC_C	((1<<2) | DRM_MODE_TYPE_BUILTIN) /* deprecated */
>   #define DRM_MODE_TYPE_PREFERRED	(1<<3)
> -#define DRM_MODE_TYPE_DEFAULT	(1<<4)
> +#define DRM_MODE_TYPE_DEFAULT	(1<<4) /* deprecated */
>   #define DRM_MODE_TYPE_USERDEF	(1<<5)
>   #define DRM_MODE_TYPE_DRIVER	(1<<6)
>   
> +#define DRM_MODE_TYPE_ALL	(DRM_MODE_TYPE_PREFERRED |	\
> +				 DRM_MODE_TYPE_USERDEF |	\
> +				 DRM_MODE_TYPE_DRIVER)
> +
>   /* Video mode flags */
>   /* bit compatible with the xrandr RR_ definitions (bits 0-13)
>    *
> @@ -66,8 +70,8 @@ extern "C" {
>   #define DRM_MODE_FLAG_PCSYNC			(1<<7)
>   #define DRM_MODE_FLAG_NCSYNC			(1<<8)
>   #define DRM_MODE_FLAG_HSKEW			(1<<9) /* hskew provided */
> -#define DRM_MODE_FLAG_BCAST			(1<<10)
> -#define DRM_MODE_FLAG_PIXMUX			(1<<11)
> +#define DRM_MODE_FLAG_BCAST			(1<<10) /* deprecated */
> +#define DRM_MODE_FLAG_PIXMUX			(1<<11) /* deprecated */
>   #define DRM_MODE_FLAG_DBLCLK			(1<<12)
>   #define DRM_MODE_FLAG_CLKDIV2			(1<<13)
>    /*
> @@ -99,6 +103,20 @@ extern "C" {
>   #define  DRM_MODE_FLAG_PIC_AR_16_9 \
>   			(DRM_MODE_PICTURE_ASPECT_16_9<<19)
>   
> +#define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\
> +				 DRM_MODE_FLAG_NHSYNC |		\
> +				 DRM_MODE_FLAG_PVSYNC |		\
> +				 DRM_MODE_FLAG_NVSYNC |		\
> +				 DRM_MODE_FLAG_INTERLACE |	\
> +				 DRM_MODE_FLAG_DBLSCAN |	\
> +				 DRM_MODE_FLAG_CSYNC |		\
> +				 DRM_MODE_FLAG_PCSYNC |		\
> +				 DRM_MODE_FLAG_NCSYNC |		\
> +				 DRM_MODE_FLAG_HSKEW |		\
> +				 DRM_MODE_FLAG_DBLCLK |		\
> +				 DRM_MODE_FLAG_CLKDIV2 |	\
> +				 DRM_MODE_FLAG_3D_MASK)
> +
>   /* DPMS flags */
>   /* bit compatible with the xorg definitions. */
>   #define DRM_MODE_DPMS_ON	0
> @@ -173,6 +191,10 @@ extern "C" {
>   		DRM_MODE_REFLECT_X | \
>   		DRM_MODE_REFLECT_Y)
>   
> +/* Content Protection Flags */
> +#define DRM_MODE_CONTENT_PROTECTION_UNDESIRED	0
> +#define DRM_MODE_CONTENT_PROTECTION_DESIRED     1
> +#define DRM_MODE_CONTENT_PROTECTION_ENABLED     2
>   
>   struct drm_mode_modeinfo {
>   	__u32 clock;
> diff --git a/include/drm-uapi/exynos_drm.h b/include/drm-uapi/exynos_drm.h
> index 76c34dd5..a00116b5 100644
> --- a/include/drm-uapi/exynos_drm.h
> +++ b/include/drm-uapi/exynos_drm.h
> @@ -135,172 +135,6 @@ struct drm_exynos_g2d_exec {
>   	__u64					async;
>   };
>   
> -enum drm_exynos_ops_id {
> -	EXYNOS_DRM_OPS_SRC,
> -	EXYNOS_DRM_OPS_DST,
> -	EXYNOS_DRM_OPS_MAX,
> -};
> -
> -struct drm_exynos_sz {
> -	__u32	hsize;
> -	__u32	vsize;
> -};
> -
> -struct drm_exynos_pos {
> -	__u32	x;
> -	__u32	y;
> -	__u32	w;
> -	__u32	h;
> -};
> -
> -enum drm_exynos_flip {
> -	EXYNOS_DRM_FLIP_NONE = (0 << 0),
> -	EXYNOS_DRM_FLIP_VERTICAL = (1 << 0),
> -	EXYNOS_DRM_FLIP_HORIZONTAL = (1 << 1),
> -	EXYNOS_DRM_FLIP_BOTH = EXYNOS_DRM_FLIP_VERTICAL |
> -			EXYNOS_DRM_FLIP_HORIZONTAL,
> -};
> -
> -enum drm_exynos_degree {
> -	EXYNOS_DRM_DEGREE_0,
> -	EXYNOS_DRM_DEGREE_90,
> -	EXYNOS_DRM_DEGREE_180,
> -	EXYNOS_DRM_DEGREE_270,
> -};
> -
> -enum drm_exynos_planer {
> -	EXYNOS_DRM_PLANAR_Y,
> -	EXYNOS_DRM_PLANAR_CB,
> -	EXYNOS_DRM_PLANAR_CR,
> -	EXYNOS_DRM_PLANAR_MAX,
> -};
> -
> -/**
> - * A structure for ipp supported property list.
> - *
> - * @version: version of this structure.
> - * @ipp_id: id of ipp driver.
> - * @count: count of ipp driver.
> - * @writeback: flag of writeback supporting.
> - * @flip: flag of flip supporting.
> - * @degree: flag of degree information.
> - * @csc: flag of csc supporting.
> - * @crop: flag of crop supporting.
> - * @scale: flag of scale supporting.
> - * @refresh_min: min hz of refresh.
> - * @refresh_max: max hz of refresh.
> - * @crop_min: crop min resolution.
> - * @crop_max: crop max resolution.
> - * @scale_min: scale min resolution.
> - * @scale_max: scale max resolution.
> - */
> -struct drm_exynos_ipp_prop_list {
> -	__u32	version;
> -	__u32	ipp_id;
> -	__u32	count;
> -	__u32	writeback;
> -	__u32	flip;
> -	__u32	degree;
> -	__u32	csc;
> -	__u32	crop;
> -	__u32	scale;
> -	__u32	refresh_min;
> -	__u32	refresh_max;
> -	__u32	reserved;
> -	struct drm_exynos_sz	crop_min;
> -	struct drm_exynos_sz	crop_max;
> -	struct drm_exynos_sz	scale_min;
> -	struct drm_exynos_sz	scale_max;
> -};
> -
> -/**
> - * A structure for ipp config.
> - *
> - * @ops_id: property of operation directions.
> - * @flip: property of mirror, flip.
> - * @degree: property of rotation degree.
> - * @fmt: property of image format.
> - * @sz: property of image size.
> - * @pos: property of image position(src-cropped,dst-scaler).
> - */
> -struct drm_exynos_ipp_config {
> -	__u32 ops_id;
> -	__u32 flip;
> -	__u32 degree;
> -	__u32	fmt;
> -	struct drm_exynos_sz	sz;
> -	struct drm_exynos_pos	pos;
> -};
> -
> -enum drm_exynos_ipp_cmd {
> -	IPP_CMD_NONE,
> -	IPP_CMD_M2M,
> -	IPP_CMD_WB,
> -	IPP_CMD_OUTPUT,
> -	IPP_CMD_MAX,
> -};
> -
> -/**
> - * A structure for ipp property.
> - *
> - * @config: source, destination config.
> - * @cmd: definition of command.
> - * @ipp_id: id of ipp driver.
> - * @prop_id: id of property.
> - * @refresh_rate: refresh rate.
> - */
> -struct drm_exynos_ipp_property {
> -	struct drm_exynos_ipp_config config[EXYNOS_DRM_OPS_MAX];
> -	__u32	cmd;
> -	__u32	ipp_id;
> -	__u32	prop_id;
> -	__u32	refresh_rate;
> -};
> -
> -enum drm_exynos_ipp_buf_type {
> -	IPP_BUF_ENQUEUE,
> -	IPP_BUF_DEQUEUE,
> -};
> -
> -/**
> - * A structure for ipp buffer operations.
> - *
> - * @ops_id: operation directions.
> - * @buf_type: definition of buffer.
> - * @prop_id: id of property.
> - * @buf_id: id of buffer.
> - * @handle: Y, Cb, Cr each planar handle.
> - * @user_data: user data.
> - */
> -struct drm_exynos_ipp_queue_buf {
> -	__u32	ops_id;
> -	__u32	buf_type;
> -	__u32	prop_id;
> -	__u32	buf_id;
> -	__u32	handle[EXYNOS_DRM_PLANAR_MAX];
> -	__u32	reserved;
> -	__u64	user_data;
> -};
> -
> -enum drm_exynos_ipp_ctrl {
> -	IPP_CTRL_PLAY,
> -	IPP_CTRL_STOP,
> -	IPP_CTRL_PAUSE,
> -	IPP_CTRL_RESUME,
> -	IPP_CTRL_MAX,
> -};
> -
> -/**
> - * A structure for ipp start/stop operations.
> - *
> - * @prop_id: id of property.
> - * @ctrl: definition of control.
> - */
> -struct drm_exynos_ipp_cmd_ctrl {
> -	__u32	prop_id;
> -	__u32	ctrl;
> -};
> -
>   #define DRM_EXYNOS_GEM_CREATE		0x00
>   #define DRM_EXYNOS_GEM_MAP		0x01
>   /* Reserved 0x03 ~ 0x05 for exynos specific gem ioctl */
> @@ -312,11 +146,7 @@ struct drm_exynos_ipp_cmd_ctrl {
>   #define DRM_EXYNOS_G2D_SET_CMDLIST	0x21
>   #define DRM_EXYNOS_G2D_EXEC		0x22
>   
> -/* IPP - Image Post Processing */
> -#define DRM_EXYNOS_IPP_GET_PROPERTY	0x30
> -#define DRM_EXYNOS_IPP_SET_PROPERTY	0x31
> -#define DRM_EXYNOS_IPP_QUEUE_BUF	0x32
> -#define DRM_EXYNOS_IPP_CMD_CTRL	0x33
> +/* Reserved 0x30 ~ 0x33 for obsolete Exynos IPP ioctls */
>   
>   #define DRM_IOCTL_EXYNOS_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
>   		DRM_EXYNOS_GEM_CREATE, struct drm_exynos_gem_create)
> @@ -335,18 +165,8 @@ struct drm_exynos_ipp_cmd_ctrl {
>   #define DRM_IOCTL_EXYNOS_G2D_EXEC		DRM_IOWR(DRM_COMMAND_BASE + \
>   		DRM_EXYNOS_G2D_EXEC, struct drm_exynos_g2d_exec)
>   
> -#define DRM_IOCTL_EXYNOS_IPP_GET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + \
> -		DRM_EXYNOS_IPP_GET_PROPERTY, struct drm_exynos_ipp_prop_list)
> -#define DRM_IOCTL_EXYNOS_IPP_SET_PROPERTY	DRM_IOWR(DRM_COMMAND_BASE + \
> -		DRM_EXYNOS_IPP_SET_PROPERTY, struct drm_exynos_ipp_property)
> -#define DRM_IOCTL_EXYNOS_IPP_QUEUE_BUF	DRM_IOWR(DRM_COMMAND_BASE + \
> -		DRM_EXYNOS_IPP_QUEUE_BUF, struct drm_exynos_ipp_queue_buf)
> -#define DRM_IOCTL_EXYNOS_IPP_CMD_CTRL		DRM_IOWR(DRM_COMMAND_BASE + \
> -		DRM_EXYNOS_IPP_CMD_CTRL, struct drm_exynos_ipp_cmd_ctrl)
> -
>   /* EXYNOS specific events */
>   #define DRM_EXYNOS_G2D_EVENT		0x80000000
> -#define DRM_EXYNOS_IPP_EVENT		0x80000001
>   
>   struct drm_exynos_g2d_event {
>   	struct drm_event	base;
> @@ -357,16 +177,6 @@ struct drm_exynos_g2d_event {
>   	__u32			reserved;
>   };
>   
> -struct drm_exynos_ipp_event {
> -	struct drm_event	base;
> -	__u64			user_data;
> -	__u32			tv_sec;
> -	__u32			tv_usec;
> -	__u32			prop_id;
> -	__u32			reserved;
> -	__u32			buf_id[EXYNOS_DRM_OPS_MAX];
> -};
> -
>   #if defined(__cplusplus)
>   }
>   #endif
> diff --git a/include/drm-uapi/i915_drm.h b/include/drm-uapi/i915_drm.h
> index 7f28eea4..16e452aa 100644
> --- a/include/drm-uapi/i915_drm.h
> +++ b/include/drm-uapi/i915_drm.h
> @@ -102,6 +102,46 @@ enum drm_i915_gem_engine_class {
>   	I915_ENGINE_CLASS_INVALID	= -1
>   };
>   
> +/**
> + * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915
> + *
> + */
> +
> +enum drm_i915_pmu_engine_sample {
> +	I915_SAMPLE_BUSY = 0,
> +	I915_SAMPLE_WAIT = 1,
> +	I915_SAMPLE_SEMA = 2
> +};
> +
> +#define I915_PMU_SAMPLE_BITS (4)
> +#define I915_PMU_SAMPLE_MASK (0xf)
> +#define I915_PMU_SAMPLE_INSTANCE_BITS (8)
> +#define I915_PMU_CLASS_SHIFT \
> +	(I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS)
> +
> +#define __I915_PMU_ENGINE(class, instance, sample) \
> +	((class) << I915_PMU_CLASS_SHIFT | \
> +	(instance) << I915_PMU_SAMPLE_BITS | \
> +	(sample))
> +
> +#define I915_PMU_ENGINE_BUSY(class, instance) \
> +	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY)
> +
> +#define I915_PMU_ENGINE_WAIT(class, instance) \
> +	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT)
> +
> +#define I915_PMU_ENGINE_SEMA(class, instance) \
> +	__I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA)
> +
> +#define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x))
> +
> +#define I915_PMU_ACTUAL_FREQUENCY	__I915_PMU_OTHER(0)
> +#define I915_PMU_REQUESTED_FREQUENCY	__I915_PMU_OTHER(1)
> +#define I915_PMU_INTERRUPTS		__I915_PMU_OTHER(2)
> +#define I915_PMU_RC6_RESIDENCY		__I915_PMU_OTHER(3)
> +
> +#define I915_PMU_LAST I915_PMU_RC6_RESIDENCY
> +
>   /* Each region is a minimum of 16k, and there are at most 255 of them.
>    */
>   #define I915_NR_TEX_REGIONS 255	/* table size 2k - maximum due to use
> @@ -278,6 +318,7 @@ typedef struct _drm_i915_sarea {
>   #define DRM_I915_PERF_OPEN		0x36
>   #define DRM_I915_PERF_ADD_CONFIG	0x37
>   #define DRM_I915_PERF_REMOVE_CONFIG	0x38
> +#define DRM_I915_QUERY			0x39
>   
>   #define DRM_IOCTL_I915_INIT		DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t)
>   #define DRM_IOCTL_I915_FLUSH		DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH)
> @@ -335,6 +376,7 @@ typedef struct _drm_i915_sarea {
>   #define DRM_IOCTL_I915_PERF_OPEN	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param)
>   #define DRM_IOCTL_I915_PERF_ADD_CONFIG	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config)
>   #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG	DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64)
> +#define DRM_IOCTL_I915_QUERY			DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
>   
>   /* Allow drivers to submit batchbuffers directly to hardware, relying
>    * on the security mechanisms provided by hardware.
> @@ -1318,7 +1360,9 @@ struct drm_intel_overlay_attrs {
>    * active on a given plane.
>    */
>   
> -#define I915_SET_COLORKEY_NONE		(1<<0) /* disable color key matching */
> +#define I915_SET_COLORKEY_NONE		(1<<0) /* Deprecated. Instead set
> +						* flags==0 to disable colorkeying.
> +						*/
>   #define I915_SET_COLORKEY_DESTINATION	(1<<1)
>   #define I915_SET_COLORKEY_SOURCE	(1<<2)
>   struct drm_intel_sprite_colorkey {
> @@ -1564,15 +1608,115 @@ struct drm_i915_perf_oa_config {
>   	__u32 n_flex_regs;
>   
>   	/*
> -	 * These fields are pointers to tuples of u32 values (register
> -	 * address, value). For example the expected length of the buffer
> -	 * pointed by mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs).
> +	 * These fields are pointers to tuples of u32 values (register address,
> +	 * value). For example the expected length of the buffer pointed by
> +	 * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs).
>   	 */
>   	__u64 mux_regs_ptr;
>   	__u64 boolean_regs_ptr;
>   	__u64 flex_regs_ptr;
>   };
>   
> +struct drm_i915_query_item {
> +	__u64 query_id;
> +#define DRM_I915_QUERY_TOPOLOGY_INFO    1
> +
> +	/*
> +	 * When set to zero by userspace, this is filled with the size of the
> +	 * data to be written at the data_ptr pointer. The kernel sets this
> +	 * value to a negative value to signal an error on a particular query
> +	 * item.
> +	 */
> +	__s32 length;
> +
> +	/*
> +	 * Unused for now. Must be cleared to zero.
> +	 */
> +	__u32 flags;
> +
> +	/*
> +	 * Data will be written at the location pointed by data_ptr when the
> +	 * value of length matches the length of the data to be written by the
> +	 * kernel.
> +	 */
> +	__u64 data_ptr;
> +};
> +
> +struct drm_i915_query {
> +	__u32 num_items;
> +
> +	/*
> +	 * Unused for now. Must be cleared to zero.
> +	 */
> +	__u32 flags;
> +
> +	/*
> +	 * This points to an array of num_items drm_i915_query_item structures.
> +	 */
> +	__u64 items_ptr;
> +};
> +
> +/*
> + * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO :
> + *
> + * data: contains the 3 pieces of information :
> + *
> + * - the slice mask with one bit per slice telling whether a slice is
> + *   available. The availability of slice X can be queried with the following
> + *   formula :
> + *
> + *           (data[X / 8] >> (X % 8)) & 1
> + *
> + * - the subslice mask for each slice with one bit per subslice telling
> + *   whether a subslice is available. The availability of subslice Y in slice
> + *   X can be queried with the following formula :
> + *
> + *           (data[subslice_offset +
> + *                 X * subslice_stride +
> + *                 Y / 8] >> (Y % 8)) & 1
> + *
> + * - the EU mask for each subslice in each slice with one bit per EU telling
> + *   whether an EU is available. The availability of EU Z in subslice Y in
> + *   slice X can be queried with the following formula :
> + *
> + *           (data[eu_offset +
> + *                 (X * max_subslices + Y) * eu_stride +
> + *                 Z / 8] >> (Z % 8)) & 1
> + */
> +struct drm_i915_query_topology_info {
> +	/*
> +	 * Unused for now. Must be cleared to zero.
> +	 */
> +	__u16 flags;
> +
> +	__u16 max_slices;
> +	__u16 max_subslices;
> +	__u16 max_eus_per_subslice;
> +
> +	/*
> +	 * Offset in data[] at which the subslice masks are stored.
> +	 */
> +	__u16 subslice_offset;
> +
> +	/*
> +	 * Stride at which each of the subslice masks for each slice are
> +	 * stored.
> +	 */
> +	__u16 subslice_stride;
> +
> +	/*
> +	 * Offset in data[] at which the EU masks are stored.
> +	 */
> +	__u16 eu_offset;
> +
> +	/*
> +	 * Stride at which each of the EU masks for each subslice are stored.
> +	 */
> +	__u16 eu_stride;
> +
> +	__u8 data[];
> +};
> +
>   #if defined(__cplusplus)
>   }
>   #endif
> diff --git a/include/drm-uapi/vc4_drm.h b/include/drm-uapi/vc4_drm.h
> index 3415a4b7..4117117b 100644
> --- a/include/drm-uapi/vc4_drm.h
> +++ b/include/drm-uapi/vc4_drm.h
> @@ -42,6 +42,9 @@ extern "C" {
>   #define DRM_VC4_GET_TILING                        0x09
>   #define DRM_VC4_LABEL_BO                          0x0a
>   #define DRM_VC4_GEM_MADVISE                       0x0b
> +#define DRM_VC4_PERFMON_CREATE                    0x0c
> +#define DRM_VC4_PERFMON_DESTROY                   0x0d
> +#define DRM_VC4_PERFMON_GET_VALUES                0x0e
>   
>   #define DRM_IOCTL_VC4_SUBMIT_CL           DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_SUBMIT_CL, struct drm_vc4_submit_cl)
>   #define DRM_IOCTL_VC4_WAIT_SEQNO          DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_WAIT_SEQNO, struct drm_vc4_wait_seqno)
> @@ -55,6 +58,9 @@ extern "C" {
>   #define DRM_IOCTL_VC4_GET_TILING          DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GET_TILING, struct drm_vc4_get_tiling)
>   #define DRM_IOCTL_VC4_LABEL_BO            DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_LABEL_BO, struct drm_vc4_label_bo)
>   #define DRM_IOCTL_VC4_GEM_MADVISE         DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_GEM_MADVISE, struct drm_vc4_gem_madvise)
> +#define DRM_IOCTL_VC4_PERFMON_CREATE      DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_CREATE, struct drm_vc4_perfmon_create)
> +#define DRM_IOCTL_VC4_PERFMON_DESTROY     DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_DESTROY, struct drm_vc4_perfmon_destroy)
> +#define DRM_IOCTL_VC4_PERFMON_GET_VALUES  DRM_IOWR(DRM_COMMAND_BASE + DRM_VC4_PERFMON_GET_VALUES, struct drm_vc4_perfmon_get_values)
>   
>   struct drm_vc4_submit_rcl_surface {
>   	__u32 hindex; /* Handle index, or ~0 if not present. */
> @@ -173,6 +179,15 @@ struct drm_vc4_submit_cl {
>   	 * wait ioctl).
>   	 */
>   	__u64 seqno;
> +
> +	/* ID of the perfmon to attach to this job. 0 means no perfmon. */
> +	__u32 perfmonid;
> +
> +	/* Unused field to align this struct on 64 bits. Must be set to 0.
> +	 * If one ever needs to add an u32 field to this struct, this field
> +	 * can be used.
> +	 */
> +	__u32 pad2;
>   };
>   
>   /**
> @@ -308,6 +323,7 @@ struct drm_vc4_get_hang_state {
>   #define DRM_VC4_PARAM_SUPPORTS_THREADED_FS	5
>   #define DRM_VC4_PARAM_SUPPORTS_FIXED_RCL_ORDER	6
>   #define DRM_VC4_PARAM_SUPPORTS_MADVISE		7
> +#define DRM_VC4_PARAM_SUPPORTS_PERFMON		8
>   
>   struct drm_vc4_get_param {
>   	__u32 param;
> @@ -352,6 +368,66 @@ struct drm_vc4_gem_madvise {
>   	__u32 pad;
>   };
>   
> +enum {
> +	VC4_PERFCNT_FEP_VALID_PRIMS_NO_RENDER,
> +	VC4_PERFCNT_FEP_VALID_PRIMS_RENDER,
> +	VC4_PERFCNT_FEP_CLIPPED_QUADS,
> +	VC4_PERFCNT_FEP_VALID_QUADS,
> +	VC4_PERFCNT_TLB_QUADS_NOT_PASSING_STENCIL,
> +	VC4_PERFCNT_TLB_QUADS_NOT_PASSING_Z_AND_STENCIL,
> +	VC4_PERFCNT_TLB_QUADS_PASSING_Z_AND_STENCIL,
> +	VC4_PERFCNT_TLB_QUADS_ZERO_COVERAGE,
> +	VC4_PERFCNT_TLB_QUADS_NON_ZERO_COVERAGE,
> +	VC4_PERFCNT_TLB_QUADS_WRITTEN_TO_COLOR_BUF,
> +	VC4_PERFCNT_PLB_PRIMS_OUTSIDE_VIEWPORT,
> +	VC4_PERFCNT_PLB_PRIMS_NEED_CLIPPING,
> +	VC4_PERFCNT_PSE_PRIMS_REVERSED,
> +	VC4_PERFCNT_QPU_TOTAL_IDLE_CYCLES,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_VERTEX_COORD_SHADING,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_FRAGMENT_SHADING,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_EXEC_VALID_INST,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_TMUS,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_SCOREBOARD,
> +	VC4_PERFCNT_QPU_TOTAL_CLK_CYCLES_WAITING_VARYINGS,
> +	VC4_PERFCNT_QPU_TOTAL_INST_CACHE_HIT,
> +	VC4_PERFCNT_QPU_TOTAL_INST_CACHE_MISS,
> +	VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_HIT,
> +	VC4_PERFCNT_QPU_TOTAL_UNIFORM_CACHE_MISS,
> +	VC4_PERFCNT_TMU_TOTAL_TEXT_QUADS_PROCESSED,
> +	VC4_PERFCNT_TMU_TOTAL_TEXT_CACHE_MISS,
> +	VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VDW_STALLED,
> +	VC4_PERFCNT_VPM_TOTAL_CLK_CYCLES_VCD_STALLED,
> +	VC4_PERFCNT_L2C_TOTAL_L2_CACHE_HIT,
> +	VC4_PERFCNT_L2C_TOTAL_L2_CACHE_MISS,
> +	VC4_PERFCNT_NUM_EVENTS,
> +};
> +
> +#define DRM_VC4_MAX_PERF_COUNTERS	16
> +
> +struct drm_vc4_perfmon_create {
> +	__u32 id;
> +	__u32 ncounters;
> +	__u8 events[DRM_VC4_MAX_PERF_COUNTERS];
> +};
> +
> +struct drm_vc4_perfmon_destroy {
> +	__u32 id;
> +};
> +
> +/*
> + * Returns the values of the performance counters tracked by this
> + * perfmon (as an array of ncounters u64 values).
> + *
> + * No implicit synchronization is performed, so the user has to
> + * guarantee that any jobs using this perfmon have already been
> + * completed  (probably by blocking on the seqno returned by the
> + * last exec that used the perfmon).
> + */
> +struct drm_vc4_perfmon_get_values {
> +	__u32 id;
> +	__u64 values_ptr;
> +};
> +
>   #if defined(__cplusplus)
>   }
>   #endif
> diff --git a/lib/igt_perf.h b/lib/igt_perf.h
> index 7b66fc58..105b8cd9 100644
> --- a/lib/igt_perf.h
> +++ b/lib/igt_perf.h
> @@ -31,13 +31,6 @@
>   
>   #include "igt_gt.h"
>   
> -enum drm_i915_pmu_engine_sample {
> -	I915_SAMPLE_BUSY = 0,
> -	I915_SAMPLE_WAIT = 1,
> -	I915_SAMPLE_SEMA = 2,
> -	I915_ENGINE_SAMPLE_MAX /* non-ABI */
> -};
> -
>   #define I915_PMU_SAMPLE_BITS (4)
>   #define I915_PMU_SAMPLE_MASK (0xf)
>   #define I915_PMU_SAMPLE_INSTANCE_BITS (8)
> 

I think all up to (and including) I915_PMU_LAST should be nuked from 
this file. If you can do that while pushing great, if not I can do it later.

Either way:

Acked-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

      parent reply	other threads:[~2018-03-12 11:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-09 14:50 [igt-dev] [PATCH i-g-t v9 1/3] include: bump drm uAPI headers Lionel Landwerlin
2018-03-09 14:50 ` [igt-dev] [PATCH i-g-t v9 2/3] intel_chipsets: store GT information in device info Lionel Landwerlin
2018-03-09 14:50 ` [igt-dev] [PATCH i-g-t v9 3/3] tests: add i915 query tests Lionel Landwerlin
2018-03-09 16:35   ` Tvrtko Ursulin
2018-03-09 16:45     ` Lionel Landwerlin
2018-03-10 11:28       ` Lionel Landwerlin
2018-03-09 18:17 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,v9,1/3] include: bump drm uAPI headers Patchwork
2018-03-09 23:57 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
2018-03-12 11:56 ` Tvrtko Ursulin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=62b9589f-dcde-3158-498f-55357873a42a@linux.intel.com \
    --to=tvrtko.ursulin@linux.intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=lionel.g.landwerlin@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.