Message ID | 20190826103142.3477-4-m.szyprowski@samsung.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v2,1/2] ARM: dts: exynos: Add support ARM architected timers | expand |
On 2019-08-26 11:31, Marek Szyprowski wrote: > ARM architected timer can be used together with Exynos MultiCore > Timer > driver, so enable support for it. Support for ARM architected timers > is > essential for enabling proper KVM support. How can you say that this is to "enable KVM support", while in the previous patch, you set "arm,cpu-registers-not-fw-configured" which implies that you're booting in secure mode with the timer's CP15 registers left to undefined values? M.
Hi Marc, On 2019-08-26 12:49, Marc Zyngier wrote: > On 2019-08-26 11:31, Marek Szyprowski wrote: >> ARM architected timer can be used together with Exynos MultiCore Timer >> driver, so enable support for it. Support for ARM architected timers is >> essential for enabling proper KVM support. > > How can you say that this is to "enable KVM support", while in the > previous > patch, you set "arm,cpu-registers-not-fw-configured" which implies > that you're > booting in secure mode with the timer's CP15 registers left to > undefined values? Thanks for asking a good question! I've did my KVM research mainly on Exynos5422-based OdroidXU3/XU4 boards family. After some recently merged patches they all now boot correctly in HYP mode. On all of those boards arch timers are indeed partially not configured (CNTFRQ is zero). I was convinced that this also requires adding "arm,cpu-registers-not-fw-configured" property to make timers fully operational, but it looks that this only disables VDSO on arm32 and switches to phys timers if booted in SVC mode. I've checked and KVM works fine on the mentioned boards regardless of the "arm,cpu-registers-not-fw-configured" property. The only issue is the lack of proper value in CNTFRQ register, what requires patching timer node by adding "clock-frequency = <24000000>" property also to the guest dtb. I've did my test of KVM with QEMU emulator version 3.1.0 (Debian 1:3.1+dfsg-8) virtualizing vexpress-a15 machine, with patched vexpress-v2p-ca15-tc1.dtb and the following command line on OdroidXU3: taskset 0x30 qemu-system-arm -M vexpress-a15 -smp 2 -cpu host -enable-kvm -m 512 -kernel zImage -dtb vexpress-v2p-ca15-tc1.dtb -append "console=ttyAMA0 root=/dev/vda rw rootwait" -serial stdio -display none -monitor null -device virtio-blk-device,drive=virtio-blk -drive file=rootfs.raw,id=virtio-blk,if=none,format=raw -netdev user,id=user -device virtio-net-device,netdev=user Then I've checked other boards that are capable of running in HYP mode. Exynos5250 Arndale board with mainline uboot boots to HYP fine. Exynos5250-based Snow Chromebook with stock bootloader boots only to SVC mode. There exists a way to upgrade uboot to enable HYP, but this requires HW fix to enable write access to nvram. Both boards however also don't configure CNTFRQ register, but otherwise the arch timer registers seems to be configured fine (virt counters are in sync between CPUs). The last group of boards are Exynos5420-based Pit and Exynos5800-based Pi Chromebooks. In theory they are capable in running HYP mode with a patched bootloader, but stock bootloader boots only to SVC. They also truly don't have arch timer registers correctly configured, as virt timers are out of sync between CPUs. I will send v3 with "arm,cpu-registers-not-fw-configured" property moved from the timer nodes in dtsi files to respective effected boards. Best regards
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index d7422233a130..833ab92516fa 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@ -18,6 +18,7 @@ menuconfig ARCH_EXYNOS select EXYNOS_SROM select EXYNOS_PM_DOMAINS if PM_GENERIC_DOMAINS select GPIOLIB + select HAVE_ARM_ARCH_TIMER if VIRTUALIZATION select HAVE_ARM_SCU if SMP select HAVE_S3C2410_I2C if I2C select HAVE_S3C2410_WATCHDOG if WATCHDOG
ARM architected timer can be used together with Exynos MultiCore Timer driver, so enable support for it. Support for ARM architected timers is essential for enabling proper KVM support. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> --- arch/arm/mach-exynos/Kconfig | 1 + 1 file changed, 1 insertion(+)