CC: kbuild-all(a)lists.01.org CC: linux-kernel(a)vger.kernel.org TO: "Christian König" CC: Alex Deucher CC: Huang Rui tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 9791581c049c10929e97098374dd1716a81fefcc commit: 9504578314a70e6d96ee812dc93b5b5c9514b988 drm/amdgpu: add full TMZ support into amdgpu_ttm_map_buffer v2 date: 9 months ago :::::: branch date: 7 hours ago :::::: commit date: 9 months ago config: i386-randconfig-m021-20210121 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter New smatch warnings: drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c:374 amdgpu_ttm_map_buffer() warn: should 'i << 12' be a 64 bit type? Old smatch warnings: drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c:533 amdgpu_move_blit() warn: should 'new_mem->num_pages << 12' be a 64 bit type? drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c:838 amdgpu_ttm_io_mem_pfn() warn: should 'page_offset << 12' be a 64 bit type? vim +374 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 8892f153c83e521a Christian König 2016-08-17 285 f0ee63cbc5264dbb Christian König 2020-03-18 286 /** f0ee63cbc5264dbb Christian König 2020-03-18 287 * amdgpu_ttm_map_buffer - Map memory into the GART windows f0ee63cbc5264dbb Christian König 2020-03-18 288 * @bo: buffer object to map f0ee63cbc5264dbb Christian König 2020-03-18 289 * @mem: memory object to map f0ee63cbc5264dbb Christian König 2020-03-18 290 * @mm_node: drm_mm node object to map f0ee63cbc5264dbb Christian König 2020-03-18 291 * @num_pages: number of pages to map f0ee63cbc5264dbb Christian König 2020-03-18 292 * @offset: offset into @mm_node where to start f0ee63cbc5264dbb Christian König 2020-03-18 293 * @window: which GART window to use f0ee63cbc5264dbb Christian König 2020-03-18 294 * @ring: DMA ring to use for the copy f0ee63cbc5264dbb Christian König 2020-03-18 295 * @tmz: if we should setup a TMZ enabled mapping f0ee63cbc5264dbb Christian König 2020-03-18 296 * @addr: resulting address inside the MC address space f0ee63cbc5264dbb Christian König 2020-03-18 297 * f0ee63cbc5264dbb Christian König 2020-03-18 298 * Setup one of the GART windows to access a specific piece of memory or return f0ee63cbc5264dbb Christian König 2020-03-18 299 * the physical address for local memory. f0ee63cbc5264dbb Christian König 2020-03-18 300 */ f0ee63cbc5264dbb Christian König 2020-03-18 301 static int amdgpu_ttm_map_buffer(struct ttm_buffer_object *bo, f0ee63cbc5264dbb Christian König 2020-03-18 302 struct ttm_mem_reg *mem, f0ee63cbc5264dbb Christian König 2020-03-18 303 struct drm_mm_node *mm_node, f0ee63cbc5264dbb Christian König 2020-03-18 304 unsigned num_pages, uint64_t offset, f0ee63cbc5264dbb Christian König 2020-03-18 305 unsigned window, struct amdgpu_ring *ring, f0ee63cbc5264dbb Christian König 2020-03-18 306 bool tmz, uint64_t *addr) f0ee63cbc5264dbb Christian König 2020-03-18 307 { f0ee63cbc5264dbb Christian König 2020-03-18 308 struct amdgpu_device *adev = ring->adev; f0ee63cbc5264dbb Christian König 2020-03-18 309 struct amdgpu_job *job; f0ee63cbc5264dbb Christian König 2020-03-18 310 unsigned num_dw, num_bytes; f0ee63cbc5264dbb Christian König 2020-03-18 311 struct dma_fence *fence; f0ee63cbc5264dbb Christian König 2020-03-18 312 uint64_t src_addr, dst_addr; 9504578314a70e6d Christian König 2020-03-19 313 void *cpu_addr; f0ee63cbc5264dbb Christian König 2020-03-18 314 uint64_t flags; 9504578314a70e6d Christian König 2020-03-19 315 unsigned int i; f0ee63cbc5264dbb Christian König 2020-03-18 316 int r; f0ee63cbc5264dbb Christian König 2020-03-18 317 f0ee63cbc5264dbb Christian König 2020-03-18 318 BUG_ON(adev->mman.buffer_funcs->copy_max_bytes < f0ee63cbc5264dbb Christian König 2020-03-18 319 AMDGPU_GTT_MAX_TRANSFER_SIZE * 8); f0ee63cbc5264dbb Christian König 2020-03-18 320 f0ee63cbc5264dbb Christian König 2020-03-18 321 /* Map only what can't be accessed directly */ 9504578314a70e6d Christian König 2020-03-19 322 if (!tmz && mem->start != AMDGPU_BO_INVALID_OFFSET) { f0ee63cbc5264dbb Christian König 2020-03-18 323 *addr = amdgpu_mm_node_addr(bo, mm_node, mem) + offset; f0ee63cbc5264dbb Christian König 2020-03-18 324 return 0; f0ee63cbc5264dbb Christian König 2020-03-18 325 } f0ee63cbc5264dbb Christian König 2020-03-18 326 f0ee63cbc5264dbb Christian König 2020-03-18 327 *addr = adev->gmc.gart_start; f0ee63cbc5264dbb Christian König 2020-03-18 328 *addr += (u64)window * AMDGPU_GTT_MAX_TRANSFER_SIZE * f0ee63cbc5264dbb Christian König 2020-03-18 329 AMDGPU_GPU_PAGE_SIZE; f0ee63cbc5264dbb Christian König 2020-03-18 330 *addr += offset & ~PAGE_MASK; f0ee63cbc5264dbb Christian König 2020-03-18 331 f0ee63cbc5264dbb Christian König 2020-03-18 332 num_dw = ALIGN(adev->mman.buffer_funcs->copy_num_dw, 8); f0ee63cbc5264dbb Christian König 2020-03-18 333 num_bytes = num_pages * 8; f0ee63cbc5264dbb Christian König 2020-03-18 334 f0ee63cbc5264dbb Christian König 2020-03-18 335 r = amdgpu_job_alloc_with_ib(adev, num_dw * 4 + num_bytes, f0ee63cbc5264dbb Christian König 2020-03-18 336 AMDGPU_IB_POOL_NORMAL, &job); f0ee63cbc5264dbb Christian König 2020-03-18 337 if (r) f0ee63cbc5264dbb Christian König 2020-03-18 338 return r; f0ee63cbc5264dbb Christian König 2020-03-18 339 f0ee63cbc5264dbb Christian König 2020-03-18 340 src_addr = num_dw * 4; f0ee63cbc5264dbb Christian König 2020-03-18 341 src_addr += job->ibs[0].gpu_addr; f0ee63cbc5264dbb Christian König 2020-03-18 342 f0ee63cbc5264dbb Christian König 2020-03-18 343 dst_addr = amdgpu_bo_gpu_offset(adev->gart.bo); f0ee63cbc5264dbb Christian König 2020-03-18 344 dst_addr += window * AMDGPU_GTT_MAX_TRANSFER_SIZE * 8; f0ee63cbc5264dbb Christian König 2020-03-18 345 amdgpu_emit_copy_buffer(adev, &job->ibs[0], src_addr, f0ee63cbc5264dbb Christian König 2020-03-18 346 dst_addr, num_bytes, false); f0ee63cbc5264dbb Christian König 2020-03-18 347 f0ee63cbc5264dbb Christian König 2020-03-18 348 amdgpu_ring_pad_ib(ring, &job->ibs[0]); f0ee63cbc5264dbb Christian König 2020-03-18 349 WARN_ON(job->ibs[0].length_dw > num_dw); f0ee63cbc5264dbb Christian König 2020-03-18 350 f0ee63cbc5264dbb Christian König 2020-03-18 351 flags = amdgpu_ttm_tt_pte_flags(adev, bo->ttm, mem); f0ee63cbc5264dbb Christian König 2020-03-18 352 if (tmz) f0ee63cbc5264dbb Christian König 2020-03-18 353 flags |= AMDGPU_PTE_TMZ; f0ee63cbc5264dbb Christian König 2020-03-18 354 9504578314a70e6d Christian König 2020-03-19 355 cpu_addr = &job->ibs[0].ptr[num_dw]; 9504578314a70e6d Christian König 2020-03-19 356 9504578314a70e6d Christian König 2020-03-19 357 if (mem->mem_type == TTM_PL_TT) { 9504578314a70e6d Christian König 2020-03-19 358 struct ttm_dma_tt *dma; 9504578314a70e6d Christian König 2020-03-19 359 dma_addr_t *dma_address; 9504578314a70e6d Christian König 2020-03-19 360 9504578314a70e6d Christian König 2020-03-19 361 dma = container_of(bo->ttm, struct ttm_dma_tt, ttm); 9504578314a70e6d Christian König 2020-03-19 362 dma_address = &dma->dma_address[offset >> PAGE_SHIFT]; f0ee63cbc5264dbb Christian König 2020-03-18 363 r = amdgpu_gart_map(adev, 0, num_pages, dma_address, flags, 9504578314a70e6d Christian König 2020-03-19 364 cpu_addr); 9504578314a70e6d Christian König 2020-03-19 365 if (r) 9504578314a70e6d Christian König 2020-03-19 366 goto error_free; 9504578314a70e6d Christian König 2020-03-19 367 } else { 9504578314a70e6d Christian König 2020-03-19 368 dma_addr_t dma_address; 9504578314a70e6d Christian König 2020-03-19 369 9504578314a70e6d Christian König 2020-03-19 370 dma_address = (mm_node->start << PAGE_SHIFT) + offset; 9504578314a70e6d Christian König 2020-03-19 371 dma_address += adev->vm_manager.vram_base_offset; 9504578314a70e6d Christian König 2020-03-19 372 9504578314a70e6d Christian König 2020-03-19 373 for (i = 0; i < num_pages; ++i) { 9504578314a70e6d Christian König 2020-03-19 @374 r = amdgpu_gart_map(adev, i << PAGE_SHIFT, 1, 9504578314a70e6d Christian König 2020-03-19 375 &dma_address, flags, cpu_addr); f0ee63cbc5264dbb Christian König 2020-03-18 376 if (r) f0ee63cbc5264dbb Christian König 2020-03-18 377 goto error_free; f0ee63cbc5264dbb Christian König 2020-03-18 378 9504578314a70e6d Christian König 2020-03-19 379 dma_address += PAGE_SIZE; 9504578314a70e6d Christian König 2020-03-19 380 } 9504578314a70e6d Christian König 2020-03-19 381 } 9504578314a70e6d Christian König 2020-03-19 382 f0ee63cbc5264dbb Christian König 2020-03-18 383 r = amdgpu_job_submit(job, &adev->mman.entity, f0ee63cbc5264dbb Christian König 2020-03-18 384 AMDGPU_FENCE_OWNER_UNDEFINED, &fence); f0ee63cbc5264dbb Christian König 2020-03-18 385 if (r) f0ee63cbc5264dbb Christian König 2020-03-18 386 goto error_free; f0ee63cbc5264dbb Christian König 2020-03-18 387 f0ee63cbc5264dbb Christian König 2020-03-18 388 dma_fence_put(fence); f0ee63cbc5264dbb Christian König 2020-03-18 389 f0ee63cbc5264dbb Christian König 2020-03-18 390 return r; f0ee63cbc5264dbb Christian König 2020-03-18 391 f0ee63cbc5264dbb Christian König 2020-03-18 392 error_free: f0ee63cbc5264dbb Christian König 2020-03-18 393 amdgpu_job_free(job); f0ee63cbc5264dbb Christian König 2020-03-18 394 return r; f0ee63cbc5264dbb Christian König 2020-03-18 395 } f0ee63cbc5264dbb Christian König 2020-03-18 396 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org