|
|
@ -1500,6 +1500,7 @@ static void arm_cpu_initfn(Object *obj) |
|
|
* 0 means "unset, use the default value". That default might vary depending |
|
|
* 0 means "unset, use the default value". That default might vary depending |
|
|
* on the CPU type, and is set in the realize fn. |
|
|
* on the CPU type, and is set in the realize fn. |
|
|
*/ |
|
|
*/ |
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
static const Property arm_cpu_gt_cntfrq_property = |
|
|
static const Property arm_cpu_gt_cntfrq_property = |
|
|
DEFINE_PROP_UINT64("cntfrq", ARMCPU, gt_cntfrq_hz, 0); |
|
|
DEFINE_PROP_UINT64("cntfrq", ARMCPU, gt_cntfrq_hz, 0); |
|
|
|
|
|
|
|
|
@ -1509,7 +1510,6 @@ static const Property arm_cpu_reset_cbar_property = |
|
|
static const Property arm_cpu_reset_hivecs_property = |
|
|
static const Property arm_cpu_reset_hivecs_property = |
|
|
DEFINE_PROP_BOOL("reset-hivecs", ARMCPU, reset_hivecs, false); |
|
|
DEFINE_PROP_BOOL("reset-hivecs", ARMCPU, reset_hivecs, false); |
|
|
|
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
|
|
|
static const Property arm_cpu_has_el2_property = |
|
|
static const Property arm_cpu_has_el2_property = |
|
|
DEFINE_PROP_BOOL("has_el2", ARMCPU, has_el2, true); |
|
|
DEFINE_PROP_BOOL("has_el2", ARMCPU, has_el2, true); |
|
|
|
|
|
|
|
|
@ -1532,6 +1532,7 @@ static const Property arm_cpu_has_neon_property = |
|
|
static const Property arm_cpu_has_dsp_property = |
|
|
static const Property arm_cpu_has_dsp_property = |
|
|
DEFINE_PROP_BOOL("dsp", ARMCPU, has_dsp, true); |
|
|
DEFINE_PROP_BOOL("dsp", ARMCPU, has_dsp, true); |
|
|
|
|
|
|
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
static const Property arm_cpu_has_mpu_property = |
|
|
static const Property arm_cpu_has_mpu_property = |
|
|
DEFINE_PROP_BOOL("has-mpu", ARMCPU, has_mpu, true); |
|
|
DEFINE_PROP_BOOL("has-mpu", ARMCPU, has_mpu, true); |
|
|
|
|
|
|
|
|
@ -1544,6 +1545,7 @@ static const Property arm_cpu_pmsav7_dregion_property = |
|
|
DEFINE_PROP_UNSIGNED_NODEFAULT("pmsav7-dregion", ARMCPU, |
|
|
DEFINE_PROP_UNSIGNED_NODEFAULT("pmsav7-dregion", ARMCPU, |
|
|
pmsav7_dregion, |
|
|
pmsav7_dregion, |
|
|
qdev_prop_uint32, uint32_t); |
|
|
qdev_prop_uint32, uint32_t); |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
static bool arm_get_pmu(Object *obj, Error **errp) |
|
|
static bool arm_get_pmu(Object *obj, Error **errp) |
|
|
{ |
|
|
{ |
|
|
@ -1731,6 +1733,7 @@ static void arm_cpu_post_init(Object *obj) |
|
|
"Set on/off to enable/disable aarch64 " |
|
|
"Set on/off to enable/disable aarch64 " |
|
|
"execution state "); |
|
|
"execution state "); |
|
|
} |
|
|
} |
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_CBAR) || |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_CBAR) || |
|
|
arm_feature(&cpu->env, ARM_FEATURE_CBAR_RO)) { |
|
|
arm_feature(&cpu->env, ARM_FEATURE_CBAR_RO)) { |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_cbar_property); |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_reset_cbar_property); |
|
|
@ -1746,7 +1749,6 @@ static void arm_cpu_post_init(Object *obj) |
|
|
OBJ_PROP_FLAG_READWRITE); |
|
|
OBJ_PROP_FLAG_READWRITE); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
|
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_EL3)) { |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_EL3)) { |
|
|
/* Add the has_el3 state CPU property only if EL3 is allowed. This will
|
|
|
/* Add the has_el3 state CPU property only if EL3 is allowed. This will
|
|
|
* prevent "has_el3" from existing on CPUs which cannot support EL3. |
|
|
* prevent "has_el3" from existing on CPUs which cannot support EL3. |
|
|
@ -1818,6 +1820,7 @@ static void arm_cpu_post_init(Object *obj) |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_has_dsp_property); |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_has_dsp_property); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_PMSA)) { |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_PMSA)) { |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_has_mpu_property); |
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_has_mpu_property); |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_V7)) { |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_V7)) { |
|
|
@ -1854,8 +1857,6 @@ static void arm_cpu_post_init(Object *obj) |
|
|
&cpu->psci_conduit, |
|
|
&cpu->psci_conduit, |
|
|
OBJ_PROP_FLAG_READWRITE); |
|
|
OBJ_PROP_FLAG_READWRITE); |
|
|
|
|
|
|
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property); |
|
|
|
|
|
|
|
|
|
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) { |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER)) { |
|
|
qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property); |
|
|
qdev_property_add_static(DEVICE(cpu), &arm_cpu_gt_cntfrq_property); |
|
|
} |
|
|
} |
|
|
@ -1864,7 +1865,6 @@ static void arm_cpu_post_init(Object *obj) |
|
|
kvm_arm_add_vcpu_properties(cpu); |
|
|
kvm_arm_add_vcpu_properties(cpu); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#ifndef CONFIG_USER_ONLY |
|
|
|
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64) && |
|
|
if (arm_feature(&cpu->env, ARM_FEATURE_AARCH64) && |
|
|
cpu_isar_feature(aa64_mte, cpu)) { |
|
|
cpu_isar_feature(aa64_mte, cpu)) { |
|
|
object_property_add_link(obj, "tag-memory", |
|
|
object_property_add_link(obj, "tag-memory", |
|
|
@ -1882,6 +1882,7 @@ static void arm_cpu_post_init(Object *obj) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static void arm_cpu_finalizefn(Object *obj) |
|
|
static void arm_cpu_finalizefn(Object *obj) |
|
|
|