mlxsw: reg: Add Management Temperature Bulk Register
Add MTBR (Management Temperature Bulk Register), which is used for port temperature reading in a bulk mode. 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>
This commit is contained in:
parent
d517ee7ca8
commit
5f28ef71a5
|
@ -8001,6 +8001,80 @@ static inline void mlxsw_reg_mtmp_unpack(char *payload, unsigned int *p_temp,
|
|||
mlxsw_reg_mtmp_sensor_name_memcpy_from(payload, sensor_name);
|
||||
}
|
||||
|
||||
/* MTBR - Management Temperature Bulk Register
|
||||
* -------------------------------------------
|
||||
* This register is used for bulk temperature reading.
|
||||
*/
|
||||
#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_LEN (MLXSW_REG_MTBR_BASE_LEN + \
|
||||
MLXSW_REG_MTBR_REC_LEN * \
|
||||
MLXSW_REG_MTBR_REC_MAX_COUNT)
|
||||
|
||||
MLXSW_REG_DEFINE(mtbr, MLXSW_REG_MTBR_ID, MLXSW_REG_MTBR_LEN);
|
||||
|
||||
/* reg_mtbr_base_sensor_index
|
||||
* Base sensors index to access (0 - ASIC sensor, 1-63 - ambient sensors,
|
||||
* 64-127 are mapped to the SFP+/QSFP modules sequentially).
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, mtbr, base_sensor_index, 0x00, 0, 7);
|
||||
|
||||
/* reg_mtbr_num_rec
|
||||
* Request: Number of records to read
|
||||
* Response: Number of records read
|
||||
* See above description for more details.
|
||||
* Range 1..255
|
||||
* Access: RW
|
||||
*/
|
||||
MLXSW_ITEM32(reg, mtbr, num_rec, 0x04, 0, 8);
|
||||
|
||||
/* reg_mtbr_rec_max_temp
|
||||
* The highest measured temperature from the sensor.
|
||||
* When the bit mte is cleared, the field max_temperature is reserved.
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, mtbr, rec_max_temp, MLXSW_REG_MTBR_BASE_LEN, 16,
|
||||
16, MLXSW_REG_MTBR_REC_LEN, 0x00, false);
|
||||
|
||||
/* reg_mtbr_rec_temp
|
||||
* Temperature reading from the sensor. Reading is in 0..125 Celsius
|
||||
* degrees units.
|
||||
* Access: RO
|
||||
*/
|
||||
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 base_sensor_index,
|
||||
u8 num_rec)
|
||||
{
|
||||
MLXSW_REG_ZERO(mtbr, payload);
|
||||
mlxsw_reg_mtbr_base_sensor_index_set(payload, base_sensor_index);
|
||||
mlxsw_reg_mtbr_num_rec_set(payload, num_rec);
|
||||
}
|
||||
|
||||
/* Error codes from temperatute reading */
|
||||
enum mlxsw_reg_mtbr_temp_status {
|
||||
MLXSW_REG_MTBR_NO_CONN = 0x8000,
|
||||
MLXSW_REG_MTBR_NO_TEMP_SENS = 0x8001,
|
||||
MLXSW_REG_MTBR_INDEX_NA = 0x8002,
|
||||
MLXSW_REG_MTBR_BAD_SENS_INFO = 0x8003,
|
||||
};
|
||||
|
||||
/* Base index for reading modules temperature */
|
||||
#define MLXSW_REG_MTBR_BASE_MODULE_INDEX 64
|
||||
|
||||
static inline void mlxsw_reg_mtbr_temp_unpack(char *payload, int rec_ind,
|
||||
u16 *p_temp, u16 *p_max_temp)
|
||||
{
|
||||
if (p_temp)
|
||||
*p_temp = mlxsw_reg_mtbr_rec_temp_get(payload, rec_ind);
|
||||
if (p_max_temp)
|
||||
*p_max_temp = mlxsw_reg_mtbr_rec_max_temp_get(payload, rec_ind);
|
||||
}
|
||||
|
||||
/* MCIA - Management Cable Info Access
|
||||
* -----------------------------------
|
||||
* MCIA register is used to access the SFP+ and QSFP connector's EPROM.
|
||||
|
@ -9779,6 +9853,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = {
|
|||
MLXSW_REG(mfsl),
|
||||
MLXSW_REG(mtcap),
|
||||
MLXSW_REG(mtmp),
|
||||
MLXSW_REG(mtbr),
|
||||
MLXSW_REG(mcia),
|
||||
MLXSW_REG(mpat),
|
||||
MLXSW_REG(mpar),
|
||||
|
|
Loading…
Reference in New Issue