boards: centralize QEMU icount management

Instead of endlessly repeating the same command line args,
centralize this and tune the shift value on a per-board
basis.

Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
Andrew Boie 2020-05-19 12:24:25 -07:00 committed by Anas Nashif
commit a9670ab5cf
31 changed files with 33 additions and 41 deletions

View file

@ -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

View file

@ -11,3 +11,4 @@ CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UART_NS16550=y
CONFIG_QEMU_ICOUNT=n

View file

@ -11,3 +11,4 @@ CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UART_NS16550=y
CONFIG_QEMU_ICOUNT=n

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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=\$<TARGET_FILE:\${logical_target_for_zephyr_elf}>,cpu-num=4"
"-device;loader,addr=0xff5e023c,data=0x80008fde,data-len=4"

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -18,3 +18,4 @@ CONFIG_GPIO_SIFIVE=y
CONFIG_SPI=y
CONFIG_SPI_SIFIVE=y
CONFIG_BOOT_BANNER=y
CONFIG_QEMU_ICOUNT_SHIFT=6

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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}

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)