diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2011-05-31 15:42:48 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-06-01 20:47:40 -0400 |
commit | d5c5a72f2a5821ba3ebdbe02bce03345790458aa (patch) | |
tree | cf932ccb82aa19f7917e0c4c5b5292581bebe7bd /drivers/gpu | |
parent | 3b68a26ec058fda2d6b470cdd8fedc5a3c854916 (diff) |
drm/radeon/kms: add support for Llano Fusion APUs
- add gpu init support
- add blit support
- add ucode loader
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 58 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/evergreen_blit_kms.c | 46 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/r600.c | 12 |
3 files changed, 116 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 8f446aadccd6..12984a481880 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
@@ -1433,6 +1433,8 @@ static u32 evergreen_get_tile_pipe_to_backend_map(struct radeon_device *rdev, | |||
1433 | case CHIP_CEDAR: | 1433 | case CHIP_CEDAR: |
1434 | case CHIP_REDWOOD: | 1434 | case CHIP_REDWOOD: |
1435 | case CHIP_PALM: | 1435 | case CHIP_PALM: |
1436 | case CHIP_SUMO: | ||
1437 | case CHIP_SUMO2: | ||
1436 | case CHIP_TURKS: | 1438 | case CHIP_TURKS: |
1437 | case CHIP_CAICOS: | 1439 | case CHIP_CAICOS: |
1438 | force_no_swizzle = false; | 1440 | force_no_swizzle = false; |
@@ -1562,6 +1564,8 @@ static void evergreen_program_channel_remap(struct radeon_device *rdev) | |||
1562 | case CHIP_REDWOOD: | 1564 | case CHIP_REDWOOD: |
1563 | case CHIP_CEDAR: | 1565 | case CHIP_CEDAR: |
1564 | case CHIP_PALM: | 1566 | case CHIP_PALM: |
1567 | case CHIP_SUMO: | ||
1568 | case CHIP_SUMO2: | ||
1565 | case CHIP_TURKS: | 1569 | case CHIP_TURKS: |
1566 | case CHIP_CAICOS: | 1570 | case CHIP_CAICOS: |
1567 | default: | 1571 | default: |
@@ -1707,6 +1711,54 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
1707 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; | 1711 | rdev->config.evergreen.sc_hiz_tile_fifo_size = 0x30; |
1708 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; | 1712 | rdev->config.evergreen.sc_earlyz_tile_fifo_size = 0x130; |
1709 | 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; | ||
1710 | case CHIP_BARTS: | 1762 | case CHIP_BARTS: |
1711 | rdev->config.evergreen.num_ses = 2; | 1763 | rdev->config.evergreen.num_ses = 2; |
1712 | rdev->config.evergreen.max_pipes = 4; | 1764 | rdev->config.evergreen.max_pipes = 4; |
@@ -2054,6 +2106,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2054 | switch (rdev->family) { | 2106 | switch (rdev->family) { |
2055 | case CHIP_CEDAR: | 2107 | case CHIP_CEDAR: |
2056 | case CHIP_PALM: | 2108 | case CHIP_PALM: |
2109 | case CHIP_SUMO: | ||
2110 | case CHIP_SUMO2: | ||
2057 | case CHIP_CAICOS: | 2111 | case CHIP_CAICOS: |
2058 | /* no vertex cache */ | 2112 | /* no vertex cache */ |
2059 | sq_config &= ~VC_ENABLE; | 2113 | sq_config &= ~VC_ENABLE; |
@@ -2075,6 +2129,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2075 | switch (rdev->family) { | 2129 | switch (rdev->family) { |
2076 | case CHIP_CEDAR: | 2130 | case CHIP_CEDAR: |
2077 | case CHIP_PALM: | 2131 | case CHIP_PALM: |
2132 | case CHIP_SUMO: | ||
2133 | case CHIP_SUMO2: | ||
2078 | ps_thread_count = 96; | 2134 | ps_thread_count = 96; |
2079 | break; | 2135 | break; |
2080 | default: | 2136 | default: |
@@ -2114,6 +2170,8 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
2114 | switch (rdev->family) { | 2170 | switch (rdev->family) { |
2115 | case CHIP_CEDAR: | 2171 | case CHIP_CEDAR: |
2116 | case CHIP_PALM: | 2172 | case CHIP_PALM: |
2173 | case CHIP_SUMO: | ||
2174 | case CHIP_SUMO2: | ||
2117 | case CHIP_CAICOS: | 2175 | case CHIP_CAICOS: |
2118 | vgt_cache_invalidation = CACHE_INVALIDATION(TC_ONLY); | 2176 | vgt_cache_invalidation = CACHE_INVALIDATION(TC_ONLY); |
2119 | break; | 2177 | break; |
diff --git a/drivers/gpu/drm/radeon/evergreen_blit_kms.c b/drivers/gpu/drm/radeon/evergreen_blit_kms.c index a60ad28b0389..57f3bc17b87e 100644 --- a/drivers/gpu/drm/radeon/evergreen_blit_kms.c +++ b/drivers/gpu/drm/radeon/evergreen_blit_kms.c | |||
@@ -153,6 +153,8 @@ set_vtx_resource(struct radeon_device *rdev, u64 gpu_addr) | |||
153 | 153 | ||
154 | if ((rdev->family == CHIP_CEDAR) || | 154 | if ((rdev->family == CHIP_CEDAR) || |
155 | (rdev->family == CHIP_PALM) || | 155 | (rdev->family == CHIP_PALM) || |
156 | (rdev->family == CHIP_SUMO) || | ||
157 | (rdev->family == CHIP_SUMO2) || | ||
156 | (rdev->family == CHIP_CAICOS)) | 158 | (rdev->family == CHIP_CAICOS)) |
157 | cp_set_surface_sync(rdev, | 159 | cp_set_surface_sync(rdev, |
158 | PACKET3_TC_ACTION_ENA, 48, gpu_addr); | 160 | PACKET3_TC_ACTION_ENA, 48, gpu_addr); |
@@ -379,6 +381,48 @@ set_default_state(struct radeon_device *rdev) | |||
379 | num_hs_stack_entries = 42; | 381 | num_hs_stack_entries = 42; |
380 | num_ls_stack_entries = 42; | 382 | num_ls_stack_entries = 42; |
381 | break; | 383 | break; |
384 | case CHIP_SUMO: | ||
385 | num_ps_gprs = 93; | ||
386 | num_vs_gprs = 46; | ||
387 | num_temp_gprs = 4; | ||
388 | num_gs_gprs = 31; | ||
389 | num_es_gprs = 31; | ||
390 | num_hs_gprs = 23; | ||
391 | num_ls_gprs = 23; | ||
392 | num_ps_threads = 96; | ||
393 | num_vs_threads = 25; | ||
394 | num_gs_threads = 25; | ||
395 | num_es_threads = 25; | ||
396 | num_hs_threads = 25; | ||
397 | num_ls_threads = 25; | ||
398 | num_ps_stack_entries = 42; | ||
399 | num_vs_stack_entries = 42; | ||
400 | num_gs_stack_entries = 42; | ||
401 | num_es_stack_entries = 42; | ||
402 | num_hs_stack_entries = 42; | ||
403 | num_ls_stack_entries = 42; | ||
404 | break; | ||
405 | case CHIP_SUMO2: | ||
406 | num_ps_gprs = 93; | ||
407 | num_vs_gprs = 46; | ||
408 | num_temp_gprs = 4; | ||
409 | num_gs_gprs = 31; | ||
410 | num_es_gprs = 31; | ||
411 | num_hs_gprs = 23; | ||
412 | num_ls_gprs = 23; | ||
413 | num_ps_threads = 96; | ||
414 | num_vs_threads = 25; | ||
415 | num_gs_threads = 25; | ||
416 | num_es_threads = 25; | ||
417 | num_hs_threads = 25; | ||
418 | num_ls_threads = 25; | ||
419 | num_ps_stack_entries = 85; | ||
420 | num_vs_stack_entries = 85; | ||
421 | num_gs_stack_entries = 85; | ||
422 | num_es_stack_entries = 85; | ||
423 | num_hs_stack_entries = 85; | ||
424 | num_ls_stack_entries = 85; | ||
425 | break; | ||
382 | case CHIP_BARTS: | 426 | case CHIP_BARTS: |
383 | num_ps_gprs = 93; | 427 | num_ps_gprs = 93; |
384 | num_vs_gprs = 46; | 428 | num_vs_gprs = 46; |
@@ -446,6 +490,8 @@ set_default_state(struct radeon_device *rdev) | |||
446 | 490 | ||
447 | if ((rdev->family == CHIP_CEDAR) || | 491 | if ((rdev->family == CHIP_CEDAR) || |
448 | (rdev->family == CHIP_PALM) || | 492 | (rdev->family == CHIP_PALM) || |
493 | (rdev->family == CHIP_SUMO) || | ||
494 | (rdev->family == CHIP_SUMO2) || | ||
449 | (rdev->family == CHIP_CAICOS)) | 495 | (rdev->family == CHIP_CAICOS)) |
450 | sq_config = 0; | 496 | sq_config = 0; |
451 | else | 497 | else |
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c index 6f27593901c7..d74d4d71437f 100644 --- a/drivers/gpu/drm/radeon/r600.c +++ b/drivers/gpu/drm/radeon/r600.c | |||
@@ -87,6 +87,10 @@ MODULE_FIRMWARE("radeon/CYPRESS_rlc.bin"); | |||
87 | MODULE_FIRMWARE("radeon/PALM_pfp.bin"); | 87 | MODULE_FIRMWARE("radeon/PALM_pfp.bin"); |
88 | MODULE_FIRMWARE("radeon/PALM_me.bin"); | 88 | MODULE_FIRMWARE("radeon/PALM_me.bin"); |
89 | MODULE_FIRMWARE("radeon/SUMO_rlc.bin"); | 89 | MODULE_FIRMWARE("radeon/SUMO_rlc.bin"); |
90 | MODULE_FIRMWARE("radeon/SUMO_pfp.bin"); | ||
91 | MODULE_FIRMWARE("radeon/SUMO_me.bin"); | ||
92 | MODULE_FIRMWARE("radeon/SUMO2_pfp.bin"); | ||
93 | MODULE_FIRMWARE("radeon/SUMO2_me.bin"); | ||
90 | 94 | ||
91 | int r600_debugfs_mc_info_init(struct radeon_device *rdev); | 95 | int r600_debugfs_mc_info_init(struct radeon_device *rdev); |
92 | 96 | ||
@@ -2024,6 +2028,14 @@ int r600_init_microcode(struct radeon_device *rdev) | |||
2024 | chip_name = "PALM"; | 2028 | chip_name = "PALM"; |
2025 | rlc_chip_name = "SUMO"; | 2029 | rlc_chip_name = "SUMO"; |
2026 | break; | 2030 | break; |
2031 | case CHIP_SUMO: | ||
2032 | chip_name = "SUMO"; | ||
2033 | rlc_chip_name = "SUMO"; | ||
2034 | break; | ||
2035 | case CHIP_SUMO2: | ||
2036 | chip_name = "SUMO2"; | ||
2037 | rlc_chip_name = "SUMO"; | ||
2038 | break; | ||
2027 | default: BUG(); | 2039 | default: BUG(); |
2028 | } | 2040 | } |
2029 | 2041 | ||