diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/rs690.c')
-rw-r--r-- | drivers/gpu/drm/radeon/rs690.c | 174 |
1 files changed, 96 insertions, 78 deletions
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c index 27547175cf93..bbf3da790fd5 100644 --- a/drivers/gpu/drm/radeon/rs690.c +++ b/drivers/gpu/drm/radeon/rs690.c | |||
@@ -27,6 +27,7 @@ | |||
27 | */ | 27 | */ |
28 | #include "drmP.h" | 28 | #include "drmP.h" |
29 | #include "radeon.h" | 29 | #include "radeon.h" |
30 | #include "radeon_asic.h" | ||
30 | #include "atom.h" | 31 | #include "atom.h" |
31 | #include "rs690d.h" | 32 | #include "rs690d.h" |
32 | 33 | ||
@@ -57,42 +58,57 @@ static void rs690_gpu_init(struct radeon_device *rdev) | |||
57 | } | 58 | } |
58 | } | 59 | } |
59 | 60 | ||
61 | union igp_info { | ||
62 | struct _ATOM_INTEGRATED_SYSTEM_INFO info; | ||
63 | struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 info_v2; | ||
64 | }; | ||
65 | |||
60 | void rs690_pm_info(struct radeon_device *rdev) | 66 | void rs690_pm_info(struct radeon_device *rdev) |
61 | { | 67 | { |
62 | int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); | 68 | int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo); |
63 | struct _ATOM_INTEGRATED_SYSTEM_INFO *info; | 69 | union igp_info *info; |
64 | struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 *info_v2; | ||
65 | void *ptr; | ||
66 | uint16_t data_offset; | 70 | uint16_t data_offset; |
67 | uint8_t frev, crev; | 71 | uint8_t frev, crev; |
68 | fixed20_12 tmp; | 72 | fixed20_12 tmp; |
69 | 73 | ||
70 | atom_parse_data_header(rdev->mode_info.atom_context, index, NULL, | 74 | if (atom_parse_data_header(rdev->mode_info.atom_context, index, NULL, |
71 | &frev, &crev, &data_offset); | 75 | &frev, &crev, &data_offset)) { |
72 | ptr = rdev->mode_info.atom_context->bios + data_offset; | 76 | info = (union igp_info *)(rdev->mode_info.atom_context->bios + data_offset); |
73 | info = (struct _ATOM_INTEGRATED_SYSTEM_INFO *)ptr; | 77 | |
74 | info_v2 = (struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 *)ptr; | 78 | /* Get various system informations from bios */ |
75 | /* Get various system informations from bios */ | 79 | switch (crev) { |
76 | switch (crev) { | 80 | case 1: |
77 | case 1: | 81 | tmp.full = rfixed_const(100); |
78 | tmp.full = rfixed_const(100); | 82 | rdev->pm.igp_sideport_mclk.full = rfixed_const(info->info.ulBootUpMemoryClock); |
79 | rdev->pm.igp_sideport_mclk.full = rfixed_const(info->ulBootUpMemoryClock); | 83 | rdev->pm.igp_sideport_mclk.full = rfixed_div(rdev->pm.igp_sideport_mclk, tmp); |
80 | rdev->pm.igp_sideport_mclk.full = rfixed_div(rdev->pm.igp_sideport_mclk, tmp); | 84 | rdev->pm.igp_system_mclk.full = rfixed_const(le16_to_cpu(info->info.usK8MemoryClock)); |
81 | rdev->pm.igp_system_mclk.full = rfixed_const(le16_to_cpu(info->usK8MemoryClock)); | 85 | rdev->pm.igp_ht_link_clk.full = rfixed_const(le16_to_cpu(info->info.usFSBClock)); |
82 | rdev->pm.igp_ht_link_clk.full = rfixed_const(le16_to_cpu(info->usFSBClock)); | 86 | rdev->pm.igp_ht_link_width.full = rfixed_const(info->info.ucHTLinkWidth); |
83 | rdev->pm.igp_ht_link_width.full = rfixed_const(info->ucHTLinkWidth); | 87 | break; |
84 | break; | 88 | case 2: |
85 | case 2: | 89 | tmp.full = rfixed_const(100); |
86 | tmp.full = rfixed_const(100); | 90 | rdev->pm.igp_sideport_mclk.full = rfixed_const(info->info_v2.ulBootUpSidePortClock); |
87 | rdev->pm.igp_sideport_mclk.full = rfixed_const(info_v2->ulBootUpSidePortClock); | 91 | rdev->pm.igp_sideport_mclk.full = rfixed_div(rdev->pm.igp_sideport_mclk, tmp); |
88 | rdev->pm.igp_sideport_mclk.full = rfixed_div(rdev->pm.igp_sideport_mclk, tmp); | 92 | rdev->pm.igp_system_mclk.full = rfixed_const(info->info_v2.ulBootUpUMAClock); |
89 | rdev->pm.igp_system_mclk.full = rfixed_const(info_v2->ulBootUpUMAClock); | 93 | rdev->pm.igp_system_mclk.full = rfixed_div(rdev->pm.igp_system_mclk, tmp); |
90 | rdev->pm.igp_system_mclk.full = rfixed_div(rdev->pm.igp_system_mclk, tmp); | 94 | rdev->pm.igp_ht_link_clk.full = rfixed_const(info->info_v2.ulHTLinkFreq); |
91 | rdev->pm.igp_ht_link_clk.full = rfixed_const(info_v2->ulHTLinkFreq); | 95 | rdev->pm.igp_ht_link_clk.full = rfixed_div(rdev->pm.igp_ht_link_clk, tmp); |
92 | rdev->pm.igp_ht_link_clk.full = rfixed_div(rdev->pm.igp_ht_link_clk, tmp); | 96 | rdev->pm.igp_ht_link_width.full = rfixed_const(le16_to_cpu(info->info_v2.usMinHTLinkWidth)); |
93 | rdev->pm.igp_ht_link_width.full = rfixed_const(le16_to_cpu(info_v2->usMinHTLinkWidth)); | 97 | break; |
94 | break; | 98 | default: |
95 | default: | 99 | tmp.full = rfixed_const(100); |
100 | /* We assume the slower possible clock ie worst case */ | ||
101 | /* DDR 333Mhz */ | ||
102 | rdev->pm.igp_sideport_mclk.full = rfixed_const(333); | ||
103 | /* FIXME: system clock ? */ | ||
104 | rdev->pm.igp_system_mclk.full = rfixed_const(100); | ||
105 | rdev->pm.igp_system_mclk.full = rfixed_div(rdev->pm.igp_system_mclk, tmp); | ||
106 | rdev->pm.igp_ht_link_clk.full = rfixed_const(200); | ||
107 | rdev->pm.igp_ht_link_width.full = rfixed_const(8); | ||
108 | DRM_ERROR("No integrated system info for your GPU, using safe default\n"); | ||
109 | break; | ||
110 | } | ||
111 | } else { | ||
96 | tmp.full = rfixed_const(100); | 112 | tmp.full = rfixed_const(100); |
97 | /* We assume the slower possible clock ie worst case */ | 113 | /* We assume the slower possible clock ie worst case */ |
98 | /* DDR 333Mhz */ | 114 | /* DDR 333Mhz */ |
@@ -103,7 +119,6 @@ void rs690_pm_info(struct radeon_device *rdev) | |||
103 | rdev->pm.igp_ht_link_clk.full = rfixed_const(200); | 119 | rdev->pm.igp_ht_link_clk.full = rfixed_const(200); |
104 | rdev->pm.igp_ht_link_width.full = rfixed_const(8); | 120 | rdev->pm.igp_ht_link_width.full = rfixed_const(8); |
105 | DRM_ERROR("No integrated system info for your GPU, using safe default\n"); | 121 | DRM_ERROR("No integrated system info for your GPU, using safe default\n"); |
106 | break; | ||
107 | } | 122 | } |
108 | /* Compute various bandwidth */ | 123 | /* Compute various bandwidth */ |
109 | /* k8_bandwidth = (memory_clk / 2) * 2 * 8 * 0.5 = memory_clk * 4 */ | 124 | /* k8_bandwidth = (memory_clk / 2) * 2 * 8 * 0.5 = memory_clk * 4 */ |
@@ -129,36 +144,25 @@ void rs690_pm_info(struct radeon_device *rdev) | |||
129 | rdev->pm.sideport_bandwidth.full = rfixed_div(rdev->pm.sideport_bandwidth, tmp); | 144 | rdev->pm.sideport_bandwidth.full = rfixed_div(rdev->pm.sideport_bandwidth, tmp); |
130 | } | 145 | } |
131 | 146 | ||
132 | void rs690_vram_info(struct radeon_device *rdev) | 147 | void rs690_mc_init(struct radeon_device *rdev) |
133 | { | 148 | { |
134 | uint32_t tmp; | 149 | u64 base; |
135 | fixed20_12 a; | ||
136 | 150 | ||
137 | rs400_gart_adjust_size(rdev); | 151 | rs400_gart_adjust_size(rdev); |
138 | /* DDR for all card after R300 & IGP */ | ||
139 | rdev->mc.vram_is_ddr = true; | 152 | rdev->mc.vram_is_ddr = true; |
140 | /* FIXME: is this correct for RS690/RS740 ? */ | 153 | rdev->mc.vram_width = 128; |
141 | tmp = RREG32(RADEON_MEM_CNTL); | ||
142 | if (tmp & R300_MEM_NUM_CHANNELS_MASK) { | ||
143 | rdev->mc.vram_width = 128; | ||
144 | } else { | ||
145 | rdev->mc.vram_width = 64; | ||
146 | } | ||
147 | rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); | 154 | rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); |
148 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; | 155 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; |
149 | |||
150 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); | 156 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
151 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); | 157 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
158 | rdev->mc.visible_vram_size = rdev->mc.aper_size; | ||
159 | base = RREG32_MC(R_000100_MCCFG_FB_LOCATION); | ||
160 | base = G_000100_MC_FB_START(base) << 16; | ||
152 | rs690_pm_info(rdev); | 161 | rs690_pm_info(rdev); |
153 | /* FIXME: we should enforce default clock in case GPU is not in | 162 | rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); |
154 | * default setup | 163 | radeon_vram_location(rdev, &rdev->mc, base); |
155 | */ | 164 | radeon_gtt_location(rdev, &rdev->mc); |
156 | a.full = rfixed_const(100); | 165 | radeon_update_bandwidth_info(rdev); |
157 | rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk); | ||
158 | rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a); | ||
159 | a.full = rfixed_const(16); | ||
160 | /* core_bandwidth = sclk(Mhz) * 16 */ | ||
161 | rdev->pm.core_bandwidth.full = rfixed_div(rdev->pm.sclk, a); | ||
162 | } | 166 | } |
163 | 167 | ||
164 | void rs690_line_buffer_adjust(struct radeon_device *rdev, | 168 | void rs690_line_buffer_adjust(struct radeon_device *rdev, |
@@ -244,8 +248,9 @@ void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, | |||
244 | 248 | ||
245 | b.full = rfixed_const(mode->crtc_hdisplay); | 249 | b.full = rfixed_const(mode->crtc_hdisplay); |
246 | c.full = rfixed_const(256); | 250 | c.full = rfixed_const(256); |
247 | a.full = rfixed_mul(wm->num_line_pair, b); | 251 | a.full = rfixed_div(b, c); |
248 | request_fifo_depth.full = rfixed_div(a, c); | 252 | request_fifo_depth.full = rfixed_mul(a, wm->num_line_pair); |
253 | request_fifo_depth.full = rfixed_ceil(request_fifo_depth); | ||
249 | if (a.full < rfixed_const(4)) { | 254 | if (a.full < rfixed_const(4)) { |
250 | wm->lb_request_fifo_depth = 4; | 255 | wm->lb_request_fifo_depth = 4; |
251 | } else { | 256 | } else { |
@@ -374,6 +379,7 @@ void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, | |||
374 | a.full = rfixed_const(16); | 379 | a.full = rfixed_const(16); |
375 | wm->priority_mark_max.full = rfixed_const(crtc->base.mode.crtc_hdisplay); | 380 | wm->priority_mark_max.full = rfixed_const(crtc->base.mode.crtc_hdisplay); |
376 | wm->priority_mark_max.full = rfixed_div(wm->priority_mark_max, a); | 381 | wm->priority_mark_max.full = rfixed_div(wm->priority_mark_max, a); |
382 | wm->priority_mark_max.full = rfixed_ceil(wm->priority_mark_max); | ||
377 | 383 | ||
378 | /* Determine estimated width */ | 384 | /* Determine estimated width */ |
379 | estimated_width.full = tolerable_latency.full - wm->worst_case_latency.full; | 385 | estimated_width.full = tolerable_latency.full - wm->worst_case_latency.full; |
@@ -383,6 +389,7 @@ void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, | |||
383 | } else { | 389 | } else { |
384 | a.full = rfixed_const(16); | 390 | a.full = rfixed_const(16); |
385 | wm->priority_mark.full = rfixed_div(estimated_width, a); | 391 | wm->priority_mark.full = rfixed_div(estimated_width, a); |
392 | wm->priority_mark.full = rfixed_ceil(wm->priority_mark); | ||
386 | wm->priority_mark.full = wm->priority_mark_max.full - wm->priority_mark.full; | 393 | wm->priority_mark.full = wm->priority_mark_max.full - wm->priority_mark.full; |
387 | } | 394 | } |
388 | } | 395 | } |
@@ -393,10 +400,12 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
393 | struct drm_display_mode *mode1 = NULL; | 400 | struct drm_display_mode *mode1 = NULL; |
394 | struct rs690_watermark wm0; | 401 | struct rs690_watermark wm0; |
395 | struct rs690_watermark wm1; | 402 | struct rs690_watermark wm1; |
396 | u32 tmp; | 403 | u32 tmp, d1mode_priority_a_cnt, d2mode_priority_a_cnt; |
397 | fixed20_12 priority_mark02, priority_mark12, fill_rate; | 404 | fixed20_12 priority_mark02, priority_mark12, fill_rate; |
398 | fixed20_12 a, b; | 405 | fixed20_12 a, b; |
399 | 406 | ||
407 | radeon_update_display_priority(rdev); | ||
408 | |||
400 | if (rdev->mode_info.crtcs[0]->base.enabled) | 409 | if (rdev->mode_info.crtcs[0]->base.enabled) |
401 | mode0 = &rdev->mode_info.crtcs[0]->base.mode; | 410 | mode0 = &rdev->mode_info.crtcs[0]->base.mode; |
402 | if (rdev->mode_info.crtcs[1]->base.enabled) | 411 | if (rdev->mode_info.crtcs[1]->base.enabled) |
@@ -406,7 +415,8 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
406 | * modes if the user specifies HIGH for displaypriority | 415 | * modes if the user specifies HIGH for displaypriority |
407 | * option. | 416 | * option. |
408 | */ | 417 | */ |
409 | if (rdev->disp_priority == 2) { | 418 | if ((rdev->disp_priority == 2) && |
419 | ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740))) { | ||
410 | tmp = RREG32_MC(R_000104_MC_INIT_MISC_LAT_TIMER); | 420 | tmp = RREG32_MC(R_000104_MC_INIT_MISC_LAT_TIMER); |
411 | tmp &= C_000104_MC_DISP0R_INIT_LAT; | 421 | tmp &= C_000104_MC_DISP0R_INIT_LAT; |
412 | tmp &= C_000104_MC_DISP1R_INIT_LAT; | 422 | tmp &= C_000104_MC_DISP1R_INIT_LAT; |
@@ -481,10 +491,16 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
481 | priority_mark12.full = 0; | 491 | priority_mark12.full = 0; |
482 | if (wm1.priority_mark_max.full > priority_mark12.full) | 492 | if (wm1.priority_mark_max.full > priority_mark12.full) |
483 | priority_mark12.full = wm1.priority_mark_max.full; | 493 | priority_mark12.full = wm1.priority_mark_max.full; |
484 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); | 494 | d1mode_priority_a_cnt = rfixed_trunc(priority_mark02); |
485 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); | 495 | d2mode_priority_a_cnt = rfixed_trunc(priority_mark12); |
486 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); | 496 | if (rdev->disp_priority == 2) { |
487 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); | 497 | d1mode_priority_a_cnt |= S_006548_D1MODE_PRIORITY_A_ALWAYS_ON(1); |
498 | d2mode_priority_a_cnt |= S_006D48_D2MODE_PRIORITY_A_ALWAYS_ON(1); | ||
499 | } | ||
500 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, d1mode_priority_a_cnt); | ||
501 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, d1mode_priority_a_cnt); | ||
502 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, d2mode_priority_a_cnt); | ||
503 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, d2mode_priority_a_cnt); | ||
488 | } else if (mode0) { | 504 | } else if (mode0) { |
489 | if (rfixed_trunc(wm0.dbpp) > 64) | 505 | if (rfixed_trunc(wm0.dbpp) > 64) |
490 | a.full = rfixed_mul(wm0.dbpp, wm0.num_line_pair); | 506 | a.full = rfixed_mul(wm0.dbpp, wm0.num_line_pair); |
@@ -511,8 +527,11 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
511 | priority_mark02.full = 0; | 527 | priority_mark02.full = 0; |
512 | if (wm0.priority_mark_max.full > priority_mark02.full) | 528 | if (wm0.priority_mark_max.full > priority_mark02.full) |
513 | priority_mark02.full = wm0.priority_mark_max.full; | 529 | priority_mark02.full = wm0.priority_mark_max.full; |
514 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark02)); | 530 | d1mode_priority_a_cnt = rfixed_trunc(priority_mark02); |
515 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark02)); | 531 | if (rdev->disp_priority == 2) |
532 | d1mode_priority_a_cnt |= S_006548_D1MODE_PRIORITY_A_ALWAYS_ON(1); | ||
533 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, d1mode_priority_a_cnt); | ||
534 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, d1mode_priority_a_cnt); | ||
516 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, | 535 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, |
517 | S_006D48_D2MODE_PRIORITY_A_OFF(1)); | 536 | S_006D48_D2MODE_PRIORITY_A_OFF(1)); |
518 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, | 537 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, |
@@ -543,12 +562,15 @@ void rs690_bandwidth_update(struct radeon_device *rdev) | |||
543 | priority_mark12.full = 0; | 562 | priority_mark12.full = 0; |
544 | if (wm1.priority_mark_max.full > priority_mark12.full) | 563 | if (wm1.priority_mark_max.full > priority_mark12.full) |
545 | priority_mark12.full = wm1.priority_mark_max.full; | 564 | priority_mark12.full = wm1.priority_mark_max.full; |
565 | d2mode_priority_a_cnt = rfixed_trunc(priority_mark12); | ||
566 | if (rdev->disp_priority == 2) | ||
567 | d2mode_priority_a_cnt |= S_006D48_D2MODE_PRIORITY_A_ALWAYS_ON(1); | ||
546 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, | 568 | WREG32(R_006548_D1MODE_PRIORITY_A_CNT, |
547 | S_006548_D1MODE_PRIORITY_A_OFF(1)); | 569 | S_006548_D1MODE_PRIORITY_A_OFF(1)); |
548 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, | 570 | WREG32(R_00654C_D1MODE_PRIORITY_B_CNT, |
549 | S_00654C_D1MODE_PRIORITY_B_OFF(1)); | 571 | S_00654C_D1MODE_PRIORITY_B_OFF(1)); |
550 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, rfixed_trunc(priority_mark12)); | 572 | WREG32(R_006D48_D2MODE_PRIORITY_A_CNT, d2mode_priority_a_cnt); |
551 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, rfixed_trunc(priority_mark12)); | 573 | WREG32(R_006D4C_D2MODE_PRIORITY_B_CNT, d2mode_priority_a_cnt); |
552 | } | 574 | } |
553 | } | 575 | } |
554 | 576 | ||
@@ -605,8 +627,8 @@ static int rs690_startup(struct radeon_device *rdev) | |||
605 | if (r) | 627 | if (r) |
606 | return r; | 628 | return r; |
607 | /* Enable IRQ */ | 629 | /* Enable IRQ */ |
608 | rdev->irq.sw_int = true; | ||
609 | rs600_irq_set(rdev); | 630 | rs600_irq_set(rdev); |
631 | rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); | ||
610 | /* 1M ring buffer */ | 632 | /* 1M ring buffer */ |
611 | r = r100_cp_init(rdev, 1024 * 1024); | 633 | r = r100_cp_init(rdev, 1024 * 1024); |
612 | if (r) { | 634 | if (r) { |
@@ -640,6 +662,8 @@ int rs690_resume(struct radeon_device *rdev) | |||
640 | atom_asic_init(rdev->mode_info.atom_context); | 662 | atom_asic_init(rdev->mode_info.atom_context); |
641 | /* Resume clock after posting */ | 663 | /* Resume clock after posting */ |
642 | rv515_clock_startup(rdev); | 664 | rv515_clock_startup(rdev); |
665 | /* Initialize surface registers */ | ||
666 | radeon_surface_init(rdev); | ||
643 | return rs690_startup(rdev); | 667 | return rs690_startup(rdev); |
644 | } | 668 | } |
645 | 669 | ||
@@ -654,7 +678,7 @@ int rs690_suspend(struct radeon_device *rdev) | |||
654 | 678 | ||
655 | void rs690_fini(struct radeon_device *rdev) | 679 | void rs690_fini(struct radeon_device *rdev) |
656 | { | 680 | { |
657 | rs690_suspend(rdev); | 681 | radeon_pm_fini(rdev); |
658 | r100_cp_fini(rdev); | 682 | r100_cp_fini(rdev); |
659 | r100_wb_fini(rdev); | 683 | r100_wb_fini(rdev); |
660 | r100_ib_fini(rdev); | 684 | r100_ib_fini(rdev); |
@@ -662,7 +686,7 @@ void rs690_fini(struct radeon_device *rdev) | |||
662 | rs400_gart_fini(rdev); | 686 | rs400_gart_fini(rdev); |
663 | radeon_irq_kms_fini(rdev); | 687 | radeon_irq_kms_fini(rdev); |
664 | radeon_fence_driver_fini(rdev); | 688 | radeon_fence_driver_fini(rdev); |
665 | radeon_object_fini(rdev); | 689 | radeon_bo_fini(rdev); |
666 | radeon_atombios_fini(rdev); | 690 | radeon_atombios_fini(rdev); |
667 | kfree(rdev->bios); | 691 | kfree(rdev->bios); |
668 | rdev->bios = NULL; | 692 | rdev->bios = NULL; |
@@ -700,20 +724,15 @@ int rs690_init(struct radeon_device *rdev) | |||
700 | RREG32(R_0007C0_CP_STAT)); | 724 | RREG32(R_0007C0_CP_STAT)); |
701 | } | 725 | } |
702 | /* check if cards are posted or not */ | 726 | /* check if cards are posted or not */ |
703 | if (!radeon_card_posted(rdev) && rdev->bios) { | 727 | if (radeon_boot_test_post_card(rdev) == false) |
704 | DRM_INFO("GPU not posted. posting now...\n"); | 728 | return -EINVAL; |
705 | atom_asic_init(rdev->mode_info.atom_context); | 729 | |
706 | } | ||
707 | /* Initialize clocks */ | 730 | /* Initialize clocks */ |
708 | radeon_get_clock_info(rdev->ddev); | 731 | radeon_get_clock_info(rdev->ddev); |
709 | /* Initialize power management */ | 732 | /* Initialize power management */ |
710 | radeon_pm_init(rdev); | 733 | radeon_pm_init(rdev); |
711 | /* Get vram informations */ | 734 | /* initialize memory controller */ |
712 | rs690_vram_info(rdev); | 735 | rs690_mc_init(rdev); |
713 | /* Initialize memory controller (also test AGP) */ | ||
714 | r = r420_mc_init(rdev); | ||
715 | if (r) | ||
716 | return r; | ||
717 | rv515_debugfs(rdev); | 736 | rv515_debugfs(rdev); |
718 | /* Fence driver */ | 737 | /* Fence driver */ |
719 | r = radeon_fence_driver_init(rdev); | 738 | r = radeon_fence_driver_init(rdev); |
@@ -723,7 +742,7 @@ int rs690_init(struct radeon_device *rdev) | |||
723 | if (r) | 742 | if (r) |
724 | return r; | 743 | return r; |
725 | /* Memory manager */ | 744 | /* Memory manager */ |
726 | r = radeon_object_init(rdev); | 745 | r = radeon_bo_init(rdev); |
727 | if (r) | 746 | if (r) |
728 | return r; | 747 | return r; |
729 | r = rs400_gart_init(rdev); | 748 | r = rs400_gart_init(rdev); |
@@ -735,7 +754,6 @@ int rs690_init(struct radeon_device *rdev) | |||
735 | if (r) { | 754 | if (r) { |
736 | /* Somethings want wront with the accel init stop accel */ | 755 | /* Somethings want wront with the accel init stop accel */ |
737 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); | 756 | dev_err(rdev->dev, "Disabling GPU acceleration\n"); |
738 | rs690_suspend(rdev); | ||
739 | r100_cp_fini(rdev); | 757 | r100_cp_fini(rdev); |
740 | r100_wb_fini(rdev); | 758 | r100_wb_fini(rdev); |
741 | r100_ib_fini(rdev); | 759 | r100_ib_fini(rdev); |