drm/amdgpu: Add kgd kfd interface get_tile_config() v2
authorYong Zhao <yong.zhao@amd.com>
Wed, 16 Aug 2017 03:00:21 +0000 (23:00 -0400)
committerOded Gabbay <oded.gabbay@gmail.com>
Wed, 16 Aug 2017 03:00:21 +0000 (23:00 -0400)
v2:
* Removed amdgpu_amdkfd prefix from static functions
* Documented get_tile_config in kgd_kfd_interface.h

Signed-off-by: Yong Zhao <yong.zhao@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
drivers/gpu/drm/amd/include/kgd_kfd_interface.h

index 3793d7b..b9dbbf9 100644 (file)
@@ -138,6 +138,31 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
 static void set_scratch_backing_va(struct kgd_dev *kgd,
                                        uint64_t va, uint32_t vmid);
 
+/* Because of REG_GET_FIELD() being used, we put this function in the
+ * asic specific file.
+ */
+static int get_tile_config(struct kgd_dev *kgd,
+               struct tile_config *config)
+{
+       struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
+
+       config->gb_addr_config = adev->gfx.config.gb_addr_config;
+       config->num_banks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg,
+                               MC_ARB_RAMCFG, NOOFBANK);
+       config->num_ranks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg,
+                               MC_ARB_RAMCFG, NOOFRANKS);
+
+       config->tile_config_ptr = adev->gfx.config.tile_mode_array;
+       config->num_tile_configs =
+                       ARRAY_SIZE(adev->gfx.config.tile_mode_array);
+       config->macro_tile_config_ptr =
+                       adev->gfx.config.macrotile_mode_array;
+       config->num_macro_tile_configs =
+                       ARRAY_SIZE(adev->gfx.config.macrotile_mode_array);
+
+       return 0;
+}
+
 static const struct kfd2kgd_calls kfd2kgd = {
        .init_gtt_mem_allocation = alloc_gtt_mem,
        .free_gtt_mem = free_gtt_mem,
@@ -163,6 +188,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
        .write_vmid_invalidate_request = write_vmid_invalidate_request,
        .get_fw_version = get_fw_version,
        .set_scratch_backing_va = set_scratch_backing_va,
+       .get_tile_config = get_tile_config,
 };
 
 struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
index 61f6457..fb6e5db 100644 (file)
@@ -97,6 +97,31 @@ static uint16_t get_fw_version(struct kgd_dev *kgd, enum kgd_engine_type type);
 static void set_scratch_backing_va(struct kgd_dev *kgd,
                                        uint64_t va, uint32_t vmid);
 
+/* Because of REG_GET_FIELD() being used, we put this function in the
+ * asic specific file.
+ */
+static int get_tile_config(struct kgd_dev *kgd,
+               struct tile_config *config)
+{
+       struct amdgpu_device *adev = (struct amdgpu_device *)kgd;
+
+       config->gb_addr_config = adev->gfx.config.gb_addr_config;
+       config->num_banks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg,
+                               MC_ARB_RAMCFG, NOOFBANK);
+       config->num_ranks = REG_GET_FIELD(adev->gfx.config.mc_arb_ramcfg,
+                               MC_ARB_RAMCFG, NOOFRANKS);
+
+       config->tile_config_ptr = adev->gfx.config.tile_mode_array;
+       config->num_tile_configs =
+                       ARRAY_SIZE(adev->gfx.config.tile_mode_array);
+       config->macro_tile_config_ptr =
+                       adev->gfx.config.macrotile_mode_array;
+       config->num_macro_tile_configs =
+                       ARRAY_SIZE(adev->gfx.config.macrotile_mode_array);
+
+       return 0;
+}
+
 static const struct kfd2kgd_calls kfd2kgd = {
        .init_gtt_mem_allocation = alloc_gtt_mem,
        .free_gtt_mem = free_gtt_mem,
@@ -124,6 +149,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
        .write_vmid_invalidate_request = write_vmid_invalidate_request,
        .get_fw_version = get_fw_version,
        .set_scratch_backing_va = set_scratch_backing_va,
+       .get_tile_config = get_tile_config,
 };
 
 struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
index 2a9cc5e..94277cb 100644 (file)
@@ -87,6 +87,17 @@ struct kgd2kfd_shared_resources {
        size_t doorbell_start_offset;
 };
 
+struct tile_config {
+       uint32_t *tile_config_ptr;
+       uint32_t *macro_tile_config_ptr;
+       uint32_t num_tile_configs;
+       uint32_t num_macro_tile_configs;
+
+       uint32_t gb_addr_config;
+       uint32_t num_banks;
+       uint32_t num_ranks;
+};
+
 /**
  * struct kfd2kgd_calls
  *
@@ -131,6 +142,8 @@ struct kgd2kfd_shared_resources {
  * @set_scratch_backing_va: Sets VA for scratch backing memory of a VMID.
  * Only used for no cp scheduling mode
  *
+ * @get_tile_config: Returns GPU-specific tiling mode information
+ *
  * This structure contains function pointers to services that the kgd driver
  * provides to amdkfd driver.
  *
@@ -204,6 +217,7 @@ struct kfd2kgd_calls {
                                enum kgd_engine_type type);
        void (*set_scratch_backing_va)(struct kgd_dev *kgd,
                                uint64_t va, uint32_t vmid);
+       int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config);
 };
 
 /**