All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: "QEMU Developers" <qemu-devel@nongnu.org>,
	"Alexander Graf" <agraf@suse.de>,
	"Sergey Fedorov" <serge.fdrv@gmail.com>,
	"Laurent Desnogues" <laurent.desnogues@gmail.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>,
	"Alex Bennée" <alex.bennee@linaro.org>
Subject: Re: [Qemu-devel] [PATCH v4 13/13] target-arm: Add support for S1 + S2 MMU translations
Date: Mon, 26 Oct 2015 13:33:14 +0100	[thread overview]
Message-ID: <20151026123314.GF3751@toto> (raw)
In-Reply-To: <CAFEAcA-c5Os9-r=-9U6DzuLNCp8eRKMSfDwU=iv4cFnk+ww1xQ@mail.gmail.com>

On Fri, Oct 23, 2015 at 06:09:24PM +0100, Peter Maydell wrote:
> On 14 October 2015 at 23:55, Edgar E. Iglesias <edgar.iglesias@gmail.com> wrote:
> > From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
> >
> > Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
> > ---
> >  target-arm/helper.c | 44 +++++++++++++++++++++++++++++++++++++-------
> >  1 file changed, 37 insertions(+), 7 deletions(-)
> >
> > diff --git a/target-arm/helper.c b/target-arm/helper.c
> > index 69e24e1..9d70ef2 100644
> > --- a/target-arm/helper.c
> > +++ b/target-arm/helper.c
> > @@ -7129,14 +7129,44 @@ static bool get_phys_addr(CPUARMState *env, target_ulong address,
> >                            ARMMMUFaultInfo *fi)
> >  {
> >      if (mmu_idx == ARMMMUIdx_S12NSE0 || mmu_idx == ARMMMUIdx_S12NSE1) {
> > -        /* TODO: when we support EL2 we should here call ourselves recursively
> > -         * to do the stage 1 and then stage 2 translations. The arm_ld*_ptw
> > -         * functions will also need changing to perform ARMMMUIdx_S2NS loads
> > -         * rather than direct physical memory loads when appropriate.
> > -         * For non-EL2 CPUs a stage1+stage2 translation is just stage 1.
> > +        /* Call ourselves recursively to do the stage 1 and then stage 2
> > +         * translations.
> >           */
> > -        assert(!arm_feature(env, ARM_FEATURE_EL2));
> > -        mmu_idx += ARMMMUIdx_S1NSE0;
> > +        if (arm_feature(env, ARM_FEATURE_EL2)) {
> > +            hwaddr ipa;
> > +            int s2_prot;
> > +            int ret;
> > +
> > +            ret = get_phys_addr(env, address, access_type,
> > +                                mmu_idx + ARMMMUIdx_S1NSE0, &ipa, attrs,
> > +                                prot, page_size, fsr, fi);
> > +
> > +            /* If S1 fails or S2 is disabled, return early.  */
> > +            if (ret || regime_translation_disabled(env, ARMMMUIdx_S2NS)) {
> > +                if (ret && fi->stage2) {
> > +                    /* This is a S2 error while doing S1 PTW.  */
> > +                    env->cp15.hpfar_el2 = extract64(fi->s2addr, 12, 47) << 4;
> 
> Might be worth a note that it's OK to set the HPFAR here because
> this always results in a fault (even if from an AT instruction),
> whereas we can't set the FAR registers here because that doesn't
> happen for stage 1 faults from AT instructions.
> 
> ...I think we still need to add the code to cause the exception
> if a stage 1 AT instruction results in a stage 2 fault, right?

Yes, those faults are still missing... I can try to add them
in the next round/series together with the detailed error reporting.


> If the caller has to look into the FaultInfo struct anyway, maybe
> we should just let the caller set the HPFAR_EL2 from the s2addr
> if it's going to send the exception to EL2.


Agreed, I've moved the setting of HPFAR_EL2 to the callers.

Thanks!
Edgar



> 
> > +                }
> > +                *phys_ptr = ipa;
> > +                return ret;
> > +            }
> > +
> > +            /* S1 is done. Now do S2 translation.  */
> > +            ret = get_phys_addr_lpae(env, ipa, access_type, ARMMMUIdx_S2NS,
> > +                                     phys_ptr, attrs, &s2_prot,
> > +                                     page_size, fsr, fi);
> > +            if (ret) {
> > +                env->cp15.hpfar_el2 = extract64(ipa, 12, 47) << 4;
> > +            }
> > +            /* Combine the S1 and S2 perms.  */
> > +            *prot &= s2_prot;
> > +            return ret;
> > +        } else {
> > +            /*
> > +             * For non-EL2 CPUs a stage1+stage2 translation is just stage 1.
> > +             */
> > +            mmu_idx += ARMMMUIdx_S1NSE0;
> > +        }
> >      }
> >
> >      /* The page table entries may downgrade secure to non-secure, but
> > --
> > 1.9.1
> >
> 
> thanks
> -- PMM

      reply	other threads:[~2015-10-26 12:33 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-14 22:55 [Qemu-devel] [PATCH v4 00/13] arm: Steps towards EL2 support round 5 Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 01/13] target-arm: Add HPFAR_EL2 Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 02/13] target-arm: lpae: Make t0sz and t1sz signed integers Edgar E. Iglesias
2015-10-23 15:33   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 03/13] target-arm: Add support for AArch32 S2 negative t0sz Edgar E. Iglesias
2015-10-23 15:29   ` Peter Maydell
2015-10-26  9:20     ` Edgar E. Iglesias
2015-10-26  9:52       ` Peter Maydell
2015-10-26 10:57         ` Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 04/13] target-arm: lpae: Replace tsz with computed inputsize Edgar E. Iglesias
2015-10-23 15:31   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 05/13] target-arm: lpae: Rename granule_sz to stride Edgar E. Iglesias
2015-10-23 15:32   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 06/13] target-arm: Add computation of starting level for S2 PTW Edgar E. Iglesias
2015-10-23 16:26   ` Peter Maydell
2015-10-26  9:42     ` Edgar E. Iglesias
2015-10-26  9:44     ` Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 07/13] target-arm: Add support for S2 page-table protection bits Edgar E. Iglesias
2015-10-23 16:28   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 08/13] target-arm: Avoid inline for get_phys_addr Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 09/13] target-arm: Add ARMMMUFaultInfo Edgar E. Iglesias
2015-10-23 16:53   ` Peter Maydell
2015-10-26  9:53     ` Edgar E. Iglesias
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 10/13] target-arm: Add S2 translation to 64bit S1 PTWs Edgar E. Iglesias
2015-10-23 17:12   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 11/13] target-arm: Add S2 translation to 32bit " Edgar E. Iglesias
2015-10-23 17:12   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 12/13] target-arm: Route S2 MMU faults to EL2 Edgar E. Iglesias
2015-10-23 16:56   ` Peter Maydell
2015-10-14 22:55 ` [Qemu-devel] [PATCH v4 13/13] target-arm: Add support for S1 + S2 MMU translations Edgar E. Iglesias
2015-10-23 17:09   ` Peter Maydell
2015-10-26 12:33     ` Edgar E. Iglesias [this message]

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=20151026123314.GF3751@toto \
    --to=edgar.iglesias@xilinx.com \
    --cc=agraf@suse.de \
    --cc=alex.bennee@linaro.org \
    --cc=edgar.iglesias@gmail.com \
    --cc=laurent.desnogues@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=serge.fdrv@gmail.com \
    /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.