Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8c21a54 authored by The etnaviv authors's avatar The etnaviv authors Committed by Lucas Stach
Browse files

drm/etnaviv: add initial etnaviv DRM driver



This adds the etnaviv DRM driver and hooks it up in Makefiles
and Kconfig.

Signed-off-by: default avatarChristian Gmeiner <christian.gmeiner@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent f04b205a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -266,3 +266,5 @@ source "drivers/gpu/drm/amd/amdkfd/Kconfig"
source "drivers/gpu/drm/imx/Kconfig"

source "drivers/gpu/drm/vc4/Kconfig"

source "drivers/gpu/drm/etnaviv/Kconfig"
+1 −0
Original line number Diff line number Diff line
@@ -75,3 +75,4 @@ obj-y += i2c/
obj-y			+= panel/
obj-y			+= bridge/
obj-$(CONFIG_DRM_FSL_DCU) += fsl-dcu/
obj-$(CONFIG_DRM_ETNAVIV) += etnaviv/
+20 −0
Original line number Diff line number Diff line

config DRM_ETNAVIV
	tristate "ETNAVIV (DRM support for Vivante GPU IP cores)"
	depends on DRM
	depends on ARCH_MXC || ARCH_DOVE
	select SHMEM
	select TMPFS
	select IOMMU_API
	select IOMMU_SUPPORT
	select WANT_DEV_COREDUMP
	help
	  DRM driver for Vivante GPUs.

config DRM_ETNAVIV_REGISTER_LOGGING
	bool "enable ETNAVIV register logging"
	depends on DRM_ETNAVIV
	help
	  Compile in support for logging register reads/writes in a format
	  that can be parsed by envytools demsm tool.  If enabled, register
	  logging can be switched on via etnaviv.reglog=y module param.
+14 −0
Original line number Diff line number Diff line
etnaviv-y := \
	etnaviv_buffer.o \
	etnaviv_cmd_parser.o \
	etnaviv_drv.o \
	etnaviv_dump.o \
	etnaviv_gem_prime.o \
	etnaviv_gem_submit.o \
	etnaviv_gem.o \
	etnaviv_gpu.o \
	etnaviv_iommu_v2.o \
	etnaviv_iommu.o \
	etnaviv_mmu.o

obj-$(CONFIG_DRM_ETNAVIV)	+= etnaviv.o
+218 −0
Original line number Diff line number Diff line
#ifndef CMDSTREAM_XML
#define CMDSTREAM_XML

/* Autogenerated file, DO NOT EDIT manually!

This file was generated by the rules-ng-ng headergen tool in this git repository:
http://0x04.net/cgit/index.cgi/rules-ng-ng
git clone git://0x04.net/rules-ng-ng

The rules-ng-ng source files this header was generated from are:
- cmdstream.xml (  12589 bytes, from 2014-02-17 14:57:56)
- common.xml    (  18437 bytes, from 2015-03-25 11:27:41)

Copyright (C) 2014
*/


#define FE_OPCODE_LOAD_STATE					0x00000001
#define FE_OPCODE_END						0x00000002
#define FE_OPCODE_NOP						0x00000003
#define FE_OPCODE_DRAW_2D					0x00000004
#define FE_OPCODE_DRAW_PRIMITIVES				0x00000005
#define FE_OPCODE_DRAW_INDEXED_PRIMITIVES			0x00000006
#define FE_OPCODE_WAIT						0x00000007
#define FE_OPCODE_LINK						0x00000008
#define FE_OPCODE_STALL						0x00000009
#define FE_OPCODE_CALL						0x0000000a
#define FE_OPCODE_RETURN					0x0000000b
#define FE_OPCODE_CHIP_SELECT					0x0000000d
#define PRIMITIVE_TYPE_POINTS					0x00000001
#define PRIMITIVE_TYPE_LINES					0x00000002
#define PRIMITIVE_TYPE_LINE_STRIP				0x00000003
#define PRIMITIVE_TYPE_TRIANGLES				0x00000004
#define PRIMITIVE_TYPE_TRIANGLE_STRIP				0x00000005
#define PRIMITIVE_TYPE_TRIANGLE_FAN				0x00000006
#define PRIMITIVE_TYPE_LINE_LOOP				0x00000007
#define PRIMITIVE_TYPE_QUADS					0x00000008
#define VIV_FE_LOAD_STATE					0x00000000

