linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: dave.martin@linaro.org (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 2/7] ARM: virt: allow the kernel to be entered in HYP mode
Date: Mon, 8 Oct 2012 12:01:09 +0100	[thread overview]
Message-ID: <20121008110109.GE2302@linaro.org> (raw)
In-Reply-To: <20121006160031.GC3874@atomide.com>

On Sat, Oct 06, 2012 at 09:00:32AM -0700, Tony Lindgren wrote:
> * Marc Zyngier <marc.zyngier@arm.com> [121006 03:19]:
> > 
> > If so, that indicates some side effect of the safe_svcmode_maskall macro,
> > and I suspect the "movs pc, lr" bit.
> > 
> > Can you try the attached patch? It basically falls back to the previous
> > behaviour if not entered in HYP mode.
> ...
> 
> > diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
> > index 658a15d..b21b97f 100644
> > --- a/arch/arm/include/asm/assembler.h
> > +++ b/arch/arm/include/asm/assembler.h
> > @@ -254,16 +254,17 @@
> >  	mov	lr , \reg
> >  	and	lr , lr , #MODE_MASK
> >  	cmp	lr , #HYP_MODE
> > -	orr	\reg , \reg , #PSR_A_BIT | PSR_I_BIT | PSR_F_BIT
> > +	orr	\reg , \reg , #PSR_I_BIT | PSR_F_BIT
> >  	bic	\reg , \reg , #MODE_MASK
> >  	orr	\reg , \reg , #SVC_MODE
> >  THUMB(	orr	\reg , \reg , #PSR_T_BIT	)
> > -	msr	spsr_cxsf, \reg
> > -	adr	lr, BSYM(2f)
> >  	bne	1f
> > +	orr	\reg, \reg, #PSR_A_BIT
> > +	adr	lr, BSYM(2f)
> > +	msr	spsr_cxsf, \reg
> >  	__MSR_ELR_HYP(14)
> >  	__ERET
> > -1:	movs	pc, lr
> > +1:	msr	cpsr_c, \reg
> >  2:
> >  .endm
> >  
> 
> The minimal version of this that still boots on my n800 is just
> the last change of the above patch:
> 
> --- a/arch/arm/include/asm/assembler.h
> +++ b/arch/arm/include/asm/assembler.h
> @@ -263,7 +263,7 @@ THUMB(	orr	\reg , \reg , #PSR_T_BIT	)
>  	bne	1f
>  	__MSR_ELR_HYP(14)
>  	__ERET
> -1:	movs	pc, lr
> +1:	msr	cpsr_c, \reg
>  2:
>  .endm
>  

In an attempt to narrow this down...

Can you follow this (i.e., _after_ a known successful switch to SVC mode)

(a)
	mrs	\reg, cpsr
	msr	spsr_cxsf, \reg
	adr	\reg, 3f
	movs	pc, lr
3:

and (b)

	mrs	\reg, cpsr
	orr	\reg, \reg, #CPSR_A_BIT
	msr	cpsr_cxsf, \reg

and (c)

	mrs	\reg, cpsr
	orr	\reg, \reg, #CPSR_A_BIT
	msr	spsr_cxsf, \reg
	adr	\reg, 3f
	movs	pc, lr
3:




If only (a) works, this would suggest that the attempt to set the A bit
is causing the problem.

If only (b) works, this suggests that the A bit is OK but that some
invalid hardware state, or something else we don't understand, is causing
exception returns to fail in general.

If (a) and (b) work but (c) fails, this suggests that specifically
trying to set the A bit via an exception return is problematic.

If all of them work then this suggests some invalid hardware state or
something else we don't understand, but which is cleared by the initial
msr cpsr_c which clobbers the processor mode.


Cheers
---Dave

  reply	other threads:[~2012-10-08 11:01 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-07 16:55 [PATCH v2 0/7] Allow the kernel to be booted in HYP mode Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 1/7] ARM: opcodes: add __ERET/__MSR_ELR_HYP instruction encoding Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 2/7] ARM: virt: allow the kernel to be entered in HYP mode Marc Zyngier
2012-10-05 20:08   ` Tony Lindgren
2012-10-05 23:09     ` Russell King - ARM Linux
2012-10-05 23:23       ` Tony Lindgren
2012-10-05 23:50         ` Tony Lindgren
2012-10-06  1:32           ` Nicolas Pitre
2012-10-06  3:06             ` Tony Lindgren
2012-10-06 10:18     ` Marc Zyngier
2012-10-06 14:06       ` Nicolas Pitre
2012-10-06 14:44         ` Tony Lindgren
2012-10-06 14:47         ` Marc Zyngier
2012-10-06 14:42       ` Tony Lindgren
2012-10-06 15:32         ` Nicolas Pitre
2012-10-06 15:40           ` Tony Lindgren
2012-10-06 16:06             ` Marc Zyngier
2012-10-06 15:42           ` Russell King - ARM Linux
2012-10-06 16:00       ` Tony Lindgren
2012-10-08 11:01         ` Dave Martin [this message]
2012-10-08 11:33           ` Marc Zyngier
2012-10-08 20:36             ` Tony Lindgren
2012-10-08 11:33           ` Dave Martin
2012-09-07 16:55 ` [PATCH v2 3/7] ARM: zImage/virt: hyp mode entry support for the zImage loader Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 4/7] ARM: virt: Update documentation for hyp mode entry support Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 5/7] ARM: virt: Add boot-time diagnostics Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 6/7] ARM: virt: Add CONFIG_ARM_VIRT_EXT option Marc Zyngier
2012-09-07 16:55 ` [PATCH v2 7/7] ARM: virt: arch_timers: enable access to physical timers Marc Zyngier

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=20121008110109.GE2302@linaro.org \
    --to=dave.martin@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 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).