]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amdgpu/discovery: check ip_discovery fw file available
authorFlora Cui <flora.cui@amd.com>
Thu, 27 Feb 2025 02:39:27 +0000 (10:39 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:12:30 +0000 (11:12 +0200)
[ Upstream commit 017fbb6690c2245b1b4ef39b66c79d2990fe63dd ]

Signed-off-by: Flora Cui <flora.cui@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c

index 949d74eff29465b12df862d8c1e00c09a9990d96..6a6dc15273dc7b1c0f9a1229851a5c063207e89a 100644 (file)
 #include "amdgpu_isp.h"
 #endif
 
-#define FIRMWARE_IP_DISCOVERY "amdgpu/ip_discovery.bin"
-MODULE_FIRMWARE(FIRMWARE_IP_DISCOVERY);
+MODULE_FIRMWARE("amdgpu/ip_discovery.bin");
 
 #define mmIP_DISCOVERY_VERSION  0x16A00
 #define mmRCC_CONFIG_MEMSIZE   0xde3
@@ -297,21 +296,13 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
        return ret;
 }
 
-static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev, uint8_t *binary)
+static int amdgpu_discovery_read_binary_from_file(struct amdgpu_device *adev,
+                                                       uint8_t *binary,
+                                                       const char *fw_name)
 {
        const struct firmware *fw;
-       const char *fw_name;
        int r;
 
-       switch (amdgpu_discovery) {
-       case 2:
-               fw_name = FIRMWARE_IP_DISCOVERY;
-               break;
-       default:
-               dev_warn(adev->dev, "amdgpu_discovery is not set properly\n");
-               return -EINVAL;
-       }
-
        r = request_firmware(&fw, fw_name, adev->dev);
        if (r) {
                dev_err(adev->dev, "can't load firmware \"%s\"\n",
@@ -404,10 +395,19 @@ static int amdgpu_discovery_verify_npsinfo(struct amdgpu_device *adev,
        return 0;
 }
 
+static const char *amdgpu_discovery_get_fw_name(struct amdgpu_device *adev)
+{
+       if (amdgpu_discovery == 2)
+               return "amdgpu/ip_discovery.bin";
+
+       return NULL;
+}
+
 static int amdgpu_discovery_init(struct amdgpu_device *adev)
 {
        struct table_info *info;
        struct binary_header *bhdr;
+       const char *fw_name;
        uint16_t offset;
        uint16_t size;
        uint16_t checksum;
@@ -419,9 +419,10 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
                return -ENOMEM;
 
        /* Read from file if it is the preferred option */
-       if (amdgpu_discovery == 2) {
+       fw_name = amdgpu_discovery_get_fw_name(adev);
+       if (fw_name != NULL) {
                dev_info(adev->dev, "use ip discovery information from file");
-               r = amdgpu_discovery_read_binary_from_file(adev, adev->mman.discovery_bin);
+               r = amdgpu_discovery_read_binary_from_file(adev, adev->mman.discovery_bin, fw_name);
 
                if (r) {
                        dev_err(adev->dev, "failed to read ip discovery binary from file\n");