diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/r100.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r100.c | 55 |
1 files changed, 43 insertions, 12 deletions
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c index a89a15ab524d..e817a0bb5eb4 100644 --- a/drivers/gpu/drm/radeon/r100.c +++ b/drivers/gpu/drm/radeon/r100.c | |||
@@ -141,7 +141,7 @@ void r100_pm_get_dynpm_state(struct radeon_device *rdev) | |||
141 | /* only one clock mode per power state */ | 141 | /* only one clock mode per power state */ |
142 | rdev->pm.requested_clock_mode_index = 0; | 142 | rdev->pm.requested_clock_mode_index = 0; |
143 | 143 | ||
144 | DRM_DEBUG("Requested: e: %d m: %d p: %d\n", | 144 | DRM_DEBUG_DRIVER("Requested: e: %d m: %d p: %d\n", |
145 | rdev->pm.power_state[rdev->pm.requested_power_state_index]. | 145 | rdev->pm.power_state[rdev->pm.requested_power_state_index]. |
146 | clock_info[rdev->pm.requested_clock_mode_index].sclk, | 146 | clock_info[rdev->pm.requested_clock_mode_index].sclk, |
147 | rdev->pm.power_state[rdev->pm.requested_power_state_index]. | 147 | rdev->pm.power_state[rdev->pm.requested_power_state_index]. |
@@ -276,7 +276,7 @@ void r100_pm_misc(struct radeon_device *rdev) | |||
276 | rdev->pm.power_state[rdev->pm.current_power_state_index].pcie_lanes)) { | 276 | rdev->pm.power_state[rdev->pm.current_power_state_index].pcie_lanes)) { |
277 | radeon_set_pcie_lanes(rdev, | 277 | radeon_set_pcie_lanes(rdev, |
278 | ps->pcie_lanes); | 278 | ps->pcie_lanes); |
279 | DRM_DEBUG("Setting: p: %d\n", ps->pcie_lanes); | 279 | DRM_DEBUG_DRIVER("Setting: p: %d\n", ps->pcie_lanes); |
280 | } | 280 | } |
281 | } | 281 | } |
282 | 282 | ||
@@ -849,7 +849,7 @@ static int r100_cp_init_microcode(struct radeon_device *rdev) | |||
849 | const char *fw_name = NULL; | 849 | const char *fw_name = NULL; |
850 | int err; | 850 | int err; |
851 | 851 | ||
852 | DRM_DEBUG("\n"); | 852 | DRM_DEBUG_KMS("\n"); |
853 | 853 | ||
854 | pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0); | 854 | pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0); |
855 | err = IS_ERR(pdev); | 855 | err = IS_ERR(pdev); |
@@ -1803,6 +1803,11 @@ static int r100_packet3_check(struct radeon_cs_parser *p, | |||
1803 | return r; | 1803 | return r; |
1804 | break; | 1804 | break; |
1805 | /* triggers drawing using indices to vertex buffer */ | 1805 | /* triggers drawing using indices to vertex buffer */ |
1806 | case PACKET3_3D_CLEAR_HIZ: | ||
1807 | case PACKET3_3D_CLEAR_ZMASK: | ||
1808 | if (p->rdev->hyperz_filp != p->filp) | ||
1809 | return -EINVAL; | ||
1810 | break; | ||
1806 | case PACKET3_NOP: | 1811 | case PACKET3_NOP: |
1807 | break; | 1812 | break; |
1808 | default: | 1813 | default: |
@@ -2295,8 +2300,8 @@ void r100_vram_init_sizes(struct radeon_device *rdev) | |||
2295 | u64 config_aper_size; | 2300 | u64 config_aper_size; |
2296 | 2301 | ||
2297 | /* work out accessible VRAM */ | 2302 | /* work out accessible VRAM */ |
2298 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); | 2303 | rdev->mc.aper_base = pci_resource_start(rdev->pdev, 0); |
2299 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); | 2304 | rdev->mc.aper_size = pci_resource_len(rdev->pdev, 0); |
2300 | rdev->mc.visible_vram_size = r100_get_accessible_vram(rdev); | 2305 | rdev->mc.visible_vram_size = r100_get_accessible_vram(rdev); |
2301 | /* FIXME we don't use the second aperture yet when we could use it */ | 2306 | /* FIXME we don't use the second aperture yet when we could use it */ |
2302 | if (rdev->mc.visible_vram_size > rdev->mc.aper_size) | 2307 | if (rdev->mc.visible_vram_size > rdev->mc.aper_size) |
@@ -2364,11 +2369,10 @@ void r100_mc_init(struct radeon_device *rdev) | |||
2364 | */ | 2369 | */ |
2365 | void r100_pll_errata_after_index(struct radeon_device *rdev) | 2370 | void r100_pll_errata_after_index(struct radeon_device *rdev) |
2366 | { | 2371 | { |
2367 | if (!(rdev->pll_errata & CHIP_ERRATA_PLL_DUMMYREADS)) { | 2372 | if (rdev->pll_errata & CHIP_ERRATA_PLL_DUMMYREADS) { |
2368 | return; | 2373 | (void)RREG32(RADEON_CLOCK_CNTL_DATA); |
2374 | (void)RREG32(RADEON_CRTC_GEN_CNTL); | ||
2369 | } | 2375 | } |
2370 | (void)RREG32(RADEON_CLOCK_CNTL_DATA); | ||
2371 | (void)RREG32(RADEON_CRTC_GEN_CNTL); | ||
2372 | } | 2376 | } |
2373 | 2377 | ||
2374 | static void r100_pll_errata_after_data(struct radeon_device *rdev) | 2378 | static void r100_pll_errata_after_data(struct radeon_device *rdev) |
@@ -2643,7 +2647,7 @@ int r100_set_surface_reg(struct radeon_device *rdev, int reg, | |||
2643 | flags |= pitch / 8; | 2647 | flags |= pitch / 8; |
2644 | 2648 | ||
2645 | 2649 | ||
2646 | DRM_DEBUG("writing surface %d %d %x %x\n", reg, flags, offset, offset+obj_size-1); | 2650 | DRM_DEBUG_KMS("writing surface %d %d %x %x\n", reg, flags, offset, offset+obj_size-1); |
2647 | WREG32(RADEON_SURFACE0_INFO + surf_index, flags); | 2651 | WREG32(RADEON_SURFACE0_INFO + surf_index, flags); |
2648 | WREG32(RADEON_SURFACE0_LOWER_BOUND + surf_index, offset); | 2652 | WREG32(RADEON_SURFACE0_LOWER_BOUND + surf_index, offset); |
2649 | WREG32(RADEON_SURFACE0_UPPER_BOUND + surf_index, offset + obj_size - 1); | 2653 | WREG32(RADEON_SURFACE0_UPPER_BOUND + surf_index, offset + obj_size - 1); |
@@ -3039,7 +3043,7 @@ void r100_bandwidth_update(struct radeon_device *rdev) | |||
3039 | } | 3043 | } |
3040 | #endif | 3044 | #endif |
3041 | 3045 | ||
3042 | DRM_DEBUG("GRPH_BUFFER_CNTL from to %x\n", | 3046 | DRM_DEBUG_KMS("GRPH_BUFFER_CNTL from to %x\n", |
3043 | /* (unsigned int)info->SavedReg->grph_buffer_cntl, */ | 3047 | /* (unsigned int)info->SavedReg->grph_buffer_cntl, */ |
3044 | (unsigned int)RREG32(RADEON_GRPH_BUFFER_CNTL)); | 3048 | (unsigned int)RREG32(RADEON_GRPH_BUFFER_CNTL)); |
3045 | } | 3049 | } |
@@ -3135,7 +3139,7 @@ void r100_bandwidth_update(struct radeon_device *rdev) | |||
3135 | WREG32(RS400_DISP1_REQ_CNTL1, 0x28FBC3AC); | 3139 | WREG32(RS400_DISP1_REQ_CNTL1, 0x28FBC3AC); |
3136 | } | 3140 | } |
3137 | 3141 | ||
3138 | DRM_DEBUG("GRPH2_BUFFER_CNTL from to %x\n", | 3142 | DRM_DEBUG_KMS("GRPH2_BUFFER_CNTL from to %x\n", |
3139 | (unsigned int)RREG32(RADEON_GRPH2_BUFFER_CNTL)); | 3143 | (unsigned int)RREG32(RADEON_GRPH2_BUFFER_CNTL)); |
3140 | } | 3144 | } |
3141 | } | 3145 | } |
@@ -3809,6 +3813,31 @@ void r100_fini(struct radeon_device *rdev) | |||
3809 | rdev->bios = NULL; | 3813 | rdev->bios = NULL; |
3810 | } | 3814 | } |
3811 | 3815 | ||
3816 | /* | ||
3817 | * Due to how kexec works, it can leave the hw fully initialised when it | ||
3818 | * boots the new kernel. However doing our init sequence with the CP and | ||
3819 | * WB stuff setup causes GPU hangs on the RN50 at least. So at startup | ||
3820 | * do some quick sanity checks and restore sane values to avoid this | ||
3821 | * problem. | ||
3822 | */ | ||
3823 | void r100_restore_sanity(struct radeon_device *rdev) | ||
3824 | { | ||
3825 | u32 tmp; | ||
3826 | |||
3827 | tmp = RREG32(RADEON_CP_CSQ_CNTL); | ||
3828 | if (tmp) { | ||
3829 | WREG32(RADEON_CP_CSQ_CNTL, 0); | ||
3830 | } | ||
3831 | tmp = RREG32(RADEON_CP_RB_CNTL); | ||
3832 | if (tmp) { | ||
3833 | WREG32(RADEON_CP_RB_CNTL, 0); | ||
3834 | } | ||
3835 | tmp = RREG32(RADEON_SCRATCH_UMSK); | ||
3836 | if (tmp) { | ||
3837 | WREG32(RADEON_SCRATCH_UMSK, 0); | ||
3838 | } | ||
3839 | } | ||
3840 | |||
3812 | int r100_init(struct radeon_device *rdev) | 3841 | int r100_init(struct radeon_device *rdev) |
3813 | { | 3842 | { |
3814 | int r; | 3843 | int r; |
@@ -3821,6 +3850,8 @@ int r100_init(struct radeon_device *rdev) | |||
3821 | radeon_scratch_init(rdev); | 3850 | radeon_scratch_init(rdev); |
3822 | /* Initialize surface registers */ | 3851 | /* Initialize surface registers */ |
3823 | radeon_surface_init(rdev); | 3852 | radeon_surface_init(rdev); |
3853 | /* sanity check some register to avoid hangs like after kexec */ | ||
3854 | r100_restore_sanity(rdev); | ||
3824 | /* TODO: disable VGA need to use VGA request */ | 3855 | /* TODO: disable VGA need to use VGA request */ |
3825 | /* BIOS*/ | 3856 | /* BIOS*/ |
3826 | if (!radeon_get_bios(rdev)) { | 3857 | if (!radeon_get_bios(rdev)) { |