From: Peter Maydell <peter.maydell@linaro.org>
To: Alexandre IOOSS <erdnaxe@crans.org>
Cc: Damien Hedde <damien.hedde@greensocs.com>,
Luc Michel <luc@lmichel.fr>,
Alistair Francis <alistair@alistair23.me>,
QEMU Developers <qemu-devel@nongnu.org>,
Subbaraya Sundeep <sundeep.lkml@gmail.com>,
qemu-arm <qemu-arm@nongnu.org>, Joel Stanley <joel@jms.id.au>
Subject: Re: [PATCH for-6.2 09/25] clock: Provide builtin multiplier/divider
Date: Thu, 12 Aug 2021 13:22:54 +0100 [thread overview]
Message-ID: <CAFEAcA-byMR2cEj6FCcGRFztNLsW3_-LR3v5B5+VVy69xfAU8g@mail.gmail.com> (raw)
In-Reply-To: <6a0f3bcc-cb85-2f02-32f3-3ea85b0b9c43@crans.org>
On Thu, 12 Aug 2021 at 13:08, Alexandre IOOSS <erdnaxe@crans.org> wrote:
>
>
> On 8/12/21 11:33 AM, Peter Maydell wrote:
> > It is quite common for a clock tree to involve possibly programmable
> > clock multipliers or dividers, where the frequency of a clock is for
> > instance divided by 8 to produce a slower clock to feed to a
> > particular device.
> >
> > Currently we provide no convenient mechanism for modelling this. You
> > can implement it by having an input Clock and an output Clock, and
> > manually setting the period of the output clock in the period-changed
> > callback of the input clock, but that's quite clunky.
> >
> > This patch adds support in the Clock objects themselves for setting a
> > multiplier or divider. The effect of setting this on a clock is that
> > when the clock's period is changed, all the children of the clock are
> > set to period * multiplier / divider, rather than being set to the
> > same period as the parent clock.
> >
> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> > ---
> > docs/devel/clocks.rst | 23 +++++++++++++++++++++++
> > include/hw/clock.h | 29 +++++++++++++++++++++++++++++
> > hw/core/clock-vmstate.c | 24 +++++++++++++++++++++++-
> > hw/core/clock.c | 29 +++++++++++++++++++++++++----
> > 4 files changed, 100 insertions(+), 5 deletions(-)
> >
> > diff --git a/docs/devel/clocks.rst b/docs/devel/clocks.rst
> > index 956bd147ea0..430fbd842e5 100644
> > --- a/docs/devel/clocks.rst
> > +++ b/docs/devel/clocks.rst
> > @@ -260,6 +260,29 @@ clocks get the new clock period value: *Clock 2*, *Clock 3* and *Clock 4*.
> > It is not possible to disconnect a clock or to change the clock connection
> > after it is connected.
> >
> > +Clock multiplier and divider settings
> > +-------------------------------------
> > +
> > +By default, when clocks are connected together, the child
> > +clocks run with the same period as their source (parent) clock.
> > +The Clock API supports a built-in period multiplier/divider
> > +mechanism so you can configure a clock to make its children
> > +run at a different period from its own. If you call the
> > +``clock_set_mul_div()`` function you can specify the clock's
> > +multiplier and divider values. The children of that clock
> > +will all run with a period of ``parent_period * multiplier / divider``.
> > +For instance, if the clock has a frequency of 8MHz and you set its
> > +multiplier to 2 and its divider to 3, the child clocks will run
> > +at 12MHz.
> > +
> > +You can change the multiplier and divider of a clock at runtime,
> > +so you can use this to model clock controller devices which
> > +have guest-programmable frequency multipliers or dividers.
>
> This looks nice!
> Does this imply that if I am going to implement the STM32 RCC (Reset and
> Clock Controller) device, then I should use this new feature?
I haven't looked at the RCC spec in detail, but yeah, I'd expect
that you'd have a device with one (or perhaps more) input clocks
and a lot of output clocks, and as the guest writes to registers
that set divider/multiplier settings you'd use clock_set_mul_div()
to configure the appropriate output clocks.
-- PMM
next prev parent reply other threads:[~2021-08-12 12:24 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-12 9:33 [PATCH for-6.2 00/25] arm: Get rid of system_clock_scale global Peter Maydell
2021-08-12 9:33 ` [PATCH for-6.2 01/25] arm: Move M-profile RAS register block into its own device Peter Maydell
2021-08-12 11:08 ` Alexandre IOOSS
2021-08-12 11:09 ` Peter Maydell
2021-08-13 0:59 ` Alistair Francis
2021-08-15 17:30 ` Philippe Mathieu-Daudé
2021-08-16 7:28 ` David Hildenbrand
2021-08-16 9:16 ` Peter Maydell
2021-08-17 8:25 ` Luc Michel
2021-08-17 10:10 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 02/25] arm: Move systick device creation from NVIC to ARMv7M object Peter Maydell
2021-08-13 1:23 ` Alistair Francis
2021-08-17 9:24 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 03/25] arm: Move system PPB container handling to armv7m Peter Maydell
2021-08-12 11:56 ` Alexandre IOOSS
2021-08-17 9:25 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 04/25] hw/timer/armv7m_systick: Add usual QEMU interface comment Peter Maydell
2021-08-13 1:26 ` Alistair Francis
2021-08-17 9:29 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 05/25] hw/timer/armv7m_systick: Add input clocks Peter Maydell
2021-08-13 1:27 ` Alistair Francis
2021-08-17 9:32 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 06/25] hw/arm/armv7m: Create " Peter Maydell
2021-08-13 1:28 ` Alistair Francis
2021-08-17 9:34 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 07/25] armsse: Wire up systick cpuclk clock Peter Maydell
2021-08-13 1:29 ` Alistair Francis
2021-08-17 9:36 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 08/25] hw/arm/mps2.c: Connect up armv7m clocks Peter Maydell
2021-08-17 9:39 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 09/25] clock: Provide builtin multiplier/divider Peter Maydell
2021-08-12 12:08 ` Alexandre IOOSS
2021-08-12 12:22 ` Peter Maydell [this message]
2021-08-13 1:33 ` Alistair Francis
2021-08-15 16:32 ` Philippe Mathieu-Daudé
2021-08-16 9:05 ` Peter Maydell
2021-08-16 9:32 ` Philippe Mathieu-Daudé
2021-08-16 9:36 ` Peter Maydell
2021-08-16 9:58 ` Philippe Mathieu-Daudé
2021-08-15 21:27 ` Luc Michel
2021-08-17 9:59 ` Damien Hedde
2021-08-17 10:46 ` Peter Maydell
2021-08-17 14:58 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 10/25] hw/arm: Don't allocate separate MemoryRegions in stm32 SoC realize Peter Maydell
2021-08-12 12:13 ` Alexandre IOOSS
2021-08-12 12:27 ` Peter Maydell
2021-08-15 16:37 ` Philippe Mathieu-Daudé
2021-08-13 1:34 ` Alistair Francis
2021-08-17 9:41 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 11/25] hw/arm/stm32f100: Wire up sysclk and refclk Peter Maydell
2021-08-13 1:36 ` Alistair Francis
2021-08-14 9:01 ` Alexandre IOOSS
2021-08-17 9:45 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 12/25] hw/arm/stm32f205: " Peter Maydell
2021-08-13 1:38 ` Alistair Francis
2021-08-14 9:02 ` Alexandre IOOSS
2021-08-17 9:47 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 13/25] hw/arm/stm32f405: " Peter Maydell
2021-08-13 1:37 ` Alistair Francis
2021-08-14 9:03 ` Alexandre IOOSS
2021-08-17 9:47 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 14/25] hw/arm/stm32vldiscovery: Delete trailing blank line Peter Maydell
2021-08-12 12:27 ` Alexandre IOOSS
2021-08-13 1:39 ` Alistair Francis
2021-08-17 9:48 ` Luc Michel
2021-08-12 9:33 ` [PATCH for-6.2 15/25] hw/arm/nrf51: Wire up sysclk Peter Maydell
2021-08-14 9:06 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 16/25] hw/arm/stellaris: split stellaris_sys_init() Peter Maydell
2021-08-14 9:10 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 17/25] hw/arm/stellaris: Wire sysclk up to armv7m Peter Maydell
2021-08-14 9:12 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 18/25] hw/arm/msf2_soc: Don't allocate separate MemoryRegions Peter Maydell
2021-08-14 9:13 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 19/25] hw/arm/msf2: Use Clock input to MSF2_SOC instead of m3clk property Peter Maydell
2021-08-14 9:20 ` Alexandre IOOSS
2021-08-14 10:11 ` Peter Maydell
2021-08-14 10:47 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 20/25] hw/arm/msf2-soc: Wire up refclk Peter Maydell
2021-08-17 15:05 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 21/25] hw/timer/armv7m_systick: Use clock inputs instead of system_clock_scale Peter Maydell
2021-08-17 15:55 ` Damien Hedde
2021-08-17 15:59 ` Peter Maydell
2021-08-17 16:14 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 22/25] hw/arm/stellaris: Fix code style issues in GPTM code Peter Maydell
2021-08-14 9:26 ` Alexandre IOOSS
2021-08-12 9:33 ` [PATCH for-6.2 23/25] hw/arm/stellaris: Split stellaris-gptm into its own file Peter Maydell
2021-08-17 15:59 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 24/25] hw/timer/stellaris-gptm: Use Clock input instead of system_clock_scale Peter Maydell
2021-08-18 12:03 ` Damien Hedde
2021-08-12 9:33 ` [PATCH for-6.2 25/25] arm: Remove system_clock_scale global Peter Maydell
2021-08-13 5:08 ` Alistair Francis
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=CAFEAcA-byMR2cEj6FCcGRFztNLsW3_-LR3v5B5+VVy69xfAU8g@mail.gmail.com \
--to=peter.maydell@linaro.org \
--cc=alistair@alistair23.me \
--cc=damien.hedde@greensocs.com \
--cc=erdnaxe@crans.org \
--cc=joel@jms.id.au \
--cc=luc@lmichel.fr \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=sundeep.lkml@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).