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 | |
| 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>
| -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 | ||
