Skip to content

Commit

Permalink
target/arm: Add cfgend parameter for ARM CPU selection.
Browse files Browse the repository at this point in the history
Add a new "cfgend" property which selects whether the CPU resets into
big-endian mode or not.  This setting affects whether we reset with
SCTLR_B (ARMv6 and earlier) or SCTLR_EE (ARMv7 and later) set.

Signed-off-by: Julian Brown <julian@codesourcery.com>
Message-id: 11420d1c49636c1790e60578ee996e51f0f0b835.1484929304.git.julian@codesourcery.com
[PMM: use error_report_err() rather than error_report();
 move the integratorcp changes to their own patch;
 drop an unnecessary extra #include;
 rephrase commit message accordingly;
 move setting of reset_sctlr above registration of cpregs
 so it actually has an effect]
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
jtb20 authored and pm215 committed Feb 7, 2017
1 parent 00909b5 commit 3a062d5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
13 changes: 13 additions & 0 deletions target/arm/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,9 @@ static Property arm_cpu_has_el2_property =
static Property arm_cpu_has_el3_property =
DEFINE_PROP_BOOL("has_el3", ARMCPU, has_el3, true);

static Property arm_cpu_cfgend_property =
DEFINE_PROP_BOOL("cfgend", ARMCPU, cfgend, false);

/* use property name "pmu" to match other archs and virt tools */
static Property arm_cpu_has_pmu_property =
DEFINE_PROP_BOOL("pmu", ARMCPU, has_pmu, true);
Expand Down Expand Up @@ -608,6 +611,8 @@ static void arm_cpu_post_init(Object *obj)
}
}

qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property,
&error_abort);
}

static void arm_cpu_finalizefn(Object *obj)
Expand Down Expand Up @@ -728,6 +733,14 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
cpu->reset_sctlr |= (1 << 13);
}

if (cpu->cfgend) {
if (arm_feature(&cpu->env, ARM_FEATURE_V7)) {
cpu->reset_sctlr |= SCTLR_EE;
} else {
cpu->reset_sctlr |= SCTLR_B;
}
}

if (!cpu->has_el3) {
/* If the has_el3 CPU property is disabled then we need to disable the
* feature.
Expand Down
7 changes: 7 additions & 0 deletions target/arm/cpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,13 @@ struct ARMCPU {
int gic_vpribits; /* number of virtual priority bits */
int gic_vprebits; /* number of virtual preemption bits */

/* Whether the cfgend input is high (i.e. this CPU should reset into
* big-endian mode). This setting isn't used directly: instead it modifies
* the reset_sctlr value to have SCTLR_B or SCTLR_EE set, depending on the
* architecture version.
*/
bool cfgend;

ARMELChangeHook *el_change_hook;
void *el_change_hook_opaque;
};
Expand Down

0 comments on commit 3a062d5

Please sign in to comment.