diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 22:09:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 22:09:17 -0400 |
commit | 12871a0bd67dd4db4418e1daafcd46e9d329ef10 (patch) | |
tree | faf782dd816040d6cdaaccd7113956d8d29cd0e5 /drivers/gpu/drm/radeon/evergreen.c | |
parent | ecff4fcc7bbaf060646d2160123f8dc02605a047 (diff) | |
parent | f3aeceac61b6e2f3167717ea1793472108e47564 (diff) |
Merge branch 'drm-radeon-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-radeon-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm/radeon/kms/atom: fix PHY init
drm/radeon/kms: add missing Evergreen texture formats to the CS parser
drm/radeon/kms: viewport height has to be even
drm/radeon/kms: remove duplicate reg from r600 safe regs
drm/radeon/kms: add support for Llano Fusion APUs
drm/radeon/kms: add llano pci ids
drm/radeon/kms: fill in asic struct for llano
drm/radeon/kms: add family ids for llano APUs
drm/radeon: fix oops in ttm reserve when pageflipping (v2)
drm/radeon/kms: clean up the radeon kms Kconfig
drm/radeon/kms: fix thermal sensor reading on juniper
drm/radeon/kms: add missing case for cayman thermal sensor
drm/radeon/kms: add blit support for cayman (v2)
drm/radeon/kms/blit: workaround some hw issues on evergreen+
Diffstat (limited to 'drivers/gpu/drm/radeon/evergreen.c')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 104 |
1 files changed, 90 insertions, 14 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 7c37638095f7..98ea597bc76d 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -88,21 +88,39 @@ u32 evergreen_page_flip(struct radeon_device *rdev, int crtc_id, u64 crtc_base) | |||
88 | /* get temperature in millidegrees */ | 88 | /* get temperature in millidegrees */ |
89 | int evergreen_get_temp(struct radeon_device *rdev) | 89 | int evergreen_get_temp(struct radeon_device *rdev) |
90 | { | 90 | { |
91 | u32 temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >> | 91 | u32 temp, toffset, actual_temp = 0; |
92 | ASIC_T_SHIFT; | 92 | |
93 | u32 actual_temp = 0; | 93 | if (rdev->family == CHIP_JUNIPER) { |
94 | 94 | toffset = (RREG32(CG_THERMAL_CTRL) & TOFFSET_MASK) >> | |
95 | if (temp & 0x400) | 95 | TOFFSET_SHIFT; |
96 | actual_temp = -256; | 96 | temp = (RREG32(CG_TS0_STATUS) & TS0_ADC_DOUT_MASK) >> |
97 | else if (temp & 0x200) | 97 | TS0_ADC_DOUT_SHIFT; |
98 | actual_temp = 255; | 98 | |
99 | else if (temp & 0x100) { | 99 | if (toffset & 0x100) |
100 | actual_temp = temp & 0x1ff; | 100 | actual_temp = temp / 2 - (0x200 - toffset); |
101 | actual_temp |= ~0x1ff; | 101 | else |
102 | } else | 102 | actual_temp = temp / 2 + toffset; |
103 | actual_temp = temp & 0xff; | 103 | |
104 | actual_temp = actual_temp * 1000; | ||
105 | |||
106 | } else { | ||
107 | temp = (RREG32(CG_MULT_THERMAL_STATUS) & ASIC_T_MASK) >> | ||
108 | ASIC_T_SHIFT; | ||
104 | 109 | ||
105 | return (actual_temp * 1000) / 2; | 110 | if (temp & 0x400) |
111 | actual_temp = -256; | ||
112 | else if (temp & 0x200) | ||
113 | actual_temp = 255; | ||
114 | else if (temp & 0x100) { | ||
115 | actual_temp = temp & 0x1ff; | ||
116 | actual_temp |= ~0x1ff; | ||
117 | } else | ||
118 | actual_temp = temp & 0xff; | ||
119 | |||
120 | actual_temp = (actual_temp * 1000) / 2; | ||
121 | } | ||
122 | |||
123 | return actual_temp; | ||
106 | } | 124 | } |
107 | 125 | ||
108 | int sumo_get_temp(struct radeon_device *rdev) | 126 | int sumo_get_temp(struct radeon_device *rdev) |
@@ -1415,6 +1433,8 @@ static u32 evergreen_get_tile_pipe_to_backend_map(struct radeon_device *rdev, | |||
1415 | case CHIP_CEDAR: | 1433 | case CHIP_CEDAR: |
1416 | case CHIP_REDWOOD: | 1434 | case CHIP_REDWOOD: |
1417 | case CHIP_PALM: | 1435 | case CHIP_PALM: |
1436 | case CHIP_SUMO: | ||
1437 | case CHIP_SUMO2: | ||
1418 | case CHIP_TURKS: | 1438 | case CHIP_TURKS: |
1419 | case CHIP_CAICOS: | 1439 | case CHIP_CAICOS: |
1420 | force_no_swizzle = false; | 1440 | force_no_swizzle = false; |
@@ -1544,6 +1564,8 @@ static void evergreen_program_channel_remap(struct radeon_device *rdev) | |||
1544 | case CHIP_REDWOOD: | 1564 | case CHIP_REDWOOD: |
1545 | case CHIP_CEDAR: | 1565 | case CHIP_CEDAR: |
1546 | case CHIP_PALM: | 1566 | case CHIP_PALM: |
1567 | case CHIP_SUMO: | ||
1568 | case CHIP_SUMO2: | ||
1547 | case CHIP_TURKS: | 1569 | case CHIP_TURKS: |
1548 | case CHIP_CAICOS: | 1570 | case CHIP_CAICOS: |
1549 | default: | 1571 | default: |
@@ -1689,6 +1711,54 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
1689 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; | 1711 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; |
1690 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; | 1712 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; |
1691 | break; | 1713 | break; |
1714 | case CHIP_SUMO: | ||
1715 | rdev->config.evergreen.num_ses = 1; | ||
1716 | rdev->config.evergreen.max_pipes = 4; | ||
1717 | rdev->config.evergreen.max_tile_pipes = 2; | ||
1718 | if (rdev->pdev->device == 0x9648) | ||
1719 | rdev->config.evergreen.max_simds = 3; | ||
1720 | else if ((rdev->pdev->device == 0x9647) || | ||
1721 | (rdev->pdev->device == 0x964a)) | ||
1722 | rdev->config.evergreen.max_simds = 4; | ||
1723 | else | ||
1724 | rdev->config.evergreen.max_simds = 5; | ||
1725 | rdev->config.evergreen.max_backends = 2 * rdev->config.evergreen.num_ses; | ||
1726 | rdev->config.evergreen.max_gprs = 256; | ||
1727 | rdev->config.evergreen.max_threads = 248; | ||
1728 | rdev->config.evergreen.max_gs_threads = 32; | ||
1729 | rdev->config.evergreen.max_stack_entries = 256; | ||
1730 | rdev->config.evergreen.sx_num_of_sets = 4; | ||
1731 | rdev->config.evergreen.sx_max_export_size = 256; | ||
1732 | rdev->config.evergreen.sx_max_export_pos_size = 64; | ||
1733 | rdev->config.evergreen.sx_max_export_smx_size = 192; | ||
1734 | rdev->config.evergreen.max_hw_contexts = 8; | ||
1735 | rdev->config.evergreen.sq_num_cf_insts = 2; | ||
1736 | |||
1737 | rdev->config.evergreen.sc_prim_fifo_size = 0x40; | ||
1738 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; | ||
1739 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; | ||
1740 | break; | ||
1741 | case CHIP_SUMO2: | ||
1742 | rdev->config.evergreen.num_ses = 1; | ||
1743 | rdev->config.evergreen.max_pipes = 4; | ||
1744 | rdev->config.evergreen.max_tile_pipes = 4; | ||
1745 | rdev->config.evergreen.max_simds = 2; | ||
1746 | rdev->config.evergreen.max_backends = 1 * rdev->config.evergreen.num_ses; | ||
1747 | rdev->config.evergreen.max_gprs = 256; | ||
1748 | rdev->config.evergreen.max_threads = 248; | ||
1749 | rdev->config.evergreen.max_gs_threads = 32; | ||
1750 | rdev->config.evergreen.max_stack_entries = 512; | ||
1751 | rdev->config.evergreen.sx_num_of_sets = 4; | ||
1752 | rdev->config.evergreen.sx_max_export_size = 256; | ||
1753 | rdev->config.evergreen.sx_max_export_pos_size = 64; | ||
1754 | rdev->config.evergreen.sx_max_export_smx_size = 192; | ||
1755 | rdev->config.evergreen.max_hw_contexts = 8; | ||
1756 | rdev->config.evergreen.sq_num_cf_insts = 2; | ||
1757 | |||
1758 | rdev->config.evergreen.sc_prim_fifo_size = 0x40; | ||
1759 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; | ||
1760 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; | ||
1761 | break; | ||
1692 | case CHIP_BARTS: | 1762 | case CHIP_BARTS: |
1693 | rdev->config.evergreen.num_ses = 2; | 1763 | rdev->config.evergreen.num_ses = 2; |
1694 | rdev->config.evergreen.max_pipes = 4; | 1764 | rdev->config.evergreen.max_pipes = 4; |
@@ -2039,6 +2109,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2039 | switch (rdev->family) { | 2109 | switch (rdev->family) { |
2040 | case CHIP_CEDAR: | 2110 | case CHIP_CEDAR: |
2041 | case CHIP_PALM: | 2111 | case CHIP_PALM: |
2112 | case CHIP_SUMO: | ||
2113 | case CHIP_SUMO2: | ||
2042 | case CHIP_CAICOS: | 2114 | case CHIP_CAICOS: |
2043 | /* no vertex cache */ | 2115 | /* no vertex cache */ |
2044 | sq_config &= ~VC_ENABLE; | 2116 | sq_config &= ~VC_ENABLE; |
@@ -2060,6 +2132,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2060 | switch (rdev->family) { | 2132 | switch (rdev->family) { |
2061 | case CHIP_CEDAR: | 2133 | case CHIP_CEDAR: |
2062 | case CHIP_PALM: | 2134 | case CHIP_PALM: |
2135 | case CHIP_SUMO: | ||
2136 | case CHIP_SUMO2: | ||
2063 | ps_thread_count = 96; | 2137 | ps_thread_count = 96; |
2064 | break; | 2138 | break; |
2065 | default: | 2139 | default: |
@@ -2099,6 +2173,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2099 | switch (rdev->family) { | 2173 | switch (rdev->family) { |
2100 | case CHIP_CEDAR: | 2174 | case CHIP_CEDAR: |
2101 | case CHIP_PALM: | 2175 | case CHIP_PALM: |
2176 | case CHIP_SUMO: | ||
2177 | case CHIP_SUMO2: | ||
2102 | case CHIP_CAICOS: | 2178 | case CHIP_CAICOS: |
2103 | vgt_cache_invalidation = CACHE_INVALIDATION(TC_ONLY); | 2179 | vgt_cache_invalidation = CACHE_INVALIDATION(TC_ONLY); |
2104 | break; | 2180 | break; |