mlxsw: core: Allow thermal zone binding to an external cooling device
authorVadim Pasternak <vadimp@mellanox.com>
Wed, 13 Feb 2019 11:28:56 +0000 (11:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 14 Feb 2019 06:33:02 +0000 (22:33 -0800)
Allow thermal zone binding to an external cooling device from the
cooling devices white list.

It provides support for Mellanox next generation systems on which
cooling device logic is not controlled through the switch registers.

Signed-off-by: Vadim Pasternak <vadimp@mellanox.com>
Reviewed-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core_thermal.c

index 8b71706f7a27e2cd355cdd5ebe7023592ad7e7af..821fef2e2230d3748481297c07294443efe34614 100644 (file)
 #define MLXSW_THERMAL_SPEED_MAX                (MLXSW_THERMAL_MAX_STATE * 2)
 #define MLXSW_THERMAL_SPEED_MIN_LEVEL  2               /* 20% */
 
+/* External cooling devices, allowed for binding to mlxsw thermal zones. */
+static char * const mlxsw_thermal_external_allowed_cdev[] = {
+       "mlxreg_fan",
+};
+
 struct mlxsw_thermal_trip {
        int     type;
        int     temp;
@@ -107,6 +112,13 @@ static int mlxsw_get_cooling_device_idx(struct mlxsw_thermal *thermal,
                if (thermal->cdevs[i] == cdev)
                        return i;
 
+       /* Allow mlxsw thermal zone binding to an external cooling device */
+       for (i = 0; i < ARRAY_SIZE(mlxsw_thermal_external_allowed_cdev); i++) {
+               if (strnstr(cdev->type, mlxsw_thermal_external_allowed_cdev[i],
+                           sizeof(cdev->type)))
+                       return 0;
+       }
+
        return -ENODEV;
 }