aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2011-10-04 10:46:34 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-10-16 17:14:52 -0400
commit416a1b0477b56ac8e7dc3b91d5c18c8da242555c (patch)
treee7561b7416ba525189798346806965f53104a7dd /drivers/gpu
parentc6e2e6abefaceb135487e805b7af78afdbff563e (diff)
drm/radeon/kms: fix channel_remap setup (v2)
commit 12d5180bd7e683a4ae80830b82ba67e7b7fac7b2 upstream. Most asics just use the hw default value which requires no explicit programming. For those that need a different value, the vbios will program it properly. As such, there's no need to program these registers explicitly in the driver. Changing MC_SHARED_CHREMAP requires a reload of all data in vram otherwise its contents will be scambled. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=40103 v2: drop now unused channel_remap functions. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c44
-rw-r--r--drivers/gpu/drm/radeon/ni.c32
-rw-r--r--drivers/gpu/drm/radeon/rv770.c51
3 files changed, 0 insertions, 127 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index c9755819a43..ea7a24ed5c0 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -1593,48 +1593,6 @@ static u32 evergreen_get_tile_pipe_to_backend_map(struct radeon_device *rdev,
1593 return backend_map; 1593 return backend_map;
1594} 1594}
1595 1595
1596static void evergreen_program_channel_remap(struct radeon_device *rdev)
1597{
1598 u32 tcp_chan_steer_lo, tcp_chan_steer_hi, mc_shared_chremap, tmp;
1599
1600 tmp = RREG32(MC_SHARED_CHMAP);
1601 switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) {
1602 case 0:
1603 case 1:
1604 case 2:
1605 case 3:
1606 default:
1607 /* default mapping */
1608 mc_shared_chremap = 0x00fac688;
1609 break;
1610 }
1611
1612 switch (rdev->family) {
1613 case CHIP_HEMLOCK:
1614 case CHIP_CYPRESS:
1615 case CHIP_BARTS:
1616 tcp_chan_steer_lo = 0x54763210;
1617 tcp_chan_steer_hi = 0x0000ba98;
1618 break;
1619 case CHIP_JUNIPER:
1620 case CHIP_REDWOOD:
1621 case CHIP_CEDAR:
1622 case CHIP_PALM:
1623 case CHIP_SUMO:
1624 case CHIP_SUMO2:
1625 case CHIP_TURKS:
1626 case CHIP_CAICOS:
1627 default:
1628 tcp_chan_steer_lo = 0x76543210;
1629 tcp_chan_steer_hi = 0x0000ba98;
1630 break;
1631 }
1632
1633 WREG32(TCP_CHAN_STEER_LO, tcp_chan_steer_lo);
1634 WREG32(TCP_CHAN_STEER_HI, tcp_chan_steer_hi);
1635 WREG32(MC_SHARED_CHREMAP, mc_shared_chremap);
1636}
1637
1638static void evergreen_gpu_init(struct radeon_device *rdev) 1596static void evergreen_gpu_init(struct radeon_device *rdev)
1639{ 1597{
1640 u32 cc_rb_backend_disable = 0; 1598 u32 cc_rb_backend_disable = 0;
@@ -2080,8 +2038,6 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
2080 WREG32(DMIF_ADDR_CONFIG, gb_addr_config); 2038 WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
2081 WREG32(HDP_ADDR_CONFIG, gb_addr_config); 2039 WREG32(HDP_ADDR_CONFIG, gb_addr_config);
2082 2040
2083 evergreen_program_channel_remap(rdev);
2084
2085 num_shader_engines = ((RREG32(GB_ADDR_CONFIG) & NUM_SHADER_ENGINES(3)) >> 12) + 1; 2041 num_shader_engines = ((RREG32(GB_ADDR_CONFIG) & NUM_SHADER_ENGINES(3)) >> 12) + 1;
2086 grbm_gfx_index = INSTANCE_BROADCAST_WRITES; 2042 grbm_gfx_index = INSTANCE_BROADCAST_WRITES;
2087 2043
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 0b132a3b1df..0c460c40217 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -569,36 +569,6 @@ static u32 cayman_get_tile_pipe_to_backend_map(struct radeon_device *rdev,
569 return backend_map; 569 return backend_map;
570} 570}
571 571
572static void cayman_program_channel_remap(struct radeon_device *rdev)
573{
574 u32 tcp_chan_steer_lo, tcp_chan_steer_hi, mc_shared_chremap, tmp;
575
576 tmp = RREG32(MC_SHARED_CHMAP);
577 switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) {
578 case 0:
579 case 1:
580 case 2:
581 case 3:
582 default:
583 /* default mapping */
584 mc_shared_chremap = 0x00fac688;
585 break;
586 }
587
588 switch (rdev->family) {
589 case CHIP_CAYMAN:
590 default:
591 //tcp_chan_steer_lo = 0x54763210
592 tcp_chan_steer_lo = 0x76543210;
593 tcp_chan_steer_hi = 0x0000ba98;
594 break;
595 }
596
597 WREG32(TCP_CHAN_STEER_LO, tcp_chan_steer_lo);
598 WREG32(TCP_CHAN_STEER_HI, tcp_chan_steer_hi);
599 WREG32(MC_SHARED_CHREMAP, mc_shared_chremap);
600}
601
602static u32 cayman_get_disable_mask_per_asic(struct radeon_device *rdev, 572static u32 cayman_get_disable_mask_per_asic(struct radeon_device *rdev,
603 u32 disable_mask_per_se, 573 u32 disable_mask_per_se,
604 u32 max_disable_mask_per_se, 574 u32 max_disable_mask_per_se,
@@ -841,8 +811,6 @@ static void cayman_gpu_init(struct radeon_device *rdev)
841 WREG32(DMIF_ADDR_CONFIG, gb_addr_config); 811 WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
842 WREG32(HDP_ADDR_CONFIG, gb_addr_config); 812 WREG32(HDP_ADDR_CONFIG, gb_addr_config);
843 813
844 cayman_program_channel_remap(rdev);
845
846 /* primary versions */ 814 /* primary versions */
847 WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); 815 WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable);
848 WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); 816 WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable);
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 4de51891aa6..f2516e64805 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -536,55 +536,6 @@ static u32 r700_get_tile_pipe_to_backend_map(struct radeon_device *rdev,
536 return backend_map; 536 return backend_map;
537} 537}
538 538
539static void rv770_program_channel_remap(struct radeon_device *rdev)
540{
541 u32 tcp_chan_steer, mc_shared_chremap, tmp;
542 bool force_no_swizzle;
543
544 switch (rdev->family) {
545 case CHIP_RV770:
546 case CHIP_RV730:
547 force_no_swizzle = false;
548 break;
549 case CHIP_RV710:
550 case CHIP_RV740:
551 default:
552 force_no_swizzle = true;
553 break;
554 }
555
556 tmp = RREG32(MC_SHARED_CHMAP);
557 switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) {
558 case 0:
559 case 1:
560 default:
561 /* default mapping */
562 mc_shared_chremap = 0x00fac688;
563 break;
564 case 2:
565 case 3:
566 if (force_no_swizzle)
567 mc_shared_chremap = 0x00fac688;
568 else
569 mc_shared_chremap = 0x00bbc298;
570 break;
571 }
572
573 if (rdev->family == CHIP_RV740)
574 tcp_chan_steer = 0x00ef2a60;
575 else
576 tcp_chan_steer = 0x00fac688;
577
578 /* RV770 CE has special chremap setup */
579 if (rdev->pdev->device == 0x944e) {
580 tcp_chan_steer = 0x00b08b08;
581 mc_shared_chremap = 0x00b08b08;
582 }
583
584 WREG32(TCP_CHAN_STEER, tcp_chan_steer);
585 WREG32(MC_SHARED_CHREMAP, mc_shared_chremap);
586}
587
588static void rv770_gpu_init(struct radeon_device *rdev) 539static void rv770_gpu_init(struct radeon_device *rdev)
589{ 540{
590 int i, j, num_qd_pipes; 541 int i, j, num_qd_pipes;
@@ -784,8 +735,6 @@ static void rv770_gpu_init(struct radeon_device *rdev)
784 WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); 735 WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff));
785 WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); 736 WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff));
786 737
787 rv770_program_channel_remap(rdev);
788
789 WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); 738 WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable);
790 WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); 739 WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config);
791 WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); 740 WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config);