From: Sergey Fedorov <serge.fdrv@gmail.com>
To: Greg Bellows <greg.bellows@linaro.org>,
qemu-devel@nongnu.org, peter.maydell@linaro.org,
alex.bennee@linaro.org
Subject: Re: [Qemu-devel] [[PATCH] 5/7] target-arm: Add TTBR regime function and use
Date: Mon, 20 Apr 2015 22:15:11 -0700 [thread overview]
Message-ID: <5535DCDF.8020606@gmail.com> (raw)
In-Reply-To: <1427483446-31900-6-git-send-email-greg.bellows@linaro.org>
On 27.03.2015 12:10, Greg Bellows wrote:
> Add a utility function for choosing the correct TTBR system register based on
> the specified MMU index. Add use of function on physical address lookup.
>
> Signed-off-by: Greg Bellows <greg.bellows@linaro.org>
> ---
> target-arm/helper.c | 44 ++++++++++++++++++++++++++++++++------------
> 1 file changed, 32 insertions(+), 12 deletions(-)
>
> diff --git a/target-arm/helper.c b/target-arm/helper.c
> index 00b457a..13fdf02 100644
> --- a/target-arm/helper.c
> +++ b/target-arm/helper.c
> @@ -4892,6 +4892,21 @@ static inline TCR *regime_tcr(CPUARMState *env, ARMMMUIdx mmu_idx)
> return &env->cp15.tcr_el[regime_el(env, mmu_idx)];
> }
>
> +/* Return the TTBR associated with this translation regime */
> +static inline uint32_t regime_ttbr(CPUARMState *env, ARMMMUIdx mmu_idx,
> + int ttbrn)
Should return uint64_t.
> +{
> + if (mmu_idx == ARMMMUIdx_S2NS) {
> + /* TODO: return VTTBR_EL2 */
> + g_assert_not_reached();
> + }
> + if (ttbrn == 0) {
> + return env->cp15.ttbr0_el[regime_el(env, mmu_idx)];
> + } else {
> + return env->cp15.ttbr1_el[regime_el(env, mmu_idx)];
> + }
> +}
> +
> /* Return true if the translation regime is using LPAE format page tables */
> static inline bool regime_using_lpae_format(CPUARMState *env,
> ARMMMUIdx mmu_idx)
> @@ -5090,7 +5105,6 @@ static bool get_level1_table_address(CPUARMState *env, ARMMMUIdx mmu_idx,
> uint32_t *table, uint32_t address)
> {
> /* Note that we can only get here for an AArch32 PL0/PL1 lookup */
> - int el = regime_el(env, mmu_idx);
> TCR *tcr = regime_tcr(env, mmu_idx);
>
> if (address & tcr->mask) {
> @@ -5098,13 +5112,13 @@ static bool get_level1_table_address(CPUARMState *env, ARMMMUIdx mmu_idx,
> /* Translation table walk disabled for TTBR1 */
> return false;
> }
> - *table = env->cp15.ttbr1_el[el] & 0xffffc000;
> + *table = regime_ttbr(env, mmu_idx, 1) & 0xffffc000;
> } else {
> if (tcr->raw_tcr & TTBCR_PD0) {
> /* Translation table walk disabled for TTBR0 */
> return false;
> }
> - *table = env->cp15.ttbr0_el[el] & tcr->base_mask;
> + *table = regime_ttbr(env, mmu_idx, 0) & tcr->base_mask;
> }
> *table |= (address >> 18) & 0x3ffc;
> return true;
> @@ -5376,20 +5390,26 @@ static int get_phys_addr_lpae(CPUARMState *env, target_ulong address,
> int32_t tbi = 0;
> TCR *tcr = regime_tcr(env, mmu_idx);
> int ap, ns, xn, pxn;
> + uint32_t el = regime_el(env, mmu_idx);
>
> /* TODO:
> * This code assumes we're either a 64-bit EL1 or a 32-bit PL1;
> - * it doesn't handle the different format TCR for TCR_EL2, TCR_EL3,
> - * and VTCR_EL2, or the fact that those regimes don't have a split
> + * it doesn't handle the different format TCR for and VTCR_EL2,
> + * or the fact that those regimes don't have a split
> * TTBR0/TTBR1. Attribute and permission bit handling should also
> * be checked when adding support for those page table walks.
> */
> - if (arm_el_is_aa64(env, regime_el(env, mmu_idx))) {
> + if (arm_el_is_aa64(env, el)) {
> va_size = 64;
> - if (extract64(address, 55, 1))
> - tbi = extract64(tcr->raw_tcr, 38, 1);
> - else
> - tbi = extract64(tcr->raw_tcr, 37, 1);
> + if (el == 3 || el == 2) {
> + tbi = extract64(tcr->raw_tcr, 20, 1);
> + } else {
> + if (extract64(address, 55, 1)) {
> + tbi = extract64(tcr->raw_tcr, 38, 1);
> + } else {
> + tbi = extract64(tcr->raw_tcr, 37, 1);
> + }
> + }
> tbi *= 8;
> }
>
> @@ -5434,7 +5454,7 @@ static int get_phys_addr_lpae(CPUARMState *env, target_ulong address,
> * we will always flush the TLB any time the ASID is changed).
> */
> if (ttbr_select == 0) {
> - ttbr = A32_BANKED_CURRENT_REG_GET(env, ttbr0);
> + ttbr = regime_ttbr(env, mmu_idx, 0);
> epd = extract32(tcr->raw_tcr, 7, 1);
> tsz = t0sz;
>
> @@ -5446,7 +5466,7 @@ static int get_phys_addr_lpae(CPUARMState *env, target_ulong address,
> granule_sz = 11;
> }
> } else {
> - ttbr = A32_BANKED_CURRENT_REG_GET(env, ttbr1);
> + ttbr = regime_ttbr(env, mmu_idx, 1);
> epd = extract32(tcr->raw_tcr, 23, 1);
> tsz = t1sz;
>
next prev parent reply other threads:[~2015-04-21 5:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-27 19:10 [Qemu-devel] [[PATCH] 0/7] target-arm: EL3 trap support Greg Bellows
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 1/7] target-arm: Add exception target el infrastructure Greg Bellows
2015-04-16 17:50 ` Peter Maydell
2015-04-16 21:39 ` Greg Bellows
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 2/7] target-arm: Extend helpers to route exceptions Greg Bellows
2015-04-16 17:51 ` Peter Maydell
2015-04-21 22:13 ` Greg Bellows
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 3/7] target-arm: Update interrupt handling to use target EL Greg Bellows
2015-04-16 17:52 ` Peter Maydell
2015-04-16 21:03 ` Greg Bellows
2015-04-16 21:26 ` Peter Maydell
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 4/7] target-arm: Add AArch64 CPTR registers Greg Bellows
2015-04-16 18:00 ` Peter Maydell
2015-04-20 19:57 ` Greg Bellows
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 5/7] target-arm: Add TTBR regime function and use Greg Bellows
2015-03-27 23:25 ` Sergey Fedorov
2015-04-16 18:03 ` Peter Maydell
2015-04-17 18:29 ` Greg Bellows
2015-04-21 5:15 ` Sergey Fedorov [this message]
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 6/7] target-arm: Add WFx syndrome function Greg Bellows
2015-04-16 18:05 ` Peter Maydell
2015-03-27 19:10 ` [Qemu-devel] [[PATCH] 7/7] target-arm: Add WFx instruction trap support Greg Bellows
2015-04-16 18:22 ` Peter Maydell
2015-04-17 15:47 ` Greg Bellows
2015-04-17 15:50 ` 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=5535DCDF.8020606@gmail.com \
--to=serge.fdrv@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=greg.bellows@linaro.org \
--cc=peter.maydell@linaro.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.