[PATCH v3] ARM: imx: replicate the diagnostic register of boot cpu into secondary cores

Shawn Guo shawn.guo at linaro.org
Fri Apr 26 09:47:24 EDT 2013


On Fri, Apr 26, 2013 at 02:21:30PM +0100, Will Deacon wrote:
> > diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
> > index a58c8b0..cd87970 100644
> > --- a/arch/arm/mach-imx/headsmp.S
> > +++ b/arch/arm/mach-imx/headsmp.S
> > @@ -18,8 +18,20 @@
> >  	.section ".text.head", "ax"
> >  
> >  #ifdef CONFIG_SMP
> > +diag_reg_offset:
> > +	.word	g_diag_reg - .
> > +
> > +	.macro	set_diag_reg
> > +	adr	r0, diag_reg_offset
> > +	ldr	r1, [r0]
> > +	add	r1, r1, r0		@ r1 = physical &g_diag_reg
> > +	ldr	r0, [r1]
> > +	mcr	p15, 0, r0, c15, c0, 1	@ write diagnostic register
> > +	.endm
> 
> Why not re-read the register directly, rather than mrc on the current core?

I do not understand the comment.  What do you mean by "re-read"?  Read
the register on secondary cores will only return us 0, as bootloader
only sets up the register on cpu0.  The macro set_diag_reg only runs on
secondary cores to copy cpu0's diagnostic bits.  I think it's safe on
SMP.

Shawn

> I feel uneasy about blindly copying one CPU's diagnostic bits into another.
> It would also make the code simpler.




More information about the linux-arm-kernel mailing list