diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 21:09:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-12 21:09:18 -0400 |
commit | 6b702462cbe5b6f372966a53f4465d745d86b65c (patch) | |
tree | 19a8d090b284bb804e8a2ffa38fa51b58118db6a /drivers/gpu/drm/radeon/r600_cp.c | |
parent | 947ec0b0c1e7e80eef4fe64f7763a06d0cf04d2e (diff) | |
parent | 3c24475c1e4e8d10e50df161d8c4f1d382997a7c (diff) |
Merge branch 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (50 commits)
drm: include kernel list header file in hashtab header
drm: Export hash table functionality.
drm: Split out the mm declarations in a separate header. Add atomic operations.
drm/radeon: add support for RV790.
drm/radeon: add rv740 drm support.
drm_calloc_large: check right size, check integer overflow, use GFP_ZERO
drm: Eliminate magic I2C frobbing when reading EDID
drm/i915: duplicate desired mode for use by fbcon.
drm/via: vfree() no need checking before calling it
drm: Replace DRM_DEBUG with DRM_DEBUG_DRIVER in i915 driver
drm: Replace DRM_DEBUG with DRM_DEBUG_MODE in drm_mode
drm/i915: Replace DRM_DEBUG with DRM_DEBUG_KMS in intel_sdvo
drm/i915: replace DRM_DEBUG with DRM_DEBUG_KMS in intel_lvds
drm: add separate drm debugging levels
radeon: remove _DRM_DRIVER from the preadded sarea map
drm: don't associate _DRM_DRIVER maps with a master
drm: simplify kcalloc() call to kzalloc().
intelfb: fix spelling of "CLOCK"
drm: fix LOCK_TEST_WITH_RETURN macro
drm/i915: Hook connector to encoder during load detection (fixes tv/vga detect)
...
Diffstat (limited to 'drivers/gpu/drm/radeon/r600_cp.c')
-rw-r--r-- | drivers/gpu/drm/radeon/r600_cp.c | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c index bc9d09dfa8e7..146f3570af8e 100644 --- a/drivers/gpu/drm/radeon/r600_cp.c +++ b/drivers/gpu/drm/radeon/r600_cp.c | |||
@@ -478,26 +478,27 @@ static void r700_cp_load_microcode(drm_radeon_private_t *dev_priv) | |||
478 | 478 | ||
479 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV770)) { | 479 | if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV770)) { |
480 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); | 480 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); |
481 | DRM_INFO("Loading RV770 PFP Microcode\n"); | 481 | DRM_INFO("Loading RV770/RV790 PFP Microcode\n"); |
482 | for (i = 0; i < R700_PFP_UCODE_SIZE; i++) | 482 | for (i = 0; i < R700_PFP_UCODE_SIZE; i++) |
483 | RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV770_pfp_microcode[i]); | 483 | RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV770_pfp_microcode[i]); |
484 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); | 484 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); |
485 | 485 | ||
486 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); | 486 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); |
487 | DRM_INFO("Loading RV770 CP Microcode\n"); | 487 | DRM_INFO("Loading RV770/RV790 CP Microcode\n"); |
488 | for (i = 0; i < R700_PM4_UCODE_SIZE; i++) | 488 | for (i = 0; i < R700_PM4_UCODE_SIZE; i++) |
489 | RADEON_WRITE(R600_CP_ME_RAM_DATA, RV770_cp_microcode[i]); | 489 | RADEON_WRITE(R600_CP_ME_RAM_DATA, RV770_cp_microcode[i]); |
490 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); | 490 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); |
491 | 491 | ||
492 | } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV730)) { | 492 | } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV730) || |
493 | ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV740)) { | ||
493 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); | 494 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); |
494 | DRM_INFO("Loading RV730 PFP Microcode\n"); | 495 | DRM_INFO("Loading RV730/RV740 PFP Microcode\n"); |
495 | for (i = 0; i < R700_PFP_UCODE_SIZE; i++) | 496 | for (i = 0; i < R700_PFP_UCODE_SIZE; i++) |
496 | RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV730_pfp_microcode[i]); | 497 | RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV730_pfp_microcode[i]); |
497 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); | 498 | RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0); |
498 | 499 | ||
499 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); | 500 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); |
500 | DRM_INFO("Loading RV730 CP Microcode\n"); | 501 | DRM_INFO("Loading RV730/RV740 CP Microcode\n"); |
501 | for (i = 0; i < R700_PM4_UCODE_SIZE; i++) | 502 | for (i = 0; i < R700_PM4_UCODE_SIZE; i++) |
502 | RADEON_WRITE(R600_CP_ME_RAM_DATA, RV730_cp_microcode[i]); | 503 | RADEON_WRITE(R600_CP_ME_RAM_DATA, RV730_cp_microcode[i]); |
503 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); | 504 | RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0); |
@@ -1324,6 +1325,10 @@ static void r700_gfx_init(struct drm_device *dev, | |||
1324 | dev_priv->r700_sc_prim_fifo_size = 0xf9; | 1325 | dev_priv->r700_sc_prim_fifo_size = 0xf9; |
1325 | dev_priv->r700_sc_hiz_tile_fifo_size = 0x30; | 1326 | dev_priv->r700_sc_hiz_tile_fifo_size = 0x30; |
1326 | dev_priv->r700_sc_earlyz_tile_fifo_fize = 0x130; | 1327 | dev_priv->r700_sc_earlyz_tile_fifo_fize = 0x130; |
1328 | if (dev_priv->r600_sx_max_export_pos_size > 16) { | ||
1329 | dev_priv->r600_sx_max_export_pos_size -= 16; | ||
1330 | dev_priv->r600_sx_max_export_smx_size += 16; | ||
1331 | } | ||
1327 | break; | 1332 | break; |
1328 | case CHIP_RV710: | 1333 | case CHIP_RV710: |
1329 | dev_priv->r600_max_pipes = 2; | 1334 | dev_priv->r600_max_pipes = 2; |
@@ -1345,6 +1350,31 @@ static void r700_gfx_init(struct drm_device *dev, | |||
1345 | dev_priv->r700_sc_hiz_tile_fifo_size = 0x30; | 1350 | dev_priv->r700_sc_hiz_tile_fifo_size = 0x30; |
1346 | dev_priv->r700_sc_earlyz_tile_fifo_fize = 0x130; | 1351 | dev_priv->r700_sc_earlyz_tile_fifo_fize = 0x130; |
1347 | break; | 1352 | break; |
1353 | case CHIP_RV740: | ||
1354 | dev_priv->r600_max_pipes = 4; | ||
1355 | dev_priv->r600_max_tile_pipes = 4; | ||
1356 | dev_priv->r600_max_simds = 8; | ||
1357 | dev_priv->r600_max_backends = 4; | ||
1358 | dev_priv->r600_max_gprs = 256; | ||
1359 | dev_priv->r600_max_threads = 248; | ||
1360 | dev_priv->r600_max_stack_entries = 512; | ||
1361 | dev_priv->r600_max_hw_contexts = 8; | ||
1362 | dev_priv->r600_max_gs_threads = 16 * 2; | ||
1363 | dev_priv->r600_sx_max_export_size = 256; | ||
1364 | dev_priv->r600_sx_max_export_pos_size = 32; | ||
1365 | dev_priv->r600_sx_max_export_smx_size = 224; | ||
1366 | dev_priv->r600_sq_num_cf_insts = 2; | ||
1367 | |||
1368 | dev_priv->r700_sx_num_of_sets = 7; | ||
1369 | dev_priv->r700_sc_prim_fifo_size = 0x100; | ||
1370 | dev_priv->r700_sc_hiz_tile_fifo_size = 0x30; | ||
1371 | dev_priv->r700_sc_earlyz_tile_fifo_fize = 0x130; | ||
1372 | |||
1373 | if (dev_priv->r600_sx_max_export_pos_size > 16) { | ||
1374 | dev_priv->r600_sx_max_export_pos_size -= 16; | ||
1375 | dev_priv->r600_sx_max_export_smx_size += 16; | ||
1376 | } | ||
1377 | break; | ||
1348 | default: | 1378 | default: |
1349 | break; | 1379 | break; |
1350 | } | 1380 | } |
@@ -1493,6 +1523,7 @@ static void r700_gfx_init(struct drm_device *dev, | |||
1493 | break; | 1523 | break; |
1494 | case CHIP_RV730: | 1524 | case CHIP_RV730: |
1495 | case CHIP_RV710: | 1525 | case CHIP_RV710: |
1526 | case CHIP_RV740: | ||
1496 | default: | 1527 | default: |
1497 | sq_ms_fifo_sizes |= R600_FETCH_FIFO_HIWATER(0x4); | 1528 | sq_ms_fifo_sizes |= R600_FETCH_FIFO_HIWATER(0x4); |
1498 | break; | 1529 | break; |
@@ -1569,6 +1600,7 @@ static void r700_gfx_init(struct drm_device *dev, | |||
1569 | switch (dev_priv->flags & RADEON_FAMILY_MASK) { | 1600 | switch (dev_priv->flags & RADEON_FAMILY_MASK) { |
1570 | case CHIP_RV770: | 1601 | case CHIP_RV770: |
1571 | case CHIP_RV730: | 1602 | case CHIP_RV730: |
1603 | case CHIP_RV740: | ||
1572 | gs_prim_buffer_depth = 384; | 1604 | gs_prim_buffer_depth = 384; |
1573 | break; | 1605 | break; |
1574 | case CHIP_RV710: | 1606 | case CHIP_RV710: |