aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/mali400/r3p2/mali/regs/mali_gp_regs.h
blob: c2049012bfc772296ba3cff79b6918d5cc69555b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*
 * Copyright (C) 2010, 2012 ARM Limited. All rights reserved.
 * 
 * This program is free software and is provided to you under the terms of the GNU General Public License version 2
 * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
 * 
 * A copy of the licence is included with the program, and can also be obtained from Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#ifndef _MALIGP2_CONROL_REGS_H_
#define _MALIGP2_CONROL_REGS_H_

/**
 * These are the different geometry processor control registers.
 * Their usage is to control and monitor the operation of the
 * Vertex Shader and the Polygon List Builder in the geometry processor.
 * Addresses are in 32-bit word relative sizes.
 * @see [P0081] "Geometry Processor Data Structures" for details
 */

typedef enum {
	MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR           = 0x00,
	MALIGP2_REG_ADDR_MGMT_VSCL_END_ADDR             = 0x04,
	MALIGP2_REG_ADDR_MGMT_PLBUCL_START_ADDR         = 0x08,
	MALIGP2_REG_ADDR_MGMT_PLBUCL_END_ADDR           = 0x0c,
	MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_START_ADDR     = 0x10,
	MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_END_ADDR       = 0x14,
	MALIGP2_REG_ADDR_MGMT_CMD                       = 0x20,
	MALIGP2_REG_ADDR_MGMT_INT_RAWSTAT               = 0x24,
	MALIGP2_REG_ADDR_MGMT_INT_CLEAR                 = 0x28,
	MALIGP2_REG_ADDR_MGMT_INT_MASK                  = 0x2C,
	MALIGP2_REG_ADDR_MGMT_INT_STAT                  = 0x30,
	MALIGP2_REG_ADDR_MGMT_WRITE_BOUND_LOW           = 0x34,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_ENABLE         = 0x3C,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_ENABLE         = 0x40,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC            = 0x44,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_SRC            = 0x48,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_VALUE          = 0x4C,
	MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_VALUE          = 0x50,
	MALIGP2_REG_ADDR_MGMT_STATUS                    = 0x68,
	MALIGP2_REG_ADDR_MGMT_VERSION                   = 0x6C,
	MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR_READ      = 0x80,
	MALIGP2_REG_ADDR_MGMT_PLBCL_START_ADDR_READ     = 0x84,
	MALIGP2_CONTR_AXI_BUS_ERROR_STAT                = 0x94,
	MALIGP2_REGISTER_ADDRESS_SPACE_SIZE             = 0x98,
} maligp_reg_addr_mgmt_addr;

#define MALIGP2_REG_VAL_PERF_CNT_ENABLE 1

/**
 * Commands to geometry processor.
 *  @see MALIGP2_CTRL_REG_CMD
 */
typedef enum
{
	MALIGP2_REG_VAL_CMD_START_VS			= (1<< 0),
	MALIGP2_REG_VAL_CMD_START_PLBU			= (1<< 1),
	MALIGP2_REG_VAL_CMD_UPDATE_PLBU_ALLOC	= (1<< 4),
	MALIGP2_REG_VAL_CMD_RESET				= (1<< 5),
	MALIGP2_REG_VAL_CMD_FORCE_HANG			= (1<< 6),
	MALIGP2_REG_VAL_CMD_STOP_BUS 			= (1<< 9),
	MALI400GP_REG_VAL_CMD_SOFT_RESET		= (1<<10), /* only valid for Mali-300 and later */
} mgp_contr_reg_val_cmd;


/**  @defgroup MALIGP2_IRQ
 * Interrupt status of geometry processor.
 *  @see MALIGP2_CTRL_REG_INT_RAWSTAT, MALIGP2_REG_ADDR_MGMT_INT_CLEAR,
 *       MALIGP2_REG_ADDR_MGMT_INT_MASK, MALIGP2_REG_ADDR_MGMT_INT_STAT
 * @{
 */
#define MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      (1 << 0)
#define MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    (1 << 1)
#define MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     (1 << 2)
#define MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ          (1 << 3)
#define MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ        (1 << 4)
#define MALIGP2_REG_VAL_IRQ_HANG                (1 << 5)
#define MALIGP2_REG_VAL_IRQ_FORCE_HANG          (1 << 6)
#define MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT    (1 << 7)
#define MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT    (1 << 8)
#define MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     (1 << 9)
#define MALIGP2_REG_VAL_IRQ_SYNC_ERROR          (1 << 10)
#define MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       (1 << 11)
#define MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED     (1 << 12)
#define MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      (1 << 13)
#define MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     (1 << 14)
#define MALI400GP_REG_VAL_IRQ_RESET_COMPLETED     (1 << 19)
#define MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW (1 << 20)
#define MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  (1 << 21)
#define MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS  (1 << 22)

/* Mask defining all IRQs in Mali GP */
#define MALIGP2_REG_VAL_IRQ_MASK_ALL \
	(\
		MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      | \
		MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    | \
		MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     | \
		MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ          | \
		MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ        | \
		MALIGP2_REG_VAL_IRQ_HANG                | \
		MALIGP2_REG_VAL_IRQ_FORCE_HANG          | \
		MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT    | \
		MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT    | \
		MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     | \
		MALIGP2_REG_VAL_IRQ_SYNC_ERROR          | \
		MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       | \
		MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED     | \
		MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      | \
		MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     | \
		MALI400GP_REG_VAL_IRQ_RESET_COMPLETED     | \
		MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
		MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  | \
		MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)

/* Mask defining the IRQs in Mali GP which we use */
#define MALIGP2_REG_VAL_IRQ_MASK_USED \
	(\
		MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      | \
		MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    | \
		MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     | \
		MALIGP2_REG_VAL_IRQ_FORCE_HANG          | \
		MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     | \
		MALIGP2_REG_VAL_IRQ_SYNC_ERROR          | \
		MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       | \
		MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      | \
		MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     | \
		MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
		MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  | \
		MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)

/* Mask defining non IRQs on MaliGP2*/
#define MALIGP2_REG_VAL_IRQ_MASK_NONE 0

/** }@ defgroup MALIGP2_IRQ*/

/** @defgroup MALIGP2_STATUS
 * The different Status values to the geometry processor.
 *  @see MALIGP2_CTRL_REG_STATUS
 * @{
 */
#define MALIGP2_REG_VAL_STATUS_VS_ACTIVE         0x0002
#define MALIGP2_REG_VAL_STATUS_BUS_STOPPED       0x0004
#define MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE       0x0008
#define MALIGP2_REG_VAL_STATUS_BUS_ERROR         0x0040
#define MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR   0x0100
/** }@ defgroup MALIGP2_STATUS*/

#define MALIGP2_REG_VAL_STATUS_MASK_ACTIVE (\
	MALIGP2_REG_VAL_STATUS_VS_ACTIVE|\
	MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE)


#define MALIGP2_REG_VAL_STATUS_MASK_ERROR (\
	MALIGP2_REG_VAL_STATUS_BUS_ERROR |\
	MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR )

/* This should be in the top 16 bit of the version register of gp.*/
#define MALI200_GP_PRODUCT_ID 0xA07
#define MALI300_GP_PRODUCT_ID 0xC07
#define MALI400_GP_PRODUCT_ID 0xB07
#define MALI450_GP_PRODUCT_ID 0xD07

/**
 * The different sources for instrumented on the geometry processor.
 *  @see MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC
 */

enum MALIGP2_cont_reg_perf_cnt_src {
	MALIGP2_REG_VAL_PERF_CNT1_SRC_NUMBER_OF_VERTICES_PROCESSED = 0x0a,
};

#endif