1c4ae5be6Smrg/*
2c4ae5be6Smrg * Cayman Register documentation
3c4ae5be6Smrg *
4c4ae5be6Smrg * Copyright (C) 2011  Advanced Micro Devices, Inc.
5c4ae5be6Smrg *
6c4ae5be6Smrg * Permission is hereby granted, free of charge, to any person obtaining a
7c4ae5be6Smrg * copy of this software and associated documentation files (the "Software"),
8c4ae5be6Smrg * to deal in the Software without restriction, including without limitation
9c4ae5be6Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10c4ae5be6Smrg * and/or sell copies of the Software, and to permit persons to whom the
11c4ae5be6Smrg * Software is furnished to do so, subject to the following conditions:
12c4ae5be6Smrg *
13c4ae5be6Smrg * The above copyright notice and this permission notice shall be included
14c4ae5be6Smrg * in all copies or substantial portions of the Software.
15c4ae5be6Smrg *
16c4ae5be6Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17c4ae5be6Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18c4ae5be6Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19c4ae5be6Smrg * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20c4ae5be6Smrg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21c4ae5be6Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22c4ae5be6Smrg */
23c4ae5be6Smrg
24c4ae5be6Smrg#ifndef _CAYMAN_REG_H_
25c4ae5be6Smrg#define _CAYMAN_REG_H_
26c4ae5be6Smrg
27c4ae5be6Smrg/*
28c4ae5be6Smrg * Register definitions
29c4ae5be6Smrg */
30c4ae5be6Smrg
31c4ae5be6Smrg#include "cayman_reg_auto.h"
32c4ae5be6Smrg
33c4ae5be6Smrgenum {
34c4ae5be6Smrg    SHADER_TYPE_PS,
35c4ae5be6Smrg    SHADER_TYPE_VS,
36c4ae5be6Smrg    SHADER_TYPE_GS,
37c4ae5be6Smrg    SHADER_TYPE_HS,
38c4ae5be6Smrg    SHADER_TYPE_LS,
39c4ae5be6Smrg    SHADER_TYPE_CS,
40c4ae5be6Smrg    SHADER_TYPE_FS,
41c4ae5be6Smrg};
42c4ae5be6Smrg
43c4ae5be6Smrg
44c4ae5be6Smrg/* SET_*_REG offsets + ends */
4540732134Srjs#define SET_CONFIG_REG_offset  0x00008000
4640732134Srjs#define SET_CONFIG_REG_end     0x0000ac00
4740732134Srjs#define SET_CONTEXT_REG_offset 0x00028000
4840732134Srjs#define SET_CONTEXT_REG_end    0x00029000
4940732134Srjs#define SET_RESOURCE_offset    0x00030000
5040732134Srjs#define SET_RESOURCE_end       0x00038000
5140732134Srjs#define SET_SAMPLER_offset     0x0003c000
5240732134Srjs#define SET_SAMPLER_end        0x0003c600
5340732134Srjs#define SET_CTL_CONST_offset   0x0003cff0
5440732134Srjs#define SET_CTL_CONST_end      0x0003ff0c
5540732134Srjs#define SET_LOOP_CONST_offset  0x0003a200
5640732134Srjs#define SET_LOOP_CONST_end     0x0003a500
5740732134Srjs#define SET_BOOL_CONST_offset  0x0003a500
5840732134Srjs#define SET_BOOL_CONST_end     0x0003a518
5940732134Srjs
60c4ae5be6Smrg
61c4ae5be6Smrg/* Packet3 commands */
62c4ae5be6Smrgenum {
63c4ae5be6Smrg    IT_NOP                      = 0x10,
64c4ae5be6Smrg    IT_INDIRECT_BUFFER_END      = 0x17,
65c4ae5be6Smrg    IT_SET_PREDICATION          = 0x20,
66c4ae5be6Smrg    IT_COND_EXEC                = 0x22,
67c4ae5be6Smrg    IT_PRED_EXEC                = 0x23,
68c4ae5be6Smrg    IT_DRAW_INDEX_2             = 0x27,
69c4ae5be6Smrg    IT_CONTEXT_CONTROL          = 0x28,
70c4ae5be6Smrg    IT_DRAW_INDEX_OFFSET        = 0x29,
71c4ae5be6Smrg    IT_INDEX_TYPE               = 0x2A,
72c4ae5be6Smrg    IT_DRAW_INDEX               = 0x2B,
73c4ae5be6Smrg    IT_DRAW_INDEX_AUTO          = 0x2D,
74c4ae5be6Smrg    IT_DRAW_INDEX_IMMD          = 0x2E,
75c4ae5be6Smrg    IT_NUM_INSTANCES            = 0x2F,
76c4ae5be6Smrg    IT_INDIRECT_BUFFER          = 0x32,
77c4ae5be6Smrg    IT_STRMOUT_BUFFER_UPDATE    = 0x34,
78c4ae5be6Smrg    IT_MEM_SEMAPHORE            = 0x39,
79c4ae5be6Smrg    IT_MPEG_INDEX               = 0x3A,
80c4ae5be6Smrg    IT_WAIT_REG_MEM             = 0x3C,
81c4ae5be6Smrg    IT_MEM_WRITE                = 0x3D,
82c4ae5be6Smrg    IT_SURFACE_SYNC             = 0x43,
83c4ae5be6Smrg    IT_ME_INITIALIZE            = 0x44,
84c4ae5be6Smrg    IT_COND_WRITE               = 0x45,
85c4ae5be6Smrg    IT_EVENT_WRITE              = 0x46,
86c4ae5be6Smrg    IT_EVENT_WRITE_EOP          = 0x47,
87c4ae5be6Smrg    IT_EVENT_WRITE_EOS          = 0x48,
88c4ae5be6Smrg    IT_SET_CONFIG_REG           = 0x68,
89c4ae5be6Smrg    IT_SET_CONTEXT_REG          = 0x69,
90c4ae5be6Smrg    IT_SET_ALU_CONST            = 0x6A,
91c4ae5be6Smrg    IT_SET_BOOL_CONST           = 0x6B,
92c4ae5be6Smrg    IT_SET_LOOP_CONST           = 0x6C,
93c4ae5be6Smrg    IT_SET_RESOURCE             = 0x6D,
94c4ae5be6Smrg    IT_SET_SAMPLER              = 0x6E,
95c4ae5be6Smrg    IT_SET_CTL_CONST            = 0x6F,
96c4ae5be6Smrg};
97c4ae5be6Smrg
98c4ae5be6Smrg/* IT_WAIT_REG_MEM operation encoding */
99c4ae5be6Smrg
100c4ae5be6Smrg#define IT_WAIT_ALWAYS          (0 << 0)
101c4ae5be6Smrg#define IT_WAIT_LT              (1 << 0)
102c4ae5be6Smrg#define IT_WAIT_LE              (2 << 0)
103c4ae5be6Smrg#define IT_WAIT_EQ              (3 << 0)
104c4ae5be6Smrg#define IT_WAIT_NE              (4 << 0)
105c4ae5be6Smrg#define IT_WAIT_GE              (5 << 0)
106c4ae5be6Smrg#define IT_WAIT_GT              (6 << 0)
107c4ae5be6Smrg#define IT_WAIT_REG             (0 << 4)
108c4ae5be6Smrg#define IT_WAIT_MEM             (1 << 4)
109c4ae5be6Smrg
110c4ae5be6Smrg#define IT_WAIT_ADDR(x)         ((x) >> 2)
111c4ae5be6Smrg
112c4ae5be6Smrgenum {
113c4ae5be6Smrg
114c4ae5be6Smrg    SQ_LDS_ALLOC_PS                                       = 0x288ec,
115c4ae5be6Smrg    SQ_DYN_GPR_CNTL_PS_FLUSH_REQ                          = 0x8d8c,
116c4ae5be6Smrg
117c4ae5be6Smrg    CP_COHER_CNTL                                         = 0x85f0,
118c4ae5be6Smrg	DEST_BASE_0_ENA_bit                               = 1 << 0,
119c4ae5be6Smrg	DEST_BASE_1_ENA_bit                               = 1 << 1,
120c4ae5be6Smrg	SO0_DEST_BASE_ENA_bit                             = 1 << 2,
121c4ae5be6Smrg	SO1_DEST_BASE_ENA_bit                             = 1 << 3,
122c4ae5be6Smrg	SO2_DEST_BASE_ENA_bit                             = 1 << 4,
123c4ae5be6Smrg	SO3_DEST_BASE_ENA_bit                             = 1 << 5,
124c4ae5be6Smrg	CB0_DEST_BASE_ENA_bit                             = 1 << 6,
125c4ae5be6Smrg	CB1_DEST_BASE_ENA_bit                             = 1 << 7,
126c4ae5be6Smrg	CB2_DEST_BASE_ENA_bit                             = 1 << 8,
127c4ae5be6Smrg	CB3_DEST_BASE_ENA_bit                             = 1 << 9,
128c4ae5be6Smrg	CB4_DEST_BASE_ENA_bit                             = 1 << 10,
129c4ae5be6Smrg	CB5_DEST_BASE_ENA_bit                             = 1 << 11,
130c4ae5be6Smrg	CB6_DEST_BASE_ENA_bit                             = 1 << 12,
131c4ae5be6Smrg	CB7_DEST_BASE_ENA_bit                             = 1 << 13,
132c4ae5be6Smrg	DB_DEST_BASE_ENA_bit                              = 1 << 14,
133c4ae5be6Smrg	CB8_DEST_BASE_ENA_bit                             = 1 << 15,
134c4ae5be6Smrg	CB9_DEST_BASE_ENA_bit                             = 1 << 16,
135c4ae5be6Smrg	CB10_DEST_BASE_ENA_bit                            = 1 << 17,
136c4ae5be6Smrg	CB11_DEST_BASE_ENA_bit                            = 1 << 18,
137c4ae5be6Smrg	FULL_CACHE_ENA_bit                                = 1 << 20,
138c4ae5be6Smrg	TC_ACTION_ENA_bit                                 = 1 << 23,
139c4ae5be6Smrg	CB_ACTION_ENA_bit                                 = 1 << 25,
140c4ae5be6Smrg	DB_ACTION_ENA_bit                                 = 1 << 26,
141c4ae5be6Smrg	SH_ACTION_ENA_bit                                 = 1 << 27,
142c4ae5be6Smrg	SX_ACTION_ENA_bit                                 = 1 << 28,
143c4ae5be6Smrg    CP_COHER_SIZE                                         = 0x85f4,
144c4ae5be6Smrg    CP_COHER_BASE                                         = 0x85f8,
145c4ae5be6Smrg    CP_COHER_STATUS                                       = 0x85fc,
146c4ae5be6Smrg	MATCHING_GFX_CNTX_mask                            = 0xff << 0,
147c4ae5be6Smrg	MATCHING_GFX_CNTX_shift                           = 0,
148c4ae5be6Smrg	STATUS_bit                                        = 1 << 31,
149c4ae5be6Smrg
150c4ae5be6Smrg//  SQ_VTX_CONSTANT_WORD2_0                               = 0x00030008,
151c4ae5be6Smrg//    	SQ_VTX_CONSTANT_WORD2_0__DATA_FORMAT_mask         = 0x3f << 20,
152c4ae5be6Smrg	FMT_INVALID=0,      FMT_8,          FMT_4_4,            FMT_3_3_2,
153c4ae5be6Smrg	                    FMT_16=5,       FMT_16_FLOAT,       FMT_8_8,
154c4ae5be6Smrg	FMT_5_6_5,          FMT_6_5_5,      FMT_1_5_5_5,        FMT_4_4_4_4,
155c4ae5be6Smrg	FMT_5_5_5_1,        FMT_32,         FMT_32_FLOAT,       FMT_16_16,
156c4ae5be6Smrg	FMT_16_16_FLOAT=16, FMT_8_24,       FMT_8_24_FLOAT,     FMT_24_8,
157c4ae5be6Smrg	FMT_24_8_FLOAT,     FMT_10_11_11,   FMT_10_11_11_FLOAT, FMT_11_11_10,
158c4ae5be6Smrg	FMT_11_11_10_FLOAT, FMT_2_10_10_10, FMT_8_8_8_8,        FMT_10_10_10_2,
159c4ae5be6Smrg	FMT_X24_8_32_FLOAT, FMT_32_32,      FMT_32_32_FLOAT,    FMT_16_16_16_16,
160c4ae5be6Smrg	FMT_16_16_16_16_FLOAT=32,           FMT_32_32_32_32=34, FMT_32_32_32_32_FLOAT,
161c4ae5be6Smrg	                    FMT_1 = 37,                         FMT_GB_GR=39,
162c4ae5be6Smrg	FMT_BG_RG,          FMT_32_AS_8,    FMT_32_AS_8_8,      FMT_5_9_9_9_SHAREDEXP,
163c4ae5be6Smrg	FMT_8_8_8,          FMT_16_16_16,   FMT_16_16_16_FLOAT, FMT_32_32_32,
164c4ae5be6Smrg	FMT_32_32_32_FLOAT=48,
165c4ae5be6Smrg
166c4ae5be6Smrg//  High level register file lengths
167c4ae5be6Smrg    SQ_FETCH_RESOURCE                                       = SQ_TEX_RESOURCE_WORD0_0,
168c4ae5be6Smrg    SQ_FETCH_RESOURCE_ps_num                                = 176,
169c4ae5be6Smrg    SQ_FETCH_RESOURCE_vs_num                                = 160,
170c4ae5be6Smrg    SQ_FETCH_RESOURCE_gs_num                                = 160,
171c4ae5be6Smrg    SQ_FETCH_RESOURCE_hs_num                                = 160,
172c4ae5be6Smrg    SQ_FETCH_RESOURCE_ls_num                                = 160,
173c4ae5be6Smrg    SQ_FETCH_RESOURCE_cs_num                                = 176,
174c4ae5be6Smrg    SQ_FETCH_RESOURCE_fs_num                                = 32,
175c4ae5be6Smrg    SQ_FETCH_RESOURCE_all_num                               = 1024,
176c4ae5be6Smrg    SQ_FETCH_RESOURCE_offset                                = 32,
177c4ae5be6Smrg    SQ_FETCH_RESOURCE_ps                                    = 0,                                               //   0...175
178c4ae5be6Smrg    SQ_FETCH_RESOURCE_vs                                    = SQ_FETCH_RESOURCE_ps + SQ_FETCH_RESOURCE_ps_num, // 176...335
179c4ae5be6Smrg    SQ_FETCH_RESOURCE_gs                                    = SQ_FETCH_RESOURCE_vs + SQ_FETCH_RESOURCE_vs_num, // 336...495
180c4ae5be6Smrg    SQ_FETCH_RESOURCE_hs                                    = SQ_FETCH_RESOURCE_gs + SQ_FETCH_RESOURCE_gs_num, // 496...655
181c4ae5be6Smrg    SQ_FETCH_RESOURCE_ls                                    = SQ_FETCH_RESOURCE_hs + SQ_FETCH_RESOURCE_hs_num, // 656...815
182c4ae5be6Smrg    SQ_FETCH_RESOURCE_cs                                    = SQ_FETCH_RESOURCE_ls + SQ_FETCH_RESOURCE_ls_num, // 816...991
183c4ae5be6Smrg    SQ_FETCH_RESOURCE_fs                                    = SQ_FETCH_RESOURCE_cs + SQ_FETCH_RESOURCE_cs_num, // 992...1023
184c4ae5be6Smrg
185c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD                                   = SQ_TEX_SAMPLER_WORD0_0,
186c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_ps_num                            = 18,
187c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_vs_num                            = 18,
188c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_gs_num                            = 18,
189c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_hs_num                            = 18,
190c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_ls_num                            = 18,
191c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_cs_num                            = 18,
192c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_all_num                           = 108,
193c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_offset                            = 12,
194c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_ps                                = 0,                                                   //  0...17
195c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_vs                                = SQ_TEX_SAMPLER_WORD_ps + SQ_TEX_SAMPLER_WORD_ps_num, // 18...35
196c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_gs                                = SQ_TEX_SAMPLER_WORD_vs + SQ_TEX_SAMPLER_WORD_vs_num, // 36...53
197c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_hs                                = SQ_TEX_SAMPLER_WORD_gs + SQ_TEX_SAMPLER_WORD_gs_num, // 54...71
198c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_ls                                = SQ_TEX_SAMPLER_WORD_hs + SQ_TEX_SAMPLER_WORD_hs_num, // 72...89
199c4ae5be6Smrg    SQ_TEX_SAMPLER_WORD_cs                                = SQ_TEX_SAMPLER_WORD_ls + SQ_TEX_SAMPLER_WORD_ls_num, // 90...107
200c4ae5be6Smrg
201c4ae5be6Smrg    SQ_LOOP_CONST                                         = SQ_LOOP_CONST_0,
202c4ae5be6Smrg    SQ_LOOP_CONST_ps_num                                  = 32,
203c4ae5be6Smrg    SQ_LOOP_CONST_vs_num                                  = 32,
204c4ae5be6Smrg    SQ_LOOP_CONST_gs_num                                  = 32,
205c4ae5be6Smrg    SQ_LOOP_CONST_hs_num                                  = 32,
206c4ae5be6Smrg    SQ_LOOP_CONST_ls_num                                  = 32,
207c4ae5be6Smrg    SQ_LOOP_CONST_cs_num                                  = 32,
208c4ae5be6Smrg    SQ_LOOP_CONST_all_num                                 = 192,
209c4ae5be6Smrg    SQ_LOOP_CONST_offset                                  = 4,
210c4ae5be6Smrg    SQ_LOOP_CONST_ps                                      = 0,                                       //   0...31
211c4ae5be6Smrg    SQ_LOOP_CONST_vs                                      = SQ_LOOP_CONST_ps + SQ_LOOP_CONST_ps_num, //  32...63
212c4ae5be6Smrg    SQ_LOOP_CONST_gs                                      = SQ_LOOP_CONST_vs + SQ_LOOP_CONST_vs_num, //  64...95
213c4ae5be6Smrg    SQ_LOOP_CONST_hs                                      = SQ_LOOP_CONST_gs + SQ_LOOP_CONST_gs_num, //  96...127
214c4ae5be6Smrg    SQ_LOOP_CONST_ls                                      = SQ_LOOP_CONST_hs + SQ_LOOP_CONST_hs_num, // 128...159
215c4ae5be6Smrg    SQ_LOOP_CONST_cs                                      = SQ_LOOP_CONST_ls + SQ_LOOP_CONST_ls_num, // 160...191
216c4ae5be6Smrg
217c4ae5be6Smrg    SQ_BOOL_CONST                                         = SQ_BOOL_CONST_0, /* 32 bits each */
218c4ae5be6Smrg    SQ_BOOL_CONST_ps_num                                  = 1,
219c4ae5be6Smrg    SQ_BOOL_CONST_vs_num                                  = 1,
220c4ae5be6Smrg    SQ_BOOL_CONST_gs_num                                  = 1,
221c4ae5be6Smrg    SQ_BOOL_CONST_hs_num                                  = 1,
222c4ae5be6Smrg    SQ_BOOL_CONST_ls_num                                  = 1,
223c4ae5be6Smrg    SQ_BOOL_CONST_cs_num                                  = 1,
224c4ae5be6Smrg    SQ_BOOL_CONST_all_num                                 = 6,
225c4ae5be6Smrg    SQ_BOOL_CONST_offset                                  = 4,
226c4ae5be6Smrg    SQ_BOOL_CONST_ps                                      = 0,
227c4ae5be6Smrg    SQ_BOOL_CONST_vs                                      = SQ_BOOL_CONST_ps + SQ_BOOL_CONST_ps_num,
228c4ae5be6Smrg    SQ_BOOL_CONST_gs                                      = SQ_BOOL_CONST_vs + SQ_BOOL_CONST_vs_num,
229c4ae5be6Smrg    SQ_BOOL_CONST_hs                                      = SQ_BOOL_CONST_gs + SQ_BOOL_CONST_gs_num,
230c4ae5be6Smrg    SQ_BOOL_CONST_ls                                      = SQ_BOOL_CONST_hs + SQ_BOOL_CONST_hs_num,
231c4ae5be6Smrg    SQ_BOOL_CONST_cs                                      = SQ_BOOL_CONST_ls + SQ_BOOL_CONST_ls_num,
232c4ae5be6Smrg
233c4ae5be6Smrg};
234c4ae5be6Smrg
235c4ae5be6Smrg#endif
236