linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH soc] ARM: use ARM_SINGLE_ARMV7M for ARMv7-M platforms
Date: Fri, 22 May 2015 19:06:47 +0100	[thread overview]
Message-ID: <20150522180647.GM2067@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <1a7d1161d007f0aff2a36ce8d30f14c3@agner.ch>

On Fri, May 22, 2015 at 06:28:16PM +0200, Stefan Agner wrote:
> On 2015-05-22 17:56, Daniel Thompson wrote:
> > On 22/05/15 16:29, Maxime Coquelin wrote:
> >> 2015-05-22 16:50 GMT+02:00 Arnd Bergmann <arnd@arndb.de>:
> >>> [one small request as I have four armv7-m folks on Cc already:
> >>>   could one of you try to fix the warning that I get with every
> >>>   single build: "/git/arm-soc/arch/arm/kernel/head-nommu.S: Assembler
> >>> messages: /git/arm-soc/arch/arm/kernel/head-nommu.S:167: Warning:
> >>> Use of r13 as a source register is deprecated when r15 is the
> >>> destination register."]
> >>
> >> Moving r13 to r12 and returning r12 seems to do the job (see below).
> >> But I don't know if there is a more elegant way, and if it is also
> >> valid for other architectures than armv7-m.
> > 
> > Why not just s/r13/r11/?
> > 
> > (works for me but I'm only working on single core system)
> 
> For ARMv7-M this works, since r11 is not used in the processors
> PROCINFO_INITFUNC function (__cpu_flush in struct proc_info_list, which
> is __v7m_setup in proc-v7m.S).
> 
> However, afaik, head-nommu.S can be used by different processors too,
> hence that register needs to be free to use for all possible __cpu_flush
> implementations.
> 
> That said, proc-v7.S stores r11 on the stack, so it really seems that
> r11 is ok to use?

Please use r3 (as I just said).  We don't need random deviations between
MMU and noMMU stuff - that just makes maintanence of other code more
difficult.

You can also avoid the issues of having it passed through the processor
specific init function (which isn't guaranteed to preserve r13) by
doing this:

-	ldr	r13, =__mmap_switched		@ address to jump to after
-						@ initialising sctlr
	badr	lr, 1f				@ return (PIC) address
	ldr	r12, [r10, #PROCINFO_INITFUNC]
	add	r12, r12, r10
	ret	r12
- 1:	b	__after_proc_init
+1:	ldr	r13, =__mmap_switched		@ address to jump to after
+						@ initialising sctlr
	b	__after_proc_init

However, because you have no MMU to turn on, and no address switch,
you actually don't need any of this.  __after_proc_init can become
a "function" which returns via the link register.

You can then do:

1:	bl	__after_proc_init
	b	__mmap_switched

You'll need to fix secondary_startup in there as well:

-	adr	r4, __secondary_data
-	ldmia	r4, {r7, r12}
	ldr	r7, __secondary_data

#ifdef CONFIG_ARM_MPU
	/* Use MPU region info supplied by __cpu_up */
	ldr	r6, [r7]			@ get secondary_data.mpu_szr
	bl	__setup_mpu			@ Initialize the MPU
#endif

-	badr	lr, __after_proc_init		@ return address
-	mov	r13, r12			@ __secondary_switched address
+	badr	lr, 1f				@ return (PIC) address
	ldr	r12, [r10, #PROCINFO_INITFUNC]
	add	r12, r12, r10
	ret	r12
-ENDPROC(secondary_startup)
-
-ENTRY(__secondary_switched)
+1:	bl	__after_proc_init
	ldr	sp, [r7, #12]			@ set up the stack pointer
	mov	fp, #0
	b	secondary_start_kernel
-ENDPROC(__secondary_switched)
+ENDPROC(secondary_startup)


-- 
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.

  reply	other threads:[~2015-05-22 18:06 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-20 22:35 [PATCH soc] ARM: use ARM_SINGLE_ARMV7M for ARMv7-M platforms Stefan Agner
2015-05-21  6:43 ` Uwe Kleine-König
2015-05-21 17:00 ` Joachim Eastwood
2015-05-21 19:04   ` Uwe Kleine-König
2015-05-22  7:27     ` Stefan Agner
2015-05-22  9:37       ` Arnd Bergmann
2015-05-22  7:53 ` Arnd Bergmann
2015-05-22  8:54   ` Stefan Agner
2015-05-22  9:39     ` Arnd Bergmann
2015-05-22 13:06 ` Maxime Coquelin
2015-05-22 14:50 ` Arnd Bergmann
2015-05-22 15:29   ` Maxime Coquelin
2015-05-22 15:36     ` Stefan Agner
2015-05-22 15:56     ` Daniel Thompson
2015-05-22 16:28       ` Stefan Agner
2015-05-22 18:06         ` Russell King - ARM Linux [this message]
2015-05-22 19:34           ` Stefan Agner
2015-05-22 17:56     ` Russell King - ARM Linux

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=20150522180647.GM2067@n2100.arm.linux.org.uk \
    --to=linux@arm.linux.org.uk \
    --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).