Commit 3a062d57 authored by Julian Brown's avatar Julian Brown Committed by Peter Maydell
Browse files

target/arm: Add cfgend parameter for ARM CPU selection.



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: default avatarJulian 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: default avatarPeter Maydell <peter.maydell@linaro.org>
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 00909b58
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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)
@@ -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.
+7 −0
Original line number Diff line number Diff line
@@ -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;
};