diff options
author | Jerome Glisse <jglisse@redhat.com> | 2009-10-01 03:39:24 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-10-01 18:51:50 -0400 |
commit | 3bc6853593bd4fba357dc252b3cf60cd86a1d2ec (patch) | |
tree | f60509478804b0087bef653dc6c10578deeb40e9 /drivers | |
parent | d4550907157d8b3d5286157c15f1200c44842269 (diff) |
drm/radeon/kms: Convert RS690/RS740 to new init path (V2).
Also cleanup register specific to RS690/RS740. Version 2 add
missing header file for register, remove unecessary call to AGP
function and fix an indentation bug.
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 41 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs600.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs690.c | 356 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs690d.h | 307 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/rs690r.h | 99 |
6 files changed, 571 insertions, 249 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index dde1b521aae5..2f084e1501d7 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -1081,6 +1081,16 @@ extern void rv515_clock_startup(struct radeon_device *rdev); | |||
1081 | extern void rv515_debugfs(struct radeon_device *rdev); | 1081 | extern void rv515_debugfs(struct radeon_device *rdev); |
1082 | extern int rv515_suspend(struct radeon_device *rdev); | 1082 | extern int rv515_suspend(struct radeon_device *rdev); |
1083 | 1083 | ||
1084 | /* rs400 */ | ||
1085 | extern int rs400_gart_init(struct radeon_device *rdev); | ||
1086 | extern int rs400_gart_enable(struct radeon_device *rdev); | ||
1087 | extern void rs400_gart_adjust_size(struct radeon_device *rdev); | ||
1088 | extern void rs400_gart_disable(struct radeon_device *rdev); | ||
1089 | extern void rs400_gart_fini(struct radeon_device *rdev); | ||
1090 | |||
1091 | /* rs600 */ | ||
1092 | extern void rs600_set_safe_registers(struct radeon_device *rdev); | ||
1093 | |||
1084 | /* rs690, rs740 */ | 1094 | /* rs690, rs740 */ |
1085 | extern void rs690_line_buffer_adjust(struct radeon_device *rdev, | 1095 | extern void rs690_line_buffer_adjust(struct radeon_device *rdev, |
1086 | struct drm_display_mode *mode1, | 1096 | struct drm_display_mode *mode1, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 39f1bb656e61..3ad916492747 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
@@ -349,36 +349,39 @@ static struct radeon_asic rs600_asic = { | |||
349 | /* | 349 | /* |
350 | * rs690,rs740 | 350 | * rs690,rs740 |
351 | */ | 351 | */ |
352 | void rs690_errata(struct radeon_device *rdev); | 352 | int rs690_init(struct radeon_device *rdev); |
353 | void rs690_vram_info(struct radeon_device *rdev); | 353 | void rs690_fini(struct radeon_device *rdev); |
354 | int rs690_mc_init(struct radeon_device *rdev); | 354 | int rs690_resume(struct radeon_device *rdev); |
355 | void rs690_mc_fini(struct radeon_device *rdev); | 355 | int rs690_suspend(struct radeon_device *rdev); |
356 | uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg); | 356 | uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg); |
357 | void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); | 357 | void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v); |
358 | void rs690_bandwidth_update(struct radeon_device *rdev); | 358 | void rs690_bandwidth_update(struct radeon_device *rdev); |
359 | static struct radeon_asic rs690_asic = { | 359 | static struct radeon_asic rs690_asic = { |
360 | .init = &rs600_init, | 360 | .init = &rs690_init, |
361 | .errata = &rs690_errata, | 361 | .fini = &rs690_fini, |
362 | .vram_info = &rs690_vram_info, | 362 | .suspend = &rs690_suspend, |
363 | .resume = &rs690_resume, | ||
364 | .errata = NULL, | ||
365 | .vram_info = NULL, | ||
363 | .gpu_reset = &r300_gpu_reset, | 366 | .gpu_reset = &r300_gpu_reset, |
364 | .mc_init = &rs690_mc_init, | 367 | .mc_init = NULL, |
365 | .mc_fini = &rs690_mc_fini, | 368 | .mc_fini = NULL, |
366 | .wb_init = &r100_wb_init, | 369 | .wb_init = NULL, |
367 | .wb_fini = &r100_wb_fini, | 370 | .wb_fini = NULL, |
368 | .gart_init = &rs400_gart_init, | 371 | .gart_init = NULL, |
369 | .gart_fini = &rs400_gart_fini, | 372 | .gart_fini = NULL, |
370 | .gart_enable = &rs400_gart_enable, | 373 | .gart_enable = NULL, |
371 | .gart_disable = &rs400_gart_disable, | 374 | .gart_disable = NULL, |
372 | .gart_tlb_flush = &rs400_gart_tlb_flush, | 375 | .gart_tlb_flush = &rs400_gart_tlb_flush, |
373 | .gart_set_page = &rs400_gart_set_page, | 376 | .gart_set_page = &rs400_gart_set_page, |
374 | .cp_init = &r100_cp_init, | 377 | .cp_init = NULL, |
375 | .cp_fini = &r100_cp_fini, | 378 | .cp_fini = NULL, |
376 | .cp_disable = &r100_cp_disable, | 379 | .cp_disable = NULL, |
377 | .cp_commit = &r100_cp_commit, | 380 | .cp_commit = &r100_cp_commit, |
378 | .ring_start = &r300_ring_start, | 381 | .ring_start = &r300_ring_start, |
379 | .ring_test = &r100_ring_test, | 382 | .ring_test = &r100_ring_test, |
380 | .ring_ib_execute = &r100_ring_ib_execute, | 383 | .ring_ib_execute = &r100_ring_ib_execute, |
381 | .ib_test = &r100_ib_test, | 384 | .ib_test = NULL, |
382 | .irq_set = &rs600_irq_set, | 385 | .irq_set = &rs600_irq_set, |
383 | .irq_process = &rs600_irq_process, | 386 | .irq_process = &rs600_irq_process, |
384 | .get_vblank_counter = &rs600_get_vblank_counter, | 387 | .get_vblank_counter = &rs600_get_vblank_counter, |
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c index 4a4fe1cb131c..fa8e451c64e8 100644 --- a/drivers/gpu/drm/radeon/rs600.c +++ b/drivers/gpu/drm/radeon/rs600.c | |||
@@ -416,9 +416,14 @@ void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | |||
416 | WREG32(RS600_MC_DATA, v); | 416 | WREG32(RS600_MC_DATA, v); |
417 | } | 417 | } |
418 | 418 | ||
419 | int rs600_init(struct radeon_device *rdev) | 419 | void rs600_set_safe_registers(struct radeon_device *rdev) |
420 | { | 420 | { |
421 | rdev->config.r300.reg_safe_bm = rs600_reg_safe_bm; | 421 | rdev->config.r300.reg_safe_bm = rs600_reg_safe_bm; |
422 | rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(rs600_reg_safe_bm); | 422 | rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(rs600_reg_safe_bm); |
423 | } | ||
424 | |||
425 | int rs600_init(struct radeon_device *rdev) | ||
426 | { | ||
427 | rs600_set_safe_registers(rdev); | ||
423 | return 0; | 428 | return 0; |
424 | } | 429 | } |
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c index 7a0098ddf977..0028db51ae75 100644 --- a/drivers/gpu/drm/radeon/rs690.c +++ b/drivers/gpu/drm/radeon/rs690.c | |||
@@ -26,105 +26,29 @@ | |||
26 | * Jerome Glisse | 26 | * Jerome Glisse |
27 | */ | 27 | */ |
28 | #include "drmP.h" | 28 | #include "drmP.h" |
29 | #include "radeon_reg.h" | ||
30 | #include "radeon.h" | 29 | #include "radeon.h" |
31 | #include "rs690r.h" | ||
32 | #include "atom.h" | 30 | #include "atom.h" |
33 | #include "atom-bits.h" | 31 | #include "rs690d.h" |
34 | |||
35 | /* rs690,rs740 depends on : */ | ||
36 | void r100_hdp_reset(struct radeon_device *rdev); | ||
37 | int r300_mc_wait_for_idle(struct radeon_device *rdev); | ||
38 | void r420_pipes_init(struct radeon_device *rdev); | ||
39 | void rs400_gart_disable(struct radeon_device *rdev); | ||
40 | int rs400_gart_enable(struct radeon_device *rdev); | ||
41 | void rs400_gart_adjust_size(struct radeon_device *rdev); | ||
42 | void rs600_mc_disable_clients(struct radeon_device *rdev); | ||
43 | |||
44 | /* This files gather functions specifics to : | ||
45 | * rs690,rs740 | ||
46 | * | ||
47 | * Some of these functions might be used by newer ASICs. | ||
48 | */ | ||
49 | void rs690_gpu_init(struct radeon_device *rdev); | ||
50 | int rs690_mc_wait_for_idle(struct radeon_device *rdev); | ||
51 | |||
52 | |||
53 | /* | ||
54 | * MC functions. | ||
55 | */ | ||
56 | int rs690_mc_init(struct radeon_device *rdev) | ||
57 | { | ||
58 | uint32_t tmp; | ||
59 | int r; | ||
60 | |||
61 | if (r100_debugfs_rbbm_init(rdev)) { | ||
62 | DRM_ERROR("Failed to register debugfs file for RBBM !\n"); | ||
63 | } | ||
64 | |||
65 | rs690_gpu_init(rdev); | ||
66 | rs400_gart_disable(rdev); | ||
67 | |||
68 | /* Setup GPU memory space */ | ||
69 | rdev->mc.gtt_location = rdev->mc.mc_vram_size; | ||
70 | rdev->mc.gtt_location += (rdev->mc.gtt_size - 1); | ||
71 | rdev->mc.gtt_location &= ~(rdev->mc.gtt_size - 1); | ||
72 | rdev->mc.vram_location = 0xFFFFFFFFUL; | ||
73 | r = radeon_mc_setup(rdev); | ||
74 | if (r) { | ||
75 | return r; | ||
76 | } | ||
77 | |||
78 | /* Program GPU memory space */ | ||
79 | rs600_mc_disable_clients(rdev); | ||
80 | if (rs690_mc_wait_for_idle(rdev)) { | ||
81 | printk(KERN_WARNING "Failed to wait MC idle while " | ||
82 | "programming pipes. Bad things might happen.\n"); | ||
83 | } | ||
84 | tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1; | ||
85 | tmp = REG_SET(RS690_MC_FB_TOP, tmp >> 16); | ||
86 | tmp |= REG_SET(RS690_MC_FB_START, rdev->mc.vram_location >> 16); | ||
87 | WREG32_MC(RS690_MCCFG_FB_LOCATION, tmp); | ||
88 | /* FIXME: Does this reg exist on RS480,RS740 ? */ | ||
89 | WREG32(0x310, rdev->mc.vram_location); | ||
90 | WREG32(RS690_HDP_FB_LOCATION, rdev->mc.vram_location >> 16); | ||
91 | return 0; | ||
92 | } | ||
93 | |||
94 | void rs690_mc_fini(struct radeon_device *rdev) | ||
95 | { | ||
96 | } | ||
97 | |||
98 | 32 | ||
99 | /* | 33 | static int rs690_mc_wait_for_idle(struct radeon_device *rdev) |
100 | * Global GPU functions | ||
101 | */ | ||
102 | int rs690_mc_wait_for_idle(struct radeon_device *rdev) | ||
103 | { | 34 | { |
104 | unsigned i; | 35 | unsigned i; |
105 | uint32_t tmp; | 36 | uint32_t tmp; |
106 | 37 | ||
107 | for (i = 0; i < rdev->usec_timeout; i++) { | 38 | for (i = 0; i < rdev->usec_timeout; i++) { |
108 | /* read MC_STATUS */ | 39 | /* read MC_STATUS */ |
109 | tmp = RREG32_MC(RS690_MC_STATUS); | 40 | tmp = RREG32_MC(R_000090_MC_SYSTEM_STATUS); |
110 | if (tmp & RS690_MC_STATUS_IDLE) { | 41 | if (G_000090_MC_SYSTEM_IDLE(tmp)) |
111 | return 0; | 42 | return 0; |
112 | } | 43 | udelay(1); |
113 | DRM_UDELAY(1); | ||
114 | } | 44 | } |
115 | return -1; | 45 | return -1; |
116 | } | 46 | } |
117 | 47 | ||
118 | void rs690_errata(struct radeon_device *rdev) | 48 | static void rs690_gpu_init(struct radeon_device *rdev) |
119 | { | ||
120 | rdev->pll_errata = 0; | ||
121 | } | ||
122 | |||
123 | void rs690_gpu_init(struct radeon_device *rdev) | ||
124 | { | 49 | { |
125 | /* FIXME: HDP same place on rs690 ? */ | 50 | /* FIXME: HDP same place on rs690 ? */ |
126 | r100_hdp_reset(rdev); | 51 | r100_hdp_reset(rdev); |
127 | rv515_vga_render_disable(rdev); | ||
128 | /* FIXME: is this correct ? */ | 52 | /* FIXME: is this correct ? */ |
129 | r420_pipes_init(rdev); | 53 | r420_pipes_init(rdev); |
130 | if (rs690_mc_wait_for_idle(rdev)) { | 54 | if (rs690_mc_wait_for_idle(rdev)) { |
@@ -133,10 +57,6 @@ void rs690_gpu_init(struct radeon_device *rdev) | |||
133 | } | 57 | } |
134 | } | 58 | } |
135 | 59 | ||
136 | |||
137 | /* | ||
138 | * VRAM info. | ||
139 | */ | ||
140 | void rs690_pm_info(struct radeon_device *rdev) | 60 | void rs690_pm_info(struct radeon_device *rdev) |
141 | { | 61 | { |
142 | int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); | 62 | int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); |
@@ -250,39 +170,39 @@ void rs690_line_buffer_adjust(struct radeon_device *rdev, | |||
250 | /* | 170 | /* |
251 | * Line Buffer Setup | 171 | * Line Buffer Setup |
252 | * There is a single line buffer shared by both display controllers. | 172 | * There is a single line buffer shared by both display controllers. |
253 | * DC_LB_MEMORY_SPLIT controls how that line buffer is shared between | 173 | * R_006520_DC_LB_MEMORY_SPLIT controls how that line buffer is shared between |
254 | * the display controllers. The paritioning can either be done | 174 | * the display controllers. The paritioning can either be done |
255 | * manually or via one of four preset allocations specified in bits 1:0: | 175 | * manually or via one of four preset allocations specified in bits 1:0: |
256 | * 0 - line buffer is divided in half and shared between crtc | 176 | * 0 - line buffer is divided in half and shared between crtc |
257 | * 1 - D1 gets 3/4 of the line buffer, D2 gets 1/4 | 177 | * 1 - D1 gets 3/4 of the line buffer, D2 gets 1/4 |
258 | * 2 - D1 gets the whole buffer | 178 | * 2 - D1 gets the whole buffer |
259 | * 3 - D1 gets 1/4 of the line buffer, D2 gets 3/4 | 179 | * 3 - D1 gets 1/4 of the line buffer, D2 gets 3/4 |
260 | * Setting bit 2 of DC_LB_MEMORY_SPLIT controls switches to manual | 180 | * Setting bit 2 of R_006520_DC_LB_MEMORY_SPLIT controls switches to manual |
261 | * allocation mode. In manual allocation mode, D1 always starts at 0, | 181 | * allocation mode. In manual allocation mode, D1 always starts at 0, |
262 | * D1 end/2 is specified in bits 14:4; D2 allocation follows D1. | 182 | * D1 end/2 is specified in bits 14:4; D2 allocation follows D1. |
263 | */ | 183 | */ |
264 | tmp = RREG32(DC_LB_MEMORY_SPLIT) & ~DC_LB_MEMORY_SPLIT_MASK; | 184 | tmp = RREG32(R_006520_DC_LB_MEMORY_SPLIT) & C_006520_DC_LB_MEMORY_SPLIT; |
265 | tmp &= ~DC_LB_MEMORY_SPLIT_SHIFT_MODE; | 185 | tmp &= ~C_006520_DC_LB_MEMORY_SPLIT_MODE; |
266 | /* auto */ | 186 | /* auto */ |
267 | if (mode1 && mode2) { | 187 | if (mode1 && mode2) { |
268 | if (mode1->hdisplay > mode2->hdisplay) { | 188 | if (mode1->hdisplay > mode2->hdisplay) { |
269 | if (mode1->hdisplay > 2560) | 189 | if (mode1->hdisplay > 2560) |
270 | tmp |= DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q; | 190 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q; |
271 | else | 191 | else |
272 | tmp |= DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; | 192 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; |
273 | } else if (mode2->hdisplay > mode1->hdisplay) { | 193 | } else if (mode2->hdisplay > mode1->hdisplay) { |
274 | if (mode2->hdisplay > 2560) | 194 | if (mode2->hdisplay > 2560) |
275 | tmp |= DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q; | 195 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q; |
276 | else | 196 | else |
277 | tmp |= DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; | 197 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; |
278 | } else | 198 | } else |
279 | tmp |= AVIVO_DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; | 199 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1HALF_D2HALF; |
280 | } else if (mode1) { | 200 | } else if (mode1) { |
281 | tmp |= DC_LB_MEMORY_SPLIT_D1_ONLY; | 201 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1_ONLY; |
282 | } else if (mode2) { | 202 | } else if (mode2) { |
283 | tmp |= DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q; | 203 | tmp |= V_006520_DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q; |
284 | } | 204 | } |
285 | WREG32(DC_LB_MEMORY_SPLIT, tmp); | 205 | WREG32(R_006520_DC_LB_MEMORY_SPLIT, tmp); |
286 | } | 206 | } |
287 | 207 | ||
288 | struct rs690_watermark { | 208 | struct rs690_watermark { |
@@ -487,28 +407,28 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
487 | * option. | 407 | * option. |
488 | */ | 408 | */ |
489 | if (rdev->disp_priority == 2) { | 409 | if (rdev->disp_priority == 2) { |
490 | tmp = RREG32_MC(MC_INIT_MISC_LAT_TIMER); | 410 | tmp = RREG32_MC(R_000104_MC_INIT_MISC_LAT_TIMER); |
491 | tmp &= ~MC_DISP1R_INIT_LAT_MASK; | 411 | tmp &= C_000104_MC_DISP0R_INIT_LAT; |
492 | tmp &= ~MC_DISP0R_INIT_LAT_MASK; | 412 | tmp &= C_000104_MC_DISP1R_INIT_LAT; |
493 | if (mode1) | ||
494 | tmp |= (1 << MC_DISP1R_INIT_LAT_SHIFT); | ||
495 | if (mode0) | 413 | if (mode0) |
496 | tmp |= (1 << MC_DISP0R_INIT_LAT_SHIFT); | 414 | tmp |= S_000104_MC_DISP0R_INIT_LAT(1); |
497 | WREG32_MC(MC_INIT_MISC_LAT_TIMER, tmp); | 415 | if (mode1) |
416 | tmp |= S_000104_MC_DISP1R_INIT_LAT(1); | ||
417 | WREG32_MC(R_000104_MC_INIT_MISC_LAT_TIMER, tmp); | ||
498 | } | 418 | } |
499 | rs690_line_buffer_adjust(rdev, mode0, mode1); | 419 | rs690_line_buffer_adjust(rdev, mode0, mode1); |
500 | 420 | ||
501 | if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) | 421 | if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) |
502 | WREG32(DCP_CONTROL, 0); | 422 | WREG32(R_006C9C_DCP_CONTROL, 0); |
503 | if ((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880)) | 423 | if ((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880)) |
504 | WREG32(DCP_CONTROL, 2); | 424 | WREG32(R_006C9C_DCP_CONTROL, 2); |
505 | 425 | ||
506 | rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[0], &wm0); | 426 | rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[0], &wm0); |
507 | rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[1], &wm1); | 427 | rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[1], &wm1); |
508 | 428 | ||
509 | tmp = (wm0.lb_request_fifo_depth - 1); | 429 | tmp = (wm0.lb_request_fifo_depth - 1); |
510 | tmp |= (wm1.lb_request_fifo_depth - 1) << 16; | 430 | tmp |= (wm1.lb_request_fifo_depth - 1) << 16; |
511 | WREG32(LB_MAX_REQ_OUTSTANDING, tmp); | 431 | WREG32(R_006D58_LB_MAX_REQ_OUTSTANDING, tmp); |
512 | 432 | ||
513 | if (mode0 && mode1) { | 433 | if (mode0 && mode1) { |
514 | if (rfixed_trunc(wm0.dbpp) > 64) | 434 | if (rfixed_trunc(wm0.dbpp) > 64) |
@@ -561,10 +481,10 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
561 | priority_mark12.full = 0; | 481 | priority_mark12.full = 0; |
562 | if (wm1.priority_mark_max.full > priority_mark12.full) | 482 | if (wm1.priority_mark_max.full > priority_mark12.full) |
563 | priority_mark12.full = wm1.priority_mark_max.full; | 483 | priority_mark12.full = wm1.priority_mark_max.full; |
564 | WREG32(D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); | 484 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); |
565 | WREG32(D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); | 485 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); |
566 | WREG32(D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); | 486 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); |
567 | WREG32(D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); | 487 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); |
568 | } else if (mode0) { | 488 | } else if (mode0) { |
569 | if (rfixed_trunc(wm0.dbpp) > 64) | 489 | if (rfixed_trunc(wm0.dbpp) > 64) |
570 | a.full = rfixed_mul(wm0.dbpp, wm0.num_line_pair); | 490 | a.full = rfixed_mul(wm0.dbpp, wm0.num_line_pair); |
@@ -591,10 +511,12 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
591 | priority_mark02.full = 0; | 511 | priority_mark02.full = 0; |
592 | if (wm0.priority_mark_max.full > priority_mark02.full) | 512 | if (wm0.priority_mark_max.full > priority_mark02.full) |
593 | priority_mark02.full = wm0.priority_mark_max.full; | 513 | priority_mark02.full = wm0.priority_mark_max.full; |
594 | WREG32(D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); | 514 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); |
595 | WREG32(D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); | 515 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); |
596 | WREG32(D2MODE_PRIORITY_A_CNT, MODE_PRIORITY_OFF); | 516 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, |
597 | WREG32(D2MODE_PRIORITY_B_CNT, MODE_PRIORITY_OFF); | 517 | S_006D48_D2MODE_PRIORITY_A_OFF(1)); |
518 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, | ||
519 | S_006D4C_D2MODE_PRIORITY_B_OFF(1)); | ||
598 | } else { | 520 | } else { |
599 | if (rfixed_trunc(wm1.dbpp) > 64) | 521 | if (rfixed_trunc(wm1.dbpp) > 64) |
600 | a.full = rfixed_mul(wm1.dbpp, wm1.num_line_pair); | 522 | a.full = rfixed_mul(wm1.dbpp, wm1.num_line_pair); |
@@ -621,30 +543,204 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
621 | priority_mark12.full = 0; | 543 | priority_mark12.full = 0; |
622 | if (wm1.priority_mark_max.full > priority_mark12.full) | 544 | if (wm1.priority_mark_max.full > priority_mark12.full) |
623 | priority_mark12.full = wm1.priority_mark_max.full; | 545 | priority_mark12.full = wm1.priority_mark_max.full; |
624 | WREG32(D1MODE_PRIORITY_A_CNT, MODE_PRIORITY_OFF); | 546 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, |
625 | WREG32(D1MODE_PRIORITY_B_CNT, MODE_PRIORITY_OFF); | 547 | S_006548_D1MODE_PRIORITY_A_OFF(1)); |
626 | WREG32(D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); | 548 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, |
627 | WREG32(D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); | 549 | S_00654C_D1MODE_PRIORITY_B_OFF(1)); |
550 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); | ||
551 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); | ||
628 | } | 552 | } |
629 | } | 553 | } |
630 | 554 | ||
631 | /* | ||
632 | * Indirect registers accessor | ||
633 | */ | ||
634 | uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg) | 555 | uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg) |
635 | { | 556 | { |
636 | uint32_t r; | 557 | uint32_t r; |
637 | 558 | ||
638 | WREG32(RS690_MC_INDEX, (reg & RS690_MC_INDEX_MASK)); | 559 | WREG32(R_000078_MC_INDEX, S_000078_MC_IND_ADDR(reg)); |
639 | r = RREG32(RS690_MC_DATA); | 560 | r = RREG32(R_00007C_MC_DATA); |
640 | WREG32(RS690_MC_INDEX, RS690_MC_INDEX_MASK); | 561 | WREG32(R_000078_MC_INDEX, ~C_000078_MC_IND_ADDR); |
641 | return r; | 562 | return r; |
642 | } | 563 | } |
643 | 564 | ||
644 | void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) | 565 | void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
645 | { | 566 | { |
646 | WREG32(RS690_MC_INDEX, | 567 | WREG32(R_000078_MC_INDEX, S_000078_MC_IND_ADDR(reg) | |
647 | RS690_MC_INDEX_WR_EN | ((reg) & RS690_MC_INDEX_MASK)); | 568 | S_000078_MC_IND_WR_EN(1)); |
648 | WREG32(RS690_MC_DATA, v); | 569 | WREG32(R_00007C_MC_DATA, v); |
649 | WREG32(RS690_MC_INDEX, RS690_MC_INDEX_WR_ACK); | 570 | WREG32(R_000078_MC_INDEX, 0x7F); |
571 | } | ||
572 | |||
573 | void rs690_mc_program(struct radeon_device *rdev) | ||
574 | { | ||
575 | struct rv515_mc_save save; | ||
576 | |||
577 | /* Stops all mc clients */ | ||
578 | rv515_mc_stop(rdev, &save); | ||
579 | |||
580 | /* Wait for mc idle */ | ||
581 | if (rs690_mc_wait_for_idle(rdev)) | ||
582 | dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n"); | ||
583 | /* Program MC, should be a 32bits limited address space */ | ||
584 | WREG32_MC(R_000100_MCCFG_FB_LOCATION, | ||
585 | S_000100_MC_FB_START(rdev->mc.vram_start >> 16) | | ||
586 | S_000100_MC_FB_TOP(rdev->mc.vram_end >> 16)); | ||
587 | WREG32(R_000134_HDP_FB_LOCATION, | ||
588 | S_000134_HDP_FB_START(rdev->mc.vram_start >> 16)); | ||
589 | |||
590 | rv515_mc_resume(rdev, &save); | ||
591 | } | ||
592 | |||
593 | static int rs690_startup(struct radeon_device *rdev) | ||
594 | { | ||
595 | int r; | ||
596 | |||
597 | rs690_mc_program(rdev); | ||
598 | /* Resume clock */ | ||
599 | rv515_clock_startup(rdev); | ||
600 | /* Initialize GPU configuration (# pipes, ...) */ | ||
601 | rs690_gpu_init(rdev); | ||
602 | /* Initialize GART (initialize after TTM so we can allocate | ||
603 | * memory through TTM but finalize after TTM) */ | ||
604 | r = rs400_gart_enable(rdev); | ||
605 | if (r) | ||
606 | return r; | ||
607 | /* Enable IRQ */ | ||
608 | rdev->irq.sw_int = true; | ||
609 | r100_irq_set(rdev); | ||
610 | /* 1M ring buffer */ | ||
611 | r = r100_cp_init(rdev, 1024 * 1024); | ||
612 | if (r) { | ||
613 | dev_err(rdev->dev, "failled initializing CP (%d).\n", r); | ||
614 | return r; | ||
615 | } | ||
616 | r = r100_wb_init(rdev); | ||
617 | if (r) | ||
618 | dev_err(rdev->dev, "failled initializing WB (%d).\n", r); | ||
619 | r = r100_ib_init(rdev); | ||
620 | if (r) { | ||
621 | dev_err(rdev->dev, "failled initializing IB (%d).\n", r); | ||
622 | return r; | ||
623 | } | ||
624 | return 0; | ||
625 | } | ||
626 | |||
627 | int rs690_resume(struct radeon_device *rdev) | ||
628 | { | ||
629 | /* Make sur GART are not working */ | ||
630 | rs400_gart_disable(rdev); | ||
631 | /* Resume clock before doing reset */ | ||
632 | rv515_clock_startup(rdev); | ||
633 | /* Reset gpu before posting otherwise ATOM will enter infinite loop */ | ||
634 | if (radeon_gpu_reset(rdev)) { | ||
635 | dev_warn(rdev->dev, "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n", | ||
636 | RREG32(R_000E40_RBBM_STATUS), | ||
637 | RREG32(R_0007C0_CP_STAT)); | ||
638 | } | ||
639 | /* post */ | ||
640 | atom_asic_init(rdev->mode_info.atom_context); | ||
641 | /* Resume clock after posting */ | ||
642 | rv515_clock_startup(rdev); | ||
643 | return rs690_startup(rdev); | ||
644 | } | ||
645 | |||
646 | int rs690_suspend(struct radeon_device *rdev) | ||
647 | { | ||
648 | r100_cp_disable(rdev); | ||
649 | r100_wb_disable(rdev); | ||
650 | r100_irq_disable(rdev); | ||
651 | rs400_gart_disable(rdev); | ||
652 | return 0; | ||
653 | } | ||
654 | |||
655 | void rs690_fini(struct radeon_device *rdev) | ||
656 | { | ||
657 | rs690_suspend(rdev); | ||
658 | r100_cp_fini(rdev); | ||
659 | r100_wb_fini(rdev); | ||
660 | r100_ib_fini(rdev); | ||
661 | radeon_gem_fini(rdev); | ||
662 | rs400_gart_fini(rdev); | ||
663 | radeon_irq_kms_fini(rdev); | ||
664 | radeon_fence_driver_fini(rdev); | ||
665 | radeon_object_fini(rdev); | ||
666 | radeon_atombios_fini(rdev); | ||
667 | kfree(rdev->bios); | ||
668 | rdev->bios = NULL; | ||
669 | } | ||
670 | |||
671 | int rs690_init(struct radeon_device *rdev) | ||
672 | { | ||
673 | int r; | ||
674 | |||
675 | rdev->new_init_path = true; | ||
676 | /* Disable VGA */ | ||
677 | rv515_vga_render_disable(rdev); | ||
678 | /* Initialize scratch registers */ | ||
679 | radeon_scratch_init(rdev); | ||
680 | /* Initialize surface registers */ | ||
681 | radeon_surface_init(rdev); | ||
682 | /* TODO: disable VGA need to use VGA request */ | ||
683 | /* BIOS*/ | ||
684 | if (!radeon_get_bios(rdev)) { | ||
685 | if (ASIC_IS_AVIVO(rdev)) | ||
686 | return -EINVAL; | ||
687 | } | ||
688 | if (rdev->is_atom_bios) { | ||
689 | r = radeon_atombios_init(rdev); | ||
690 | if (r) | ||
691 | return r; | ||
692 | } else { | ||
693 | dev_err(rdev->dev, "Expecting atombios for RV515 GPU\n"); | ||
694 | return -EINVAL; | ||
695 | } | ||
696 | /* Reset gpu before posting otherwise ATOM will enter infinite loop */ | ||
697 | if (radeon_gpu_reset(rdev)) { | ||
698 | dev_warn(rdev->dev, | ||
699 | "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n", | ||
700 | RREG32(R_000E40_RBBM_STATUS), | ||
701 | RREG32(R_0007C0_CP_STAT)); | ||
702 | } | ||
703 | /* check if cards are posted or not */ | ||
704 | if (!radeon_card_posted(rdev) && rdev->bios) { | ||
705 | DRM_INFO("GPU not posted. posting now...\n"); | ||
706 | atom_asic_init(rdev->mode_info.atom_context); | ||
707 | } | ||
708 | /* Initialize clocks */ | ||
709 | radeon_get_clock_info(rdev->ddev); | ||
710 | /* Get vram informations */ | ||
711 | rs690_vram_info(rdev); | ||
712 | /* Initialize memory controller (also test AGP) */ | ||
713 | r = r420_mc_init(rdev); | ||
714 | if (r) | ||
715 | return r; | ||
716 | rv515_debugfs(rdev); | ||
717 | /* Fence driver */ | ||
718 | r = radeon_fence_driver_init(rdev); | ||
719 | if (r) | ||
720 | return r; | ||
721 | r = radeon_irq_kms_init(rdev); | ||
722 | if (r) | ||
723 | return r; | ||
724 | /* Memory manager */ | ||
725 | r = radeon_object_init(rdev); | ||
726 | if (r) | ||
727 | return r; | ||
728 | r = rs400_gart_init(rdev); | ||
729 | if (r) | ||
730 | return r; | ||
731 | rs600_set_safe_registers(rdev); | ||
732 | rdev->accel_working = true; | ||
733 | r = rs690_startup(rdev); | ||
734 | if (r) { | ||
735 | /* Somethings want wront with the accel init stop accel */ | ||
736 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); | ||
737 | rs690_suspend(rdev); | ||
738 | r100_cp_fini(rdev); | ||
739 | r100_wb_fini(rdev); | ||
740 | r100_ib_fini(rdev); | ||
741 | rs400_gart_fini(rdev); | ||
742 | radeon_irq_kms_fini(rdev); | ||
743 | rdev->accel_working = false; | ||
744 | } | ||
745 | return 0; | ||
650 | } | 746 | } |
diff --git a/drivers/gpu/drm/radeon/rs690d.h b/drivers/gpu/drm/radeon/rs690d.h new file mode 100644 index 000000000000..62d31e7a897f --- /dev/null +++ b/drivers/gpu/drm/radeon/rs690d.h | |||
@@ -0,0 +1,307 @@ | |||
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 __RS690D_H__ | ||
29 | #define __RS690D_H__ | ||
30 | |||
31 | /* Registers */ | ||
32 | #define R_000078_MC_INDEX 0x000078 | ||
33 | #define S_000078_MC_IND_ADDR(x) (((x) & 0x1FF) << 0) | ||
34 | #define G_000078_MC_IND_ADDR(x) (((x) >> 0) & 0x1FF) | ||
35 | #define C_000078_MC_IND_ADDR 0xFFFFFE00 | ||
36 | #define S_000078_MC_IND_WR_EN(x) (((x) & 0x1) << 9) | ||
37 | #define G_000078_MC_IND_WR_EN(x) (((x) >> 9) & 0x1) | ||
38 | #define C_000078_MC_IND_WR_EN 0xFFFFFDFF | ||
39 | #define R_00007C_MC_DATA 0x00007C | ||
40 | #define S_00007C_MC_DATA(x) (((x) & 0xFFFFFFFF) << 0) | ||
41 | #define G_00007C_MC_DATA(x) (((x) >> 0) & 0xFFFFFFFF) | ||
42 | #define C_00007C_MC_DATA 0x00000000 | ||
43 | #define R_0000F8_CONFIG_MEMSIZE 0x0000F8 | ||
44 | #define S_0000F8_CONFIG_MEMSIZE(x) (((x) & 0xFFFFFFFF) << 0) | ||
45 | #define G_0000F8_CONFIG_MEMSIZE(x) (((x) >> 0) & 0xFFFFFFFF) | ||
46 | #define C_0000F8_CONFIG_MEMSIZE 0x00000000 | ||
47 | #define R_000134_HDP_FB_LOCATION 0x000134 | ||
48 | #define S_000134_HDP_FB_START(x) (((x) & 0xFFFF) << 0) | ||
49 | #define G_000134_HDP_FB_START(x) (((x) >> 0) & 0xFFFF) | ||
50 | #define C_000134_HDP_FB_START 0xFFFF0000 | ||
51 | #define R_0007C0_CP_STAT 0x0007C0 | ||
52 | #define S_0007C0_MRU_BUSY(x) (((x) & 0x1) << 0) | ||
53 | #define G_0007C0_MRU_BUSY(x) (((x) >> 0) & 0x1) | ||
54 | #define C_0007C0_MRU_BUSY 0xFFFFFFFE | ||
55 | #define S_0007C0_MWU_BUSY(x) (((x) & 0x1) << 1) | ||
56 | #define G_0007C0_MWU_BUSY(x) (((x) >> 1) & 0x1) | ||
57 | #define C_0007C0_MWU_BUSY 0xFFFFFFFD | ||
58 | #define S_0007C0_RSIU_BUSY(x) (((x) & 0x1) << 2) | ||
59 | #define G_0007C0_RSIU_BUSY(x) (((x) >> 2) & 0x1) | ||
60 | #define C_0007C0_RSIU_BUSY 0xFFFFFFFB | ||
61 | #define S_0007C0_RCIU_BUSY(x) (((x) & 0x1) << 3) | ||
62 | #define G_0007C0_RCIU_BUSY(x) (((x) >> 3) & 0x1) | ||
63 | #define C_0007C0_RCIU_BUSY 0xFFFFFFF7 | ||
64 | #define S_0007C0_CSF_PRIMARY_BUSY(x) (((x) & 0x1) << 9) | ||
65 | #define G_0007C0_CSF_PRIMARY_BUSY(x) (((x) >> 9) & 0x1) | ||
66 | #define C_0007C0_CSF_PRIMARY_BUSY 0xFFFFFDFF | ||
67 | #define S_0007C0_CSF_INDIRECT_BUSY(x) (((x) & 0x1) << 10) | ||
68 | #define G_0007C0_CSF_INDIRECT_BUSY(x) (((x) >> 10) & 0x1) | ||
69 | #define C_0007C0_CSF_INDIRECT_BUSY 0xFFFFFBFF | ||
70 | #define S_0007C0_CSQ_PRIMARY_BUSY(x) (((x) & 0x1) << 11) | ||
71 | #define G_0007C0_CSQ_PRIMARY_BUSY(x) (((x) >> 11) & 0x1) | ||
72 | #define C_0007C0_CSQ_PRIMARY_BUSY 0xFFFFF7FF | ||
73 | #define S_0007C0_CSQ_INDIRECT_BUSY(x) (((x) & 0x1) << 12) | ||
74 | #define G_0007C0_CSQ_INDIRECT_BUSY(x) (((x) >> 12) & 0x1) | ||
75 | #define C_0007C0_CSQ_INDIRECT_BUSY 0xFFFFEFFF | ||
76 | #define S_0007C0_CSI_BUSY(x) (((x) & 0x1) << 13) | ||
77 | #define G_0007C0_CSI_BUSY(x) (((x) >> 13) & 0x1) | ||
78 | #define C_0007C0_CSI_BUSY 0xFFFFDFFF | ||
79 | #define S_0007C0_CSF_INDIRECT2_BUSY(x) (((x) & 0x1) << 14) | ||
80 | #define G_0007C0_CSF_INDIRECT2_BUSY(x) (((x) >> 14) & 0x1) | ||
81 | #define C_0007C0_CSF_INDIRECT2_BUSY 0xFFFFBFFF | ||
82 | #define S_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) & 0x1) << 15) | ||
83 | #define G_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) >> 15) & 0x1) | ||
84 | #define C_0007C0_CSQ_INDIRECT2_BUSY 0xFFFF7FFF | ||
85 | #define S_0007C0_GUIDMA_BUSY(x) (((x) & 0x1) << 28) | ||
86 | #define G_0007C0_GUIDMA_BUSY(x) (((x) >> 28) & 0x1) | ||
87 | #define C_0007C0_GUIDMA_BUSY 0xEFFFFFFF | ||
88 | #define S_0007C0_VIDDMA_BUSY(x) (((x) & 0x1) << 29) | ||
89 | #define G_0007C0_VIDDMA_BUSY(x) (((x) >> 29) & 0x1) | ||
90 | #define C_0007C0_VIDDMA_BUSY 0xDFFFFFFF | ||
91 | #define S_0007C0_CMDSTRM_BUSY(x) (((x) & 0x1) << 30) | ||
92 | #define G_0007C0_CMDSTRM_BUSY(x) (((x) >> 30) & 0x1) | ||
93 | #define C_0007C0_CMDSTRM_BUSY 0xBFFFFFFF | ||
94 | #define S_0007C0_CP_BUSY(x) (((x) & 0x1) << 31) | ||
95 | #define G_0007C0_CP_BUSY(x) (((x) >> 31) & 0x1) | ||
96 | #define C_0007C0_CP_BUSY 0x7FFFFFFF | ||
97 | #define R_000E40_RBBM_STATUS 0x000E40 | ||
98 | #define S_000E40_CMDFIFO_AVAIL(x) (((x) & 0x7F) << 0) | ||
99 | #define G_000E40_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x7F) | ||
100 | #define C_000E40_CMDFIFO_AVAIL 0xFFFFFF80 | ||
101 | #define S_000E40_HIRQ_ON_RBB(x) (((x) & 0x1) << 8) | ||
102 | #define G_000E40_HIRQ_ON_RBB(x) (((x) >> 8) & 0x1) | ||
103 | #define C_000E40_HIRQ_ON_RBB 0xFFFFFEFF | ||
104 | #define S_000E40_CPRQ_ON_RBB(x) (((x) & 0x1) << 9) | ||
105 | #define G_000E40_CPRQ_ON_RBB(x) (((x) >> 9) & 0x1) | ||
106 | #define C_000E40_CPRQ_ON_RBB 0xFFFFFDFF | ||
107 | #define S_000E40_CFRQ_ON_RBB(x) (((x) & 0x1) << 10) | ||
108 | #define G_000E40_CFRQ_ON_RBB(x) (((x) >> 10) & 0x1) | ||
109 | #define C_000E40_CFRQ_ON_RBB 0xFFFFFBFF | ||
110 | #define S_000E40_HIRQ_IN_RTBUF(x) (((x) & 0x1) << 11) | ||
111 | #define G_000E40_HIRQ_IN_RTBUF(x) (((x) >> 11) & 0x1) | ||
112 | #define C_000E40_HIRQ_IN_RTBUF 0xFFFFF7FF | ||
113 | #define S_000E40_CPRQ_IN_RTBUF(x) (((x) & 0x1) << 12) | ||
114 | #define G_000E40_CPRQ_IN_RTBUF(x) (((x) >> 12) & 0x1) | ||
115 | #define C_000E40_CPRQ_IN_RTBUF 0xFFFFEFFF | ||
116 | #define S_000E40_CFRQ_IN_RTBUF(x) (((x) & 0x1) << 13) | ||
117 | #define G_000E40_CFRQ_IN_RTBUF(x) (((x) >> 13) & 0x1) | ||
118 | #define C_000E40_CFRQ_IN_RTBUF 0xFFFFDFFF | ||
119 | #define S_000E40_CF_PIPE_BUSY(x) (((x) & 0x1) << 14) | ||
120 | #define G_000E40_CF_PIPE_BUSY(x) (((x) >> 14) & 0x1) | ||
121 | #define C_000E40_CF_PIPE_BUSY 0xFFFFBFFF | ||
122 | #define S_000E40_ENG_EV_BUSY(x) (((x) & 0x1) << 15) | ||
123 | #define G_000E40_ENG_EV_BUSY(x) (((x) >> 15) & 0x1) | ||
124 | #define C_000E40_ENG_EV_BUSY 0xFFFF7FFF | ||
125 | #define S_000E40_CP_CMDSTRM_BUSY(x) (((x) & 0x1) << 16) | ||
126 | #define G_000E40_CP_CMDSTRM_BUSY(x) (((x) >> 16) & 0x1) | ||
127 | #define C_000E40_CP_CMDSTRM_BUSY 0xFFFEFFFF | ||
128 | #define S_000E40_E2_BUSY(x) (((x) & 0x1) << 17) | ||
129 | #define G_000E40_E2_BUSY(x) (((x) >> 17) & 0x1) | ||
130 | #define C_000E40_E2_BUSY 0xFFFDFFFF | ||
131 | #define S_000E40_RB2D_BUSY(x) (((x) & 0x1) << 18) | ||
132 | #define G_000E40_RB2D_BUSY(x) (((x) >> 18) & 0x1) | ||
133 | #define C_000E40_RB2D_BUSY 0xFFFBFFFF | ||
134 | #define S_000E40_RB3D_BUSY(x) (((x) & 0x1) << 19) | ||
135 | #define G_000E40_RB3D_BUSY(x) (((x) >> 19) & 0x1) | ||
136 | #define C_000E40_RB3D_BUSY 0xFFF7FFFF | ||
137 | #define S_000E40_VAP_BUSY(x) (((x) & 0x1) << 20) | ||
138 | #define G_000E40_VAP_BUSY(x) (((x) >> 20) & 0x1) | ||
139 | #define C_000E40_VAP_BUSY 0xFFEFFFFF | ||
140 | #define S_000E40_RE_BUSY(x) (((x) & 0x1) << 21) | ||
141 | #define G_000E40_RE_BUSY(x) (((x) >> 21) & 0x1) | ||
142 | #define C_000E40_RE_BUSY 0xFFDFFFFF | ||
143 | #define S_000E40_TAM_BUSY(x) (((x) & 0x1) << 22) | ||
144 | #define G_000E40_TAM_BUSY(x) (((x) >> 22) & 0x1) | ||
145 | #define C_000E40_TAM_BUSY 0xFFBFFFFF | ||
146 | #define S_000E40_TDM_BUSY(x) (((x) & 0x1) << 23) | ||
147 | #define G_000E40_TDM_BUSY(x) (((x) >> 23) & 0x1) | ||
148 | #define C_000E40_TDM_BUSY 0xFF7FFFFF | ||
149 | #define S_000E40_PB_BUSY(x) (((x) & 0x1) << 24) | ||
150 | #define G_000E40_PB_BUSY(x) (((x) >> 24) & 0x1) | ||
151 | #define C_000E40_PB_BUSY 0xFEFFFFFF | ||
152 | #define S_000E40_TIM_BUSY(x) (((x) & 0x1) << 25) | ||
153 | #define G_000E40_TIM_BUSY(x) (((x) >> 25) & 0x1) | ||
154 | #define C_000E40_TIM_BUSY 0xFDFFFFFF | ||
155 | #define S_000E40_GA_BUSY(x) (((x) & 0x1) << 26) | ||
156 | #define G_000E40_GA_BUSY(x) (((x) >> 26) & 0x1) | ||
157 | #define C_000E40_GA_BUSY 0xFBFFFFFF | ||
158 | #define S_000E40_CBA2D_BUSY(x) (((x) & 0x1) << 27) | ||
159 | #define G_000E40_CBA2D_BUSY(x) (((x) >> 27) & 0x1) | ||
160 | #define C_000E40_CBA2D_BUSY 0xF7FFFFFF | ||
161 | #define S_000E40_GUI_ACTIVE(x) (((x) & 0x1) << 31) | ||
162 | #define G_000E40_GUI_ACTIVE(x) (((x) >> 31) & 0x1) | ||
163 | #define C_000E40_GUI_ACTIVE 0x7FFFFFFF | ||
164 | #define R_006520_DC_LB_MEMORY_SPLIT 0x006520 | ||
165 | #define S_006520_DC_LB_MEMORY_SPLIT(x) (((x) & 0x3) << 0) | ||
166 | #define G_006520_DC_LB_MEMORY_SPLIT(x) (((x) >> 0) & 0x3) | ||
167 | #define C_006520_DC_LB_MEMORY_SPLIT 0xFFFFFFFC | ||
168 | #define S_006520_DC_LB_MEMORY_SPLIT_MODE(x) (((x) & 0x1) << 2) | ||
169 | #define G_006520_DC_LB_MEMORY_SPLIT_MODE(x) (((x) >> 2) & 0x1) | ||
170 | #define C_006520_DC_LB_MEMORY_SPLIT_MODE 0xFFFFFFFB | ||
171 | #define V_006520_DC_LB_MEMORY_SPLIT_D1HALF_D2HALF 0 | ||
172 | #define V_006520_DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q 1 | ||
173 | #define V_006520_DC_LB_MEMORY_SPLIT_D1_ONLY 2 | ||
174 | #define V_006520_DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q 3 | ||
175 | #define S_006520_DC_LB_DISP1_END_ADR(x) (((x) & 0x7FF) << 4) | ||
176 | #define G_006520_DC_LB_DISP1_END_ADR(x) (((x) >> 4) & 0x7FF) | ||
177 | #define C_006520_DC_LB_DISP1_END_ADR 0xFFFF800F | ||
178 | #define R_006548_D1MODE_PRIORITY_A_CNT 0x006548 | ||
179 | #define S_006548_D1MODE_PRIORITY_MARK_A(x) (((x) & 0x7FFF) << 0) | ||
180 | #define G_006548_D1MODE_PRIORITY_MARK_A(x) (((x) >> 0) & 0x7FFF) | ||
181 | #define C_006548_D1MODE_PRIORITY_MARK_A 0xFFFF8000 | ||
182 | #define S_006548_D1MODE_PRIORITY_A_OFF(x) (((x) & 0x1) << 16) | ||
183 | #define G_006548_D1MODE_PRIORITY_A_OFF(x) (((x) >> 16) & 0x1) | ||
184 | #define C_006548_D1MODE_PRIORITY_A_OFF 0xFFFEFFFF | ||
185 | #define S_006548_D1MODE_PRIORITY_A_FORCE_MASK(x) (((x) & 0x1) << 24) | ||
186 | #define G_006548_D1MODE_PRIORITY_A_FORCE_MASK(x) (((x) >> 24) & 0x1) | ||
187 | #define C_006548_D1MODE_PRIORITY_A_FORCE_MASK 0xFEFFFFFF | ||
188 | #define R_00654C_D1MODE_PRIORITY_B_CNT 0x00654C | ||
189 | #define S_00654C_D1MODE_PRIORITY_MARK_B(x) (((x) & 0x7FFF) << 0) | ||
190 | #define G_00654C_D1MODE_PRIORITY_MARK_B(x) (((x) >> 0) & 0x7FFF) | ||
191 | #define C_00654C_D1MODE_PRIORITY_MARK_B 0xFFFF8000 | ||
192 | #define S_00654C_D1MODE_PRIORITY_B_OFF(x) (((x) & 0x1) << 16) | ||
193 | #define G_00654C_D1MODE_PRIORITY_B_OFF(x) (((x) >> 16) & 0x1) | ||
194 | #define C_00654C_D1MODE_PRIORITY_B_OFF 0xFFFEFFFF | ||
195 | #define S_00654C_D1MODE_PRIORITY_B_ALWAYS_ON(x) (((x) & 0x1) << 20) | ||
196 | #define G_00654C_D1MODE_PRIORITY_B_ALWAYS_ON(x) (((x) >> 20) & 0x1) | ||
197 | #define C_00654C_D1MODE_PRIORITY_B_ALWAYS_ON 0xFFEFFFFF | ||
198 | #define S_00654C_D1MODE_PRIORITY_B_FORCE_MASK(x) (((x) & 0x1) << 24) | ||
199 | #define G_00654C_D1MODE_PRIORITY_B_FORCE_MASK(x) (((x) >> 24) & 0x1) | ||
200 | #define C_00654C_D1MODE_PRIORITY_B_FORCE_MASK 0xFEFFFFFF | ||
201 | #define R_006C9C_DCP_CONTROL 0x006C9C | ||
202 | #define R_006D48_D2MODE_PRIORITY_A_CNT 0x006D48 | ||
203 | #define S_006D48_D2MODE_PRIORITY_MARK_A(x) (((x) & 0x7FFF) << 0) | ||
204 | #define G_006D48_D2MODE_PRIORITY_MARK_A(x) (((x) >> 0) & 0x7FFF) | ||
205 | #define C_006D48_D2MODE_PRIORITY_MARK_A 0xFFFF8000 | ||
206 | #define S_006D48_D2MODE_PRIORITY_A_OFF(x) (((x) & 0x1) << 16) | ||
207 | #define G_006D48_D2MODE_PRIORITY_A_OFF(x) (((x) >> 16) & 0x1) | ||
208 | #define C_006D48_D2MODE_PRIORITY_A_OFF 0xFFFEFFFF | ||
209 | #define S_006D48_D2MODE_PRIORITY_A_ALWAYS_ON(x) (((x) & 0x1) << 20) | ||
210 | #define G_006D48_D2MODE_PRIORITY_A_ALWAYS_ON(x) (((x) >> 20) & 0x1) | ||
211 | #define C_006D48_D2MODE_PRIORITY_A_ALWAYS_ON 0xFFEFFFFF | ||
212 | #define S_006D48_D2MODE_PRIORITY_A_FORCE_MASK(x) (((x) & 0x1) << 24) | ||
213 | #define G_006D48_D2MODE_PRIORITY_A_FORCE_MASK(x) (((x) >> 24) & 0x1) | ||
214 | #define C_006D48_D2MODE_PRIORITY_A_FORCE_MASK 0xFEFFFFFF | ||
215 | #define R_006D4C_D2MODE_PRIORITY_B_CNT 0x006D4C | ||
216 | #define S_006D4C_D2MODE_PRIORITY_MARK_B(x) (((x) & 0x7FFF) << 0) | ||
217 | #define G_006D4C_D2MODE_PRIORITY_MARK_B(x) (((x) >> 0) & 0x7FFF) | ||
218 | #define C_006D4C_D2MODE_PRIORITY_MARK_B 0xFFFF8000 | ||
219 | #define S_006D4C_D2MODE_PRIORITY_B_OFF(x) (((x) & 0x1) << 16) | ||
220 | #define G_006D4C_D2MODE_PRIORITY_B_OFF(x) (((x) >> 16) & 0x1) | ||
221 | #define C_006D4C_D2MODE_PRIORITY_B_OFF 0xFFFEFFFF | ||
222 | #define S_006D4C_D2MODE_PRIORITY_B_ALWAYS_ON(x) (((x) & 0x1) << 20) | ||
223 | #define G_006D4C_D2MODE_PRIORITY_B_ALWAYS_ON(x) (((x) >> 20) & 0x1) | ||
224 | #define C_006D4C_D2MODE_PRIORITY_B_ALWAYS_ON 0xFFEFFFFF | ||
225 | #define S_006D4C_D2MODE_PRIORITY_B_FORCE_MASK(x) (((x) & 0x1) << 24) | ||
226 | #define G_006D4C_D2MODE_PRIORITY_B_FORCE_MASK(x) (((x) >> 24) & 0x1) | ||
227 | #define C_006D4C_D2MODE_PRIORITY_B_FORCE_MASK 0xFEFFFFFF | ||
228 | #define R_006D58_LB_MAX_REQ_OUTSTANDING 0x006D58 | ||
229 | #define S_006D58_LB_D1_MAX_REQ_OUTSTANDING(x) (((x) & 0xF) << 0) | ||
230 | #define G_006D58_LB_D1_MAX_REQ_OUTSTANDING(x) (((x) >> 0) & 0xF) | ||
231 | #define C_006D58_LB_D1_MAX_REQ_OUTSTANDING 0xFFFFFFF0 | ||
232 | #define S_006D58_LB_D2_MAX_REQ_OUTSTANDING(x) (((x) & 0xF) << 16) | ||
233 | #define G_006D58_LB_D2_MAX_REQ_OUTSTANDING(x) (((x) >> 16) & 0xF) | ||
234 | #define C_006D58_LB_D2_MAX_REQ_OUTSTANDING 0xFFF0FFFF | ||
235 | |||
236 | |||
237 | #define R_000090_MC_SYSTEM_STATUS 0x000090 | ||
238 | #define S_000090_MC_SYSTEM_IDLE(x) (((x) & 0x1) << 0) | ||
239 | #define G_000090_MC_SYSTEM_IDLE(x) (((x) >> 0) & 0x1) | ||
240 | #define C_000090_MC_SYSTEM_IDLE 0xFFFFFFFE | ||
241 | #define S_000090_MC_SEQUENCER_IDLE(x) (((x) & 0x1) << 1) | ||
242 | #define G_000090_MC_SEQUENCER_IDLE(x) (((x) >> 1) & 0x1) | ||
243 | #define C_000090_MC_SEQUENCER_IDLE 0xFFFFFFFD | ||
244 | #define S_000090_MC_ARBITER_IDLE(x) (((x) & 0x1) << 2) | ||
245 | #define G_000090_MC_ARBITER_IDLE(x) (((x) >> 2) & 0x1) | ||
246 | #define C_000090_MC_ARBITER_IDLE 0xFFFFFFFB | ||
247 | #define S_000090_MC_SELECT_PM(x) (((x) & 0x1) << 3) | ||
248 | #define G_000090_MC_SELECT_PM(x) (((x) >> 3) & 0x1) | ||
249 | #define C_000090_MC_SELECT_PM 0xFFFFFFF7 | ||
250 | #define S_000090_RESERVED4(x) (((x) & 0xF) << 4) | ||
251 | #define G_000090_RESERVED4(x) (((x) >> 4) & 0xF) | ||
252 | #define C_000090_RESERVED4 0xFFFFFF0F | ||
253 | #define S_000090_RESERVED8(x) (((x) & 0xF) << 8) | ||
254 | #define G_000090_RESERVED8(x) (((x) >> 8) & 0xF) | ||
255 | #define C_000090_RESERVED8 0xFFFFF0FF | ||
256 | #define S_000090_RESERVED12(x) (((x) & 0xF) << 12) | ||
257 | #define G_000090_RESERVED12(x) (((x) >> 12) & 0xF) | ||
258 | #define C_000090_RESERVED12 0xFFFF0FFF | ||
259 | #define S_000090_MCA_INIT_EXECUTED(x) (((x) & 0x1) << 16) | ||
260 | #define G_000090_MCA_INIT_EXECUTED(x) (((x) >> 16) & 0x1) | ||
261 | #define C_000090_MCA_INIT_EXECUTED 0xFFFEFFFF | ||
262 | #define S_000090_MCA_IDLE(x) (((x) & 0x1) << 17) | ||
263 | #define G_000090_MCA_IDLE(x) (((x) >> 17) & 0x1) | ||
264 | #define C_000090_MCA_IDLE 0xFFFDFFFF | ||
265 | #define S_000090_MCA_SEQ_IDLE(x) (((x) & 0x1) << 18) | ||
266 | #define G_000090_MCA_SEQ_IDLE(x) (((x) >> 18) & 0x1) | ||
267 | #define C_000090_MCA_SEQ_IDLE 0xFFFBFFFF | ||
268 | #define S_000090_MCA_ARB_IDLE(x) (((x) & 0x1) << 19) | ||
269 | #define G_000090_MCA_ARB_IDLE(x) (((x) >> 19) & 0x1) | ||
270 | #define C_000090_MCA_ARB_IDLE 0xFFF7FFFF | ||
271 | #define S_000090_RESERVED20(x) (((x) & 0xFFF) << 20) | ||
272 | #define G_000090_RESERVED20(x) (((x) >> 20) & 0xFFF) | ||
273 | #define C_000090_RESERVED20 0x000FFFFF | ||
274 | #define R_000100_MCCFG_FB_LOCATION 0x000100 | ||
275 | #define S_000100_MC_FB_START(x) (((x) & 0xFFFF) << 0) | ||
276 | #define G_000100_MC_FB_START(x) (((x) >> 0) & 0xFFFF) | ||
277 | #define C_000100_MC_FB_START 0xFFFF0000 | ||
278 | #define S_000100_MC_FB_TOP(x) (((x) & 0xFFFF) << 16) | ||
279 | #define G_000100_MC_FB_TOP(x) (((x) >> 16) & 0xFFFF) | ||
280 | #define C_000100_MC_FB_TOP 0x0000FFFF | ||
281 | #define R_000104_MC_INIT_MISC_LAT_TIMER 0x000104 | ||
282 | #define S_000104_MC_CPR_INIT_LAT(x) (((x) & 0xF) << 0) | ||
283 | #define G_000104_MC_CPR_INIT_LAT(x) (((x) >> 0) & 0xF) | ||
284 | #define C_000104_MC_CPR_INIT_LAT 0xFFFFFFF0 | ||
285 | #define S_000104_MC_VF_INIT_LAT(x) (((x) & 0xF) << 4) | ||
286 | #define G_000104_MC_VF_INIT_LAT(x) (((x) >> 4) & 0xF) | ||
287 | #define C_000104_MC_VF_INIT_LAT 0xFFFFFF0F | ||
288 | #define S_000104_MC_DISP0R_INIT_LAT(x) (((x) & 0xF) << 8) | ||
289 | #define G_000104_MC_DISP0R_INIT_LAT(x) (((x) >> 8) & 0xF) | ||
290 | #define C_000104_MC_DISP0R_INIT_LAT 0xFFFFF0FF | ||
291 | #define S_000104_MC_DISP1R_INIT_LAT(x) (((x) & 0xF) << 12) | ||
292 | #define G_000104_MC_DISP1R_INIT_LAT(x) (((x) >> 12) & 0xF) | ||
293 | #define C_000104_MC_DISP1R_INIT_LAT 0xFFFF0FFF | ||
294 | #define S_000104_MC_FIXED_INIT_LAT(x) (((x) & 0xF) << 16) | ||
295 | #define G_000104_MC_FIXED_INIT_LAT(x) (((x) >> 16) & 0xF) | ||
296 | #define C_000104_MC_FIXED_INIT_LAT 0xFFF0FFFF | ||
297 | #define S_000104_MC_E2R_INIT_LAT(x) (((x) & 0xF) << 20) | ||
298 | #define G_000104_MC_E2R_INIT_LAT(x) (((x) >> 20) & 0xF) | ||
299 | #define C_000104_MC_E2R_INIT_LAT 0xFF0FFFFF | ||
300 | #define S_000104_SAME_PAGE_PRIO(x) (((x) & 0xF) << 24) | ||
301 | #define G_000104_SAME_PAGE_PRIO(x) (((x) >> 24) & 0xF) | ||
302 | #define C_000104_SAME_PAGE_PRIO 0xF0FFFFFF | ||
303 | #define S_000104_MC_GLOBW_INIT_LAT(x) (((x) & 0xF) << 28) | ||
304 | #define G_000104_MC_GLOBW_INIT_LAT(x) (((x) >> 28) & 0xF) | ||
305 | #define C_000104_MC_GLOBW_INIT_LAT 0x0FFFFFFF | ||
306 | |||
307 | #endif | ||
diff --git a/drivers/gpu/drm/radeon/rs690r.h b/drivers/gpu/drm/radeon/rs690r.h deleted file mode 100644 index c0d9faa2175b..000000000000 --- a/drivers/gpu/drm/radeon/rs690r.h +++ /dev/null | |||
@@ -1,99 +0,0 @@ | |||
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 RS690R_H | ||
29 | #define RS690R_H | ||
30 | |||
31 | /* RS690/RS740 registers */ | ||
32 | #define MC_INDEX 0x0078 | ||
33 | # define MC_INDEX_MASK 0x1FF | ||
34 | # define MC_INDEX_WR_EN (1 << 9) | ||
35 | # define MC_INDEX_WR_ACK 0x7F | ||
36 | #define MC_DATA 0x007C | ||
37 | #define HDP_FB_LOCATION 0x0134 | ||
38 | #define DC_LB_MEMORY_SPLIT 0x6520 | ||
39 | #define DC_LB_MEMORY_SPLIT_MASK 0x00000003 | ||
40 | #define DC_LB_MEMORY_SPLIT_SHIFT 0 | ||
41 | #define DC_LB_MEMORY_SPLIT_D1HALF_D2HALF 0 | ||
42 | #define DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q 1 | ||
43 | #define DC_LB_MEMORY_SPLIT_D1_ONLY 2 | ||
44 | #define DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q 3 | ||
45 | #define DC_LB_MEMORY_SPLIT_SHIFT_MODE (1 << 2) | ||
46 | #define DC_LB_DISP1_END_ADR_SHIFT 4 | ||
47 | #define DC_LB_DISP1_END_ADR_MASK 0x00007FF0 | ||
48 | #define D1MODE_PRIORITY_A_CNT 0x6548 | ||
49 | #define MODE_PRIORITY_MARK_MASK 0x00007FFF | ||
50 | #define MODE_PRIORITY_OFF (1 << 16) | ||
51 | #define MODE_PRIORITY_ALWAYS_ON (1 << 20) | ||
52 | #define MODE_PRIORITY_FORCE_MASK (1 << 24) | ||
53 | #define D1MODE_PRIORITY_B_CNT 0x654C | ||
54 | #define LB_MAX_REQ_OUTSTANDING 0x6D58 | ||
55 | #define LB_D1_MAX_REQ_OUTSTANDING_MASK 0x0000000F | ||
56 | #define LB_D1_MAX_REQ_OUTSTANDING_SHIFT 0 | ||
57 | #define LB_D2_MAX_REQ_OUTSTANDING_MASK 0x000F0000 | ||
58 | #define LB_D2_MAX_REQ_OUTSTANDING_SHIFT 16 | ||
59 | #define DCP_CONTROL 0x6C9C | ||
60 | #define D2MODE_PRIORITY_A_CNT 0x6D48 | ||
61 | #define D2MODE_PRIORITY_B_CNT 0x6D4C | ||
62 | |||
63 | /* MC indirect registers */ | ||
64 | #define MC_STATUS_IDLE (1 << 0) | ||
65 | #define MC_MISC_CNTL 0x18 | ||
66 | #define DISABLE_GTW (1 << 1) | ||
67 | #define GART_INDEX_REG_EN (1 << 12) | ||
68 | #define BLOCK_GFX_D3_EN (1 << 14) | ||
69 | #define GART_FEATURE_ID 0x2B | ||
70 | #define HANG_EN (1 << 11) | ||
71 | #define TLB_ENABLE (1 << 18) | ||
72 | #define P2P_ENABLE (1 << 19) | ||
73 | #define GTW_LAC_EN (1 << 25) | ||
74 | #define LEVEL2_GART (0 << 30) | ||
75 | #define LEVEL1_GART (1 << 30) | ||
76 | #define PDC_EN (1 << 31) | ||
77 | #define GART_BASE 0x2C | ||
78 | #define GART_CACHE_CNTRL 0x2E | ||
79 | # define GART_CACHE_INVALIDATE (1 << 0) | ||
80 | #define MC_STATUS 0x90 | ||
81 | #define MCCFG_FB_LOCATION 0x100 | ||
82 | #define MC_FB_START_MASK 0x0000FFFF | ||
83 | #define MC_FB_START_SHIFT 0 | ||
84 | #define MC_FB_TOP_MASK 0xFFFF0000 | ||
85 | #define MC_FB_TOP_SHIFT 16 | ||
86 | #define MCCFG_AGP_LOCATION 0x101 | ||
87 | #define MC_AGP_START_MASK 0x0000FFFF | ||
88 | #define MC_AGP_START_SHIFT 0 | ||
89 | #define MC_AGP_TOP_MASK 0xFFFF0000 | ||
90 | #define MC_AGP_TOP_SHIFT 16 | ||
91 | #define MCCFG_AGP_BASE 0x102 | ||
92 | #define MCCFG_AGP_BASE_2 0x103 | ||
93 | #define MC_INIT_MISC_LAT_TIMER 0x104 | ||
94 | #define MC_DISP0R_INIT_LAT_SHIFT 8 | ||
95 | #define MC_DISP0R_INIT_LAT_MASK 0x00000F00 | ||
96 | #define MC_DISP1R_INIT_LAT_SHIFT 12 | ||
97 | #define MC_DISP1R_INIT_LAT_MASK 0x0000F000 | ||
98 | |||
99 | #endif | ||