Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/etnaviv: Allow DRAW_INSTANCED commands

Vivante GPUs with HALTI0 feature support a DRAW_INSTANCED command in the
command stream to draw a number of instances of the same geometry.

The information that has been figured out about the command can be found
here: https://github.com/etnaviv/etna_viv/blob/master/rnndb/cmdstream.xml#L270

This command is not allowed currently by the DRM driver because it
was not known before. This patch enables parsing it in command
streams and allows using it by userspace drivers.

Signed-off-by: Wladimir J. van der Laan <laanwj@gmail.com>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>

authored by

Wladimir J. van der Laan and committed by
Lucas Stach
55780053 5688e57e

+56 -3
+55 -3
drivers/gpu/drm/etnaviv/cmdstream.xml.h
··· 8 8 git clone git://0x04.net/rules-ng-ng 9 9 10 10 The rules-ng-ng source files this header was generated from are: 11 - - cmdstream.xml ( 12589 bytes, from 2014-02-17 14:57:56) 12 - - common.xml ( 18437 bytes, from 2015-03-25 11:27:41) 11 + - cmdstream.xml ( 14094 bytes, from 2016-11-11 06:55:14) 12 + - copyright.xml ( 1597 bytes, from 2016-10-29 07:29:22) 13 + - common.xml ( 23344 bytes, from 2016-11-10 15:14:07) 13 14 14 - Copyright (C) 2014 15 + Copyright (C) 2012-2016 by the following authors: 16 + - Wladimir J. van der Laan <laanwj@gmail.com> 17 + - Christian Gmeiner <christian.gmeiner@gmail.com> 18 + - Lucas Stach <l.stach@pengutronix.de> 19 + - Russell King <rmk@arm.linux.org.uk> 20 + 21 + Permission is hereby granted, free of charge, to any person obtaining a 22 + copy of this software and associated documentation files (the "Software"), 23 + to deal in the Software without restriction, including without limitation 24 + the rights to use, copy, modify, merge, publish, distribute, sub license, 25 + and/or sell copies of the Software, and to permit persons to whom the 26 + Software is furnished to do so, subject to the following conditions: 27 + 28 + The above copyright notice and this permission notice (including the 29 + next paragraph) shall be included in all copies or substantial portions 30 + of the Software. 31 + 32 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 33 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 34 + FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 35 + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 36 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 37 + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 38 + DEALINGS IN THE SOFTWARE. 15 39 */ 16 40 17 41 ··· 50 26 #define FE_OPCODE_STALL 0x00000009 51 27 #define FE_OPCODE_CALL 0x0000000a 52 28 #define FE_OPCODE_RETURN 0x0000000b 29 + #define FE_OPCODE_DRAW_INSTANCED 0x0000000c 53 30 #define FE_OPCODE_CHIP_SELECT 0x0000000d 54 31 #define PRIMITIVE_TYPE_POINTS 0x00000001 55 32 #define PRIMITIVE_TYPE_LINES 0x00000002 ··· 238 213 #define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP2 0x00000004 239 214 #define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP1 0x00000002 240 215 #define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP0 0x00000001 216 + 217 + #define VIV_FE_DRAW_INSTANCED 0x00000000 218 + 219 + #define VIV_FE_DRAW_INSTANCED_HEADER 0x00000000 220 + #define VIV_FE_DRAW_INSTANCED_HEADER_OP__MASK 0xf8000000 221 + #define VIV_FE_DRAW_INSTANCED_HEADER_OP__SHIFT 27 222 + #define VIV_FE_DRAW_INSTANCED_HEADER_OP_DRAW_INSTANCED 0x60000000 223 + #define VIV_FE_DRAW_INSTANCED_HEADER_INDEXED 0x00100000 224 + #define VIV_FE_DRAW_INSTANCED_HEADER_TYPE__MASK 0x000f0000 225 + #define VIV_FE_DRAW_INSTANCED_HEADER_TYPE__SHIFT 16 226 + #define VIV_FE_DRAW_INSTANCED_HEADER_TYPE(x) (((x) << VIV_FE_DRAW_INSTANCED_HEADER_TYPE__SHIFT) & VIV_FE_DRAW_INSTANCED_HEADER_TYPE__MASK) 227 + #define VIV_FE_DRAW_INSTANCED_HEADER_INSTANCE_COUNT_LO__MASK 0x0000ffff 228 + #define VIV_FE_DRAW_INSTANCED_HEADER_INSTANCE_COUNT_LO__SHIFT 0 229 + #define VIV_FE_DRAW_INSTANCED_HEADER_INSTANCE_COUNT_LO(x) (((x) << VIV_FE_DRAW_INSTANCED_HEADER_INSTANCE_COUNT_LO__SHIFT) & VIV_FE_DRAW_INSTANCED_HEADER_INSTANCE_COUNT_LO__MASK) 230 + 231 + #define VIV_FE_DRAW_INSTANCED_COUNT 0x00000004 232 + #define VIV_FE_DRAW_INSTANCED_COUNT_INSTANCE_COUNT_HI__MASK 0xff000000 233 + #define VIV_FE_DRAW_INSTANCED_COUNT_INSTANCE_COUNT_HI__SHIFT 24 234 + #define VIV_FE_DRAW_INSTANCED_COUNT_INSTANCE_COUNT_HI(x) (((x) << VIV_FE_DRAW_INSTANCED_COUNT_INSTANCE_COUNT_HI__SHIFT) & VIV_FE_DRAW_INSTANCED_COUNT_INSTANCE_COUNT_HI__MASK) 235 + #define VIV_FE_DRAW_INSTANCED_COUNT_VERTEX_COUNT__MASK 0x00ffffff 236 + #define VIV_FE_DRAW_INSTANCED_COUNT_VERTEX_COUNT__SHIFT 0 237 + #define VIV_FE_DRAW_INSTANCED_COUNT_VERTEX_COUNT(x) (((x) << VIV_FE_DRAW_INSTANCED_COUNT_VERTEX_COUNT__SHIFT) & VIV_FE_DRAW_INSTANCED_COUNT_VERTEX_COUNT__MASK) 238 + 239 + #define VIV_FE_DRAW_INSTANCED_START 0x00000008 240 + #define VIV_FE_DRAW_INSTANCED_START_INDEX__MASK 0xffffffff 241 + #define VIV_FE_DRAW_INSTANCED_START_INDEX__SHIFT 0 242 + #define VIV_FE_DRAW_INSTANCED_START_INDEX(x) (((x) << VIV_FE_DRAW_INSTANCED_START_INDEX__SHIFT) & VIV_FE_DRAW_INSTANCED_START_INDEX__MASK) 241 243 242 244 243 245 #endif /* CMDSTREAM_XML */
+1
drivers/gpu/drm/etnaviv/etnaviv_cmd_parser.c
··· 143 143 static uint8_t cmd_length[32] = { 144 144 [FE_OPCODE_DRAW_PRIMITIVES] = 4, 145 145 [FE_OPCODE_DRAW_INDEXED_PRIMITIVES] = 6, 146 + [FE_OPCODE_DRAW_INSTANCED] = 4, 146 147 [FE_OPCODE_NOP] = 2, 147 148 [FE_OPCODE_STALL] = 2, 148 149 };