]> git.ipfire.org Git - thirdparty/qemu.git/commit
target/arm: Always apply CNTVOFF_EL2 for CNTV_TVAL_EL02 accesses
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 7 Mar 2025 10:08:20 +0000 (10:08 +0000)
committerMichael Tokarev <mjt@tls.msk.ru>
Tue, 18 Mar 2025 06:02:48 +0000 (09:02 +0300)
commit69b4ed0259f89925640556751e7018f3acd715f1
tree78d7c7a888cf38574ab480685266b807bdd2a11f
parentb692aea8039700d784d42344bea1b2dfd7185445
target/arm: Always apply CNTVOFF_EL2 for CNTV_TVAL_EL02 accesses

Currently we handle CNTV_TVAL_EL02 by calling gt_tval_read() for the
EL1 virt timer.  This is almost correct, but the underlying
CNTV_TVAL_EL0 register behaves slightly differently.  CNTV_TVAL_EL02
always applies the CNTVOFF_EL2 offset; CNTV_TVAL_EL0 doesn't do so if
we're at EL2 and HCR_EL2.E2H is 1.

We were getting this wrong, because we ended up in
gt_virt_cnt_offset() and did the E2H check.

Factor out the tval read/write calculation from the selection of the
offset, so that we can special case gt_virt_tval_read() and
gt_virt_tval_write() to unconditionally pass CNTVOFF_EL2.

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-id: 20250204125009.2281315-5-peter.maydell@linaro.org
(cherry picked from commit 4aecd4b442d7abb4355896d878ffc9b028625b01)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
target/arm/helper.c