* [PATCH 0/7] can: m_can: various cleanups
@ 2025-10-08 19:07 Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 1/7] can: m_can: m_can_init_ram(): make static Marc Kleine-Budde
` (7 more replies)
0 siblings, 8 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
While working on the m_can driver, I created several cleanups commits, make
m_can_init_ram() static, rename hrtimer function, convert debugging and
error output to netdev_(), replace open coded register write by
m_can_write(), remove not needed error messages and sanity checks and don't
wake up hte controller during m_can_get_berr_counter() if the interface is
down.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
Marc Kleine-Budde (7):
can: m_can: m_can_init_ram(): make static
can: m_can: hrtimer_callback(): rename to m_can_polling_timer()
net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err}
can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it
can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails
can: m_can: m_can_tx_submit(): remove unneeded sanity checks
can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down
drivers/net/can/m_can/m_can.c | 116 ++++++++++++++++++++----------------------
drivers/net/can/m_can/m_can.h | 1 -
2 files changed, 56 insertions(+), 61 deletions(-)
---
base-commit: 07fdad3a93756b872da7b53647715c48d0f4a2d0
change-id: 20250923-m_can-cleanups-d0436cd311a5
Best regards,
--
Marc Kleine-Budde <mkl@pengutronix.de>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/7] can: m_can: m_can_init_ram(): make static
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 2/7] can: m_can: hrtimer_callback(): rename to m_can_polling_timer() Marc Kleine-Budde
` (6 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
Since commit eaacfeaca7ad ("can: m_can: Call the RAM init directly from
m_can_chip_config") m_can_init_ram() is not used outside of m_can.c.
Mark as static and remove the EXPORT_SYMBOL_GPL().
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 43 +++++++++++++++++++++----------------------
drivers/net/can/m_can/m_can.h | 1 -
2 files changed, 21 insertions(+), 23 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index e1d725979685..03e2c431ffab 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -1368,6 +1368,27 @@ static const struct can_bittiming_const m_can_data_bittiming_const_31X = {
.brp_inc = 1,
};
+static int m_can_init_ram(struct m_can_classdev *cdev)
+{
+ int end, i, start;
+ int err = 0;
+
+ /* initialize the entire Message RAM in use to avoid possible
+ * ECC/parity checksum errors when reading an uninitialized buffer
+ */
+ start = cdev->mcfg[MRAM_SIDF].off;
+ end = cdev->mcfg[MRAM_TXB].off +
+ cdev->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
+
+ for (i = start; i < end; i += 4) {
+ err = m_can_fifo_write_no_off(cdev, i, 0x0);
+ if (err)
+ break;
+ }
+
+ return err;
+}
+
static int m_can_set_bittiming(struct net_device *dev)
{
struct m_can_classdev *cdev = netdev_priv(dev);
@@ -2303,28 +2324,6 @@ static void m_can_of_parse_mram(struct m_can_classdev *cdev,
cdev->mcfg[MRAM_TXB].off, cdev->mcfg[MRAM_TXB].num);
}
-int m_can_init_ram(struct m_can_classdev *cdev)
-{
- int end, i, start;
- int err = 0;
-
- /* initialize the entire Message RAM in use to avoid possible
- * ECC/parity checksum errors when reading an uninitialized buffer
- */
- start = cdev->mcfg[MRAM_SIDF].off;
- end = cdev->mcfg[MRAM_TXB].off +
- cdev->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
-
- for (i = start; i < end; i += 4) {
- err = m_can_fifo_write_no_off(cdev, i, 0x0);
- if (err)
- break;
- }
-
- return err;
-}
-EXPORT_SYMBOL_GPL(m_can_init_ram);
-
int m_can_class_get_clocks(struct m_can_classdev *cdev)
{
int ret = 0;
diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h
index bd4746c63af3..46948c46d980 100644
--- a/drivers/net/can/m_can/m_can.h
+++ b/drivers/net/can/m_can/m_can.h
@@ -135,7 +135,6 @@ void m_can_class_free_dev(struct net_device *net);
int m_can_class_register(struct m_can_classdev *cdev);
void m_can_class_unregister(struct m_can_classdev *cdev);
int m_can_class_get_clocks(struct m_can_classdev *cdev);
-int m_can_init_ram(struct m_can_classdev *priv);
int m_can_check_mram_cfg(struct m_can_classdev *cdev, u32 mram_max_size);
int m_can_class_suspend(struct device *dev);
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/7] can: m_can: hrtimer_callback(): rename to m_can_polling_timer()
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 1/7] can: m_can: m_can_init_ram(): make static Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 3/7] net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err} Marc Kleine-Budde
` (5 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
The original use of struct m_can_classdev::hrtimer was to support polling
for devices without IRQ, with the timer function called hrtimer_callback().
Commit 07f25091ca02 ("can: m_can: Implement receive coalescing") uses the
hrtimer for software-supported IRQ coalescence, with the timer function
called m_can_coalescing_timer().
To improve the readability of the driver, rename hrtimer_callback() to
m_can_polling_timer(), which better describes the functionality.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 03e2c431ffab..d4aa46b236ea 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -2045,7 +2045,7 @@ static netdev_tx_t m_can_start_xmit(struct sk_buff *skb,
return ret;
}
-static enum hrtimer_restart hrtimer_callback(struct hrtimer *timer)
+static enum hrtimer_restart m_can_polling_timer(struct hrtimer *timer)
{
struct m_can_classdev *cdev = container_of(timer, struct
m_can_classdev, hrtimer);
@@ -2418,7 +2418,7 @@ int m_can_class_register(struct m_can_classdev *cdev)
if (!cdev->net->irq) {
dev_dbg(cdev->dev, "Polling enabled, initialize hrtimer");
- hrtimer_setup(&cdev->hrtimer, &hrtimer_callback, CLOCK_MONOTONIC,
+ hrtimer_setup(&cdev->hrtimer, m_can_polling_timer, CLOCK_MONOTONIC,
HRTIMER_MODE_REL_PINNED);
} else {
hrtimer_setup(&cdev->hrtimer, m_can_coalescing_timer, CLOCK_MONOTONIC,
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/7] net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err}
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 1/7] can: m_can: m_can_init_ram(): make static Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 2/7] can: m_can: hrtimer_callback(): rename to m_can_polling_timer() Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 4/7] can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it Marc Kleine-Budde
` (4 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
To ease debugging use the netdev_{dbg,info,err}() functions instead of
dev_{dbg,info,err}.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 54 +++++++++++++++++++++----------------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index d4aa46b236ea..4ca84f9a2734 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -386,8 +386,8 @@ static int m_can_cccr_update_bits(struct m_can_classdev *cdev, u32 mask, u32 val
size_t tries = 10;
if (!(mask & CCCR_INIT) && !(val_before & CCCR_INIT)) {
- dev_err(cdev->dev,
- "refusing to configure device when in normal mode\n");
+ netdev_err(cdev->net,
+ "refusing to configure device when in normal mode\n");
return -EBUSY;
}
@@ -469,7 +469,7 @@ static void m_can_coalescing_disable(struct m_can_classdev *cdev)
static inline void m_can_enable_all_interrupts(struct m_can_classdev *cdev)
{
if (!cdev->net->irq) {
- dev_dbg(cdev->dev, "Start hrtimer\n");
+ netdev_dbg(cdev->net, "Start hrtimer\n");
hrtimer_start(&cdev->hrtimer,
ms_to_ktime(HRTIMER_POLL_INTERVAL_MS),
HRTIMER_MODE_REL_PINNED);
@@ -485,7 +485,7 @@ static inline void m_can_disable_all_interrupts(struct m_can_classdev *cdev)
m_can_write(cdev, M_CAN_ILE, 0x0);
if (!cdev->net->irq) {
- dev_dbg(cdev->dev, "Stop hrtimer\n");
+ netdev_dbg(cdev->net, "Stop hrtimer\n");
hrtimer_try_to_cancel(&cdev->hrtimer);
}
}
@@ -1474,7 +1474,7 @@ static int m_can_chip_config(struct net_device *dev)
err = m_can_init_ram(cdev);
if (err) {
- dev_err(cdev->dev, "Message RAM configuration failed\n");
+ netdev_err(dev, "Message RAM configuration failed\n");
return err;
}
@@ -1704,7 +1704,7 @@ static int m_can_niso_supported(struct m_can_classdev *cdev)
/* Then clear the it again. */
ret = m_can_cccr_update_bits(cdev, CCCR_NISO, 0);
if (ret) {
- dev_err(cdev->dev, "failed to revert the NON-ISO bit in CCCR\n");
+ netdev_err(cdev->net, "failed to revert the NON-ISO bit in CCCR\n");
return ret;
}
@@ -1723,8 +1723,8 @@ static int m_can_dev_setup(struct m_can_classdev *cdev)
m_can_version = m_can_check_core_release(cdev);
/* return if unsupported version */
if (!m_can_version) {
- dev_err(cdev->dev, "Unsupported version number: %2d",
- m_can_version);
+ netdev_err(cdev->net, "Unsupported version number: %2d",
+ m_can_version);
return -EINVAL;
}
@@ -1782,8 +1782,8 @@ static int m_can_dev_setup(struct m_can_classdev *cdev)
cdev->can.ctrlmode_supported |= CAN_CTRLMODE_FD_NON_ISO;
break;
default:
- dev_err(cdev->dev, "Unsupported version number: %2d",
- cdev->version);
+ netdev_err(cdev->net, "Unsupported version number: %2d",
+ cdev->version);
return -EINVAL;
}
@@ -2277,8 +2277,8 @@ int m_can_check_mram_cfg(struct m_can_classdev *cdev, u32 mram_max_size)
total_size = cdev->mcfg[MRAM_TXB].off - cdev->mcfg[MRAM_SIDF].off +
cdev->mcfg[MRAM_TXB].num * TXB_ELEMENT_SIZE;
if (total_size > mram_max_size) {
- dev_err(cdev->dev, "Total size of mram config(%u) exceeds mram(%u)\n",
- total_size, mram_max_size);
+ netdev_err(cdev->net, "Total size of mram config(%u) exceeds mram(%u)\n",
+ total_size, mram_max_size);
return -EINVAL;
}
@@ -2313,15 +2313,15 @@ static void m_can_of_parse_mram(struct m_can_classdev *cdev,
cdev->mcfg[MRAM_TXB].num = mram_config_vals[7] &
FIELD_MAX(TXBC_NDTB_MASK);
- dev_dbg(cdev->dev,
- "sidf 0x%x %d xidf 0x%x %d rxf0 0x%x %d rxf1 0x%x %d rxb 0x%x %d txe 0x%x %d txb 0x%x %d\n",
- cdev->mcfg[MRAM_SIDF].off, cdev->mcfg[MRAM_SIDF].num,
- cdev->mcfg[MRAM_XIDF].off, cdev->mcfg[MRAM_XIDF].num,
- cdev->mcfg[MRAM_RXF0].off, cdev->mcfg[MRAM_RXF0].num,
- cdev->mcfg[MRAM_RXF1].off, cdev->mcfg[MRAM_RXF1].num,
- cdev->mcfg[MRAM_RXB].off, cdev->mcfg[MRAM_RXB].num,
- cdev->mcfg[MRAM_TXE].off, cdev->mcfg[MRAM_TXE].num,
- cdev->mcfg[MRAM_TXB].off, cdev->mcfg[MRAM_TXB].num);
+ netdev_dbg(cdev->net,
+ "sidf 0x%x %d xidf 0x%x %d rxf0 0x%x %d rxf1 0x%x %d rxb 0x%x %d txe 0x%x %d txb 0x%x %d\n",
+ cdev->mcfg[MRAM_SIDF].off, cdev->mcfg[MRAM_SIDF].num,
+ cdev->mcfg[MRAM_XIDF].off, cdev->mcfg[MRAM_XIDF].num,
+ cdev->mcfg[MRAM_RXF0].off, cdev->mcfg[MRAM_RXF0].num,
+ cdev->mcfg[MRAM_RXF1].off, cdev->mcfg[MRAM_RXF1].num,
+ cdev->mcfg[MRAM_RXB].off, cdev->mcfg[MRAM_RXB].num,
+ cdev->mcfg[MRAM_TXE].off, cdev->mcfg[MRAM_TXE].num,
+ cdev->mcfg[MRAM_TXB].off, cdev->mcfg[MRAM_TXB].num);
}
int m_can_class_get_clocks(struct m_can_classdev *cdev)
@@ -2332,7 +2332,7 @@ int m_can_class_get_clocks(struct m_can_classdev *cdev)
cdev->cclk = devm_clk_get(cdev->dev, "cclk");
if (IS_ERR(cdev->hclk) || IS_ERR(cdev->cclk)) {
- dev_err(cdev->dev, "no clock found\n");
+ netdev_err(cdev->net, "no clock found\n");
ret = -ENODEV;
}
@@ -2417,7 +2417,7 @@ int m_can_class_register(struct m_can_classdev *cdev)
}
if (!cdev->net->irq) {
- dev_dbg(cdev->dev, "Polling enabled, initialize hrtimer");
+ netdev_dbg(cdev->net, "Polling enabled, initialize hrtimer");
hrtimer_setup(&cdev->hrtimer, m_can_polling_timer, CLOCK_MONOTONIC,
HRTIMER_MODE_REL_PINNED);
} else {
@@ -2431,15 +2431,15 @@ int m_can_class_register(struct m_can_classdev *cdev)
ret = register_m_can_dev(cdev);
if (ret) {
- dev_err(cdev->dev, "registering %s failed (err=%d)\n",
- cdev->net->name, ret);
+ netdev_err(cdev->net, "registering %s failed (err=%d)\n",
+ cdev->net->name, ret);
goto rx_offload_del;
}
of_can_transceiver(cdev->net);
- dev_info(cdev->dev, "%s device registered (irq=%d, version=%d)\n",
- KBUILD_MODNAME, cdev->net->irq, cdev->version);
+ netdev_info(cdev->net, "device registered (irq=%d, version=%d)\n",
+ cdev->net->irq, cdev->version);
/* Probe finished
* Stop clocks. They will be reactivated once the M_CAN device is opened
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/7] can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
` (2 preceding siblings ...)
2025-10-08 19:07 ` [PATCH 3/7] net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err} Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 5/7] can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails Marc Kleine-Budde
` (3 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
As everywhere else in the driver, use m_can_write() instead of open coding
it.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 4ca84f9a2734..4cb4eee3602a 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -451,7 +451,7 @@ static void m_can_interrupt_enable(struct m_can_classdev *cdev, u32 interrupts)
{
if (cdev->active_interrupts == interrupts)
return;
- cdev->ops->write_reg(cdev, M_CAN_IE, interrupts);
+ m_can_write(cdev, M_CAN_IE, interrupts);
cdev->active_interrupts = interrupts;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/7] can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
` (3 preceding siblings ...)
2025-10-08 19:07 ` [PATCH 4/7] can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 6/7] can: m_can: m_can_tx_submit(): remove unneeded sanity checks Marc Kleine-Budde
` (2 subsequent siblings)
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
If devm_kzalloc() fails, it already outputs an error message. Remove the
error message from m_can_class_register() accordingly.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 4cb4eee3602a..92a4feec4174 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -2399,10 +2399,8 @@ int m_can_class_register(struct m_can_classdev *cdev)
devm_kzalloc(cdev->dev,
cdev->tx_fifo_size * sizeof(*cdev->tx_ops),
GFP_KERNEL);
- if (!cdev->tx_ops) {
- dev_err(cdev->dev, "Failed to allocate tx_ops for workqueue\n");
+ if (!cdev->tx_ops)
return -ENOMEM;
- }
}
ret = m_can_clk_start(cdev);
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 6/7] can: m_can: m_can_tx_submit(): remove unneeded sanity checks
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
` (4 preceding siblings ...)
2025-10-08 19:07 ` [PATCH 5/7] can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 7/7] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down Marc Kleine-Budde
2025-10-17 14:22 ` [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
m_can_tx_submit() is only called for peripheral devices. So remove the
sanity check.
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 5 -----
1 file changed, 5 deletions(-)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 92a4feec4174..4451ea750b74 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -1960,11 +1960,6 @@ static netdev_tx_t m_can_tx_handler(struct m_can_classdev *cdev,
static void m_can_tx_submit(struct m_can_classdev *cdev)
{
- if (cdev->version == 30)
- return;
- if (!cdev->is_peripheral)
- return;
-
m_can_write(cdev, M_CAN_TXBAR, cdev->tx_peripheral_submit);
cdev->tx_peripheral_submit = 0;
}
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/7] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
` (5 preceding siblings ...)
2025-10-08 19:07 ` [PATCH 6/7] can: m_can: m_can_tx_submit(): remove unneeded sanity checks Marc Kleine-Budde
@ 2025-10-08 19:07 ` Marc Kleine-Budde
2025-10-17 14:22 ` [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
7 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-08 19:07 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel, Marc Kleine-Budde
If the interface is down, the CAN controller might be powered down, the
clock disabled, and/or it's external reset asserted.
Don't wake up the controller to read the CAN bus error counters, if the
interface is down.
Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/m_can/m_can.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c
index 4451ea750b74..0b622248e229 100644
--- a/drivers/net/can/m_can/m_can.c
+++ b/drivers/net/can/m_can/m_can.c
@@ -790,6 +790,10 @@ static int m_can_get_berr_counter(const struct net_device *dev,
struct m_can_classdev *cdev = netdev_priv(dev);
int err;
+ /* Avoid waking up the controller if the interface is down */
+ if (!(dev->flags & IFF_UP))
+ return 0;
+
err = m_can_clk_start(cdev);
if (err)
return err;
--
2.51.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 0/7] can: m_can: various cleanups
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
` (6 preceding siblings ...)
2025-10-08 19:07 ` [PATCH 7/7] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down Marc Kleine-Budde
@ 2025-10-17 14:22 ` Marc Kleine-Budde
2025-10-21 18:56 ` Markus Schneider-Pargmann
7 siblings, 1 reply; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-17 14:22 UTC (permalink / raw)
To: Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel
[-- Attachment #1: Type: text/plain, Size: 804 bytes --]
On 08.10.2025 21:07:35, Marc Kleine-Budde wrote:
> While working on the m_can driver, I created several cleanups commits, make
> m_can_init_ram() static, rename hrtimer function, convert debugging and
> error output to netdev_(), replace open coded register write by
> m_can_write(), remove not needed error messages and sanity checks and don't
> wake up hte controller during m_can_get_berr_counter() if the interface is
> down.
>
> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Applied to linux-can-next.
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/7] can: m_can: various cleanups
2025-10-17 14:22 ` [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
@ 2025-10-21 18:56 ` Markus Schneider-Pargmann
2025-10-21 19:05 ` Marc Kleine-Budde
0 siblings, 1 reply; 11+ messages in thread
From: Markus Schneider-Pargmann @ 2025-10-21 18:56 UTC (permalink / raw)
To: Marc Kleine-Budde, Chandrasekar Ramakrishnan, Vincent Mailhol,
Markus Schneider-Pargmann
Cc: linux-can, linux-kernel, kernel
[-- Attachment #1: Type: text/plain, Size: 759 bytes --]
On Fri Oct 17, 2025 at 4:22 PM CEST, Marc Kleine-Budde wrote:
> On 08.10.2025 21:07:35, Marc Kleine-Budde wrote:
>> While working on the m_can driver, I created several cleanups commits, make
>> m_can_init_ram() static, rename hrtimer function, convert debugging and
>> error output to netdev_(), replace open coded register write by
>> m_can_write(), remove not needed error messages and sanity checks and don't
>> wake up hte controller during m_can_get_berr_counter() if the interface is
>> down.
>>
>> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
>
> Applied to linux-can-next.
>
> Marc
Sorry, a bit late due to vacation. The patches look good to me.
Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
Best
Markus
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 289 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 0/7] can: m_can: various cleanups
2025-10-21 18:56 ` Markus Schneider-Pargmann
@ 2025-10-21 19:05 ` Marc Kleine-Budde
0 siblings, 0 replies; 11+ messages in thread
From: Marc Kleine-Budde @ 2025-10-21 19:05 UTC (permalink / raw)
To: Markus Schneider-Pargmann
Cc: Chandrasekar Ramakrishnan, Vincent Mailhol, linux-can,
linux-kernel, kernel
[-- Attachment #1: Type: text/plain, Size: 1185 bytes --]
On 21.10.2025 20:56:01, Markus Schneider-Pargmann wrote:
> On Fri Oct 17, 2025 at 4:22 PM CEST, Marc Kleine-Budde wrote:
> > On 08.10.2025 21:07:35, Marc Kleine-Budde wrote:
> >> While working on the m_can driver, I created several cleanups commits, make
> >> m_can_init_ram() static, rename hrtimer function, convert debugging and
> >> error output to netdev_(), replace open coded register write by
> >> m_can_write(), remove not needed error messages and sanity checks and don't
> >> wake up hte controller during m_can_get_berr_counter() if the interface is
> >> down.
> >>
> >> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
> >
> > Applied to linux-can-next.
> >
> > Marc
>
> Sorry, a bit late due to vacation. The patches look good to me.
Hope you all had a good vacation!
> Reviewed-by: Markus Schneider-Pargmann <msp@baylibre.com>
Thanks, it's already in net-next :)
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-10-21 19:05 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-08 19:07 [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 1/7] can: m_can: m_can_init_ram(): make static Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 2/7] can: m_can: hrtimer_callback(): rename to m_can_polling_timer() Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 3/7] net: m_can: convert dev_{dbg,info,err} -> netdev_{dbg,info,err} Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 4/7] can: m_can: m_can_interrupt_enable(): use m_can_write() instead of open coding it Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 5/7] can: m_can: m_can_class_register(): remove error message in case devm_kzalloc() fails Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 6/7] can: m_can: m_can_tx_submit(): remove unneeded sanity checks Marc Kleine-Budde
2025-10-08 19:07 ` [PATCH 7/7] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down Marc Kleine-Budde
2025-10-17 14:22 ` [PATCH 0/7] can: m_can: various cleanups Marc Kleine-Budde
2025-10-21 18:56 ` Markus Schneider-Pargmann
2025-10-21 19:05 ` Marc Kleine-Budde
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).