hw/arm/fsl-imx8mm: Add Clock Control Module IP to iMX8MM
Add the Clock Control Module (CCM) device to i.MX8MM SoC. The CCM implementation is shared with i.MX8MP as the register layout is identical between the two variants.Hence iMX8MM will be using the source of iMX8MP CCM. Reviewed-by: Bernhard Beschow <shentey@gmail.com> Signed-off-by: Gaurav Sharma <gaurav.sharma_7@nxp.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Gaurav Sharma committed
Apr 21, 2026 at 12:22 UTC
956dd79e3a35b1ec7c1d589196c1ec51970d754a
3 files changed
+13
hw/arm/Kconfig
+1
@@ -621,6 +621,7 @@ config FSL_IMX8MM
621
bool
622
select ARM_GIC
623
select FSL_IMX8MP_ANALOG
624
+ select FSL_IMX8MP_CCM
625
select IMX
626
627
config FSL_IMX8MM_EVK
hw/arm/fsl-imx8mm.c
+10
@@ -169,6 +169,8 @@ static void fsl_imx8mm_init(Object *obj)
169
170
object_initialize_child(obj, "gic", &s->gic, gicv3_class_name());
171
172
+ object_initialize_child(obj, "ccm", &s->ccm, TYPE_IMX8MP_CCM);
173
+
174
object_initialize_child(obj, "analog", &s->analog, TYPE_IMX8MP_ANALOG);
175
176
for (i = 0; i < FSL_IMX8MM_NUM_UARTS; i++) {
@@ -305,6 +307,13 @@ static void fsl_imx8mm_realize(DeviceState *dev, Error **errp)
307
}
308
}
309
310
+ /* CCM */
311
+ if (!sysbus_realize(SYS_BUS_DEVICE(&s->ccm), errp)) {
312
+ return;
313
+ }
314
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccm), 0,
315
+ fsl_imx8mm_memmap[FSL_IMX8MM_CCM].addr);
316
+
317
/* Analog */
318
object_property_set_uint(OBJECT(&s->analog), "arm-pll-fdiv-ctl0-reset",
319
0x000fa030, &error_abort);
@@ -350,6 +359,7 @@ static void fsl_imx8mm_realize(DeviceState *dev, Error **errp)
359
for (i = 0; i < ARRAY_SIZE(fsl_imx8mm_memmap); i++) {
360
switch (i) {
361
case FSL_IMX8MM_ANA_PLL:
362
+ case FSL_IMX8MM_CCM:
363
case FSL_IMX8MM_GIC_DIST:
364
case FSL_IMX8MM_GIC_REDIST:
365
case FSL_IMX8MM_RAM:
include/hw/arm/fsl-imx8mm.h
+2
@@ -14,6 +14,7 @@
14
#include "hw/char/imx_serial.h"
15
#include "hw/intc/arm_gicv3_common.h"
16
#include "hw/misc/imx8mp_analog.h"
17
+#include "hw/misc/imx8mp_ccm.h"
18
#include "qom/object.h"
19
#include "qemu/units.h"
20
@@ -34,6 +35,7 @@ struct FslImx8mmState {
35
36
ARMCPU cpu[FSL_IMX8MM_NUM_CPUS];
37
GICv3State gic;
38
+ IMX8MPCCMState ccm;
39
IMX8MPAnalogState analog;
40
IMXSerialState uart[FSL_IMX8MM_NUM_UARTS];
41
MemoryRegion ocram;