Received: from eggs.gnu.org ([2001:4830:134:3::10]:53758) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHxXM-0003Ha-55 for qemu-devel@nongnu.org; Sat, 09 Jan 2016 12:42:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHxXH-0000fr-2p for qemu-devel@nongnu.org; Sat, 09 Jan 2016 12:42:48 -0500 From: Dmitry Osipenko Date: Sat, 9 Jan 2016 20:39:48 +0300 Message-Id: Subject: [Qemu-devel] [PATCH v10 0/7] PTimer fixes/features and ARM MPTimer conversion List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: QEMU Developers , qemu-arm@nongnu.org Cc: Peter Maydell , Peter Crosthwaite Changelog for ARM MPTimer QEMUTimer to ptimer conversion: V2: Fixed changing periodic timer counter value "on the fly". I added a test to the gist to cover that issue. V3: Fixed starting the timer with load = 0 and counter != 0, added tests to the gist for this issue. Changed vmstate version for all VMSD's, since loadvm doesn't check version of nested VMSD. V4: Fixed spurious IT bit set for the timer starting in the periodic mode with counter = 0. Test added. V5: Code cleanup, now depends on ptimer_set_limit() fix. V6: No code change, added test to check ptimer_get_count() with corrected .limit value. V7: No change. V8: No change. V9: No change. V10: Correctly handle cases when counter = load = 0 and prescaler != 0, i.e. triggering interrupt in that case. Call ptimer_* only when certain MPTimer state was changed, like prescaler change. Factor out timerblock_set_count from timerblock_run and inline both. Tests updated. ARM MPTimer tests: https://gist.github.com/digetx/dbd46109503b1a91941a Patches for ptimer are introduced since V5 of "ARM MPTimer conversion". Changelog for the ptimer patches: V5: Only fixed ptimer_set_limit() for the disabled timer. V6: As was pointed by Peter Maydell, there are other issues beyond ptimer_set_limit(), so V6 supposed to cover all those issues. V7: Added accidentally removed !use_icount check. Added missed "else" statement. V8: Adjust period instead of the limit and do it for periodic timer only (.limit adjusting bug). Added patch/fix for freq/period change and ptimer_get_count() improvement. V9: Don't do wrap around if counter == 0, otherwise polled periodic timer won't ever return counter = 0. V10: Addressed V8/9 review comments. Adjust timer period based on delta instead of limit. Don't wrap around when in icount mode. New patches: "on the fly" mode switch, silence error msg when delta = load = 0, introduce ptimer_get_limit. Dmitry Osipenko (7): hw/ptimer: Fix issues caused by the adjusted timer limit value hw/ptimer: Perform tick and counter wrap around if timer already expired hw/ptimer: Update .delta on period/freq change hw/ptimer: Support "on the fly" timer mode switch hw/ptimer: Legalize running with delta = load = 0 hw/ptimer: Introduce ptimer_get_limit arm_mptimer: Convert to use ptimer hw/core/ptimer.c | 109 +++++++++++++++++++++++------------ hw/timer/arm_mptimer.c | 127 ++++++++++++++++++++--------------------- include/hw/ptimer.h | 1 + include/hw/timer/arm_mptimer.h | 5 +- 4 files changed, 137 insertions(+), 105 deletions(-) -- 2.6.4