[PATCH libdrm 2/2] amdgpu: add amdgpu_bo_va_op_raw
Nicolai Hähnle
nicolai.haehnle at amd.com
Wed Feb 8 12:44:50 UTC 2017
On 08.02.2017 13:39, Christian König wrote:
> Am 08.02.2017 um 13:34 schrieb Nicolai Hähnle:
>> From: Nicolai Hähnle <nicolai.haehnle at amd.com>
>>
>> This variant allows the caller full control over flags and size, and
>> allows passing a NULL bo (for PRT support).
>>
>> Cc: Christian König <christian.koenig at amd.com>
>> Cc: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
>> Cc: Jerry Zhang <Jerry.Zhang at amd.com>
>> Signed-off-by: Nicolai Hähnle <nicolai.haehnle at amd.com>
>
> Reviewed-by: Christian König <christian.koenig at amd.com>.
>
> You have a perfect timing, just wanted to ask if anybody has already
> done the unit test or if I should tackle it?
I actually started hacking on radeonsi support while traveling and
decided to push that towards a somewhat usable state, so a series for
Mesa is going out now :)
A unit test in libdrm is still a good idea, but I haven't done that.
Cheers,
Nicolai
>
> Regards,
> Christian.
>
>> ---
>> amdgpu/amdgpu.h | 28 ++++++++++++++++++++++++++++
>> amdgpu/amdgpu_bo.c | 25 ++++++++++++++++++++-----
>> 2 files changed, 48 insertions(+), 5 deletions(-)
>>
>> diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h
>> index 7b26a04..6b2ded8 100644
>> --- a/amdgpu/amdgpu.h
>> +++ b/amdgpu/amdgpu.h
>> @@ -1186,6 +1186,34 @@ int amdgpu_bo_va_op(amdgpu_bo_handle bo,
>> uint32_t ops);
>> /**
>> + * VA mapping/unmapping for a buffer object or PRT region.
>> + *
>> + * This is not a simple drop-in extension for amdgpu_bo_va_op;
>> instead, all
>> + * parameters are treated "raw", i.e. size is not automatically
>> aligned, and
>> + * all flags must be specified explicitly.
>> + *
>> + * \param dev - \c [in] device handle
>> + * \param bo - \c [in] BO handle (may be NULL)
>> + * \param offset - \c [in] Start offset to map
>> + * \param size - \c [in] Size to map
>> + * \param addr - \c [in] Start virtual address.
>> + * \param flags - \c [in] Supported flags for mapping/unmapping
>> + * \param ops - \c [in] AMDGPU_VA_OP_MAP or AMDGPU_VA_OP_UNMAP
>> + *
>> + * \return 0 on success\n
>> + * <0 - Negative POSIX Error code
>> + *
>> +*/
>> +
>> +int amdgpu_bo_va_op_raw(amdgpu_device_handle dev,
>> + amdgpu_bo_handle bo,
>> + uint64_t offset,
>> + uint64_t size,
>> + uint64_t addr,
>> + uint64_t flags,
>> + uint32_t ops);
>> +
>> +/**
>> * create semaphore
>> *
>> * \param sem - \c [out] semaphore handle
>> diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c
>> index d30fd1e..f725bfd 100644
>> --- a/amdgpu/amdgpu_bo.c
>> +++ b/amdgpu/amdgpu_bo.c
>> @@ -683,6 +683,23 @@ int amdgpu_bo_va_op(amdgpu_bo_handle bo,
>> uint32_t ops)
>> {
>> amdgpu_device_handle dev = bo->dev;
>> +
>> + size = ALIGN(size, getpagesize());
>> +
>> + return amdgpu_bo_va_op_raw(dev, bo, offset, size, addr,
>> + AMDGPU_VM_PAGE_READABLE |
>> + AMDGPU_VM_PAGE_WRITEABLE |
>> + AMDGPU_VM_PAGE_EXECUTABLE, ops);
>> +}
>> +
>> +int amdgpu_bo_va_op_raw(amdgpu_device_handle dev,
>> + amdgpu_bo_handle bo,
>> + uint64_t offset,
>> + uint64_t size,
>> + uint64_t addr,
>> + uint64_t flags,
>> + uint32_t ops)
>> +{
>> struct drm_amdgpu_gem_va va;
>> int r;
>> @@ -690,14 +707,12 @@ int amdgpu_bo_va_op(amdgpu_bo_handle bo,
>> return -EINVAL;
>> memset(&va, 0, sizeof(va));
>> - va.handle = bo->handle;
>> + va.handle = bo ? bo->handle : 0;
>> va.operation = ops;
>> - va.flags = AMDGPU_VM_PAGE_READABLE |
>> - AMDGPU_VM_PAGE_WRITEABLE |
>> - AMDGPU_VM_PAGE_EXECUTABLE;
>> + va.flags = flags;
>> va.va_address = addr;
>> va.offset_in_bo = offset;
>> - va.map_size = ALIGN(size, getpagesize());
>> + va.map_size = size;
>> r = drmCommandWriteRead(dev->fd, DRM_AMDGPU_GEM_VA, &va,
>> sizeof(va));
>>
>
>
More information about the amd-gfx
mailing list