#define VIV_FE_LOAD_STATE_HEADER				0x00000000
#define VIV_FE_LOAD_STATE_HEADER_OP__MASK			0xf8000000
#define VIV_FE_LOAD_STATE_HEADER_OP__SHIFT			27
#define VIV_FE_LOAD_STATE_HEADER_OP_LOAD_STATE			0x08000000
#define VIV_FE_LOAD_STATE_HEADER_FIXP				0x04000000
#define VIV_FE_LOAD_STATE_HEADER_COUNT__MASK			0x03ff0000
#define VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT			16
#define VIV_FE_LOAD_STATE_HEADER_COUNT(x)			(((x) << VIV_FE_LOAD_STATE_HEADER_COUNT__SHIFT) & VIV_FE_LOAD_STATE_HEADER_COUNT__MASK)
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK			0x0000ffff
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT			0
#define VIV_FE_LOAD_STATE_HEADER_OFFSET(x)			(((x) << VIV_FE_LOAD_STATE_HEADER_OFFSET__SHIFT) & VIV_FE_LOAD_STATE_HEADER_OFFSET__MASK)
#define VIV_FE_LOAD_STATE_HEADER_OFFSET__SHR			2

#define VIV_FE_END						0x00000000

#define VIV_FE_END_HEADER					0x00000000
#define VIV_FE_END_HEADER_EVENT_ID__MASK			0x0000001f
#define VIV_FE_END_HEADER_EVENT_ID__SHIFT			0
#define VIV_FE_END_HEADER_EVENT_ID(x)				(((x) << VIV_FE_END_HEADER_EVENT_ID__SHIFT) & VIV_FE_END_HEADER_EVENT_ID__MASK)
#define VIV_FE_END_HEADER_EVENT_ENABLE				0x00000100
#define VIV_FE_END_HEADER_OP__MASK				0xf8000000
#define VIV_FE_END_HEADER_OP__SHIFT				27
#define VIV_FE_END_HEADER_OP_END				0x10000000

#define VIV_FE_NOP						0x00000000

#define VIV_FE_NOP_HEADER					0x00000000
#define VIV_FE_NOP_HEADER_OP__MASK				0xf8000000
#define VIV_FE_NOP_HEADER_OP__SHIFT				27
#define VIV_FE_NOP_HEADER_OP_NOP				0x18000000

#define VIV_FE_DRAW_2D						0x00000000

#define VIV_FE_DRAW_2D_HEADER					0x00000000
#define VIV_FE_DRAW_2D_HEADER_COUNT__MASK			0x0000ff00
#define VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT			8
#define VIV_FE_DRAW_2D_HEADER_COUNT(x)				(((x) << VIV_FE_DRAW_2D_HEADER_COUNT__SHIFT) & VIV_FE_DRAW_2D_HEADER_COUNT__MASK)
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__MASK			0x07ff0000
#define VIV_FE_DRAW_2D_HEADER_DATA_COUNT__SHIFT			16
#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)
#define VIV_FE_DRAW_2D_HEADER_OP__MASK				0xf8000000
#define VIV_FE_DRAW_2D_HEADER_OP__SHIFT				27
#define VIV_FE_DRAW_2D_HEADER_OP_DRAW_2D			0x20000000

#define VIV_FE_DRAW_2D_TOP_LEFT					0x00000008
#define VIV_FE_DRAW_2D_TOP_LEFT_X__MASK				0x0000ffff
#define VIV_FE_DRAW_2D_TOP_LEFT_X__SHIFT			0
#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)
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__MASK				0xffff0000
#define VIV_FE_DRAW_2D_TOP_LEFT_Y__SHIFT			16
#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)

#define VIV_FE_DRAW_2D_BOTTOM_RIGHT				0x0000000c
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__MASK			0x0000ffff
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_X__SHIFT			0
#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)
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__MASK			0xffff0000
#define VIV_FE_DRAW_2D_BOTTOM_RIGHT_Y__SHIFT			16
#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)

#define VIV_FE_DRAW_PRIMITIVES					0x00000000

#define VIV_FE_DRAW_PRIMITIVES_HEADER				0x00000000
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__MASK			0xf8000000
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP__SHIFT			27
#define VIV_FE_DRAW_PRIMITIVES_HEADER_OP_DRAW_PRIMITIVES	0x28000000

#define VIV_FE_DRAW_PRIMITIVES_COMMAND				0x00000004
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK		0x000000ff
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT		0
#define VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE(x)			(((x) << VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__SHIFT) & VIV_FE_DRAW_PRIMITIVES_COMMAND_TYPE__MASK)

#define VIV_FE_DRAW_PRIMITIVES_START				0x00000008

#define VIV_FE_DRAW_PRIMITIVES_COUNT				0x0000000c

#define VIV_FE_DRAW_INDEXED_PRIMITIVES				0x00000000

#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER			0x00000000
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__MASK		0xf8000000
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP__SHIFT		27
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_HEADER_OP_DRAW_INDEXED_PRIMITIVES	0x30000000

#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND			0x00000004
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__MASK	0x000000ff
#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COMMAND_TYPE__SHIFT	0
#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)

#define VIV_FE_DRAW_INDEXED_PRIMITIVES_START			0x00000008

#define VIV_FE_DRAW_INDEXED_PRIMITIVES_COUNT			0x0000000c

#define VIV_FE_DRAW_INDEXED_PRIMITIVES_OFFSET			0x00000010

#define VIV_FE_WAIT						0x00000000

