@@ -142,6 +142,8 @@ struct can_renesas_ra_global_cfg {
142
142
const struct device * ram_clk ;
143
143
const struct clock_control_ra_subsys_cfg op_subsys ;
144
144
const struct clock_control_ra_subsys_cfg ram_subsys ;
145
+ const unsigned int dll_min_freq ;
146
+ const unsigned int dll_max_freq ;
145
147
};
146
148
147
149
struct can_renesas_ra_filter {
@@ -902,19 +904,33 @@ static inline int can_renesas_module_clock_init(const struct device *dev)
902
904
return ret ;
903
905
}
904
906
907
+ if (dll_rate < global_cfg -> dll_min_freq || dll_rate > global_cfg -> dll_max_freq ) {
908
+ LOG_ERR ("%s frequency is out of supported range: %d < %s freq < %d" ,
909
+ cfg -> dll_clk -> name , global_cfg -> dll_min_freq , cfg -> dll_clk -> name ,
910
+ global_cfg -> dll_max_freq );
911
+ return - ENOTSUP ;
912
+ }
913
+
905
914
/* Clock constraint: refer to '34.1.2 Clock restriction' - RA8M1 MCU group HWM */
906
915
/*
907
916
* Operation clock rate must be at least 40Mhz in case CANFD mode.
908
917
* Otherwise, it must be at least 32MHz.
909
918
*/
910
- if (IS_ENABLED (CONFIG_CAN_FD_MODE ) ? op_rate < 40000000 : op_rate < 32000000 ) {
919
+ if (IS_ENABLED (CONFIG_CAN_FD_MODE ) ? op_rate < MHZ (40 ) : op_rate < MHZ (32 )) {
920
+ LOG_ERR ("%s frequency should be at least %d" , global_cfg -> op_clk -> name ,
921
+ IS_ENABLED (CONFIG_CAN_FD_MODE ) ? MHZ (40 ) : MHZ (32 ));
911
922
return - ENOTSUP ;
912
923
}
924
+
913
925
/*
914
926
* (RAM clock rate / 2) >= DLL rate
915
927
* (CANFD operation clock rate) >= DLL rate
916
928
*/
917
929
if ((ram_rate / 2 ) < dll_rate || op_rate < dll_rate ) {
930
+ LOG_ERR ("%s frequency should be less than half of %s and %s frequency should "
931
+ "be less than %s" ,
932
+ global_cfg -> ram_clk -> name , cfg -> dll_clk -> name , global_cfg -> op_clk -> name ,
933
+ cfg -> dll_clk -> name );
918
934
return - ENOTSUP ;
919
935
}
920
936
@@ -998,12 +1014,10 @@ static DEVICE_API(can, can_renesas_ra_driver_api) = {
998
1014
R_ICU->IELSR_b[VECTOR_NUMBER_CAN_GLERR].IELS = ELC_EVENT_CAN_GLERR; \
999
1015
R_ICU->IELSR_b[VECTOR_NUMBER_CAN_RXF].IELS = ELC_EVENT_CAN_RXF; \
1000
1016
IRQ_CONNECT(VECTOR_NUMBER_CAN_GLERR, \
1001
- DT_IRQ_BY_NAME(DT_COMPAT_GET_ANY_STATUS_OKAY(renesas_ra_canfd_global), glerr, \
1002
- priority), \
1017
+ DT_IRQ_BY_NAME(DT_INST(0, renesas_ra_canfd_global), glerr, priority), \
1003
1018
canfd_error_isr, NULL, 0); \
1004
1019
IRQ_CONNECT(VECTOR_NUMBER_CAN_RXF, \
1005
- DT_IRQ_BY_NAME(DT_COMPAT_GET_ANY_STATUS_OKAY(renesas_ra_canfd_global), rxf, \
1006
- priority), \
1020
+ DT_IRQ_BY_NAME(DT_INST(0, renesas_ra_canfd_global), rxf, priority), \
1007
1021
canfd_rx_fifo_isr, NULL, 0); \
1008
1022
irq_enable(VECTOR_NUMBER_CAN_RXF); \
1009
1023
irq_enable(VECTOR_NUMBER_CAN_GLERR);
@@ -1012,30 +1026,26 @@ static canfd_global_cfg_t g_canfd_global_cfg = {
1012
1026
.global_interrupts = CANFD_CFG_GLERR_IRQ ,
1013
1027
.global_config = CANFD_CFG_GLOBAL ,
1014
1028
.rx_mb_config = CANFD_CFG_RXMB ,
1015
- .global_err_ipl = DT_IRQ_BY_NAME (DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ),
1016
- glerr , priority ),
1017
- .rx_fifo_ipl = DT_IRQ_BY_NAME (DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), rxf ,
1018
- priority ),
1029
+ .global_err_ipl = DT_IRQ_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), glerr , priority ),
1030
+ .rx_fifo_ipl = DT_IRQ_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), rxf , priority ),
1019
1031
.rx_fifo_config = CANFD_CFG_RXFIFO ,
1020
1032
.common_fifo_config = CANFD_CFG_COMMONFIFO ,
1021
1033
};
1022
1034
1023
1035
static const struct can_renesas_ra_global_cfg g_can_renesas_ra_global_cfg = {
1024
- .op_clk = DEVICE_DT_GET (DT_CLOCKS_CTLR_BY_NAME (
1025
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), opclk )),
1026
- .ram_clk = DEVICE_DT_GET (DT_CLOCKS_CTLR_BY_NAME (
1027
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), ramclk )),
1028
- .op_subsys = {.mstp = DT_CLOCKS_CELL_BY_NAME (
1029
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), opclk , mstp ),
1030
- .stop_bit = DT_CLOCKS_CELL_BY_NAME (
1031
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), opclk ,
1032
- stop_bit )},
1033
- .ram_subsys = {.mstp = DT_CLOCKS_CELL_BY_NAME (
1034
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), ramclk ,
1035
- mstp ),
1036
- .stop_bit = DT_CLOCKS_CELL_BY_NAME (
1037
- DT_COMPAT_GET_ANY_STATUS_OKAY (renesas_ra_canfd_global ), ramclk ,
1038
- stop_bit )},
1036
+ .op_clk = DEVICE_DT_GET (DT_CLOCKS_CTLR_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), opclk )),
1037
+ .ram_clk =
1038
+ DEVICE_DT_GET (DT_CLOCKS_CTLR_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), ramclk )),
1039
+ .op_subsys = {.mstp = DT_CLOCKS_CELL_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), opclk ,
1040
+ mstp ),
1041
+ .stop_bit = DT_CLOCKS_CELL_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), opclk ,
1042
+ stop_bit )},
1043
+ .ram_subsys = {.mstp = DT_CLOCKS_CELL_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ), ramclk ,
1044
+ mstp ),
1045
+ .stop_bit = DT_CLOCKS_CELL_BY_NAME (DT_INST (0 , renesas_ra_canfd_global ),
1046
+ ramclk , stop_bit )},
1047
+ .dll_min_freq = DT_PROP_OR (DT_INST (0 , renesas_ra_canfd_global ), dll_min_freq , 0 ),
1048
+ .dll_max_freq = DT_PROP_OR (DT_INST (0 , renesas_ra_canfd_global ), dll_max_freq , UINT_MAX ),
1039
1049
};
1040
1050
1041
1051
static int can_renesas_ra_global_init (const struct device * dev )
0 commit comments