Commit 3752ac89 authored by Peter Maydell's avatar Peter Maydell
Browse files

Merge remote-tracking branch 'remotes/agraf/tags/signed-s390-for-upstream' into staging



Patch queue for s390 - 2014-11-05

Two simple bug fixes to enable slightly newer guest kernels
and preliminary -M s390-ccw support for TCG (virtio doesn't work yet!)

# gpg: Signature made Wed 05 Nov 2014 11:01:55 GMT using RSA key ID 03FEDC60
# gpg: Good signature from "Alexander Graf <agraf@suse.de>"
# gpg:                 aka "Alexander Graf <alex@csgraf.de>"

* remotes/agraf/tags/signed-s390-for-upstream:
  s390x: Implement SAM{24,31,64}
  s390x: Fix sclp console input

Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parents 30de46db 44dd33ba
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -744,9 +744,9 @@
/* SERVICE CALL LOGICAL PROCESSOR (PV hypercall) */
    C(0xb220, SERVC,   RRE,   Z,   r1_o, r2_o, 0, 0, servc, 0)
/* SET ADDRESSING MODE */
    /* We only do 64-bit, so accept this as a no-op.
       Let SAM24 and SAM31 signal illegal instruction.  */
    C(0x010e, SAM64,   E,     Z,   0, 0, 0, 0, 0, 0)
    D(0x010c, SAM24,   E,     Z,   0, 0, 0, 0, sam, 0, 0)
    D(0x010d, SAM31,   E,     Z,   0, 0, 0, 0, sam, 0, 1)
    D(0x010e, SAM64,   E,     Z,   0, 0, 0, 0, sam, 0, 3)
/* SET ADDRESS SPACE CONTROL FAST */
    C(0xb279, SACF,    S,     Z,   0, a2, 0, 0, sacf, 0)
/* SET CLOCK */
+0 −2
Original line number Diff line number Diff line
@@ -22,9 +22,7 @@ void s390_sclp_extint(uint32_t parm)
        kvm_s390_service_interrupt(parm);
    } else {
        S390CPU *dummy_cpu = s390_cpu_addr2state(0);
        CPUS390XState *env = &dummy_cpu->env;

        env->psw.addr += 4;
        cpu_inject_ext(dummy_cpu, EXT_SERVICE, parm, 0);
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -2925,6 +2925,18 @@ static ExitStatus op_sacf(DisasContext *s, DisasOps *o)
    /* Addressing mode has changed, so end the block.  */
    return EXIT_PC_STALE;
}

static ExitStatus op_sam(DisasContext *s, DisasOps *o)
{
    int sam = s->insn->data;
    TCGv_i64 tsam = tcg_const_i64(sam);

    /* Overwrite PSW_MASK_64 and PSW_MASK_32 */
    tcg_gen_deposit_i64(psw_mask, psw_mask, tsam, 31, 2);

    tcg_temp_free_i64(tsam);
    return EXIT_PC_STALE;
}
#endif

static ExitStatus op_sar(DisasContext *s, DisasOps *o)