Lines Matching refs:rdev

35 int rs690_mc_wait_for_idle(struct radeon_device *rdev)  in rs690_mc_wait_for_idle()  argument
40 for (i = 0; i < rdev->usec_timeout; i++) { in rs690_mc_wait_for_idle()
50 static void rs690_gpu_init(struct radeon_device *rdev) in rs690_gpu_init() argument
53 r420_pipes_init(rdev); in rs690_gpu_init()
54 if (rs690_mc_wait_for_idle(rdev)) { in rs690_gpu_init()
65 void rs690_pm_info(struct radeon_device *rdev) in rs690_pm_info() argument
73 if (atom_parse_data_header(rdev->mode_info.atom_context, index, NULL, in rs690_pm_info()
75 info = (union igp_info *)(rdev->mode_info.atom_context->bios + data_offset); in rs690_pm_info()
81 rdev->pm.igp_sideport_mclk.full = dfixed_const(le32_to_cpu(info->info.ulBootUpMemoryClock)); in rs690_pm_info()
82 rdev->pm.igp_sideport_mclk.full = dfixed_div(rdev->pm.igp_sideport_mclk, tmp); in rs690_pm_info()
84 rdev->pm.igp_system_mclk.full = dfixed_const(le16_to_cpu(info->info.usK8MemoryClock)); in rs690_pm_info()
85 else if (rdev->clock.default_mclk) { in rs690_pm_info()
86 rdev->pm.igp_system_mclk.full = dfixed_const(rdev->clock.default_mclk); in rs690_pm_info()
87 rdev->pm.igp_system_mclk.full = dfixed_div(rdev->pm.igp_system_mclk, tmp); in rs690_pm_info()
89 rdev->pm.igp_system_mclk.full = dfixed_const(400); in rs690_pm_info()
90 rdev->pm.igp_ht_link_clk.full = dfixed_const(le16_to_cpu(info->info.usFSBClock)); in rs690_pm_info()
91 rdev->pm.igp_ht_link_width.full = dfixed_const(info->info.ucHTLinkWidth); in rs690_pm_info()
95 rdev->pm.igp_sideport_mclk.full = dfixed_const(le32_to_cpu(info->info_v2.ulBootUpSidePortClock)); in rs690_pm_info()
96 rdev->pm.igp_sideport_mclk.full = dfixed_div(rdev->pm.igp_sideport_mclk, tmp); in rs690_pm_info()
98 rdev->pm.igp_system_mclk.full = dfixed_const(le32_to_cpu(info->info_v2.ulBootUpUMAClock)); in rs690_pm_info()
99 else if (rdev->clock.default_mclk) in rs690_pm_info()
100 rdev->pm.igp_system_mclk.full = dfixed_const(rdev->clock.default_mclk); in rs690_pm_info()
102 rdev->pm.igp_system_mclk.full = dfixed_const(66700); in rs690_pm_info()
103 rdev->pm.igp_system_mclk.full = dfixed_div(rdev->pm.igp_system_mclk, tmp); in rs690_pm_info()
104 rdev->pm.igp_ht_link_clk.full = dfixed_const(le32_to_cpu(info->info_v2.ulHTLinkFreq)); in rs690_pm_info()
105 rdev->pm.igp_ht_link_clk.full = dfixed_div(rdev->pm.igp_ht_link_clk, tmp); in rs690_pm_info()
106 rdev->pm.igp_ht_link_width.full = dfixed_const(le16_to_cpu(info->info_v2.usMinHTLinkWidth)); in rs690_pm_info()
110 rdev->pm.igp_sideport_mclk.full = dfixed_const(200); in rs690_pm_info()
111 rdev->pm.igp_system_mclk.full = dfixed_const(200); in rs690_pm_info()
112 rdev->pm.igp_ht_link_clk.full = dfixed_const(1000); in rs690_pm_info()
113 rdev->pm.igp_ht_link_width.full = dfixed_const(8); in rs690_pm_info()
119 rdev->pm.igp_sideport_mclk.full = dfixed_const(200); in rs690_pm_info()
120 rdev->pm.igp_system_mclk.full = dfixed_const(200); in rs690_pm_info()
121 rdev->pm.igp_ht_link_clk.full = dfixed_const(1000); in rs690_pm_info()
122 rdev->pm.igp_ht_link_width.full = dfixed_const(8); in rs690_pm_info()
128 rdev->pm.k8_bandwidth.full = dfixed_mul(rdev->pm.igp_system_mclk, tmp); in rs690_pm_info()
133 rdev->pm.ht_bandwidth.full = dfixed_mul(rdev->pm.igp_ht_link_clk, in rs690_pm_info()
134 rdev->pm.igp_ht_link_width); in rs690_pm_info()
135 rdev->pm.ht_bandwidth.full = dfixed_div(rdev->pm.ht_bandwidth, tmp); in rs690_pm_info()
136 if (tmp.full < rdev->pm.max_bandwidth.full) { in rs690_pm_info()
138 rdev->pm.max_bandwidth.full = tmp.full; in rs690_pm_info()
144 rdev->pm.sideport_bandwidth.full = dfixed_mul(rdev->pm.igp_sideport_mclk, tmp); in rs690_pm_info()
146 rdev->pm.sideport_bandwidth.full = dfixed_div(rdev->pm.sideport_bandwidth, tmp); in rs690_pm_info()
149 static void rs690_mc_init(struct radeon_device *rdev) in rs690_mc_init() argument
155 rs400_gart_adjust_size(rdev); in rs690_mc_init()
156 rdev->mc.vram_is_ddr = true; in rs690_mc_init()
157 rdev->mc.vram_width = 128; in rs690_mc_init()
158 rdev->mc.real_vram_size = RREG32(RADEON_CONFIG_MEMSIZE); in rs690_mc_init()
159 rdev->mc.mc_vram_size = rdev->mc.real_vram_size; in rs690_mc_init()
160 rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); in rs690_mc_init()
161 rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); in rs690_mc_init()
162 rdev->mc.visible_vram_size = rdev->mc.aper_size; in rs690_mc_init()
165 rdev->mc.igp_sideport_enabled = radeon_atombios_sideport_present(rdev); in rs690_mc_init()
170 if (rdev->mc.igp_sideport_enabled && in rs690_mc_init()
171 (rdev->mc.real_vram_size == (384 * 1024 * 1024))) { in rs690_mc_init()
173 rdev->mc.real_vram_size -= 128 * 1024 * 1024; in rs690_mc_init()
174 rdev->mc.mc_vram_size = rdev->mc.real_vram_size; in rs690_mc_init()
178 rdev->fastfb_working = false; in rs690_mc_init()
183 if (k8_addr + rdev->mc.visible_vram_size < 0x100000000ULL) in rs690_mc_init()
189 if (rdev->mc.igp_sideport_enabled == false && radeon_fastfb == 1) { in rs690_mc_init()
191 (unsigned long long)rdev->mc.aper_base, k8_addr); in rs690_mc_init()
192 rdev->mc.aper_base = (resource_size_t)k8_addr; in rs690_mc_init()
193 rdev->fastfb_working = true; in rs690_mc_init()
197 rs690_pm_info(rdev); in rs690_mc_init()
198 radeon_vram_location(rdev, &rdev->mc, base); in rs690_mc_init()
199 rdev->mc.gtt_base_align = rdev->mc.gtt_size - 1; in rs690_mc_init()
200 radeon_gtt_location(rdev, &rdev->mc); in rs690_mc_init()
201 radeon_update_bandwidth_info(rdev); in rs690_mc_init()
204 void rs690_line_buffer_adjust(struct radeon_device *rdev, in rs690_line_buffer_adjust() argument
252 rdev->mode_info.crtcs[0]->lb_vblank_lead_lines = DIV_ROUND_UP(lb_size, mode1->crtc_hdisplay); in rs690_line_buffer_adjust()
255 rdev->mode_info.crtcs[1]->lb_vblank_lead_lines = DIV_ROUND_UP(lb_size, mode2->crtc_hdisplay); in rs690_line_buffer_adjust()
271 static void rs690_crtc_bandwidth_compute(struct radeon_device *rdev, in rs690_crtc_bandwidth_compute() argument
289 if (((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880)) && in rs690_crtc_bandwidth_compute()
290 (rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) in rs690_crtc_bandwidth_compute()
291 selected_sclk = radeon_dpm_get_sclk(rdev, low); in rs690_crtc_bandwidth_compute()
293 selected_sclk = rdev->pm.current_sclk; in rs690_crtc_bandwidth_compute()
302 core_bandwidth.full = dfixed_div(rdev->pm.sclk, a); in rs690_crtc_bandwidth_compute()
365 if (rdev->mc.igp_sideport_enabled) { in rs690_crtc_bandwidth_compute()
366 if (max_bandwidth.full > rdev->pm.sideport_bandwidth.full && in rs690_crtc_bandwidth_compute()
367 rdev->pm.sideport_bandwidth.full) in rs690_crtc_bandwidth_compute()
368 max_bandwidth = rdev->pm.sideport_bandwidth; in rs690_crtc_bandwidth_compute()
371 b.full = dfixed_div(rdev->pm.igp_sideport_mclk, a); in rs690_crtc_bandwidth_compute()
375 if (max_bandwidth.full > rdev->pm.k8_bandwidth.full && in rs690_crtc_bandwidth_compute()
376 rdev->pm.k8_bandwidth.full) in rs690_crtc_bandwidth_compute()
377 max_bandwidth = rdev->pm.k8_bandwidth; in rs690_crtc_bandwidth_compute()
378 if (max_bandwidth.full > rdev->pm.ht_bandwidth.full && in rs690_crtc_bandwidth_compute()
379 rdev->pm.ht_bandwidth.full) in rs690_crtc_bandwidth_compute()
380 max_bandwidth = rdev->pm.ht_bandwidth; in rs690_crtc_bandwidth_compute()
459 static void rs690_compute_mode_priority(struct radeon_device *rdev, in rs690_compute_mode_priority() argument
522 if (rdev->disp_priority == 2) { in rs690_compute_mode_priority()
551 if (rdev->disp_priority == 2) in rs690_compute_mode_priority()
578 if (rdev->disp_priority == 2) in rs690_compute_mode_priority()
583 void rs690_bandwidth_update(struct radeon_device *rdev) in rs690_bandwidth_update() argument
593 if (!rdev->mode_info.mode_config_initialized) in rs690_bandwidth_update()
596 radeon_update_display_priority(rdev); in rs690_bandwidth_update()
598 if (rdev->mode_info.crtcs[0]->base.enabled) in rs690_bandwidth_update()
599 mode0 = &rdev->mode_info.crtcs[0]->base.mode; in rs690_bandwidth_update()
600 if (rdev->mode_info.crtcs[1]->base.enabled) in rs690_bandwidth_update()
601 mode1 = &rdev->mode_info.crtcs[1]->base.mode; in rs690_bandwidth_update()
607 if ((rdev->disp_priority == 2) && in rs690_bandwidth_update()
608 ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740))) { in rs690_bandwidth_update()
618 rs690_line_buffer_adjust(rdev, mode0, mode1); in rs690_bandwidth_update()
620 if ((rdev->family == CHIP_RS690) || (rdev->family == CHIP_RS740)) in rs690_bandwidth_update()
622 if ((rdev->family == CHIP_RS780) || (rdev->family == CHIP_RS880)) in rs690_bandwidth_update()
625 rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[0], &wm0_high, false); in rs690_bandwidth_update()
626 rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[1], &wm1_high, false); in rs690_bandwidth_update()
628 rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[0], &wm0_low, true); in rs690_bandwidth_update()
629 rs690_crtc_bandwidth_compute(rdev, rdev->mode_info.crtcs[1], &wm1_low, true); in rs690_bandwidth_update()
635 rs690_compute_mode_priority(rdev, in rs690_bandwidth_update()
639 rs690_compute_mode_priority(rdev, in rs690_bandwidth_update()
650 uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg) in rs690_mc_rreg() argument
655 spin_lock_irqsave(&rdev->mc_idx_lock, flags); in rs690_mc_rreg()
659 spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); in rs690_mc_rreg()
663 void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) in rs690_mc_wreg() argument
667 spin_lock_irqsave(&rdev->mc_idx_lock, flags); in rs690_mc_wreg()
672 spin_unlock_irqrestore(&rdev->mc_idx_lock, flags); in rs690_mc_wreg()
675 static void rs690_mc_program(struct radeon_device *rdev) in rs690_mc_program() argument
680 rv515_mc_stop(rdev, &save); in rs690_mc_program()
683 if (rs690_mc_wait_for_idle(rdev)) in rs690_mc_program()
684 dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n"); in rs690_mc_program()
687 S_000100_MC_FB_START(rdev->mc.vram_start >> 16) | in rs690_mc_program()
688 S_000100_MC_FB_TOP(rdev->mc.vram_end >> 16)); in rs690_mc_program()
690 S_000134_HDP_FB_START(rdev->mc.vram_start >> 16)); in rs690_mc_program()
692 rv515_mc_resume(rdev, &save); in rs690_mc_program()
695 static int rs690_startup(struct radeon_device *rdev) in rs690_startup() argument
699 rs690_mc_program(rdev); in rs690_startup()
701 rv515_clock_startup(rdev); in rs690_startup()
703 rs690_gpu_init(rdev); in rs690_startup()
706 r = rs400_gart_enable(rdev); in rs690_startup()
711 r = radeon_wb_init(rdev); in rs690_startup()
715 r = radeon_fence_driver_start_ring(rdev, RADEON_RING_TYPE_GFX_INDEX); in rs690_startup()
717 dev_err(rdev->dev, "failed initializing CP fences (%d).\n", r); in rs690_startup()
722 if (!rdev->irq.installed) { in rs690_startup()
723 r = radeon_irq_kms_init(rdev); in rs690_startup()
728 rs600_irq_set(rdev); in rs690_startup()
729 rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL); in rs690_startup()
731 r = r100_cp_init(rdev, 1024 * 1024); in rs690_startup()
733 dev_err(rdev->dev, "failed initializing CP (%d).\n", r); in rs690_startup()
737 r = radeon_ib_pool_init(rdev); in rs690_startup()
739 dev_err(rdev->dev, "IB initialization failed (%d).\n", r); in rs690_startup()
743 r = radeon_audio_init(rdev); in rs690_startup()
745 dev_err(rdev->dev, "failed initializing audio\n"); in rs690_startup()
752 int rs690_resume(struct radeon_device *rdev) in rs690_resume() argument
757 rs400_gart_disable(rdev); in rs690_resume()
759 rv515_clock_startup(rdev); in rs690_resume()
761 if (radeon_asic_reset(rdev)) { in rs690_resume()
762 dev_warn(rdev->dev, "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n", in rs690_resume()
767 atom_asic_init(rdev->mode_info.atom_context); in rs690_resume()
769 rv515_clock_startup(rdev); in rs690_resume()
771 radeon_surface_init(rdev); in rs690_resume()
773 rdev->accel_working = true; in rs690_resume()
774 r = rs690_startup(rdev); in rs690_resume()
776 rdev->accel_working = false; in rs690_resume()
781 int rs690_suspend(struct radeon_device *rdev) in rs690_suspend() argument
783 radeon_pm_suspend(rdev); in rs690_suspend()
784 radeon_audio_fini(rdev); in rs690_suspend()
785 r100_cp_disable(rdev); in rs690_suspend()
786 radeon_wb_disable(rdev); in rs690_suspend()
787 rs600_irq_disable(rdev); in rs690_suspend()
788 rs400_gart_disable(rdev); in rs690_suspend()
792 void rs690_fini(struct radeon_device *rdev) in rs690_fini() argument
794 radeon_pm_fini(rdev); in rs690_fini()
795 radeon_audio_fini(rdev); in rs690_fini()
796 r100_cp_fini(rdev); in rs690_fini()
797 radeon_wb_fini(rdev); in rs690_fini()
798 radeon_ib_pool_fini(rdev); in rs690_fini()
799 radeon_gem_fini(rdev); in rs690_fini()
800 rs400_gart_fini(rdev); in rs690_fini()
801 radeon_irq_kms_fini(rdev); in rs690_fini()
802 radeon_fence_driver_fini(rdev); in rs690_fini()
803 radeon_bo_fini(rdev); in rs690_fini()
804 radeon_atombios_fini(rdev); in rs690_fini()
805 kfree(rdev->bios); in rs690_fini()
806 rdev->bios = NULL; in rs690_fini()
809 int rs690_init(struct radeon_device *rdev) in rs690_init() argument
814 rv515_vga_render_disable(rdev); in rs690_init()
816 radeon_scratch_init(rdev); in rs690_init()
818 radeon_surface_init(rdev); in rs690_init()
820 r100_restore_sanity(rdev); in rs690_init()
823 if (!radeon_get_bios(rdev)) { in rs690_init()
824 if (ASIC_IS_AVIVO(rdev)) in rs690_init()
827 if (rdev->is_atom_bios) { in rs690_init()
828 r = radeon_atombios_init(rdev); in rs690_init()
832 dev_err(rdev->dev, "Expecting atombios for RV515 GPU\n"); in rs690_init()
836 if (radeon_asic_reset(rdev)) { in rs690_init()
837 dev_warn(rdev->dev, in rs690_init()
843 if (radeon_boot_test_post_card(rdev) == false) in rs690_init()
847 radeon_get_clock_info(rdev->ddev); in rs690_init()
849 rs690_mc_init(rdev); in rs690_init()
850 rv515_debugfs(rdev); in rs690_init()
852 r = radeon_fence_driver_init(rdev); in rs690_init()
856 r = radeon_bo_init(rdev); in rs690_init()
859 r = rs400_gart_init(rdev); in rs690_init()
862 rs600_set_safe_registers(rdev); in rs690_init()
865 radeon_pm_init(rdev); in rs690_init()
867 rdev->accel_working = true; in rs690_init()
868 r = rs690_startup(rdev); in rs690_init()
871 dev_err(rdev->dev, "Disabling GPU acceleration\n"); in rs690_init()
872 r100_cp_fini(rdev); in rs690_init()
873 radeon_wb_fini(rdev); in rs690_init()
874 radeon_ib_pool_fini(rdev); in rs690_init()
875 rs400_gart_fini(rdev); in rs690_init()
876 radeon_irq_kms_fini(rdev); in rs690_init()
877 rdev->accel_working = false; in rs690_init()