From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhao, Yong" Subject: Re: [PATCH 4/6] drm/amdkfd: Use array to probe kfd2kgd_calls Date: Mon, 30 Sep 2019 18:04:36 +0000 Message-ID: References: <20190928034132.28340-1-Yong.Zhao@amd.com> <20190928034132.28340-4-Yong.Zhao@amd.com>, <39dcbd3e-1bb9-8729-6368-0e87fdfcdbd3@amd.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1145087799==" Return-path: In-Reply-To: <39dcbd3e-1bb9-8729-6368-0e87fdfcdbd3-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Kuehling, Felix" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" --===============1145087799== Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_DM6PR12MB2778A4D093E06270A918BF09F0820DM6PR12MB2778namp_" --_000_DM6PR12MB2778A4D093E06270A918BF09F0820DM6PR12MB2778namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Thanks. Will check that and fix the missing const. Yong ________________________________ From: Kuehling, Felix Sent: Monday, September 30, 2019 11:42 AM To: Zhao, Yong ; amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Subject: Re: [PATCH 4/6] drm/amdkfd: Use array to probe kfd2kgd_calls On 2019-09-27 11:41 p.m., Zhao, Yong wrote: > This is the same idea as the kfd device info probe and move all the > probe control together for easy maintenance. > > Change-Id: I85c98bb08eb2a4a1a80c3b913c32691cc74602d1 > Signed-off-by: Yong Zhao Nice clean-up. See one comment inline. Also, please check that this doesn't break the build if CONFIG_HSA_AMD is undefined. With that fixed and checked, this patch is Reviewed-by: Felix Kuehling > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 65 +------------------ > drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 7 -- > .../drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c | 8 +-- > .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 7 +- > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 7 +- > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 7 +- > .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 7 +- > drivers/gpu/drm/amd/amdkfd/kfd_device.c | 39 +++++++++-- > 8 files changed, 41 insertions(+), 106 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm= /amd/amdgpu/amdgpu_amdkfd.c > index 92666b197f6c..8c531793fe17 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c > @@ -63,47 +63,10 @@ void amdgpu_amdkfd_fini(void) > > void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) > { > - const struct kfd2kgd_calls *kfd2kgd; > bool vf =3D amdgpu_sriov_vf(adev); > > - switch (adev->asic_type) { > -#ifdef CONFIG_DRM_AMDGPU_CIK > - case CHIP_KAVERI: > - case CHIP_HAWAII: > - kfd2kgd =3D amdgpu_amdkfd_gfx_7_get_functions(); > - break; > -#endif > - case CHIP_CARRIZO: > - case CHIP_TONGA: > - case CHIP_FIJI: > - case CHIP_POLARIS10: > - case CHIP_POLARIS11: > - case CHIP_POLARIS12: > - case CHIP_VEGAM: > - kfd2kgd =3D amdgpu_amdkfd_gfx_8_0_get_functions(); > - break; > - case CHIP_VEGA10: > - case CHIP_VEGA12: > - case CHIP_VEGA20: > - case CHIP_RAVEN: > - case CHIP_RENOIR: > - kfd2kgd =3D amdgpu_amdkfd_gfx_9_0_get_functions(); > - break; > - case CHIP_ARCTURUS: > - kfd2kgd =3D amdgpu_amdkfd_arcturus_get_functions(); > - break; > - case CHIP_NAVI10: > - case CHIP_NAVI14: > - case CHIP_NAVI12: > - kfd2kgd =3D amdgpu_amdkfd_gfx_10_0_get_functions(); > - break; > - default: > - dev_info(adev->dev, "kfd not supported on this ASIC\n"); > - return; > - } > - > adev->kfd.dev =3D kgd2kfd_probe((struct kgd_dev *)adev, > - adev->pdev, kfd2kgd, adev->asic_type,= vf); > + adev->pdev, adev->asic_type, vf); > > if (adev->kfd.dev) > amdgpu_amdkfd_total_mem_size +=3D adev->gmc.real_vram_size= ; > @@ -711,33 +674,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_mem *mem,= struct mm_struct *mm) > return 0; > } > > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void) > -{ > - return NULL; > -} > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void) > -{ > - return NULL; > -} > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void) > -{ > - return NULL; > -} > - > -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void) > -{ > - return NULL; > -} > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void) > -{ > - return NULL; > -} > - > struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev= , > - const struct kfd2kgd_calls *f2g, > unsigned int asic_type, bool vf) > { > return NULL; > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm= /amd/amdgpu/amdgpu_amdkfd.h > index 4eb2fb85de26..069d5d230810 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h > @@ -137,12 +137,6 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *kgd, enu= m kgd_engine_type engine, > void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, bool idle); > bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kgd); > > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void); > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void); > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void); > -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void); > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void); > - > bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev, u32 vmid); > > int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev); > @@ -248,7 +242,6 @@ void amdgpu_amdkfd_unreserve_memory_limit(struct amdg= pu_bo *bo); > int kgd2kfd_init(void); > void kgd2kfd_exit(void); > struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev= , > - const struct kfd2kgd_calls *f2g, > unsigned int asic_type, bool vf); > bool kgd2kfd_device_init(struct kfd_dev *kfd, > struct drm_device *ddev, > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c b/driver= s/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c > index 4a49dbee26a1..e1fbbebce4fd 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c > @@ -262,7 +262,7 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev *kgd, = void *mqd, > return 0; > } > > -static const struct kfd2kgd_calls kfd2kgd =3D { > +const struct kfd2kgd_calls arcturus_kfd2kgd =3D { > .program_sh_mem_settings =3D kgd_gfx_v9_program_sh_mem_settings, > .set_pasid_vmid_mapping =3D kgd_gfx_v9_set_pasid_vmid_mapping, > .init_interrupts =3D kgd_gfx_v9_init_interrupts, > @@ -286,9 +286,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D { > .invalidate_tlbs_vmid =3D kgd_gfx_v9_invalidate_tlbs_vmid, > .get_hive_id =3D amdgpu_amdkfd_get_hive_id, > }; > - > -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void) > -{ > - return (struct kfd2kgd_calls *)&kfd2kgd; > -} > - > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers= /gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > index be9b873ec683..a01704bc91cd 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > @@ -815,7 +815,7 @@ static void set_vm_context_page_table_base(struct kgd= _dev *kgd, uint32_t vmid, > gfxhub_v2_0_setup_vm_pt_regs(adev, vmid, page_table_base); > } > > -static const struct kfd2kgd_calls kfd2kgd =3D { > +struct kfd2kgd_calls gfx_v10_kfd2kgd =3D { This should be const. Can you fix that too while you're here? > .program_sh_mem_settings =3D kgd_program_sh_mem_settings, > .set_pasid_vmid_mapping =3D kgd_set_pasid_vmid_mapping, > .init_interrupts =3D kgd_init_interrupts, > @@ -839,8 +839,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D { > .invalidate_tlbs_vmid =3D invalidate_tlbs_vmid, > .get_hive_id =3D amdgpu_amdkfd_get_hive_id, > }; > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions() > -{ > - return (struct kfd2kgd_calls *)&kfd2kgd; > -} > 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 9c4ebcadad62..0b9cc6515e64 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c > @@ -751,7 +751,7 @@ static uint32_t read_vmid_from_vmfault_reg(struct kgd= _dev *kgd) > return REG_GET_FIELD(status, VM_CONTEXT1_PROTECTION_FAULT_STATUS, = VMID); > } > > -static const struct kfd2kgd_calls kfd2kgd =3D { > +const struct kfd2kgd_calls gfx_v7_kfd2kgd =3D { > .program_sh_mem_settings =3D kgd_program_sh_mem_settings, > .set_pasid_vmid_mapping =3D kgd_set_pasid_vmid_mapping, > .init_interrupts =3D kgd_init_interrupts, > @@ -775,8 +775,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D { > .invalidate_tlbs_vmid =3D invalidate_tlbs_vmid, > .read_vmid_from_vmfault_reg =3D read_vmid_from_vmfault_reg, > }; > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void) > -{ > - return (struct kfd2kgd_calls *)&kfd2kgd; > -} > 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 f2e52b496044..3416a7f27dc7 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c > @@ -696,7 +696,7 @@ static int invalidate_tlbs_vmid(struct kgd_dev *kgd, = uint16_t vmid) > return 0; > } > > -static const struct kfd2kgd_calls kfd2kgd =3D { > +const struct kfd2kgd_calls gfx_v8_kfd2kgd =3D { > .program_sh_mem_settings =3D kgd_program_sh_mem_settings, > .set_pasid_vmid_mapping =3D kgd_set_pasid_vmid_mapping, > .init_interrupts =3D kgd_init_interrupts, > @@ -720,8 +720,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D { > .invalidate_tlbs =3D invalidate_tlbs, > .invalidate_tlbs_vmid =3D invalidate_tlbs_vmid, > }; > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void) > -{ > - return (struct kfd2kgd_calls *)&kfd2kgd; > -} > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/= gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c > index 12f30df2174c..82ed9316b096 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c > @@ -786,7 +786,7 @@ void kgd_gfx_v9_set_vm_context_page_table_base(struct= kgd_dev *kgd, uint32_t vmi > gfxhub_v1_0_setup_vm_pt_regs(adev, vmid, page_table_base); > } > > -static const struct kfd2kgd_calls kfd2kgd =3D { > +const struct kfd2kgd_calls gfx_v9_kfd2kgd =3D { > .program_sh_mem_settings =3D kgd_gfx_v9_program_sh_mem_settings, > .set_pasid_vmid_mapping =3D kgd_gfx_v9_set_pasid_vmid_mapping, > .init_interrupts =3D kgd_gfx_v9_init_interrupts, > @@ -810,8 +810,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D { > .invalidate_tlbs_vmid =3D kgd_gfx_v9_invalidate_tlbs_vmid, > .get_hive_id =3D amdgpu_amdkfd_get_hive_id, > }; > - > -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void) > -{ > - return (struct kfd2kgd_calls *)&kfd2kgd; > -} > diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/am= d/amdkfd/kfd_device.c > index 96a9e0653db2..0db273587af4 100644 > --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c > +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c > @@ -39,6 +39,35 @@ > */ > static atomic_t kfd_locked =3D ATOMIC_INIT(0); > > +extern const struct kfd2kgd_calls gfx_v7_kfd2kgd; > +extern const struct kfd2kgd_calls gfx_v8_kfd2kgd; > +extern const struct kfd2kgd_calls gfx_v9_kfd2kgd; > +extern const struct kfd2kgd_calls arcturus_kfd2kgd; > +extern const struct kfd2kgd_calls gfx_v10_kfd2kgd; > + > +static const struct kfd2kgd_calls *kfd2kgd_funcs[] =3D { > +#ifdef KFD_SUPPORT_IOMMU_V2 > + [CHIP_KAVERI] =3D &gfx_v7_kfd2kgd, > + [CHIP_CARRIZO] =3D &gfx_v8_kfd2kgd, > + [CHIP_RAVEN] =3D &gfx_v9_kfd2kgd, > +#endif > + [CHIP_HAWAII] =3D &gfx_v7_kfd2kgd, > + [CHIP_TONGA] =3D &gfx_v8_kfd2kgd, > + [CHIP_FIJI] =3D &gfx_v8_kfd2kgd, > + [CHIP_POLARIS10] =3D &gfx_v8_kfd2kgd, > + [CHIP_POLARIS11] =3D &gfx_v8_kfd2kgd, > + [CHIP_POLARIS12] =3D &gfx_v8_kfd2kgd, > + [CHIP_VEGAM] =3D &gfx_v8_kfd2kgd, > + [CHIP_VEGA10] =3D &gfx_v9_kfd2kgd, > + [CHIP_VEGA12] =3D &gfx_v9_kfd2kgd, > + [CHIP_VEGA20] =3D &gfx_v9_kfd2kgd, > + [CHIP_RENOIR] =3D &gfx_v9_kfd2kgd, > + [CHIP_ARCTURUS] =3D &arcturus_kfd2kgd, > + [CHIP_NAVI10] =3D &gfx_v10_kfd2kgd, > + [CHIP_NAVI12] =3D &gfx_v10_kfd2kgd, > + [CHIP_NAVI14] =3D &gfx_v10_kfd2kgd, > +}; > + > #ifdef KFD_SUPPORT_IOMMU_V2 > static const struct kfd_device_info kaveri_device_info =3D { > .asic_family =3D CHIP_KAVERI, > @@ -454,20 +483,22 @@ static void kfd_gtt_sa_fini(struct kfd_dev *kfd); > static int kfd_resume(struct kfd_dev *kfd); > > struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, > - struct pci_dev *pdev, const struct kfd2kgd_calls *f2g, > - unsigned int asic_type, bool vf) > + struct pci_dev *pdev, unsigned int asic_type, bool vf) > { > struct kfd_dev *kfd; > const struct kfd_device_info *device_info; > + const struct kfd2kgd_calls *f2g; > > - if (asic_type >=3D sizeof(kfd_supported_devices) / (sizeof(void *) = * 2)) { > + if (asic_type >=3D sizeof(kfd_supported_devices) / (sizeof(void *) = * 2) > + || asic_type >=3D sizeof(kfd2kgd_funcs) / sizeof(void *)) { > dev_err(kfd_device, "asic_type %d out of range\n", asic_ty= pe); > return NULL; /* asic_type out of range */ > } > > device_info =3D kfd_supported_devices[asic_type][vf]; > + f2g =3D kfd2kgd_funcs[asic_type]; > > - if (!device_info) { > + if (!device_info && !f2g) { > dev_err(kfd_device, "%s %s not supported in kfd\n", > amdgpu_asic_name[asic_type], vf ? "VF" : ""); > return NULL; --_000_DM6PR12MB2778A4D093E06270A918BF09F0820DM6PR12MB2778namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable
Thanks. Will check that and fix the missing const. 

