Re: [PATCH v7 11/18] can: rcar_canfd: Add {nom,data}_bittiming variables to struct rcar_canfd_hw_info

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

 



On 26/03/2025 at 21:19, Biju Das wrote:
> Both R-Car Gen4 and R-Car Gen3 have different bit timing parameters
> Add {nom,data}_bittiming variables to struct rcar_canfd_hw_info to
> handle this difference.
> 
> Since the mask used in the macros are max value - 1, replace that
> as well.
> 
> Reviewed-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx>
> Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>

Reviewed-by: Vincent Mailhol <mailhol.vincent@xxxxxxxxxx>

> ---
> v6->v7:
>  * Collected tag.
>  * Updated 'aswell'->'as well' in commit description.
> v6:
>  * New patch.
> ---
>  drivers/net/can/rcar/rcar_canfd.c | 53 ++++++++++++++++++++++++-------
>  1 file changed, 42 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
> index c37fb85fe478..7e7f3c3307ae 100644
> --- a/drivers/net/can/rcar/rcar_canfd.c
> +++ b/drivers/net/can/rcar/rcar_canfd.c
> @@ -111,13 +111,13 @@
>  
>  /* RSCFDnCFDCmNCFG - CAN FD only */
>  #define RCANFD_NCFG_NTSEG2(gpriv, x) \
> -	(((x) & reg_gen4(gpriv, 0x7f, 0x1f)) << reg_gen4(gpriv, 25, 24))
> +	(((x) & ((gpriv)->info->nom_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 25, 24))
>  
>  #define RCANFD_NCFG_NTSEG1(gpriv, x) \
> -	(((x) & reg_gen4(gpriv, 0xff, 0x7f)) << reg_gen4(gpriv, 17, 16))
> +	(((x) & ((gpriv)->info->nom_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 17, 16))
>  
>  #define RCANFD_NCFG_NSJW(gpriv, x) \
> -	(((x) & reg_gen4(gpriv, 0x7f, 0x1f)) << reg_gen4(gpriv, 10, 11))
> +	(((x) & ((gpriv)->info->nom_bittiming->sjw_max - 1)) << reg_gen4(gpriv, 10, 11))
>  
>  #define RCANFD_NCFG_NBRP(x)		(((x) & 0x3ff) << 0)
>  
> @@ -179,13 +179,13 @@
>  #define RCANFD_CERFL_ERR(x)		((x) & (0x7fff)) /* above bits 14:0 */
>  
>  /* RSCFDnCFDCmDCFG */
> -#define RCANFD_DCFG_DSJW(gpriv, x)	(((x) & reg_gen4(gpriv, 0xf, 0x7)) << 24)
> +#define RCANFD_DCFG_DSJW(gpriv, x)	(((x) & ((gpriv)->info->data_bittiming->sjw_max - 1)) << 24)
>  
>  #define RCANFD_DCFG_DTSEG2(gpriv, x) \
> -	(((x) & reg_gen4(gpriv, 0x0f, 0x7)) << reg_gen4(gpriv, 16, 20))
> +	(((x) & ((gpriv)->info->data_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 16, 20))
>  
>  #define RCANFD_DCFG_DTSEG1(gpriv, x) \
> -	(((x) & reg_gen4(gpriv, 0x1f, 0xf)) << reg_gen4(gpriv, 8, 16))
> +	(((x) & ((gpriv)->info->data_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 8, 16))
>  
>  #define RCANFD_DCFG_DBRP(x)		(((x) & 0xff) << 0)
>  
> @@ -504,6 +504,8 @@
>  struct rcar_canfd_global;
>  
>  struct rcar_canfd_hw_info {
> +	const struct can_bittiming_const *nom_bittiming;
> +	const struct can_bittiming_const *data_bittiming;
>  	u16 num_supported_rules;
>  	u8 rnc_stride;
>  	u8 rnc_field_width;
> @@ -546,7 +548,7 @@ struct rcar_canfd_global {
>  };
>  
>  /* CAN FD mode nominal rate constants */
> -static const struct can_bittiming_const rcar_canfd_nom_bittiming_const = {
> +static const struct can_bittiming_const rcar_canfd_gen3_nom_bittiming_const = {
>  	.name = RCANFD_DRV_NAME,
>  	.tseg1_min = 2,
>  	.tseg1_max = 128,
> @@ -558,8 +560,20 @@ static const struct can_bittiming_const rcar_canfd_nom_bittiming_const = {
>  	.brp_inc = 1,
>  };
>  
> +static const struct can_bittiming_const rcar_canfd_gen4_nom_bittiming_const = {
> +	.name = RCANFD_DRV_NAME,
> +	.tseg1_min = 2,
> +	.tseg1_max = 256,
> +	.tseg2_min = 2,
> +	.tseg2_max = 128,
> +	.sjw_max = 128,
> +	.brp_min = 1,
> +	.brp_max = 1024,
> +	.brp_inc = 1,
> +};
> +
>  /* CAN FD mode data rate constants */
> -static const struct can_bittiming_const rcar_canfd_data_bittiming_const = {
> +static const struct can_bittiming_const rcar_canfd_gen3_data_bittiming_const = {
>  	.name = RCANFD_DRV_NAME,
>  	.tseg1_min = 2,
>  	.tseg1_max = 16,
> @@ -571,6 +585,18 @@ static const struct can_bittiming_const rcar_canfd_data_bittiming_const = {
>  	.brp_inc = 1,
>  };
>  
> +static const struct can_bittiming_const rcar_canfd_gen4_data_bittiming_const = {
> +	.name = RCANFD_DRV_NAME,
> +	.tseg1_min = 2,
> +	.tseg1_max = 32,
> +	.tseg2_min = 2,
> +	.tseg2_max = 16,
> +	.sjw_max = 16,
> +	.brp_min = 1,
> +	.brp_max = 256,
> +	.brp_inc = 1,
> +};
> +
>  /* Classical CAN mode bitrate constants */
>  static const struct can_bittiming_const rcar_canfd_bittiming_const = {
>  	.name = RCANFD_DRV_NAME,
> @@ -585,6 +611,8 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
>  };
>  
>  static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
> +	.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
> +	.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
>  	.num_supported_rules = 256,
>  	.rnc_stride = 4,
>  	.rnc_field_width = 8,
> @@ -596,6 +624,8 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
>  };
>  
>  static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
> +	.nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
> +	.data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
>  	.num_supported_rules = 512,
>  	.rnc_stride = 2,
>  	.rnc_field_width = 16,
> @@ -607,6 +637,8 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
>  };
>  
>  static const struct rcar_canfd_hw_info rzg2l_hw_info = {
> +	.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
> +	.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
>  	.num_supported_rules = 256,
>  	.rnc_stride = 4,
>  	.rnc_field_width = 8,
> @@ -1795,9 +1827,8 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
>  	}
>  
>  	if (gpriv->fdmode) {
> -		priv->can.bittiming_const = &rcar_canfd_nom_bittiming_const;
> -		priv->can.data_bittiming_const =
> -			&rcar_canfd_data_bittiming_const;
> +		priv->can.bittiming_const = gpriv->info->nom_bittiming;
> +		priv->can.data_bittiming_const = gpriv->info->data_bittiming;
>  
>  		/* Controller starts in CAN FD only mode */
>  		err = can_set_static_ctrlmode(ndev, CAN_CTRLMODE_FD);

-- 
Yours sincerely,
Vincent Mailhol





[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux