diff --git a/boards/Kconfig b/boards/Kconfig index ce96f32611a..9e9b57bf342 100644 --- a/boards/Kconfig +++ b/boards/Kconfig @@ -37,6 +37,13 @@ config QEMU_ICOUNT execute one instruction every 2^N ns of virtual time. This will give deterministic execution times from the guest point of view. +config QEMU_ICOUNT_SHIFT + int "QEMU icount shift value" + depends on QEMU_ICOUNT + help + The virtual CPU will execute one instruction every 2^N nanoseconds + of virtual time, where N is the value provided here. + # There might not be any board options, hence the optional source osource "$(BOARD_DIR)/Kconfig" endmenu diff --git a/boards/arc/qemu_arc/qemu_arc_em_defconfig b/boards/arc/qemu_arc/qemu_arc_em_defconfig index e7486dd3785..11fa2d26539 100644 --- a/boards/arc/qemu_arc/qemu_arc_em_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_em_defconfig @@ -11,3 +11,4 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_UART_NS16550=y +CONFIG_QEMU_ICOUNT=n diff --git a/boards/arc/qemu_arc/qemu_arc_hs_defconfig b/boards/arc/qemu_arc/qemu_arc_hs_defconfig index 99a3862a482..a0971d2591f 100644 --- a/boards/arc/qemu_arc/qemu_arc_hs_defconfig +++ b/boards/arc/qemu_arc/qemu_arc_hs_defconfig @@ -11,3 +11,4 @@ CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y CONFIG_SERIAL=y CONFIG_UART_NS16550=y +CONFIG_QEMU_ICOUNT=n diff --git a/boards/arm/mps2_an385/board.cmake b/boards/arm/mps2_an385/board.cmake index 2ad29676e95..0ae7ec0e7a2 100644 --- a/boards/arm/mps2_an385/board.cmake +++ b/boards/arm/mps2_an385/board.cmake @@ -10,7 +10,4 @@ set(QEMU_FLAGS_${ARCH} -vga none ) -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=7,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/arm/mps2_an385/mps2_an385_defconfig b/boards/arm/mps2_an385/mps2_an385_defconfig index 5f8aabbcc4b..55f4b126b75 100644 --- a/boards/arm/mps2_an385/mps2_an385_defconfig +++ b/boards/arm/mps2_an385/mps2_an385_defconfig @@ -9,6 +9,7 @@ CONFIG_SOC_MPS2_AN385=y CONFIG_BOARD_MPS2_AN385=y CONFIG_CORTEX_M_SYSTICK=y CONFIG_RUNTIME_NMI=y +CONFIG_QEMU_ICOUNT_SHIFT=7 # GPIOs CONFIG_GPIO=y diff --git a/boards/arm/mps2_an521/board.cmake b/boards/arm/mps2_an521/board.cmake index a2871264699..758437ab8ce 100644 --- a/boards/arm/mps2_an521/board.cmake +++ b/boards/arm/mps2_an521/board.cmake @@ -11,8 +11,4 @@ set(QEMU_FLAGS_${ARCH} -m 16 -vga none ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=7,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/arm/mps2_an521/mps2_an521_defconfig b/boards/arm/mps2_an521/mps2_an521_defconfig index 1e8408bd7bd..9e167b94e4f 100644 --- a/boards/arm/mps2_an521/mps2_an521_defconfig +++ b/boards/arm/mps2_an521/mps2_an521_defconfig @@ -11,6 +11,7 @@ CONFIG_CORTEX_M_SYSTICK=y CONFIG_RUNTIME_NMI=y CONFIG_ARM_TRUSTZONE_M=y CONFIG_ARM_MPU=y +CONFIG_QEMU_ICOUNT_SHIFT=7 # GPIOs CONFIG_GPIO=y diff --git a/boards/arm/mps2_an521/mps2_an521_nonsecure_defconfig b/boards/arm/mps2_an521/mps2_an521_nonsecure_defconfig index 1ebb6f99fff..691eea92e12 100644 --- a/boards/arm/mps2_an521/mps2_an521_nonsecure_defconfig +++ b/boards/arm/mps2_an521/mps2_an521_nonsecure_defconfig @@ -12,6 +12,7 @@ CONFIG_CORTEX_M_SYSTICK=y CONFIG_RUNTIME_NMI=y CONFIG_TRUSTED_EXECUTION_NONSECURE=y CONFIG_ARM_MPU=y +CONFIG_QEMU_ICOUNT_SHIFT=7 # GPIOs CONFIG_GPIO=y diff --git a/boards/arm/qemu_cortex_a53/board.cmake b/boards/arm/qemu_cortex_a53/board.cmake index 87e760189ef..ef2d0947137 100644 --- a/boards/arm/qemu_cortex_a53/board.cmake +++ b/boards/arm/qemu_cortex_a53/board.cmake @@ -10,8 +10,4 @@ set(QEMU_FLAGS_${ARCH} -nographic -machine virt ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=4,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/arm/qemu_cortex_a53/qemu_cortex_a53_defconfig b/boards/arm/qemu_cortex_a53/qemu_cortex_a53_defconfig index 564ca87c73b..260024f2aaa 100644 --- a/boards/arm/qemu_cortex_a53/qemu_cortex_a53_defconfig +++ b/boards/arm/qemu_cortex_a53/qemu_cortex_a53_defconfig @@ -2,6 +2,7 @@ CONFIG_SOC_QEMU_CORTEX_A53=y CONFIG_BOARD_QEMU_CORTEX_A53=y CONFIG_ARM_ARCH_TIMER=y CONFIG_XIP=n +CONFIG_QEMU_ICOUNT_SHIFT=4 # QEMU settings CONFIG_SRAM_BASE_ADDRESS=0x40000000 diff --git a/boards/arm/qemu_cortex_m0/board.cmake b/boards/arm/qemu_cortex_m0/board.cmake index 974d4b69858..8543b74f796 100644 --- a/boards/arm/qemu_cortex_m0/board.cmake +++ b/boards/arm/qemu_cortex_m0/board.cmake @@ -12,8 +12,4 @@ set(QEMU_FLAGS_${ARCH} -nographic -vga none ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/arm/qemu_cortex_m0/qemu_cortex_m0_defconfig b/boards/arm/qemu_cortex_m0/qemu_cortex_m0_defconfig index 269d195c6aa..528560cc01e 100644 --- a/boards/arm/qemu_cortex_m0/qemu_cortex_m0_defconfig +++ b/boards/arm/qemu_cortex_m0/qemu_cortex_m0_defconfig @@ -3,6 +3,7 @@ CONFIG_SOC_SERIES_NRF51X=y CONFIG_SOC_NRF51822_QFAA=y CONFIG_BOARD_QEMU_CORTEX_M0=y +CONFIG_QEMU_ICOUNT_SHIFT=6 # enable GPIO CONFIG_GPIO=y diff --git a/boards/arm/qemu_cortex_m3/board.cmake b/boards/arm/qemu_cortex_m3/board.cmake index 2e24740e033..fcb7956d10a 100644 --- a/boards/arm/qemu_cortex_m3/board.cmake +++ b/boards/arm/qemu_cortex_m3/board.cmake @@ -9,8 +9,4 @@ set(QEMU_FLAGS_${ARCH} -nographic -vga none ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/arm/qemu_cortex_m3/qemu_cortex_m3_defconfig b/boards/arm/qemu_cortex_m3/qemu_cortex_m3_defconfig index 27481c6cb34..fffd328a99c 100644 --- a/boards/arm/qemu_cortex_m3/qemu_cortex_m3_defconfig +++ b/boards/arm/qemu_cortex_m3/qemu_cortex_m3_defconfig @@ -9,3 +9,4 @@ CONFIG_SERIAL=y CONFIG_CORTEX_M_SYSTICK=y CONFIG_UART_STELLARIS=y CONFIG_SCHED_MULTIQ=y +CONFIG_QEMU_ICOUNT_SHIFT=6 diff --git a/boards/arm/qemu_cortex_r5/board.cmake b/boards/arm/qemu_cortex_r5/board.cmake index 74c2d91f1a4..92ead46b5ca 100644 --- a/boards/arm/qemu_cortex_r5/board.cmake +++ b/boards/arm/qemu_cortex_r5/board.cmake @@ -12,10 +12,6 @@ set(QEMU_FLAGS_${ARCH} -dtb ${ZEPHYR_BASE}/boards/${ARCH}/${BOARD}/fdt-single_arch-zcu102-arm.dtb ) -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=3,align=off,sleep=off -rtc clock=vm) -endif() - set(QEMU_KERNEL_OPTION "-device;loader,file=\$,cpu-num=4" "-device;loader,addr=0xff5e023c,data=0x80008fde,data-len=4" diff --git a/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig b/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig index f7efc7296ed..d49b8cad058 100644 --- a/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig +++ b/boards/arm/qemu_cortex_r5/qemu_cortex_r5_defconfig @@ -1,6 +1,7 @@ CONFIG_SOC_XILINX_ZYNQMP_RPU=y CONFIG_BOARD_QEMU_CORTEX_R5=y CONFIG_XIP=n +CONFIG_QEMU_ICOUNT_SHIFT=3 CONFIG_ISR_STACK_SIZE=512 CONFIG_THREAD_STACK_INFO=y diff --git a/boards/nios2/qemu_nios2/qemu_nios2_defconfig b/boards/nios2/qemu_nios2/qemu_nios2_defconfig index 54d9f3c0d53..44325b55ade 100644 --- a/boards/nios2/qemu_nios2/qemu_nios2_defconfig +++ b/boards/nios2/qemu_nios2/qemu_nios2_defconfig @@ -11,3 +11,4 @@ CONFIG_UART_NS16550=y CONFIG_UART_CONSOLE=y CONFIG_INCLUDE_RESET_VECTOR=n CONFIG_EXTRA_EXCEPTION_INFO=y +CONFIG_QEMU_ICOUNT=n diff --git a/boards/riscv/hifive1/board.cmake b/boards/riscv/hifive1/board.cmake index 44c8763b676..9c7c650a994 100644 --- a/boards/riscv/hifive1/board.cmake +++ b/boards/riscv/hifive1/board.cmake @@ -9,10 +9,6 @@ set(QEMU_FLAGS_${ARCH} -machine sifive_e ) -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() - board_set_debugger_ifnset(qemu) board_set_flasher_ifnset(hifive1) board_finalize_runner_args(hifive1) diff --git a/boards/riscv/hifive1/hifive1_defconfig b/boards/riscv/hifive1/hifive1_defconfig index 7f205ec79f1..7447127c863 100644 --- a/boards/riscv/hifive1/hifive1_defconfig +++ b/boards/riscv/hifive1/hifive1_defconfig @@ -18,3 +18,4 @@ CONFIG_GPIO_SIFIVE=y CONFIG_SPI=y CONFIG_SPI_SIFIVE=y CONFIG_BOOT_BANNER=y +CONFIG_QEMU_ICOUNT_SHIFT=6 diff --git a/boards/riscv/qemu_riscv32/board.cmake b/boards/riscv/qemu_riscv32/board.cmake index 3e7a98c494a..f0e123ec8ba 100644 --- a/boards/riscv/qemu_riscv32/board.cmake +++ b/boards/riscv/qemu_riscv32/board.cmake @@ -9,8 +9,4 @@ set(QEMU_FLAGS_${ARCH} -nographic -machine sifive_e ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/riscv/qemu_riscv32/qemu_riscv32_defconfig b/boards/riscv/qemu_riscv32/qemu_riscv32_defconfig index f26eeb53f99..1a4d99dfb6e 100644 --- a/boards/riscv/qemu_riscv32/qemu_riscv32_defconfig +++ b/boards/riscv/qemu_riscv32/qemu_riscv32_defconfig @@ -16,3 +16,4 @@ CONFIG_RISCV_MACHINE_TIMER=y CONFIG_GPIO=y CONFIG_GPIO_SIFIVE=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=10000000 +CONFIG_QEMU_ICOUNT_SHIFT=6 diff --git a/boards/riscv/qemu_riscv64/board.cmake b/boards/riscv/qemu_riscv64/board.cmake index 70284150255..74ebe8e3e0d 100644 --- a/boards/riscv/qemu_riscv64/board.cmake +++ b/boards/riscv/qemu_riscv64/board.cmake @@ -9,8 +9,4 @@ set(QEMU_FLAGS_${ARCH} -nographic -machine sifive_e ) - -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() board_set_debugger_ifnset(qemu) diff --git a/boards/riscv/qemu_riscv64/qemu_riscv64_defconfig b/boards/riscv/qemu_riscv64/qemu_riscv64_defconfig index 804f8f5c84c..83efa64b430 100644 --- a/boards/riscv/qemu_riscv64/qemu_riscv64_defconfig +++ b/boards/riscv/qemu_riscv64/qemu_riscv64_defconfig @@ -18,3 +18,4 @@ CONFIG_GPIO_SIFIVE=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=10000000 CONFIG_STACK_SENTINEL=y CONFIG_TEST_EXTRA_STACKSIZE=256 +CONFIG_QEMU_ICOUNT_SHIFT=6 diff --git a/boards/x86/qemu_x86/board.cmake b/boards/x86/qemu_x86/board.cmake index 4cc857912dd..7e7a43987b6 100644 --- a/boards/x86/qemu_x86/board.cmake +++ b/boards/x86/qemu_x86/board.cmake @@ -11,13 +11,12 @@ if(CONFIG_X86_64) set(QEMU_CPU_TYPE_${ARCH} qemu64,+x2apic) if("${CONFIG_MP_NUM_CPUS}" STREQUAL "1") # icount works with 1 CPU so we can enable it here. + # FIXME: once this works across configs, remove this line and set + # CONFIG_QEMU_ICOUNT_SHIFT in defconfig instead. list(APPEND QEMU_EXTRA_FLAGS -icount shift=5,align=off,sleep=off -rtc clock=vm) endif() else() set(QEMU_CPU_TYPE_${ARCH} qemu32,+nx,+pae) -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=5,align=off,sleep=off -rtc clock=vm) -endif() endif() set(QEMU_FLAGS_${ARCH} diff --git a/boards/x86/qemu_x86/qemu_x86_64_defconfig b/boards/x86/qemu_x86/qemu_x86_64_defconfig index c0a9ce6b5e6..8f1cbe0d91f 100644 --- a/boards/x86/qemu_x86/qemu_x86_64_defconfig +++ b/boards/x86/qemu_x86/qemu_x86_64_defconfig @@ -16,3 +16,4 @@ CONFIG_SMP=y CONFIG_MP_NUM_CPUS=2 CONFIG_X86_MMU=y CONFIG_X86_VERY_EARLY_CONSOLE=y +CONFIG_QEMU_ICOUNT=n diff --git a/boards/x86/qemu_x86/qemu_x86_coverage_defconfig b/boards/x86/qemu_x86/qemu_x86_coverage_defconfig index 8a45c7c63b5..72c88c699e9 100644 --- a/boards/x86/qemu_x86/qemu_x86_coverage_defconfig +++ b/boards/x86/qemu_x86/qemu_x86_coverage_defconfig @@ -18,3 +18,4 @@ CONFIG_SCHED_SCALABLE=y CONFIG_WAITQ_SCALABLE=y CONFIG_COVERAGE=y CONFIG_X86_VERY_EARLY_CONSOLE=y +CONFIG_QEMU_ICOUNT_SHIFT=5 diff --git a/boards/x86/qemu_x86/qemu_x86_defconfig b/boards/x86/qemu_x86/qemu_x86_defconfig index 7f2a6686c79..39106da3f92 100644 --- a/boards/x86/qemu_x86/qemu_x86_defconfig +++ b/boards/x86/qemu_x86/qemu_x86_defconfig @@ -17,3 +17,4 @@ CONFIG_DEBUG_INFO=y CONFIG_SCHED_SCALABLE=y CONFIG_WAITQ_SCALABLE=y CONFIG_X86_VERY_EARLY_CONSOLE=y +CONFIG_QEMU_ICOUNT_SHIFT=5 diff --git a/boards/x86/qemu_x86/qemu_x86_nommu_defconfig b/boards/x86/qemu_x86/qemu_x86_nommu_defconfig index d4bfd61f1db..ed3b7d4f586 100644 --- a/boards/x86/qemu_x86/qemu_x86_nommu_defconfig +++ b/boards/x86/qemu_x86/qemu_x86_nommu_defconfig @@ -12,3 +12,4 @@ CONFIG_UART_CONSOLE=y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=25000000 CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_DEBUG_INFO=y +CONFIG_QEMU_ICOUNT_SHIFT=5 diff --git a/boards/xtensa/qemu_xtensa/board.cmake b/boards/xtensa/qemu_xtensa/board.cmake index fd9886d2274..822cdb1e2bd 100644 --- a/boards/xtensa/qemu_xtensa/board.cmake +++ b/boards/xtensa/qemu_xtensa/board.cmake @@ -8,9 +8,6 @@ set(QEMU_FLAGS_${ARCH} -machine sim -semihosting -nographic -cpu sample_controller ) -if(CONFIG_QEMU_ICOUNT) - list(APPEND QEMU_EXTRA_FLAGS -icount shift=6,align=off,sleep=off -rtc clock=vm) -endif() # TODO: Support debug # board_set_debugger_ifnset(qemu) # debugserver: QEMU_EXTRA_FLAGS += -s -S diff --git a/boards/xtensa/qemu_xtensa/qemu_xtensa_defconfig b/boards/xtensa/qemu_xtensa/qemu_xtensa_defconfig index 9af567b1f8e..08e8295cc80 100644 --- a/boards/xtensa/qemu_xtensa/qemu_xtensa_defconfig +++ b/boards/xtensa/qemu_xtensa/qemu_xtensa_defconfig @@ -9,3 +9,4 @@ CONFIG_STACK_SENTINEL=y CONFIG_GEN_ISR_TABLES=y CONFIG_GEN_IRQ_VECTOR_TABLE=n CONFIG_SIMULATOR_XTENSA=y +CONFIG_QEMU_ICOUNT_SHIFT=6 diff --git a/cmake/emu/qemu.cmake b/cmake/emu/qemu.cmake index a05ca93cd3b..26e7622deec 100644 --- a/cmake/emu/qemu.cmake +++ b/cmake/emu/qemu.cmake @@ -60,6 +60,12 @@ endif() # Connect monitor to the console chardev. list(APPEND QEMU_FLAGS -mon chardev=con,mode=readline) +if(CONFIG_QEMU_ICOUNT) + list(APPEND QEMU_FLAGS + -icount shift=${CONFIG_QEMU_ICOUNT_SHIFT},align=off,sleep=off + -rtc clock=vm) +endif() + # Add a BT serial device when building for bluetooth, unless the # application explicitly opts out with NO_QEMU_SERIAL_BT_SERVER. if(CONFIG_BT)