amdgpu: add amdgpu_query_sw_info for querying high bits of 32-bit address space
authorMarek Olšák <marek.olsak@amd.com>
Fri, 2 Feb 2018 17:15:00 +0000 (18:15 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Fri, 9 Feb 2018 19:30:16 +0000 (20:30 +0100)
Reviewed-by: Christian König <christian.koenig@amd.com>
amdgpu/amdgpu.h
amdgpu/amdgpu_device.c
amdgpu/amdgpu_internal.h

index 2eb03bf..928b2a6 100644 (file)
@@ -94,6 +94,10 @@ enum amdgpu_gpu_va_range
        amdgpu_gpu_va_range_general = 0
 };
 
+enum amdgpu_sw_info {
+       amdgpu_sw_info_address32_hi = 0,
+};
+
 /*--------------------------------------------------------------------------*/
 /* -------------------------- Datatypes ----------------------------------- */
 /*--------------------------------------------------------------------------*/
@@ -1086,6 +1090,23 @@ int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id,
                      unsigned size, void *value);
 
 /**
+ * Query hardware or driver information.
+ *
+ * The return size is query-specific and depends on the "info_id" parameter.
+ * No more than "size" bytes is returned.
+ *
+ * \param   dev     - \c [in] Device handle. See #amdgpu_device_initialize()
+ * \param   info    - \c [in] amdgpu_sw_info_*
+ * \param   value   - \c [out] Pointer to the return value.
+ *
+ * \return   0 on success\n
+ *          <0 - Negative POSIX error code
+ *
+*/
+int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info,
+                        void *value);
+
+/**
  * Query information about GDS
  *
  * \param   dev             - \c [in] Device handle. See #amdgpu_device_initialize()
index f34e27a..6ee25a9 100644 (file)
@@ -275,6 +275,7 @@ int amdgpu_device_initialize(int fd,
        max = MIN2(max, (start & ~0xffffffffULL) + 0x100000000ULL);
        amdgpu_vamgr_init(&dev->vamgr_32, start, max,
                          dev->dev_info.virtual_address_alignment);
+       dev->address32_hi = start >> 32;
 
        start = max;
        if (dev->dev_info.high_va_offset && dev->dev_info.high_va_max)
@@ -312,3 +313,16 @@ const char *amdgpu_get_marketing_name(amdgpu_device_handle dev)
 {
        return dev->marketing_name;
 }
+
+int amdgpu_query_sw_info(amdgpu_device_handle dev, enum amdgpu_sw_info info,
+                        void *value)
+{
+       uint32_t *val32 = (uint32_t*)value;
+
+       switch (info) {
+       case amdgpu_sw_info_address32_hi:
+               *val32 = dev->address32_hi;
+               return 0;
+       }
+       return -EINVAL;
+}
index 75276a9..dd0c3a6 100644 (file)
@@ -73,6 +73,7 @@ struct amdgpu_device {
        int flink_fd;
        unsigned major_version;
        unsigned minor_version;
+       uint32_t address32_hi;
 
        char *marketing_name;
        /** List of buffer handles. Protected by bo_table_mutex. */