Fix lost interrupts.
Update seabios-hppa. -----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJcjSC2AAoJEGTfOOivfiFfF/4H/RO9JVFGn2uWGVvTzGLZNtBN hnPqE9t6PbZhacaDrHmqhJxqEn8ikDzxzhqT5b6Neh6MrYKHWX2bCB14ogTKcjNR oDw06yTAnPQfWQ0t+WcKuktyA2u4uO83zATu42CR+tCNhurGwLwQoaDhpID1bcKg xLpBFgnP5EGX9ua+8jP7UZTDPyB09QLhUGHehEDTLzuxTsNowCmkEBeORVt7zK0h 5DUOGLFsM2CVuAtlzyr+9DovAvgFPlXFoWXifxjHfRr88pCChtuMxUiLvMdzUZ34 EmA7UiMPL1QXnx4FuVfq//QgrwwlvIPO4+KtffIxyegRYmzsa77o6WHOKjgl/0A= =jOck -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/rth/tags/pull-hppa-20190316' into staging Fix lost interrupts. Update seabios-hppa. # gpg: Signature made Sat 16 Mar 2019 16:13:42 GMT # gpg: using RSA key 64DF38E8AF7E215F # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [full] # Primary key fingerprint: 7A48 1E78 868B 4DB6 A85A 05C0 64DF 38E8 AF7E 215F * remotes/rth/tags/pull-hppa-20190316: Update seabios-hppa to latest upstream target/hppa: Avoid squishing DISAS_IAQ_N_STALE_EXIT Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d4e65539e5
|
@ -19,7 +19,7 @@
|
||||||
#define LASI_PS2KBD_HPA 0xffd08000
|
#define LASI_PS2KBD_HPA 0xffd08000
|
||||||
#define LASI_PS2MOU_HPA 0xffd08100
|
#define LASI_PS2MOU_HPA 0xffd08100
|
||||||
#define LASI_GFX_HPA 0xf8000000
|
#define LASI_GFX_HPA 0xf8000000
|
||||||
#define CPU_HPA 0xfff10000
|
#define CPU_HPA 0xfffb0000
|
||||||
#define MEMORY_HPA 0xfffbf000
|
#define MEMORY_HPA 0xfffbf000
|
||||||
|
|
||||||
#define PCI_HPA DINO_HPA /* PCI bus */
|
#define PCI_HPA DINO_HPA /* PCI bus */
|
||||||
|
@ -36,5 +36,5 @@
|
||||||
#define PORT_SERIAL1 (DINO_UART_HPA + 0x800)
|
#define PORT_SERIAL1 (DINO_UART_HPA + 0x800)
|
||||||
#define PORT_SERIAL2 (LASI_UART_HPA + 0x800)
|
#define PORT_SERIAL2 (LASI_UART_HPA + 0x800)
|
||||||
|
|
||||||
#define HPPA_MAX_CPUS 32 /* max. number of SMP CPUs */
|
#define HPPA_MAX_CPUS 8 /* max. number of SMP CPUs */
|
||||||
#define CPU_CLOCK_MHZ 250 /* emulate a 250 MHz CPU */
|
#define CPU_CLOCK_MHZ 250 /* emulate a 250 MHz CPU */
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
Subproject commit 1ef99a01572c2581c30e16e6fe69e9ea2ef92ce0
|
Subproject commit 0f4fe84658165e96ce35870fd19fc634e182e77b
|
|
@ -347,6 +347,7 @@ static int expand_shl11(int val)
|
||||||
/* Similarly, but we want to return to the main loop immediately
|
/* Similarly, but we want to return to the main loop immediately
|
||||||
to recognize unmasked interrupts. */
|
to recognize unmasked interrupts. */
|
||||||
#define DISAS_IAQ_N_STALE_EXIT DISAS_TARGET_2
|
#define DISAS_IAQ_N_STALE_EXIT DISAS_TARGET_2
|
||||||
|
#define DISAS_EXIT DISAS_TARGET_3
|
||||||
|
|
||||||
/* global register indexes */
|
/* global register indexes */
|
||||||
static TCGv_reg cpu_gr[32];
|
static TCGv_reg cpu_gr[32];
|
||||||
|
@ -4218,9 +4219,14 @@ static void hppa_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
|
||||||
ctx->iaoq_b = ctx->iaoq_n;
|
ctx->iaoq_b = ctx->iaoq_n;
|
||||||
ctx->base.pc_next += 4;
|
ctx->base.pc_next += 4;
|
||||||
|
|
||||||
if (ret == DISAS_NORETURN || ret == DISAS_IAQ_N_UPDATED) {
|
switch (ret) {
|
||||||
return;
|
case DISAS_NORETURN:
|
||||||
}
|
case DISAS_IAQ_N_UPDATED:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DISAS_NEXT:
|
||||||
|
case DISAS_IAQ_N_STALE:
|
||||||
|
case DISAS_IAQ_N_STALE_EXIT:
|
||||||
if (ctx->iaoq_f == -1) {
|
if (ctx->iaoq_f == -1) {
|
||||||
tcg_gen_mov_reg(cpu_iaoq_f, cpu_iaoq_b);
|
tcg_gen_mov_reg(cpu_iaoq_f, cpu_iaoq_b);
|
||||||
copy_iaoq_entry(cpu_iaoq_b, ctx->iaoq_n, ctx->iaoq_n_var);
|
copy_iaoq_entry(cpu_iaoq_b, ctx->iaoq_n, ctx->iaoq_n_var);
|
||||||
|
@ -4228,10 +4234,17 @@ static void hppa_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
|
||||||
tcg_gen_mov_i64(cpu_iasq_f, cpu_iasq_b);
|
tcg_gen_mov_i64(cpu_iasq_f, cpu_iasq_b);
|
||||||
#endif
|
#endif
|
||||||
nullify_save(ctx);
|
nullify_save(ctx);
|
||||||
ctx->base.is_jmp = DISAS_IAQ_N_UPDATED;
|
ctx->base.is_jmp = (ret == DISAS_IAQ_N_STALE_EXIT
|
||||||
|
? DISAS_EXIT
|
||||||
|
: DISAS_IAQ_N_UPDATED);
|
||||||
} else if (ctx->iaoq_b == -1) {
|
} else if (ctx->iaoq_b == -1) {
|
||||||
tcg_gen_mov_reg(cpu_iaoq_b, ctx->iaoq_n_var);
|
tcg_gen_mov_reg(cpu_iaoq_b, ctx->iaoq_n_var);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hppa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
|
static void hppa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
|
||||||
|
@ -4252,11 +4265,12 @@ static void hppa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
|
||||||
case DISAS_IAQ_N_UPDATED:
|
case DISAS_IAQ_N_UPDATED:
|
||||||
if (ctx->base.singlestep_enabled) {
|
if (ctx->base.singlestep_enabled) {
|
||||||
gen_excp_1(EXCP_DEBUG);
|
gen_excp_1(EXCP_DEBUG);
|
||||||
} else if (is_jmp == DISAS_IAQ_N_STALE_EXIT) {
|
} else if (is_jmp != DISAS_IAQ_N_STALE_EXIT) {
|
||||||
tcg_gen_exit_tb(NULL, 0);
|
|
||||||
} else {
|
|
||||||
tcg_gen_lookup_and_goto_ptr();
|
tcg_gen_lookup_and_goto_ptr();
|
||||||
}
|
}
|
||||||
|
/* FALLTHRU */
|
||||||
|
case DISAS_EXIT:
|
||||||
|
tcg_gen_exit_tb(NULL, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
|
|
Loading…
Reference in a new issue