public inbox for linux-can@vger.kernel.org
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: Torin Cooper-Bennun <torin@maxiluxsystems.com>
Cc: linux-can@vger.kernel.org
Subject: Re: [PATCH RFC can-next 3/3] can: tcan4x5x: add handle_dev_interrupts callback to ops
Date: Fri, 14 May 2021 16:10:12 +0200	[thread overview]
Message-ID: <20210514141012.3ehw4tosog3lreq4@pengutronix.de> (raw)
In-Reply-To: <20210514121946.2344901-4-torin@maxiluxsystems.com>

[-- Attachment #1: Type: text/plain, Size: 3431 bytes --]

On 14.05.2021 13:19:46, Torin Cooper-Bennun wrote:
> Though the TCAN4550's device-specific interrupts are cleared in
> tcan4x5x_clear_interrupts(), they are ignored, which may cause the m_can
> driver to stop working due to the ISR becoming disabled (the famous
> "nobody cared" message).
> 
> Signed-off-by: Torin Cooper-Bennun <torin@maxiluxsystems.com>
> ---
>  drivers/net/can/m_can/tcan4x5x-core.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/drivers/net/can/m_can/tcan4x5x-core.c b/drivers/net/can/m_can/tcan4x5x-core.c
> index 4147cecfbbd6..cee7dfff381f 100644
> --- a/drivers/net/can/m_can/tcan4x5x-core.c
> +++ b/drivers/net/can/m_can/tcan4x5x-core.c
> @@ -39,6 +39,7 @@
>  #define TCAN4X5X_CANBUS_ERR_INT_EN BIT(5)
>  #define TCAN4X5X_BUS_FAULT BIT(4)
>  #define TCAN4X5X_MCAN_INT BIT(1)
> +#define TCAN4X5X_VTWD_INT BIT(0)
>  #define TCAN4X5X_ENABLE_TCAN_INT \
>  	(TCAN4X5X_MCAN_INT | TCAN4X5X_BUS_FAULT | \
>  	 TCAN4X5X_CANBUS_ERR_INT_EN | TCAN4X5X_CANINT_INT_EN)
> @@ -190,6 +191,16 @@ static int tcan4x5x_power_enable(struct regulator *reg, int enable)
>  		return regulator_disable(reg);
>  }
>  
> +static u32 tcan4x5x_read_tcan_reg(struct m_can_classdev *cdev, int reg)
> +{
> +	struct tcan4x5x_priv *priv = cdev_to_priv(cdev);
> +	u32 val;
> +
> +	regmap_read(priv->regmap, reg, &val);
> +
> +	return val;
> +}
> +
>  static int tcan4x5x_write_tcan_reg(struct m_can_classdev *cdev,
>  				   int reg, int val)
>  {
> @@ -221,6 +232,19 @@ static int tcan4x5x_clear_interrupts(struct m_can_classdev *cdev)
>  				       TCAN4X5X_CLEAR_ALL_INT);
>  }
>  
> +static irqreturn_t tcan4x5x_handle_dev_interrupts(struct m_can_classdev *cdev)
> +{
> +	irqreturn_t ret = IRQ_NONE;
> +	int ir;
> +
> +	ir = tcan4x5x_read_tcan_reg(cdev, TCAN4X5X_INT_FLAGS);

For new code, please don't wrap the regmap_*() functions so that the
error values are ignored. I know, it's a bit annoying to always do the
"if (err) return err" dance.

As this is the interrupt handler there's not much we can do in case of
an error. In the mcp251xfd driver I print an error message and shut down
the interface. You should at least print an error message at the end of
the handle_interrupts() function.

I think it's best to have a single handle_interrupts() callback that
combines the existing clear_interrupts and this code. If you want to
save an SPI transaction and only read the TCAN4X5X_INT_FLAGS if the
M_CAN_IR is unset, pass is as 2nd parameter from the generic interrupt
handler.

> +
> +	if (ir & (TCAN4X5X_CANDOM_INT_EN | TCAN4X5X_VTWD_INT))
> +		ret = IRQ_HANDLED;
> +
> +	return ret;
> +}
> +
>  static int tcan4x5x_init(struct m_can_classdev *cdev)
>  {
>  	struct tcan4x5x_priv *tcan4x5x = cdev_to_priv(cdev);
> @@ -305,6 +329,7 @@ static struct m_can_ops tcan4x5x_ops = {
>  	.write_fifo = tcan4x5x_write_fifo,
>  	.read_fifo = tcan4x5x_read_fifo,
>  	.clear_interrupts = tcan4x5x_clear_interrupts,
> +	.handle_dev_interrupts = tcan4x5x_handle_dev_interrupts,
>  };
>  
>  static int tcan4x5x_can_probe(struct spi_device *spi)

Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  reply	other threads:[~2021-05-14 14:10 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-14 12:19 [PATCH RFC can-next 0/3] m_can: support device-specific interrupt handling Torin Cooper-Bennun
2021-05-14 12:19 ` [PATCH RFC can-next 1/3] can: m_can: add handle_dev_interrupts callback to m_can_ops Torin Cooper-Bennun
2021-05-14 12:26   ` Marc Kleine-Budde
2021-05-14 13:21     ` Torin Cooper-Bennun
2021-05-14 14:16       ` Marc Kleine-Budde
2021-05-14 12:19 ` [PATCH RFC can-next 2/3] can: m_can: m_can_isr(): handle device-specific interrupts Torin Cooper-Bennun
2021-05-14 12:19 ` [PATCH RFC can-next 3/3] can: tcan4x5x: add handle_dev_interrupts callback to ops Torin Cooper-Bennun
2021-05-14 14:10   ` Marc Kleine-Budde [this message]
2021-05-14 14:51     ` Torin Cooper-Bennun
2021-05-14 15:15       ` Marc Kleine-Budde
2021-05-14 16:27         ` Torin Cooper-Bennun
2021-05-14 12:34 ` [PATCH RFC can-next 0/3] m_can: support device-specific interrupt handling Marc Kleine-Budde
2021-05-14 13:10   ` Torin Cooper-Bennun
2021-05-14 14:12     ` Marc Kleine-Budde
2021-05-14 14:44       ` Torin Cooper-Bennun
2021-05-14 14:55         ` Marc Kleine-Budde
2021-05-14 16:46           ` Torin Cooper-Bennun
2021-05-14 14:54       ` Torin Cooper-Bennun
2021-05-14 15:21         ` Marc Kleine-Budde
2021-05-14 16:44           ` Torin Cooper-Bennun
2021-05-14 17:13             ` Marc Kleine-Budde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210514141012.3ehw4tosog3lreq4@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=linux-can@vger.kernel.org \
    --cc=torin@maxiluxsystems.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox