All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@kaod.org>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH 01/10] ppc: Fix rfi/rfid/hrfi/... emulation
Date: Fri, 17 Jun 2016 08:03:29 +0200	[thread overview]
Message-ID: <576392B1.6030204@kaod.org> (raw)
In-Reply-To: <57639095.5010305@kaod.org>

On 06/17/2016 07:54 AM, Cédric Le Goater wrote:
> On 06/17/2016 04:27 AM, David Gibson wrote:
>> On Thu, Jun 16, 2016 at 11:07:02AM +1000, David Gibson wrote:
>>> On Mon, Jun 13, 2016 at 07:24:47AM +0200, Cédric Le Goater wrote:
>>>> From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>>>>
>>>> This reworks emulation of the various "rfi" variants. I removed
>>>> some masking bits that I couldn't make sense of, the only bit that
>>>> I am aware we should mask here is POW, the CPU's MSR mask should
>>>> take care of the rest.
>>>>
>>>> This also fixes some problems when running 32-bit userspace under
>>>> a 64-bit kernel.
>>>>
>>>> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>>>
>>> I've merged this patch to ppc-for-2.7.
>>
>> ..and now I've removed it again.  It seems that this breaks Thomas'
>> new test that OpenBIOS runs on the mac machine types.  Not sure why,
>> but we need to figure that out before I apply.
> 
> Just this patch ? I booted a macosx image with it. but maybe just a mac99.
> I will check today.

With your branch ppc-for-2.7 (at commit aba2e6258d86) + the 
"ppc: Fix rfi/rfid/hrfi/... emulation" patch, these guests : 

	qemu-system-ppc -cdrom ./darwinppc-602.cdr -boot d 
	qemu-system-ppc -M mac99 -cdrom ./darwinppc-602.cdr -boot d 

reach the installer macosx installer.

C.

