linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* pull-request: can-next 2020-11-30
@ 2020-11-30 14:14 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
                   ` (14 more replies)
  0 siblings, 15 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

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.

regards,
Marc

---

The following changes since commit e71d2b957ee49fe3ed35a384a4e31774de1316c1:

  Merge branch 'net-ipa-start-adding-ipa-v4-5-support' (2020-11-28 12:14:02 -0800)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git tags/linux-can-next-for-5.11-20201130

for you to fetch changes up to 6d9986b46fc12f4a36fc243698deb774323b76f3:

  can: m_can: m_can_class_unregister(): move right after m_can_class_register() (2020-11-30 14:55:41 +0100)

----------------------------------------------------------------
linux-can-next-for-5.11-20201130

----------------------------------------------------------------
Dan Murphy (1):
      can: tcan4x5x: rename parse_config() function

Gustavo A. R. Silva (1):
      can: pcan_usb_core: fix fall-through warnings for Clang

Marc Kleine-Budde (10):
      can: mcp251xfd: mcp25xxfd_ring_alloc(): add define instead open coding the maximum number of RX objects
      can: mcp251xfd: struct mcp251xfd_priv::tef to array of length 1
      can: mcp251xfd: move struct mcp251xfd_tef_ring definition
      can: mcp251xfd: tef-path: reduce number of SPI core requests to set UINC bit
      can: tcan4x5x: remove mram_start and reg_offset from struct tcan4x5x_priv
      can: tcan4x5x: tcan4x5x_can_probe(): remove probe failed error message
      can: m_can: Kconfig: convert the into menu
      can: m_can: remove not used variable struct m_can_classdev::freq
      can: m_can: m_can_plat_remove(): remove unneeded platform_set_drvdata()
      can: m_can: m_can_class_unregister(): move right after m_can_class_register()

Sean Nyekjaer (1):
      can: tcan4x5x: tcan4x5x_clear_interrupts(): remove redundant return statement

Ursula Maplehurst (1):
      can: mcp25xxfd: rx-path: reduce number of SPI core requests to set UINC bit

 drivers/net/can/m_can/Kconfig                  |   8 +-
 drivers/net/can/m_can/m_can.c                  |  16 +--
 drivers/net/can/m_can/m_can.h                  |   1 -
 drivers/net/can/m_can/m_can_platform.c         |   2 -
 drivers/net/can/m_can/tcan4x5x.c               |  28 ++---
 drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 136 +++++++++++++++++++------
 drivers/net/can/spi/mcp251xfd/mcp251xfd.h      |  30 +++---
 drivers/net/can/usb/peak_usb/pcan_usb_core.c   |   9 +-
 8 files changed, 151 insertions(+), 79 deletions(-)



^ permalink raw reply	[flat|nested] 16+ messages in thread

* [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

end of thread, other threads:[~2020-12-01  3:09 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [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 ` [net-next 04/14] can: mcp251xfd: struct mcp251xfd_priv::tef to array of length 1 Marc Kleine-Budde
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 ` [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 ` [net-next 07/14] can: tcan4x5x: tcan4x5x_clear_interrupts(): remove redundant return statement Marc Kleine-Budde
2020-11-30 14:14 ` [net-next 08/14] can: tcan4x5x: rename parse_config() function 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
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 ` [net-next 11/14] can: m_can: Kconfig: convert the into menu 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
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 ` [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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).