sonic-buildimage/platform/mellanox/non-upstream-patches/patches/0277-mlxsw-i2c-Fix-chunk-size-setting-in-output-mailbox-b.patch
Kebo Liu e286869b24
[Mellanox] Update HW-MGMT package to new version V.7.0030.1011 (#16239)
- Why I did it
1. Update Mellanox HW-MGMT package to newer version V.7.0030.1011
2. Replace the SONiC PMON Thermal control algorithm with the one inside the HW-MGMT package on all Nvidia platforms
3. Support Spectrum-4 systems

- How I did it
1. Update the HW-MGMT package version number and submodule pointer
2. Remove the thermal control algorithm implementation from Mellanox platform API
3. Revise the patch to HW-MGMT package which will disable HW-MGMT from running on SIMX
4. Update the downstream kernel patch list

Signed-off-by: Kebo Liu <kebol@nvidia.com>
2023-09-06 11:32:08 +03:00

42 lines
1.7 KiB
Diff

From b66ec3f67d61b7e380c61a12771cc2fee2f0a10e Mon Sep 17 00:00:00 2001
From: Vadim Pasternak <vadimp@nvidia.com>
Date: Thu, 9 Mar 2023 09:16:33 +0000
Subject: [PATCH backport v.5.10 3/3] mlxsw: i2c: Fix chunk size setting in
output mailbox buffer
Set output mailbox buffer size multiple of minimal chunk size (32).
Full buffer size is 256 bytes, while chunk size, which can be sent to
device on some controllers could be for example 32 + 4, 64 + 4, 128 +
4. Thus, last chunk maybe missed, and transaction tail will be lost.
For example, if transaction size is 256 bytes and chunk size is 64 + 4,
only 204 (68 * 3) bytes will be read instead of 256.
With this fix chunk size will be multiple of 2^n (where n could be 5, 6,
7) and last chunk will be handled.
Fixes: 95b75cbd1bc5 ("mlxsw: i2c: Extend input parameters list of command API")
Signed-off-by: Vadim Pasternak <vadimp@nvidia.com>
---
drivers/net/ethernet/mellanox/mlxsw/i2c.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/i2c.c b/drivers/net/ethernet/mellanox/mlxsw/i2c.c
index ba31540f1..e04557afc 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/i2c.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/i2c.c
@@ -466,7 +466,8 @@ mlxsw_i2c_cmd(struct device *dev, u16 opcode, u32 in_mod, size_t in_mbox_size,
} else {
/* No input mailbox is case of initialization query command. */
reg_size = MLXSW_I2C_MAX_DATA_SIZE;
- num = reg_size / mlxsw_i2c->block_size;
+ num = reg_size / (mlxsw_i2c->block_size -
+ (mlxsw_i2c->block_size % MLXSW_I2C_BLK_DEF));
if (mutex_lock_interruptible(&mlxsw_i2c->cmd.lock) < 0) {
dev_err(&client->dev, "Could not acquire lock");
--
2.20.1