From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [PATCH 10/19] xen: arm: Annotate registers trapped by CPTR_EL2.TTA Date: Tue, 31 Mar 2015 11:07:33 +0100 Message-ID: <1427796462-24376-10-git-send-email-ian.campbell@citrix.com> References: <1427796446.2115.34.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1427796446.2115.34.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: julien.grall@linaro.org, tim@xen.org, Ian Campbell , stefano.stabellini@eu.citrix.com List-Id: xen-devel@lists.xenproject.org Add explicit handler for 64-bit CP14 accesses, with more relevant debug message (as per other handlers) and to provide a place for the comment. Signed-off-by: Ian Campbell --- xen/arch/arm/traps.c | 43 +++++++++++++++++++++++++++++++++++++- xen/include/asm-arm/perfc_defn.h | 1 + 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index e26e673..9cdbda8 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -1810,6 +1810,13 @@ static void do_cp14_32(struct cpu_user_regs *regs, const union hsr hsr) case HSR_CPREG32(DBGOSLAR): return handle_wo_wi(regs, r, cp32.read, hsr, 1); + + /* + * CPTR_EL2.TTA + * + * ARMv7 (DDI 0406C.b): B1.14.16 + * ARMv8 (DDI 0487A.d): D1-1507 Table D1-54 + */ default: gdprintk(XENLOG_ERR, "%s p14, %d, r%d, cr%d, cr%d, %d @ 0x%"PRIregister"\n", @@ -1824,7 +1831,7 @@ static void do_cp14_32(struct cpu_user_regs *regs, const union hsr hsr) advance_pc(regs, hsr); } -static void do_cp14_dbg(struct cpu_user_regs *regs, const union hsr hsr) +static void do_cp14_64(struct cpu_user_regs *regs, const union hsr hsr) { const struct hsr_cp64 cp64 = hsr.cp64; @@ -1834,12 +1841,37 @@ static void do_cp14_dbg(struct cpu_user_regs *regs, const union hsr hsr) return; } + /* + * CPTR_EL2.TTA + * + * ARMv7 (DDI 0406C.b): B1.14.16 + * ARMv8 (DDI 0487A.d): D1-1507 Table D1-54 + */ gdprintk(XENLOG_ERR, "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n", cp64.read ? "mrrc" : "mcrr", cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc); gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 access %#x\n", hsr.bits & HSR_CP64_REGS_MASK); + inject_undef_exception(regs, hsr); +} + +static void do_cp14_dbg(struct cpu_user_regs *regs, const union hsr hsr) +{ + struct hsr_cp64 cp64 = hsr.cp64; + + if ( !check_conditional_instr(regs, hsr) ) + { + advance_pc(regs, hsr); + return; + } + + gdprintk(XENLOG_ERR, + "%s p14, %d, r%d, r%d, cr%d @ 0x%"PRIregister"\n", + cp64.read ? "mrrc" : "mcrr", + cp64.op1, cp64.reg1, cp64.reg2, cp64.crm, regs->pc); + gdprintk(XENLOG_ERR, "unhandled 64-bit CP14 DBG access %#x\n", + hsr.bits & HSR_CP64_REGS_MASK); inject_undef_exception(regs, hsr); } @@ -1962,6 +1994,10 @@ static void do_sysreg(struct cpu_user_regs *regs, * * ARMv8 (DDI 0487A.d): D1-1501 Table D1-43 * + * CPTR_EL2.TTA + * + * ARMv8 (DDI 0487A.d): D1-1507 Table D1-54 + * * And all other unknown registers. */ default: @@ -2156,6 +2192,11 @@ asmlinkage void do_trap_hypervisor(struct cpu_user_regs *regs) perfc_incr(trap_cp14_32); do_cp14_32(regs, hsr); break; + case HSR_EC_CP14_64: + GUEST_BUG_ON(!psr_mode_is_32bit(regs->cpsr)); + perfc_incr(trap_cp14_64); + do_cp14_64(regs, hsr); + break; case HSR_EC_CP14_DBG: GUEST_BUG_ON(!psr_mode_is_32bit(regs->cpsr)); perfc_incr(trap_cp14_dbg); diff --git a/xen/include/asm-arm/perfc_defn.h b/xen/include/asm-arm/perfc_defn.h index 46015f5..69fabe7 100644 --- a/xen/include/asm-arm/perfc_defn.h +++ b/xen/include/asm-arm/perfc_defn.h @@ -9,6 +9,7 @@ PERFCOUNTER(trap_wfe, "trap: wfe") PERFCOUNTER(trap_cp15_32, "trap: cp15 32-bit access") PERFCOUNTER(trap_cp15_64, "trap: cp15 64-bit access") PERFCOUNTER(trap_cp14_32, "trap: cp14 32-bit access") +PERFCOUNTER(trap_cp14_64, "trap: cp14 64-bit access") PERFCOUNTER(trap_cp14_dbg, "trap: cp14 dbg access") PERFCOUNTER(trap_cp, "trap: cp access") PERFCOUNTER(trap_smc32, "trap: 32-bit smc") -- 1.7.10.4