[2/4] radeonkfd/amdkfd: Implement get_local_mem_info()

Submitted by Edward O'Callaghan on Sept. 3, 2016, 2:49 a.m.

Details

Message ID 1472870947-11300-3-git-send-email-funfunctor@folklore1984.net
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Edward O'Callaghan Sept. 3, 2016, 2:49 a.m.
Signed-off-by: Edward O'Callaghan <funfunctor@folklore1984.net>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c        | 32 ++++++++++++++++++++---
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h        |  3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c |  2 +-
 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c |  2 +-
 drivers/gpu/drm/amd/amdkfd/kfd_topology.c         |  6 ++++-
 drivers/gpu/drm/amd/include/kgd_kfd_interface.h   | 13 +++++++--
 drivers/gpu/drm/radeon/radeon_kfd.c               | 22 +++++++++++++---
 7 files changed, 66 insertions(+), 14 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index d080d08..63a2e84 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -226,14 +226,38 @@  void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
 	kfree(mem);
 }
 
-uint64_t get_vmem_size(struct kgd_dev *kgd)
+void get_local_mem_info(struct kgd_dev *kgd,
+				struct kfd_local_mem_info *mem_info)
 {
-	struct amdgpu_device *rdev =
-		(struct amdgpu_device *)kgd;
+	struct amdgpu_device *rdev = (struct amdgpu_device *)kgd;
+	uint64_t address_mask;
+	resource_size_t aper_limit;
 
 	BUG_ON(kgd == NULL);
 
-	return rdev->mc.real_vram_size;
+	memset(mem_info, 0, sizeof(*mem_info));
+
+	address_mask = ~((1UL << 40) - 1);
+	aper_limit = rdev->mc.aper_base + rdev->mc.aper_size;
+
+	if (!(rdev->mc.aper_base & address_mask ||
+			aper_limit & address_mask)) {
+		mem_info->local_mem_size_public = rdev->mc.visible_vram_size;
+		mem_info->local_mem_size_private = rdev->mc.real_vram_size -
+				rdev->mc.visible_vram_size;
+	} else {
+		mem_info->local_mem_size_public = 0;
+		mem_info->local_mem_size_private = rdev->mc.real_vram_size;
+	}
+	mem_info->vram_width = rdev->mc.vram_width;
+
+	if (amdgpu_powerplay || rdev->pm.funcs->get_mclk)
+		mem_info->mem_clk_max = amdgpu_dpm_get_mclk(rdev, false) / 100;
+
+	pr_debug("amdgpu: address base: 0x%llx limit 0x%llx public 0x%llx private 0x%llx\n",
+			rdev->mc.aper_base, aper_limit,
+			mem_info->local_mem_size_public,
+			mem_info->local_mem_size_private);
 }
 
 uint64_t get_gpu_clock_counter(struct kgd_dev *kgd)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
index de530f68d..31da026 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
@@ -57,7 +57,8 @@  int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
 			void **mem_obj, uint64_t *gpu_addr,
 			void **cpu_ptr);
 void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
-uint64_t get_vmem_size(struct kgd_dev *kgd);
+void get_local_mem_info(struct kgd_dev *kgd,
+			struct kfd_local_mem_info *mem_info);
 uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
 
 uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
