RE: [PATCH v2] can: m_can: is_lec_err(): clean up LEC error handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Marc Kleine-Budde [mailto:mkl@xxxxxxxxxxxxxx]
> Sent: 20 October 2022 02:46
> To: linux-can@xxxxxxxxxxxxxxx
> Cc: Vivek Yadav <vivek.2311@xxxxxxxxxxx>; Chandrasekar Ramakrishnan
> <rcsekar@xxxxxxxxxxx>; Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> Subject: [PATCH v2] can: m_can: is_lec_err(): clean up LEC error handling
> 
> The PSR register contains among other the error for the CAN arbitration
> phase (LEC bits) and CAN data phase (DLEC bits).
> 
> Prepare is_lec_err() to be called with the (D)LEC value only instead of
the
> whole PSR register. While there rename LEC_UNUSED to LEC_NO_CHANGE
> to match the latest M_CAN reference manual.
> 
Looks good to me, 
Reviewed-by: Chandrasekar Ramakrishnan <rcsekar@xxxxxxxxxxx>

> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> ---
> changes since RFC: https://lore.kernel.org/all/20221012074205.691384-1-
> mkl@xxxxxxxxxxxxxx
> - add proper patch description
> 
>  drivers/net/can/m_can/m_can.c | 15 ++++++++-------
> drivers/net/can/m_can/m_can.h |  2 +-
>  2 files changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/can/m_can/m_can.c
> b/drivers/net/can/m_can/m_can.c index dcb582563d5e..ebdd3c164d7b
> 100644
> --- a/drivers/net/can/m_can/m_can.c
> +++ b/drivers/net/can/m_can/m_can.c
> @@ -816,11 +816,9 @@ static void m_can_handle_other_err(struct
> net_device *dev, u32 irqstatus)
>  		netdev_err(dev, "Message RAM access failure occurred\n");
> }
> 
> -static inline bool is_lec_err(u32 psr)
> +static inline bool is_lec_err(u8 lec)
>  {
> -	psr &= LEC_UNUSED;
> -
> -	return psr && (psr != LEC_UNUSED);
> +	return lec != LEC_NO_ERROR && lec != LEC_NO_CHANGE;
>  }
> 
>  static inline bool m_can_is_protocol_err(u32 irqstatus) @@ -875,9 +873,12
> @@ static int m_can_handle_bus_errors(struct net_device *dev, u32
> irqstatus,
>  		work_done += m_can_handle_lost_msg(dev);
> 
>  	/* handle lec errors on the bus */
> -	if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
> -	    is_lec_err(psr))
> -		work_done += m_can_handle_lec_err(dev, psr &
> LEC_UNUSED);
> +	if (cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) {
> +		u8 lec = FIELD_GET(PSR_LEC_MASK, psr);
> +
> +		if (is_lec_err(lec))
> +			work_done += m_can_handle_lec_err(dev, lec);
> +	}
> 
>  	/* handle protocol errors in arbitration phase */
>  	if ((cdev->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING) &&
> diff --git a/drivers/net/can/m_can/m_can.h
> b/drivers/net/can/m_can/m_can.h index 4c0267f9f297..52563c048732
> 100644
> --- a/drivers/net/can/m_can/m_can.h
> +++ b/drivers/net/can/m_can/m_can.h
> @@ -38,7 +38,7 @@ enum m_can_lec_type {
>  	LEC_BIT1_ERROR,
>  	LEC_BIT0_ERROR,
>  	LEC_CRC_ERROR,
> -	LEC_UNUSED,
> +	LEC_NO_CHANGE,
>  };
> 
>  enum m_can_mram_cfg {
> --
> 2.35.1
> 





[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux