Rev 3192 | Rev 5078 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3192 | Rev 3764 | ||
---|---|---|---|
Line 40... | Line 40... | ||
40 | #define R700_PM4_UCODE_SIZE 1360 |
40 | #define R700_PM4_UCODE_SIZE 1360 |
Line 41... | Line 41... | ||
41 | 41 | ||
42 | static void rv770_gpu_init(struct radeon_device *rdev); |
42 | static void rv770_gpu_init(struct radeon_device *rdev); |
43 | void rv770_fini(struct radeon_device *rdev); |
43 | void rv770_fini(struct radeon_device *rdev); |
- | 44 | static void rv770_pcie_gen2_enable(struct radeon_device *rdev); |
|
Line -... | Line 45... | ||
- | 45 | int evergreen_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk); |
|
- | 46 | ||
- | 47 | int rv770_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk) |
|
- | 48 | { |
|
- | 49 | unsigned fb_div = 0, vclk_div = 0, dclk_div = 0; |
|
- | 50 | int r; |
|
- | 51 | ||
- | 52 | /* RV740 uses evergreen uvd clk programming */ |
|
- | 53 | if (rdev->family == CHIP_RV740) |
|
- | 54 | return evergreen_set_uvd_clocks(rdev, vclk, dclk); |
|
- | 55 | ||
- | 56 | /* bypass vclk and dclk with bclk */ |
|
- | 57 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 58 | VCLK_SRC_SEL(1) | DCLK_SRC_SEL(1), |
|
- | 59 | ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); |
|
- | 60 | ||
- | 61 | if (!vclk || !dclk) { |
|
- | 62 | /* keep the Bypass mode, put PLL to sleep */ |
|
- | 63 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_SLEEP_MASK, ~UPLL_SLEEP_MASK); |
|
- | 64 | return 0; |
|
- | 65 | } |
|
- | 66 | ||
- | 67 | // r = radeon_uvd_calc_upll_dividers(rdev, vclk, dclk, 50000, 160000, |
|
- | 68 | // 43663, 0x03FFFFFE, 1, 30, ~0, |
|
- | 69 | // &fb_div, &vclk_div, &dclk_div); |
|
- | 70 | // if (r) |
|
- | 71 | return r; |
|
- | 72 | ||
- | 73 | fb_div |= 1; |
|
- | 74 | vclk_div -= 1; |
|
- | 75 | dclk_div -= 1; |
|
- | 76 | ||
- | 77 | /* set UPLL_FB_DIV to 0x50000 */ |
|
- | 78 | WREG32_P(CG_UPLL_FUNC_CNTL_3, UPLL_FB_DIV(0x50000), ~UPLL_FB_DIV_MASK); |
|
- | 79 | ||
- | 80 | /* deassert UPLL_RESET and UPLL_SLEEP */ |
|
- | 81 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~(UPLL_RESET_MASK | UPLL_SLEEP_MASK)); |
|
- | 82 | ||
- | 83 | /* assert BYPASS EN and FB_DIV[0] <- ??? why? */ |
|
- | 84 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_BYPASS_EN_MASK, ~UPLL_BYPASS_EN_MASK); |
|
- | 85 | WREG32_P(CG_UPLL_FUNC_CNTL_3, UPLL_FB_DIV(1), ~UPLL_FB_DIV(1)); |
|
- | 86 | ||
- | 87 | // r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); |
|
- | 88 | // if (r) |
|
- | 89 | return r; |
|
- | 90 | ||
- | 91 | /* assert PLL_RESET */ |
|
- | 92 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_RESET_MASK, ~UPLL_RESET_MASK); |
|
- | 93 | ||
- | 94 | /* set the required FB_DIV, REF_DIV, Post divder values */ |
|
- | 95 | WREG32_P(CG_UPLL_FUNC_CNTL, UPLL_REF_DIV(1), ~UPLL_REF_DIV_MASK); |
|
- | 96 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 97 | UPLL_SW_HILEN(vclk_div >> 1) | |
|
- | 98 | UPLL_SW_LOLEN((vclk_div >> 1) + (vclk_div & 1)) | |
|
- | 99 | UPLL_SW_HILEN2(dclk_div >> 1) | |
|
- | 100 | UPLL_SW_LOLEN2((dclk_div >> 1) + (dclk_div & 1)), |
|
- | 101 | ~UPLL_SW_MASK); |
|
- | 102 | ||
- | 103 | WREG32_P(CG_UPLL_FUNC_CNTL_3, UPLL_FB_DIV(fb_div), |
|
- | 104 | ~UPLL_FB_DIV_MASK); |
|
- | 105 | ||
- | 106 | /* give the PLL some time to settle */ |
|
- | 107 | mdelay(15); |
|
- | 108 | ||
- | 109 | /* deassert PLL_RESET */ |
|
- | 110 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_RESET_MASK); |
|
- | 111 | ||
- | 112 | mdelay(15); |
|
- | 113 | ||
- | 114 | /* deassert BYPASS EN and FB_DIV[0] <- ??? why? */ |
|
- | 115 | WREG32_P(CG_UPLL_FUNC_CNTL, 0, ~UPLL_BYPASS_EN_MASK); |
|
- | 116 | WREG32_P(CG_UPLL_FUNC_CNTL_3, 0, ~UPLL_FB_DIV(1)); |
|
- | 117 | ||
- | 118 | // r = radeon_uvd_send_upll_ctlreq(rdev, CG_UPLL_FUNC_CNTL); |
|
- | 119 | // if (r) |
|
- | 120 | return r; |
|
- | 121 | ||
- | 122 | /* switch VCLK and DCLK selection */ |
|
- | 123 | WREG32_P(CG_UPLL_FUNC_CNTL_2, |
|
- | 124 | VCLK_SRC_SEL(2) | DCLK_SRC_SEL(2), |
|
- | 125 | ~(VCLK_SRC_SEL_MASK | DCLK_SRC_SEL_MASK)); |
|
- | 126 | ||
- | 127 | mdelay(100); |
|
- | 128 | ||
- | 129 | return 0; |
|
- | 130 | } |
|
- | 131 | ||
- | 132 | static const u32 r7xx_golden_registers[] = |
|
- | 133 | { |
|
- | 134 | 0x8d00, 0xffffffff, 0x0e0e0074, |
|
- | 135 | 0x8d04, 0xffffffff, 0x013a2b34, |
|
- | 136 | 0x9508, 0xffffffff, 0x00000002, |
|
- | 137 | 0x8b20, 0xffffffff, 0, |
|
- | 138 | 0x88c4, 0xffffffff, 0x000000c2, |
|
- | 139 | 0x28350, 0xffffffff, 0, |
|
- | 140 | 0x9058, 0xffffffff, 0x0fffc40f, |
|
- | 141 | 0x240c, 0xffffffff, 0x00000380, |
|
- | 142 | 0x733c, 0xffffffff, 0x00000002, |
|
- | 143 | 0x2650, 0x00040000, 0, |
|
- | 144 | 0x20bc, 0x00040000, 0, |
|
- | 145 | 0x7300, 0xffffffff, 0x001000f0 |
|
- | 146 | }; |
|
- | 147 | ||
- | 148 | static const u32 r7xx_golden_dyn_gpr_registers[] = |
|
- | 149 | { |
|
- | 150 | 0x8db0, 0xffffffff, 0x98989898, |
|
- | 151 | 0x8db4, 0xffffffff, 0x98989898, |
|
- | 152 | 0x8db8, 0xffffffff, 0x98989898, |
|
- | 153 | 0x8dbc, 0xffffffff, 0x98989898, |
|
- | 154 | 0x8dc0, 0xffffffff, 0x98989898, |
|
- | 155 | 0x8dc4, 0xffffffff, 0x98989898, |
|
- | 156 | 0x8dc8, 0xffffffff, 0x98989898, |
|
- | 157 | 0x8dcc, 0xffffffff, 0x98989898, |
|
- | 158 | 0x88c4, 0xffffffff, 0x00000082 |
|
- | 159 | }; |
|
- | 160 | ||
- | 161 | static const u32 rv770_golden_registers[] = |
|
- | 162 | { |
|
- | 163 | 0x562c, 0xffffffff, 0, |
|
- | 164 | 0x3f90, 0xffffffff, 0, |
|
- | 165 | 0x9148, 0xffffffff, 0, |
|
- | 166 | 0x3f94, 0xffffffff, 0, |
|
- | 167 | 0x914c, 0xffffffff, 0, |
|
- | 168 | 0x9698, 0x18000000, 0x18000000 |
|
- | 169 | }; |
|
- | 170 | ||
- | 171 | static const u32 rv770ce_golden_registers[] = |
|
- | 172 | { |
|
- | 173 | 0x562c, 0xffffffff, 0, |
|
- | 174 | 0x3f90, 0xffffffff, 0x00cc0000, |
|
- | 175 | 0x9148, 0xffffffff, 0x00cc0000, |
|
- | 176 | 0x3f94, 0xffffffff, 0x00cc0000, |
|
- | 177 | 0x914c, 0xffffffff, 0x00cc0000, |
|
- | 178 | 0x9b7c, 0xffffffff, 0x00fa0000, |
|
- | 179 | 0x3f8c, 0xffffffff, 0x00fa0000, |
|
- | 180 | 0x9698, 0x18000000, 0x18000000 |
|
- | 181 | }; |
|
- | 182 | ||
- | 183 | static const u32 rv770_mgcg_init[] = |
|
- | 184 | { |
|
- | 185 | 0x8bcc, 0xffffffff, 0x130300f9, |
|
- | 186 | 0x5448, 0xffffffff, 0x100, |
|
- | 187 | 0x55e4, 0xffffffff, 0x100, |
|
- | 188 | 0x160c, 0xffffffff, 0x100, |
|
- | 189 | 0x5644, 0xffffffff, 0x100, |
|
- | 190 | 0xc164, 0xffffffff, 0x100, |
|
- | 191 | 0x8a18, 0xffffffff, 0x100, |
|
- | 192 | 0x897c, 0xffffffff, 0x8000100, |
|
- | 193 | 0x8b28, 0xffffffff, 0x3c000100, |
|
- | 194 | 0x9144, 0xffffffff, 0x100, |
|
- | 195 | 0x9a1c, 0xffffffff, 0x10000, |
|
- | 196 | 0x9a50, 0xffffffff, 0x100, |
|
- | 197 | 0x9a1c, 0xffffffff, 0x10001, |
|
- | 198 | 0x9a50, 0xffffffff, 0x100, |
|
- | 199 | 0x9a1c, 0xffffffff, 0x10002, |
|
- | 200 | 0x9a50, 0xffffffff, 0x100, |
|
- | 201 | 0x9a1c, 0xffffffff, 0x10003, |
|
- | 202 | 0x9a50, 0xffffffff, 0x100, |
|
- | 203 | 0x9a1c, 0xffffffff, 0x0, |
|
- | 204 | 0x9870, 0xffffffff, 0x100, |
|
- | 205 | 0x8d58, 0xffffffff, 0x100, |
|
- | 206 | 0x9500, 0xffffffff, 0x0, |
|
- | 207 | 0x9510, 0xffffffff, 0x100, |
|
- | 208 | 0x9500, 0xffffffff, 0x1, |
|
- | 209 | 0x9510, 0xffffffff, 0x100, |
|
- | 210 | 0x9500, 0xffffffff, 0x2, |
|
- | 211 | 0x9510, 0xffffffff, 0x100, |
|
- | 212 | 0x9500, 0xffffffff, 0x3, |
|
- | 213 | 0x9510, 0xffffffff, 0x100, |
|
- | 214 | 0x9500, 0xffffffff, 0x4, |
|
- | 215 | 0x9510, 0xffffffff, 0x100, |
|
- | 216 | 0x9500, 0xffffffff, 0x5, |
|
- | 217 | 0x9510, 0xffffffff, 0x100, |
|
- | 218 | 0x9500, 0xffffffff, 0x6, |
|
- | 219 | 0x9510, 0xffffffff, 0x100, |
|
- | 220 | 0x9500, 0xffffffff, 0x7, |
|
- | 221 | 0x9510, 0xffffffff, 0x100, |
|
- | 222 | 0x9500, 0xffffffff, 0x8, |
|
- | 223 | 0x9510, 0xffffffff, 0x100, |
|
- | 224 | 0x9500, 0xffffffff, 0x9, |
|
- | 225 | 0x9510, 0xffffffff, 0x100, |
|
- | 226 | 0x9500, 0xffffffff, 0x8000, |
|
- | 227 | 0x9490, 0xffffffff, 0x0, |
|
- | 228 | 0x949c, 0xffffffff, 0x100, |
|
- | 229 | 0x9490, 0xffffffff, 0x1, |
|
- | 230 | 0x949c, 0xffffffff, 0x100, |
|
- | 231 | 0x9490, 0xffffffff, 0x2, |
|
- | 232 | 0x949c, 0xffffffff, 0x100, |
|
- | 233 | 0x9490, 0xffffffff, 0x3, |
|
- | 234 | 0x949c, 0xffffffff, 0x100, |
|
- | 235 | 0x9490, 0xffffffff, 0x4, |
|
- | 236 | 0x949c, 0xffffffff, 0x100, |
|
- | 237 | 0x9490, 0xffffffff, 0x5, |
|
- | 238 | 0x949c, 0xffffffff, 0x100, |
|
- | 239 | 0x9490, 0xffffffff, 0x6, |
|
- | 240 | 0x949c, 0xffffffff, 0x100, |
|
- | 241 | 0x9490, 0xffffffff, 0x7, |
|
- | 242 | 0x949c, 0xffffffff, 0x100, |
|
- | 243 | 0x9490, 0xffffffff, 0x8, |
|
- | 244 | 0x949c, 0xffffffff, 0x100, |
|
- | 245 | 0x9490, 0xffffffff, 0x9, |
|
- | 246 | 0x949c, 0xffffffff, 0x100, |
|
- | 247 | 0x9490, 0xffffffff, 0x8000, |
|
- | 248 | 0x9604, 0xffffffff, 0x0, |
|
- | 249 | 0x9654, 0xffffffff, 0x100, |
|
- | 250 | 0x9604, 0xffffffff, 0x1, |
|
- | 251 | 0x9654, 0xffffffff, 0x100, |
|
- | 252 | 0x9604, 0xffffffff, 0x2, |
|
- | 253 | 0x9654, 0xffffffff, 0x100, |
|
- | 254 | 0x9604, 0xffffffff, 0x3, |
|
- | 255 | 0x9654, 0xffffffff, 0x100, |
|
- | 256 | 0x9604, 0xffffffff, 0x4, |
|
- | 257 | 0x9654, 0xffffffff, 0x100, |
|
- | 258 | 0x9604, 0xffffffff, 0x5, |
|
- | 259 | 0x9654, 0xffffffff, 0x100, |
|
- | 260 | 0x9604, 0xffffffff, 0x6, |
|
- | 261 | 0x9654, 0xffffffff, 0x100, |
|
- | 262 | 0x9604, 0xffffffff, 0x7, |
|
- | 263 | 0x9654, 0xffffffff, 0x100, |
|
- | 264 | 0x9604, 0xffffffff, 0x8, |
|
- | 265 | 0x9654, 0xffffffff, 0x100, |
|
- | 266 | 0x9604, 0xffffffff, 0x9, |
|
- | 267 | 0x9654, 0xffffffff, 0x100, |
|
- | 268 | 0x9604, 0xffffffff, 0x80000000, |
|
- | 269 | 0x9030, 0xffffffff, 0x100, |
|
- | 270 | 0x9034, 0xffffffff, 0x100, |
|
- | 271 | 0x9038, 0xffffffff, 0x100, |
|
- | 272 | 0x903c, 0xffffffff, 0x100, |
|
- | 273 | 0x9040, 0xffffffff, 0x100, |
|
- | 274 | 0xa200, 0xffffffff, 0x100, |
|
- | 275 | 0xa204, 0xffffffff, 0x100, |
|
- | 276 | 0xa208, 0xffffffff, 0x100, |
|
- | 277 | 0xa20c, 0xffffffff, 0x100, |
|
- | 278 | 0x971c, 0xffffffff, 0x100, |
|
- | 279 | 0x915c, 0xffffffff, 0x00020001, |
|
- | 280 | 0x9160, 0xffffffff, 0x00040003, |
|
- | 281 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 282 | 0x9170, 0xffffffff, 0x00080007, |
|
- | 283 | 0x9174, 0xffffffff, 0x000a0009, |
|
- | 284 | 0x9178, 0xffffffff, 0x000c000b, |
|
- | 285 | 0x917c, 0xffffffff, 0x000e000d, |
|
- | 286 | 0x9180, 0xffffffff, 0x0010000f, |
|
- | 287 | 0x918c, 0xffffffff, 0x00120011, |
|
- | 288 | 0x9190, 0xffffffff, 0x00140013, |
|
- | 289 | 0x9194, 0xffffffff, 0x00020001, |
|
- | 290 | 0x9198, 0xffffffff, 0x00040003, |
|
- | 291 | 0x919c, 0xffffffff, 0x00060005, |
|
- | 292 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 293 | 0x91ac, 0xffffffff, 0x000a0009, |
|
- | 294 | 0x91b0, 0xffffffff, 0x000c000b, |
|
- | 295 | 0x91b4, 0xffffffff, 0x000e000d, |
|
- | 296 | 0x91b8, 0xffffffff, 0x0010000f, |
|
- | 297 | 0x91c4, 0xffffffff, 0x00120011, |
|
- | 298 | 0x91c8, 0xffffffff, 0x00140013, |
|
- | 299 | 0x91cc, 0xffffffff, 0x00020001, |
|
- | 300 | 0x91d0, 0xffffffff, 0x00040003, |
|
- | 301 | 0x91d4, 0xffffffff, 0x00060005, |
|
- | 302 | 0x91e0, 0xffffffff, 0x00080007, |
|
- | 303 | 0x91e4, 0xffffffff, 0x000a0009, |
|
- | 304 | 0x91e8, 0xffffffff, 0x000c000b, |
|
- | 305 | 0x91ec, 0xffffffff, 0x00020001, |
|
- | 306 | 0x91f0, 0xffffffff, 0x00040003, |
|
- | 307 | 0x91f4, 0xffffffff, 0x00060005, |
|
- | 308 | 0x9200, 0xffffffff, 0x00080007, |
|
- | 309 | 0x9204, 0xffffffff, 0x000a0009, |
|
- | 310 | 0x9208, 0xffffffff, 0x000c000b, |
|
- | 311 | 0x920c, 0xffffffff, 0x000e000d, |
|
- | 312 | 0x9210, 0xffffffff, 0x0010000f, |
|
- | 313 | 0x921c, 0xffffffff, 0x00120011, |
|
- | 314 | 0x9220, 0xffffffff, 0x00140013, |
|
- | 315 | 0x9224, 0xffffffff, 0x00020001, |
|
- | 316 | 0x9228, 0xffffffff, 0x00040003, |
|
- | 317 | 0x922c, 0xffffffff, 0x00060005, |
|
- | 318 | 0x9238, 0xffffffff, 0x00080007, |
|
- | 319 | 0x923c, 0xffffffff, 0x000a0009, |
|
- | 320 | 0x9240, 0xffffffff, 0x000c000b, |
|
- | 321 | 0x9244, 0xffffffff, 0x000e000d, |
|
- | 322 | 0x9248, 0xffffffff, 0x0010000f, |
|
- | 323 | 0x9254, 0xffffffff, 0x00120011, |
|
- | 324 | 0x9258, 0xffffffff, 0x00140013, |
|
- | 325 | 0x925c, 0xffffffff, 0x00020001, |
|
- | 326 | 0x9260, 0xffffffff, 0x00040003, |
|
- | 327 | 0x9264, 0xffffffff, 0x00060005, |
|
- | 328 | 0x9270, 0xffffffff, 0x00080007, |
|
- | 329 | 0x9274, 0xffffffff, 0x000a0009, |
|
- | 330 | 0x9278, 0xffffffff, 0x000c000b, |
|
- | 331 | 0x927c, 0xffffffff, 0x000e000d, |
|
- | 332 | 0x9280, 0xffffffff, 0x0010000f, |
|
- | 333 | 0x928c, 0xffffffff, 0x00120011, |
|
- | 334 | 0x9290, 0xffffffff, 0x00140013, |
|
- | 335 | 0x9294, 0xffffffff, 0x00020001, |
|
- | 336 | 0x929c, 0xffffffff, 0x00040003, |
|
- | 337 | 0x92a0, 0xffffffff, 0x00060005, |
|
- | 338 | 0x92a4, 0xffffffff, 0x00080007 |
|
- | 339 | }; |
|
- | 340 | ||
- | 341 | static const u32 rv710_golden_registers[] = |
|
- | 342 | { |
|
- | 343 | 0x3f90, 0x00ff0000, 0x00fc0000, |
|
- | 344 | 0x9148, 0x00ff0000, 0x00fc0000, |
|
- | 345 | 0x3f94, 0x00ff0000, 0x00fc0000, |
|
- | 346 | 0x914c, 0x00ff0000, 0x00fc0000, |
|
- | 347 | 0xb4c, 0x00000020, 0x00000020, |
|
- | 348 | 0xa180, 0xffffffff, 0x00003f3f |
|
- | 349 | }; |
|
- | 350 | ||
- | 351 | static const u32 rv710_mgcg_init[] = |
|
- | 352 | { |
|
- | 353 | 0x8bcc, 0xffffffff, 0x13030040, |
|
- | 354 | 0x5448, 0xffffffff, 0x100, |
|
- | 355 | 0x55e4, 0xffffffff, 0x100, |
|
- | 356 | 0x160c, 0xffffffff, 0x100, |
|
- | 357 | 0x5644, 0xffffffff, 0x100, |
|
- | 358 | 0xc164, 0xffffffff, 0x100, |
|
- | 359 | 0x8a18, 0xffffffff, 0x100, |
|
- | 360 | 0x897c, 0xffffffff, 0x8000100, |
|
- | 361 | 0x8b28, 0xffffffff, 0x3c000100, |
|
- | 362 | 0x9144, 0xffffffff, 0x100, |
|
- | 363 | 0x9a1c, 0xffffffff, 0x10000, |
|
- | 364 | 0x9a50, 0xffffffff, 0x100, |
|
- | 365 | 0x9a1c, 0xffffffff, 0x0, |
|
- | 366 | 0x9870, 0xffffffff, 0x100, |
|
- | 367 | 0x8d58, 0xffffffff, 0x100, |
|
- | 368 | 0x9500, 0xffffffff, 0x0, |
|
- | 369 | 0x9510, 0xffffffff, 0x100, |
|
- | 370 | 0x9500, 0xffffffff, 0x1, |
|
- | 371 | 0x9510, 0xffffffff, 0x100, |
|
- | 372 | 0x9500, 0xffffffff, 0x8000, |
|
- | 373 | 0x9490, 0xffffffff, 0x0, |
|
- | 374 | 0x949c, 0xffffffff, 0x100, |
|
- | 375 | 0x9490, 0xffffffff, 0x1, |
|
- | 376 | 0x949c, 0xffffffff, 0x100, |
|
- | 377 | 0x9490, 0xffffffff, 0x8000, |
|
- | 378 | 0x9604, 0xffffffff, 0x0, |
|
- | 379 | 0x9654, 0xffffffff, 0x100, |
|
- | 380 | 0x9604, 0xffffffff, 0x1, |
|
- | 381 | 0x9654, 0xffffffff, 0x100, |
|
- | 382 | 0x9604, 0xffffffff, 0x80000000, |
|
- | 383 | 0x9030, 0xffffffff, 0x100, |
|
- | 384 | 0x9034, 0xffffffff, 0x100, |
|
- | 385 | 0x9038, 0xffffffff, 0x100, |
|
- | 386 | 0x903c, 0xffffffff, 0x100, |
|
- | 387 | 0x9040, 0xffffffff, 0x100, |
|
- | 388 | 0xa200, 0xffffffff, 0x100, |
|
- | 389 | 0xa204, 0xffffffff, 0x100, |
|
- | 390 | 0xa208, 0xffffffff, 0x100, |
|
- | 391 | 0xa20c, 0xffffffff, 0x100, |
|
- | 392 | 0x971c, 0xffffffff, 0x100, |
|
- | 393 | 0x915c, 0xffffffff, 0x00020001, |
|
- | 394 | 0x9174, 0xffffffff, 0x00000003, |
|
- | 395 | 0x9178, 0xffffffff, 0x00050001, |
|
- | 396 | 0x917c, 0xffffffff, 0x00030002, |
|
- | 397 | 0x918c, 0xffffffff, 0x00000004, |
|
- | 398 | 0x9190, 0xffffffff, 0x00070006, |
|
- | 399 | 0x9194, 0xffffffff, 0x00050001, |
|
- | 400 | 0x9198, 0xffffffff, 0x00030002, |
|
- | 401 | 0x91a8, 0xffffffff, 0x00000004, |
|
- | 402 | 0x91ac, 0xffffffff, 0x00070006, |
|
- | 403 | 0x91e8, 0xffffffff, 0x00000001, |
|
- | 404 | 0x9294, 0xffffffff, 0x00000001, |
|
- | 405 | 0x929c, 0xffffffff, 0x00000002, |
|
- | 406 | 0x92a0, 0xffffffff, 0x00040003, |
|
- | 407 | 0x9150, 0xffffffff, 0x4d940000 |
|
- | 408 | }; |
|
- | 409 | ||
- | 410 | static const u32 rv730_golden_registers[] = |
|
- | 411 | { |
|
- | 412 | 0x3f90, 0x00ff0000, 0x00f00000, |
|
- | 413 | 0x9148, 0x00ff0000, 0x00f00000, |
|
- | 414 | 0x3f94, 0x00ff0000, 0x00f00000, |
|
- | 415 | 0x914c, 0x00ff0000, 0x00f00000, |
|
- | 416 | 0x900c, 0xffffffff, 0x003b033f, |
|
- | 417 | 0xb4c, 0x00000020, 0x00000020, |
|
- | 418 | 0xa180, 0xffffffff, 0x00003f3f |
|
- | 419 | }; |
|
- | 420 | ||
- | 421 | static const u32 rv730_mgcg_init[] = |
|
- | 422 | { |
|
- | 423 | 0x8bcc, 0xffffffff, 0x130300f9, |
|
- | 424 | 0x5448, 0xffffffff, 0x100, |
|
- | 425 | 0x55e4, 0xffffffff, 0x100, |
|
- | 426 | 0x160c, 0xffffffff, 0x100, |
|
- | 427 | 0x5644, 0xffffffff, 0x100, |
|
- | 428 | 0xc164, 0xffffffff, 0x100, |
|
- | 429 | 0x8a18, 0xffffffff, 0x100, |
|
- | 430 | 0x897c, 0xffffffff, 0x8000100, |
|
- | 431 | 0x8b28, 0xffffffff, 0x3c000100, |
|
- | 432 | 0x9144, 0xffffffff, 0x100, |
|
- | 433 | 0x9a1c, 0xffffffff, 0x10000, |
|
- | 434 | 0x9a50, 0xffffffff, 0x100, |
|
- | 435 | 0x9a1c, 0xffffffff, 0x10001, |
|
- | 436 | 0x9a50, 0xffffffff, 0x100, |
|
- | 437 | 0x9a1c, 0xffffffff, 0x0, |
|
- | 438 | 0x9870, 0xffffffff, 0x100, |
|
- | 439 | 0x8d58, 0xffffffff, 0x100, |
|
- | 440 | 0x9500, 0xffffffff, 0x0, |
|
- | 441 | 0x9510, 0xffffffff, 0x100, |
|
- | 442 | 0x9500, 0xffffffff, 0x1, |
|
- | 443 | 0x9510, 0xffffffff, 0x100, |
|
- | 444 | 0x9500, 0xffffffff, 0x2, |
|
- | 445 | 0x9510, 0xffffffff, 0x100, |
|
- | 446 | 0x9500, 0xffffffff, 0x3, |
|
- | 447 | 0x9510, 0xffffffff, 0x100, |
|
- | 448 | 0x9500, 0xffffffff, 0x4, |
|
- | 449 | 0x9510, 0xffffffff, 0x100, |
|
- | 450 | 0x9500, 0xffffffff, 0x5, |
|
- | 451 | 0x9510, 0xffffffff, 0x100, |
|
- | 452 | 0x9500, 0xffffffff, 0x6, |
|
- | 453 | 0x9510, 0xffffffff, 0x100, |
|
- | 454 | 0x9500, 0xffffffff, 0x7, |
|
- | 455 | 0x9510, 0xffffffff, 0x100, |
|
- | 456 | 0x9500, 0xffffffff, 0x8000, |
|
- | 457 | 0x9490, 0xffffffff, 0x0, |
|
- | 458 | 0x949c, 0xffffffff, 0x100, |
|
- | 459 | 0x9490, 0xffffffff, 0x1, |
|
- | 460 | 0x949c, 0xffffffff, 0x100, |
|
- | 461 | 0x9490, 0xffffffff, 0x2, |
|
- | 462 | 0x949c, 0xffffffff, 0x100, |
|
- | 463 | 0x9490, 0xffffffff, 0x3, |
|
- | 464 | 0x949c, 0xffffffff, 0x100, |
|
- | 465 | 0x9490, 0xffffffff, 0x4, |
|
- | 466 | 0x949c, 0xffffffff, 0x100, |
|
- | 467 | 0x9490, 0xffffffff, 0x5, |
|
- | 468 | 0x949c, 0xffffffff, 0x100, |
|
- | 469 | 0x9490, 0xffffffff, 0x6, |
|
- | 470 | 0x949c, 0xffffffff, 0x100, |
|
- | 471 | 0x9490, 0xffffffff, 0x7, |
|
- | 472 | 0x949c, 0xffffffff, 0x100, |
|
- | 473 | 0x9490, 0xffffffff, 0x8000, |
|
- | 474 | 0x9604, 0xffffffff, 0x0, |
|
- | 475 | 0x9654, 0xffffffff, 0x100, |
|
- | 476 | 0x9604, 0xffffffff, 0x1, |
|
- | 477 | 0x9654, 0xffffffff, 0x100, |
|
- | 478 | 0x9604, 0xffffffff, 0x2, |
|
- | 479 | 0x9654, 0xffffffff, 0x100, |
|
- | 480 | 0x9604, 0xffffffff, 0x3, |
|
- | 481 | 0x9654, 0xffffffff, 0x100, |
|
- | 482 | 0x9604, 0xffffffff, 0x4, |
|
- | 483 | 0x9654, 0xffffffff, 0x100, |
|
- | 484 | 0x9604, 0xffffffff, 0x5, |
|
- | 485 | 0x9654, 0xffffffff, 0x100, |
|
- | 486 | 0x9604, 0xffffffff, 0x6, |
|
- | 487 | 0x9654, 0xffffffff, 0x100, |
|
- | 488 | 0x9604, 0xffffffff, 0x7, |
|
- | 489 | 0x9654, 0xffffffff, 0x100, |
|
- | 490 | 0x9604, 0xffffffff, 0x80000000, |
|
- | 491 | 0x9030, 0xffffffff, 0x100, |
|
- | 492 | 0x9034, 0xffffffff, 0x100, |
|
- | 493 | 0x9038, 0xffffffff, 0x100, |
|
- | 494 | 0x903c, 0xffffffff, 0x100, |
|
- | 495 | 0x9040, 0xffffffff, 0x100, |
|
- | 496 | 0xa200, 0xffffffff, 0x100, |
|
- | 497 | 0xa204, 0xffffffff, 0x100, |
|
- | 498 | 0xa208, 0xffffffff, 0x100, |
|
- | 499 | 0xa20c, 0xffffffff, 0x100, |
|
- | 500 | 0x971c, 0xffffffff, 0x100, |
|
- | 501 | 0x915c, 0xffffffff, 0x00020001, |
|
- | 502 | 0x916c, 0xffffffff, 0x00040003, |
|
- | 503 | 0x9170, 0xffffffff, 0x00000005, |
|
- | 504 | 0x9178, 0xffffffff, 0x00050001, |
|
- | 505 | 0x917c, 0xffffffff, 0x00030002, |
|
- | 506 | 0x918c, 0xffffffff, 0x00000004, |
|
- | 507 | 0x9190, 0xffffffff, 0x00070006, |
|
- | 508 | 0x9194, 0xffffffff, 0x00050001, |
|
- | 509 | 0x9198, 0xffffffff, 0x00030002, |
|
- | 510 | 0x91a8, 0xffffffff, 0x00000004, |
|
- | 511 | 0x91ac, 0xffffffff, 0x00070006, |
|
- | 512 | 0x91b0, 0xffffffff, 0x00050001, |
|
- | 513 | 0x91b4, 0xffffffff, 0x00030002, |
|
- | 514 | 0x91c4, 0xffffffff, 0x00000004, |
|
- | 515 | 0x91c8, 0xffffffff, 0x00070006, |
|
- | 516 | 0x91cc, 0xffffffff, 0x00050001, |
|
- | 517 | 0x91d0, 0xffffffff, 0x00030002, |
|
- | 518 | 0x91e0, 0xffffffff, 0x00000004, |
|
- | 519 | 0x91e4, 0xffffffff, 0x00070006, |
|
- | 520 | 0x91e8, 0xffffffff, 0x00000001, |
|
- | 521 | 0x91ec, 0xffffffff, 0x00050001, |
|
- | 522 | 0x91f0, 0xffffffff, 0x00030002, |
|
- | 523 | 0x9200, 0xffffffff, 0x00000004, |
|
- | 524 | 0x9204, 0xffffffff, 0x00070006, |
|
- | 525 | 0x9208, 0xffffffff, 0x00050001, |
|
- | 526 | 0x920c, 0xffffffff, 0x00030002, |
|
- | 527 | 0x921c, 0xffffffff, 0x00000004, |
|
- | 528 | 0x9220, 0xffffffff, 0x00070006, |
|
- | 529 | 0x9224, 0xffffffff, 0x00050001, |
|
- | 530 | 0x9228, 0xffffffff, 0x00030002, |
|
- | 531 | 0x9238, 0xffffffff, 0x00000004, |
|
- | 532 | 0x923c, 0xffffffff, 0x00070006, |
|
- | 533 | 0x9240, 0xffffffff, 0x00050001, |
|
- | 534 | 0x9244, 0xffffffff, 0x00030002, |
|
- | 535 | 0x9254, 0xffffffff, 0x00000004, |
|
- | 536 | 0x9258, 0xffffffff, 0x00070006, |
|
- | 537 | 0x9294, 0xffffffff, 0x00000001, |
|
- | 538 | 0x929c, 0xffffffff, 0x00000002, |
|
- | 539 | 0x92a0, 0xffffffff, 0x00040003, |
|
- | 540 | 0x92a4, 0xffffffff, 0x00000005 |
|
- | 541 | }; |
|
- | 542 | ||
- | 543 | static const u32 rv740_golden_registers[] = |
|
- | 544 | { |
|
- | 545 | 0x88c4, 0xffffffff, 0x00000082, |
|
- | 546 | 0x28a50, 0xfffffffc, 0x00000004, |
|
- | 547 | 0x2650, 0x00040000, 0, |
|
- | 548 | 0x20bc, 0x00040000, 0, |
|
- | 549 | 0x733c, 0xffffffff, 0x00000002, |
|
- | 550 | 0x7300, 0xffffffff, 0x001000f0, |
|
- | 551 | 0x3f90, 0x00ff0000, 0, |
|
- | 552 | 0x9148, 0x00ff0000, 0, |
|
- | 553 | 0x3f94, 0x00ff0000, 0, |
|
- | 554 | 0x914c, 0x00ff0000, 0, |
|
- | 555 | 0x240c, 0xffffffff, 0x00000380, |
|
- | 556 | 0x8a14, 0x00000007, 0x00000007, |
|
- | 557 | 0x8b24, 0xffffffff, 0x00ff0fff, |
|
- | 558 | 0x28a4c, 0xffffffff, 0x00004000, |
|
- | 559 | 0xa180, 0xffffffff, 0x00003f3f, |
|
- | 560 | 0x8d00, 0xffffffff, 0x0e0e003a, |
|
- | 561 | 0x8d04, 0xffffffff, 0x013a0e2a, |
|
- | 562 | 0x8c00, 0xffffffff, 0xe400000f, |
|
- | 563 | 0x8db0, 0xffffffff, 0x98989898, |
|
- | 564 | 0x8db4, 0xffffffff, 0x98989898, |
|
- | 565 | 0x8db8, 0xffffffff, 0x98989898, |
|
- | 566 | 0x8dbc, 0xffffffff, 0x98989898, |
|
- | 567 | 0x8dc0, 0xffffffff, 0x98989898, |
|
- | 568 | 0x8dc4, 0xffffffff, 0x98989898, |
|
- | 569 | 0x8dc8, 0xffffffff, 0x98989898, |
|
- | 570 | 0x8dcc, 0xffffffff, 0x98989898, |
|
- | 571 | 0x9058, 0xffffffff, 0x0fffc40f, |
|
- | 572 | 0x900c, 0xffffffff, 0x003b033f, |
|
- | 573 | 0x28350, 0xffffffff, 0, |
|
- | 574 | 0x8cf0, 0x1fffffff, 0x08e00420, |
|
- | 575 | 0x9508, 0xffffffff, 0x00000002, |
|
- | 576 | 0x88c4, 0xffffffff, 0x000000c2, |
|
- | 577 | 0x9698, 0x18000000, 0x18000000 |
|
- | 578 | }; |
|
- | 579 | ||
- | 580 | static const u32 rv740_mgcg_init[] = |
|
- | 581 | { |
|
- | 582 | 0x8bcc, 0xffffffff, 0x13030100, |
|
- | 583 | 0x5448, 0xffffffff, 0x100, |
|
- | 584 | 0x55e4, 0xffffffff, 0x100, |
|
- | 585 | 0x160c, 0xffffffff, 0x100, |
|
- | 586 | 0x5644, 0xffffffff, 0x100, |
|
- | 587 | 0xc164, 0xffffffff, 0x100, |
|
- | 588 | 0x8a18, 0xffffffff, 0x100, |
|
- | 589 | 0x897c, 0xffffffff, 0x100, |
|
- | 590 | 0x8b28, 0xffffffff, 0x100, |
|
- | 591 | 0x9144, 0xffffffff, 0x100, |
|
- | 592 | 0x9a1c, 0xffffffff, 0x10000, |
|
- | 593 | 0x9a50, 0xffffffff, 0x100, |
|
- | 594 | 0x9a1c, 0xffffffff, 0x10001, |
|
- | 595 | 0x9a50, 0xffffffff, 0x100, |
|
- | 596 | 0x9a1c, 0xffffffff, 0x10002, |
|
- | 597 | 0x9a50, 0xffffffff, 0x100, |
|
- | 598 | 0x9a1c, 0xffffffff, 0x10003, |
|
- | 599 | 0x9a50, 0xffffffff, 0x100, |
|
- | 600 | 0x9a1c, 0xffffffff, 0x0, |
|
- | 601 | 0x9870, 0xffffffff, 0x100, |
|
- | 602 | 0x8d58, 0xffffffff, 0x100, |
|
- | 603 | 0x9500, 0xffffffff, 0x0, |
|
- | 604 | 0x9510, 0xffffffff, 0x100, |
|
- | 605 | 0x9500, 0xffffffff, 0x1, |
|
- | 606 | 0x9510, 0xffffffff, 0x100, |
|
- | 607 | 0x9500, 0xffffffff, 0x2, |
|
- | 608 | 0x9510, 0xffffffff, 0x100, |
|
- | 609 | 0x9500, 0xffffffff, 0x3, |
|
- | 610 | 0x9510, 0xffffffff, 0x100, |
|
- | 611 | 0x9500, 0xffffffff, 0x4, |
|
- | 612 | 0x9510, 0xffffffff, 0x100, |
|
- | 613 | 0x9500, 0xffffffff, 0x5, |
|
- | 614 | 0x9510, 0xffffffff, 0x100, |
|
- | 615 | 0x9500, 0xffffffff, 0x6, |
|
- | 616 | 0x9510, 0xffffffff, 0x100, |
|
- | 617 | 0x9500, 0xffffffff, 0x7, |
|
- | 618 | 0x9510, 0xffffffff, 0x100, |
|
- | 619 | 0x9500, 0xffffffff, 0x8000, |
|
- | 620 | 0x9490, 0xffffffff, 0x0, |
|
- | 621 | 0x949c, 0xffffffff, 0x100, |
|
- | 622 | 0x9490, 0xffffffff, 0x1, |
|
- | 623 | 0x949c, 0xffffffff, 0x100, |
|
- | 624 | 0x9490, 0xffffffff, 0x2, |
|
- | 625 | 0x949c, 0xffffffff, 0x100, |
|
- | 626 | 0x9490, 0xffffffff, 0x3, |
|
- | 627 | 0x949c, 0xffffffff, 0x100, |
|
- | 628 | 0x9490, 0xffffffff, 0x4, |
|
- | 629 | 0x949c, 0xffffffff, 0x100, |
|
- | 630 | 0x9490, 0xffffffff, 0x5, |
|
- | 631 | 0x949c, 0xffffffff, 0x100, |
|
- | 632 | 0x9490, 0xffffffff, 0x6, |
|
- | 633 | 0x949c, 0xffffffff, 0x100, |
|
- | 634 | 0x9490, 0xffffffff, 0x7, |
|
- | 635 | 0x949c, 0xffffffff, 0x100, |
|
- | 636 | 0x9490, 0xffffffff, 0x8000, |
|
- | 637 | 0x9604, 0xffffffff, 0x0, |
|
- | 638 | 0x9654, 0xffffffff, 0x100, |
|
- | 639 | 0x9604, 0xffffffff, 0x1, |
|
- | 640 | 0x9654, 0xffffffff, 0x100, |
|
- | 641 | 0x9604, 0xffffffff, 0x2, |
|
- | 642 | 0x9654, 0xffffffff, 0x100, |
|
- | 643 | 0x9604, 0xffffffff, 0x3, |
|
- | 644 | 0x9654, 0xffffffff, 0x100, |
|
- | 645 | 0x9604, 0xffffffff, 0x4, |
|
- | 646 | 0x9654, 0xffffffff, 0x100, |
|
- | 647 | 0x9604, 0xffffffff, 0x5, |
|
- | 648 | 0x9654, 0xffffffff, 0x100, |
|
- | 649 | 0x9604, 0xffffffff, 0x6, |
|
- | 650 | 0x9654, 0xffffffff, 0x100, |
|
- | 651 | 0x9604, 0xffffffff, 0x7, |
|
- | 652 | 0x9654, 0xffffffff, 0x100, |
|
- | 653 | 0x9604, 0xffffffff, 0x80000000, |
|
- | 654 | 0x9030, 0xffffffff, 0x100, |
|
- | 655 | 0x9034, 0xffffffff, 0x100, |
|
- | 656 | 0x9038, 0xffffffff, 0x100, |
|
- | 657 | 0x903c, 0xffffffff, 0x100, |
|
- | 658 | 0x9040, 0xffffffff, 0x100, |
|
- | 659 | 0xa200, 0xffffffff, 0x100, |
|
- | 660 | 0xa204, 0xffffffff, 0x100, |
|
- | 661 | 0xa208, 0xffffffff, 0x100, |
|
- | 662 | 0xa20c, 0xffffffff, 0x100, |
|
- | 663 | 0x971c, 0xffffffff, 0x100, |
|
- | 664 | 0x915c, 0xffffffff, 0x00020001, |
|
- | 665 | 0x9160, 0xffffffff, 0x00040003, |
|
- | 666 | 0x916c, 0xffffffff, 0x00060005, |
|
- | 667 | 0x9170, 0xffffffff, 0x00080007, |
|
- | 668 | 0x9174, 0xffffffff, 0x000a0009, |
|
- | 669 | 0x9178, 0xffffffff, 0x000c000b, |
|
- | 670 | 0x917c, 0xffffffff, 0x000e000d, |
|
- | 671 | 0x9180, 0xffffffff, 0x0010000f, |
|
- | 672 | 0x918c, 0xffffffff, 0x00120011, |
|
- | 673 | 0x9190, 0xffffffff, 0x00140013, |
|
- | 674 | 0x9194, 0xffffffff, 0x00020001, |
|
- | 675 | 0x9198, 0xffffffff, 0x00040003, |
|
- | 676 | 0x919c, 0xffffffff, 0x00060005, |
|
- | 677 | 0x91a8, 0xffffffff, 0x00080007, |
|
- | 678 | 0x91ac, 0xffffffff, 0x000a0009, |
|
- | 679 | 0x91b0, 0xffffffff, 0x000c000b, |
|
- | 680 | 0x91b4, 0xffffffff, 0x000e000d, |
|
- | 681 | 0x91b8, 0xffffffff, 0x0010000f, |
|
- | 682 | 0x91c4, 0xffffffff, 0x00120011, |
|
- | 683 | 0x91c8, 0xffffffff, 0x00140013, |
|
- | 684 | 0x91cc, 0xffffffff, 0x00020001, |
|
- | 685 | 0x91d0, 0xffffffff, 0x00040003, |
|
- | 686 | 0x91d4, 0xffffffff, 0x00060005, |
|
- | 687 | 0x91e0, 0xffffffff, 0x00080007, |
|
- | 688 | 0x91e4, 0xffffffff, 0x000a0009, |
|
- | 689 | 0x91e8, 0xffffffff, 0x000c000b, |
|
- | 690 | 0x91ec, 0xffffffff, 0x00020001, |
|
- | 691 | 0x91f0, 0xffffffff, 0x00040003, |
|
- | 692 | 0x91f4, 0xffffffff, 0x00060005, |
|
- | 693 | 0x9200, 0xffffffff, 0x00080007, |
|
- | 694 | 0x9204, 0xffffffff, 0x000a0009, |
|
- | 695 | 0x9208, 0xffffffff, 0x000c000b, |
|
- | 696 | 0x920c, 0xffffffff, 0x000e000d, |
|
- | 697 | 0x9210, 0xffffffff, 0x0010000f, |
|
- | 698 | 0x921c, 0xffffffff, 0x00120011, |
|
- | 699 | 0x9220, 0xffffffff, 0x00140013, |
|
- | 700 | 0x9224, 0xffffffff, 0x00020001, |
|
- | 701 | 0x9228, 0xffffffff, 0x00040003, |
|
- | 702 | 0x922c, 0xffffffff, 0x00060005, |
|
- | 703 | 0x9238, 0xffffffff, 0x00080007, |
|
- | 704 | 0x923c, 0xffffffff, 0x000a0009, |
|
- | 705 | 0x9240, 0xffffffff, 0x000c000b, |
|
- | 706 | 0x9244, 0xffffffff, 0x000e000d, |
|
- | 707 | 0x9248, 0xffffffff, 0x0010000f, |
|
- | 708 | 0x9254, 0xffffffff, 0x00120011, |
|
- | 709 | 0x9258, 0xffffffff, 0x00140013, |
|
- | 710 | 0x9294, 0xffffffff, 0x00020001, |
|
- | 711 | 0x929c, 0xffffffff, 0x00040003, |
|
- | 712 | 0x92a0, 0xffffffff, 0x00060005, |
|
- | 713 | 0x92a4, 0xffffffff, 0x00080007 |
|
- | 714 | }; |
|
- | 715 | ||
- | 716 | static void rv770_init_golden_registers(struct radeon_device *rdev) |
|
- | 717 | { |
|
- | 718 | switch (rdev->family) { |
|
- | 719 | case CHIP_RV770: |
|
- | 720 | radeon_program_register_sequence(rdev, |
|
- | 721 | r7xx_golden_registers, |
|
- | 722 | (const u32)ARRAY_SIZE(r7xx_golden_registers)); |
|
- | 723 | radeon_program_register_sequence(rdev, |
|
- | 724 | r7xx_golden_dyn_gpr_registers, |
|
- | 725 | (const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers)); |
|
- | 726 | if (rdev->pdev->device == 0x994e) |
|
- | 727 | radeon_program_register_sequence(rdev, |
|
- | 728 | rv770ce_golden_registers, |
|
- | 729 | (const u32)ARRAY_SIZE(rv770ce_golden_registers)); |
|
- | 730 | else |
|
- | 731 | radeon_program_register_sequence(rdev, |
|
- | 732 | rv770_golden_registers, |
|
- | 733 | (const u32)ARRAY_SIZE(rv770_golden_registers)); |
|
- | 734 | radeon_program_register_sequence(rdev, |
|
- | 735 | rv770_mgcg_init, |
|
- | 736 | (const u32)ARRAY_SIZE(rv770_mgcg_init)); |
|
- | 737 | break; |
|
- | 738 | case CHIP_RV730: |
|
- | 739 | radeon_program_register_sequence(rdev, |
|
- | 740 | r7xx_golden_registers, |
|
- | 741 | (const u32)ARRAY_SIZE(r7xx_golden_registers)); |
|
- | 742 | radeon_program_register_sequence(rdev, |
|
- | 743 | r7xx_golden_dyn_gpr_registers, |
|
- | 744 | (const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers)); |
|
- | 745 | radeon_program_register_sequence(rdev, |
|
- | 746 | rv730_golden_registers, |
|
- | 747 | (const u32)ARRAY_SIZE(rv770_golden_registers)); |
|
- | 748 | radeon_program_register_sequence(rdev, |
|
- | 749 | rv730_mgcg_init, |
|
- | 750 | (const u32)ARRAY_SIZE(rv770_mgcg_init)); |
|
- | 751 | break; |
|
- | 752 | case CHIP_RV710: |
|
- | 753 | radeon_program_register_sequence(rdev, |
|
- | 754 | r7xx_golden_registers, |
|
- | 755 | (const u32)ARRAY_SIZE(r7xx_golden_registers)); |
|
- | 756 | radeon_program_register_sequence(rdev, |
|
- | 757 | r7xx_golden_dyn_gpr_registers, |
|
- | 758 | (const u32)ARRAY_SIZE(r7xx_golden_dyn_gpr_registers)); |
|
- | 759 | radeon_program_register_sequence(rdev, |
|
- | 760 | rv710_golden_registers, |
|
- | 761 | (const u32)ARRAY_SIZE(rv770_golden_registers)); |
|
- | 762 | radeon_program_register_sequence(rdev, |
|
- | 763 | rv710_mgcg_init, |
|
- | 764 | (const u32)ARRAY_SIZE(rv770_mgcg_init)); |
|
- | 765 | break; |
|
- | 766 | case CHIP_RV740: |
|
- | 767 | radeon_program_register_sequence(rdev, |
|
- | 768 | rv740_golden_registers, |
|
- | 769 | (const u32)ARRAY_SIZE(rv770_golden_registers)); |
|
- | 770 | radeon_program_register_sequence(rdev, |
|
- | 771 | rv740_mgcg_init, |
|
- | 772 | (const u32)ARRAY_SIZE(rv770_mgcg_init)); |
|
- | 773 | break; |
|
- | 774 | default: |
|
- | 775 | break; |
|
- | 776 | } |
|
- | 777 | } |
|
- | 778 | ||
- | 779 | #define PCIE_BUS_CLK 10000 |
|
- | 780 | #define TCLK (PCIE_BUS_CLK / 10) |
|
- | 781 | ||
- | 782 | /** |
|
- | 783 | * rv770_get_xclk - get the xclk |
|
- | 784 | * |
|
- | 785 | * @rdev: radeon_device pointer |
|
- | 786 | * |
|
- | 787 | * Returns the reference clock used by the gfx engine |
|
- | 788 | * (r7xx-cayman). |
|
- | 789 | */ |
|
- | 790 | u32 rv770_get_xclk(struct radeon_device *rdev) |
|
- | 791 | { |
|
- | 792 | u32 reference_clock = rdev->clock.spll.reference_freq; |
|
- | 793 | u32 tmp = RREG32(CG_CLKPIN_CNTL); |
|
- | 794 | ||
- | 795 | if (tmp & MUX_TCLK_TO_XCLK) |
|
- | 796 | return TCLK; |
|
- | 797 | ||
- | 798 | if (tmp & XTALIN_DIVIDE) |
|
- | 799 | return reference_clock / 4; |
|
- | 800 | ||
- | 801 | return reference_clock; |
|
- | 802 | } |
|
- | 803 | ||
- | 804 | u32 rv770_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base) |
|
- | 805 | { |
|
- | 806 | struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; |
|
- | 807 | u32 tmp = RREG32(AVIVO_D1GRPH_UPDATE + radeon_crtc->crtc_offset); |
|
- | 808 | int i; |
|
- | 809 | ||
- | 810 | /* Lock the graphics update lock */ |
|
- | 811 | tmp |= AVIVO_D1GRPH_UPDATE_LOCK; |
|
- | 812 | WREG32(AVIVO_D1GRPH_UPDATE + radeon_crtc->crtc_offset, tmp); |
|
- | 813 | ||
- | 814 | /* update the scanout addresses */ |
|
- | 815 | if (radeon_crtc->crtc_id) { |
|
- | 816 | WREG32(D2GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, upper_32_bits(crtc_base)); |
|
- | 817 | WREG32(D2GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, upper_32_bits(crtc_base)); |
|
- | 818 | } else { |
|
- | 819 | WREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS_HIGH, upper_32_bits(crtc_base)); |
|
- | 820 | WREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS_HIGH, upper_32_bits(crtc_base)); |
|
- | 821 | } |
|
- | 822 | WREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset, |
|
- | 823 | (u32)crtc_base); |
|
- | 824 | WREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS + radeon_crtc->crtc_offset, |
|
- | 825 | (u32)crtc_base); |
|
- | 826 | ||
- | 827 | /* Wait for update_pending to go high. */ |
|
- | 828 | for (i = 0; i < rdev->usec_timeout; i++) { |
|
- | 829 | if (RREG32(AVIVO_D1GRPH_UPDATE + radeon_crtc->crtc_offset) & AVIVO_D1GRPH_SURFACE_UPDATE_PENDING) |
|
- | 830 | break; |
|
- | 831 | udelay(1); |
|
- | 832 | } |
|
- | 833 | DRM_DEBUG("Update pending now high. Unlocking vupdate_lock.\n"); |
|
- | 834 | ||
- | 835 | /* Unlock the lock, so double-buffering can take place inside vblank */ |
|
- | 836 | tmp &= ~AVIVO_D1GRPH_UPDATE_LOCK; |
|
- | 837 | WREG32(AVIVO_D1GRPH_UPDATE + radeon_crtc->crtc_offset, tmp); |
|
- | 838 | ||
- | 839 | /* Return current update_pending status: */ |
|
- | 840 | return RREG32(AVIVO_D1GRPH_UPDATE + radeon_crtc->crtc_offset) & AVIVO_D1GRPH_SURFACE_UPDATE_PENDING; |
|
- | 841 | } |
|
- | 842 | ||
- | 843 | /* get temperature in millidegrees */ |
|
- | 844 | int rv770_get_temp(struct radeon_device *rdev) |
|
- | 845 | { |
|
- | 846 | u32 temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >> |
|
- | 847 | ASIC_T_SHIFT; |
|
- | 848 | int actual_temp; |
|
- | 849 | ||
- | 850 | if (temp & 0x400) |
|
- | 851 | actual_temp = -256; |
|
- | 852 | else if (temp & 0x200) |
|
- | 853 | actual_temp = 255; |
|
- | 854 | else if (temp & 0x100) { |
|
- | 855 | actual_temp = temp & 0x1ff; |
|
- | 856 | actual_temp |= ~0x1ff; |
|
- | 857 | } else |
|
- | 858 | actual_temp = temp & 0xff; |
|
- | 859 | ||
- | 860 | return (actual_temp * 1000) / 2; |
|
- | 861 | } |
|
- | 862 | ||
- | 863 | void rv770_pm_misc(struct radeon_device *rdev) |
|
- | 864 | { |
|
- | 865 | int req_ps_idx = rdev->pm.requested_power_state_index; |
|
- | 866 | int req_cm_idx = rdev->pm.requested_clock_mode_index; |
|
- | 867 | struct radeon_power_state *ps = &rdev->pm.power_state[req_ps_idx]; |
|
- | 868 | struct radeon_voltage *voltage = &ps->clock_info[req_cm_idx].voltage; |
|
- | 869 | ||
- | 870 | if ((voltage->type == VOLTAGE_SW) && voltage->voltage) { |
|
- | 871 | /* 0xff01 is a flag rather then an actual voltage */ |
|
- | 872 | if (voltage->voltage == 0xff01) |
|
- | 873 | return; |
|
- | 874 | if (voltage->voltage != rdev->pm.current_vddc) { |
|
- | 875 | radeon_atom_set_voltage(rdev, voltage->voltage, SET_VOLTAGE_TYPE_ASIC_VDDC); |
|
- | 876 | rdev->pm.current_vddc = voltage->voltage; |
|
- | 877 | DRM_DEBUG("Setting: v: %d\n", voltage->voltage); |
|
- | 878 | } |
|
Line 44... | Line 879... | ||
44 | static void rv770_pcie_gen2_enable(struct radeon_device *rdev); |
879 | } |
45 | 880 | } |
|
46 | 881 | ||
47 | /* |
882 | /* |
Line 500... | Line 1335... | ||
500 | WREG32(GB_TILING_CONFIG, gb_tiling_config); |
1335 | WREG32(GB_TILING_CONFIG, gb_tiling_config); |
501 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
1336 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
502 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
1337 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
503 | WREG32(DMA_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
1338 | WREG32(DMA_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
504 | WREG32(DMA_TILING_CONFIG2, (gb_tiling_config & 0xffff)); |
1339 | WREG32(DMA_TILING_CONFIG2, (gb_tiling_config & 0xffff)); |
- | 1340 | if (rdev->family == CHIP_RV730) { |
|
- | 1341 | WREG32(UVD_UDEC_DB_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
|
- | 1342 | WREG32(UVD_UDEC_DBW_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
|
- | 1343 | WREG32(UVD_UDEC_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
|
- | 1344 | } |
|
Line 505... | Line 1345... | ||
505 | 1345 | ||
506 | WREG32(CGTS_SYS_TCC_DISABLE, 0); |
1346 | WREG32(CGTS_SYS_TCC_DISABLE, 0); |
507 | WREG32(CGTS_TCC_DISABLE, 0); |
1347 | WREG32(CGTS_TCC_DISABLE, 0); |
508 | WREG32(CGTS_USER_SYS_TCC_DISABLE, 0); |
1348 | WREG32(CGTS_USER_SYS_TCC_DISABLE, 0); |
Line 729... | Line 1569... | ||
729 | mc->real_vram_size = 0xE0000000; |
1569 | mc->real_vram_size = 0xE0000000; |
730 | mc->mc_vram_size = 0xE0000000; |
1570 | mc->mc_vram_size = 0xE0000000; |
731 | } |
1571 | } |
732 | if (rdev->flags & RADEON_IS_AGP) { |
1572 | if (rdev->flags & RADEON_IS_AGP) { |
733 | size_bf = mc->gtt_start; |
1573 | size_bf = mc->gtt_start; |
734 | size_af = 0xFFFFFFFF - mc->gtt_end; |
1574 | size_af = mc->mc_mask - mc->gtt_end; |
735 | if (size_bf > size_af) { |
1575 | if (size_bf > size_af) { |
736 | if (mc->mc_vram_size > size_bf) { |
1576 | if (mc->mc_vram_size > size_bf) { |
737 | dev_warn(rdev->dev, "limiting VRAM\n"); |
1577 | dev_warn(rdev->dev, "limiting VRAM\n"); |
738 | mc->real_vram_size = size_bf; |
1578 | mc->real_vram_size = size_bf; |
739 | mc->mc_vram_size = size_bf; |
1579 | mc->mc_vram_size = size_bf; |
Line 801... | Line 1641... | ||
801 | radeon_update_bandwidth_info(rdev); |
1641 | radeon_update_bandwidth_info(rdev); |
Line 802... | Line 1642... | ||
802 | 1642 | ||
803 | return 0; |
1643 | return 0; |
Line -... | Line 1644... | ||
- | 1644 | } |
|
- | 1645 | ||
- | 1646 | /** |
|
- | 1647 | * rv770_copy_dma - copy pages using the DMA engine |
|
- | 1648 | * |
|
- | 1649 | * @rdev: radeon_device pointer |
|
- | 1650 | * @src_offset: src GPU address |
|
- | 1651 | * @dst_offset: dst GPU address |
|
- | 1652 | * @num_gpu_pages: number of GPU pages to xfer |
|
- | 1653 | * @fence: radeon fence object |
|
- | 1654 | * |
|
- | 1655 | * Copy GPU paging using the DMA engine (r7xx). |
|
- | 1656 | * Used by the radeon ttm implementation to move pages if |
|
- | 1657 | * registered as the asic copy callback. |
|
- | 1658 | */ |
|
- | 1659 | int rv770_copy_dma(struct radeon_device *rdev, |
|
- | 1660 | uint64_t src_offset, uint64_t dst_offset, |
|
- | 1661 | unsigned num_gpu_pages, |
|
- | 1662 | struct radeon_fence **fence) |
|
- | 1663 | { |
|
- | 1664 | struct radeon_semaphore *sem = NULL; |
|
- | 1665 | int ring_index = rdev->asic->copy.dma_ring_index; |
|
- | 1666 | struct radeon_ring *ring = &rdev->ring[ring_index]; |
|
- | 1667 | u32 size_in_dw, cur_size_in_dw; |
|
- | 1668 | int i, num_loops; |
|
- | 1669 | int r = 0; |
|
- | 1670 | ||
- | 1671 | r = radeon_semaphore_create(rdev, &sem); |
|
- | 1672 | if (r) { |
|
- | 1673 | DRM_ERROR("radeon: moving bo (%d).\n", r); |
|
- | 1674 | return r; |
|
- | 1675 | } |
|
- | 1676 | ||
- | 1677 | size_in_dw = (num_gpu_pages << RADEON_GPU_PAGE_SHIFT) / 4; |
|
- | 1678 | num_loops = DIV_ROUND_UP(size_in_dw, 0xFFFF); |
|
- | 1679 | r = radeon_ring_lock(rdev, ring, num_loops * 5 + 8); |
|
- | 1680 | if (r) { |
|
- | 1681 | DRM_ERROR("radeon: moving bo (%d).\n", r); |
|
- | 1682 | radeon_semaphore_free(rdev, &sem, NULL); |
|
- | 1683 | return r; |
|
- | 1684 | } |
|
- | 1685 | ||
- | 1686 | if (radeon_fence_need_sync(*fence, ring->idx)) { |
|
- | 1687 | radeon_semaphore_sync_rings(rdev, sem, (*fence)->ring, |
|
- | 1688 | ring->idx); |
|
- | 1689 | radeon_fence_note_sync(*fence, ring->idx); |
|
- | 1690 | } else { |
|
- | 1691 | radeon_semaphore_free(rdev, &sem, NULL); |
|
- | 1692 | } |
|
- | 1693 | ||
- | 1694 | for (i = 0; i < num_loops; i++) { |
|
- | 1695 | cur_size_in_dw = size_in_dw; |
|
- | 1696 | if (cur_size_in_dw > 0xFFFF) |
|
- | 1697 | cur_size_in_dw = 0xFFFF; |
|
- | 1698 | size_in_dw -= cur_size_in_dw; |
|
- | 1699 | radeon_ring_write(ring, DMA_PACKET(DMA_PACKET_COPY, 0, 0, cur_size_in_dw)); |
|
- | 1700 | radeon_ring_write(ring, dst_offset & 0xfffffffc); |
|
- | 1701 | radeon_ring_write(ring, src_offset & 0xfffffffc); |
|
- | 1702 | radeon_ring_write(ring, upper_32_bits(dst_offset) & 0xff); |
|
- | 1703 | radeon_ring_write(ring, upper_32_bits(src_offset) & 0xff); |
|
- | 1704 | src_offset += cur_size_in_dw * 4; |
|
- | 1705 | dst_offset += cur_size_in_dw * 4; |
|
- | 1706 | } |
|
- | 1707 | ||
- | 1708 | r = radeon_fence_emit(rdev, fence, ring->idx); |
|
- | 1709 | if (r) { |
|
- | 1710 | radeon_ring_unlock_undo(rdev, ring); |
|
- | 1711 | return r; |
|
- | 1712 | } |
|
- | 1713 | ||
- | 1714 | radeon_ring_unlock_commit(rdev, ring); |
|
- | 1715 | radeon_semaphore_free(rdev, &sem, *fence); |
|
- | 1716 | ||
- | 1717 | return r; |
|
804 | } |
1718 | } |
805 | 1719 | ||
806 | static int rv770_startup(struct radeon_device *rdev) |
1720 | static int rv770_startup(struct radeon_device *rdev) |
807 | { |
1721 | { |
Line 838... | Line 1752... | ||
838 | r600_blit_fini(rdev); |
1752 | r600_blit_fini(rdev); |
839 | rdev->asic->copy.copy = NULL; |
1753 | rdev->asic->copy.copy = NULL; |
840 | dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); |
1754 | dev_warn(rdev->dev, "failed blitter (%d) falling back to memcpy\n", r); |
841 | } |
1755 | } |
Line 842... | Line -... | ||
842 | - | ||
843 | // r = r600_video_init(rdev); |
- | |
844 | // if (r) { |
- | |
845 | // r600_video_fini(rdev); |
- | |
846 | // rdev->asic->copy = NULL; |
- | |
847 | // dev_warn(rdev->dev, "failed video blitter (%d) falling back to memcpy\n", r); |
- | |
848 | // } |
- | |
849 | 1756 | ||
850 | /* allocate wb buffer */ |
1757 | /* allocate wb buffer */ |
851 | r = radeon_wb_init(rdev); |
1758 | r = radeon_wb_init(rdev); |
852 | if (r) |
1759 | if (r) |
Line 862... | Line 1769... | ||
862 | if (r) { |
1769 | if (r) { |
863 | dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r); |
1770 | dev_err(rdev->dev, "failed initializing DMA fences (%d).\n", r); |
864 | return r; |
1771 | return r; |
865 | } |
1772 | } |
Line -... | Line 1773... | ||
- | 1773 | ||
- | 1774 | // r = rv770_uvd_resume(rdev); |
|
- | 1775 | // if (!r) { |
|
- | 1776 | // r = radeon_fence_driver_start_ring(rdev, |
|
- | 1777 | // R600_RING_TYPE_UVD_INDEX); |
|
- | 1778 | // if (r) |
|
- | 1779 | // dev_err(rdev->dev, "UVD fences init error (%d).\n", r); |
|
- | 1780 | // } |
|
- | 1781 | ||
- | 1782 | // if (r) |
|
- | 1783 | // rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_size = 0; |
|
866 | 1784 | ||
- | 1785 | /* Enable IRQ */ |
|
- | 1786 | if (!rdev->irq.installed) { |
|
- | 1787 | r = radeon_irq_kms_init(rdev); |
|
- | 1788 | if (r) |
|
- | 1789 | return r; |
|
- | 1790 | } |
|
867 | /* Enable IRQ */ |
1791 | |
868 | r = r600_irq_init(rdev); |
1792 | r = r600_irq_init(rdev); |
869 | if (r) { |
1793 | if (r) { |
870 | DRM_ERROR("radeon: IH init failed (%d).\n", r); |
1794 | DRM_ERROR("radeon: IH init failed (%d).\n", r); |
871 | // radeon_irq_kms_fini(rdev); |
1795 | // radeon_irq_kms_fini(rdev); |
Line 896... | Line 1820... | ||
896 | 1820 | ||
897 | r = r600_dma_resume(rdev); |
1821 | r = r600_dma_resume(rdev); |
898 | if (r) |
1822 | if (r) |
Line -... | Line 1823... | ||
- | 1823 | return r; |
|
- | 1824 | ||
- | 1825 | // ring = &rdev->ring[R600_RING_TYPE_UVD_INDEX]; |
|
- | 1826 | // if (ring->ring_size) { |
|
- | 1827 | // r = radeon_ring_init(rdev, ring, ring->ring_size, |
|
- | 1828 | // R600_WB_UVD_RPTR_OFFSET, |
|
- | 1829 | // UVD_RBC_RB_RPTR, UVD_RBC_RB_WPTR, |
|
- | 1830 | // 0, 0xfffff, RADEON_CP_PACKET2); |
|
- | 1831 | // if (!r) |
|
- | 1832 | // r = r600_uvd_init(rdev); |
|
- | 1833 | ||
- | 1834 | // if (r) |
|
- | 1835 | // DRM_ERROR("radeon: failed initializing UVD (%d).\n", r); |
|
899 | return r; |
1836 | // } |
900 | 1837 | ||
901 | r = radeon_ib_pool_init(rdev); |
1838 | r = radeon_ib_pool_init(rdev); |
902 | if (r) { |
1839 | if (r) { |
903 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
1840 | dev_err(rdev->dev, "IB initialization failed (%d).\n", r); |
Line 944... | Line 1881... | ||
944 | return -EINVAL; |
1881 | return -EINVAL; |
945 | } |
1882 | } |
946 | DRM_INFO("GPU not posted. posting now...\n"); |
1883 | DRM_INFO("GPU not posted. posting now...\n"); |
947 | atom_asic_init(rdev->mode_info.atom_context); |
1884 | atom_asic_init(rdev->mode_info.atom_context); |
948 | } |
1885 | } |
- | 1886 | /* init golden registers */ |
|
- | 1887 | rv770_init_golden_registers(rdev); |
|
949 | /* Initialize scratch registers */ |
1888 | /* Initialize scratch registers */ |
950 | r600_scratch_init(rdev); |
1889 | r600_scratch_init(rdev); |
951 | /* Initialize surface registers */ |
1890 | /* Initialize surface registers */ |
952 | radeon_surface_init(rdev); |
1891 | radeon_surface_init(rdev); |
953 | /* Initialize clocks */ |
1892 | /* Initialize clocks */ |
Line 968... | Line 1907... | ||
968 | /* Memory manager */ |
1907 | /* Memory manager */ |
969 | r = radeon_bo_init(rdev); |
1908 | r = radeon_bo_init(rdev); |
970 | if (r) |
1909 | if (r) |
971 | return r; |
1910 | return r; |
Line 972... | Line -... | ||
972 | - | ||
973 | r = radeon_irq_kms_init(rdev); |
- | |
974 | if (r) |
- | |
975 | return r; |
- | |
976 | 1911 | ||
977 | rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; |
1912 | rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL; |
Line 978... | Line 1913... | ||
978 | r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); |
1913 | r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024); |
979 | 1914 | ||
Line -... | Line 1915... | ||
- | 1915 | rdev->ring[R600_RING_TYPE_DMA_INDEX].ring_obj = NULL; |
|
- | 1916 | r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX], 64 * 1024); |
|
- | 1917 | ||
- | 1918 | // r = radeon_uvd_init(rdev); |
|
- | 1919 | // if (!r) { |
|
- | 1920 | // rdev->ring[R600_RING_TYPE_UVD_INDEX].ring_obj = NULL; |
|
- | 1921 | // r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_UVD_INDEX], |
|
980 | rdev->ring[R600_RING_TYPE_DMA_INDEX].ring_obj = NULL; |
1922 | // 4096); |
981 | r600_ring_init(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX], 64 * 1024); |
1923 | // } |
Line 982... | Line 1924... | ||
982 | 1924 | ||
983 | rdev->ih.ring_obj = NULL; |
1925 | rdev->ih.ring_obj = NULL; |
Line 1000... | Line 1942... | ||
1000 | 1942 | ||
1001 | static void rv770_pcie_gen2_enable(struct radeon_device *rdev) |
1943 | static void rv770_pcie_gen2_enable(struct radeon_device *rdev) |
1002 | { |
1944 | { |
1003 | u32 link_width_cntl, lanes, speed_cntl, tmp; |
1945 | u32 link_width_cntl, lanes, speed_cntl, tmp; |
1004 | u16 link_cntl2; |
- | |
1005 | u32 mask; |
- | |
Line 1006... | Line 1946... | ||
1006 | int ret; |
1946 | u16 link_cntl2; |
1007 | 1947 | ||
Line 1008... | Line 1948... | ||
1008 | if (radeon_pcie_gen2 == 0) |
1948 | if (radeon_pcie_gen2 == 0) |
Line 1016... | Line 1956... | ||
1016 | 1956 | ||
1017 | /* x2 cards have a special sequence */ |
1957 | /* x2 cards have a special sequence */ |
1018 | if (ASIC_IS_X2(rdev)) |
1958 | if (ASIC_IS_X2(rdev)) |
Line 1019... | Line 1959... | ||
1019 | return; |
1959 | return; |
1020 | - | ||
1021 | ret = drm_pcie_get_speed_cap_mask(rdev->ddev, &mask); |
- | |
1022 | if (ret != 0) |
- | |
1023 | return; |
1960 | |
1024 | 1961 | if ((rdev->pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) && |
|
Line 1025... | Line 1962... | ||
1025 | if (!(mask & DRM_PCIE_SPEED_50)) |
1962 | (rdev->pdev->bus->max_bus_speed != PCIE_SPEED_8_0GT)) |
Line 1026... | Line 1963... | ||
1026 | return; |
1963 | return; |
1027 | 1964 | ||
1028 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); |
1965 | DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n"); |
1029 | 1966 | ||
1030 | /* advertise upconfig capability */ |
1967 | /* advertise upconfig capability */ |
1031 | link_width_cntl = RREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL); |
1968 | link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); |
1032 | link_width_cntl &= ~LC_UPCONFIGURE_DIS; |
1969 | link_width_cntl &= ~LC_UPCONFIGURE_DIS; |
1033 | WREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
1970 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
1034 | link_width_cntl = RREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL); |
1971 | link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); |
1035 | if (link_width_cntl & LC_RENEGOTIATION_SUPPORT) { |
1972 | if (link_width_cntl & LC_RENEGOTIATION_SUPPORT) { |
1036 | lanes = (link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT; |
1973 | lanes = (link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT; |
1037 | link_width_cntl &= ~(LC_LINK_WIDTH_MASK | |
1974 | link_width_cntl &= ~(LC_LINK_WIDTH_MASK | |
1038 | LC_RECONFIG_ARC_MISSING_ESCAPE); |
1975 | LC_RECONFIG_ARC_MISSING_ESCAPE); |
1039 | link_width_cntl |= lanes | LC_RECONFIG_NOW | |
1976 | link_width_cntl |= lanes | LC_RECONFIG_NOW | |
1040 | LC_RENEGOTIATE_EN | LC_UPCONFIGURE_SUPPORT; |
1977 | LC_RENEGOTIATE_EN | LC_UPCONFIGURE_SUPPORT; |
1041 | WREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
1978 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
Line 1042... | Line 1979... | ||
1042 | } else { |
1979 | } else { |
1043 | link_width_cntl |= LC_UPCONFIGURE_DIS; |
1980 | link_width_cntl |= LC_UPCONFIGURE_DIS; |
1044 | WREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
1981 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); |
Line 1045... | Line 1982... | ||
1045 | } |
1982 | } |
1046 | 1983 | ||
Line 1055... | Line 1992... | ||
1055 | link_cntl2 &= ~TARGET_LINK_SPEED_MASK; |
1992 | link_cntl2 &= ~TARGET_LINK_SPEED_MASK; |
1056 | link_cntl2 |= 0x2; |
1993 | link_cntl2 |= 0x2; |
1057 | WREG16(0x4088, link_cntl2); |
1994 | WREG16(0x4088, link_cntl2); |
1058 | WREG32(MM_CFGREGS_CNTL, 0); |
1995 | WREG32(MM_CFGREGS_CNTL, 0); |
Line 1059... | Line 1996... | ||
1059 | 1996 | ||
1060 | speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL); |
1997 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
1061 | speed_cntl &= ~LC_TARGET_LINK_SPEED_OVERRIDE_EN; |
1998 | speed_cntl &= ~LC_TARGET_LINK_SPEED_OVERRIDE_EN; |
Line 1062... | Line 1999... | ||
1062 | WREG32_PCIE_P(PCIE_LC_SPEED_CNTL, speed_cntl); |
1999 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
1063 | 2000 | ||
1064 | speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL); |
2001 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
Line 1065... | Line 2002... | ||
1065 | speed_cntl |= LC_CLR_FAILED_SPD_CHANGE_CNT; |
2002 | speed_cntl |= LC_CLR_FAILED_SPD_CHANGE_CNT; |
1066 | WREG32_PCIE_P(PCIE_LC_SPEED_CNTL, speed_cntl); |
2003 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
1067 | 2004 | ||
Line 1068... | Line 2005... | ||
1068 | speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL); |
2005 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
1069 | speed_cntl &= ~LC_CLR_FAILED_SPD_CHANGE_CNT; |
2006 | speed_cntl &= ~LC_CLR_FAILED_SPD_CHANGE_CNT; |
1070 | WREG32_PCIE_P(PCIE_LC_SPEED_CNTL, speed_cntl); |
2007 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
Line 1071... | Line 2008... | ||
1071 | 2008 | ||
1072 | speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL); |
2009 | speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); |
1073 | speed_cntl |= LC_GEN2_EN_STRAP; |
2010 | speed_cntl |= LC_GEN2_EN_STRAP; |
1074 | WREG32_PCIE_P(PCIE_LC_SPEED_CNTL, speed_cntl); |
2011 | WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); |
1075 | 2012 | ||
1076 | } else { |
2013 | } else { |
1077 | link_width_cntl = RREG32_PCIE_P(PCIE_LC_LINK_WIDTH_CNTL); |
2014 | link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); |
1078 | /* XXX: only disable it if gen1 bridge vendor == 0x111d or 0x1106 */ |
2015 | /* XXX: only disable it if gen1 bridge vendor == 0x111d or 0x1106 */ |
1079 | if (1) |
2016 | if (1) |
1080 | link_width_cntl |= LC_UPCONFIGURE_DIS; |
2017 | link_width_cntl |= LC_UPCONFIGURE_DIS; |