tizen 2.4 release
[kernel/linux-3.0.git] / drivers / gpu / arm / mali400 / mali / regs / mali_gp_regs.h
1 /*
2  * Copyright (C) 2011-2012 ARM Limited. All rights reserved.
3  *
4  * This program is free software and is provided to you under the terms of the GNU General Public License version 2
5  * as published by the Free Software Foundation, and any use by you of this program is subject to the terms of such GNU licence.
6  *
7  * A copy of the licence is included with the program, and can also be obtained from Free Software
8  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
9  */
10
11 #ifndef _MALIGP2_CONROL_REGS_H_
12 #define _MALIGP2_CONROL_REGS_H_
13
14 /**
15  * These are the different geometry processor control registers.
16  * Their usage is to control and monitor the operation of the
17  * Vertex Shader and the Polygon List Builder in the geometry processor.
18  * Addresses are in 32-bit word relative sizes.
19  * @see [P0081] "Geometry Processor Data Structures" for details
20  */
21
22 typedef enum {
23         MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR           = 0x00,
24         MALIGP2_REG_ADDR_MGMT_VSCL_END_ADDR             = 0x04,
25         MALIGP2_REG_ADDR_MGMT_PLBUCL_START_ADDR         = 0x08,
26         MALIGP2_REG_ADDR_MGMT_PLBUCL_END_ADDR           = 0x0c,
27         MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_START_ADDR     = 0x10,
28         MALIGP2_REG_ADDR_MGMT_PLBU_ALLOC_END_ADDR       = 0x14,
29         MALIGP2_REG_ADDR_MGMT_CMD                       = 0x20,
30         MALIGP2_REG_ADDR_MGMT_INT_RAWSTAT               = 0x24,
31         MALIGP2_REG_ADDR_MGMT_INT_CLEAR                 = 0x28,
32         MALIGP2_REG_ADDR_MGMT_INT_MASK                  = 0x2C,
33         MALIGP2_REG_ADDR_MGMT_INT_STAT                  = 0x30,
34         MALIGP2_REG_ADDR_MGMT_WRITE_BOUND_LOW           = 0x34,
35         MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_ENABLE         = 0x3C,
36         MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_ENABLE         = 0x40,
37         MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC            = 0x44,
38         MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_SRC            = 0x48,
39         MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_VALUE          = 0x4C,
40         MALIGP2_REG_ADDR_MGMT_PERF_CNT_1_VALUE          = 0x50,
41         MALIGP2_REG_ADDR_MGMT_STATUS                    = 0x68,
42         MALIGP2_REG_ADDR_MGMT_VERSION                   = 0x6C,
43         MALIGP2_REG_ADDR_MGMT_VSCL_START_ADDR_READ      = 0x80,
44         MALIGP2_REG_ADDR_MGMT_PLBCL_START_ADDR_READ     = 0x84,
45         MALIGP2_CONTR_AXI_BUS_ERROR_STAT                = 0x94,
46         MALIGP2_REGISTER_ADDRESS_SPACE_SIZE             = 0x98,
47 } maligp_reg_addr_mgmt_addr;
48
49 #define MALIGP2_REG_VAL_PERF_CNT_ENABLE 1
50
51 /**
52  * Commands to geometry processor.
53  *  @see MALIGP2_CTRL_REG_CMD
54  */
55 typedef enum
56 {
57         MALIGP2_REG_VAL_CMD_START_VS                    = (1<< 0),
58         MALIGP2_REG_VAL_CMD_START_PLBU                  = (1<< 1),
59         MALIGP2_REG_VAL_CMD_UPDATE_PLBU_ALLOC   = (1<< 4),
60         MALIGP2_REG_VAL_CMD_RESET                               = (1<< 5),
61         MALIGP2_REG_VAL_CMD_FORCE_HANG                  = (1<< 6),
62         MALIGP2_REG_VAL_CMD_STOP_BUS                    = (1<< 9),
63         MALI400GP_REG_VAL_CMD_SOFT_RESET                = (1<<10), /* only valid for Mali-300 and later */
64 } mgp_contr_reg_val_cmd;
65
66
67 /**  @defgroup MALIGP2_IRQ
68  * Interrupt status of geometry processor.
69  *  @see MALIGP2_CTRL_REG_INT_RAWSTAT, MALIGP2_REG_ADDR_MGMT_INT_CLEAR,
70  *       MALIGP2_REG_ADDR_MGMT_INT_MASK, MALIGP2_REG_ADDR_MGMT_INT_STAT
71  * @{
72  */
73 #define MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      (1 << 0)
74 #define MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    (1 << 1)
75 #define MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     (1 << 2)
76 #define MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ          (1 << 3)
77 #define MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ        (1 << 4)
78 #define MALIGP2_REG_VAL_IRQ_HANG                (1 << 5)
79 #define MALIGP2_REG_VAL_IRQ_FORCE_HANG          (1 << 6)
80 #define MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT    (1 << 7)
81 #define MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT    (1 << 8)
82 #define MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     (1 << 9)
83 #define MALIGP2_REG_VAL_IRQ_SYNC_ERROR          (1 << 10)
84 #define MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       (1 << 11)
85 #define MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED     (1 << 12)
86 #define MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      (1 << 13)
87 #define MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     (1 << 14)
88 #define MALI400GP_REG_VAL_IRQ_RESET_COMPLETED     (1 << 19)
89 #define MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW (1 << 20)
90 #define MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  (1 << 21)
91 #define MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS  (1 << 22)
92
93 /* Mask defining all IRQs in Mali GP */
94 #define MALIGP2_REG_VAL_IRQ_MASK_ALL \
95         (\
96                 MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      | \
97                 MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    | \
98                 MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     | \
99                 MALIGP2_REG_VAL_IRQ_VS_SEM_IRQ          | \
100                 MALIGP2_REG_VAL_IRQ_PLBU_SEM_IRQ        | \
101                 MALIGP2_REG_VAL_IRQ_HANG                | \
102                 MALIGP2_REG_VAL_IRQ_FORCE_HANG          | \
103                 MALIGP2_REG_VAL_IRQ_PERF_CNT_0_LIMIT    | \
104                 MALIGP2_REG_VAL_IRQ_PERF_CNT_1_LIMIT    | \
105                 MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     | \
106                 MALIGP2_REG_VAL_IRQ_SYNC_ERROR          | \
107                 MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       | \
108                 MALI400GP_REG_VAL_IRQ_AXI_BUS_STOPPED     | \
109                 MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      | \
110                 MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     | \
111                 MALI400GP_REG_VAL_IRQ_RESET_COMPLETED     | \
112                 MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
113                 MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  | \
114                 MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
115
116 /* Mask defining the IRQs in Mali GP which we use */
117 #define MALIGP2_REG_VAL_IRQ_MASK_USED \
118         (\
119                 MALIGP2_REG_VAL_IRQ_VS_END_CMD_LST      | \
120                 MALIGP2_REG_VAL_IRQ_PLBU_END_CMD_LST    | \
121                 MALIGP2_REG_VAL_IRQ_PLBU_OUT_OF_MEM     | \
122                 MALIGP2_REG_VAL_IRQ_FORCE_HANG          | \
123                 MALIGP2_REG_VAL_IRQ_WRITE_BOUND_ERR     | \
124                 MALIGP2_REG_VAL_IRQ_SYNC_ERROR          | \
125                 MALIGP2_REG_VAL_IRQ_AXI_BUS_ERROR       | \
126                 MALI400GP_REG_VAL_IRQ_VS_INVALID_CMD      | \
127                 MALI400GP_REG_VAL_IRQ_PLB_INVALID_CMD     | \
128                 MALI400GP_REG_VAL_IRQ_SEMAPHORE_UNDERFLOW | \
129                 MALI400GP_REG_VAL_IRQ_SEMAPHORE_OVERFLOW  | \
130                 MALI400GP_REG_VAL_IRQ_PTR_ARRAY_OUT_OF_BOUNDS)
131
132 /* Mask defining non IRQs on MaliGP2*/
133 #define MALIGP2_REG_VAL_IRQ_MASK_NONE 0
134
135 /** }@ defgroup MALIGP2_IRQ*/
136
137 /** @defgroup MALIGP2_STATUS
138  * The different Status values to the geometry processor.
139  *  @see MALIGP2_CTRL_REG_STATUS
140  * @{
141  */
142 #define MALIGP2_REG_VAL_STATUS_VS_ACTIVE         0x0002
143 #define MALIGP2_REG_VAL_STATUS_BUS_STOPPED       0x0004
144 #define MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE       0x0008
145 #define MALIGP2_REG_VAL_STATUS_BUS_ERROR         0x0040
146 #define MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR   0x0100
147 /** }@ defgroup MALIGP2_STATUS*/
148
149 #define MALIGP2_REG_VAL_STATUS_MASK_ACTIVE (\
150         MALIGP2_REG_VAL_STATUS_VS_ACTIVE|\
151         MALIGP2_REG_VAL_STATUS_PLBU_ACTIVE)
152
153
154 #define MALIGP2_REG_VAL_STATUS_MASK_ERROR (\
155         MALIGP2_REG_VAL_STATUS_BUS_ERROR |\
156         MALIGP2_REG_VAL_STATUS_WRITE_BOUND_ERR )
157
158 /* This should be in the top 16 bit of the version register of gp.*/
159 #define MALI200_GP_PRODUCT_ID 0xA07
160 #define MALI300_GP_PRODUCT_ID 0xC07
161 #define MALI400_GP_PRODUCT_ID 0xB07
162 #define MALI450_GP_PRODUCT_ID 0xD07
163
164 /**
165  * The different sources for instrumented on the geometry processor.
166  *  @see MALIGP2_REG_ADDR_MGMT_PERF_CNT_0_SRC
167  */
168
169 enum MALIGP2_cont_reg_perf_cnt_src {
170         MALIGP2_REG_VAL_PERF_CNT1_SRC_NUMBER_OF_VERTICES_PROCESSED = 0x0a,
171 };
172
173 #endif