Skip to content

Commit a8c21a5

Browse files
The etnaviv authorslynxeye-dev
authored andcommitted
drm/etnaviv: add initial etnaviv DRM driver
This adds the etnaviv DRM driver and hooks it up in Makefiles and Kconfig. Signed-off-by: Christian Gmeiner <[email protected]> Signed-off-by: Russell King <[email protected]> Signed-off-by: Lucas Stach <[email protected]> Acked-by: Daniel Vetter <[email protected]>
1 parent f04b205 commit a8c21a5

27 files changed

+7238
-0
lines changed

drivers/gpu/drm/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,5 @@ source "drivers/gpu/drm/amd/amdkfd/Kconfig"
266266
source "drivers/gpu/drm/imx/Kconfig"
267267

268268
source "drivers/gpu/drm/vc4/Kconfig"
269+
270+
source "drivers/gpu/drm/etnaviv/Kconfig"

drivers/gpu/drm/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,4 @@ obj-y += i2c/
7575
obj-y += panel/
7676
obj-y += bridge/
7777
obj-$(CONFIG_DRM_FSL_DCU) += fsl-dcu/
78+
obj-$(CONFIG_DRM_ETNAVIV) += etnaviv/

drivers/gpu/drm/etnaviv/Kconfig

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
2+
config DRM_ETNAVIV
3+
tristate "ETNAVIV (DRM support for Vivante GPU IP cores)"
4+
depends on DRM
5+
depends on ARCH_MXC || ARCH_DOVE
6+
select SHMEM
7+
select TMPFS
8+
select IOMMU_API
9+
select IOMMU_SUPPORT
10+
select WANT_DEV_COREDUMP
11+
help
12+
DRM driver for Vivante GPUs.
13+
14+
config DRM_ETNAVIV_REGISTER_LOGGING
15+
bool "enable ETNAVIV register logging"
16+
depends on DRM_ETNAVIV
17+
help
18+
Compile in support for logging register reads/writes in a format
19+
that can be parsed by envytools demsm tool. If enabled, register
20+
logging can be switched on via etnaviv.reglog=y module param.

