Source-identification address mode has never been tested or enabled, so
reject it in __check_vpod_info() instead of running with an untested
config. Both the inband and the sideband vpod config paths go through
this validation. The SOURCE_IDENT handling in the rest of the driver is
left in place for when the mode is enabled.

Also drop r from the vpod-commit error message, __check_vpod_info()
returns bool, so r is uninitialized there.

v2: use switch to check address mode.

Signed-off-by: Philip Yang <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
index 3051fadac50b..758265670340 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ualink.c
@@ -137,14 +137,21 @@ static bool __check_vpod_info(struct amdgpu_device *adev,
                         vpod->size, ppod->size);
                return false;
        }
-       if (vpod->addr_mode >= AMDGPU_UALINK_ADDR_MODE_MAX) {
+
+       switch (vpod->addr_mode) {
+       case AMDGPU_UALINK_ADDR_MODE_SOURCE_ALIAS:
+               break;
+       case AMDGPU_UALINK_ADDR_MODE_SOURCE_IDENT:
                dev_warn(adev->dev,
-                        "UALINK: invalid addr mode %u\n",
+                        "UALINK: source-identification addr mode is not 
supported\n");
+               return false;
+       default:
+               dev_warn(adev->dev, "UALINK: invalid addr mode %u\n",
                         vpod->addr_mode);
                return false;
        }
-       weight =
-               bitmap_weight(vpod->active_accel_bits, AMDGPU_UALINK_ACCEL_MAX);
+
+       weight = bitmap_weight(vpod->active_accel_bits, 
AMDGPU_UALINK_ACCEL_MAX);
        if (weight != vpod->size) {
                dev_warn(adev->dev,
                         "UALINK: vPod size doesn't match vpod_active_accels 
list: %u != %u\n",
@@ -1351,8 +1358,7 @@ static ssize_t ualink_vpod_config_commit_store(struct 
kobject *kobj,
        if (info->vpod.id != AMDGPU_UALINK_VPOD_ID_INVALID &&
            !__check_vpod_info(adev, info)) {
                dev_err(adev->dev,
-                       "UALINK: vpod-commit __check_vpod_info() failed: %d\n",
-                       r);
+                       "UALINK: vpod-commit __check_vpod_info() failed\n");
                return -EINVAL;
        }
 
-- 
2.50.1

Reply via email to