#define VIV_FE_WAIT_HEADER					0x00000000
#define VIV_FE_WAIT_HEADER_DELAY__MASK				0x0000ffff
#define VIV_FE_WAIT_HEADER_DELAY__SHIFT				0
#define VIV_FE_WAIT_HEADER_DELAY(x)				(((x) << VIV_FE_WAIT_HEADER_DELAY__SHIFT) & VIV_FE_WAIT_HEADER_DELAY__MASK)
#define VIV_FE_WAIT_HEADER_OP__MASK				0xf8000000
#define VIV_FE_WAIT_HEADER_OP__SHIFT				27
#define VIV_FE_WAIT_HEADER_OP_WAIT				0x38000000

#define VIV_FE_LINK						0x00000000

#define VIV_FE_LINK_HEADER					0x00000000
#define VIV_FE_LINK_HEADER_PREFETCH__MASK			0x0000ffff
#define VIV_FE_LINK_HEADER_PREFETCH__SHIFT			0
#define VIV_FE_LINK_HEADER_PREFETCH(x)				(((x) << VIV_FE_LINK_HEADER_PREFETCH__SHIFT) & VIV_FE_LINK_HEADER_PREFETCH__MASK)
#define VIV_FE_LINK_HEADER_OP__MASK				0xf8000000
#define VIV_FE_LINK_HEADER_OP__SHIFT				27
#define VIV_FE_LINK_HEADER_OP_LINK				0x40000000

#define VIV_FE_LINK_ADDRESS					0x00000004

#define VIV_FE_STALL						0x00000000

#define VIV_FE_STALL_HEADER					0x00000000
#define VIV_FE_STALL_HEADER_OP__MASK				0xf8000000
#define VIV_FE_STALL_HEADER_OP__SHIFT				27
#define VIV_FE_STALL_HEADER_OP_STALL				0x48000000

#define VIV_FE_STALL_TOKEN					0x00000004
#define VIV_FE_STALL_TOKEN_FROM__MASK				0x0000001f
#define VIV_FE_STALL_TOKEN_FROM__SHIFT				0
#define VIV_FE_STALL_TOKEN_FROM(x)				(((x) << VIV_FE_STALL_TOKEN_FROM__SHIFT) & VIV_FE_STALL_TOKEN_FROM__MASK)
#define VIV_FE_STALL_TOKEN_TO__MASK				0x00001f00
#define VIV_FE_STALL_TOKEN_TO__SHIFT				8
#define VIV_FE_STALL_TOKEN_TO(x)				(((x) << VIV_FE_STALL_TOKEN_TO__SHIFT) & VIV_FE_STALL_TOKEN_TO__MASK)

#define VIV_FE_CALL						0x00000000

#define VIV_FE_CALL_HEADER					0x00000000
#define VIV_FE_CALL_HEADER_PREFETCH__MASK			0x0000ffff
#define VIV_FE_CALL_HEADER_PREFETCH__SHIFT			0
#define VIV_FE_CALL_HEADER_PREFETCH(x)				(((x) << VIV_FE_CALL_HEADER_PREFETCH__SHIFT) & VIV_FE_CALL_HEADER_PREFETCH__MASK)
#define VIV_FE_CALL_HEADER_OP__MASK				0xf8000000
#define VIV_FE_CALL_HEADER_OP__SHIFT				27
#define VIV_FE_CALL_HEADER_OP_CALL				0x50000000

#define VIV_FE_CALL_ADDRESS					0x00000004

#define VIV_FE_CALL_RETURN_PREFETCH				0x00000008

#define VIV_FE_CALL_RETURN_ADDRESS				0x0000000c

#define VIV_FE_RETURN						0x00000000

#define VIV_FE_RETURN_HEADER					0x00000000
#define VIV_FE_RETURN_HEADER_OP__MASK				0xf8000000
#define VIV_FE_RETURN_HEADER_OP__SHIFT				27
#define VIV_FE_RETURN_HEADER_OP_RETURN				0x58000000

#define VIV_FE_CHIP_SELECT					0x00000000

#define VIV_FE_CHIP_SELECT_HEADER				0x00000000
#define VIV_FE_CHIP_SELECT_HEADER_OP__MASK			0xf8000000
#define VIV_FE_CHIP_SELECT_HEADER_OP__SHIFT			27
#define VIV_FE_CHIP_SELECT_HEADER_OP_CHIP_SELECT		0x68000000
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP15			0x00008000
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP14			0x00004000
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP13			0x00002000
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP12			0x00001000
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP11			0x00000800
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP10			0x00000400
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP9			0x00000200
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP8			0x00000100
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP7			0x00000080
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP6			0x00000040
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP5			0x00000020
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP4			0x00000010
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP3			0x00000008
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP2			0x00000004
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP1			0x00000002
#define VIV_FE_CHIP_SELECT_HEADER_ENABLE_CHIP0			0x00000001


#endif /* CMDSTREAM_XML */
Loading