127 lines
3.7 KiB
Diff
127 lines
3.7 KiB
Diff
|
From 46563dcd511270f67a9e771497ccfc73907aa4d3 Mon Sep 17 00:00:00 2001
|
||
|
From: Jiri Pirko <jiri@nvidia.com>
|
||
|
Date: Thu, 25 Feb 2021 10:17:53 +0100
|
||
|
Subject: [PATCH] mlxsw: reg: Add Management DownStream Device Tunneling
|
||
|
Register
|
||
|
|
||
|
The MDDT register allows deliver query and request messages
|
||
|
(PRM registers, commands) to a DownStream device.
|
||
|
|
||
|
Signed-off-by: Jiri Pirko <jiri@nvidia.com>
|
||
|
---
|
||
|
drivers/net/ethernet/mellanox/mlxsw/reg.h | 91 +++++++++++++++++++++++
|
||
|
1 file changed, 91 insertions(+)
|
||
|
|
||
|
diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h
|
||
|
index c1ce0b42e..f8c828e05 100644
|
||
|
--- a/drivers/net/ethernet/mellanox/mlxsw/reg.h
|
||
|
+++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h
|
||
|
@@ -10482,6 +10482,96 @@ mlxsw_reg_mbct_unpack(const char *payload, u8 *p_slot_index,
|
||
|
*p_fsm_state = mlxsw_reg_mbct_fsm_state_get(payload);
|
||
|
}
|
||
|
|
||
|
+/* MDDT - Management DownStream Device Tunneling Register
|
||
|
+ * ------------------------------------------------------
|
||
|
+ * This register allows deliver query and request messages (PRM registers,
|
||
|
+ * commands) to a DownStream device.
|
||
|
+ */
|
||
|
+#define MLXSW_REG_MDDT_ID 0x9160
|
||
|
+#define MLXSW_REG_MDDT_LEN 0x110
|
||
|
+
|
||
|
+MLXSW_REG_DEFINE(mddt, MLXSW_REG_MDDT_ID, MLXSW_REG_MDDT_LEN);
|
||
|
+
|
||
|
+/* reg_mddt_slot_index
|
||
|
+ * Slot index.
|
||
|
+ * Access: Index
|
||
|
+ */
|
||
|
+
|
||
|
+MLXSW_ITEM32(reg, mddt, slot_index, 0x00, 8, 4);
|
||
|
+
|
||
|
+/* reg_mddt_device_index
|
||
|
+ * Device index.
|
||
|
+ * Access: Index
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, device_index, 0x00, 0, 8);
|
||
|
+
|
||
|
+/* reg_mddt_read_size
|
||
|
+ * Read size in D-Words.
|
||
|
+ * Access: OP
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, read_size, 0x04, 24, 8);
|
||
|
+
|
||
|
+/* reg_mddt_write_size
|
||
|
+ * Write size in D-Words.
|
||
|
+ * Access: OP
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, write_size, 0x04, 16, 8);
|
||
|
+
|
||
|
+enum mlxsw_reg_mddt_status {
|
||
|
+ MLXSW_REG_MDDT_STATUS_OK,
|
||
|
+};
|
||
|
+
|
||
|
+/* reg_mddt_status
|
||
|
+ * Return code of the Downstream Device to the register that was sent.
|
||
|
+ * Access: RO
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, status, 0x0C, 24, 8);
|
||
|
+
|
||
|
+enum mlxsw_reg_mddt_method {
|
||
|
+ MLXSW_REG_MDDT_METHOD_QUERY,
|
||
|
+ MLXSW_REG_MDDT_METHOD_WRITE,
|
||
|
+};
|
||
|
+
|
||
|
+/* reg_mddt_method
|
||
|
+ * Access: OP
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, method, 0x0C, 22, 2);
|
||
|
+
|
||
|
+/* reg_mddt_register_id
|
||
|
+ * Access: Index
|
||
|
+ */
|
||
|
+MLXSW_ITEM32(reg, mddt, register_id, 0x0C, 0, 16);
|
||
|
+
|
||
|
+#define MLXSW_REG_MDDT_PAYLOAD_OFFSET 0x0C
|
||
|
+#define MLXSW_REG_MDDT_PRM_REGISTER_HEADER_LEN 4
|
||
|
+
|
||
|
+static inline char *mlxsw_reg_mddt_inner_payload(char *payload)
|
||
|
+{
|
||
|
+ return payload + MLXSW_REG_MDDT_PAYLOAD_OFFSET +
|
||
|
+ MLXSW_REG_MDDT_PRM_REGISTER_HEADER_LEN;
|
||
|
+}
|
||
|
+
|
||
|
+static inline void mlxsw_reg_mddt_pack(char *payload, u8 slot_index,
|
||
|
+ u8 device_index,
|
||
|
+ enum mlxsw_reg_mddt_method method,
|
||
|
+ const struct mlxsw_reg_info *reg,
|
||
|
+ char **inner_payload)
|
||
|
+{
|
||
|
+ int len = reg->len + MLXSW_REG_MDDT_PRM_REGISTER_HEADER_LEN;
|
||
|
+
|
||
|
+ if (WARN_ON(len + MLXSW_REG_MDDT_PAYLOAD_OFFSET > MLXSW_REG_MDDT_LEN))
|
||
|
+ len = MLXSW_REG_MDDT_LEN - MLXSW_REG_MDDT_PAYLOAD_OFFSET;
|
||
|
+
|
||
|
+ MLXSW_REG_ZERO(mddt, payload);
|
||
|
+ mlxsw_reg_mddt_slot_index_set(payload, slot_index);
|
||
|
+ mlxsw_reg_mddt_device_index_set(payload, device_index);
|
||
|
+ mlxsw_reg_mddt_method_set(payload, method);
|
||
|
+ mlxsw_reg_mddt_register_id_set(payload, reg->id);
|
||
|
+ mlxsw_reg_mddt_read_size_set(payload, len / 4);
|
||
|
+ mlxsw_reg_mddt_write_size_set(payload, len / 4);
|
||
|
+ *inner_payload = mlxsw_reg_mddt_inner_payload(payload);
|
||
|
+}
|
||
|
+
|
||
|
/* MDDQ - Management DownStream Device Query Register
|
||
|
* --------------------------------------------------
|
||
|
* This register allows to query the DownStream device properties. The desired
|
||
|
@@ -11952,6 +12042,7 @@ static const struct mlxsw_reg_info *mlxsw_reg_infos[] = {
|
||
|
MLXSW_REG(mgpir),
|
||
|
MLXSW_REG(mtecr),
|
||
|
MLXSW_REG(mbct),
|
||
|
+ MLXSW_REG(mddt),
|
||
|
MLXSW_REG(mddq),
|
||
|
MLXSW_REG(mddc),
|
||
|
MLXSW_REG(mfde),
|
||
|
--
|
||
|
2.30.2
|
||
|
|