diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu.h')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 120 |
1 files changed, 58 insertions, 62 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 615ce6d464fb..306f75700bf8 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -389,7 +389,6 @@ struct amdgpu_clock { | |||
389 | * Fences. | 389 | * Fences. |
390 | */ | 390 | */ |
391 | struct amdgpu_fence_driver { | 391 | struct amdgpu_fence_driver { |
392 | struct amdgpu_ring *ring; | ||
393 | uint64_t gpu_addr; | 392 | uint64_t gpu_addr; |
394 | volatile uint32_t *cpu_addr; | 393 | volatile uint32_t *cpu_addr; |
395 | /* sync_seq is protected by ring emission lock */ | 394 | /* sync_seq is protected by ring emission lock */ |
@@ -398,7 +397,7 @@ struct amdgpu_fence_driver { | |||
398 | bool initialized; | 397 | bool initialized; |
399 | struct amdgpu_irq_src *irq_src; | 398 | struct amdgpu_irq_src *irq_src; |
400 | unsigned irq_type; | 399 | unsigned irq_type; |
401 | struct delayed_work lockup_work; | 400 | struct timer_list fallback_timer; |
402 | wait_queue_head_t fence_queue; | 401 | wait_queue_head_t fence_queue; |
403 | }; | 402 | }; |
404 | 403 | ||
@@ -917,8 +916,8 @@ struct amdgpu_ring { | |||
917 | #define AMDGPU_VM_FAULT_STOP_ALWAYS 2 | 916 | #define AMDGPU_VM_FAULT_STOP_ALWAYS 2 |
918 | 917 | ||
919 | struct amdgpu_vm_pt { | 918 | struct amdgpu_vm_pt { |
920 | struct amdgpu_bo *bo; | 919 | struct amdgpu_bo *bo; |
921 | uint64_t addr; | 920 | uint64_t addr; |
922 | }; | 921 | }; |
923 | 922 | ||
924 | struct amdgpu_vm_id { | 923 | struct amdgpu_vm_id { |
@@ -926,8 +925,6 @@ struct amdgpu_vm_id { | |||
926 | uint64_t pd_gpu_addr; | 925 | uint64_t pd_gpu_addr; |
927 | /* last flushed PD/PT update */ | 926 | /* last flushed PD/PT update */ |
928 | struct fence *flushed_updates; | 927 | struct fence *flushed_updates; |
929 | /* last use of vmid */ | ||
930 | struct fence *last_id_use; | ||
931 | }; | 928 | }; |
932 | 929 | ||
933 | struct amdgpu_vm { | 930 | struct amdgpu_vm { |
@@ -957,24 +954,70 @@ struct amdgpu_vm { | |||
957 | 954 | ||
958 | /* for id and flush management per ring */ | 955 | /* for id and flush management per ring */ |
959 | struct amdgpu_vm_id ids[AMDGPU_MAX_RINGS]; | 956 | struct amdgpu_vm_id ids[AMDGPU_MAX_RINGS]; |
957 | /* for interval tree */ | ||
958 | spinlock_t it_lock; | ||
960 | }; | 959 | }; |
961 | 960 | ||
962 | struct amdgpu_vm_manager { | 961 | struct amdgpu_vm_manager { |
963 | struct fence *active[AMDGPU_NUM_VM]; | 962 | struct { |
964 | uint32_t max_pfn; | 963 | struct fence *active; |
964 | atomic_long_t owner; | ||
965 | } ids[AMDGPU_NUM_VM]; | ||
966 | |||
967 | uint32_t max_pfn; | ||
965 | /* number of VMIDs */ | 968 | /* number of VMIDs */ |
966 | unsigned nvm; | 969 | unsigned nvm; |
967 | /* vram base address for page table entry */ | 970 | /* vram base address for page table entry */ |
968 | u64 vram_base_offset; | 971 | u64 vram_base_offset; |
969 | /* is vm enabled? */ | 972 | /* is vm enabled? */ |
970 | bool enabled; | 973 | bool enabled; |
971 | /* for hw to save the PD addr on suspend/resume */ | ||
972 | uint32_t saved_table_addr[AMDGPU_NUM_VM]; | ||
973 | /* vm pte handling */ | 974 | /* vm pte handling */ |
974 | const struct amdgpu_vm_pte_funcs *vm_pte_funcs; | 975 | const struct amdgpu_vm_pte_funcs *vm_pte_funcs; |
975 | struct amdgpu_ring *vm_pte_funcs_ring; | 976 | struct amdgpu_ring *vm_pte_funcs_ring; |
976 | }; | 977 | }; |
977 | 978 | ||
979 | void amdgpu_vm_manager_fini(struct amdgpu_device *adev); | ||
980 | int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm); | ||
981 | void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm); | ||
982 | struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, | ||
983 | struct amdgpu_vm *vm, | ||
984 | struct list_head *head); | ||
985 | int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, | ||
986 | struct amdgpu_sync *sync); | ||
987 | void amdgpu_vm_flush(struct amdgpu_ring *ring, | ||
988 | struct amdgpu_vm *vm, | ||
989 | struct fence *updates); | ||
990 | void amdgpu_vm_fence(struct amdgpu_device *adev, | ||
991 | struct amdgpu_vm *vm, | ||
992 | struct fence *fence); | ||
993 | uint64_t amdgpu_vm_map_gart(struct amdgpu_device *adev, uint64_t addr); | ||
994 | int amdgpu_vm_update_page_directory(struct amdgpu_device *adev, | ||
995 | struct amdgpu_vm *vm); | ||
996 | int amdgpu_vm_clear_freed(struct amdgpu_device *adev, | ||
997 | struct amdgpu_vm *vm); | ||
998 | int amdgpu_vm_clear_invalids(struct amdgpu_device *adev, struct amdgpu_vm *vm, | ||
999 | struct amdgpu_sync *sync); | ||
1000 | int amdgpu_vm_bo_update(struct amdgpu_device *adev, | ||
1001 | struct amdgpu_bo_va *bo_va, | ||
1002 | struct ttm_mem_reg *mem); | ||
1003 | void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, | ||
1004 | struct amdgpu_bo *bo); | ||
1005 | struct amdgpu_bo_va *amdgpu_vm_bo_find(struct amdgpu_vm *vm, | ||
1006 | struct amdgpu_bo *bo); | ||
1007 | struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev, | ||
1008 | struct amdgpu_vm *vm, | ||
1009 | struct amdgpu_bo *bo); | ||
1010 | int amdgpu_vm_bo_map(struct amdgpu_device *adev, | ||
1011 | struct amdgpu_bo_va *bo_va, | ||
1012 | uint64_t addr, uint64_t offset, | ||
1013 | uint64_t size, uint32_t flags); | ||
1014 | int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, | ||
1015 | struct amdgpu_bo_va *bo_va, | ||
1016 | uint64_t addr); | ||
1017 | void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, | ||
1018 | struct amdgpu_bo_va *bo_va); | ||
1019 | int amdgpu_vm_free_job(struct amdgpu_job *job); | ||
1020 | |||
978 | /* | 1021 | /* |
979 | * context related structures | 1022 | * context related structures |
980 | */ | 1023 | */ |
@@ -1211,6 +1254,7 @@ struct amdgpu_cs_parser { | |||
1211 | /* relocations */ | 1254 | /* relocations */ |
1212 | struct amdgpu_bo_list_entry *vm_bos; | 1255 | struct amdgpu_bo_list_entry *vm_bos; |
1213 | struct list_head validated; | 1256 | struct list_head validated; |
1257 | struct fence *fence; | ||
1214 | 1258 | ||
1215 | struct amdgpu_ib *ibs; | 1259 | struct amdgpu_ib *ibs; |
1216 | uint32_t num_ibs; | 1260 | uint32_t num_ibs; |
@@ -1226,7 +1270,7 @@ struct amdgpu_job { | |||
1226 | struct amdgpu_device *adev; | 1270 | struct amdgpu_device *adev; |
1227 | struct amdgpu_ib *ibs; | 1271 | struct amdgpu_ib *ibs; |
1228 | uint32_t num_ibs; | 1272 | uint32_t num_ibs; |
1229 | struct mutex job_lock; | 1273 | void *owner; |
1230 | struct amdgpu_user_fence uf; | 1274 | struct amdgpu_user_fence uf; |
1231 | int (*free_job)(struct amdgpu_job *job); | 1275 | int (*free_job)(struct amdgpu_job *job); |
1232 | }; | 1276 | }; |
@@ -2257,11 +2301,6 @@ void amdgpu_pci_config_reset(struct amdgpu_device *adev); | |||
2257 | bool amdgpu_card_posted(struct amdgpu_device *adev); | 2301 | bool amdgpu_card_posted(struct amdgpu_device *adev); |
2258 | void amdgpu_update_display_priority(struct amdgpu_device *adev); | 2302 | void amdgpu_update_display_priority(struct amdgpu_device *adev); |
2259 | bool amdgpu_boot_test_post_card(struct amdgpu_device *adev); | 2303 | bool amdgpu_boot_test_post_card(struct amdgpu_device *adev); |
2260 | struct amdgpu_cs_parser *amdgpu_cs_parser_create(struct amdgpu_device *adev, | ||
2261 | struct drm_file *filp, | ||
2262 | struct amdgpu_ctx *ctx, | ||
2263 | struct amdgpu_ib *ibs, | ||
2264 | uint32_t num_ibs); | ||
2265 | 2304 | ||
2266 | int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data); | 2305 | int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, void *data); |
2267 | int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type, | 2306 | int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type, |
@@ -2319,49 +2358,6 @@ long amdgpu_kms_compat_ioctl(struct file *filp, unsigned int cmd, | |||
2319 | unsigned long arg); | 2358 | unsigned long arg); |
2320 | 2359 | ||
2321 | /* | 2360 | /* |
2322 | * vm | ||
2323 | */ | ||
2324 | int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm); | ||
2325 | void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm); | ||
2326 | struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, | ||
2327 | struct amdgpu_vm *vm, | ||
2328 | struct list_head *head); | ||
2329 | int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, | ||
2330 | struct amdgpu_sync *sync); | ||
2331 | void amdgpu_vm_flush(struct amdgpu_ring *ring, | ||
2332 | struct amdgpu_vm *vm, | ||
2333 | struct fence *updates); | ||
2334 | void amdgpu_vm_fence(struct amdgpu_device *adev, | ||
2335 | struct amdgpu_vm *vm, | ||
2336 | struct amdgpu_fence *fence); | ||
2337 | uint64_t amdgpu_vm_map_gart(struct amdgpu_device *adev, uint64_t addr); | ||
2338 | int amdgpu_vm_update_page_directory(struct amdgpu_device *adev, | ||
2339 | struct amdgpu_vm *vm); | ||
2340 | int amdgpu_vm_clear_freed(struct amdgpu_device *adev, | ||
2341 | struct amdgpu_vm *vm); | ||
2342 | int amdgpu_vm_clear_invalids(struct amdgpu_device *adev, | ||
2343 | struct amdgpu_vm *vm, struct amdgpu_sync *sync); | ||
2344 | int amdgpu_vm_bo_update(struct amdgpu_device *adev, | ||
2345 | struct amdgpu_bo_va *bo_va, | ||
2346 | struct ttm_mem_reg *mem); | ||
2347 | void amdgpu_vm_bo_invalidate(struct amdgpu_device *adev, | ||
2348 | struct amdgpu_bo *bo); | ||
2349 | struct amdgpu_bo_va *amdgpu_vm_bo_find(struct amdgpu_vm *vm, | ||
2350 | struct amdgpu_bo *bo); | ||
2351 | struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev, | ||
2352 | struct amdgpu_vm *vm, | ||
2353 | struct amdgpu_bo *bo); | ||
2354 | int amdgpu_vm_bo_map(struct amdgpu_device *adev, | ||
2355 | struct amdgpu_bo_va *bo_va, | ||
2356 | uint64_t addr, uint64_t offset, | ||
2357 | uint64_t size, uint32_t flags); | ||
2358 | int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, | ||
2359 | struct amdgpu_bo_va *bo_va, | ||
2360 | uint64_t addr); | ||
2361 | void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, | ||
2362 | struct amdgpu_bo_va *bo_va); | ||
2363 | int amdgpu_vm_free_job(struct amdgpu_job *job); | ||
2364 | /* | ||
2365 | * functions used by amdgpu_encoder.c | 2361 | * functions used by amdgpu_encoder.c |
2366 | */ | 2362 | */ |
2367 | struct amdgpu_afmt_acr { | 2363 | struct amdgpu_afmt_acr { |