From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: "Damien Hedde" <damien.hedde@greensocs.com>,
"Luc Michel" <luc@lmichel.fr>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>
Subject: [PATCH 00/25] Convert CMSDK timer, watchdog, dualtimer to Clock framework
Date: Thu, 21 Jan 2021 19:05:57 +0000 [thread overview]
Message-ID: <20210121190622.22000-1-peter.maydell@linaro.org> (raw)
This patchset converts the CMSDK timer, watchdog and dualtimer devices
to use the Clock framework instead of an integer property specifying
a frequency in Hz. The series is quito a lot of patches but they
should be mostly small and I hope easy to review.
The motivation here is the upcoming Arm SSE-300 model: this has a
new kind of timer device, which I wanted to write in the modern style
with a Clock input. That meant the ARMSSE container object needed
to know about Clocks, so converting the existing devices it used
to Clocks seemed like a good first step.
The series as a whole is a migration compat break for the machines
involved: mps2-an385, mps2-an386, mps2-an500, mps2-an511, mps2-an505,
mps2-an521, musca-a, musca-b1, lm3s811evb, lm3s6965evb.
Series structure:
* patches adding new clock and ptimer API functions
* add tests for the devices
* add Clock inputs to devices, which do nothing for now
* wire up the clocks in the code that uses the devices
* make the devices use the clocks and ignore the frq properties
* remove the setting of the frq properties in code using the devices
* remove the frq properties from the devices
The new ptimer and clock functions are probably the most interesting part:
* ptimer_set_period_from_clock(ptimer, clk, divisor)
is for setting the period of a ptimer directly from a Clock (possibly
accounting for the frequency being divided by some integer first) --
this avoids possible rounding errors if we went via ptimer_set_period()
or ptimer_set_freq()
* clock_has_source()
returns true if an input Clock has been connected to an output clock;
this is for devices to be able to check in their realize method that
a mandatory clock was wired up by the board
(More detailed info and rationale in patches 1 and 2.)
A couple of bits of food-for-thought as a result of working with the
relatively-new Clock APIs:
* it might be worth thinking about whether we can have a fairly
lightweight implementation of a clock-divider or clock-multiplier,
because I feel they are pretty common. (For this series I opted
just to handle this via the ptimer_set_period_from_clock()
divisor argumuent.)
* it feels a little awkward that devices with an input Clock need
to do ptimer_set_period_from_clock() or similar both in their
realize method (to cope with fixed-frequency input clocks, because
the clock callback functions are not called when board setup code
creates and configures those) and in the clock callback function
(to cope with variable-frequency clocks)
* I found it odd that ptimer's period representation is 64.32
fixedpoint 2^-32 ns units, whereas Clock's is only 32.32
(so ptimer can handle much larger periods than Clock can.)
I forget why we didn't go for the same representation in Clock
as we have for ptimer...
* there's no MAINTAINERS entry for the Clock framework
I don't think these need to be blockers on this series, though.
thanks
-- PMM
Peter Maydell (25):
ptimer: Add new ptimer_set_period_from_clock() function
clock: Add new clock_has_source() function
tests: Add a simple test of the CMSDK APB timer
tests: Add a simple test of the CMSDK APB watchdog
tests: Add a simple test of the CMSDK APB dual timer
hw/timer/cmsdk-apb-timer: Rename CMSDKAPBTIMER struct to CMSDKAPBTimer
hw/timer/cmsdk-apb-timer: Add Clock input
hw/timer/cmsdk-apb-dualtimer: Add Clock input
hw/watchdog/cmsdk-apb-watchdog: Add Clock input
hw/arm/armsse: Rename "MAINCLK" property to "MAINCLK_FRQ"
hw/arm/armsse: Wire up clocks
hw/arm/mps2: Inline CMSDK_APB_TIMER creation
hw/arm/mps2: Create and connect SYSCLK Clock
hw/arm/mps2-tz: Create and connect ARMSSE Clocks
hw/arm/musca: Create and connect ARMSSE Clocks
hw/arm/stellaris: Convert SSYS to QOM device
hw/arm/stellaris: Create Clock input for watchdog
hw/timer/cmsdk-apb-timer: Convert to use Clock input
hw/timer/cmsdk-apb-dualtimer: Convert to use Clock input
hw/watchdog/cmsdk-apb-watchdog: Convert to use Clock input
tests/qtest/cmsdk-apb-watchdog-test: Test clock changes
hw/arm/armsse: Use Clock to set system_clock_scale
arm: Don't set freq properties on CMSDK timer, dualtimer, watchdog,
ARMSSE
arm: Remove frq properties on CMSDK timer, dualtimer, watchdog, ARMSSE
hw/arm/stellaris: Remove board-creation reset of STELLARIS_SYS
docs/devel/clocks.rst | 16 +++
include/hw/arm/armsse.h | 14 +-
include/hw/clock.h | 15 ++
include/hw/ptimer.h | 22 +++
include/hw/timer/cmsdk-apb-dualtimer.h | 5 +-
include/hw/timer/cmsdk-apb-timer.h | 34 ++---
include/hw/watchdog/cmsdk-apb-watchdog.h | 5 +-
include/qemu/typedefs.h | 1 +
hw/arm/armsse.c | 47 +++++--
hw/arm/mps2-tz.c | 14 +-
hw/arm/mps2.c | 28 +++-
hw/arm/musca.c | 13 +-
hw/arm/stellaris.c | 170 +++++++++++++++++------
hw/core/ptimer.c | 34 +++++
hw/timer/cmsdk-apb-dualtimer.c | 53 +++++--
hw/timer/cmsdk-apb-timer.c | 55 ++++----
hw/watchdog/cmsdk-apb-watchdog.c | 29 ++--
tests/qtest/cmsdk-apb-dualtimer-test.c | 131 +++++++++++++++++
tests/qtest/cmsdk-apb-timer-test.c | 76 ++++++++++
tests/qtest/cmsdk-apb-watchdog-test.c | 132 ++++++++++++++++++
MAINTAINERS | 3 +
tests/qtest/meson.build | 3 +
22 files changed, 758 insertions(+), 142 deletions(-)
create mode 100644 tests/qtest/cmsdk-apb-dualtimer-test.c
create mode 100644 tests/qtest/cmsdk-apb-timer-test.c
create mode 100644 tests/qtest/cmsdk-apb-watchdog-test.c
--
2.20.1
next reply other threads:[~2021-01-21 19:09 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-21 19:05 Peter Maydell [this message]
2021-01-21 19:05 ` [PATCH 01/25] ptimer: Add new ptimer_set_period_from_clock() function Peter Maydell
2021-01-22 14:08 ` Luc Michel
2021-01-21 19:05 ` [PATCH 02/25] clock: Add new clock_has_source() function Peter Maydell
2021-01-22 14:15 ` Luc Michel
2021-01-27 21:56 ` Philippe Mathieu-Daudé
2021-01-21 19:06 ` [PATCH 03/25] tests: Add a simple test of the CMSDK APB timer Peter Maydell
2021-01-21 19:56 ` Philippe Mathieu-Daudé
2021-01-24 12:50 ` Luc Michel
2021-01-21 19:06 ` [PATCH 04/25] tests: Add a simple test of the CMSDK APB watchdog Peter Maydell
2021-01-24 13:10 ` Luc Michel
2021-01-27 21:54 ` Philippe Mathieu-Daudé
2021-01-21 19:06 ` [PATCH 05/25] tests: Add a simple test of the CMSDK APB dual timer Peter Maydell
2021-01-24 13:24 ` Luc Michel
2021-01-21 19:06 ` [PATCH 06/25] hw/timer/cmsdk-apb-timer: Rename CMSDKAPBTIMER struct to CMSDKAPBTimer Peter Maydell
2021-01-21 20:21 ` Philippe Mathieu-Daudé
2021-01-22 14:22 ` Luc Michel
2021-01-21 19:06 ` [PATCH 07/25] hw/timer/cmsdk-apb-timer: Add Clock input Peter Maydell
2021-01-21 20:22 ` Philippe Mathieu-Daudé
2021-01-22 15:11 ` Luc Michel
2021-01-21 19:06 ` [PATCH 08/25] hw/timer/cmsdk-apb-dualtimer: " Peter Maydell
2021-01-21 21:49 ` Philippe Mathieu-Daudé
2021-01-22 15:17 ` Luc Michel
2021-01-21 19:06 ` [PATCH 09/25] hw/watchdog/cmsdk-apb-watchdog: " Peter Maydell
2021-01-21 20:27 ` Philippe Mathieu-Daudé
2021-01-22 15:18 ` Luc Michel
2021-01-21 19:06 ` [PATCH 10/25] hw/arm/armsse: Rename "MAINCLK" property to "MAINCLK_FRQ" Peter Maydell
2021-01-21 20:28 ` Philippe Mathieu-Daudé
2021-01-22 15:22 ` Luc Michel
2021-01-21 19:06 ` [PATCH 11/25] hw/arm/armsse: Wire up clocks Peter Maydell
2021-01-21 20:30 ` Philippe Mathieu-Daudé
2021-01-22 15:34 ` Luc Michel
2021-01-21 19:06 ` [PATCH 12/25] hw/arm/mps2: Inline CMSDK_APB_TIMER creation Peter Maydell
2021-01-21 22:14 ` Philippe Mathieu-Daudé
2021-01-22 15:33 ` Luc Michel
2021-01-21 19:06 ` [PATCH 13/25] hw/arm/mps2: Create and connect SYSCLK Clock Peter Maydell
2021-01-21 21:24 ` Philippe Mathieu-Daudé
2021-01-22 19:52 ` Luc Michel
2021-01-21 19:06 ` [PATCH 14/25] hw/arm/mps2-tz: Create and connect ARMSSE Clocks Peter Maydell
2021-01-21 21:30 ` Philippe Mathieu-Daudé
2021-01-22 19:52 ` Luc Michel
2021-01-21 19:06 ` [PATCH 15/25] hw/arm/musca: " Peter Maydell
2021-01-21 21:30 ` Philippe Mathieu-Daudé
2021-01-22 20:01 ` Luc Michel
2021-01-21 19:06 ` [PATCH 16/25] hw/arm/stellaris: Convert SSYS to QOM device Peter Maydell
2021-01-21 22:13 ` Philippe Mathieu-Daudé
2021-01-25 11:48 ` Peter Maydell
2021-01-27 22:10 ` Philippe Mathieu-Daudé
2021-01-22 20:26 ` Luc Michel
2021-01-21 19:06 ` [PATCH 17/25] hw/arm/stellaris: Create Clock input for watchdog Peter Maydell
2021-01-21 21:59 ` Philippe Mathieu-Daudé
2021-01-27 22:16 ` Philippe Mathieu-Daudé
2021-01-22 20:30 ` Luc Michel
2021-01-21 19:06 ` [PATCH 18/25] hw/timer/cmsdk-apb-timer: Convert to use Clock input Peter Maydell
2021-01-21 22:01 ` Philippe Mathieu-Daudé
2021-01-22 20:33 ` Luc Michel
2021-01-21 19:06 ` [PATCH 19/25] hw/timer/cmsdk-apb-dualtimer: " Peter Maydell
2021-01-22 20:49 ` Luc Michel
2021-01-22 21:41 ` Peter Maydell
2021-01-23 19:58 ` Luc Michel
2021-01-27 22:00 ` Philippe Mathieu-Daudé
2021-01-21 19:06 ` [PATCH 20/25] hw/watchdog/cmsdk-apb-watchdog: " Peter Maydell
2021-01-21 22:01 ` Philippe Mathieu-Daudé
2021-01-22 20:51 ` Luc Michel
2021-01-21 19:06 ` [PATCH 21/25] tests/qtest/cmsdk-apb-watchdog-test: Test clock changes Peter Maydell
2021-01-21 22:04 ` Philippe Mathieu-Daudé
2021-01-24 13:35 ` Luc Michel
2021-01-21 19:06 ` [PATCH 22/25] hw/arm/armsse: Use Clock to set system_clock_scale Peter Maydell
2021-01-21 22:05 ` Philippe Mathieu-Daudé
2021-01-23 20:31 ` Luc Michel
2021-01-23 22:33 ` Peter Maydell
2021-01-21 19:06 ` [PATCH 23/25] arm: Don't set freq properties on CMSDK timer, dualtimer, watchdog, ARMSSE Peter Maydell
2021-01-21 22:06 ` Philippe Mathieu-Daudé
2021-01-23 20:32 ` Luc Michel
2021-01-21 19:06 ` [PATCH 24/25] arm: Remove frq " Peter Maydell
2021-01-21 22:09 ` Philippe Mathieu-Daudé
2021-01-23 20:33 ` Luc Michel
2021-01-21 19:06 ` [PATCH 25/25] hw/arm/stellaris: Remove board-creation reset of STELLARIS_SYS Peter Maydell
2021-01-23 20:33 ` Luc Michel
2021-01-27 22:10 ` Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210121190622.22000-1-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=damien.hedde@greensocs.com \
--cc=f4bug@amsat.org \
--cc=luc@lmichel.fr \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.