[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH for-6.2 06/25] hw/arm/armv7m: Create input clocks
From: |
Luc Michel |
Subject: |
Re: [PATCH for-6.2 06/25] hw/arm/armv7m: Create input clocks |
Date: |
Tue, 17 Aug 2021 11:34:26 +0200 |
On 10:33 Thu 12 Aug , Peter Maydell wrote:
> Create input clocks on the armv7m container object which pass through
> to the systick timers, so that users of the armv7m object can specify
> the clocks being used.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Luc Michel <luc@lmichel.fr>
> ---
> include/hw/arm/armv7m.h | 6 ++++++
> hw/arm/armv7m.c | 23 +++++++++++++++++++++++
> 2 files changed, 29 insertions(+)
>
> diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h
> index fe8b248a6c6..b7ba0ff409c 100644
> --- a/include/hw/arm/armv7m.h
> +++ b/include/hw/arm/armv7m.h
> @@ -15,6 +15,7 @@
> #include "hw/misc/armv7m_ras.h"
> #include "target/arm/idau.h"
> #include "qom/object.h"
> +#include "hw/clock.h"
>
> #define TYPE_BITBAND "ARM-bitband-memory"
> OBJECT_DECLARE_SIMPLE_TYPE(BitBandState, BITBAND)
> @@ -51,6 +52,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ARMv7MState, ARMV7M)
> * + Property "vfp": enable VFP (forwarded to CPU object)
> * + Property "dsp": enable DSP (forwarded to CPU object)
> * + Property "enable-bitband": expose bitbanded IO
> + * + Clock input "refclk" is the external reference clock for the systick
> timers
> + * + Clock input "cpuclk" is the main CPU clock
> */
> struct ARMv7MState {
> /*< private >*/
> @@ -82,6 +85,9 @@ struct ARMv7MState {
> /* MR providing default PPB behaviour */
> MemoryRegion defaultmem;
>
> + Clock *refclk;
> + Clock *cpuclk;
> +
> /* Properties */
> char *cpu_type;
> /* MemoryRegion the board provides to us (with its devices, RAM, etc) */
> diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
> index 7e7fb7a3ad3..db1bfa98df0 100644
> --- a/hw/arm/armv7m.c
> +++ b/hw/arm/armv7m.c
> @@ -14,12 +14,14 @@
> #include "hw/arm/boot.h"
> #include "hw/loader.h"
> #include "hw/qdev-properties.h"
> +#include "hw/qdev-clock.h"
> #include "elf.h"
> #include "sysemu/reset.h"
> #include "qemu/error-report.h"
> #include "qemu/module.h"
> #include "qemu/log.h"
> #include "target/arm/idau.h"
> +#include "migration/vmstate.h"
>
> /* Bitbanded IO. Each word corresponds to a single bit. */
>
> @@ -265,6 +267,9 @@ static void armv7m_instance_init(Object *obj)
> object_initialize_child(obj, "bitband[*]", &s->bitband[i],
> TYPE_BITBAND);
> }
> +
> + s->refclk = qdev_init_clock_in(DEVICE(obj), "refclk", NULL, NULL, 0);
> + s->cpuclk = qdev_init_clock_in(DEVICE(obj), "cpuclk", NULL, NULL, 0);
> }
>
> static void armv7m_realize(DeviceState *dev, Error **errp)
> @@ -416,6 +421,8 @@ static void armv7m_realize(DeviceState *dev, Error **errp)
> }
>
> /* Create and map the systick devices */
> + qdev_connect_clock_in(DEVICE(&s->systick[M_REG_NS]), "refclk",
> s->refclk);
> + qdev_connect_clock_in(DEVICE(&s->systick[M_REG_NS]), "cpuclk",
> s->cpuclk);
> if (!sysbus_realize(SYS_BUS_DEVICE(&s->systick[M_REG_NS]), errp)) {
> return;
> }
> @@ -431,6 +438,10 @@ static void armv7m_realize(DeviceState *dev, Error
> **errp)
> */
> object_initialize_child(OBJECT(dev), "systick-reg-s",
> &s->systick[M_REG_S], TYPE_SYSTICK);
> + qdev_connect_clock_in(DEVICE(&s->systick[M_REG_S]), "refclk",
> + s->refclk);
> + qdev_connect_clock_in(DEVICE(&s->systick[M_REG_S]), "cpuclk",
> + s->cpuclk);
>
> if (!sysbus_realize(SYS_BUS_DEVICE(&s->systick[M_REG_S]), errp)) {
> return;
> @@ -504,11 +515,23 @@ static Property armv7m_properties[] = {
> DEFINE_PROP_END_OF_LIST(),
> };
>
> +static const VMStateDescription vmstate_armv7m = {
> + .name = "armv7m",
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .fields = (VMStateField[]) {
> + VMSTATE_CLOCK(refclk, SysTickState),
> + VMSTATE_CLOCK(cpuclk, SysTickState),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> static void armv7m_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
>
> dc->realize = armv7m_realize;
> + dc->vmsd = &vmstate_armv7m;
> device_class_set_props(dc, armv7m_properties);
> }
>
> --
> 2.20.1
>
--
- [PATCH for-6.2 07/25] armsse: Wire up systick cpuclk clock, (continued)
- [PATCH for-6.2 07/25] armsse: Wire up systick cpuclk clock, Peter Maydell, 2021/08/12
- [PATCH for-6.2 05/25] hw/timer/armv7m_systick: Add input clocks, Peter Maydell, 2021/08/12
- [PATCH for-6.2 08/25] hw/arm/mps2.c: Connect up armv7m clocks, Peter Maydell, 2021/08/12
- [PATCH for-6.2 06/25] hw/arm/armv7m: Create input clocks, Peter Maydell, 2021/08/12
- [PATCH for-6.2 09/25] clock: Provide builtin multiplier/divider, Peter Maydell, 2021/08/12
Re: [PATCH for-6.2 09/25] clock: Provide builtin multiplier/divider, Luc Michel, 2021/08/15