Am 5. Dezember 2025 05:38:06 UTC schrieb Gaurav Sharma <[email protected]>: >Add configurable properties for register reset values that differ >between i.MX 8M variants (Plus, Mini, etc.). This allows the same >device implementation to be shared across multiple SoCs. > >Properties added: >- arm-pll-fdiv-ctl0-reset: ARM PLL divider control reset value > >Default value is set to match i.MX 8MP reset value (0x000FA031). >This can be overridden in the variant like iMX8MM with its own >reset value. > >Signed-off-by: Gaurav Sharma <[email protected]> >--- > hw/misc/imx8mp_analog.c | 12 +++++++++++- > include/hw/misc/imx8mp_analog.h | 3 +++ > 2 files changed, 14 insertions(+), 1 deletion(-) > >diff --git a/hw/misc/imx8mp_analog.c b/hw/misc/imx8mp_analog.c >index 23ffae84f8..7c904d77f4 100644 >--- a/hw/misc/imx8mp_analog.c >+++ b/hw/misc/imx8mp_analog.c >@@ -12,6 +12,7 @@ > #include "qemu/log.h" > > #include "hw/misc/imx8mp_analog.h" >+#include "hw/qdev-properties.h" > #include "migration/vmstate.h" > > #define ANALOG_PLL_LOCK BIT(31) >@@ -51,7 +52,10 @@ static void imx8mp_analog_reset(DeviceState *dev) > s->analog[ANALOG_VPU_PLL_LOCKD_CTRL] = 0x0010003f; > s->analog[ANALOG_VPU_PLL_MNIT_CTRL] = 0x00280081; > s->analog[ANALOG_ARM_PLL_GEN_CTRL] = 0x00000810; >- s->analog[ANALOG_ARM_PLL_FDIV_CTL0] = 0x000fa031; >+ >+ /* Use property value instead of hardcoded */ >+ s->analog[ANALOG_ARM_PLL_FDIV_CTL0] = s->arm_pll_fdiv_ctl0_reset; >+ > s->analog[ANALOG_ARM_PLL_LOCKD_CTRL] = 0x0010003f; > s->analog[ANALOG_ARM_PLL_MNIT_CTRL] = 0x00280081; > s->analog[ANALOG_SYS_PLL1_GEN_CTRL] = 0x0aaaa810; >@@ -138,11 +142,17 @@ static const VMStateDescription imx8mp_analog_vmstate = { > }, > }; > >+static const Property imx8mp_analog_properties[] = { >+ DEFINE_PROP_UINT32("arm-pll-fdiv-ctl0-reset", IMX8MPAnalogState, >+ arm_pll_fdiv_ctl0_reset, 0x000fa031), /* imx8mp >default */ IMO the new comments in the code except this one merily state the obvious, so I'd drop those. With this fixed: Reviewed-by: Bernhard Beschow <[email protected]> >+}; >+ > static void imx8mp_analog_class_init(ObjectClass *klass, const void *data) > { > DeviceClass *dc = DEVICE_CLASS(klass); > > device_class_set_legacy_reset(dc, imx8mp_analog_reset); >+ device_class_set_props(dc, imx8mp_analog_properties); > dc->vmsd = &imx8mp_analog_vmstate; > dc->desc = "i.MX 8M Plus Analog Module"; > } >diff --git a/include/hw/misc/imx8mp_analog.h b/include/hw/misc/imx8mp_analog.h >index 955f03215a..b313820392 100644 >--- a/include/hw/misc/imx8mp_analog.h >+++ b/include/hw/misc/imx8mp_analog.h >@@ -76,6 +76,9 @@ struct IMX8MPAnalogState { > } mmio; > > uint32_t analog[ANALOG_MAX]; >+ >+ /* Property for variant-specific reset values */ >+ uint32_t arm_pll_fdiv_ctl0_reset; > }; > > #endif /* IMX8MP_ANALOG_H */
