Message ID | 20190517174046.11146-4-peter.maydell@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Disable FPU/DSP for CPU0 on musca-a and mps2-an521 | expand |
On 5/17/19 7:40 PM, Peter Maydell wrote: > Create "vfp" and "dsp" properties on the armv7m container object > which will be forwarded to its CPU object, so that SoCs can > configure whether the CPU has these features. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > include/hw/arm/armv7m.h | 4 ++++ > hw/arm/armv7m.c | 18 ++++++++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h > index e96a98f8093..d2c74d3872a 100644 > --- a/include/hw/arm/armv7m.h > +++ b/include/hw/arm/armv7m.h > @@ -43,6 +43,8 @@ typedef struct { > * devices will be automatically layered on top of this view.) > * + Property "idau": IDAU interface (forwarded to CPU object) > * + Property "init-svtor": secure VTOR reset value (forwarded to CPU object) > + * + Property "vfp": enable VFP (forwarded to CPU object) > + * + Property "dsp": enable DSP (forwarded to CPU object) > * + Property "enable-bitband": expose bitbanded IO > */ > typedef struct ARMv7MState { > @@ -66,6 +68,8 @@ typedef struct ARMv7MState { > uint32_t init_svtor; > bool enable_bitband; > bool start_powered_off; > + bool vfp; > + bool dsp; > } ARMv7MState; > > #endif > diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c > index c4b2a9a1f5c..7caf9bd3364 100644 > --- a/hw/arm/armv7m.c > +++ b/hw/arm/armv7m.c > @@ -190,6 +190,22 @@ static void armv7m_realize(DeviceState *dev, Error **errp) > return; > } > } > + if (object_property_find(OBJECT(s->cpu), "vfp", NULL)) { And TIL object_property_find :) Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> > + object_property_set_bool(OBJECT(s->cpu), s->vfp, > + "vfp", &err); > + if (err != NULL) { > + error_propagate(errp, err); > + return; > + } > + } > + if (object_property_find(OBJECT(s->cpu), "dsp", NULL)) { > + object_property_set_bool(OBJECT(s->cpu), s->dsp, > + "dsp", &err); > + if (err != NULL) { > + error_propagate(errp, err); > + return; > + } > + } > > /* > * Tell the CPU where the NVIC is; it will fail realize if it doesn't > @@ -260,6 +276,8 @@ static Property armv7m_properties[] = { > DEFINE_PROP_BOOL("enable-bitband", ARMv7MState, enable_bitband, false), > DEFINE_PROP_BOOL("start-powered-off", ARMv7MState, start_powered_off, > false), > + DEFINE_PROP_BOOL("vfp", ARMv7MState, vfp, true), > + DEFINE_PROP_BOOL("dsp", ARMv7MState, dsp, true), > DEFINE_PROP_END_OF_LIST(), > }; > >
Peter Maydell <peter.maydell@linaro.org> writes: > Create "vfp" and "dsp" properties on the armv7m container object > which will be forwarded to its CPU object, so that SoCs can > configure whether the CPU has these features. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > include/hw/arm/armv7m.h | 4 ++++ > hw/arm/armv7m.c | 18 ++++++++++++++++++ > 2 files changed, 22 insertions(+) > > diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h > index e96a98f8093..d2c74d3872a 100644 > --- a/include/hw/arm/armv7m.h > +++ b/include/hw/arm/armv7m.h > @@ -43,6 +43,8 @@ typedef struct { > * devices will be automatically layered on top of this view.) > * + Property "idau": IDAU interface (forwarded to CPU object) > * + Property "init-svtor": secure VTOR reset value (forwarded to CPU object) > + * + Property "vfp": enable VFP (forwarded to CPU object) > + * + Property "dsp": enable DSP (forwarded to CPU object) > * + Property "enable-bitband": expose bitbanded IO > */ > typedef struct ARMv7MState { > @@ -66,6 +68,8 @@ typedef struct ARMv7MState { > uint32_t init_svtor; > bool enable_bitband; > bool start_powered_off; > + bool vfp; > + bool dsp; > } ARMv7MState; > > #endif > diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c > index c4b2a9a1f5c..7caf9bd3364 100644 > --- a/hw/arm/armv7m.c > +++ b/hw/arm/armv7m.c > @@ -190,6 +190,22 @@ static void armv7m_realize(DeviceState *dev, Error **errp) > return; > } > } > + if (object_property_find(OBJECT(s->cpu), "vfp", NULL)) { > + object_property_set_bool(OBJECT(s->cpu), s->vfp, > + "vfp", &err); > + if (err != NULL) { > + error_propagate(errp, err); > + return; > + } > + } > + if (object_property_find(OBJECT(s->cpu), "dsp", NULL)) { > + object_property_set_bool(OBJECT(s->cpu), s->dsp, > + "dsp", &err); > + if (err != NULL) { > + error_propagate(errp, err); > + return; > + } > + } > > /* > * Tell the CPU where the NVIC is; it will fail realize if it doesn't > @@ -260,6 +276,8 @@ static Property armv7m_properties[] = { > DEFINE_PROP_BOOL("enable-bitband", ARMv7MState, enable_bitband, false), > DEFINE_PROP_BOOL("start-powered-off", ARMv7MState, start_powered_off, > false), > + DEFINE_PROP_BOOL("vfp", ARMv7MState, vfp, true), > + DEFINE_PROP_BOOL("dsp", ARMv7MState, dsp, true), > DEFINE_PROP_END_OF_LIST(), > }; -- Alex Bennée
diff --git a/include/hw/arm/armv7m.h b/include/hw/arm/armv7m.h index e96a98f8093..d2c74d3872a 100644 --- a/include/hw/arm/armv7m.h +++ b/include/hw/arm/armv7m.h @@ -43,6 +43,8 @@ typedef struct { * devices will be automatically layered on top of this view.) * + Property "idau": IDAU interface (forwarded to CPU object) * + Property "init-svtor": secure VTOR reset value (forwarded to CPU object) + * + Property "vfp": enable VFP (forwarded to CPU object) + * + Property "dsp": enable DSP (forwarded to CPU object) * + Property "enable-bitband": expose bitbanded IO */ typedef struct ARMv7MState { @@ -66,6 +68,8 @@ typedef struct ARMv7MState { uint32_t init_svtor; bool enable_bitband; bool start_powered_off; + bool vfp; + bool dsp; } ARMv7MState; #endif diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c index c4b2a9a1f5c..7caf9bd3364 100644 --- a/hw/arm/armv7m.c +++ b/hw/arm/armv7m.c @@ -190,6 +190,22 @@ static void armv7m_realize(DeviceState *dev, Error **errp) return; } } + if (object_property_find(OBJECT(s->cpu), "vfp", NULL)) { + object_property_set_bool(OBJECT(s->cpu), s->vfp, + "vfp", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } + } + if (object_property_find(OBJECT(s->cpu), "dsp", NULL)) { + object_property_set_bool(OBJECT(s->cpu), s->dsp, + "dsp", &err); + if (err != NULL) { + error_propagate(errp, err); + return; + } + } /* * Tell the CPU where the NVIC is; it will fail realize if it doesn't @@ -260,6 +276,8 @@ static Property armv7m_properties[] = { DEFINE_PROP_BOOL("enable-bitband", ARMv7MState, enable_bitband, false), DEFINE_PROP_BOOL("start-powered-off", ARMv7MState, start_powered_off, false), + DEFINE_PROP_BOOL("vfp", ARMv7MState, vfp, true), + DEFINE_PROP_BOOL("dsp", ARMv7MState, dsp, true), DEFINE_PROP_END_OF_LIST(), };
Create "vfp" and "dsp" properties on the armv7m container object which will be forwarded to its CPU object, so that SoCs can configure whether the CPU has these features. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- include/hw/arm/armv7m.h | 4 ++++ hw/arm/armv7m.c | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+)