]> www.infradead.org Git - users/hch/misc.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)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 21 Mar 2025 16:16:35 +0000 (12:16 -0400)
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>
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c

index 8425e5dbf80e1e88b95bf378ad4b7854212305a8..93635a6130bc819f7ffd5d39c0096b3d15f6b503 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");