diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3703-drm-amdkfd-Query-kfd-device-info-by-CHIP-id-instead-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3703-drm-amdkfd-Query-kfd-device-info-by-CHIP-id-instead-.patch | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3703-drm-amdkfd-Query-kfd-device-info-by-CHIP-id-instead-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3703-drm-amdkfd-Query-kfd-device-info-by-CHIP-id-instead-.patch new file mode 100644 index 00000000..13055fc7 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3703-drm-amdkfd-Query-kfd-device-info-by-CHIP-id-instead-.patch @@ -0,0 +1,300 @@ +From d789c4c97bc1c3f3778b5de65f43eda65718fcd1 Mon Sep 17 00:00:00 2001 +From: Yong Zhao <Yong.Zhao@amd.com> +Date: Tue, 3 Sep 2019 17:55:30 -0400 +Subject: [PATCH 3703/4256] drm/amdkfd: Query kfd device info by CHIP id + instead of pci device id + +This optimizes out the pci device id usage in KFD and makes the code +more maintainable. + +Change-Id: Ie65d4164b8344fd6116bf9a4140c653090336362 +Signed-off-by: Yong Zhao <Yong.Zhao@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 6 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 3 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 +- + drivers/gpu/drm/amd/amdkfd/kfd_device.c | 177 ++++----------------- + include/drm/amd_asic_type.h | 2 + + 5 files changed, 37 insertions(+), 153 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +index 8a1ba9c93e12..9ad94eeda69f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +@@ -70,6 +70,7 @@ void amdgpu_amdkfd_fini(void) + void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) + { + const struct kfd2kgd_calls *kfd2kgd; ++ bool vf = amdgpu_sriov_vf(adev); + + + switch (adev->asic_type) { +@@ -108,7 +109,7 @@ void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev) + } + + adev->kfd.dev = kgd2kfd_probe((struct kgd_dev *)adev, +- adev->pdev, kfd2kgd); ++ adev->pdev, kfd2kgd, adev->asic_type, vf); + + if (adev->kfd.dev) + amdgpu_amdkfd_total_mem_size += adev->gmc.real_vram_size; +@@ -757,7 +758,8 @@ struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void) + } + + struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev, +- const struct kfd2kgd_calls *f2g) ++ 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 938952563a62..a41fe657ba2a 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +@@ -262,7 +262,8 @@ void amdgpu_amdkfd_debug_mem_fence(struct kgd_dev *kgd); + 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); ++ const struct kfd2kgd_calls *f2g, ++ unsigned int asic_type, bool vf); + bool kgd2kfd_device_init(struct kfd_dev *kfd, + struct drm_device *ddev, + const struct kgd2kfd_shared_resources *gpu_resources); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index 648852649fc2..b7276f9e814b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -77,7 +77,7 @@ MODULE_FIRMWARE("amdgpu/navi12_gpu_info.bin"); + + #define AMDGPU_RESUME_MS 2000 + +-static const char *amdgpu_asic_name[] = { ++const char *amdgpu_asic_name[] = { + "TAHITI", + "PITCAIRN", + "VERDE", +diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c +index d8344f9dc7e0..51a85fd20475 100644 +--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c ++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c +@@ -369,133 +369,23 @@ static const struct kfd_device_info navi10_device_info = { + .num_sdma_queues_per_engine = 8, + }; + +-struct kfd_deviceid { +- unsigned short did; +- const struct kfd_device_info *device_info; +-}; +- +-static const struct kfd_deviceid supported_devices[] = { +-#ifdef KFD_SUPPORT_IOMMU_V2 +- { 0x1304, &kaveri_device_info }, /* Kaveri */ +- { 0x1305, &kaveri_device_info }, /* Kaveri */ +- { 0x1306, &kaveri_device_info }, /* Kaveri */ +- { 0x1307, &kaveri_device_info }, /* Kaveri */ +- { 0x1309, &kaveri_device_info }, /* Kaveri */ +- { 0x130A, &kaveri_device_info }, /* Kaveri */ +- { 0x130B, &kaveri_device_info }, /* Kaveri */ +- { 0x130C, &kaveri_device_info }, /* Kaveri */ +- { 0x130D, &kaveri_device_info }, /* Kaveri */ +- { 0x130E, &kaveri_device_info }, /* Kaveri */ +- { 0x130F, &kaveri_device_info }, /* Kaveri */ +- { 0x1310, &kaveri_device_info }, /* Kaveri */ +- { 0x1311, &kaveri_device_info }, /* Kaveri */ +- { 0x1312, &kaveri_device_info }, /* Kaveri */ +- { 0x1313, &kaveri_device_info }, /* Kaveri */ +- { 0x1315, &kaveri_device_info }, /* Kaveri */ +- { 0x1316, &kaveri_device_info }, /* Kaveri */ +- { 0x1317, &kaveri_device_info }, /* Kaveri */ +- { 0x1318, &kaveri_device_info }, /* Kaveri */ +- { 0x131B, &kaveri_device_info }, /* Kaveri */ +- { 0x131C, &kaveri_device_info }, /* Kaveri */ +- { 0x131D, &kaveri_device_info }, /* Kaveri */ +- { 0x9870, &carrizo_device_info }, /* Carrizo */ +- { 0x9874, &carrizo_device_info }, /* Carrizo */ +- { 0x9875, &carrizo_device_info }, /* Carrizo */ +- { 0x9876, &carrizo_device_info }, /* Carrizo */ +- { 0x9877, &carrizo_device_info }, /* Carrizo */ +- { 0x15DD, &raven_device_info }, /* Raven */ +- { 0x15D8, &raven_device_info }, /* Raven */ +-#endif +- { 0x67A0, &hawaii_device_info }, /* Hawaii */ +- { 0x67A1, &hawaii_device_info }, /* Hawaii */ +- { 0x67A2, &hawaii_device_info }, /* Hawaii */ +- { 0x67A8, &hawaii_device_info }, /* Hawaii */ +- { 0x67A9, &hawaii_device_info }, /* Hawaii */ +- { 0x67AA, &hawaii_device_info }, /* Hawaii */ +- { 0x67B0, &hawaii_device_info }, /* Hawaii */ +- { 0x67B1, &hawaii_device_info }, /* Hawaii */ +- { 0x67B8, &hawaii_device_info }, /* Hawaii */ +- { 0x67B9, &hawaii_device_info }, /* Hawaii */ +- { 0x67BA, &hawaii_device_info }, /* Hawaii */ +- { 0x67BE, &hawaii_device_info }, /* Hawaii */ +- { 0x6920, &tonga_device_info }, /* Tonga */ +- { 0x6921, &tonga_device_info }, /* Tonga */ +- { 0x6928, &tonga_device_info }, /* Tonga */ +- { 0x6929, &tonga_device_info }, /* Tonga */ +- { 0x692B, &tonga_device_info }, /* Tonga */ +- { 0x6938, &tonga_device_info }, /* Tonga */ +- { 0x6939, &tonga_device_info }, /* Tonga */ +- { 0x7300, &fiji_device_info }, /* Fiji */ +- { 0x730F, &fiji_vf_device_info }, /* Fiji vf*/ +- { 0x67C0, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C1, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C2, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C4, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C7, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C8, &polaris10_device_info }, /* Polaris10 */ +- { 0x67C9, &polaris10_device_info }, /* Polaris10 */ +- { 0x67CA, &polaris10_device_info }, /* Polaris10 */ +- { 0x67CC, &polaris10_device_info }, /* Polaris10 */ +- { 0x67CF, &polaris10_device_info }, /* Polaris10 */ +- { 0x67D0, &polaris10_vf_device_info }, /* Polaris10 vf*/ +- { 0x67DF, &polaris10_device_info }, /* Polaris10 */ +- { 0x6FDF, &polaris10_device_info }, /* Polaris10 */ +- { 0x67E0, &polaris11_device_info }, /* Polaris11 */ +- { 0x67E1, &polaris11_device_info }, /* Polaris11 */ +- { 0x67E3, &polaris11_device_info }, /* Polaris11 */ +- { 0x67E7, &polaris11_device_info }, /* Polaris11 */ +- { 0x67E8, &polaris11_device_info }, /* Polaris11 */ +- { 0x67E9, &polaris11_device_info }, /* Polaris11 */ +- { 0x67EB, &polaris11_device_info }, /* Polaris11 */ +- { 0x67EF, &polaris11_device_info }, /* Polaris11 */ +- { 0x67FF, &polaris11_device_info }, /* Polaris11 */ +- { 0x6980, &polaris12_device_info }, /* Polaris12 */ +- { 0x6981, &polaris12_device_info }, /* Polaris12 */ +- { 0x6985, &polaris12_device_info }, /* Polaris12 */ +- { 0x6986, &polaris12_device_info }, /* Polaris12 */ +- { 0x6987, &polaris12_device_info }, /* Polaris12 */ +- { 0x6995, &polaris12_device_info }, /* Polaris12 */ +- { 0x6997, &polaris12_device_info }, /* Polaris12 */ +- { 0x699F, &polaris12_device_info }, /* Polaris12 */ +- { 0x694C, &vegam_device_info }, /* VegaM */ +- { 0x694E, &vegam_device_info }, /* VegaM */ +- { 0x694F, &vegam_device_info }, /* VegaM */ +- { 0x6860, &vega10_device_info }, /* Vega10 */ +- { 0x6861, &vega10_device_info }, /* Vega10 */ +- { 0x6862, &vega10_device_info }, /* Vega10 */ +- { 0x6863, &vega10_device_info }, /* Vega10 */ +- { 0x6864, &vega10_device_info }, /* Vega10 */ +- { 0x6867, &vega10_device_info }, /* Vega10 */ +- { 0x6868, &vega10_device_info }, /* Vega10 */ +- { 0x6869, &vega10_device_info }, /* Vega10 */ +- { 0x686A, &vega10_device_info }, /* Vega10 */ +- { 0x686B, &vega10_device_info }, /* Vega10 */ +- { 0x686C, &vega10_vf_device_info }, /* Vega10 vf*/ +- { 0x686D, &vega10_device_info }, /* Vega10 */ +- { 0x686E, &vega10_device_info }, /* Vega10 */ +- { 0x686F, &vega10_device_info }, /* Vega10 */ +- { 0x687F, &vega10_device_info }, /* Vega10 */ +- { 0x69A0, &vega12_device_info }, /* Vega12 */ +- { 0x69A1, &vega12_device_info }, /* Vega12 */ +- { 0x69A2, &vega12_device_info }, /* Vega12 */ +- { 0x69A3, &vega12_device_info }, /* Vega12 */ +- { 0x69AF, &vega12_device_info }, /* Vega12 */ +- { 0x66a0, &vega20_device_info }, /* Vega20 */ +- { 0x66a1, &vega20_device_info }, /* Vega20 */ +- { 0x66a2, &vega20_device_info }, /* Vega20 */ +- { 0x66a3, &vega20_device_info }, /* Vega20 */ +- { 0x66a4, &vega20_device_info }, /* Vega20 */ +- { 0x66a7, &vega20_device_info }, /* Vega20 */ +- { 0x66af, &vega20_device_info }, /* Vega20 */ +- { 0x738C, &arcturus_device_info }, /* Arcturus */ +- { 0x7388, &arcturus_device_info }, /* Arcturus */ +- { 0x738E, &arcturus_device_info }, /* Arcturus */ +- { 0x7390, &arcturus_device_info }, /* Arcturus vf */ +- { 0x7310, &navi10_device_info }, /* Navi10 */ +- { 0x7312, &navi10_device_info }, /* Navi10 */ +- { 0x7318, &navi10_device_info }, /* Navi10 */ +- { 0x731a, &navi10_device_info }, /* Navi10 */ +- { 0x731f, &navi10_device_info }, /* Navi10 */ ++/* For each entry, [0] is regular and [1] is virtualisation device. */ ++static const struct kfd_device_info *kfd_supported_devices[][2] = { ++ [CHIP_KAVERI] = {&kaveri_device_info, NULL}, ++ [CHIP_HAWAII] = {&hawaii_device_info, NULL}, ++ [CHIP_TONGA] = {&tonga_device_info, NULL}, ++ [CHIP_FIJI] = {&fiji_device_info, &fiji_vf_device_info}, ++ [CHIP_CARRIZO] = {&carrizo_device_info, NULL}, ++ [CHIP_POLARIS10] = {&polaris10_device_info, &polaris10_vf_device_info}, ++ [CHIP_POLARIS11] = {&polaris11_device_info, NULL}, ++ [CHIP_POLARIS12] = {&polaris12_device_info, NULL}, ++ [CHIP_VEGAM] = {&vegam_device_info, NULL}, ++ [CHIP_VEGA10] = {&vega10_device_info, &vega10_vf_device_info}, ++ [CHIP_VEGA12] = {&vega12_device_info, NULL}, ++ [CHIP_VEGA20] = {&vega20_device_info, NULL}, ++ [CHIP_RAVEN] = {&raven_device_info, NULL}, ++ [CHIP_ARCTURUS] = {&arcturus_device_info, &arcturus_device_info}, ++ [CHIP_NAVI10] = {&navi10_device_info, NULL}, + }; + + static int kfd_gtt_sa_init(struct kfd_dev *kfd, unsigned int buf_size, +@@ -504,33 +394,23 @@ static void kfd_gtt_sa_fini(struct kfd_dev *kfd); + + static int kfd_resume(struct kfd_dev *kfd); + +-static const struct kfd_device_info *lookup_device_info(unsigned short did) ++struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, ++ struct pci_dev *pdev, const struct kfd2kgd_calls *f2g, ++ unsigned int asic_type, bool vf) + { +- size_t i; ++ struct kfd_dev *kfd; ++ const struct kfd_device_info *device_info; + +- for (i = 0; i < ARRAY_SIZE(supported_devices); i++) { +- if (supported_devices[i].did == did) { +- WARN_ON(!supported_devices[i].device_info); +- return supported_devices[i].device_info; +- } ++ if (asic_type >= sizeof(kfd_supported_devices) / (sizeof(void *) * 2)) { ++ dev_err(kfd_device, "asic_type %d out of range\n", asic_type); ++ return NULL; /* asic_type out of range */ + } + +- dev_warn(kfd_device, "DID %04x is missing in supported_devices\n", +- did); +- +- return NULL; +-} +- +-#ifdef CONFIG_HSA_AMD +-struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, +- struct pci_dev *pdev, const struct kfd2kgd_calls *f2g) +-{ +- struct kfd_dev *kfd; +- const struct kfd_device_info *device_info = +- lookup_device_info(pdev->device); ++ device_info = kfd_supported_devices[asic_type][vf]; + + if (!device_info) { +- dev_err(kfd_device, "kgd2kfd_probe failed\n"); ++ dev_err(kfd_device, "%s %s not supported in kfd\n", ++ amdgpu_asic_name[asic_type], vf ? "VF" : ""); + return NULL; + } + +@@ -567,7 +447,6 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, + + return kfd; + } +-#endif + + static void kfd_cwsr_init(struct kfd_dev *kfd) + { +diff --git a/include/drm/amd_asic_type.h b/include/drm/amd_asic_type.h +index f4eda333c11c..a4a80ce18a7a 100644 +--- a/include/drm/amd_asic_type.h ++++ b/include/drm/amd_asic_type.h +@@ -58,4 +58,6 @@ enum amd_asic_type { + CHIP_LAST, + }; + ++extern const char *amdgpu_asic_name[]; ++ + #endif /*__AMD_ASIC_TYPE_H__ */ +-- +2.17.1 + |