* [net-next 01/14] can: pcan_usb_core: fix fall-through warnings for Clang
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 02/14] can: mcp251xfd: mcp25xxfd_ring_alloc(): add define instead open coding the maximum number of RX objects Marc Kleine-Budde
` (13 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Gustavo A. R. Silva, Marc Kleine-Budde
From: "Gustavo A. R. Silva" <gustavoars@kernel.org>
In preparation to enable -Wimplicit-fallthrough for Clang, fix a warning by
moving the "default" to the end of the "switch" statement and explicitly adding
a break statement instead of letting the code fall through to the next case.
Link: https://github.com/KSPP/linux/issues/115
Reported-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Link: http://lore.kernel.org/r/aab7cf16bf43cc7c3e9c9930d2dae850c1d07a3c.1605896059.git.gustavoars@kernel.org
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
[mkl: move default to end]
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/usb/peak_usb/pcan_usb_core.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
index 204ccb27d6d9..251835ea15aa 100644
--- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c
+++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c
@@ -295,15 +295,16 @@ static void peak_usb_write_bulk_callback(struct urb *urb)
netif_trans_update(netdev);
break;
- default:
- if (net_ratelimit())
- netdev_err(netdev, "Tx urb aborted (%d)\n",
- urb->status);
case -EPROTO:
case -ENOENT:
case -ECONNRESET:
case -ESHUTDOWN:
+ break;
+ default:
+ if (net_ratelimit())
+ netdev_err(netdev, "Tx urb aborted (%d)\n",
+ urb->status);
break;
}
base-commit: e71d2b957ee49fe3ed35a384a4e31774de1316c1
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 02/14] can: mcp251xfd: mcp25xxfd_ring_alloc(): add define instead open coding the maximum number of RX objects
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 01/14] can: pcan_usb_core: fix fall-through warnings for Clang Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 03/14] can: mcp25xxfd: rx-path: reduce number of SPI core requests to set UINC bit Marc Kleine-Budde
` (12 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Thomas Kopp
This patch add a define for the maximum number of RX objects instead of open
coding it.
Link: https://lore.kernel.org/r/20201126132144.351154-2-mkl@pengutronix.de
Tested-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 3 ++-
drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
index d0f2f5c73907..476a2e4a1de8 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
@@ -416,7 +416,8 @@ static int mcp251xfd_ring_alloc(struct mcp251xfd_priv *priv)
int rx_obj_num;
rx_obj_num = ram_free / rx_obj_size;
- rx_obj_num = min(1 << (fls(rx_obj_num) - 1), 32);
+ rx_obj_num = min(1 << (fls(rx_obj_num) - 1),
+ MCP251XFD_RX_OBJ_NUM_MAX);
rx_ring = kzalloc(sizeof(*rx_ring) + rx_obj_size * rx_obj_num,
GFP_KERNEL);
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index fa1246e39980..c20c97d01072 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -368,6 +368,7 @@
* FIFO setup: tef: 8*12 bytes = 96 bytes, tx: 8*16 bytes = 128 bytes
* FIFO setup: tef: 4*12 bytes = 48 bytes, tx: 4*72 bytes = 288 bytes
*/
+#define MCP251XFD_RX_OBJ_NUM_MAX 32
#define MCP251XFD_TX_OBJ_NUM_CAN 8
#define MCP251XFD_TX_OBJ_NUM_CANFD 4
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 03/14] can: mcp25xxfd: rx-path: reduce number of SPI core requests to set UINC bit
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 01/14] can: pcan_usb_core: fix fall-through warnings for Clang Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 02/14] can: mcp251xfd: mcp25xxfd_ring_alloc(): add define instead open coding the maximum number of RX objects Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 04/14] can: mcp251xfd: struct mcp251xfd_priv::tef to array of length 1 Marc Kleine-Budde
` (11 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Ursula Maplehurst, Thomas Kopp,
Marc Kleine-Budde
From: Ursula Maplehurst <ursula@kangatronix.co.uk>
Reduce the number of separate SPI core requests when setting the UINC bit in
the RX FIFO, and instead batch them up into a single SPI core request.
Link: https://github.com/marckleinebudde/linux/issues/4
Link: https://lore.kernel.org/r/20201126132144.351154-3-mkl@pengutronix.de
Tested-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Ursula Maplehurst <ursula@kangatronix.co.uk>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../net/can/spi/mcp251xfd/mcp251xfd-core.c | 51 ++++++++++++++++---
drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 2 +
2 files changed, 45 insertions(+), 8 deletions(-)
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
index 476a2e4a1de8..c770733ecbcc 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
@@ -332,7 +332,7 @@ static void mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
u32 val;
u16 addr;
u8 len;
- int i;
+ int i, j;
/* TEF */
priv->tef.head = 0;
@@ -370,6 +370,23 @@ static void mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
prev_rx_ring->obj_num;
prev_rx_ring = rx_ring;
+
+ /* FIFO increment RX tail pointer */
+ addr = MCP251XFD_REG_FIFOCON(rx_ring->fifo_nr);
+ val = MCP251XFD_REG_FIFOCON_UINC;
+ len = mcp251xfd_cmd_prepare_write_reg(priv, &rx_ring->uinc_buf,
+ addr, val, val);
+
+ for (j = 0; j < ARRAY_SIZE(rx_ring->uinc_xfer); j++) {
+ struct spi_transfer *xfer;
+
+ xfer = &rx_ring->uinc_xfer[j];
+ xfer->tx_buf = &rx_ring->uinc_buf;
+ xfer->len = len;
+ xfer->cs_change = 1;
+ xfer->cs_change_delay.value = 0;
+ xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
+ }
}
}
@@ -1440,13 +1457,7 @@ mcp251xfd_handle_rxif_one(struct mcp251xfd_priv *priv,
if (err)
stats->rx_fifo_errors++;
- ring->tail++;
-
- /* finally increment the RX pointer */
- return regmap_update_bits(priv->map_reg,
- MCP251XFD_REG_FIFOCON(ring->fifo_nr),
- GENMASK(15, 8),
- MCP251XFD_REG_FIFOCON_UINC);
+ return 0;
}
static inline int
@@ -1478,6 +1489,8 @@ mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
return err;
while ((len = mcp251xfd_get_rx_linear_len(ring))) {
+ struct spi_transfer *last_xfer;
+
rx_tail = mcp251xfd_get_rx_tail(ring);
err = mcp251xfd_rx_obj_read(priv, ring, hw_rx_obj,
@@ -1492,6 +1505,28 @@ mcp251xfd_handle_rxif_ring(struct mcp251xfd_priv *priv,
if (err)
return err;
}
+
+ /* Increment the RX FIFO tail pointer 'len' times in a
+ * single SPI message.
+ */
+ ring->tail += len;
+
+ /* Note:
+ *
+ * "cs_change == 1" on the last transfer results in an
+ * active chip select after the complete SPI
+ * message. This causes the controller to interpret
+ * the next register access as data. Temporary set
+ * "cs_change" of the last transfer to "0" to properly
+ * deactivate the chip select at the end of the
+ * message.
+ */
+ last_xfer = &ring->uinc_xfer[len - 1];
+ last_xfer->cs_change = 0;
+ err = spi_sync_transfer(priv->spi, ring->uinc_xfer, len);
+ last_xfer->cs_change = 1;
+ if (err)
+ return err;
}
return 0;
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index c20c97d01072..97dc182e2b42 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -528,6 +528,8 @@ struct mcp251xfd_rx_ring {
u8 obj_num;
u8 obj_size;
+ union mcp251xfd_write_reg_buf uinc_buf;
+ struct spi_transfer uinc_xfer[MCP251XFD_RX_OBJ_NUM_MAX];
struct mcp251xfd_hw_rx_obj_canfd obj[];
};
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 04/14] can: mcp251xfd: struct mcp251xfd_priv::tef to array of length 1
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (2 preceding siblings ...)
2020-11-30 14:14 ` [net-next 03/14] can: mcp25xxfd: rx-path: reduce number of SPI core requests to set UINC bit Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 05/14] can: mcp251xfd: move struct mcp251xfd_tef_ring definition Marc Kleine-Budde
` (10 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Thomas Kopp
This patch converts the struct mcp251xfd_tef_ring member within the struct
mcp251xfd_priv into an array of length one. This way all rings (tef, tx and rx)
can be accessed in the same way.
Link: https://lore.kernel.org/r/20201126132144.351154-4-mkl@pengutronix.de
Tested-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 18 ++++++++++--------
drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 8 ++++----
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
index c770733ecbcc..551499d9737f 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
@@ -326,6 +326,7 @@ mcp251xfd_tx_ring_init_tx_obj(const struct mcp251xfd_priv *priv,
static void mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
{
+ struct mcp251xfd_tef_ring *tef_ring;
struct mcp251xfd_tx_ring *tx_ring;
struct mcp251xfd_rx_ring *rx_ring, *prev_rx_ring = NULL;
struct mcp251xfd_tx_obj *tx_obj;
@@ -335,8 +336,9 @@ static void mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
int i, j;
/* TEF */
- priv->tef.head = 0;
- priv->tef.tail = 0;
+ tef_ring = priv->tef;
+ tef_ring->head = 0;
+ tef_ring->tail = 0;
/* TX */
tx_ring = priv->tx;
@@ -1219,7 +1221,7 @@ mcp251xfd_handle_tefif_recover(const struct mcp251xfd_priv *priv, const u32 seq)
tef_sta & MCP251XFD_REG_TEFSTA_TEFFIF ?
"full" : tef_sta & MCP251XFD_REG_TEFSTA_TEFNEIF ?
"not empty" : "empty",
- seq, priv->tef.tail, priv->tef.head, tx_ring->head);
+ seq, priv->tef->tail, priv->tef->head, tx_ring->head);
/* The Sequence Number in the TEF doesn't match our tef_tail. */
return -EAGAIN;
@@ -1243,7 +1245,7 @@ mcp251xfd_handle_tefif_one(struct mcp251xfd_priv *priv,
*/
seq_masked = seq &
field_mask(MCP251XFD_OBJ_FLAGS_SEQ_MCP2517FD_MASK);
- tef_tail_masked = priv->tef.tail &
+ tef_tail_masked = priv->tef->tail &
field_mask(MCP251XFD_OBJ_FLAGS_SEQ_MCP2517FD_MASK);
if (seq_masked != tef_tail_masked)
return mcp251xfd_handle_tefif_recover(priv, seq);
@@ -1261,7 +1263,7 @@ mcp251xfd_handle_tefif_one(struct mcp251xfd_priv *priv,
if (err)
return err;
- priv->tef.tail++;
+ priv->tef->tail++;
tx_ring->tail++;
return mcp251xfd_check_tef_tail(priv);
@@ -1281,12 +1283,12 @@ static int mcp251xfd_tef_ring_update(struct mcp251xfd_priv *priv)
/* chip_tx_tail, is the next TX-Object send by the HW.
* The new TEF head must be >= the old head, ...
*/
- new_head = round_down(priv->tef.head, tx_ring->obj_num) + chip_tx_tail;
- if (new_head <= priv->tef.head)
+ new_head = round_down(priv->tef->head, tx_ring->obj_num) + chip_tx_tail;
+ if (new_head <= priv->tef->head)
new_head += tx_ring->obj_num;
/* ... but it cannot exceed the TX head. */
- priv->tef.head = min(new_head, tx_ring->head);
+ priv->tef->head = min(new_head, tx_ring->head);
return mcp251xfd_check_tef_tail(priv);
}
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index 97dc182e2b42..76585a40d16e 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -583,7 +583,7 @@ struct mcp251xfd_priv {
struct spi_device *spi;
u32 spi_max_speed_hz_orig;
- struct mcp251xfd_tef_ring tef;
+ struct mcp251xfd_tef_ring tef[1];
struct mcp251xfd_tx_ring tx[1];
struct mcp251xfd_rx_ring *rx[1];
@@ -744,17 +744,17 @@ mcp251xfd_get_rx_obj_addr(const struct mcp251xfd_rx_ring *ring, u8 n)
static inline u8 mcp251xfd_get_tef_head(const struct mcp251xfd_priv *priv)
{
- return priv->tef.head & (priv->tx->obj_num - 1);
+ return priv->tef->head & (priv->tx->obj_num - 1);
}
static inline u8 mcp251xfd_get_tef_tail(const struct mcp251xfd_priv *priv)
{
- return priv->tef.tail & (priv->tx->obj_num - 1);
+ return priv->tef->tail & (priv->tx->obj_num - 1);
}
static inline u8 mcp251xfd_get_tef_len(const struct mcp251xfd_priv *priv)
{
- return priv->tef.head - priv->tef.tail;
+ return priv->tef->head - priv->tef->tail;
}
static inline u8 mcp251xfd_get_tef_linear_len(const struct mcp251xfd_priv *priv)
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 05/14] can: mcp251xfd: move struct mcp251xfd_tef_ring definition
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (3 preceding siblings ...)
2020-11-30 14:14 ` [net-next 04/14] can: mcp251xfd: struct mcp251xfd_priv::tef to array of length 1 Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 06/14] can: mcp251xfd: tef-path: reduce number of SPI core requests to set UINC bit Marc Kleine-Budde
` (9 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Thomas Kopp
This patch moves the struct mcp251xfd_tef_ring upwards, so that the union
mcp251xfd_write_reg_buf and struct spi_transfer can be made members of it.
Link: https://lore.kernel.org/r/20201126132144.351154-5-mkl@pengutronix.de
Tested-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index 76585a40d16e..299dbf72e24b 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -459,14 +459,6 @@ struct mcp251xfd_hw_rx_obj_canfd {
u8 data[sizeof_field(struct canfd_frame, data)];
};
-struct mcp251xfd_tef_ring {
- unsigned int head;
- unsigned int tail;
-
- /* u8 obj_num equals tx_ring->obj_num */
- /* u8 obj_size equals sizeof(struct mcp251xfd_hw_tef_obj) */
-};
-
struct __packed mcp251xfd_buf_cmd {
__be16 cmd;
};
@@ -506,6 +498,14 @@ struct mcp251xfd_tx_obj {
union mcp251xfd_tx_obj_load_buf buf;
};
+struct mcp251xfd_tef_ring {
+ unsigned int head;
+ unsigned int tail;
+
+ /* u8 obj_num equals tx_ring->obj_num */
+ /* u8 obj_size equals sizeof(struct mcp251xfd_hw_tef_obj) */
+};
+
struct mcp251xfd_tx_ring {
unsigned int head;
unsigned int tail;
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 06/14] can: mcp251xfd: tef-path: reduce number of SPI core requests to set UINC bit
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (4 preceding siblings ...)
2020-11-30 14:14 ` [net-next 05/14] can: mcp251xfd: move struct mcp251xfd_tef_ring definition Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 07/14] can: tcan4x5x: tcan4x5x_clear_interrupts(): remove redundant return statement Marc Kleine-Budde
` (8 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Thomas Kopp
Reduce the number of separate SPI core requests when setting the UINC bit in
the TEF FIFO, and instead batch them up into a single SPI core request.
Link: https://lore.kernel.org/r/20201126132144.351154-6-mkl@pengutronix.de
Tested-by: Thomas Kopp <thomas.kopp@microchip.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
.../net/can/spi/mcp251xfd/mcp251xfd-core.c | 64 +++++++++++++++----
drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 3 +
2 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
index 551499d9737f..20cbd5c446f5 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c
@@ -340,6 +340,23 @@ static void mcp251xfd_ring_init(struct mcp251xfd_priv *priv)
tef_ring->head = 0;
tef_ring->tail = 0;
+ /* FIFO increment TEF tail pointer */
+ addr = MCP251XFD_REG_TEFCON;
+ val = MCP251XFD_REG_TEFCON_UINC;
+ len = mcp251xfd_cmd_prepare_write_reg(priv, &tef_ring->uinc_buf,
+ addr, val, val);
+
+ for (j = 0; j < ARRAY_SIZE(tef_ring->uinc_xfer); j++) {
+ struct spi_transfer *xfer;
+
+ xfer = &tef_ring->uinc_xfer[j];
+ xfer->tx_buf = &tef_ring->uinc_buf;
+ xfer->len = len;
+ xfer->cs_change = 1;
+ xfer->cs_change_delay.value = 0;
+ xfer->cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
+ }
+
/* TX */
tx_ring = priv->tx;
tx_ring->head = 0;
@@ -1231,10 +1248,8 @@ static int
mcp251xfd_handle_tefif_one(struct mcp251xfd_priv *priv,
const struct mcp251xfd_hw_tef_obj *hw_tef_obj)
{
- struct mcp251xfd_tx_ring *tx_ring = priv->tx;
struct net_device_stats *stats = &priv->ndev->stats;
u32 seq, seq_masked, tef_tail_masked;
- int err;
seq = FIELD_GET(MCP251XFD_OBJ_FLAGS_SEQ_MCP2518FD_MASK,
hw_tef_obj->flags);
@@ -1255,18 +1270,9 @@ mcp251xfd_handle_tefif_one(struct mcp251xfd_priv *priv,
mcp251xfd_get_tef_tail(priv),
hw_tef_obj->ts);
stats->tx_packets++;
-
- /* finally increment the TEF pointer */
- err = regmap_update_bits(priv->map_reg, MCP251XFD_REG_TEFCON,
- GENMASK(15, 8),
- MCP251XFD_REG_TEFCON_UINC);
- if (err)
- return err;
-
priv->tef->tail++;
- tx_ring->tail++;
- return mcp251xfd_check_tef_tail(priv);
+ return 0;
}
static int mcp251xfd_tef_ring_update(struct mcp251xfd_priv *priv)
@@ -1353,6 +1359,40 @@ static int mcp251xfd_handle_tefif(struct mcp251xfd_priv *priv)
}
out_netif_wake_queue:
+ len = i; /* number of handled goods TEFs */
+ if (len) {
+ struct mcp251xfd_tef_ring *ring = priv->tef;
+ struct mcp251xfd_tx_ring *tx_ring = priv->tx;
+ struct spi_transfer *last_xfer;
+
+ tx_ring->tail += len;
+
+ /* Increment the TEF FIFO tail pointer 'len' times in
+ * a single SPI message.
+ */
+
+ /* Note:
+ *
+ * "cs_change == 1" on the last transfer results in an
+ * active chip select after the complete SPI
+ * message. This causes the controller to interpret
+ * the next register access as data. Temporary set
+ * "cs_change" of the last transfer to "0" to properly
+ * deactivate the chip select at the end of the
+ * message.
+ */
+ last_xfer = &ring->uinc_xfer[len - 1];
+ last_xfer->cs_change = 0;
+ err = spi_sync_transfer(priv->spi, ring->uinc_xfer, len);
+ last_xfer->cs_change = 1;
+ if (err)
+ return err;
+
+ err = mcp251xfd_check_tef_tail(priv);
+ if (err)
+ return err;
+ }
+
mcp251xfd_ecc_tefif_successful(priv);
if (mcp251xfd_get_tx_free(priv->tx)) {
diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index 299dbf72e24b..cb6398c2a560 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -504,6 +504,9 @@ struct mcp251xfd_tef_ring {
/* u8 obj_num equals tx_ring->obj_num */
/* u8 obj_size equals sizeof(struct mcp251xfd_hw_tef_obj) */
+
+ union mcp251xfd_write_reg_buf uinc_buf;
+ struct spi_transfer uinc_xfer[MCP251XFD_TX_OBJ_NUM_MAX];
};
struct mcp251xfd_tx_ring {
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 07/14] can: tcan4x5x: tcan4x5x_clear_interrupts(): remove redundant return statement
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (5 preceding siblings ...)
2020-11-30 14:14 ` [net-next 06/14] can: mcp251xfd: tef-path: reduce number of SPI core requests to set UINC bit Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 08/14] can: tcan4x5x: rename parse_config() function Marc Kleine-Budde
` (7 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, linux-can, kernel, Sean Nyekjaer,
Daniels Umanovskis, Dan Murphy, Marc Kleine-Budde
From: Sean Nyekjaer <sean@geanix.com>
This patch removes a redundant return at the end of
tcan4x5x_clear_interrupts().
Signed-off-by: Sean Nyekjaer <sean@geanix.com>
Link: http://lore.kernel.org/r/20191211141635.322577-1-sean@geanix.com
Reported-by: Daniels Umanovskis <daniels@umanovskis.se>
Acked-by: Dan Murphy <dmurphy@ti.com>
Fixes: 5443c226ba91 ("can: tcan4x5x: Add tcan4x5x driver to the kernel")
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/tcan4x5x.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
index e5d7d85e0b6d..1ffcb7014154 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -328,12 +328,8 @@ static int tcan4x5x_clear_interrupts(struct m_can_classdev *cdev)
if (ret)
return ret;
- ret = tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_ERROR_STATUS,
- TCAN4X5X_CLEAR_ALL_INT);
- if (ret)
- return ret;
-
- return ret;
+ return tcan4x5x_write_tcan_reg(cdev, TCAN4X5X_ERROR_STATUS,
+ TCAN4X5X_CLEAR_ALL_INT);
}
static int tcan4x5x_init(struct m_can_classdev *cdev)
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 08/14] can: tcan4x5x: rename parse_config() function
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (6 preceding siblings ...)
2020-11-30 14:14 ` [net-next 07/14] can: tcan4x5x: tcan4x5x_clear_interrupts(): remove redundant return statement Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 09/14] can: tcan4x5x: remove mram_start and reg_offset from struct tcan4x5x_priv Marc Kleine-Budde
` (6 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Dan Murphy, Marc Kleine-Budde
From: Dan Murphy <dmurphy@ti.com>
Rename the tcan4x5x_parse_config() function to tcan4x5x_get_gpios() since the
function retrieves the gpio configurations from the firmware.
Signed-off-by: Dan Murphy <dmurphy@ti.com>
Link: http://lore.kernel.org/r/20200226140358.30017-1-dmurphy@ti.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/tcan4x5x.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
index 1ffcb7014154..a2144bbcd486 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -375,7 +375,7 @@ static int tcan4x5x_disable_state(struct m_can_classdev *cdev)
TCAN4X5X_DISABLE_INH_MSK, 0x01);
}
-static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
+static int tcan4x5x_get_gpios(struct m_can_classdev *cdev)
{
struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
int ret;
@@ -498,7 +498,7 @@ static int tcan4x5x_can_probe(struct spi_device *spi)
if (ret)
goto out_clk;
- ret = tcan4x5x_parse_config(mcan_class);
+ ret = tcan4x5x_get_gpios(mcan_class);
if (ret)
goto out_power;
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 09/14] can: tcan4x5x: remove mram_start and reg_offset from struct tcan4x5x_priv
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (7 preceding siblings ...)
2020-11-30 14:14 ` [net-next 08/14] can: tcan4x5x: rename parse_config() function Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 10/14] can: tcan4x5x: tcan4x5x_can_probe(): remove probe failed error message Marc Kleine-Budde
` (5 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
Both struct tcan4x5x_priv::mram_start and struct tcan4x5x_priv::reg_offset are
only assigned once with a constant and then always used read-only. This patch
changes the driver to use the constant directly instead.
Link: https://lore.kernel.org/r/20201130133713.269256-2-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/tcan4x5x.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
index a2144bbcd486..04bb392f60fa 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -123,10 +123,6 @@ struct tcan4x5x_priv {
struct gpio_desc *device_wake_gpio;
struct gpio_desc *device_state_gpio;
struct regulator *power;
-
- /* Register based ip */
- int mram_start;
- int reg_offset;
};
static struct can_bittiming_const tcan4x5x_bittiming_const = {
@@ -260,7 +256,7 @@ static u32 tcan4x5x_read_reg(struct m_can_classdev *cdev, int reg)
struct tcan4x5x_priv *priv = cdev->device_data;
u32 val;
- regmap_read(priv->regmap, priv->reg_offset + reg, &val);
+ regmap_read(priv->regmap, TCAN4X5X_MCAN_OFFSET + reg, &val);
return val;
}
@@ -270,7 +266,7 @@ static u32 tcan4x5x_read_fifo(struct m_can_classdev *cdev, int addr_offset)
struct tcan4x5x_priv *priv = cdev->device_data;
u32 val;
- regmap_read(priv->regmap, priv->mram_start + addr_offset, &val);
+ regmap_read(priv->regmap, TCAN4X5X_MRAM_START + addr_offset, &val);
return val;
}
@@ -279,7 +275,7 @@ static int tcan4x5x_write_reg(struct m_can_classdev *cdev, int reg, int val)
{
struct tcan4x5x_priv *priv = cdev->device_data;
- return regmap_write(priv->regmap, priv->reg_offset + reg, val);
+ return regmap_write(priv->regmap, TCAN4X5X_MCAN_OFFSET + reg, val);
}
static int tcan4x5x_write_fifo(struct m_can_classdev *cdev,
@@ -287,7 +283,7 @@ static int tcan4x5x_write_fifo(struct m_can_classdev *cdev,
{
struct tcan4x5x_priv *priv = cdev->device_data;
- return regmap_write(priv->regmap, priv->mram_start + addr_offset, val);
+ return regmap_write(priv->regmap, TCAN4X5X_MRAM_START + addr_offset, val);
}
static int tcan4x5x_power_enable(struct regulator *reg, int enable)
@@ -465,8 +461,6 @@ static int tcan4x5x_can_probe(struct spi_device *spi)
goto out_m_can_class_free_dev;
}
- priv->reg_offset = TCAN4X5X_MCAN_OFFSET;
- priv->mram_start = TCAN4X5X_MRAM_START;
priv->spi = spi;
priv->mcan_dev = mcan_class;
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 10/14] can: tcan4x5x: tcan4x5x_can_probe(): remove probe failed error message
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (8 preceding siblings ...)
2020-11-30 14:14 ` [net-next 09/14] can: tcan4x5x: remove mram_start and reg_offset from struct tcan4x5x_priv Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 11/14] can: m_can: Kconfig: convert the into menu Marc Kleine-Budde
` (4 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
The driver core already emits a probe failed error message, so remove this one
from the driver.
Link: https://lore.kernel.org/r/20201130133713.269256-3-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/tcan4x5x.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
index 04bb392f60fa..483a78dca17e 100644
--- a/drivers/net/can/m_can/tcan4x5x.c
+++ b/drivers/net/can/m_can/tcan4x5x.c
@@ -516,8 +516,6 @@ static int tcan4x5x_can_probe(struct spi_device *spi)
}
out_m_can_class_free_dev:
m_can_class_free_dev(mcan_class->net);
- dev_err(&spi->dev, "Probe failed, err=%d\n", ret);
-
return ret;
}
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 11/14] can: m_can: Kconfig: convert the into menu
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (9 preceding siblings ...)
2020-11-30 14:14 ` [net-next 10/14] can: tcan4x5x: tcan4x5x_can_probe(): remove probe failed error message Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 12/14] can: m_can: remove not used variable struct m_can_classdev::freq Marc Kleine-Budde
` (3 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
Since there is more than one base driver for the m_can core, let's
convert this into a menu.
Link: https://lore.kernel.org/r/20201130133713.269256-4-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/Kconfig | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/can/m_can/Kconfig b/drivers/net/can/m_can/Kconfig
index 5f9f8192dd0b..e3eb69b76cf5 100644
--- a/drivers/net/can/m_can/Kconfig
+++ b/drivers/net/can/m_can/Kconfig
@@ -1,21 +1,21 @@
# SPDX-License-Identifier: GPL-2.0-only
-config CAN_M_CAN
+menuconfig CAN_M_CAN
tristate "Bosch M_CAN support"
help
Say Y here if you want support for Bosch M_CAN controller framework.
This is common support for devices that embed the Bosch M_CAN IP.
+if CAN_M_CAN
+
config CAN_M_CAN_PLATFORM
tristate "Bosch M_CAN support for io-mapped devices"
depends on HAS_IOMEM
- depends on CAN_M_CAN
help
Say Y here if you want support for IO Mapped Bosch M_CAN controller.
This support is for devices that have the Bosch M_CAN controller
IP embedded into the device and the IP is IO Mapped to the processor.
config CAN_M_CAN_TCAN4X5X
- depends on CAN_M_CAN
depends on SPI
select REGMAP_SPI
tristate "TCAN4X5X M_CAN device"
@@ -23,3 +23,5 @@ config CAN_M_CAN_TCAN4X5X
Say Y here if you want support for Texas Instruments TCAN4x5x
M_CAN controller. This device is a peripheral device that uses the
SPI bus for communication.
+
+endif
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 12/14] can: m_can: remove not used variable struct m_can_classdev::freq
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (10 preceding siblings ...)
2020-11-30 14:14 ` [net-next 11/14] can: m_can: Kconfig: convert the into menu Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 13/14] can: m_can: m_can_plat_remove(): remove unneeded platform_set_drvdata() Marc Kleine-Budde
` (2 subsequent siblings)
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
This patch removes the unused variable freq from the struct m_can_classdev.
Link: https://lore.kernel.org/r/20201130133713.269256-5-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
index b2699a7c9997..f8a692596e59 100644
--- a/drivers/net/can/m_can/m_can.h
+++ b/drivers/net/can/m_can/m_can.h
@@ -89,7 +89,6 @@ struct m_can_classdev {
void *device_data;
int version;
- int freq;
u32 irqstatus;
int pm_clock_support;
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 13/14] can: m_can: m_can_plat_remove(): remove unneeded platform_set_drvdata()
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (11 preceding siblings ...)
2020-11-30 14:14 ` [net-next 12/14] can: m_can: remove not used variable struct m_can_classdev::freq Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 14/14] can: m_can: m_can_class_unregister(): move right after m_can_class_register() Marc Kleine-Budde
2020-12-01 3:08 ` pull-request: can-next 2020-11-30 Jakub Kicinski
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
There's no need to unset the drvdata on remove, so remove the unneeded call to
platform_set_drvdata() in m_can_plat_remove().
Link: https://lore.kernel.org/r/20201130133713.269256-6-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can_platform.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c
index 161cb9be018c..c45a889a1afd 100644
--- a/drivers/net/can/m_can/m_can_platform.c
+++ b/drivers/net/can/m_can/m_can_platform.c
@@ -141,8 +141,6 @@ static int m_can_plat_remove(struct platform_device *pdev)
m_can_class_free_dev(mcan_class->net);
- platform_set_drvdata(pdev, NULL);
-
return 0;
}
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [net-next 14/14] can: m_can: m_can_class_unregister(): move right after m_can_class_register()
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (12 preceding siblings ...)
2020-11-30 14:14 ` [net-next 13/14] can: m_can: m_can_plat_remove(): remove unneeded platform_set_drvdata() Marc Kleine-Budde
@ 2020-11-30 14:14 ` Marc Kleine-Budde
2020-12-01 3:08 ` pull-request: can-next 2020-11-30 Jakub Kicinski
14 siblings, 0 replies; 16+ messages in thread
From: Marc Kleine-Budde @ 2020-11-30 14:14 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, linux-can, kernel, Marc Kleine-Budde, Dan Murphy
This patch moves the function m_can_class_unregister() directly after the
m_can_class_register() function.
Link: https://lore.kernel.org/r/20201130133713.269256-7-mkl@pengutronix.de
Reviewed-by: Dan Murphy <dmurphy@ti.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 553ff39199aa..05c978d1c53d 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -1869,6 +1869,14 @@ int m_can_class_register(struct m_can_classdev *m_can_dev)
}
EXPORT_SYMBOL_GPL(m_can_class_register);
+void m_can_class_unregister(struct m_can_classdev *m_can_dev)
+{
+ unregister_candev(m_can_dev->net);
+
+ m_can_clk_stop(m_can_dev);
+}
+EXPORT_SYMBOL_GPL(m_can_class_unregister);
+
int m_can_class_suspend(struct device *dev)
{
struct net_device *ndev = dev_get_drvdata(dev);
@@ -1915,14 +1923,6 @@ int m_can_class_resume(struct device *dev)
}
EXPORT_SYMBOL_GPL(m_can_class_resume);
-void m_can_class_unregister(struct m_can_classdev *m_can_dev)
-{
- unregister_candev(m_can_dev->net);
-
- m_can_clk_stop(m_can_dev);
-}
-EXPORT_SYMBOL_GPL(m_can_class_unregister);
-
MODULE_AUTHOR("Dong Aisheng <b29396@freescale.com>");
MODULE_AUTHOR("Dan Murphy <dmurphy@ti.com>");
MODULE_LICENSE("GPL v2");
--
2.29.2
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: pull-request: can-next 2020-11-30
2020-11-30 14:14 pull-request: can-next 2020-11-30 Marc Kleine-Budde
` (13 preceding siblings ...)
2020-11-30 14:14 ` [net-next 14/14] can: m_can: m_can_class_unregister(): move right after m_can_class_register() Marc Kleine-Budde
@ 2020-12-01 3:08 ` Jakub Kicinski
14 siblings, 0 replies; 16+ messages in thread
From: Jakub Kicinski @ 2020-12-01 3:08 UTC (permalink / raw)
To: Marc Kleine-Budde; +Cc: netdev, davem, linux-can, kernel
On Mon, 30 Nov 2020 15:14:18 +0100 Marc Kleine-Budde wrote:
> Hello Jakub, hello David,
>
> here's a pull request of 14 patches for net-next/master.
>
> Gustavo A. R. Silva's patch for the pcan_usb driver fixes fall-through warnings
> for Clang.
>
> The next 5 patches target the mcp251xfd driver and are by Ursula Maplehurst and
> me. They optimizie the TEF and RX path by reducing number of SPI core requests
> to set the UINC bit.
>
> The remaining 8 patches target the m_can driver. The first 4 are various
> cleanups for the SPI binding driver (tcan4x5x) by Sean Nyekjaer, Dan Murphy and
> me. Followed by 4 cleanup patches by me for the m_can and m_can_platform
> driver.
Pulled, thanks!
^ permalink raw reply [flat|nested] 16+ messages in thread