mlxsw: reg: Add definition of fan management registers
authorJiri Pirko <jiri@mellanox.com>
Fri, 27 Nov 2015 12:45:58 +0000 (13:45 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Nov 2015 20:05:40 +0000 (15:05 -0500)
Add definition of MFCR, MFSC and MFSM which provide possibility to
control and monitor fans.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/reg.h

index 459e049..f894193 100644 (file)
@@ -2087,6 +2087,133 @@ static inline void mlxsw_reg_hpkt_pack(char *payload, u8 action, u16 trap_id)
        mlxsw_reg_hpkt_ctrl_set(payload, MLXSW_REG_HPKT_CTRL_PACKET_DEFAULT);
 }
 
+/* MFCR - Management Fan Control Register
+ * --------------------------------------
+ * This register controls the settings of the Fan Speed PWM mechanism.
+ */
+#define MLXSW_REG_MFCR_ID 0x9001
+#define MLXSW_REG_MFCR_LEN 0x08
+
+static const struct mlxsw_reg_info mlxsw_reg_mfcr = {
+       .id = MLXSW_REG_MFCR_ID,
+       .len = MLXSW_REG_MFCR_LEN,
+};
+
+enum mlxsw_reg_mfcr_pwm_frequency {
+       MLXSW_REG_MFCR_PWM_FEQ_11HZ = 0x00,
+       MLXSW_REG_MFCR_PWM_FEQ_14_7HZ = 0x01,
+       MLXSW_REG_MFCR_PWM_FEQ_22_1HZ = 0x02,
+       MLXSW_REG_MFCR_PWM_FEQ_1_4KHZ = 0x40,
+       MLXSW_REG_MFCR_PWM_FEQ_5KHZ = 0x41,
+       MLXSW_REG_MFCR_PWM_FEQ_20KHZ = 0x42,
+       MLXSW_REG_MFCR_PWM_FEQ_22_5KHZ = 0x43,
+       MLXSW_REG_MFCR_PWM_FEQ_25KHZ = 0x44,
+};
+
+/* reg_mfcr_pwm_frequency
+ * Controls the frequency of the PWM signal.
+ * Access: RW
+ */
+MLXSW_ITEM32(reg, mfcr, pwm_frequency, 0x00, 0, 6);
+
+#define MLXSW_MFCR_TACHOS_MAX 10
+
+/* reg_mfcr_tacho_active
+ * Indicates which of the tachometer is active (bit per tachometer).
+ * Access: RO
+ */
+MLXSW_ITEM32(reg, mfcr, tacho_active, 0x04, 16, MLXSW_MFCR_TACHOS_MAX);
+
+#define MLXSW_MFCR_PWMS_MAX 5
+
+/* reg_mfcr_pwm_active
+ * Indicates which of the PWM control is active (bit per PWM).
+ * Access: RO
+ */
+MLXSW_ITEM32(reg, mfcr, pwm_active, 0x04, 0, MLXSW_MFCR_PWMS_MAX);
+
+static inline void
+mlxsw_reg_mfcr_pack(char *payload,
+                   enum mlxsw_reg_mfcr_pwm_frequency pwm_frequency)
+{
+       MLXSW_REG_ZERO(mfcr, payload);
+       mlxsw_reg_mfcr_pwm_frequency_set(payload, pwm_frequency);
+}
+
+static inline void
+mlxsw_reg_mfcr_unpack(char *payload,
+                     enum mlxsw_reg_mfcr_pwm_frequency *p_pwm_frequency,
+                     u16 *p_tacho_active, u8 *p_pwm_active)
+{
+       *p_pwm_frequency = mlxsw_reg_mfcr_pwm_frequency_get(payload);
+       *p_tacho_active = mlxsw_reg_mfcr_tacho_active_get(payload);
+       *p_pwm_active = mlxsw_reg_mfcr_pwm_active_get(payload);
+}
+
+/* MFSC - Management Fan Speed Control Register
+ * --------------------------------------------
+ * This register controls the settings of the Fan Speed PWM mechanism.
+ */
+#define MLXSW_REG_MFSC_ID 0x9002
+#define MLXSW_REG_MFSC_LEN 0x08
+
+static const struct mlxsw_reg_info mlxsw_reg_mfsc = {
+       .id = MLXSW_REG_MFSC_ID,
+       .len = MLXSW_REG_MFSC_LEN,
+};
+
+/* reg_mfsc_pwm
+ * Fan pwm to control / monitor.
+ * Access: Index
+ */
+MLXSW_ITEM32(reg, mfsc, pwm, 0x00, 24, 3);
+
+/* reg_mfsc_pwm_duty_cycle
+ * Controls the duty cycle of the PWM. Value range from 0..255 to
+ * represent duty cycle of 0%...100%.
+ * Access: RW
+ */
+MLXSW_ITEM32(reg, mfsc, pwm_duty_cycle, 0x04, 0, 8);
+
+static inline void mlxsw_reg_mfsc_pack(char *payload, u8 pwm,
+                                      u8 pwm_duty_cycle)
+{
+       MLXSW_REG_ZERO(mfsc, payload);
+       mlxsw_reg_mfsc_pwm_set(payload, pwm);
+       mlxsw_reg_mfsc_pwm_duty_cycle_set(payload, pwm_duty_cycle);
+}
+
+/* MFSM - Management Fan Speed Measurement
+ * ---------------------------------------
+ * This register controls the settings of the Tacho measurements and
+ * enables reading the Tachometer measurements.
+ */
+#define MLXSW_REG_MFSM_ID 0x9003
+#define MLXSW_REG_MFSM_LEN 0x08
+
+static const struct mlxsw_reg_info mlxsw_reg_mfsm = {
+       .id = MLXSW_REG_MFSM_ID,
+       .len = MLXSW_REG_MFSM_LEN,
+};
+
+/* reg_mfsm_tacho
+ * Fan tachometer index.
+ * Access: Index
+ */
+MLXSW_ITEM32(reg, mfsm, tacho, 0x00, 24, 4);
+
+/* reg_mfsm_rpm
+ * Fan speed (round per minute).
+ * Access: RO
+ */
+MLXSW_ITEM32(reg, mfsm, rpm, 0x04, 0, 16);
+
+static inline void mlxsw_reg_mfsm_pack(char *payload, u8 tacho)
+{
+       MLXSW_REG_ZERO(mfsm, payload);
+       mlxsw_reg_mfsm_tacho_set(payload, tacho);
+}
+
 /* MTCAP - Management Temperature Capabilities
  * -------------------------------------------
  * This register exposes the capabilities of the device and
@@ -2556,6 +2683,12 @@ static inline const char *mlxsw_reg_id_str(u16 reg_id)
                return "HTGT";
        case MLXSW_REG_HPKT_ID:
                return "HPKT";
+       case MLXSW_REG_MFCR_ID:
+               return "MFCR";
+       case MLXSW_REG_MFSC_ID:
+               return "MFSC";
+       case MLXSW_REG_MFSM_ID:
+               return "MFSM";
        case MLXSW_REG_MTCAP_ID:
                return "MTCAP";
        case MLXSW_REG_MTMP_ID: