1 /* 2 * Copyright 2008 Advanced Micro Devices, Inc. 3 * Copyright 2008 Red Hat Inc. 4 * Copyright 2009 Jerome Glisse. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 * OTHER DEALINGS IN THE SOFTWARE. 23 * 24 * Authors: Dave Airlie 25 * Alex Deucher 26 * Jerome Glisse 27 */ 28 #ifndef __R500_REG_H__ 29 #define __R500_REG_H__ 30 31 32 /* pipe config regs */ 33 #define R300_GA_POLY_MODE 0x4288 34 # define R300_FRONT_PTYPE_POINT (0 << 4) 35 # define R300_FRONT_PTYPE_LINE (1 << 4) 36 # define R300_FRONT_PTYPE_TRIANGE (2 << 4) 37 # define R300_BACK_PTYPE_POINT (0 << 7) 38 # define R300_BACK_PTYPE_LINE (1 << 7) 39 # define R300_BACK_PTYPE_TRIANGE (2 << 7) 40 #define R300_GA_ROUND_MODE 0x428c 41 # define R300_GEOMETRY_ROUND_TRUNC (0 << 0) 42 # define R300_GEOMETRY_ROUND_NEAREST (1 << 0) 43 # define R300_COLOR_ROUND_TRUNC (0 << 2) 44 # define R300_COLOR_ROUND_NEAREST (1 << 2) 45 #define R300_GB_MSPOS0 0x4010 46 # define R300_MS_X0_SHIFT 0 47 # define R300_MS_Y0_SHIFT 4 48 # define R300_MS_X1_SHIFT 8 49 # define R300_MS_Y1_SHIFT 12 50 # define R300_MS_X2_SHIFT 16 51 # define R300_MS_Y2_SHIFT 20 52 # define R300_MSBD0_Y_SHIFT 24 53 # define R300_MSBD0_X_SHIFT 28 54 #define R300_GB_MSPOS1 0x4014 55 # define R300_MS_X3_SHIFT 0 56 # define R300_MS_Y3_SHIFT 4 57 # define R300_MS_X4_SHIFT 8 58 # define R300_MS_Y4_SHIFT 12 59 # define R300_MS_X5_SHIFT 16 60 # define R300_MS_Y5_SHIFT 20 61 # define R300_MSBD1_SHIFT 24 62 63 #define R300_GA_ENHANCE 0x4274 64 # define R300_GA_DEADLOCK_CNTL (1 << 0) 65 # define R300_GA_FASTSYNC_CNTL (1 << 1) 66 #define R300_RB3D_DSTCACHE_CTLSTAT 0x4e4c 67 # define R300_RB3D_DC_FLUSH (2 << 0) 68 # define R300_RB3D_DC_FREE (2 << 2) 69 # define R300_RB3D_DC_FINISH (1 << 4) 70 #define R300_RB3D_ZCACHE_CTLSTAT 0x4f18 71 # define R300_ZC_FLUSH (1 << 0) 72 # define R300_ZC_FREE (1 << 1) 73 # define R300_ZC_FLUSH_ALL 0x3 74 #define R400_GB_PIPE_SELECT 0x402c 75 #define R500_DYN_SCLK_PWMEM_PIPE 0x000d /* PLL */ 76 #define R500_SU_REG_DEST 0x42c8 77 #define R300_GB_TILE_CONFIG 0x4018 78 # define R300_ENABLE_TILING (1 << 0) 79 # define R300_PIPE_COUNT_RV350 (0 << 1) 80 # define R300_PIPE_COUNT_R300 (3 << 1) 81 # define R300_PIPE_COUNT_R420_3P (6 << 1) 82 # define R300_PIPE_COUNT_R420 (7 << 1) 83 # define R300_TILE_SIZE_8 (0 << 4) 84 # define R300_TILE_SIZE_16 (1 << 4) 85 # define R300_TILE_SIZE_32 (2 << 4) 86 # define R300_SUBPIXEL_1_12 (0 << 16) 87 # define R300_SUBPIXEL_1_16 (1 << 16) 88 #define R300_DST_PIPE_CONFIG 0x170c 89 # define R300_PIPE_AUTO_CONFIG (1 << 31) 90 #define R300_RB2D_DSTCACHE_MODE 0x3428 91 # define R300_DC_AUTOFLUSH_ENABLE (1 << 8) 92 # define R300_DC_DC_DISABLE_IGNORE_PE (1 << 17) 93 94 #define RADEON_CP_STAT 0x7C0 95 #define RADEON_RBBM_CMDFIFO_ADDR 0xE70 96 #define RADEON_RBBM_CMDFIFO_DATA 0xE74 97 #define RADEON_ISYNC_CNTL 0x1724 98 # define RADEON_ISYNC_ANY2D_IDLE3D (1 << 0) 99 # define RADEON_ISYNC_ANY3D_IDLE2D (1 << 1) 100 # define RADEON_ISYNC_TRIG2D_IDLE3D (1 << 2) 101 # define RADEON_ISYNC_TRIG3D_IDLE2D (1 << 3) 102 # define RADEON_ISYNC_WAIT_IDLEGUI (1 << 4) 103 # define RADEON_ISYNC_CPSCRATCH_IDLEGUI (1 << 5) 104 105 #define RS480_NB_MC_INDEX 0x168 106 # define RS480_NB_MC_IND_WR_EN (1 << 8) 107 #define RS480_NB_MC_DATA 0x16c 108 109 /* 110 * RS690 111 */ 112 #define RS690_MCCFG_FB_LOCATION 0x100 113 #define RS690_MC_FB_START_MASK 0x0000FFFF 114 #define RS690_MC_FB_START_SHIFT 0 115 #define RS690_MC_FB_TOP_MASK 0xFFFF0000 116 #define RS690_MC_FB_TOP_SHIFT 16 117 #define RS690_MCCFG_AGP_LOCATION 0x101 118 #define RS690_MC_AGP_START_MASK 0x0000FFFF 119 #define RS690_MC_AGP_START_SHIFT 0 120 #define RS690_MC_AGP_TOP_MASK 0xFFFF0000 121 #define RS690_MC_AGP_TOP_SHIFT 16 122 #define RS690_MCCFG_AGP_BASE 0x102 123 #define RS690_MCCFG_AGP_BASE_2 0x103 124 #define RS690_MC_INIT_MISC_LAT_TIMER 0x104 125 #define RS690_HDP_FB_LOCATION 0x0134 126 #define RS690_MC_INDEX 0x78 127 # define RS690_MC_INDEX_MASK 0x1ff 128 # define RS690_MC_INDEX_WR_EN (1 << 9) 129 # define RS690_MC_INDEX_WR_ACK 0x7f 130 #define RS690_MC_DATA 0x7c 131 #define RS690_MC_STATUS 0x90 132 #define RS690_MC_STATUS_IDLE (1 << 0) 133 #define RS480_AGP_BASE_2 0x0164 134 #define RS480_MC_MISC_CNTL 0x18 135 # define RS480_DISABLE_GTW (1 << 1) 136 # define RS480_GART_INDEX_REG_EN (1 << 12) 137 # define RS690_BLOCK_GFX_D3_EN (1 << 14) 138 #define RS480_GART_FEATURE_ID 0x2b 139 # define RS480_HANG_EN (1 << 11) 140 # define RS480_TLB_ENABLE (1 << 18) 141 # define RS480_P2P_ENABLE (1 << 19) 142 # define RS480_GTW_LAC_EN (1 << 25) 143 # define RS480_2LEVEL_GART (0 << 30) 144 # define RS480_1LEVEL_GART (1 << 30) 145 # define RS480_PDC_EN (1 << 31) 146 #define RS480_GART_BASE 0x2c 147 #define RS480_GART_CACHE_CNTRL 0x2e 148 # define RS480_GART_CACHE_INVALIDATE (1 << 0) /* wait for it to clear */ 149 #define RS480_AGP_ADDRESS_SPACE_SIZE 0x38 150 # define RS480_GART_EN (1 << 0) 151 # define RS480_VA_SIZE_32MB (0 << 1) 152 # define RS480_VA_SIZE_64MB (1 << 1) 153 # define RS480_VA_SIZE_128MB (2 << 1) 154 # define RS480_VA_SIZE_256MB (3 << 1) 155 # define RS480_VA_SIZE_512MB (4 << 1) 156 # define RS480_VA_SIZE_1GB (5 << 1) 157 # define RS480_VA_SIZE_2GB (6 << 1) 158 #define RS480_AGP_MODE_CNTL 0x39 159 # define RS480_POST_GART_Q_SIZE (1 << 18) 160 # define RS480_NONGART_SNOOP (1 << 19) 161 # define RS480_AGP_RD_BUF_SIZE (1 << 20) 162 # define RS480_REQ_TYPE_SNOOP_SHIFT 22 163 # define RS480_REQ_TYPE_SNOOP_MASK 0x3 164 # define RS480_REQ_TYPE_SNOOP_DIS (1 << 24) 165 166 #define RS690_AIC_CTRL_SCRATCH 0x3A 167 # define RS690_DIS_OUT_OF_PCI_GART_ACCESS (1 << 1) 168 169 /* 170 * RS600 171 */ 172 #define RS600_MC_STATUS 0x0 173 #define RS600_MC_STATUS_IDLE (1 << 0) 174 #define RS600_MC_INDEX 0x70 175 # define RS600_MC_ADDR_MASK 0xffff 176 # define RS600_MC_IND_SEQ_RBS_0 (1 << 16) 177 # define RS600_MC_IND_SEQ_RBS_1 (1 << 17) 178 # define RS600_MC_IND_SEQ_RBS_2 (1 << 18) 179 # define RS600_MC_IND_SEQ_RBS_3 (1 << 19) 180 # define RS600_MC_IND_AIC_RBS (1 << 20) 181 # define RS600_MC_IND_CITF_ARB0 (1 << 21) 182 # define RS600_MC_IND_CITF_ARB1 (1 << 22) 183 # define RS600_MC_IND_WR_EN (1 << 23) 184 #define RS600_MC_DATA 0x74 185 #define RS600_MC_STATUS 0x0 186 # define RS600_MC_IDLE (1 << 1) 187 #define RS600_MC_FB_LOCATION 0x4 188 #define RS600_MC_FB_START_MASK 0x0000FFFF 189 #define RS600_MC_FB_START_SHIFT 0 190 #define RS600_MC_FB_TOP_MASK 0xFFFF0000 191 #define RS600_MC_FB_TOP_SHIFT 16 192 #define RS600_MC_AGP_LOCATION 0x5 193 #define RS600_MC_AGP_START_MASK 0x0000FFFF 194 #define RS600_MC_AGP_START_SHIFT 0 195 #define RS600_MC_AGP_TOP_MASK 0xFFFF0000 196 #define RS600_MC_AGP_TOP_SHIFT 16 197 #define RS600_MC_AGP_BASE 0x6 198 #define RS600_MC_AGP_BASE_2 0x7 199 #define RS600_MC_CNTL1 0x9 200 # define RS600_ENABLE_PAGE_TABLES (1 << 26) 201 #define RS600_MC_PT0_CNTL 0x100 202 # define RS600_ENABLE_PT (1 << 0) 203 # define RS600_EFFECTIVE_L2_CACHE_SIZE(x) ((x) << 15) 204 # define RS600_EFFECTIVE_L2_QUEUE_SIZE(x) ((x) << 21) 205 # define RS600_INVALIDATE_ALL_L1_TLBS (1 << 28) 206 # define RS600_INVALIDATE_L2_CACHE (1 << 29) 207 #define RS600_MC_PT0_CONTEXT0_CNTL 0x102 208 # define RS600_ENABLE_PAGE_TABLE (1 << 0) 209 # define RS600_PAGE_TABLE_TYPE_FLAT (0 << 1) 210 #define RS600_MC_PT0_SYSTEM_APERTURE_LOW_ADDR 0x112 211 #define RS600_MC_PT0_SYSTEM_APERTURE_HIGH_ADDR 0x114 212 #define RS600_MC_PT0_CONTEXT0_DEFAULT_READ_ADDR 0x11c 213 #define RS600_MC_PT0_CONTEXT0_FLAT_BASE_ADDR 0x12c 214 #define RS600_MC_PT0_CONTEXT0_FLAT_START_ADDR 0x13c 215 #define RS600_MC_PT0_CONTEXT0_FLAT_END_ADDR 0x14c 216 #define RS600_MC_PT0_CLIENT0_CNTL 0x16c 217 # define RS600_ENABLE_TRANSLATION_MODE_OVERRIDE (1 << 0) 218 # define RS600_TRANSLATION_MODE_OVERRIDE (1 << 1) 219 # define RS600_SYSTEM_ACCESS_MODE_MASK (3 << 8) 220 # define RS600_SYSTEM_ACCESS_MODE_PA_ONLY (0 << 8) 221 # define RS600_SYSTEM_ACCESS_MODE_USE_SYS_MAP (1 << 8) 222 # define RS600_SYSTEM_ACCESS_MODE_IN_SYS (2 << 8) 223 # define RS600_SYSTEM_ACCESS_MODE_NOT_IN_SYS (3 << 8) 224 # define RS600_SYSTEM_APERTURE_UNMAPPED_ACCESS_PASSTHROUGH (0 << 10) 225 # define RS600_SYSTEM_APERTURE_UNMAPPED_ACCESS_DEFAULT_PAGE (1 << 10) 226 # define RS600_EFFECTIVE_L1_CACHE_SIZE(x) ((x) << 11) 227 # define RS600_ENABLE_FRAGMENT_PROCESSING (1 << 14) 228 # define RS600_EFFECTIVE_L1_QUEUE_SIZE(x) ((x) << 15) 229 # define RS600_INVALIDATE_L1_TLB (1 << 20) 230 /* rs600/rs690/rs740 */ 231 # define RS600_BUS_MASTER_DIS (1 << 14) 232 # define RS600_MSI_REARM (1 << 20) 233 /* see RS400_MSI_REARM in AIC_CNTL for rs480 */ 234 235 236 237 #define RV515_MC_FB_LOCATION 0x01 238 #define RV515_MC_FB_START_MASK 0x0000FFFF 239 #define RV515_MC_FB_START_SHIFT 0 240 #define RV515_MC_FB_TOP_MASK 0xFFFF0000 241 #define RV515_MC_FB_TOP_SHIFT 16 242 #define RV515_MC_AGP_LOCATION 0x02 243 #define RV515_MC_AGP_START_MASK 0x0000FFFF 244 #define RV515_MC_AGP_START_SHIFT 0 245 #define RV515_MC_AGP_TOP_MASK 0xFFFF0000 246 #define RV515_MC_AGP_TOP_SHIFT 16 247 #define RV515_MC_AGP_BASE 0x03 248 #define RV515_MC_AGP_BASE_2 0x04 249 250 #define R520_MC_FB_LOCATION 0x04 251 #define R520_MC_FB_START_MASK 0x0000FFFF 252 #define R520_MC_FB_START_SHIFT 0 253 #define R520_MC_FB_TOP_MASK 0xFFFF0000 254 #define R520_MC_FB_TOP_SHIFT 16 255 #define R520_MC_AGP_LOCATION 0x05 256 #define R520_MC_AGP_START_MASK 0x0000FFFF 257 #define R520_MC_AGP_START_SHIFT 0 258 #define R520_MC_AGP_TOP_MASK 0xFFFF0000 259 #define R520_MC_AGP_TOP_SHIFT 16 260 #define R520_MC_AGP_BASE 0x06 261 #define R520_MC_AGP_BASE_2 0x07 262 263 264 #define R520_MC_STATUS 0x00 265 #define R520_MC_STATUS_IDLE (1<<1) 266 #define RV515_MC_STATUS 0x08 267 #define RV515_MC_STATUS_IDLE (1<<4) 268 #define RV515_MC_INIT_MISC_LAT_TIMER 0x09 269 #define R520_MC_IND_INDEX 0x70 270 #define R520_MC_IND_WR_EN (1 << 24) 271 #define R520_MC_IND_DATA 0x74 272 273 #define RV515_MC_CNTL 0x5 274 # define RV515_MEM_NUM_CHANNELS_MASK 0x3 275 #define R520_MC_CNTL0 0x8 276 # define R520_MEM_NUM_CHANNELS_MASK (0x3 << 24) 277 # define R520_MEM_NUM_CHANNELS_SHIFT 24 278 # define R520_MC_CHANNEL_SIZE (1 << 23) 279 280 281 #endif