mlxsw: reg: Limit MTBR register payload to a single data record
authorVadim Pasternak <vadimp@nvidia.com>
Fri, 22 Sep 2023 17:18:36 +0000 (19:18 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Oct 2023 07:07:12 +0000 (08:07 +0100)
The MTBR register is used to read temperatures from multiple sensors in
one transaction, but the driver only reads from a single sensor in each
transaction.

Rrestrict the payload size of the MTBR register to prevent the
transmission of redundant data to the firmware.

Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/core_env.c
drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c
drivers/net/ethernet/mellanox/mlxsw/reg.h

index d637c0348fa15e9abbd8653055b542000f985505..7286f0deb5f9950c5bc88ffdd9260cd168c60502 100644 (file)
@@ -775,7 +775,7 @@ static int mlxsw_env_module_has_temp_sensor(struct mlxsw_core *mlxsw_core,
        int err;
 
        mlxsw_reg_mtbr_pack(mtbr_pl, slot_index,
-                           MLXSW_REG_MTBR_BASE_MODULE_INDEX + module, 1);
+                           MLXSW_REG_MTBR_BASE_MODULE_INDEX + module);
        err = mlxsw_reg_query(mlxsw_core, MLXSW_REG(mtbr), mtbr_pl);
        if (err)
                return err;
index 0fd290d776ffec5fa02004aaeb16a5129f62b3c4..9c12e1feb6437d414f122925a2e55c372bf3c35b 100644 (file)
@@ -293,7 +293,7 @@ static ssize_t mlxsw_hwmon_module_temp_fault_show(struct device *dev,
 
        module = mlxsw_hwmon_attr->type_index - mlxsw_hwmon_dev->sensor_count;
        mlxsw_reg_mtbr_pack(mtbr_pl, mlxsw_hwmon_dev->slot_index,
-                           MLXSW_REG_MTBR_BASE_MODULE_INDEX + module, 1);
+                           MLXSW_REG_MTBR_BASE_MODULE_INDEX + module);
        err = mlxsw_reg_query(mlxsw_hwmon->core, MLXSW_REG(mtbr), mtbr_pl);
        if (err) {
                dev_err(dev, "Failed to query module temperature sensor\n");
index ae556ddd7624d3fc15485a8ade3f69b6b2a5c2a3..9970921ceef3956302b895c7d34a81baececb1f0 100644 (file)
@@ -9551,7 +9551,7 @@ MLXSW_ITEM_BIT_ARRAY(reg, mtwe, sensor_warning, 0x0, 0x10, 1);
 #define MLXSW_REG_MTBR_ID 0x900F
 #define MLXSW_REG_MTBR_BASE_LEN 0x10 /* base length, without records */
 #define MLXSW_REG_MTBR_REC_LEN 0x04 /* record length */
-#define MLXSW_REG_MTBR_REC_MAX_COUNT 47 /* firmware limitation */
+#define MLXSW_REG_MTBR_REC_MAX_COUNT 1
 #define MLXSW_REG_MTBR_LEN (MLXSW_REG_MTBR_BASE_LEN +  \
                            MLXSW_REG_MTBR_REC_LEN *    \
                            MLXSW_REG_MTBR_REC_MAX_COUNT)
@@ -9597,12 +9597,12 @@ MLXSW_ITEM32_INDEXED(reg, mtbr, rec_temp, MLXSW_REG_MTBR_BASE_LEN, 0, 16,
                     MLXSW_REG_MTBR_REC_LEN, 0x00, false);
 
 static inline void mlxsw_reg_mtbr_pack(char *payload, u8 slot_index,
-                                      u16 base_sensor_index, u8 num_rec)
+                                      u16 base_sensor_index)
 {
        MLXSW_REG_ZERO(mtbr, payload);
        mlxsw_reg_mtbr_slot_index_set(payload, slot_index);
        mlxsw_reg_mtbr_base_sensor_index_set(payload, base_sensor_index);
-       mlxsw_reg_mtbr_num_rec_set(payload, num_rec);
+       mlxsw_reg_mtbr_num_rec_set(payload, 1);
 }
 
 /* Error codes from temperatute reading */