mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
can: mcp251xfd: mcp251xfd_ring_init(): check TX-coalescing configuration
[ Upstream commit ac2b81eb8b2d104033560daea886ee84531e3d0a ] When changing the interface from CAN-CC to CAN-FD mode the old coalescing parameters are re-used. This might cause problem, as the configured parameters are too big for CAN-FD mode. During testing an invalid TX coalescing configuration has been seen. The problem should be been fixed in the previous patch, but add a safeguard here to ensure that the number of TEF coalescing buffers (if configured) is exactly the half of all TEF buffers. Link: https://lore.kernel.org/all/20240805-mcp251xfd-fix-ringconfig-v1-2-72086f0ca5ee@pengutronix.de Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fef6432edc
commit
f1e32334e9
@@ -280,7 +280,7 @@ int mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
|
|||||||
const struct mcp251xfd_rx_ring *rx_ring;
|
const struct mcp251xfd_rx_ring *rx_ring;
|
||||||
u16 base = 0, ram_used;
|
u16 base = 0, ram_used;
|
||||||
u8 fifo_nr = 1;
|
u8 fifo_nr = 1;
|
||||||
int i;
|
int err = 0, i;
|
||||||
|
|
||||||
netdev_reset_queue(priv->ndev);
|
netdev_reset_queue(priv->ndev);
|
||||||
|
|
||||||
@@ -376,10 +376,18 @@ int mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
|
|||||||
netdev_err(priv->ndev,
|
netdev_err(priv->ndev,
|
||||||
"Error during ring configuration, using more RAM (%u bytes) than available (%u bytes).\n",
|
"Error during ring configuration, using more RAM (%u bytes) than available (%u bytes).\n",
|
||||||
ram_used, MCP251XFD_RAM_SIZE);
|
ram_used, MCP251XFD_RAM_SIZE);
|
||||||
return -ENOMEM;
|
err = -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
if (priv->tx_obj_num_coalesce_irq &&
|
||||||
|
priv->tx_obj_num_coalesce_irq * 2 != priv->tx->obj_num) {
|
||||||
|
netdev_err(priv->ndev,
|
||||||
|
"Error during ring configuration, number of TEF coalescing buffers (%u) must be half of TEF buffers (%u).\n",
|
||||||
|
priv->tx_obj_num_coalesce_irq, priv->tx->obj_num);
|
||||||
|
err = -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mcp251xfd_ring_free(struct mcp251xfd_priv *priv)
|
void mcp251xfd_ring_free(struct mcp251xfd_priv *priv)
|
||||||
|
|||||||
Reference in New Issue
Block a user