On Sat, Aug 12, 2017 at 7:47 AM, Felix Kuehling <Felix.Kuehling at amd.com> wrote: > From: Yong Zhao <yong.zhao at amd.com> > > Signed-off-by: Yong Zhao <yong.zhao at amd.com> > Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com> > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 29 ++++++++++++++++++++++- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 28 +++++++++++++++++++++- > drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 12 ++++++++++ > 3 files changed, 67 insertions(+), 2 deletions(-) > > 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 11d515a..445a686 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c > @@ -140,6 +140,32 @@ static int alloc_memory_of_scratch(struct kgd_dev *kgd, > static int write_config_static_mem(struct kgd_dev *kgd, bool swizzle_enable, > uint8_t element_size, uint8_t index_stride, uint8_t mtype); > > +/* Because of REG_GET_FIELD() being used, we put this function in the > + * asic specific file. > + */ > +static int amdgpu_amdkfd_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, > @@ -165,7 +191,8 @@ static const struct kfd2kgd_calls kfd2kgd = { > .write_vmid_invalidate_request = write_vmid_invalidate_request, > .get_fw_version = get_fw_version, > .alloc_memory_of_scratch = alloc_memory_of_scratch, > - .write_config_static_mem = write_config_static_mem > + .write_config_static_mem = write_config_static_mem, > + .get_tile_config = amdgpu_amdkfd_get_tile_config, > }; > > struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void) > 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 ef677e5..2d6ba09 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c > @@ -99,6 +99,31 @@ static int alloc_memory_of_scratch(struct kgd_dev *kgd, > static int write_config_static_mem(struct kgd_dev *kgd, bool swizzle_enable, > uint8_t element_size, uint8_t index_stride, uint8_t mtype); > > +/* Because of REG_GET_FIELD() being used, we put this function in the > + * asic specific file. > + */ > +static int amdgpu_amdkfd_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, > @@ -126,7 +151,8 @@ static const struct kfd2kgd_calls kfd2kgd = { > .write_vmid_invalidate_request = write_vmid_invalidate_request, > .get_fw_version = get_fw_version, > .alloc_memory_of_scratch = alloc_memory_of_scratch, > - .write_config_static_mem = write_config_static_mem > + .write_config_static_mem = write_config_static_mem, > + .get_tile_config = amdgpu_amdkfd_get_tile_config, > }; > > struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void) > diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > index 1dd90b2..22774ac 100644 > --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h > @@ -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 > * > @@ -203,6 +214,7 @@ struct kfd2kgd_calls { > uint64_t va, uint32_t vmid); > int (*write_config_static_mem)(struct kgd_dev *kgd, bool swizzle_enable, > uint8_t element_size, uint8_t index_stride, uint8_t mtype); > + int (*get_tile_config)(struct kgd_dev *kgd, struct tile_config *config); > }; > > /** > -- > 2.7.4 > This patch is: Acked-by: Oded Gabbay <oded.gabbay at gmail.com>