Yong

From: Kuehling, Felix <F= elix.Kuehling-5C7GfCeVMHo@public.gmane.org>
Sent: Monday, September 30, 2019 11:42 AM
To: Zhao, Yong <Yong.Zhao-5C7GfCeVMHo@public.gmane.org>; amd-gfx-PD4FTy7X32lNgt0PjOBp9/rsn8yoX9R0@public.gmane.org= org <amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: Re: [PATCH 4/6] drm/amdkfd: Use array to probe kfd2kgd_call= s
 
On 2019-09-27 11:41 p.m., Zhao, Yong wrote:
> This is the same idea as the kfd device info probe and move all the > probe control together for easy maintenance.
>
> Change-Id: I85c98bb08eb2a4a1a80c3b913c32691cc74602d1
> Signed-off-by: Yong Zhao <Yong.Zhao-5C7GfCeVMHo@public.gmane.org>

Nice clean-up. See one comment inline.

Also, please check that this doesn't break the build if CONFIG_HSA_AMD
is undefined.

With that fixed and checked, this patch is

Reviewed-by: Felix Kuehling <Felix.Kuehling-5C7GfCeVMHo@public.gmane.org>


> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c  &nbs= p; | 65 +------------------
>   drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h  &nbs= p; |  7 --
>   .../drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c   |&= nbsp; 8 +--
>   .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c  &nbs= p; |  7 +-
>   .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c |  7 &#= 43;-
>   .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c |  7 &#= 43;-
>   .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c |  7 &#= 43;-
>   drivers/gpu/drm/amd/amdkfd/kfd_device.c   &= nbsp;   | 39 +++++++++--
>   8 files changed, 41 insertions(+), 106 deletions(-) >
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/= drm/amd/amdgpu/amdgpu_amdkfd.c
> index 92666b197f6c..8c531793fe17 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
> @@ -63,47 +63,10 @@ void amdgpu_amdkfd_fini(void)
>  
>   void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev= )
>   {
> -     const struct kfd2kgd_calls *kfd2kgd;
>        bool vf =3D amdgpu_sriov_vf(= adev);
>  
> -     switch (adev->asic_type) {
> -#ifdef CONFIG_DRM_AMDGPU_CIK
> -     case CHIP_KAVERI:
> -     case CHIP_HAWAII:
> -           &nb= sp; kfd2kgd =3D amdgpu_amdkfd_gfx_7_get_functions();
> -           &nb= sp; break;
> -#endif
> -     case CHIP_CARRIZO:
> -     case CHIP_TONGA:
> -     case CHIP_FIJI:
> -     case CHIP_POLARIS10:
> -     case CHIP_POLARIS11:
> -     case CHIP_POLARIS12:
> -     case CHIP_VEGAM:
> -           &nb= sp; kfd2kgd =3D amdgpu_amdkfd_gfx_8_0_get_functions();
> -           &nb= sp; break;
> -     case CHIP_VEGA10:
> -     case CHIP_VEGA12:
> -     case CHIP_VEGA20:
> -     case CHIP_RAVEN:
> -     case CHIP_RENOIR:
> -           &nb= sp; kfd2kgd =3D amdgpu_amdkfd_gfx_9_0_get_functions();
> -           &nb= sp; break;
> -     case CHIP_ARCTURUS:
> -           &nb= sp; kfd2kgd =3D amdgpu_amdkfd_arcturus_get_functions();
> -           &nb= sp; break;
> -     case CHIP_NAVI10:
> -     case CHIP_NAVI14:
> -     case CHIP_NAVI12:
> -           &nb= sp; kfd2kgd =3D amdgpu_amdkfd_gfx_10_0_get_functions();
> -           &nb= sp; break;
> -     default:
> -           &nb= sp; dev_info(adev->dev, "kfd not supported on this ASIC\n"); > -           &nb= sp; return;
> -     }
> -
>        adev->kfd.dev =3D kgd2kfd= _probe((struct kgd_dev *)adev,
> -           &nb= sp;            =            adev->pdev,= kfd2kgd, adev->asic_type, vf);
> +           = ;            &n= bsp;           adev->p= dev, adev->asic_type, vf);
>  
>        if (adev->kfd.dev)
>            = ;    amdgpu_amdkfd_total_mem_size +=3D adev->gmc.real= _vram_size;
> @@ -711,33 +674,7 @@ int amdgpu_amdkfd_evict_userptr(struct kgd_me= m *mem, struct mm_struct *mm)
>        return 0;
>   }
>  
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
> -{
> -     return NULL;
> -}
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
> -{
> -     return NULL;
> -}
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void)
> -{
> -     return NULL;
> -}
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void)
> -{
> -     return NULL;
> -}
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void)
> -{
> -     return NULL;
> -}
> -
>   struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct = pci_dev *pdev,
> -           &nb= sp;            =    const struct kfd2kgd_calls *f2g,
>            = ;            &n= bsp;     unsigned int asic_type, bool vf)
>   {
>        return NULL;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/= drm/amd/amdgpu/amdgpu_amdkfd.h
> index 4eb2fb85de26..069d5d230810 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
> @@ -137,12 +137,6 @@ int amdgpu_amdkfd_submit_ib(struct kgd_dev *k= gd, enum kgd_engine_type engine,
>   void amdgpu_amdkfd_set_compute_idle(struct kgd_dev *kgd, b= ool idle);
>   bool amdgpu_amdkfd_have_atomics_support(struct kgd_dev *kg= d);
>  
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void);
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void);
> -
>   bool amdgpu_amdkfd_is_kfd_vmid(struct amdgpu_device *adev,= u32 vmid);
>  
>   int amdgpu_amdkfd_pre_reset(struct amdgpu_device *adev); > @@ -248,7 +242,6 @@ void amdgpu_amdkfd_unreserve_memory_limit(stru= ct amdgpu_bo *bo);
>   int kgd2kfd_init(void);
>   void kgd2kfd_exit(void);
>   struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct = pci_dev *pdev,
> -           &nb= sp;            =    const struct kfd2kgd_calls *f2g,
>            = ;            &n= bsp;     unsigned int asic_type, bool vf);
>   bool kgd2kfd_device_init(struct kfd_dev *kfd,
>            = ;             s= truct drm_device *ddev,
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c b/dri= vers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
> index 4a49dbee26a1..e1fbbebce4fd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c<= br> > @@ -262,7 +262,7 @@ static int kgd_hqd_sdma_destroy(struct kgd_dev= *kgd, void *mqd,
>        return 0;
>   }
>  
> -static const struct kfd2kgd_calls kfd2kgd =3D {
> +const struct kfd2kgd_calls arcturus_kfd2kgd =3D {
>        .program_sh_mem_settings =3D= kgd_gfx_v9_program_sh_mem_settings,
>        .set_pasid_vmid_mapping =3D = kgd_gfx_v9_set_pasid_vmid_mapping,
>        .init_interrupts =3D kgd_gfx= _v9_init_interrupts,
> @@ -286,9 +286,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D = {
>        .invalidate_tlbs_vmid =3D kg= d_gfx_v9_invalidate_tlbs_vmid,
>        .get_hive_id =3D amdgpu_amdk= fd_get_hive_id,
>   };
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_arcturus_get_functions(void)
> -{
> -     return (struct kfd2kgd_calls *)&kfd2kgd;=
> -}
> -
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/driv= ers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
> index be9b873ec683..a01704bc91cd 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c > @@ -815,7 +815,7 @@ static void set_vm_context_page_table_base(str= uct kgd_dev *kgd, uint32_t vmid,
>        gfxhub_v2_0_setup_vm_pt_regs= (adev, vmid, page_table_base);
>   }
>  
> -static const struct kfd2kgd_calls kfd2kgd =3D {
> +struct kfd2kgd_calls gfx_v10_kfd2kgd =3D {

This should be const. Can you fix that too while you're here?


>        .program_sh_mem_settings =3D= kgd_program_sh_mem_settings,
>        .set_pasid_vmid_mapping =3D = kgd_set_pasid_vmid_mapping,
>        .init_interrupts =3D kgd_ini= t_interrupts,
> @@ -839,8 +839,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D = {
>        .invalidate_tlbs_vmid =3D in= validate_tlbs_vmid,
>        .get_hive_id =3D amdgpu_amdk= fd_get_hive_id,
>   };
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions()
> -{
> -     return (struct kfd2kgd_calls *)&kfd2kgd;=
> -}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drive= rs/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> index 9c4ebcadad62..0b9cc6515e64 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c > @@ -751,7 +751,7 @@ static uint32_t read_vmid_from_vmfault_reg(str= uct kgd_dev *kgd)
>        return REG_GET_FIELD(status,= VM_CONTEXT1_PROTECTION_FAULT_STATUS, VMID);
>   }
>  
> -static const struct kfd2kgd_calls kfd2kgd =3D {
> +const struct kfd2kgd_calls gfx_v7_kfd2kgd =3D {
>        .program_sh_mem_settings =3D= kgd_program_sh_mem_settings,
>        .set_pasid_vmid_mapping =3D = kgd_set_pasid_vmid_mapping,
>        .init_interrupts =3D kgd_ini= t_interrupts,
> @@ -775,8 +775,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D = {
>        .invalidate_tlbs_vmid =3D in= validate_tlbs_vmid,
>        .read_vmid_from_vmfault_reg = =3D read_vmid_from_vmfault_reg,
>   };
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
> -{
> -     return (struct kfd2kgd_calls *)&kfd2kgd;=
> -}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drive= rs/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> index f2e52b496044..3416a7f27dc7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c > @@ -696,7 +696,7 @@ static int invalidate_tlbs_vmid(struct kgd_dev= *kgd, uint16_t vmid)
>        return 0;
>   }
>  
> -static const struct kfd2kgd_calls kfd2kgd =3D {
> +const struct kfd2kgd_calls gfx_v8_kfd2kgd =3D {
>        .program_sh_mem_settings =3D= kgd_program_sh_mem_settings,
>        .set_pasid_vmid_mapping =3D = kgd_set_pasid_vmid_mapping,
>        .init_interrupts =3D kgd_ini= t_interrupts,
> @@ -720,8 +720,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D = {
>        .invalidate_tlbs =3D invalid= ate_tlbs,
>        .invalidate_tlbs_vmid =3D in= validate_tlbs_vmid,
>   };
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
> -{
> -     return (struct kfd2kgd_calls *)&kfd2kgd;=
> -}
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drive= rs/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> index 12f30df2174c..82ed9316b096 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c > @@ -786,7 +786,7 @@ void kgd_gfx_v9_set_vm_context_page_table_base= (struct kgd_dev *kgd, uint32_t vmi
>        gfxhub_v1_0_setup_vm_pt_regs= (adev, vmid, page_table_base);
>   }
>  
> -static const struct kfd2kgd_calls kfd2kgd =3D {
> +const struct kfd2kgd_calls gfx_v9_kfd2kgd =3D {
>        .program_sh_mem_settings =3D= kgd_gfx_v9_program_sh_mem_settings,
>        .set_pasid_vmid_mapping =3D = kgd_gfx_v9_set_pasid_vmid_mapping,
>        .init_interrupts =3D kgd_gfx= _v9_init_interrupts,
> @@ -810,8 +810,3 @@ static const struct kfd2kgd_calls kfd2kgd =3D = {
>        .invalidate_tlbs_vmid =3D kg= d_gfx_v9_invalidate_tlbs_vmid,
>        .get_hive_id =3D amdgpu_amdk= fd_get_hive_id,
>   };
> -
> -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_9_0_get_functions(void)
> -{
> -     return (struct kfd2kgd_calls *)&kfd2kgd;=
> -}
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm= /amd/amdkfd/kfd_device.c
> index 96a9e0653db2..0db273587af4 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
> @@ -39,6 +39,35 @@
>    */
>   static atomic_t kfd_locked =3D ATOMIC_INIT(0);
>  
> +extern const struct kfd2kgd_calls gfx_v7_kfd2kgd;
> +extern const struct kfd2kgd_calls gfx_v8_kfd2kgd;
> +extern const struct kfd2kgd_calls gfx_v9_kfd2kgd;
> +extern const struct kfd2kgd_calls arcturus_kfd2kgd;
> +extern const struct kfd2kgd_calls gfx_v10_kfd2kgd;
> +
> +static const struct kfd2kgd_calls *kfd2kgd_funcs[] =3D {
> +#ifdef KFD_SUPPORT_IOMMU_V2
> +     [CHIP_KAVERI] =3D &gfx_v7_kfd2kgd, > +     [CHIP_CARRIZO] =3D &gfx_v8_kfd2kgd,<= br> > +     [CHIP_RAVEN] =3D &gfx_v9_kfd2kgd, > +#endif
> +     [CHIP_HAWAII] =3D &gfx_v7_kfd2kgd, > +     [CHIP_TONGA] =3D &gfx_v8_kfd2kgd, > +     [CHIP_FIJI] =3D &gfx_v8_kfd2kgd,
> +     [CHIP_POLARIS10] =3D &gfx_v8_kfd2kgd= ,
> +     [CHIP_POLARIS11] =3D &gfx_v8_kfd2kgd= ,
> +     [CHIP_POLARIS12] =3D &gfx_v8_kfd2kgd= ,
> +     [CHIP_VEGAM] =3D &gfx_v8_kfd2kgd, > +     [CHIP_VEGA10] =3D &gfx_v9_kfd2kgd, > +     [CHIP_VEGA12] =3D &gfx_v9_kfd2kgd, > +     [CHIP_VEGA20] =3D &gfx_v9_kfd2kgd, > +     [CHIP_RENOIR] =3D &gfx_v9_kfd2kgd, > +     [CHIP_ARCTURUS] =3D &arcturus_kfd2kg= d,
> +     [CHIP_NAVI10] =3D &gfx_v10_kfd2kgd,<= br> > +     [CHIP_NAVI12] =3D &gfx_v10_kfd2kgd,<= br> > +     [CHIP_NAVI14] =3D &gfx_v10_kfd2kgd,<= br> > +};
> +
>   #ifdef KFD_SUPPORT_IOMMU_V2
>   static const struct kfd_device_info kaveri_device_info =3D= {
>        .asic_family =3D CHIP_KAVERI= ,
> @@ -454,20 +483,22 @@ static void kfd_gtt_sa_fini(struct kfd_dev *= kfd);
>   static int kfd_resume(struct kfd_dev *kfd);
>  
>   struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
> -     struct pci_dev *pdev, const struct kfd2kgd_c= alls *f2g,
> -     unsigned int asic_type, bool vf)
> +     struct pci_dev *pdev, unsigned int asic_= type, bool vf)
>   {
>        struct kfd_dev *kfd;
>        const struct kfd_device_info= *device_info;
> +     const struct kfd2kgd_calls *f2g;
>  
> -     if (asic_type >=3D sizeof(kfd_supported_d= evices) / (sizeof(void *) * 2)) {
> +     if (asic_type >=3D sizeof(kfd_support= ed_devices) / (sizeof(void *) * 2)
> +           = ;  || asic_type >=3D sizeof(kfd2kgd_funcs) / sizeof(void *)) {
>            = ;    dev_err(kfd_device, "asic_type %d out of range\n&q= uot;, asic_type);
>            = ;    return NULL; /* asic_type out of range */
>        }
>  
>        device_info =3D kfd_supporte= d_devices[asic_type][vf];
> +     f2g =3D kfd2kgd_funcs[asic_type];
>  
> -     if (!device_info) {
> +     if (!device_info && !f2g) {
>            = ;    dev_err(kfd_device, "%s %s not supported in kfd\n&= quot;,
>            = ;            amdgpu_= asic_name[asic_type], vf ? "VF" : "");
>            = ;    return NULL;
--_000_DM6PR12MB2778A4D093E06270A918BF09F0820DM6PR12MB2778namp_-- --===============1145087799== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBt YWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 --===============1145087799==--