>>> The reset of the series I'd like to see a respin for, even if it's
>>> just to clean up the commit messages.
>>>
>>>> ---
>>>>  target-ppc/excp_helper.c | 51 +++++++++++++++++++-----------------------------
>>>>  target-ppc/translate.c   |  7 +++++++
>>>>  2 files changed, 27 insertions(+), 31 deletions(-)
>>>>
>>>> diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c
>>>> index 30e960e30b63..aa0b63f4b0de 100644
>>>> --- a/target-ppc/excp_helper.c
>>>> +++ b/target-ppc/excp_helper.c
>>>> @@ -922,25 +922,20 @@ void helper_store_msr(CPUPPCState *env, target_ulong val)
>>>>      }
>>>>  }
>>>>  
>>>> -static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr,
>>>> -                          target_ulong msrm, int keep_msrh)
>>>> +static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr)
>>>>  {
>>>>      CPUState *cs = CPU(ppc_env_get_cpu(env));
>>>>  
>>>> +    /* MSR:POW cannot be set by any form of rfi */
>>>> +    msr &= ~(1ULL << MSR_POW);
>>>> +
>>>>  #if defined(TARGET_PPC64)
>>>> -    if (msr_is_64bit(env, msr)) {
>>>> -        nip = (uint64_t)nip;
>>>> -        msr &= (uint64_t)msrm;
>>>> -    } else {
>>>> +    /* Switching to 32-bit ? Crop the nip */
>>>> +    if (!msr_is_64bit(env, msr)) {
>>>>          nip = (uint32_t)nip;
>>>> -        msr = (uint32_t)(msr & msrm);
>>>> -        if (keep_msrh) {
>>>> -            msr |= env->msr & ~((uint64_t)0xFFFFFFFF);
>>>> -        }
>>>>      }
>>>>  #else
>>>>      nip = (uint32_t)nip;
>>>> -    msr &= (uint32_t)msrm;
>>>>  #endif
>>>>      /* XXX: beware: this is false if VLE is supported */
>>>>      env->nip = nip & ~((target_ulong)0x00000003);
>>>> @@ -959,26 +954,24 @@ static inline void do_rfi(CPUPPCState *env, target_ulong nip, target_ulong msr,
>>>>  
>>>>  void helper_rfi(CPUPPCState *env)
>>>>  {
>>>> -    if (env->excp_model == POWERPC_EXCP_BOOKE) {
>>>> -        do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>>>> -               ~((target_ulong)0), 0);
>>>> -    } else {
>>>> -        do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>>>> -               ~((target_ulong)0x783F0000), 1);
>>>> -    }
>>>> +    do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1] & 0xfffffffful);
>>>>  }
>>>>  
>>>> +#define MSR_BOOK3S_MASK
>>>>  #if defined(TARGET_PPC64)
>>>>  void helper_rfid(CPUPPCState *env)
>>>>  {
>>>> -    do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1],
>>>> -           ~((target_ulong)0x783F0000), 0);
>>>> +    /* The architeture defines a number of rules for which bits
>>>> +     * can change but in practice, we handle this in hreg_store_msr()
>>>> +     * which will be called by do_rfi(), so there is no need to filter
>>>> +     * here
>>>> +     */
>>>> +    do_rfi(env, env->spr[SPR_SRR0], env->spr[SPR_SRR1]);
>>>>  }
>>>>  
>>>>  void helper_hrfid(CPUPPCState *env)
>>>>  {
>>>> -    do_rfi(env, env->spr[SPR_HSRR0], env->spr[SPR_HSRR1],
>>>> -           ~((target_ulong)0x783F0000), 0);
>>>> +    do_rfi(env, env->spr[SPR_HSRR0], env->spr[SPR_HSRR1]);
>>>>  }
>>>>  #endif
>>>>  
>>>> @@ -986,28 +979,24 @@ void helper_hrfid(CPUPPCState *env)
>>>>  /* Embedded PowerPC specific helpers */
>>>>  void helper_40x_rfci(CPUPPCState *env)
>>>>  {
>>>> -    do_rfi(env, env->spr[SPR_40x_SRR2], env->spr[SPR_40x_SRR3],
>>>> -           ~((target_ulong)0xFFFF0000), 0);
>>>> +    do_rfi(env, env->spr[SPR_40x_SRR2], env->spr[SPR_40x_SRR3]);
>>>>  }
>>>>  
>>>>  void helper_rfci(CPUPPCState *env)
>>>>  {
>>>> -    do_rfi(env, env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1],
>>>> -           ~((target_ulong)0), 0);
>>>> +    do_rfi(env, env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1]);
>>>>  }
>>>>  
>>>>  void helper_rfdi(CPUPPCState *env)
>>>>  {
>>>>      /* FIXME: choose CSRR1 or DSRR1 based on cpu type */
>>>> -    do_rfi(env, env->spr[SPR_BOOKE_DSRR0], env->spr[SPR_BOOKE_DSRR1],
>>>> -           ~((target_ulong)0), 0);
>>>> +    do_rfi(env, env->spr[SPR_BOOKE_DSRR0], env->spr[SPR_BOOKE_DSRR1]);
>>>>  }
>>>>  
>>>>  void helper_rfmci(CPUPPCState *env)
>>>>  {
>>>>      /* FIXME: choose CSRR1 or MCSRR1 based on cpu type */
>>>> -    do_rfi(env, env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1],
>>>> -           ~((target_ulong)0), 0);
>>>> +    do_rfi(env, env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1]);
>>>>  }
>>>>  #endif
>>>>  
>>>> @@ -1045,7 +1034,7 @@ void helper_td(CPUPPCState *env, target_ulong arg1, target_ulong arg2,
>>>>  
>>>>  void helper_rfsvc(CPUPPCState *env)
>>>>  {
>>>> -    do_rfi(env, env->lr, env->ctr, 0x0000FFFF, 0);
>>>> +    do_rfi(env, env->lr, env->ctr & 0x0000FFFF);
>>>>  }
>>>>  
>>>>  /* Embedded.Processor Control */
>>>> diff --git a/target-ppc/translate.c b/target-ppc/translate.c
>>>> index b6894751e8df..a02ddf52bfe6 100644
>>>> --- a/target-ppc/translate.c
>>>> +++ b/target-ppc/translate.c
>>>> @@ -4087,6 +4087,13 @@ static void gen_rfi(DisasContext *ctx)
>>>>  #if defined(CONFIG_USER_ONLY)
>>>>      gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC);
>>>>  #else
>>>> +    /* This instruction doesn't exist anymore on 64-bit server
>>>> +     * processors compliant with arch 2.x
>>>> +     */
>>>> +    if (ctx->insns_flags & PPC_SEGMENT_64B) {
>>>> +        gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);
>>>> +        return;
>>>> +    }
>>>>      /* Restore CPU state */
>>>>      if (unlikely(ctx->pr)) {
>>>>          gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC);
>>>
>>
>>
>>
> 

  reply	other threads:[~2016-06-17  6:03 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-13  5:24 [Qemu-devel] [PATCH 00/10] rework exception model to support the HV mode Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 01/10] ppc: Fix rfi/rfid/hrfi/... emulation Cédric Le Goater
