diff --git a/arch/Kconfig b/arch/Kconfig index 7e3396308ad9d..203e4b4678847 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -1332,11 +1332,11 @@ comment "Board Settings" config BOARD_LOOPSPERMSEC int "Delay loops per millisecond" - default 5000 ---help--- Simple delay loops are used by some logic, especially during boot-up, - driver initialization. These delay loops must be calibrated for each - board in order to assure accurate timing by the delay loops. + driver initialization. These delay loops must be calibrated for each + board in order to assure accurate timing by the delay loops. You can + do so with `calib_udelay` (EXAMPLES_CALIB_UDELAY). comment "Interrupt options" diff --git a/boards/arm/phy62xx/phy6222/configs/nsh/defconfig b/boards/arm/phy62xx/phy6222/configs/nsh/defconfig index 111813de55acf..db3518b29477d 100644 --- a/boards/arm/phy62xx/phy6222/configs/nsh/defconfig +++ b/boards/arm/phy62xx/phy6222/configs/nsh/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_CHIP="phy62xx" CONFIG_ARCH_CHIP_PHY6222=y CONFIG_ARCH_CHIP_PHY62XX=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_SYMBOLS=y CONFIG_DEFAULT_SMALL=y diff --git a/boards/arm/phy62xx/phy6222/configs/phy_sbp/defconfig b/boards/arm/phy62xx/phy6222/configs/phy_sbp/defconfig index f8cdce8113f80..1924502479e6b 100644 --- a/boards/arm/phy62xx/phy6222/configs/phy_sbp/defconfig +++ b/boards/arm/phy62xx/phy6222/configs/phy_sbp/defconfig @@ -40,6 +40,7 @@ CONFIG_ARCH_CHIP="phy62xx" CONFIG_ARCH_CHIP_PHY6222=y CONFIG_ARCH_CHIP_PHY62XX=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_BUILTIN=y CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_SYMBOLS=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/full/defconfig b/boards/arm/qemu/qemu-armv7a/configs/full/defconfig index 4f4f47d17a52c..0dd94dfa4635a 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/full/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/full/defconfig @@ -21,6 +21,7 @@ CONFIG_ARM_THUMB=y CONFIG_AUDIO=y CONFIG_BATTERY_CHARGER=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILTIN=y CONFIG_CRYPTO=y CONFIG_CRYPTO_MBEDTLS=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/gdbstub/defconfig b/boards/arm/qemu/qemu-armv7a/configs/gdbstub/defconfig index dce10462504f8..a6030ebaba031 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/gdbstub/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/gdbstub/defconfig @@ -14,6 +14,7 @@ CONFIG_ARCH_CHIP_QEMU_ARM=y CONFIG_ARCH_CHIP_QEMU_CORTEXA7=y CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_ARCH_LOWVECTORS=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BOARD_MEMORY_RANGE="{0x40200000,0x48000000,0x6}" CONFIG_BUILTIN=y CONFIG_DEBUG_ASSERTIONS=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/knsh/defconfig b/boards/arm/qemu/qemu-armv7a/configs/knsh/defconfig index be2a87b2af03e..345cb577a9b7f 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/knsh/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/knsh/defconfig @@ -33,6 +33,7 @@ CONFIG_ARM_SEMIHOSTING_HOSTFS=y CONFIG_ARM_THUMB=y CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILD_KERNEL=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_FEATURES=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/knsh_smp/defconfig b/boards/arm/qemu/qemu-armv7a/configs/knsh_smp/defconfig index 653b99505e6c7..99fad1fe7d61e 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/knsh_smp/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/knsh_smp/defconfig @@ -33,6 +33,7 @@ CONFIG_ARM_SEMIHOSTING_HOSTFS=y CONFIG_ARM_THUMB=y CONFIG_BINFMT_ELF_EXECUTABLE=y CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILD_KERNEL=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_FEATURES=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/nsh/defconfig b/boards/arm/qemu/qemu-armv7a/configs/nsh/defconfig index d73a967ea17e7..4106515fb5791 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/nsh/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/nsh/defconfig @@ -18,6 +18,7 @@ CONFIG_ARCH_LOWVECTORS=y CONFIG_ARM_PSCI=y CONFIG_ARM_SEMIHOSTING_HOSTFS=y CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILTIN=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_FEATURES=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/rpproxy/defconfig b/boards/arm/qemu/qemu-armv7a/configs/rpproxy/defconfig index ca68f42822910..3330fd0277063 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/rpproxy/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/rpproxy/defconfig @@ -32,6 +32,7 @@ CONFIG_ARM_THUMB=y CONFIG_BCH=y CONFIG_BOARDCTL_POWEROFF=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILTIN=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_FEATURES=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/rpserver/defconfig b/boards/arm/qemu/qemu-armv7a/configs/rpserver/defconfig index b89c05288c111..e98650168c50d 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/rpserver/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/rpserver/defconfig @@ -32,6 +32,7 @@ CONFIG_BCH=y CONFIG_BLK_RPMSG_SERVER=y CONFIG_BOARDCTL_POWEROFF=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILTIN=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_ASSERTIONS_EXPRESSION=y diff --git a/boards/arm/qemu/qemu-armv7a/configs/smp/defconfig b/boards/arm/qemu/qemu-armv7a/configs/smp/defconfig index cea9f39857a39..19b6b39323387 100644 --- a/boards/arm/qemu/qemu-armv7a/configs/smp/defconfig +++ b/boards/arm/qemu/qemu-armv7a/configs/smp/defconfig @@ -15,6 +15,7 @@ CONFIG_ARCH_CHIP_QEMU_CORTEXA7=y CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_ARCH_LOWVECTORS=y CONFIG_ARM_PSCI=y +CONFIG_BOARD_LOOPSPERMSEC=393693 CONFIG_BUILTIN=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_FEATURES=y diff --git a/boards/arm/stm32/b-g474e-dpow1/configs/nsh/defconfig b/boards/arm/stm32/b-g474e-dpow1/configs/nsh/defconfig index 4ccc207a33436..862d0444ae97f 100644 --- a/boards/arm/stm32/b-g474e-dpow1/configs/nsh/defconfig +++ b/boards/arm/stm32/b-g474e-dpow1/configs/nsh/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_LIBM=y CONFIG_ARMV7M_MEMCPY=y +CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_SYMBOLS=y CONFIG_INIT_ENTRYPOINT="nsh_main" diff --git a/boards/arm/stm32/b-g474e-dpow1/configs/ostest/defconfig b/boards/arm/stm32/b-g474e-dpow1/configs/ostest/defconfig index f9057c23d832f..0259379cd250f 100644 --- a/boards/arm/stm32/b-g474e-dpow1/configs/ostest/defconfig +++ b/boards/arm/stm32/b-g474e-dpow1/configs/ostest/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_LIBM=y CONFIG_ARMV7M_MEMCPY=y +CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BUILTIN=y CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_SYMBOLS=y diff --git a/boards/arm/stm32/nucleo-g474re/configs/lpuartnsh/defconfig b/boards/arm/stm32/nucleo-g474re/configs/lpuartnsh/defconfig index 84c67bf02dac6..47b0057c2a0de 100644 --- a/boards/arm/stm32/nucleo-g474re/configs/lpuartnsh/defconfig +++ b/boards/arm/stm32/nucleo-g474re/configs/lpuartnsh/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_LIBM=y CONFIG_ARMV7M_MEMCPY=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_SYMBOLS=y CONFIG_INIT_ENTRYPOINT="nsh_main" diff --git a/boards/arm/stm32/nucleo-g474re/configs/nsh/defconfig b/boards/arm/stm32/nucleo-g474re/configs/nsh/defconfig index a2a5586682cbe..6eb718bf7b88b 100644 --- a/boards/arm/stm32/nucleo-g474re/configs/nsh/defconfig +++ b/boards/arm/stm32/nucleo-g474re/configs/nsh/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_LIBM=y CONFIG_ARMV7M_MEMCPY=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_SYMBOLS=y CONFIG_INIT_ENTRYPOINT="nsh_main" diff --git a/boards/arm/stm32/nucleo-g474re/configs/usbserial/defconfig b/boards/arm/stm32/nucleo-g474re/configs/usbserial/defconfig index c3227e4c57b84..aaeffaccab300 100644 --- a/boards/arm/stm32/nucleo-g474re/configs/usbserial/defconfig +++ b/boards/arm/stm32/nucleo-g474re/configs/usbserial/defconfig @@ -19,6 +19,7 @@ CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARMV7M_LIBM=y CONFIG_ARMV7M_MEMCPY=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_CDCACM=y CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_HARDFAULT_INFO=y diff --git a/boards/arm/stm32wl5/nucleo-wl55jc/configs/demo/defconfig b/boards/arm/stm32wl5/nucleo-wl55jc/configs/demo/defconfig index ba1b1efb255e6..ebb9fef7ffca4 100644 --- a/boards/arm/stm32wl5/nucleo-wl55jc/configs/demo/defconfig +++ b/boards/arm/stm32wl5/nucleo-wl55jc/configs/demo/defconfig @@ -31,6 +31,7 @@ CONFIG_ARCH_CHIP="stm32wl5" CONFIG_ARCH_CHIP_STM32WL55JC_CPU1=y CONFIG_ARCH_CHIP_STM32WL5=y CONFIG_ARCH_IRQBUTTONS=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_BUILTIN=y CONFIG_EXAMPLES_BUTTONS=y CONFIG_EXAMPLES_LEDS=y diff --git a/boards/arm/stm32wl5/nucleo-wl55jc/configs/fb/defconfig b/boards/arm/stm32wl5/nucleo-wl55jc/configs/fb/defconfig index ef22e3b6134bc..4e2a5ac5c547e 100644 --- a/boards/arm/stm32wl5/nucleo-wl55jc/configs/fb/defconfig +++ b/boards/arm/stm32wl5/nucleo-wl55jc/configs/fb/defconfig @@ -15,6 +15,7 @@ CONFIG_ARCH_CHIP="stm32wl5" CONFIG_ARCH_CHIP_STM32WL55JC_CPU1=y CONFIG_ARCH_CHIP_STM32WL5=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_BUILTIN=y CONFIG_DRIVERS_VIDEO=y CONFIG_EXAMPLES_FB=y diff --git a/boards/arm/stm32wl5/nucleo-wl55jc/configs/nsh/defconfig b/boards/arm/stm32wl5/nucleo-wl55jc/configs/nsh/defconfig index d991a697c8eb5..9318532b4a1d9 100644 --- a/boards/arm/stm32wl5/nucleo-wl55jc/configs/nsh/defconfig +++ b/boards/arm/stm32wl5/nucleo-wl55jc/configs/nsh/defconfig @@ -13,6 +13,7 @@ CONFIG_ARCH_BUTTONS=y CONFIG_ARCH_CHIP="stm32wl5" CONFIG_ARCH_CHIP_STM32WL55JC_CPU1=y CONFIG_ARCH_CHIP_STM32WL5=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_INIT_ENTRYNAME="main" CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_LPUART1_SERIAL_CONSOLE=y diff --git a/boards/arm/tms570/launchxl-tms57004/configs/nsh/defconfig b/boards/arm/tms570/launchxl-tms57004/configs/nsh/defconfig index 4725695382f10..644185000c15f 100644 --- a/boards/arm/tms570/launchxl-tms57004/configs/nsh/defconfig +++ b/boards/arm/tms570/launchxl-tms57004/configs/nsh/defconfig @@ -18,6 +18,7 @@ CONFIG_ARCH_IRQBUTTONS=y CONFIG_ARCH_LOWVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_ARM_TOOLCHAIN_BUILDROOT=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_BUILTIN=y CONFIG_FAT_LCNAMES=y CONFIG_FAT_LFN=y diff --git a/boards/arm/tms570/tms570ls31x-usb-kit/configs/nsh/defconfig b/boards/arm/tms570/tms570ls31x-usb-kit/configs/nsh/defconfig index 0bb37c363e52d..41b021a1ab0a0 100644 --- a/boards/arm/tms570/tms570ls31x-usb-kit/configs/nsh/defconfig +++ b/boards/arm/tms570/tms570ls31x-usb-kit/configs/nsh/defconfig @@ -17,6 +17,7 @@ CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_ARCH_IRQBUTTONS=y CONFIG_ARCH_LOWVECTORS=y CONFIG_ARCH_STACKDUMP=y +CONFIG_BOARD_LOOPSPERMSEC=0 CONFIG_BUILTIN=y CONFIG_ELF=y CONFIG_FAT_LCNAMES=y diff --git a/boards/arm64/a527/avaota-a1/configs/nsh/defconfig b/boards/arm64/a527/avaota-a1/configs/nsh/defconfig index fba87e794f471..a6f60966c324e 100644 --- a/boards/arm64/a527/avaota-a1/configs/nsh/defconfig +++ b/boards/arm64/a527/avaota-a1/configs/nsh/defconfig @@ -43,6 +43,7 @@ CONFIG_ARCH_USE_MMU=y CONFIG_ARM64_STRING_FUNCTION=y CONFIG_BOARDCTL_ROMDISK=y CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=201847 CONFIG_BUILD_KERNEL=y CONFIG_DEBUG_ASSERTIONS=y CONFIG_DEBUG_ASSERTIONS_EXPRESSION=y diff --git a/cmake/nuttx_kconfig.cmake b/cmake/nuttx_kconfig.cmake index cc55acc9f86bb..f58c135c6b630 100644 --- a/cmake/nuttx_kconfig.cmake +++ b/cmake/nuttx_kconfig.cmake @@ -80,7 +80,9 @@ function(nuttx_export_kconfig kconfigfile) string(REPLACE "${Name}=" "" Value ${NameAndValue}) # remove extra quotes - string(REPLACE "\"" "" Value ${Value}) + if(Value) + string(REPLACE "\"" "" Value ${Value}) + endif() decode_semicolon(Value) # Set the variable set(${Name} diff --git a/drivers/timers/arch_alarm.c b/drivers/timers/arch_alarm.c index 98a49a8e2d417..926ab0c83b654 100644 --- a/drivers/timers/arch_alarm.c +++ b/drivers/timers/arch_alarm.c @@ -36,6 +36,11 @@ * Pre-processor Definitions ****************************************************************************/ +/* If no value is given, we proceed with 0 since a one-shot timer is used for + * accurate delays. A runtime DEBUGASSERT catches the case where the one-shot + * timer lower-half isn't registered in time. + */ + #ifndef CONFIG_BOARD_LOOPSPERMSEC # define CONFIG_BOARD_LOOPSPERMSEC 0 #endif diff --git a/drivers/timers/arch_timer.c b/drivers/timers/arch_timer.c index da4bf6a486dac..ca7accea803db 100644 --- a/drivers/timers/arch_timer.c +++ b/drivers/timers/arch_timer.c @@ -36,6 +36,11 @@ * Pre-processor Definitions ****************************************************************************/ +/* If no value is given, we proceed with 0 since a timer is used for accurate + * delays. A runtime DEBUGASSERT catches the case where the timer lower-half + * isn't registered in time. + */ + #ifndef CONFIG_BOARD_LOOPSPERMSEC # define CONFIG_BOARD_LOOPSPERMSEC 0 #endif diff --git a/sched/clock/CMakeLists.txt b/sched/clock/CMakeLists.txt index d7740ca4777fa..60bc15f5c28d8 100644 --- a/sched/clock/CMakeLists.txt +++ b/sched/clock/CMakeLists.txt @@ -37,7 +37,7 @@ set(SRCS # don't want the weak references to conflict. if(NOT CONFIG_TIMER_ARCH AND NOT CONFIG_ALARM_ARCH) - list(APPEND SRCS delay.c) + list(APPEND SRCS clock_delay.c) endif() if(CONFIG_CLOCK_TIMEKEEPING) diff --git a/sched/clock/Make.defs b/sched/clock/Make.defs index 659abd6ea185d..5d4b9187c5de6 100644 --- a/sched/clock/Make.defs +++ b/sched/clock/Make.defs @@ -30,7 +30,7 @@ CSRCS += clock_perf.c clock_realtime2absticks.c clock_getres.c ifneq ($(CONFIG_TIMER_ARCH),y) ifneq ($(CONFIG_ALARM_ARCH),y) - CSRCS += delay.c + CSRCS += clock_delay.c endif endif diff --git a/sched/clock/delay.c b/sched/clock/clock_delay.c similarity index 88% rename from sched/clock/delay.c rename to sched/clock/clock_delay.c index bf65177307f2a..e950b56bee079 100644 --- a/sched/clock/delay.c +++ b/sched/clock/clock_delay.c @@ -1,5 +1,5 @@ /**************************************************************************** - * sched/clock/delay.c + * sched/clock/clock_delay.c * * SPDX-License-Identifier: Apache-2.0 * @@ -56,6 +56,17 @@ * Pre-processor Definitions ****************************************************************************/ +#if defined(CONFIG_BOARD_LOOPSPERMSEC) && CONFIG_BOARD_LOOPSPERMSEC == 0 +#warning \ + "CONFIG_BOARD_LOOPSPERMSEC is set to 0 even though this architecture does" \ + "not rely on timer or alarm drivers for correct timings. up_udelay() and " \ + "similar delay functions will not work correctly. Please determine an " \ + "appropriate value for CONFIG_BOARD_LOOPSPERMSEC using the calib_udelay " \ + "application in nuttx-apps. If this configuration is a NuttX provided " \ + "configuration, it would be appreciated if you submit a patch with the " \ + "new value to apache/nuttx." +#endif + #define CONFIG_BOARD_LOOPSPER100USEC ((CONFIG_BOARD_LOOPSPERMSEC+5)/10) #define CONFIG_BOARD_LOOPSPER10USEC ((CONFIG_BOARD_LOOPSPERMSEC+50)/100) #define CONFIG_BOARD_LOOPSPERUSEC ((CONFIG_BOARD_LOOPSPERMSEC+500)/1000)