mlxsw: reg: Fix SSPR register layout
The two most significant bits of the "local_port" field in the SSPR register are always cleared since they are overwritten by the deprecated and overlapping "sub_port" field. On systems with more than 255 local ports (e.g., Spectrum-4), this results in the firmware maintaining invalid mappings between system port and local port. Specifically, two different systems ports (0x1 and 0x101) point to the same local port (0x1), which eventually leads to firmware errors. Fix by removing the deprecated "sub_port" field. Fixes: fd24b29a1b74 ("mlxsw: reg: Align existing registers to use extended local_port field") Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://lore.kernel.org/r/9b909a3033c8d3d6f67f237306bef4411c5e6ae4.1692268427.git.petrm@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
bc2de151ab
commit
0dc63b9cfd
@ -97,14 +97,6 @@ MLXSW_ITEM32(reg, sspr, m, 0x00, 31, 1);
|
||||
*/
|
||||
MLXSW_ITEM32_LP(reg, sspr, 0x00, 16, 0x00, 12);
|
||||
|
||||
/* reg_sspr_sub_port
|
||||
* Virtual port within the physical port.
|
||||
* Should be set to 0 when virtual ports are not enabled on the port.
|
||||
*
|
||||
* Access: RW
|
||||
*/
|
||||
MLXSW_ITEM32(reg, sspr, sub_port, 0x00, 8, 8);
|
||||
|
||||
/* reg_sspr_system_port
|
||||
* Unique identifier within the stacking domain that represents all the ports
|
||||
* that are available in the system (external ports).
|
||||
@ -120,7 +112,6 @@ static inline void mlxsw_reg_sspr_pack(char *payload, u16 local_port)
|
||||
MLXSW_REG_ZERO(sspr, payload);
|
||||
mlxsw_reg_sspr_m_set(payload, 1);
|
||||
mlxsw_reg_sspr_local_port_set(payload, local_port);
|
||||
mlxsw_reg_sspr_sub_port_set(payload, 0);
|
||||
mlxsw_reg_sspr_system_port_set(payload, local_port);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user