2016-06-16  1:07   ` David Gibson
2016-06-17  2:27     ` [Qemu-devel] [Qemu-ppc] " David Gibson
2016-06-17  5:54       ` Cédric Le Goater
2016-06-17  6:03         ` Cédric Le Goater [this message]
2016-06-17  6:28           ` David Gibson
2016-06-17  6:39             ` Cédric Le Goater
2016-06-17  7:10           ` Thomas Huth
2016-06-17  7:17             ` Cédric Le Goater
2016-06-17 10:41             ` Cédric Le Goater
2016-06-17 11:02               ` Thomas Huth
2016-06-17 11:11                 ` Alexander Graf
2016-06-17 14:32                 ` Cédric Le Goater
2016-06-18 23:35                   ` Benjamin Herrenschmidt
2016-06-19 12:49                     ` Cédric Le Goater
2016-06-19 13:00                       ` Alexander Graf
2016-06-19 17:21                         ` Cédric Le Goater
2016-06-19 22:15                           ` Benjamin Herrenschmidt
2016-06-19 22:35                             ` Benjamin Herrenschmidt
2016-06-20  7:08                               ` Benjamin Herrenschmidt
2016-06-20  7:11                                 ` Alexander Graf
2016-06-20  8:02                                 ` Benjamin Herrenschmidt
2016-06-20  9:32                                   ` Benjamin Herrenschmidt
2016-06-20 13:55                                     ` Alexander Graf
2016-06-21  8:21                                     ` Mark Cave-Ayland
2016-06-21  9:33                                       ` Benjamin Herrenschmidt
2016-06-21  9:37                                         ` Benjamin Herrenschmidt
2016-06-19 14:08                       ` Benjamin Herrenschmidt
2016-06-19 17:23                         ` Cédric Le Goater
2016-06-19 21:12                           ` Benjamin Herrenschmidt
2016-06-20  2:19                             ` David Gibson
2016-06-20  6:17                               ` Cédric Le Goater
2016-06-20  7:47                                 ` Thomas Huth
2016-06-20  8:21                                   ` Benjamin Herrenschmidt
2016-06-20  8:46                                   ` Cédric Le Goater
2016-06-20  8:18                                 ` Benjamin Herrenschmidt
2016-06-20  6:10                             ` Cédric Le Goater
2016-06-20  8:18                               ` Benjamin Herrenschmidt
2016-06-18 23:30                 ` Benjamin Herrenschmidt
2016-06-18 23:29               ` Benjamin Herrenschmidt
2016-06-17  6:19     ` [Qemu-devel] " Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 02/10] ppc: Create cpu_ppc_set_papr() helper (for LPCR) Cédric Le Goater
2016-06-14  6:15   ` David Gibson
2016-06-14  6:52     ` Cédric Le Goater
2016-06-15  1:01       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 03/10] ppc: Rework POWER7 & POWER8 exception model (part 2) Cédric Le Goater
2016-06-14  6:25   ` David Gibson
2016-06-14 21:19     ` Benjamin Herrenschmidt
2016-06-15  1:00       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 04/10] ppc: Fix POWER7 and POWER8 exception definitions Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 05/10] ppc: Fix generation if ISI/DSI vs. HV mode Cédric Le Goater
2016-06-14  6:34   ` David Gibson
2016-06-14  6:42     ` Cédric Le Goater
2016-06-15  1:09       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 06/10] ppc: Rework generation of priv and inval interrupts Cédric Le Goater
2016-06-15  1:19   ` David Gibson
2016-06-15  4:31     ` Benjamin Herrenschmidt
2016-06-15  5:06       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 07/10] ppc: Add real mode CI load/store instructions for P7 and P8 Cédric Le Goater
2016-06-15  3:46   ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 08/10] ppc: Turn a bunch of booleans from int to bool Cédric Le Goater
2016-06-13  5:24 ` [Qemu-devel] [PATCH 09/10] ppc: Move exception generation code out of line Cédric Le Goater
2016-06-13  7:44   ` Thomas Huth
2016-06-13  8:36     ` Cédric Le Goater
2016-06-15  1:57       ` David Gibson
2016-06-13  5:24 ` [Qemu-devel] [PATCH 10/10] ppc: Add P7/P8 Power Management instructions Cédric Le Goater
2016-06-15  1:56   ` David Gibson

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=576392B1.6030204@kaod.org \
    --to=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.