mlxsw: reg: Extend PMMP register with new slot number field
authorVadim Pasternak <vadimp@nvidia.com>
Mon, 11 Apr 2022 14:46:54 +0000 (17:46 +0300)
committerJakub Kicinski <kuba@kernel.org>
Tue, 12 Apr 2022 16:51:38 +0000 (09:51 -0700)
Extend PMMP (Port Module Memory Map Properties Register) with new
field specifying the slot number. The purpose of this field is to
enable overriding the cable/module memory map advertisement.

For non-modular systems the 'module' number uniquely identifies the
transceiver location. For modular systems the transceivers are
identified by two indexes:
- 'slot_index', specifying the slot number, where line card is located;
- 'module', specifying cage transceiver within the line card.

Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/core_env.c
drivers/net/ethernet/mellanox/mlxsw/reg.h

index 602f073..8cee3e3 100644 (file)
@@ -563,7 +563,7 @@ static int mlxsw_env_module_low_power_set(struct mlxsw_core *mlxsw_core,
        u16 eeprom_override_mask, eeprom_override;
        char pmmp_pl[MLXSW_REG_PMMP_LEN];
 
-       mlxsw_reg_pmmp_pack(pmmp_pl, module);
+       mlxsw_reg_pmmp_pack(pmmp_pl, 0, module);
        mlxsw_reg_pmmp_sticky_set(pmmp_pl, true);
        /* Mask all the bits except low power mode. */
        eeprom_override_mask = ~MLXSW_REG_PMMP_EEPROM_OVERRIDE_LOW_POWER_MASK;
index 3695f8c..5bf8ad3 100644 (file)
@@ -5984,6 +5984,12 @@ MLXSW_REG_DEFINE(pmmp, MLXSW_REG_PMMP_ID, MLXSW_REG_PMMP_LEN);
  */
 MLXSW_ITEM32(reg, pmmp, module, 0x00, 16, 8);
 
+/* reg_pmmp_slot_index
+ * Slot index.
+ * Access: Index
+ */
+MLXSW_ITEM32(reg, pmmp, slot_index, 0x00, 24, 4);
+
 /* reg_pmmp_sticky
  * When set, will keep eeprom_override values after plug-out event.
  * Access: OP
@@ -6011,9 +6017,10 @@ enum {
  */
 MLXSW_ITEM32(reg, pmmp, eeprom_override, 0x04, 0, 16);
 
-static inline void mlxsw_reg_pmmp_pack(char *payload, u8 module)
+static inline void mlxsw_reg_pmmp_pack(char *payload, u8 slot_index, u8 module)
 {
        MLXSW_REG_ZERO(pmmp, payload);
+       mlxsw_reg_pmmp_slot_index_set(payload, slot_index);
        mlxsw_reg_pmmp_module_set(payload, module);
 }