@@ -88,7 +88,7 @@
/* RSCFDnCFDGAFLCFG0 / RSCFDnGAFLCFG0 */
#define RCANFD_GAFLCFG_SETRNC(gpriv, n, x) \
- (((x) & reg_gen4(gpriv, 0x1ff, 0xff)) << \
+ (((x) & ((gpriv)->info->num_supported_rules - 1)) << \
(reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8)))
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
@@ -504,6 +504,7 @@
struct rcar_canfd_global;
struct rcar_canfd_hw_info {
+ u16 num_supported_rules;
u8 max_channels;
u8 postdiv;
/* hardware features */
@@ -580,18 +581,21 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
};
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
+ .num_supported_rules = 256,
.max_channels = 2,
.postdiv = 2,
.shared_global_irqs = 1,
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
+ .num_supported_rules = 512,
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
+ .num_supported_rules = 256,
.max_channels = 2,
.postdiv = 1,
.multi_channel_irqs = 1,