From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Greg Kurz <gkurz@linux.vnet.ibm.com>
Cc: Tom Musta <tommusta@gmail.com>,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [Qemu-ppc] [PATCH v4 29/29] spapr_hcall: Add address-translation-mode-on-interrupt resource in H_SET_MODE
Date: Wed, 04 Jun 2014 09:44:01 +1000 [thread overview]
Message-ID: <538E5DC1.6020101@ozlabs.ru> (raw)
In-Reply-To: <20140603185145.7f1c08f1@bahia.local>
On 06/04/2014 02:51 AM, Greg Kurz wrote:
> On Tue, 3 Jun 2014 19:28:04 +1000
> Alexey Kardashevskiy <aik@ozlabs.ru> wrote:
>
>> This adds handling of the RESOURCE_ADDR_TRANS_MODE resource from
>> the H_SET_MODE, for POWER8 (PowerISA 2.07) only.
>>
>> This defines AIL flags for LPCR special register.
>>
>> This changes @excp_prefix according to the mode, takes effect in TCG.
>>
>> This turns support of a new capability PPC2_ISA207S flag for TCG.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> ---
>> hw/ppc/spapr_hcall.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
>> include/hw/ppc/spapr.h | 5 +++++
>> target-ppc/cpu.h | 4 +++-
>> target-ppc/excp_helper.c | 7 +++++--
>> 4 files changed, 60 insertions(+), 3 deletions(-)
>>
>> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
>> index cff3b0f..a2941f4 100644
>> --- a/hw/ppc/spapr_hcall.c
>> +++ b/hw/ppc/spapr_hcall.c
>> @@ -743,6 +743,49 @@ static target_ulong h_set_mode_resouce_le(PowerPCCPU *cpu,
>> return H_UNSUPPORTED_FLAG;
>> }
>>
>> +static target_ulong h_set_mode_resouce_addr_trans_mode(PowerPCCPU *cpu,
>> + target_ulong mflags,
>> + target_ulong value1,
>> + target_ulong value2)
>> +{
>> + CPUState *cs;
>> + PowerPCCPUClass *pcc = POWERPC_CPU_GET_CLASS(cpu);
>> + target_ulong prefix;
>> +
>> + if (!(pcc->insns_flags2 & PPC2_ISA207S)) {
>> + return H_P2;
>> + }
>> + if (value1) {
>> + return H_P3;
>> + }
>> + if (value2) {
>> + return H_P4;
>> + }
>> +
>> + switch (mflags) {
>> + case H_SET_MODE_ADDR_TRANS_NONE:
>> + prefix = 0;
>> + break;
>> + case H_SET_MODE_ADDR_TRANS_0001_8000:
>> + prefix = 0x18000;
>> + break;
>> + case H_SET_MODE_ADDR_TRANS_C000_0000_0000_4000:
>> + prefix = 0xC000000000004000;
>> + break;
>> + default:
>> + return H_UNSUPPORTED_FLAG;
>> + }
>> +
>> + CPU_FOREACH(cs) {
>> + CPUPPCState *env = &POWERPC_CPU(cpu)->env;
>> +
>> + set_spr(cs, SPR_LPCR, mflags << LPCR_AIL_SH, LPCR_AIL);
>> + env->excp_prefix = prefix;
>> + }
>> +
>> + return H_SUCCESS;
>> +}
>> +
>> static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>> target_ulong opcode, target_ulong *args)
>> {
>> @@ -753,6 +796,10 @@ static target_ulong h_set_mode(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>> case H_SET_MODE_RESOURCE_LE:
>> ret = h_set_mode_resouce_le(cpu, args[0], args[2], args[3]);
>> break;
>> + case H_SET_MODE_RESOURCE_ADDR_TRANS_MODE:
>> + ret = h_set_mode_resouce_addr_trans_mode(cpu, args[0],
>> + args[2], args[3]);
>> + break;
>> }
>>
>> return ret;
>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>> index 4ffb903..08c301f 100644
>> --- a/include/hw/ppc/spapr.h
>> +++ b/include/hw/ppc/spapr.h
>> @@ -164,6 +164,11 @@ typedef struct sPAPREnvironment {
>> #define H_SET_MODE_ENDIAN_BIG 0
>> #define H_SET_MODE_ENDIAN_LITTLE 1
>>
>> +/* Flags for H_SET_MODE_RESOURCE_ADDR_TRANS_MODE */
>> +#define H_SET_MODE_ADDR_TRANS_NONE 0
>> +#define H_SET_MODE_ADDR_TRANS_0001_8000 2
>> +#define H_SET_MODE_ADDR_TRANS_C000_0000_0000_4000 3
>> +
>> /* VASI States */
>> #define H_VASI_INVALID 0
>> #define H_VASI_ENABLED 1
>> diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h
>> index e33828a..4a8e0c4 100644
>> --- a/target-ppc/cpu.h
>> +++ b/target-ppc/cpu.h
>> @@ -467,6 +467,8 @@ struct ppc_slb_t {
>> #define MSR_LE 0 /* Little-endian mode 1 hflags */
>>
>> #define LPCR_ILE (1 << (63-38))
>> +#define LPCR_AIL 0x01800000 /* Alternate interrupt location */
>> +#define LPCR_AIL_SH (63-40)
>>
>
> You seem to have missed (or disgarded) a comment on your previous post
> about magic numbers. Also FWIW most of the bit shifts in this file have
> the _SHIFT suffix in their name:
I simply forgot it :( Thanks for the reminder, v5 is coming.
> #define LPCR_AIL_SHIFT (63-40)
> #define LPCR_AIL (3 << LPCR_AIL_SHIFT)
>
>> #define msr_sf ((env->msr >> MSR_SF) & 1)
>> #define msr_isf ((env->msr >> MSR_ISF) & 1)
>> @@ -2009,7 +2011,7 @@ enum {
>> PPC2_DIVE_ISA206 | PPC2_ATOMIC_ISA206 | \
>> PPC2_FP_CVT_ISA206 | PPC2_FP_TST_ISA206 | \
>> PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | \
>> - PPC2_ALTIVEC_207)
>> + PPC2_ALTIVEC_207 | PPC2_ISA207S)
>> };
>>
>> /*****************************************************************************/
>> diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c
>> index fd89d99..b39bf1b 100644
>> --- a/target-ppc/excp_helper.c
>> +++ b/target-ppc/excp_helper.c
>> @@ -619,8 +619,11 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp)
>> if (asrr1 != -1) {
>> env->spr[asrr1] = env->spr[srr1];
>> }
>> - /* If we disactivated any translation, flush TLBs */
>> - if (msr & ((1 << MSR_IR) | (1 << MSR_DR))) {
>> +
>> + if (env->spr[SPR_LPCR] & LPCR_AIL) {
>> + new_msr |= (1 << MSR_IR) | (1 << MSR_DR);
>> + } else if (msr & ((1 << MSR_IR) | (1 << MSR_DR))) {
>> + /* If we disactivated any translation, flush TLBs */
>> tlb_flush(cs, 1);
>> }
>>
>
>
>
--
Alexey
prev parent reply other threads:[~2014-06-03 23:44 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-03 9:27 [Qemu-devel] [PATCH v4 00/29] book3s powerpc classes (970, power5, power7, power8) rework Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 01/29] target-ppc: Rename 7XX/60x/74XX/e600 PMU SPRs Alexey Kardashevskiy
2014-06-03 16:32 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 02/29] target-ppc: Merge 970FX and 970MP into a single 970 class Alexey Kardashevskiy
2014-06-03 15:40 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2014-06-03 16:11 ` Alexander Graf
2014-06-03 16:25 ` [Qemu-devel] " Tom Musta
2014-06-04 4:48 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 03/29] target-ppc: Refactor PPC970 Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 04/29] target-ppc: Copy and split gen_spr_7xx() for 970 Alexey Kardashevskiy
2014-06-03 16:32 ` Tom Musta
2014-06-04 5:09 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 05/29] target-ppc: Add "POWER" prefix to MMCRA PMU registers Alexey Kardashevskiy
2014-06-03 16:35 ` Tom Musta
2014-06-04 1:36 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 06/29] target-ppc: Add PMC5/6, SDAR and MMCRA to 970 family Alexey Kardashevskiy
2014-06-03 16:36 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 07/29] target-ppc: Add PMC7/8 to 970 class Alexey Kardashevskiy
2014-06-03 16:37 ` Tom Musta
2014-06-03 16:42 ` Tom Musta
2014-06-04 5:25 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 08/29] target-ppc: Add HID4 SPR for PPC970 Alexey Kardashevskiy
2014-06-03 16:43 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 09/29] target-ppc: Introduce and reuse generalized init_proc_book3s_64() Alexey Kardashevskiy
2014-06-03 16:45 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 10/29] target-ppc: Remove check_pow_970FX Alexey Kardashevskiy
2014-06-03 16:45 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 11/29] target-ppc: Enable PMU SPRs migration Alexey Kardashevskiy
2014-06-03 16:47 ` Tom Musta
2014-06-04 1:46 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 12/29] target-ppc: Move POWER7/8 PIR/PURR/SPURR SPR registration to helpers Alexey Kardashevskiy
2014-06-03 16:48 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 13/29] target-ppc: Move POWER8 TCE Address control (TAR) to a helper Alexey Kardashevskiy
2014-06-03 16:48 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 14/29] target-ppc: Move POWER7/8 CFAR/DSCR/CTRL/PPR/PCR SPR registration to helpers Alexey Kardashevskiy
2014-06-03 16:54 ` Tom Musta
2014-06-04 2:02 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 15/29] target-ppc: Make use of gen_spr_book3s_altivec() for POWER7/8 Alexey Kardashevskiy
2014-06-03 16:54 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 16/29] target-ppc: Make use of gen_spr_book3s_lpar() " Alexey Kardashevskiy
2014-06-03 16:54 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 17/29] target-ppc: Switch POWER7/8 classes to use correct PMU SPRs Alexey Kardashevskiy
2014-06-03 16:55 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 18/29] target-ppc: Refactor class init for POWER7/8 Alexey Kardashevskiy
2014-06-03 16:57 ` Tom Musta
2014-06-04 2:09 ` Alexey Kardashevskiy
2014-06-04 12:24 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 19/29] target-ppc: Add POWER7's TIR SPR Alexey Kardashevskiy
2014-06-03 16:59 ` Tom Musta
2014-06-04 2:14 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 20/29] target-ppc: Add POWER8's FSCR SPR Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 21/29] target-ppc: Enable FSCR facility check for TAR Alexey Kardashevskiy
2014-06-03 17:08 ` Tom Musta
2014-06-04 2:37 ` Alexey Kardashevskiy
2014-06-04 12:25 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 22/29] target-ppc: Add POWER8's MMCR2/MMCRS SPRs Alexey Kardashevskiy
2014-06-03 17:10 ` Tom Musta
2014-06-03 23:42 ` Alexey Kardashevskiy
2014-06-04 5:26 ` Alexey Kardashevskiy
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 23/29] target-ppc: Add POWER8's TM SPRs Alexey Kardashevskiy
2014-06-03 17:58 ` Tom Musta
2014-06-04 2:54 ` Alexey Kardashevskiy
2014-06-04 12:30 ` Tom Musta
2014-06-03 9:27 ` [Qemu-devel] [PATCH v4 24/29] KVM: target-ppc: Enable TM state migration Alexey Kardashevskiy
2014-06-03 9:28 ` [Qemu-devel] [PATCH v4 25/29] target-ppc: Add POWER8's Event Based Branch (EBB) control SPRs Alexey Kardashevskiy
2014-06-03 18:01 ` Tom Musta
2014-06-03 9:28 ` [Qemu-devel] [PATCH v4 26/29] target-ppc: Enable PPR and VRSAVE SPRs migration Alexey Kardashevskiy
2014-06-03 9:28 ` [Qemu-devel] [PATCH v4 27/29] target-ppc: Enable DABRX SPR and limit it to <=POWER7 Alexey Kardashevskiy
2014-06-03 18:05 ` Tom Musta
2014-06-04 3:12 ` Alexey Kardashevskiy
2014-06-03 9:28 ` [Qemu-devel] [PATCH v4 28/29] spapr_hcall: Split h_set_mode() Alexey Kardashevskiy
2014-06-03 9:28 ` [Qemu-devel] [PATCH v4 29/29] spapr_hcall: Add address-translation-mode-on-interrupt resource in H_SET_MODE Alexey Kardashevskiy
2014-06-03 16:51 ` [Qemu-devel] [Qemu-ppc] " Greg Kurz
2014-06-03 23:44 ` Alexey Kardashevskiy [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=538E5DC1.6020101@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=gkurz@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=tommusta@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.