diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/cik.c')
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 79a5a5519bd6..fa9565957f9d 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -5749,20 +5749,17 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev) | |||
5749 | WREG32(0x15D8, 0); | 5749 | WREG32(0x15D8, 0); |
5750 | WREG32(0x15DC, 0); | 5750 | WREG32(0x15DC, 0); |
5751 | 5751 | ||
5752 | /* empty context1-15 */ | 5752 | /* restore context1-15 */ |
5753 | /* FIXME start with 4G, once using 2 level pt switch to full | ||
5754 | * vm size space | ||
5755 | */ | ||
5756 | /* set vm size, must be a multiple of 4 */ | 5753 | /* set vm size, must be a multiple of 4 */ |
5757 | WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0); | 5754 | WREG32(VM_CONTEXT1_PAGE_TABLE_START_ADDR, 0); |
5758 | WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn); | 5755 | WREG32(VM_CONTEXT1_PAGE_TABLE_END_ADDR, rdev->vm_manager.max_pfn); |
5759 | for (i = 1; i < 16; i++) { | 5756 | for (i = 1; i < 16; i++) { |
5760 | if (i < 8) | 5757 | if (i < 8) |
5761 | WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), | 5758 | WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2), |
5762 | rdev->gart.table_addr >> 12); | 5759 | rdev->vm_manager.saved_table_addr[i]); |
5763 | else | 5760 | else |
5764 | WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2), | 5761 | WREG32(VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2), |
5765 | rdev->gart.table_addr >> 12); | 5762 | rdev->vm_manager.saved_table_addr[i]); |
5766 | } | 5763 | } |
5767 | 5764 | ||
5768 | /* enable context1-15 */ | 5765 | /* enable context1-15 */ |
@@ -5827,6 +5824,17 @@ static int cik_pcie_gart_enable(struct radeon_device *rdev) | |||
5827 | */ | 5824 | */ |
5828 | static void cik_pcie_gart_disable(struct radeon_device *rdev) | 5825 | static void cik_pcie_gart_disable(struct radeon_device *rdev) |
5829 | { | 5826 | { |
5827 | unsigned i; | ||
5828 | |||
5829 | for (i = 1; i < 16; ++i) { | ||
5830 | uint32_t reg; | ||
5831 | if (i < 8) | ||
5832 | reg = VM_CONTEXT0_PAGE_TABLE_BASE_ADDR + (i << 2); | ||
5833 | else | ||
5834 | reg = VM_CONTEXT8_PAGE_TABLE_BASE_ADDR + ((i - 8) << 2); | ||
5835 | rdev->vm_manager.saved_table_addr[i] = RREG32(reg); | ||
5836 | } | ||
5837 | |||
5830 | /* Disable all tables */ | 5838 | /* Disable all tables */ |
5831 | WREG32(VM_CONTEXT0_CNTL, 0); | 5839 | WREG32(VM_CONTEXT0_CNTL, 0); |
5832 | WREG32(VM_CONTEXT1_CNTL, 0); | 5840 | WREG32(VM_CONTEXT1_CNTL, 0); |
@@ -9555,6 +9563,9 @@ static void cik_pcie_gen3_enable(struct radeon_device *rdev) | |||
9555 | int ret, i; | 9563 | int ret, i; |
9556 | u16 tmp16; | 9564 | u16 tmp16; |
9557 | 9565 | ||
9566 | if (pci_is_root_bus(rdev->pdev->bus)) | ||
9567 | return; | ||
9568 | |||
9558 | if (radeon_pcie_gen2 == 0) | 9569 | if (radeon_pcie_gen2 == 0) |
9559 | return; | 9570 | return; |
9560 | 9571 | ||
@@ -9781,7 +9792,8 @@ static void cik_program_aspm(struct radeon_device *rdev) | |||
9781 | if (orig != data) | 9792 | if (orig != data) |
9782 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data); | 9793 | WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data); |
9783 | 9794 | ||
9784 | if (!disable_clkreq) { | 9795 | if (!disable_clkreq && |
9796 | !pci_is_root_bus(rdev->pdev->bus)) { | ||
9785 | struct pci_dev *root = rdev->pdev->bus->self; | 9797 | struct pci_dev *root = rdev->pdev->bus->self; |
9786 | u32 lnkcap; | 9798 | u32 lnkcap; |
9787 | 9799 | ||