drivers/gpu/drm/etnaviv/Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
etnaviv-y := \
2+
etnaviv_buffer.o \
3+
etnaviv_cmd_parser.o \
4+
etnaviv_drv.o \
5+
etnaviv_dump.o \
6+
etnaviv_gem_prime.o \
7+
etnaviv_gem_submit.o \
8+
etnaviv_gem.o \
9+
etnaviv_gpu.o \
10+
etnaviv_iommu_v2.o \
11+
etnaviv_iommu.o \
12+
etnaviv_mmu.o
13+
14+
obj-$(CONFIG_DRM_ETNAVIV) += etnaviv.o
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
#ifndef CMDSTREAM_XML
2+
#define CMDSTREAM_XML
3+
4+
/* Autogenerated file, DO NOT EDIT manually!
5+
6+
This file was generated by the rules-ng-ng headergen tool in this git repository:
7+
http://0x04.net/cgit/index.cgi/rules-ng-ng
8+
git clone git://0x04.net/rules-ng-ng
9+
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)
13+
14+
Copyright (C) 2014
15+
*/
16+
17+
18+
#define FE_OPCODE_LOAD_STATE 0x00000001
19+
#define FE_OPCODE_END 0x00000002
20+
#define FE_OPCODE_NOP 0x00000003
21+
#define FE_OPCODE_DRAW_2D 0x00000004
22+
#define FE_OPCODE_DRAW_PRIMITIVES 0x00000005
23+
#define FE_OPCODE_DRAW_INDEXED_PRIMITIVES 0x00000006
24+
#define FE_OPCODE_WAIT 0x00000007
25+
#define FE_OPCODE_LINK 0x00000008
26+
#define FE_OPCODE_STALL 0x00000009
27+
#define FE_OPCODE_CALL 0x0000000a
28+
#define FE_OPCODE_RETURN 0x0000000b
29+
#define FE_OPCODE_CHIP_SELECT 0x0000000d
30+
#define PRIMITIVE_TYPE_POINTS 0x00000001
31+
#define PRIMITIVE_TYPE_LINES 0x00000002
32+
#define PRIMITIVE_TYPE_LINE_STRIP 0x00000003
33+
#define PRIMITIVE_TYPE_TRIANGLES 0x00000004
34+
#define PRIMITIVE_TYPE_TRIANGLE_STRIP 0x00000005
35+
#define PRIMITIVE_TYPE_TRIANGLE_FAN 0x00000006
36+
#define PRIMITIVE_TYPE_LINE_LOOP 0x00000007
37+
#define PRIMITIVE_TYPE_QUADS 0x00000008
38+
#define VIV_FE_LOAD_STATE 0x00000000
39+
40+
#define VIV_FE_LOAD_STATE_HEADER 0x00000000
41+
#define VIV_FE_LOAD_STATE_HEADER_OP__MASK 0xf8000000
42+
#define VIV_FE_LOAD_STATE_HEADER_OP__SHIFT 27
43+
#define VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE 0x08000000
44+
#define VIV_FE_LOAD_STATE_HEADER_FIXP 0x04000000
45+
#define VIV_FE_LOAD_STATE_HEADER_COUNT__MASK 0x03ff0000
46+
#define VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT 16
47+
#define VIV_FE_LOAD_STATE_HEADER_COUNT(x) (((x) << VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK)
48+
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK 0x0000ffff
49+
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT 0
50+
#define VIV_FE_LOAD_STATE_HEADER_OFFSET(x) (((x) << VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT) & VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK)
51+
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR 2
52+
53+
#define VIV_FE_END 0x00000000
54+
55+
#define VIV_FE_END_HEADER 0x00000000
56+
#define VIV_FE_END_HEADER_EVENT_ID__MASK 0x0000001f
57+
#define VIV_FE_END_HEADER_EVENT_ID__SHIFT 0
58+
#define VIV_FE_END_HEADER_EVENT_ID(x) (((x) << VIV_FE_END_HEADER_EVENT_ID__SHIFT) & VIV_FE_END_HEADER_EVENT_ID__MASK)
59+
#define VIV_FE_END_HEADER_EVENT_ENABLE 0x00000100
60+
#define VIV_FE_END_HEADER_OP__MASK 0xf8000000
61+
#define VIV_FE_END_HEADER_OP__SHIFT 27
62+
#define VIV_FE_END_HEADER_OP_END 0x10000000
63+
64+
#define VIV_FE_NOP 0x00000000
65+
66+
#define VIV_FE_NOP_HEADER 0x00000000
67+
#define VIV_FE_NOP_HEADER_OP__MASK 0xf8000000
68+
#define VIV_FE_NOP_HEADER_OP__SHIFT 27
69+
#define VIV_FE_NOP_HEADER_OP_NOP 0x18000000
70+
71+
#define VIV_FE_DRAW_2D 0x00000000
72+
73+
#define VIV_FE_DRAW_2D_HEADER 0x00000000
74+
#define VIV_FE_DRAW_2D_HEADER_COUNT__MASK 0x0000ff00
75+
#define VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT 8
76+
#define VIV_FE_DRAW_2D_HEADER_COUNT(x) (((x) << VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_COUNT__MASK)
77+
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK 0x07ff0000
78+
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT 16
79+
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT(x) (((x) << VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK)
80+
#define VIV_FE_DRAW_2D_HEADER_OP__MASK 0xf8000000
81+
#define VIV_FE_DRAW_2D_HEADER_OP__SHIFT 27
82+
#define VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D 0x20000000
83+
84+
#define VIV_FE_DRAW_2D_TOP_LEFT 0x00000008
85+
#define VIV_FE_DRAW_2D_TOP_LEFT_X__MASK 0x0000ffff
86+
#define VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT 0
87+
#define VIV_FE_DRAW_2D_TOP_LEFT_X(x) (((x) << VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_X__MASK)
88+
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK 0xffff0000
89+
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT 16
90+
#define VIV_FE_DRAW_2D_TOP_LEFT_Y(x) (((x) << VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT) & VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK)
91+
92+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT 0x0000000c
93+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK 0x0000ffff
94+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT 0
95+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X(x) (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK)
96+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK 0xffff0000
97+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT 16
98+
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y(x) (((x) << VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT) & VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK)
99+
100+
#define VIV_FE_DRAW_PRIMITIVES 0x00000000
101+
102+
#define VIV_FE_DRAW_PRIMITIVES_HEADER 0x00000000
103+
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__MASK 0xf8000000
104+
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__SHIFT 27
105+
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES 0x28000000
106+
107+
#define VIV_FE_DRAW_PRIMITIVES_COMMAND 0x00000004
108+
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK 0x000000ff
109+
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT 0
110+
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE(x) (((x) << VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK)
111+
112+
#define VIV_FE_DRAW_PRIMITIVES_START 0x00000008
113+
114+
#define VIV_FE_DRAW_PRIMITIVES_COUNT 0x0000000c
115+
116+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES 0x00000000
117+
118+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER 0x00000000
119+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__MASK 0xf8000000
120+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__SHIFT 27
121+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP_DRAW_INDEXED_PRIMITIVES 0x30000000
122+
123+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND 0x00000004
124+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK 0x000000ff
125+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT 0
126+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE(x) (((x) << VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK)
127+
128+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_START 0x00000008
129+
130+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COUNT 0x0000000c
131+
132+
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_OFFSET 0x00000010
133+
134+
#define VIV_FE_WAIT 0x00000000
135+
136+
#define VIV_FE_WAIT_HEADER 0x00000000
137+
#define VIV_FE_WAIT_HEADER_DELAY__MASK 0x0000ffff
138+
#define VIV_FE_WAIT_HEADER_DELAY__SHIFT 0
139+
#define VIV_FE_WAIT_HEADER_DELAY(x) (((x) << VIV_FE_WAIT_HEADER_DELAY__SHIFT) & VIV_FE_WAIT_HEADER_DELAY__MASK)
140+
#define VIV_FE_WAIT_HEADER_OP__MASK 0xf8000000
141+
#define VIV_FE_WAIT_HEADER_OP__SHIFT 27
142+
#define VIV_FE_WAIT_HEADER_OP_WAIT 0x38000000
143+
144+
#define VIV_FE_LINK 0x00000000
145+
146+
#define VIV_FE_LINK_HEADER 0x00000000
147+
#define VIV_FE_LINK_HEADER_PREFETCH__MASK 0x0000ffff
148+
#define VIV_FE_LINK_HEADER_PREFETCH__SHIFT 0
149+
#define VIV_FE_LINK_HEADER_PREFETCH(x) (((x) << VIV_FE_LINK_HEADER_PREFETCH__SHIFT) & VIV_FE_LINK_HEADER_PREFETCH__MASK)
150+
#define VIV_FE_LINK_HEADER_OP__MASK 0xf8000000
151+
#define VIV_FE_LINK_HEADER_OP__SHIFT 27
152+
#define VIV_FE_LINK_HEADER_OP_LINK 0x40000000
153+
154+
#define VIV_FE_LINK_ADDRESS 0x00000004
155+
156+
#define VIV_FE_STALL 0x00000000
157+
158+
#define VIV_FE_STALL_HEADER 0x00000000
159+
#define VIV_FE_STALL_HEADER_OP__MASK 0xf8000000
160+
#define VIV_FE_STALL_HEADER_OP__SHIFT 27
161+
#define VIV_FE_STALL_HEADER_OP_STALL 0x48000000
162+
163+
#define VIV_FE_STALL_TOKEN 0x00000004
164+
#define VIV_FE_STALL_TOKEN_FROM__MASK 0x0000001f
165+
#define VIV_FE_STALL_TOKEN_FROM__SHIFT 0
166+
#define VIV_FE_STALL_TOKEN_FROM(x) (((x) << VIV_FE_STALL_TOKEN_FROM__SHIFT) & VIV_FE_STALL_TOKEN_FROM__MASK)
167+
#define VIV_FE_STALL_TOKEN_TO__MASK 0x00001f00
168+
#define VIV_FE_STALL_TOKEN_TO__SHIFT 8
169+
#define VIV_FE_STALL_TOKEN_TO(x) (((x) << VIV_FE_STALL_TOKEN_TO__SHIFT) & VIV_FE_STALL_TOKEN_TO__MASK)
170+
171+
#define VIV_FE_CALL 0x00000000
172+
173+
#define VIV_FE_CALL_HEADER 0x00000000
174+
#define VIV_FE_CALL_HEADER_PREFETCH__MASK 0x0000ffff
175+
#define VIV_FE_CALL_HEADER_PREFETCH__SHIFT 0
176+
#define VIV_FE_CALL_HEADER_PREFETCH(x) (((x) << VIV_FE_CALL_HEADER_PREFETCH__SHIFT) & VIV_FE_CALL_HEADER_PREFETCH__MASK)
177+
#define VIV_FE_CALL_HEADER_OP__MASK 0xf8000000
178+
#define VIV_FE_CALL_HEADER_OP__SHIFT 27
179+
#define VIV_FE_CALL_HEADER_OP_CALL 0x50000000
180+
181+
#define VIV_FE_CALL_ADDRESS 0x00000004
182+
183+
#define VIV_FE_CALL_RETURN_PREFETCH 0x00000008
184+
185+
#define VIV_FE_CALL_RETURN_ADDRESS 0x0000000c
186+
187+
#define VIV_FE_RETURN 0x00000000
188+
189+
#define VIV_FE_RETURN_HEADER 0x00000000
190+
#define VIV_FE_RETURN_HEADER_OP__MASK 0xf8000000
191+
#define VIV_FE_RETURN_HEADER_OP__SHIFT 27
192+
#define VIV_FE_RETURN_HEADER_OP_RETURN 0x58000000
193+
194+
#define VIV_FE_CHIP_SELECT 0x00000000
195+
196+
#define VIV_FE_CHIP_SELECT_HEADER 0x00000000
197+
#define VIV_FE_CHIP_SELECT_HEADER_OP__MASK 0xf8000000
198+
#define VIV_FE_CHIP_SELECT_HEADER_OP__SHIFT 27
199+
#define VIV_FE_CHIP_SELECT_HEADER_OP_CHIP_SELECT 0x68000000
200+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP15 0x00008000
201+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP14 0x00004000
202+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP13 0x00002000
203+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP12 0x00001000
204+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP11 0x00000800
205+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP10 0x00000400
206+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP9 0x00000200
207+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP8 0x00000100
208+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP7 0x00000080
209+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP6 0x00000040
210+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP5 0x00000020
211+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP4 0x00000010
212+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP3 0x00000008
213+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP2 0x00000004
214+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP1 0x00000002
215+
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP0 0x00000001
216+
217+
218+
#endif /* CMDSTREAM_XML */

0 commit comments

Comments
 (0)