diff options
| author | Alex Deucher <alexander.deucher@amd.com> | 2011-10-04 10:46:34 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2011-10-04 12:24:14 -0400 |
| commit | 12d5180bd7e683a4ae80830b82ba67e7b7fac7b2 (patch) | |
| tree | ea3c0e5d3691a4f01474f27cdf297cf5a5e84873 /drivers | |
| parent | 02e6859eae4a8e511fa1a2c9a689ea25cdc6166a (diff) | |
drm/radeon/kms: fix channel_remap setup (v2)
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>
Cc: stable@kernel.org
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 44 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 32 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/rv770.c | 51 |
3 files changed, 0 insertions, 127 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index e8a746712b5b..c4ffa14fb2f4 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
| @@ -1590,48 +1590,6 @@ static u32 evergreen_get_tile_pipe_to_backend_map(struct radeon_device *rdev, | |||
| 1590 | return backend_map; | 1590 | return backend_map; |
| 1591 | } | 1591 | } |
| 1592 | 1592 | ||
| 1593 | static void evergreen_program_channel_remap(struct radeon_device *rdev) | ||
| 1594 | { | ||
| 1595 | u32 tcp_chan_steer_lo, tcp_chan_steer_hi, mc_shared_chremap, tmp; | ||
| 1596 | |||
| 1597 | tmp = RREG32(MC_SHARED_CHMAP); | ||
| 1598 | switch ((tmp & NOOFCHAN_MASK) >> NOOFCHAN_SHIFT) { | ||
| 1599 | case 0: | ||
| 1600 | case 1: | ||
| 1601 | case 2: | ||
| 1602 | case 3: | ||
| 1603 | default: | ||
| 1604 | /* default mapping */ | ||
| 1605 | mc_shared_chremap = 0x00fac688; | ||
| 1606 | break; | ||
| 1607 | } | ||
| 1608 | |||
| 1609 | switch (rdev->family) { | ||
| 1610 | case CHIP_HEMLOCK: | ||
| 1611 | case CHIP_CYPRESS: | ||
| 1612 | case CHIP_BARTS: | ||
| 1613 | tcp_chan_steer_lo = 0x54763210; | ||
| 1614 | tcp_chan_steer_hi = 0x0000ba98; | ||
| 1615 | break; | ||
| 1616 | case CHIP_JUNIPER: | ||
| 1617 | case CHIP_REDWOOD: | ||
| 1618 | case CHIP_CEDAR: | ||
| 1619 | case CHIP_PALM: | ||
| 1620 | case CHIP_SUMO: | ||
| 1621 | case CHIP_SUMO2: | ||
| 1622 | case CHIP_TURKS: | ||
| 1623 | case CHIP_CAICOS: | ||
| 1624 | default: | ||
| 1625 | tcp_chan_steer_lo = 0x76543210; | ||
| 1626 | tcp_chan_steer_hi = 0x0000ba98; | ||
| 1627 | break; | ||
| 1628 | } | ||
| 1629 | |||
| 1630 | WREG32(TCP_CHAN_STEER_LO, tcp_chan_steer_lo); | ||
| 1631 | WREG32(TCP_CHAN_STEER_HI, tcp_chan_steer_hi); | ||
| 1632 | WREG32(MC_SHARED_CHREMAP, mc_shared_chremap); | ||
| 1633 | } | ||
| 1634 | |||
| 1635 | static void evergreen_gpu_init(struct radeon_device *rdev) | 1593 | static void evergreen_gpu_init(struct radeon_device *rdev) |
| 1636 | { | 1594 | { |
| 1637 | u32 cc_rb_backend_disable = 0; | 1595 | u32 cc_rb_backend_disable = 0; |
| @@ -2078,8 +2036,6 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
| 2078 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); | 2036 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); |
| 2079 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); | 2037 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); |
| 2080 | 2038 | ||
| 2081 | evergreen_program_channel_remap(rdev); | ||
| 2082 | |||
| 2083 | num_shader_engines = ((RREG32(GB_ADDR_CONFIG) & NUM_SHADER_ENGINES(3)) >> 12) + 1; | 2039 | num_shader_engines = ((RREG32(GB_ADDR_CONFIG) & NUM_SHADER_ENGINES(3)) >> 12) + 1; |
| 2084 | grbm_gfx_index = INSTANCE_BROADCAST_WRITES; | 2040 | grbm_gfx_index = INSTANCE_BROADCAST_WRITES; |
| 2085 | 2041 | ||
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index 99fbd793c08c..8c79ca97753d 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 | ||
| 572 | static 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 | |||
| 602 | static u32 cayman_get_disable_mask_per_asic(struct radeon_device *rdev, | 572 | static 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, |
| @@ -842,8 +812,6 @@ static void cayman_gpu_init(struct radeon_device *rdev) | |||
| 842 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); | 812 | WREG32(DMIF_ADDR_CONFIG, gb_addr_config); |
| 843 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); | 813 | WREG32(HDP_ADDR_CONFIG, gb_addr_config); |
| 844 | 814 | ||
| 845 | cayman_program_channel_remap(rdev); | ||
| 846 | |||
| 847 | /* primary versions */ | 815 | /* primary versions */ |
| 848 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); | 816 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
| 849 | WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable); | 817 | 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 4720d000d440..b13c2eedc321 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 | ||
| 539 | static 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 | |||
| 588 | static void rv770_gpu_init(struct radeon_device *rdev) | 539 | static void rv770_gpu_init(struct radeon_device *rdev) |
| 589 | { | 540 | { |
| 590 | int i, j, num_qd_pipes; | 541 | int i, j, num_qd_pipes; |
| @@ -785,8 +736,6 @@ static void rv770_gpu_init(struct radeon_device *rdev) | |||
| 785 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); | 736 | WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
| 786 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); | 737 | WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff)); |
| 787 | 738 | ||
| 788 | rv770_program_channel_remap(rdev); | ||
| 789 | |||
| 790 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); | 739 | WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable); |
| 791 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); | 740 | WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
| 792 | WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); | 741 | WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config); |