index 362bedc..dc69cf7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
@@ -131,7 +131,7 @@  static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
 static const struct kfd2kgd_calls kfd2kgd = {
 	.init_gtt_mem_allocation = alloc_gtt_mem,
 	.free_gtt_mem = free_gtt_mem,
-	.get_vmem_size = get_vmem_size,
+	.get_local_mem_info = get_local_mem_info,
 	.get_gpu_clock_counter = get_gpu_clock_counter,
 	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
 	.program_sh_mem_settings = kgd_program_sh_mem_settings,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
index 04b744d..342a037 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
@@ -90,7 +90,7 @@  static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
 static const struct kfd2kgd_calls kfd2kgd = {
 	.init_gtt_mem_allocation = alloc_gtt_mem,
 	.free_gtt_mem = free_gtt_mem,
-	.get_vmem_size = get_vmem_size,
+	.get_local_mem_info = get_local_mem_info,
 	.get_gpu_clock_counter = get_gpu_clock_counter,
 	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
 	.program_sh_mem_settings = kgd_program_sh_mem_settings,
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 1e50647..6ea7bd8 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -1088,6 +1088,7 @@  static void kfd_debug_print_topology(void)
 
 static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
 {
+	struct kfd_local_mem_info local_mem_info;
 	uint32_t hashout;
 	uint32_t buf[7];
 	uint64_t local_mem_size;
@@ -1096,7 +1097,10 @@  static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
 	if (!gpu)
 		return 0;
 
-	local_mem_size = gpu->kfd2kgd->get_vmem_size(gpu->kgd);
+	gpu->kfd2kgd->get_local_mem_info(gpu->kgd, &local_mem_info);
+
+	local_mem_size = local_mem_info.local_mem_size_private +
+			 local_mem_info.local_mem_size_public;
 
 	buf[0] = gpu->pdev->devfn;
 	buf[1] = gpu->pdev->subsystem_vendor;
diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
index a09d9f3..14ec3e4 100644
--- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
+++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
@@ -39,6 +39,14 @@  struct kgd_dev;
 
 struct kgd_mem;
 
+/* For getting GPU local memory information from KGD */
+struct kfd_local_mem_info {
+	uint64_t local_mem_size_private;
+	uint64_t local_mem_size_public;
+	uint32_t vram_width;
+	uint32_t mem_clk_max;
+};
+
 enum kgd_memory_pool {
 	KGD_POOL_SYSTEM_CACHEABLE = 1,
 	KGD_POOL_SYSTEM_WRITECOMBINE = 2,
@@ -85,7 +93,7 @@  struct kgd2kfd_shared_resources {
  *
  * @free_gtt_mem: Frees a buffer that was allocated on the gart aperture
  *
- * @get_vmem_size: Retrieves (physical) size of VRAM
+ * @get_local_mem_info: Retrieves information about GPU local memory
  *
  * @get_gpu_clock_counter: Retrieves GPU clock counter
  *
@@ -129,7 +137,8 @@  struct kfd2kgd_calls {
 
 	void (*free_gtt_mem)(struct kgd_dev *kgd, void *mem_obj);
 
-	uint64_t (*get_vmem_size)(struct kgd_dev *kgd);
+	void(*get_local_mem_info)(struct kgd_dev *kgd,
+			struct kfd_local_mem_info *mem_info);
 	uint64_t (*get_gpu_clock_counter)(struct kgd_dev *kgd);
 
 	uint32_t (*get_max_engine_clock_in_mhz)(struct kgd_dev *kgd);
diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c
index 87a9ebb..5495362 100644
--- a/drivers/gpu/drm/radeon/radeon_kfd.c
+++ b/drivers/gpu/drm/radeon/radeon_kfd.c
@@ -54,7 +54,8 @@  static int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
 
 static void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
 
-static uint64_t get_vmem_size(struct kgd_dev *kgd);
+static void get_local_mem_info(struct kgd_dev *kgd,
+				struct kfd_local_mem_info *mem_info);
 static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
 
 static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
@@ -107,7 +108,7 @@  static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid);
 static const struct kfd2kgd_calls kfd2kgd = {
 	.init_gtt_mem_allocation = alloc_gtt_mem,
 	.free_gtt_mem = free_gtt_mem,
-	.get_vmem_size = get_vmem_size,
+	.get_local_mem_info = get_local_mem_info,
 	.get_gpu_clock_counter = get_gpu_clock_counter,
 	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
 	.program_sh_mem_settings = kgd_program_sh_mem_settings,
@@ -301,13 +302,26 @@  static void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
 	kfree(mem);
 }
 
-static uint64_t get_vmem_size(struct kgd_dev *kgd)
+static void get_local_mem_info(struct kgd_dev *kgd,
+				struct kfd_local_mem_info *mem_info)
 {
 	struct radeon_device *rdev = (struct radeon_device *)kgd;
 
 	BUG_ON(kgd == NULL);
 
-	return rdev->mc.real_vram_size;
+	memset(mem_info, 0, sizeof(*mem_info));
+
+	mem_info->local_mem_size_public = rdev->mc.visible_vram_size;
+	mem_info->local_mem_size_private = rdev->mc.real_vram_size -
+					   rdev->mc.visible_vram_size;
+
+	mem_info->vram_width = rdev->mc.vram_width;
+	mem_info->mem_clk_max = radeon_dpm_get_mclk(rdev, false);
+
+	pr_debug("radeon: address base: 0x%llx limit 0x%llx public 0x%llx private 0x%llx\n",
+			rdev->mc.aper_base, aper_limit,
+			mem_info->local_mem_size_public,
+			mem_info->local_mem_size_private);
 }
 
 static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd)

Comments

On 09/03/2016 12:49 PM, Edward O'Callaghan wrote:
> Signed-off-by: Edward O'Callaghan <funfunctor@folklore1984.net>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c        | 32 ++++++++++++++++++++---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h        |  3 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c |  2 +-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c |  2 +-
>  drivers/gpu/drm/amd/amdkfd/kfd_topology.c         |  6 ++++-
>  drivers/gpu/drm/amd/include/kgd_kfd_interface.h   | 13 +++++++--
>  drivers/gpu/drm/radeon/radeon_kfd.c               | 22 +++++++++++++---
>  7 files changed, 66 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> index d080d08..63a2e84 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -226,14 +226,38 @@ void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
>  	kfree(mem);
>  }
>  
> -uint64_t get_vmem_size(struct kgd_dev *kgd)
> +void get_local_mem_info(struct kgd_dev *kgd,
> +				struct kfd_local_mem_info *mem_info)
>  {
> -	struct amdgpu_device *rdev =
> -		(struct amdgpu_device *)kgd;
> +	struct amdgpu_device *rdev = (struct amdgpu_device *)kgd;
> +	uint64_t address_mask;
> +	resource_size_t aper_limit;
>  
>  	BUG_ON(kgd == NULL);
>  
> -	return rdev->mc.real_vram_size;
> +	memset(mem_info, 0, sizeof(*mem_info));
> +
> +	address_mask = ~((1UL << 40) - 1);
> +	aper_limit = rdev->mc.aper_base + rdev->mc.aper_size;
> +
> +	if (!(rdev->mc.aper_base & address_mask ||
> +			aper_limit & address_mask)) {
> +		mem_info->local_mem_size_public = rdev->mc.visible_vram_size;
> +		mem_info->local_mem_size_private = rdev->mc.real_vram_size -
> +				rdev->mc.visible_vram_size;
> +	} else {
> +		mem_info->local_mem_size_public = 0;
> +		mem_info->local_mem_size_private = rdev->mc.real_vram_size;
> +	}
> +	mem_info->vram_width = rdev->mc.vram_width;
> +
> +	if (amdgpu_powerplay || rdev->pm.funcs->get_mclk)
> +		mem_info->mem_clk_max = amdgpu_dpm_get_mclk(rdev, false) / 100;
> +
> +	pr_debug("amdgpu: address base: 0x%llx limit 0x%llx public 0x%llx private 0x%llx\n",
> +			rdev->mc.aper_base, aper_limit,
> +			mem_info->local_mem_size_public,
> +			mem_info->local_mem_size_private);
>  }
>  
>  uint64_t get_gpu_clock_counter(struct kgd_dev *kgd)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> index de530f68d..31da026 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -57,7 +57,8 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
>  			void **mem_obj, uint64_t *gpu_addr,
>  			void **cpu_ptr);
>  void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
> -uint64_t get_vmem_size(struct kgd_dev *kgd);
> +void get_local_mem_info(struct kgd_dev *kgd,
> +			struct kfd_local_mem_info *mem_info);
>  uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
>  
>  uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> index 362bedc..dc69cf7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> @@ -131,7 +131,7 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
>  static const struct kfd2kgd_calls kfd2kgd = {
>  	.init_gtt_mem_allocation = alloc_gtt_mem,
>  	.free_gtt_mem = free_gtt_mem,
> -	.get_vmem_size = get_vmem_size,
> +	.get_local_mem_info = get_local_mem_info,
>  	.get_gpu_clock_counter = get_gpu_clock_counter,
>  	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
>  	.program_sh_mem_settings = kgd_program_sh_mem_settings,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> index 04b744d..342a037 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> @@ -90,7 +90,7 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
>  static const struct kfd2kgd_calls kfd2kgd = {
>  	.init_gtt_mem_allocation = alloc_gtt_mem,
>  	.free_gtt_mem = free_gtt_mem,
> -	.get_vmem_size = get_vmem_size,
> +	.get_local_mem_info = get_local_mem_info,
>  	.get_gpu_clock_counter = get_gpu_clock_counter,
>  	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
>  	.program_sh_mem_settings = kgd_program_sh_mem_settings,
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> index 1e50647..6ea7bd8 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
> @@ -1088,6 +1088,7 @@ static void kfd_debug_print_topology(void)
>  
>  static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
>  {
> +	struct kfd_local_mem_info local_mem_info;
>  	uint32_t hashout;
>  	uint32_t buf[7];
>  	uint64_t local_mem_size;
> @@ -1096,7 +1097,10 @@ static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
>  	if (!gpu)
>  		return 0;
>  
> -	local_mem_size = gpu->kfd2kgd->get_vmem_size(gpu->kgd);
> +	gpu->kfd2kgd->get_local_mem_info(gpu->kgd, &local_mem_info);
> +
> +	local_mem_size = local_mem_info.local_mem_size_private +
> +			 local_mem_info.local_mem_size_public;
>  
>  	buf[0] = gpu->pdev->devfn;
>  	buf[1] = gpu->pdev->subsystem_vendor;
> diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> index a09d9f3..14ec3e4 100644
> --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h
> @@ -39,6 +39,14 @@ struct kgd_dev;
>  
>  struct kgd_mem;
>  
> +/* For getting GPU local memory information from KGD */
> +struct kfd_local_mem_info {
> +	uint64_t local_mem_size_private;
> +	uint64_t local_mem_size_public;
> +	uint32_t vram_width;
> +	uint32_t mem_clk_max;
> +};
> +
>  enum kgd_memory_pool {
>  	KGD_POOL_SYSTEM_CACHEABLE = 1,
>  	KGD_POOL_SYSTEM_WRITECOMBINE = 2,
> @@ -85,7 +93,7 @@ struct kgd2kfd_shared_resources {
>   *
>   * @free_gtt_mem: Frees a buffer that was allocated on the gart aperture
>   *
> - * @get_vmem_size: Retrieves (physical) size of VRAM
> + * @get_local_mem_info: Retrieves information about GPU local memory
>   *
>   * @get_gpu_clock_counter: Retrieves GPU clock counter
>   *
> @@ -129,7 +137,8 @@ struct kfd2kgd_calls {
>  
>  	void (*free_gtt_mem)(struct kgd_dev *kgd, void *mem_obj);
>  
> -	uint64_t (*get_vmem_size)(struct kgd_dev *kgd);
> +	void(*get_local_mem_info)(struct kgd_dev *kgd,
> +			struct kfd_local_mem_info *mem_info);
>  	uint64_t (*get_gpu_clock_counter)(struct kgd_dev *kgd);
>  
>  	uint32_t (*get_max_engine_clock_in_mhz)(struct kgd_dev *kgd);
> diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c
> index 87a9ebb..5495362 100644
> --- a/drivers/gpu/drm/radeon/radeon_kfd.c
> +++ b/drivers/gpu/drm/radeon/radeon_kfd.c
> @@ -54,7 +54,8 @@ static int alloc_gtt_mem(struct kgd_dev *kgd, size_t size,
>  
>  static void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj);
>  
> -static uint64_t get_vmem_size(struct kgd_dev *kgd);
> +static void get_local_mem_info(struct kgd_dev *kgd,
> +				struct kfd_local_mem_info *mem_info);
>  static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd);
>  
>  static uint32_t get_max_engine_clock_in_mhz(struct kgd_dev *kgd);
> @@ -107,7 +108,7 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid);
>  static const struct kfd2kgd_calls kfd2kgd = {
>  	.init_gtt_mem_allocation = alloc_gtt_mem,
>  	.free_gtt_mem = free_gtt_mem,
> -	.get_vmem_size = get_vmem_size,
> +	.get_local_mem_info = get_local_mem_info,
>  	.get_gpu_clock_counter = get_gpu_clock_counter,
>  	.get_max_engine_clock_in_mhz = get_max_engine_clock_in_mhz,
>  	.program_sh_mem_settings = kgd_program_sh_mem_settings,
> @@ -301,13 +302,26 @@ static void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj)
>  	kfree(mem);
>  }
>  
> -static uint64_t get_vmem_size(struct kgd_dev *kgd)
> +static void get_local_mem_info(struct kgd_dev *kgd,
> +				struct kfd_local_mem_info *mem_info)
>  {
>  	struct radeon_device *rdev = (struct radeon_device *)kgd;
>  
>  	BUG_ON(kgd == NULL);
>  
> -	return rdev->mc.real_vram_size;
> +	memset(mem_info, 0, sizeof(*mem_info));
> +
> +	mem_info->local_mem_size_public = rdev->mc.visible_vram_size;
> +	mem_info->local_mem_size_private = rdev->mc.real_vram_size -
> +					   rdev->mc.visible_vram_size;
> +
> +	mem_info->vram_width = rdev->mc.vram_width;
> +	mem_info->mem_clk_max = radeon_dpm_get_mclk(rdev, false);
> +
> +	pr_debug("radeon: address base: 0x%llx limit 0x%llx public 0x%llx private 0x%llx\n",
> +			rdev->mc.aper_base, aper_limit,
> +			mem_info->local_mem_size_public,
> +			mem_info->local_mem_size_private);

woops ! ignore this patch, I have a fixed up version locally. Will
resent once the others are looked at with some additional patches also.

Sorry for the noise.
Kind Regards,
Edward.

>  }
>  
>  static uint64_t get_gpu_clock_counter(struct kgd_dev *kgd)
>