diff options
| author | Christian König <deathsimple@vodafone.de> | 2012-08-11 05:54:05 -0400 |
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2012-09-20 13:10:39 -0400 |
| commit | 089a786e2cf5d07d495b3cb1ac0b959c6dd10d49 (patch) | |
| tree | a60b26f96dae4c3c52accb4e9ae7826d1fc5b701 | |
| parent | ddf03f5cdd98c6ea486f3007a5542241634c9093 (diff) | |
drm/radeon: Move looping over the PTEs into chip code
Makes it easier to move it into the rings.
Signed-off-by: Christian König <deathsimple@vodafone.de>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/radeon/ni.c | 22 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_asic.h | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_gart.c | 24 |
5 files changed, 34 insertions, 34 deletions
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c index de378d685803..8bec8113d3a1 100644 --- a/drivers/gpu/drm/radeon/ni.c +++ b/drivers/gpu/drm/radeon/ni.c | |||
| @@ -1503,9 +1503,7 @@ void cayman_vm_fini(struct radeon_device *rdev) | |||
| 1503 | #define R600_PTE_READABLE (1 << 5) | 1503 | #define R600_PTE_READABLE (1 << 5) |
| 1504 | #define R600_PTE_WRITEABLE (1 << 6) | 1504 | #define R600_PTE_WRITEABLE (1 << 6) |
| 1505 | 1505 | ||
| 1506 | uint32_t cayman_vm_page_flags(struct radeon_device *rdev, | 1506 | uint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags) |
| 1507 | struct radeon_vm *vm, | ||
| 1508 | uint32_t flags) | ||
| 1509 | { | 1507 | { |
| 1510 | uint32_t r600_flags = 0; | 1508 | uint32_t r600_flags = 0; |
| 1511 | 1509 | ||
| @@ -1520,13 +1518,23 @@ uint32_t cayman_vm_page_flags(struct radeon_device *rdev, | |||
| 1520 | } | 1518 | } |
| 1521 | 1519 | ||
| 1522 | void cayman_vm_set_page(struct radeon_device *rdev, struct radeon_vm *vm, | 1520 | void cayman_vm_set_page(struct radeon_device *rdev, struct radeon_vm *vm, |
| 1523 | unsigned pfn, uint64_t addr, uint32_t flags) | 1521 | unsigned pfn, struct ttm_mem_reg *mem, |
| 1522 | unsigned npages, uint32_t flags) | ||
| 1524 | { | 1523 | { |
| 1525 | void __iomem *ptr = (void *)vm->pt; | 1524 | void __iomem *ptr = (void *)vm->pt; |
| 1525 | uint64_t addr; | ||
| 1526 | int i; | ||
| 1527 | |||
| 1528 | addr = flags = cayman_vm_page_flags(rdev, flags); | ||
| 1526 | 1529 | ||
| 1527 | addr = addr & 0xFFFFFFFFFFFFF000ULL; | 1530 | for (i = 0; i < npages; ++i, ++pfn) { |
| 1528 | addr |= flags; | 1531 | if (mem) { |
| 1529 | writeq(addr, ptr + (pfn * 8)); | 1532 | addr = radeon_vm_get_addr(rdev, mem, i); |
| 1533 | addr = addr & 0xFFFFFFFFFFFFF000ULL; | ||
| 1534 | addr |= flags; | ||
| 1535 | } | ||
| 1536 | writeq(addr, ptr + (pfn * 8)); | ||
| 1537 | } | ||
| 1530 | } | 1538 | } |
| 1531 | 1539 | ||
| 1532 | void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ib *ib) | 1540 | void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ib *ib) |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d6cd1f57fece..ae7409a0f62b 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -1135,11 +1135,9 @@ struct radeon_asic { | |||
| 1135 | struct { | 1135 | struct { |
| 1136 | int (*init)(struct radeon_device *rdev); | 1136 | int (*init)(struct radeon_device *rdev); |
| 1137 | void (*fini)(struct radeon_device *rdev); | 1137 | void (*fini)(struct radeon_device *rdev); |
| 1138 | uint32_t (*page_flags)(struct radeon_device *rdev, | ||
| 1139 | struct radeon_vm *vm, | ||
| 1140 | uint32_t flags); | ||
| 1141 | void (*set_page)(struct radeon_device *rdev, struct radeon_vm *vm, | 1138 | void (*set_page)(struct radeon_device *rdev, struct radeon_vm *vm, |
| 1142 | unsigned pfn, uint64_t addr, uint32_t flags); | 1139 | unsigned pfn, struct ttm_mem_reg *mem, |
| 1140 | unsigned npages, uint32_t flags); | ||
| 1143 | } vm; | 1141 | } vm; |
| 1144 | /* ring specific callbacks */ | 1142 | /* ring specific callbacks */ |
| 1145 | struct { | 1143 | struct { |
| @@ -1751,8 +1749,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); | |||
| 1751 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) | 1749 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) |
| 1752 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) | 1750 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) |
| 1753 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) | 1751 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) |
| 1754 | #define radeon_asic_vm_page_flags(rdev, v, flags) (rdev)->asic->vm.page_flags((rdev), (v), (flags)) | 1752 | #define radeon_asic_vm_set_page(rdev, v, pfn, mem, npages, flags) (rdev)->asic->vm.set_page((rdev), (v), (pfn), (mem), (npages), (flags)) |
| 1755 | #define radeon_asic_vm_set_page(rdev, v, pfn, addr, flags) (rdev)->asic->vm.set_page((rdev), (v), (pfn), (addr), (flags)) | ||
| 1756 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) | 1753 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) |
| 1757 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) | 1754 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) |
| 1758 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) | 1755 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) |
| @@ -1837,6 +1834,9 @@ struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev, | |||
| 1837 | void radeon_vm_fence(struct radeon_device *rdev, | 1834 | void radeon_vm_fence(struct radeon_device *rdev, |
| 1838 | struct radeon_vm *vm, | 1835 | struct radeon_vm *vm, |
| 1839 | struct radeon_fence *fence); | 1836 | struct radeon_fence *fence); |
| 1837 | u64 radeon_vm_get_addr(struct radeon_device *rdev, | ||
| 1838 | struct ttm_mem_reg *mem, | ||
| 1839 | unsigned pfn); | ||
| 1840 | int radeon_vm_bo_update_pte(struct radeon_device *rdev, | 1840 | int radeon_vm_bo_update_pte(struct radeon_device *rdev, |
| 1841 | struct radeon_vm *vm, | 1841 | struct radeon_vm *vm, |
| 1842 | struct radeon_bo *bo, | 1842 | struct radeon_bo *bo, |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 98c586ac1999..6e4e67edf60f 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c | |||
| @@ -1375,7 +1375,6 @@ static struct radeon_asic cayman_asic = { | |||
| 1375 | .vm = { | 1375 | .vm = { |
| 1376 | .init = &cayman_vm_init, | 1376 | .init = &cayman_vm_init, |
| 1377 | .fini = &cayman_vm_fini, | 1377 | .fini = &cayman_vm_fini, |
| 1378 | .page_flags = &cayman_vm_page_flags, | ||
| 1379 | .set_page = &cayman_vm_set_page, | 1378 | .set_page = &cayman_vm_set_page, |
| 1380 | }, | 1379 | }, |
| 1381 | .ring = { | 1380 | .ring = { |
| @@ -1479,7 +1478,6 @@ static struct radeon_asic trinity_asic = { | |||
| 1479 | .vm = { | 1478 | .vm = { |
| 1480 | .init = &cayman_vm_init, | 1479 | .init = &cayman_vm_init, |
| 1481 | .fini = &cayman_vm_fini, | 1480 | .fini = &cayman_vm_fini, |
| 1482 | .page_flags = &cayman_vm_page_flags, | ||
| 1483 | .set_page = &cayman_vm_set_page, | 1481 | .set_page = &cayman_vm_set_page, |
| 1484 | }, | 1482 | }, |
| 1485 | .ring = { | 1483 | .ring = { |
| @@ -1583,7 +1581,6 @@ static struct radeon_asic si_asic = { | |||
| 1583 | .vm = { | 1581 | .vm = { |
| 1584 | .init = &si_vm_init, | 1582 | .init = &si_vm_init, |
| 1585 | .fini = &si_vm_fini, | 1583 | .fini = &si_vm_fini, |
| 1586 | .page_flags = &cayman_vm_page_flags, | ||
| 1587 | .set_page = &cayman_vm_set_page, | 1584 | .set_page = &cayman_vm_set_page, |
| 1588 | }, | 1585 | }, |
| 1589 | .ring = { | 1586 | .ring = { |
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h index 25e8d000dac9..2b3dd3173022 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.h +++ b/drivers/gpu/drm/radeon/radeon_asic.h | |||
| @@ -442,11 +442,10 @@ int cayman_vm_init(struct radeon_device *rdev); | |||
| 442 | void cayman_vm_fini(struct radeon_device *rdev); | 442 | void cayman_vm_fini(struct radeon_device *rdev); |
| 443 | void cayman_vm_unbind(struct radeon_device *rdev, struct radeon_vm *vm); | 443 | void cayman_vm_unbind(struct radeon_device *rdev, struct radeon_vm *vm); |
| 444 | void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ib *ib); | 444 | void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ib *ib); |
| 445 | uint32_t cayman_vm_page_flags(struct radeon_device *rdev, | 445 | uint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags); |
| 446 | struct radeon_vm *vm, | ||
| 447 | uint32_t flags); | ||
| 448 | void cayman_vm_set_page(struct radeon_device *rdev, struct radeon_vm *vm, | 446 | void cayman_vm_set_page(struct radeon_device *rdev, struct radeon_vm *vm, |
| 449 | unsigned pfn, uint64_t addr, uint32_t flags); | 447 | unsigned pfn, struct ttm_mem_reg *mem, |
| 448 | unsigned npages, uint32_t flags); | ||
| 450 | int evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); | 449 | int evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib); |
| 451 | 450 | ||
| 452 | /* DCE6 - SI */ | 451 | /* DCE6 - SI */ |
diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c index da1b2dbe4550..0f9a40f84d7a 100644 --- a/drivers/gpu/drm/radeon/radeon_gart.c +++ b/drivers/gpu/drm/radeon/radeon_gart.c | |||
| @@ -450,7 +450,7 @@ int radeon_vm_manager_init(struct radeon_device *rdev) | |||
| 450 | r = radeon_asic_vm_init(rdev); | 450 | r = radeon_asic_vm_init(rdev); |
| 451 | if (r) | 451 | if (r) |
| 452 | return r; | 452 | return r; |
| 453 | 453 | ||
| 454 | rdev->vm_manager.enabled = true; | 454 | rdev->vm_manager.enabled = true; |
| 455 | 455 | ||
| 456 | r = radeon_sa_bo_manager_start(rdev, &rdev->vm_manager.sa_manager); | 456 | r = radeon_sa_bo_manager_start(rdev, &rdev->vm_manager.sa_manager); |
| @@ -773,9 +773,9 @@ int radeon_vm_bo_add(struct radeon_device *rdev, | |||
| 773 | * to (cayman+). | 773 | * to (cayman+). |
| 774 | * Returns the physical address of the page. | 774 | * Returns the physical address of the page. |
| 775 | */ | 775 | */ |
| 776 | static u64 radeon_vm_get_addr(struct radeon_device *rdev, | 776 | u64 radeon_vm_get_addr(struct radeon_device *rdev, |
| 777 | struct ttm_mem_reg *mem, | 777 | struct ttm_mem_reg *mem, |
| 778 | unsigned pfn) | 778 | unsigned pfn) |
| 779 | { | 779 | { |
| 780 | u64 addr = 0; | 780 | u64 addr = 0; |
| 781 | 781 | ||
| @@ -819,9 +819,8 @@ int radeon_vm_bo_update_pte(struct radeon_device *rdev, | |||
| 819 | struct ttm_mem_reg *mem) | 819 | struct ttm_mem_reg *mem) |
| 820 | { | 820 | { |
| 821 | struct radeon_bo_va *bo_va; | 821 | struct radeon_bo_va *bo_va; |
