From: Sergey Fedorov <sergey.fedorov@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-arm] [PATCH 1/4] target-arm: Correctly reset SCTLR_EL3 for 64-bit CPUs
Date: Mon, 4 Apr 2016 17:13:57 +0300 [thread overview]
Message-ID: <570276A5.1070505@linaro.org> (raw)
In-Reply-To: <1459435778-5526-2-git-send-email-peter.maydell@linaro.org>
On 31/03/16 17:49, Peter Maydell wrote:
> The regdef for SCTRL_EL3 was incorrectly marked as being an
> ARM_CP_ALIAS, with the remark that this was because the 32-bit
> definition would take care of reset and migration. However the
> intention for banked registers as documented in the comment in
> add_cpreg_to_hashtable() is:
>
> * 2) If ARMv8 is enabled then we can count on a 64-bit version
> * taking care of the secure bank. This requires that separate
> * 32 and 64-bit definitions are provided.
>
> and so it marks the 32-bit secure banked version as an alias.
> This results in the sctlr_s/sctlr_el[3] field never being reset
> or migrated for a 64-bit CPU with EL3 enabled.
>
> Fix this by removing the ARM_CP_ALIAS annotation from SCTLR_EL3.
> Since this means it now needs a real reset value, move the regdef
> into the same place that we define the 32-bit SCTLR.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Sergey Fedorov <sergey.fedorov@linaro.org>
> ---
> target-arm/helper.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/target-arm/helper.c b/target-arm/helper.c
> index 19d5d52..e583e6a 100644
> --- a/target-arm/helper.c
> +++ b/target-arm/helper.c
> @@ -3744,11 +3744,6 @@ static const ARMCPRegInfo el3_cp_reginfo[] = {
> .access = PL1_RW, .accessfn = access_trap_aa32s_el1,
> .writefn = vbar_write, .resetvalue = 0,
> .fieldoffset = offsetof(CPUARMState, cp15.mvbar) },
> - { .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
> - .type = ARM_CP_ALIAS, /* reset handled by AArch32 view */
> - .opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
> - .access = PL3_RW, .raw_writefn = raw_write, .writefn = sctlr_write,
> - .fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]) },
> { .name = "TTBR0_EL3", .state = ARM_CP_STATE_AA64,
> .opc0 = 3, .opc1 = 6, .crn = 2, .crm = 0, .opc2 = 0,
> .access = PL3_RW, .writefn = vmsa_ttbr_write, .resetvalue = 0,
> @@ -4641,12 +4636,20 @@ void register_cp_regs_for_features(ARMCPU *cpu)
> }
> if (arm_feature(env, ARM_FEATURE_EL3)) {
> define_arm_cp_regs(cpu, el3_cp_reginfo);
> - ARMCPRegInfo rvbar = {
> - .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
> - .opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
> - .type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar
> + ARMCPRegInfo el3_regs[] = {
> + { .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
> + .opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
> + .type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar },
> + { .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
> + .opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
> + .access = PL3_RW,
> + .raw_writefn = raw_write, .writefn = sctlr_write,
> + .fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]),
> + .resetvalue = cpu->reset_sctlr },
> + REGINFO_SENTINEL
> };
> - define_one_arm_cp_reg(cpu, &rvbar);
> +
> + define_arm_cp_regs(cpu, el3_regs);
> }
> /* The behaviour of NSACR is sufficiently various that we don't
> * try to describe it in a single reginfo:
WARNING: multiple messages have this Message-ID (diff)
From: Sergey Fedorov <sergey.fedorov@linaro.org>
To: Peter Maydell <peter.maydell@linaro.org>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [PATCH 1/4] target-arm: Correctly reset SCTLR_EL3 for 64-bit CPUs
Date: Mon, 4 Apr 2016 17:13:57 +0300 [thread overview]
Message-ID: <570276A5.1070505@linaro.org> (raw)
In-Reply-To: <1459435778-5526-2-git-send-email-peter.maydell@linaro.org>
On 31/03/16 17:49, Peter Maydell wrote:
> The regdef for SCTRL_EL3 was incorrectly marked as being an
> ARM_CP_ALIAS, with the remark that this was because the 32-bit
> definition would take care of reset and migration. However the
> intention for banked registers as documented in the comment in
> add_cpreg_to_hashtable() is:
>
> * 2) If ARMv8 is enabled then we can count on a 64-bit version
> * taking care of the secure bank. This requires that separate
> * 32 and 64-bit definitions are provided.
>
> and so it marks the 32-bit secure banked version as an alias.
> This results in the sctlr_s/sctlr_el[3] field never being reset
> or migrated for a 64-bit CPU with EL3 enabled.
>
> Fix this by removing the ARM_CP_ALIAS annotation from SCTLR_EL3.
> Since this means it now needs a real reset value, move the regdef
> into the same place that we define the 32-bit SCTLR.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Sergey Fedorov <sergey.fedorov@linaro.org>
> ---
> target-arm/helper.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/target-arm/helper.c b/target-arm/helper.c
> index 19d5d52..e583e6a 100644
> --- a/target-arm/helper.c
> +++ b/target-arm/helper.c
> @@ -3744,11 +3744,6 @@ static const ARMCPRegInfo el3_cp_reginfo[] = {
> .access = PL1_RW, .accessfn = access_trap_aa32s_el1,
> .writefn = vbar_write, .resetvalue = 0,
> .fieldoffset = offsetof(CPUARMState, cp15.mvbar) },
> - { .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
> - .type = ARM_CP_ALIAS, /* reset handled by AArch32 view */
> - .opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
> - .access = PL3_RW, .raw_writefn = raw_write, .writefn = sctlr_write,
> - .fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]) },
> { .name = "TTBR0_EL3", .state = ARM_CP_STATE_AA64,
> .opc0 = 3, .opc1 = 6, .crn = 2, .crm = 0, .opc2 = 0,
> .access = PL3_RW, .writefn = vmsa_ttbr_write, .resetvalue = 0,
> @@ -4641,12 +4636,20 @@ void register_cp_regs_for_features(ARMCPU *cpu)
> }
> if (arm_feature(env, ARM_FEATURE_EL3)) {
> define_arm_cp_regs(cpu, el3_cp_reginfo);
> - ARMCPRegInfo rvbar = {
> - .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
> - .opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
> - .type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar
> + ARMCPRegInfo el3_regs[] = {
> + { .name = "RVBAR_EL3", .state = ARM_CP_STATE_AA64,
> + .opc0 = 3, .opc1 = 6, .crn = 12, .crm = 0, .opc2 = 1,
> + .type = ARM_CP_CONST, .access = PL3_R, .resetvalue = cpu->rvbar },
> + { .name = "SCTLR_EL3", .state = ARM_CP_STATE_AA64,
> + .opc0 = 3, .opc1 = 6, .crn = 1, .crm = 0, .opc2 = 0,
> + .access = PL3_RW,
> + .raw_writefn = raw_write, .writefn = sctlr_write,
> + .fieldoffset = offsetof(CPUARMState, cp15.sctlr_el[3]),
> + .resetvalue = cpu->reset_sctlr },
> + REGINFO_SENTINEL
> };
> - define_one_arm_cp_reg(cpu, &rvbar);
> +
> + define_arm_cp_regs(cpu, el3_regs);
> }
> /* The behaviour of NSACR is sufficiently various that we don't
> * try to describe it in a single reginfo:
next prev parent reply other threads:[~2016-04-04 14:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-31 14:49 [Qemu-arm] [PATCH for-2.6 0/4] various regdef fixes for EL2/EL3 regs Peter Maydell
2016-03-31 14:49 ` [Qemu-devel] " Peter Maydell
2016-03-31 14:49 ` [Qemu-arm] [PATCH 1/4] target-arm: Correctly reset SCTLR_EL3 for 64-bit CPUs Peter Maydell
2016-03-31 14:49 ` [Qemu-devel] " Peter Maydell
2016-03-31 14:59 ` [Qemu-arm] " Laurent Desnogues
2016-03-31 14:59 ` Laurent Desnogues
2016-04-04 14:13 ` Sergey Fedorov [this message]
2016-04-04 14:13 ` Sergey Fedorov
2016-03-31 14:49 ` [Qemu-arm] [PATCH 2/4] target-arm: Remove incorrect ALIAS tags from ESR_EL2 and ESR_EL3 Peter Maydell
2016-03-31 14:49 ` [Qemu-devel] " Peter Maydell
2016-04-04 14:16 ` [Qemu-arm] " Sergey Fedorov
2016-04-04 14:16 ` [Qemu-devel] " Sergey Fedorov
2016-03-31 14:49 ` [Qemu-arm] [PATCH 3/4] target-arm: Make the 64-bit version of VTCR do the migration Peter Maydell
2016-03-31 14:49 ` [Qemu-devel] " Peter Maydell
2016-04-04 14:22 ` [Qemu-arm] " Sergey Fedorov
2016-04-04 14:22 ` [Qemu-devel] " Sergey Fedorov
2016-03-31 14:49 ` [Qemu-arm] [PATCH 4/4] target-arm: Avoid unnecessary TLB flush on TCR_EL2 writes Peter Maydell
2016-03-31 14:49 ` [Qemu-devel] " Peter Maydell
2016-04-04 14:58 ` [Qemu-arm] " Sergey Fedorov
2016-04-04 14:58 ` [Qemu-devel] " Sergey Fedorov
2016-04-04 15:01 ` [Qemu-arm] " Peter Maydell
2016-04-04 15:01 ` [Qemu-devel] " Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=570276A5.1070505@linaro.org \
--to=sergey.fedorov@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.