* [PATCH 0/3] target/mips: misc microMIPS fixes
@ 2023-02-15 8:47 Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS Marcin Nowakowski
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Marcin Nowakowski @ 2023-02-15 8:47 UTC (permalink / raw)
To: qemu-devel
Cc: marcin.nowakowski, Philippe Mathieu-Daudé, Aurelien Jarno,
Jiaxun Yang, Aleksandar Rikalo
Marcin Nowakowski (3):
target/mips: fix JALS32/J32 instruction handling for microMIPS
target/mips: fix SWM32 handling for micromips
target/mips: implement CP0.Config7.WII bit support
target/mips/cpu-defs.c.inc | 1 +
target/mips/cpu.c | 6 ++++--
target/mips/cpu.h | 1 +
target/mips/tcg/ldst_helper.c | 4 ++--
target/mips/tcg/translate.c | 6 ++++++
5 files changed, 14 insertions(+), 4 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS
2023-02-15 8:47 [PATCH 0/3] target/mips: misc microMIPS fixes Marcin Nowakowski
@ 2023-02-15 8:47 ` Marcin Nowakowski
2023-02-15 20:21 ` Richard Henderson
2023-02-15 8:47 ` [PATCH 2/3] target/mips: fix SWM32 handling for micromips Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support Marcin Nowakowski
2 siblings, 1 reply; 11+ messages in thread
From: Marcin Nowakowski @ 2023-02-15 8:47 UTC (permalink / raw)
To: qemu-devel
Cc: marcin.nowakowski, Philippe Mathieu-Daudé, Aurelien Jarno,
Jiaxun Yang, Aleksandar Rikalo
microMIPS J & JAL instructions perform a jump in a 128MB region and 5
top bits of the address need to be preserved. This is different behavior
compared to standard mips systems, where the jump is executed within a
256MB region.
Note that microMIPS32 instruction set documentation appears to have
inconsistent information regarding JALX32 instruction - it is written in
the doc that:
"To execute a procedure call within the current 256 MB-aligned region
(...)
The low 26 bits of the target address is the target field shifted left
2 bits."
But the target address is already 26 bits. Moreover, the operation
description indicates that 28 bits are copied, so the statement about
use of 26 bits is _most likely_ incorrect and the corresponding code
remains the same as for standard mips instruction set.
Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
---
target/mips/tcg/translate.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/target/mips/tcg/translate.c b/target/mips/tcg/translate.c
index 624e6b7786..5d46f24141 100644
--- a/target/mips/tcg/translate.c
+++ b/target/mips/tcg/translate.c
@@ -4860,6 +4860,7 @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc,
target_ulong btgt = -1;
int blink = 0;
int bcond_compute = 0;
+ int jal_mask = 0;
TCGv t0 = tcg_temp_new();
TCGv t1 = tcg_temp_new();
@@ -4917,6 +4918,11 @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc,
break;
case OPC_J:
case OPC_JAL:
+ /* Jump to immediate */
+ jal_mask = ctx->hflags & MIPS_HFLAG_M16 ? 0xF8000000 : 0xF0000000;
+ btgt = ((ctx->base.pc_next + insn_bytes) & jal_mask) |
+ (uint32_t)offset;
+ break;
case OPC_JALX:
/* Jump to immediate */
btgt = ((ctx->base.pc_next + insn_bytes) & (int32_t)0xF0000000) |
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] target/mips: fix SWM32 handling for micromips
2023-02-15 8:47 [PATCH 0/3] target/mips: misc microMIPS fixes Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS Marcin Nowakowski
@ 2023-02-15 8:47 ` Marcin Nowakowski
2023-02-15 10:51 ` Philippe Mathieu-Daudé
2023-02-15 8:47 ` [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support Marcin Nowakowski
2 siblings, 1 reply; 11+ messages in thread
From: Marcin Nowakowski @ 2023-02-15 8:47 UTC (permalink / raw)
To: qemu-devel
Cc: marcin.nowakowski, Philippe Mathieu-Daudé, Aurelien Jarno,
Jiaxun Yang, Aleksandar Rikalo
SWM32 should store a sequence of 32-bit words from the GPRs, but it was
incorrectly coded to store 16-bit words only. As a result, an LWM32 that
usually follows would restore invalid register values.
Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
---
target/mips/tcg/ldst_helper.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/target/mips/tcg/ldst_helper.c b/target/mips/tcg/ldst_helper.c
index d0bd0267b2..c1a8380e34 100644
--- a/target/mips/tcg/ldst_helper.c
+++ b/target/mips/tcg/ldst_helper.c
@@ -248,14 +248,14 @@ void helper_swm(CPUMIPSState *env, target_ulong addr, target_ulong reglist,
target_ulong i;
for (i = 0; i < base_reglist; i++) {
- cpu_stw_mmuidx_ra(env, addr, env->active_tc.gpr[multiple_regs[i]],
+ cpu_stl_mmuidx_ra(env, addr, env->active_tc.gpr[multiple_regs[i]],
mem_idx, GETPC());
addr += 4;
}
}
if (do_r31) {
- cpu_stw_mmuidx_ra(env, addr, env->active_tc.gpr[31], mem_idx, GETPC());
+ cpu_stl_mmuidx_ra(env, addr, env->active_tc.gpr[31], mem_idx, GETPC());
}
}
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support
2023-02-15 8:47 [PATCH 0/3] target/mips: misc microMIPS fixes Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 2/3] target/mips: fix SWM32 handling for micromips Marcin Nowakowski
@ 2023-02-15 8:47 ` Marcin Nowakowski
2023-02-15 18:33 ` Philippe Mathieu-Daudé
2 siblings, 1 reply; 11+ messages in thread
From: Marcin Nowakowski @ 2023-02-15 8:47 UTC (permalink / raw)
To: qemu-devel
Cc: marcin.nowakowski, Philippe Mathieu-Daudé, Aurelien Jarno,
Jiaxun Yang, Aleksandar Rikalo
Some older cores use CP0.Config7.WII bit to indicate that a disabled
interrupt should wake up a sleeping CPU.
Enable this bit by default for M14Kc, which supports that. There are
potentially other cores that support this feature, but I do not have a
complete list.
Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
---
target/mips/cpu-defs.c.inc | 1 +
target/mips/cpu.c | 6 ++++--
target/mips/cpu.h | 1 +
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc
index 480e60aeec..57856e2e72 100644
--- a/target/mips/cpu-defs.c.inc
+++ b/target/mips/cpu-defs.c.inc
@@ -354,6 +354,7 @@ const mips_def_t mips_defs[] =
(0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA),
.CP0_Config2 = MIPS_CONFIG2,
.CP0_Config3 = MIPS_CONFIG3 | (0x2 << CP0C3_ISA) | (0 << CP0C3_VInt),
+ .CP0_Config7 = 0x1 << CP0C7_WII,
.CP0_LLAddr_rw_bitmask = 0,
.CP0_LLAddr_shift = 4,
.SYNCI_Step = 32,
diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index 7a565466cb..7ba359696f 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -144,12 +144,14 @@ static bool mips_cpu_has_work(CPUState *cs)
/*
* Prior to MIPS Release 6 it is implementation dependent if non-enabled
* interrupts wake-up the CPU, however most of the implementations only
- * check for interrupts that can be taken.
+ * check for interrupts that can be taken. For pre-release 6 CPUs,
+ * check for CP0 Config7 'Wait IE ignore' bit.
*/
if ((cs->interrupt_request & CPU_INTERRUPT_HARD) &&
cpu_mips_hw_interrupts_pending(env)) {
if (cpu_mips_hw_interrupts_enabled(env) ||
- (env->insn_flags & ISA_MIPS_R6)) {
+ (env->insn_flags & ISA_MIPS_R6) ||
+ (env->CP0_Config7 & (1 << CP0C7_WII))) {
has_work = true;
}
}
diff --git a/target/mips/cpu.h b/target/mips/cpu.h
index 0a085643a3..abee7a99d7 100644
--- a/target/mips/cpu.h
+++ b/target/mips/cpu.h
@@ -980,6 +980,7 @@ typedef struct CPUArchState {
#define CP0C6_DATAPREF 0
int32_t CP0_Config7;
int64_t CP0_Config7_rw_bitmask;
+#define CP0C7_WII 31
#define CP0C7_NAPCGEN 2
#define CP0C7_UNIMUEN 1
#define CP0C7_VFPUCGEN 0
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] target/mips: fix SWM32 handling for micromips
2023-02-15 8:47 ` [PATCH 2/3] target/mips: fix SWM32 handling for micromips Marcin Nowakowski
@ 2023-02-15 10:51 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-15 10:51 UTC (permalink / raw)
To: Marcin Nowakowski, qemu-devel, Richard Henderson
Cc: Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo
On 15/2/23 09:47, Marcin Nowakowski wrote:
> SWM32 should store a sequence of 32-bit words from the GPRs, but it was
> incorrectly coded to store 16-bit words only. As a result, an LWM32 that
> usually follows would restore invalid register values.
>
Fixes: 7dd547e5ab ("target/mips: Use cpu_*_mmuidx_ra instead of
MMU_MODE*_SUFFIX")
(I suppose a typo S[W] -> ST[W], since LW correctly converted to LDL)
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
> ---
> target/mips/tcg/ldst_helper.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/target/mips/tcg/ldst_helper.c b/target/mips/tcg/ldst_helper.c
> index d0bd0267b2..c1a8380e34 100644
> --- a/target/mips/tcg/ldst_helper.c
> +++ b/target/mips/tcg/ldst_helper.c
> @@ -248,14 +248,14 @@ void helper_swm(CPUMIPSState *env, target_ulong addr, target_ulong reglist,
> target_ulong i;
>
> for (i = 0; i < base_reglist; i++) {
> - cpu_stw_mmuidx_ra(env, addr, env->active_tc.gpr[multiple_regs[i]],
> + cpu_stl_mmuidx_ra(env, addr, env->active_tc.gpr[multiple_regs[i]],
> mem_idx, GETPC());
> addr += 4;
> }
> }
>
> if (do_r31) {
> - cpu_stw_mmuidx_ra(env, addr, env->active_tc.gpr[31], mem_idx, GETPC());
> + cpu_stl_mmuidx_ra(env, addr, env->active_tc.gpr[31], mem_idx, GETPC());
> }
> }
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support
2023-02-15 8:47 ` [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support Marcin Nowakowski
@ 2023-02-15 18:33 ` Philippe Mathieu-Daudé
2023-02-15 19:19 ` Marcin Nowakowski
0 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-15 18:33 UTC (permalink / raw)
To: Marcin Nowakowski, qemu-devel
Cc: Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo
Hi Marcin,
On 15/2/23 09:47, Marcin Nowakowski wrote:
> Some older cores use CP0.Config7.WII bit to indicate that a disabled
> interrupt should wake up a sleeping CPU.
> Enable this bit by default for M14Kc, which supports that. There are
> potentially other cores that support this feature, but I do not have a
> complete list.
Also the P5600 (MIPS-MD01025-2B-P5600-Software-TRM-01.60.pdf,
"MIPS32® P5600 Multiprocessing System Software UM, Revision 01.60).
> Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
> ---
> target/mips/cpu-defs.c.inc | 1 +
> target/mips/cpu.c | 6 ++++--
> target/mips/cpu.h | 1 +
> 3 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc
> index 480e60aeec..57856e2e72 100644
> --- a/target/mips/cpu-defs.c.inc
> +++ b/target/mips/cpu-defs.c.inc
> @@ -354,6 +354,7 @@ const mips_def_t mips_defs[] =
> (0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA),
> .CP0_Config2 = MIPS_CONFIG2,
> .CP0_Config3 = MIPS_CONFIG3 | (0x2 << CP0C3_ISA) | (0 << CP0C3_VInt),
Per the P5600 doc on Config5.M:
Configuration continuation bit. Even though the Config6 and Config7
registers are used in the P5600 Multiprocessing System, they are both
defined as implementation-specific registers. As such, this bit is
zero and is not used to indicate the presence of Config6.
Still I suppose we need to set at least Config4.M:
+ .CP0_Config4 = MIPS_CONFIG4,
+ .CP0_Config4_rw_bitmask = 0,
I'm not sure about:
+ .CP0_Config5 = MIPS_CONFIG5,
+ .CP0_Config5_rw_bitmask = 0,
> + .CP0_Config7 = 0x1 << CP0C7_WII,
> .CP0_LLAddr_rw_bitmask = 0,
> .CP0_LLAddr_shift = 4,
> .SYNCI_Step = 32,
Could you also set CP0C7_WII to the P5600 definition?
> diff --git a/target/mips/cpu.c b/target/mips/cpu.c
> index 7a565466cb..7ba359696f 100644
> --- a/target/mips/cpu.c
> +++ b/target/mips/cpu.c
> @@ -144,12 +144,14 @@ static bool mips_cpu_has_work(CPUState *cs)
> /*
> * Prior to MIPS Release 6 it is implementation dependent if non-enabled
> * interrupts wake-up the CPU, however most of the implementations only
> - * check for interrupts that can be taken.
> + * check for interrupts that can be taken. For pre-release 6 CPUs,
> + * check for CP0 Config7 'Wait IE ignore' bit.
> */
> if ((cs->interrupt_request & CPU_INTERRUPT_HARD) &&
> cpu_mips_hw_interrupts_pending(env)) {
> if (cpu_mips_hw_interrupts_enabled(env) ||
> - (env->insn_flags & ISA_MIPS_R6)) {
> + (env->insn_flags & ISA_MIPS_R6) ||
> + (env->CP0_Config7 & (1 << CP0C7_WII))) {
> has_work = true;
> }
> }
> diff --git a/target/mips/cpu.h b/target/mips/cpu.h
> index 0a085643a3..abee7a99d7 100644
> --- a/target/mips/cpu.h
> +++ b/target/mips/cpu.h
> @@ -980,6 +980,7 @@ typedef struct CPUArchState {
> #define CP0C6_DATAPREF 0
> int32_t CP0_Config7;
> int64_t CP0_Config7_rw_bitmask;
> +#define CP0C7_WII 31
> #define CP0C7_NAPCGEN 2
> #define CP0C7_UNIMUEN 1
> #define CP0C7_VFPUCGEN 0
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support
2023-02-15 18:33 ` Philippe Mathieu-Daudé
@ 2023-02-15 19:19 ` Marcin Nowakowski
2023-02-15 19:39 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 11+ messages in thread
From: Marcin Nowakowski @ 2023-02-15 19:19 UTC (permalink / raw)
To: Philippe Mathieu-Daudé
Cc: qemu-devel, Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo
On Wed, Feb 15, 2023 at 7:33 PM Philippe Mathieu-Daudé
<philmd@linaro.org> wrote:
>
> Hi Marcin,
>
> On 15/2/23 09:47, Marcin Nowakowski wrote:
> > Some older cores use CP0.Config7.WII bit to indicate that a disabled
> > interrupt should wake up a sleeping CPU.
> > Enable this bit by default for M14Kc, which supports that. There are
> > potentially other cores that support this feature, but I do not have a
> > complete list.
>
> Also the P5600 (MIPS-MD01025-2B-P5600-Software-TRM-01.60.pdf,
> "MIPS32® P5600 Multiprocessing System Software UM, Revision 01.60).
>
> > Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
> > ---
> > target/mips/cpu-defs.c.inc | 1 +
> > target/mips/cpu.c | 6 ++++--
> > target/mips/cpu.h | 1 +
> > 3 files changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc
> > index 480e60aeec..57856e2e72 100644
> > --- a/target/mips/cpu-defs.c.inc
> > +++ b/target/mips/cpu-defs.c.inc
> > @@ -354,6 +354,7 @@ const mips_def_t mips_defs[] =
> > (0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA),
> > .CP0_Config2 = MIPS_CONFIG2,
> > .CP0_Config3 = MIPS_CONFIG3 | (0x2 << CP0C3_ISA) | (0 << CP0C3_VInt),
>
> Per the P5600 doc on Config5.M:
>
> Configuration continuation bit. Even though the Config6 and Config7
> registers are used in the P5600 Multiprocessing System, they are both
> defined as implementation-specific registers. As such, this bit is
> zero and is not used to indicate the presence of Config6.
>
> Still I suppose we need to set at least Config4.M:
>
> + .CP0_Config4 = MIPS_CONFIG4,
> + .CP0_Config4_rw_bitmask = 0,
The definition of MIPS_CONFIG4 doesn't set M-bit, so I assume what you
really meant here is
.CP0_Config4 = MIPS_CONFIG4 | (1U << CP0C4_M)
Config3 also doesn't have M-bit set right now, I'll fix that in the
next patch revision.
>
> I'm not sure about:
>
> + .CP0_Config5 = MIPS_CONFIG5,
> + .CP0_Config5_rw_bitmask = 0,
M14Kc specification (MD00674-2B-M14Kc-SUM-02.04.pdf) notes the following:
"This bit is reserved. With the current architectural definition, this
bit should always read as a 0."
But I'll add
.CP0_Config5 = MIPS_CONFIG5 | (1U << CP0C5_NFExists)
for completeness of the definition.
> > + .CP0_Config7 = 0x1 << CP0C7_WII,
> > .CP0_LLAddr_rw_bitmask = 0,
> > .CP0_LLAddr_shift = 4,
> > .SYNCI_Step = 32,
>
> Could you also set CP0C7_WII to the P5600 definition?
OK, will add that.
Marcin
> > diff --git a/target/mips/cpu.c b/target/mips/cpu.c
> > index 7a565466cb..7ba359696f 100644
> > --- a/target/mips/cpu.c
> > +++ b/target/mips/cpu.c
> > @@ -144,12 +144,14 @@ static bool mips_cpu_has_work(CPUState *cs)
> > /*
> > * Prior to MIPS Release 6 it is implementation dependent if non-enabled
> > * interrupts wake-up the CPU, however most of the implementations only
> > - * check for interrupts that can be taken.
> > + * check for interrupts that can be taken. For pre-release 6 CPUs,
> > + * check for CP0 Config7 'Wait IE ignore' bit.
> > */
> > if ((cs->interrupt_request & CPU_INTERRUPT_HARD) &&
> > cpu_mips_hw_interrupts_pending(env)) {
> > if (cpu_mips_hw_interrupts_enabled(env) ||
> > - (env->insn_flags & ISA_MIPS_R6)) {
> > + (env->insn_flags & ISA_MIPS_R6) ||
> > + (env->CP0_Config7 & (1 << CP0C7_WII))) {
> > has_work = true;
> > }
> > }
> > diff --git a/target/mips/cpu.h b/target/mips/cpu.h
> > index 0a085643a3..abee7a99d7 100644
> > --- a/target/mips/cpu.h
> > +++ b/target/mips/cpu.h
> > @@ -980,6 +980,7 @@ typedef struct CPUArchState {
> > #define CP0C6_DATAPREF 0
> > int32_t CP0_Config7;
> > int64_t CP0_Config7_rw_bitmask;
> > +#define CP0C7_WII 31
> > #define CP0C7_NAPCGEN 2
> > #define CP0C7_UNIMUEN 1
> > #define CP0C7_VFPUCGEN 0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support
2023-02-15 19:19 ` Marcin Nowakowski
@ 2023-02-15 19:39 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-15 19:39 UTC (permalink / raw)
To: Marcin Nowakowski
Cc: qemu-devel, Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo
On 15/2/23 20:19, Marcin Nowakowski wrote:
> On Wed, Feb 15, 2023 at 7:33 PM Philippe Mathieu-Daudé
> <philmd@linaro.org> wrote:
>>
>> Hi Marcin,
>>
>> On 15/2/23 09:47, Marcin Nowakowski wrote:
>>> Some older cores use CP0.Config7.WII bit to indicate that a disabled
>>> interrupt should wake up a sleeping CPU.
>>> Enable this bit by default for M14Kc, which supports that. There are
>>> potentially other cores that support this feature, but I do not have a
>>> complete list.
>>
>> Also the P5600 (MIPS-MD01025-2B-P5600-Software-TRM-01.60.pdf,
>> "MIPS32® P5600 Multiprocessing System Software UM, Revision 01.60).
>>
>>> Signed-off-by: Marcin Nowakowski <marcin.nowakowski@fungible.com>
>>> ---
>>> target/mips/cpu-defs.c.inc | 1 +
>>> target/mips/cpu.c | 6 ++++--
>>> target/mips/cpu.h | 1 +
>>> 3 files changed, 6 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/target/mips/cpu-defs.c.inc b/target/mips/cpu-defs.c.inc
>>> index 480e60aeec..57856e2e72 100644
>>> --- a/target/mips/cpu-defs.c.inc
>>> +++ b/target/mips/cpu-defs.c.inc
>>> @@ -354,6 +354,7 @@ const mips_def_t mips_defs[] =
>>> (0 << CP0C1_DS) | (3 << CP0C1_DL) | (1 << CP0C1_DA),
>>> .CP0_Config2 = MIPS_CONFIG2,
>>> .CP0_Config3 = MIPS_CONFIG3 | (0x2 << CP0C3_ISA) | (0 << CP0C3_VInt),
>>
>> Per the P5600 doc on Config5.M:
>>
>> Configuration continuation bit. Even though the Config6 and Config7
>> registers are used in the P5600 Multiprocessing System, they are both
>> defined as implementation-specific registers. As such, this bit is
>> zero and is not used to indicate the presence of Config6.
>>
>> Still I suppose we need to set at least Config4.M:
>>
>> + .CP0_Config4 = MIPS_CONFIG4,
>> + .CP0_Config4_rw_bitmask = 0,
>
> The definition of MIPS_CONFIG4 doesn't set M-bit, so I assume what you
> really meant here is
> .CP0_Config4 = MIPS_CONFIG4 | (1U << CP0C4_M)
Yes :)
> Config3 also doesn't have M-bit set right now, I'll fix that in the
> next patch revision.
>
>>
>> I'm not sure about:
>>
>> + .CP0_Config5 = MIPS_CONFIG5,
>> + .CP0_Config5_rw_bitmask = 0,
>
> M14Kc specification (MD00674-2B-M14Kc-SUM-02.04.pdf) notes the following:
> "This bit is reserved. With the current architectural definition, this
> bit should always read as a 0."
> But I'll add
> .CP0_Config5 = MIPS_CONFIG5 | (1U << CP0C5_NFExists)
> for completeness of the definition.
Thanks.
>>> + .CP0_Config7 = 0x1 << CP0C7_WII,
>>> .CP0_LLAddr_rw_bitmask = 0,
>>> .CP0_LLAddr_shift = 4,
>>> .SYNCI_Step = 32,
>>
>> Could you also set CP0C7_WII to the P5600 definition?
>
> OK, will add that.
Great, thank you :)
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS
2023-02-15 8:47 ` [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS Marcin Nowakowski
@ 2023-02-15 20:21 ` Richard Henderson
2023-02-15 20:50 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 11+ messages in thread
From: Richard Henderson @ 2023-02-15 20:21 UTC (permalink / raw)
To: Marcin Nowakowski, qemu-devel
Cc: Philippe Mathieu-Daudé, Aurelien Jarno, Jiaxun Yang,
Aleksandar Rikalo
On 2/14/23 22:47, Marcin Nowakowski wrote:
> @@ -4860,6 +4860,7 @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc,
> target_ulong btgt = -1;
> int blink = 0;
> int bcond_compute = 0;
> + int jal_mask = 0;
Better to limit the scope of the variable to the block below.
> @@ -4917,6 +4918,11 @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc,
> break;
> case OPC_J:
> case OPC_JAL:
> + /* Jump to immediate */
> + jal_mask = ctx->hflags & MIPS_HFLAG_M16 ? 0xF8000000 : 0xF0000000;
> + btgt = ((ctx->base.pc_next + insn_bytes) & jal_mask) |
> + (uint32_t)offset;
Ideally we wouldn't have one huge helper function, and could pass down the mask from the
translator. But that's on-going cleanup.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
r~
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS
2023-02-15 20:21 ` Richard Henderson
@ 2023-02-15 20:50 ` Philippe Mathieu-Daudé
2023-02-16 1:31 ` Jiaxun Yang
0 siblings, 1 reply; 11+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-15 20:50 UTC (permalink / raw)
To: Richard Henderson, Marcin Nowakowski, qemu-devel
Cc: Aurelien Jarno, Jiaxun Yang, Aleksandar Rikalo
On 15/2/23 21:21, Richard Henderson wrote:
> On 2/14/23 22:47, Marcin Nowakowski wrote:
>> @@ -4860,6 +4860,7 @@ static void gen_compute_branch(DisasContext
>> *ctx, uint32_t opc,
>> target_ulong btgt = -1;
>> int blink = 0;
>> int bcond_compute = 0;
>> + int jal_mask = 0;
>
> Better to limit the scope of the variable to the block below.
>
>> @@ -4917,6 +4918,11 @@ static void gen_compute_branch(DisasContext
>> *ctx, uint32_t opc,
>> break;
>> case OPC_J:
>> case OPC_JAL:
>> + /* Jump to immediate */
>> + jal_mask = ctx->hflags & MIPS_HFLAG_M16 ? 0xF8000000 :
>> 0xF0000000;
>> + btgt = ((ctx->base.pc_next + insn_bytes) & jal_mask) |
>> + (uint32_t)offset;
>
> Ideally we wouldn't have one huge helper function, and could pass down
> the mask from the translator. But that's on-going cleanup.
Yes, this is the approach taken in decodetree conversion.
I hope to rebase / respin incorporating Jiaxun patches some day...
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>
>
> r~
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS
2023-02-15 20:50 ` Philippe Mathieu-Daudé
@ 2023-02-16 1:31 ` Jiaxun Yang
0 siblings, 0 replies; 11+ messages in thread
From: Jiaxun Yang @ 2023-02-16 1:31 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, Richard Henderson, Marcin Nowakowski,
BALATON Zoltan via
Cc: Aurelien Jarno, Aleksandar Rikalo
在2023年2月15日二月 下午8:50,Philippe Mathieu-Daudé写道:
> On 15/2/23 21:21, Richard Henderson wrote:
>> On 2/14/23 22:47, Marcin Nowakowski wrote:
>>> @@ -4860,6 +4860,7 @@ static void gen_compute_branch(DisasContext
>>> *ctx, uint32_t opc,
>>> target_ulong btgt = -1;
>>> int blink = 0;
>>> int bcond_compute = 0;
>>> + int jal_mask = 0;
>>
>> Better to limit the scope of the variable to the block below.
>>
>>> @@ -4917,6 +4918,11 @@ static void gen_compute_branch(DisasContext
>>> *ctx, uint32_t opc,
>>> break;
>>> case OPC_J:
>>> case OPC_JAL:
>>> + /* Jump to immediate */
>>> + jal_mask = ctx->hflags & MIPS_HFLAG_M16 ? 0xF8000000 :
>>> 0xF0000000;
>>> + btgt = ((ctx->base.pc_next + insn_bytes) & jal_mask) |
>>> + (uint32_t)offset;
>>
>> Ideally we wouldn't have one huge helper function, and could pass down
>> the mask from the translator. But that's on-going cleanup.
>
> Yes, this is the approach taken in decodetree conversion.
>
> I hope to rebase / respin incorporating Jiaxun patches some day...
Which series are you referring?
Just caught some time so I might able to help.
>
>> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>>
>>
>> r~
--
- Jiaxun
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-02-16 1:33 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-15 8:47 [PATCH 0/3] target/mips: misc microMIPS fixes Marcin Nowakowski
2023-02-15 8:47 ` [PATCH 1/3] target/mips: fix JALS32/J32 instruction handling for microMIPS Marcin Nowakowski
2023-02-15 20:21 ` Richard Henderson
2023-02-15 20:50 ` Philippe Mathieu-Daudé
2023-02-16 1:31 ` Jiaxun Yang
2023-02-15 8:47 ` [PATCH 2/3] target/mips: fix SWM32 handling for micromips Marcin Nowakowski
2023-02-15 10:51 ` Philippe Mathieu-Daudé
2023-02-15 8:47 ` [PATCH 3/3] target/mips: implement CP0.Config7.WII bit support Marcin Nowakowski
2023-02-15 18:33 ` Philippe Mathieu-Daudé
2023-02-15 19:19 ` Marcin Nowakowski
2023-02-15 19:39 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).