const struct kgd2kfd_calls *kgd2kfd;
 bool (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**);
 
-bool amdgpu_amdkfd_init(void)
+int amdgpu_amdkfd_init(void)
 {
+       int ret;
+
 #if defined(CONFIG_HSA_AMD_MODULE)
-       bool (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**);
+       int (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**);
 
        kgd2kfd_init_p = symbol_request(kgd2kfd_init);
 
        if (kgd2kfd_init_p == NULL)
-               return false;
+               return -ENOENT;
+
+       ret = kgd2kfd_init_p(KFD_INTERFACE_VERSION, &kgd2kfd);
+       if (ret) {
+               symbol_put(kgd2kfd_init);
+               kgd2kfd = NULL;
+       }
+
+#elif defined(CONFIG_HSA_AMD)
+       ret = kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd);
+       if (ret)
+               kgd2kfd = NULL;
+
+#else
+       ret = -ENOENT;
 #endif
-       return true;
+
+       return ret;
 }
 
 bool amdgpu_amdkfd_load_interface(struct amdgpu_device *rdev)
 {
-#if defined(CONFIG_HSA_AMD_MODULE)
-       bool (*kgd2kfd_init_p)(unsigned, const struct kgd2kfd_calls**);
-#endif
-
        switch (rdev->asic_type) {
 #ifdef CONFIG_DRM_AMDGPU_CIK
        case CHIP_KAVERI:
                return false;
        }
 
-#if defined(CONFIG_HSA_AMD_MODULE)
-       kgd2kfd_init_p = symbol_request(kgd2kfd_init);
-
-       if (kgd2kfd_init_p == NULL) {
-               kfd2kgd = NULL;
-               return false;
-       }
-
-       if (kgd2kfd_init_p(KFD_INTERFACE_VERSION, &kgd2kfd)) {
-               symbol_put(kgd2kfd_init);
-               kfd2kgd = NULL;
-               kgd2kfd = NULL;
-
-               return false;
-       }
-
        return true;
-#elif defined(CONFIG_HSA_AMD)
-       if (kgd2kfd_init(KFD_INTERFACE_VERSION, &kgd2kfd)) {
-               kfd2kgd = NULL;
-               kgd2kfd = NULL;
-               return false;
-       }
-
-       return true;
-#else
-       kfd2kgd = NULL;
-       return false;
-#endif
 }
 
 void amdgpu_amdkfd_fini(void)
 
                return -ENODEV;
        }
 
+       /*
+        * Initialize amdkfd before starting radeon. If it was not loaded yet,
+        * defer radeon probing
+        */
+       ret = amdgpu_amdkfd_init();
+       if (ret == -EPROBE_DEFER)
+               return ret;
+
        /* Get rid of things like offb */
        ret = amdgpu_kick_out_firmware_fb(pdev);
        if (ret)
        driver->num_ioctls = amdgpu_max_kms_ioctl;
        amdgpu_register_atpx_handler();
 
-       amdgpu_amdkfd_init();
-
        /* let modprobe override vga console setting */
        return drm_pci_init(driver, pdriver);
 }