static void mlxsw_sp_afk_encode_u32(const struct mlxsw_item *storage_item,
                                    const struct mlxsw_item *output_item,
-                                   char *storage, char *output)
+                                   char *storage, char *output, int diff)
 {
        u32 value;
 
        value = __mlxsw_item_get32(storage, storage_item, 0);
-       __mlxsw_item_set32(output, output_item, 0, value);
+       __mlxsw_item_set32(output, output_item, 0, value + diff);
 }
 
 static void mlxsw_sp_afk_encode_buf(const struct mlxsw_item *storage_item,
 
 static void
 mlxsw_sp_afk_encode_one(const struct mlxsw_afk_element_inst *elinst,
-                       char *output, char *storage)
+                       char *output, char *storage, int u32_diff)
 {
        const struct mlxsw_item *storage_item = &elinst->info->item;
        const struct mlxsw_item *output_item = &elinst->item;
 
        if (elinst->type == MLXSW_AFK_ELEMENT_TYPE_U32)
                mlxsw_sp_afk_encode_u32(storage_item, output_item,
-                                       storage, output);
+                                       storage, output, u32_diff);
        else if (elinst->type == MLXSW_AFK_ELEMENT_TYPE_BUF)
                mlxsw_sp_afk_encode_buf(storage_item, output_item,
                                        storage, output);
                                continue;
 
                        mlxsw_sp_afk_encode_one(elinst, block_key,
-                                               values->storage.key);
+                                               values->storage.key,
+                                               elinst->u32_key_diff);
                        mlxsw_sp_afk_encode_one(elinst, block_mask,
-                                               values->storage.mask);
+                                               values->storage.mask, 0);
                }
 
                mlxsw_afk->ops->encode_block(key, i, block_key);
 
        const struct mlxsw_afk_element_info *info;
        enum mlxsw_afk_element_type type;
        struct mlxsw_item item; /* element geometry in block */
+       int u32_key_diff; /* in case value needs to be adjusted before write
+                          * this diff is here to handle that
+                          */
 };
 
-#define MLXSW_AFK_ELEMENT_INST(_type, _element, _offset, _shift, _size)                \
+#define MLXSW_AFK_ELEMENT_INST(_type, _element, _offset,                       \
+                              _shift, _size, _u32_key_diff)                    \
        {                                                                       \
                .info = &mlxsw_afk_element_infos[MLXSW_AFK_ELEMENT_##_element], \
                .type = _type,                                                  \
                        .size = {.bits = _size},                                \
                        .name = #_element,                                      \
                },                                                              \
+               .u32_key_diff = _u32_key_diff,                                  \
        }
 
 #define MLXSW_AFK_ELEMENT_INST_U32(_element, _offset, _shift, _size)           \
        MLXSW_AFK_ELEMENT_INST(MLXSW_AFK_ELEMENT_TYPE_U32,                      \
-                              _element, _offset, _shift, _size)
+                              _element, _offset, _shift, _size, 0)
+
+#define MLXSW_AFK_ELEMENT_INST_EXT_U32(_element, _offset,                      \
+                                      _shift, _size, _key_diff)                \
+       MLXSW_AFK_ELEMENT_INST(MLXSW_AFK_ELEMENT_TYPE_U32,                      \
+                              _element, _offset, _shift, _size, _key_diff)
 
 #define MLXSW_AFK_ELEMENT_INST_BUF(_element, _offset, _size)                   \
        MLXSW_AFK_ELEMENT_INST(MLXSW_AFK_ELEMENT_TYPE_BUF,                      \
-                              _element, _offset, 0, _size)
+                              _element, _offset, 0, _size, 0)
 
 struct mlxsw_afk_block {
        u16 encoding; /* block ID */
 
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_mac_5[] = {
        MLXSW_AFK_ELEMENT_INST_U32(VID, 0x04, 16, 12),
-       MLXSW_AFK_ELEMENT_INST_U32(SRC_SYS_PORT, 0x04, 0, 8), /* RX_ACL_SYSTEM_PORT */
+       MLXSW_AFK_ELEMENT_INST_EXT_U32(SRC_SYS_PORT, 0x04, 0, 8, -1), /* RX_ACL_SYSTEM_PORT */
 };
 
 static struct mlxsw_afk_element_inst mlxsw_sp_afk_element_info_ipv4_0[] = {