From: Julien Grall <julien.grall@arm.com>
To: xen-devel@lists.xenproject.org
Cc: andre.przywara@arm.com, Julien Grall <julien.grall@arm.com>,
Stefano Stabellini <sstabellini@kernel.org>,
andrii_anisov@epam.com, Oleksandr_Tyshchenko@epam.com
Subject: [Xen-devel] [PATCH 16/17] xen/arm64: head: Rework and document launch()
Date: Mon, 10 Jun 2019 20:32:14 +0100 [thread overview]
Message-ID: <20190610193215.23704-17-julien.grall@arm.com> (raw)
In-Reply-To: <20190610193215.23704-1-julien.grall@arm.com>
Boot CPU and secondary CPUs will use different entry point to C code. At
the moment, the decision on which entry to use is taken within launch().
In order to avoid a branch for the decision and make the code clearer,
launch() is reworked to take in parameters the entry point and its
arguments.
Lastly, document the behavior and the main registers usage within the
function.
Signed-off-by: Julien Grall <julien.grall@arm.com>
---
xen/arch/arm/arm64/head.S | 41 +++++++++++++++++++++++++----------------
1 file changed, 25 insertions(+), 16 deletions(-)
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index 4f7fa6769f..130ab66d8e 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -312,6 +312,11 @@ primary_switched:
/* Use a virtual address to access the UART. */
ldr x23, =EARLY_UART_VIRTUAL_ADDRESS
#endif
+ PRINT("- Ready -\r\n")
+ /* Setup the arguments for start_xen and jump to C world */
+ mov x0, x20 /* x0 := phys_offset */
+ mov x1, x21 /* x1 := paddr(FDT) */
+ ldr x2, =start_xen
b launch
ENDPROC(real_start)
@@ -374,6 +379,9 @@ secondary_switched:
/* Use a virtual address to access the UART. */
ldr x23, =EARLY_UART_VIRTUAL_ADDRESS
#endif
+ PRINT("- Ready -\r\n")
+ /* Jump to C world */
+ ldr x2, =start_secondary
b launch
ENDPROC(init_secondary)
@@ -734,23 +742,24 @@ setup_fixmap:
ret
ENDPROC(setup_fixmap)
+/*
+ * Setup the initial stack and jump to the C world
+ *
+ * Inputs:
+ * x0 : Argument 0 of the C function to call
+ * x1 : Argument 1 of the C function to call
+ * x2 : C entry point
+ */
launch:
- PRINT("- Ready -\r\n")
-
- ldr x0, =init_data
- add x0, x0, #INITINFO_stack /* Find the boot-time stack */
- ldr x0, [x0]
- add x0, x0, #STACK_SIZE /* (which grows down from the top). */
- sub x0, x0, #CPUINFO_sizeof /* Make room for CPU save record */
- mov sp, x0
-
- cbnz x22, 1f
-
- mov x0, x20 /* Marshal args: - phys_offset */
- mov x1, x21 /* - FDT */
- b start_xen /* and disappear into the land of C */
-1:
- b start_secondary /* (to the appropriate entry point) */
+ ldr x4, =init_data
+ add x4, x4, #INITINFO_stack /* Find the boot-time stack */
+ ldr x4, [x4]
+ add x4, x4, #STACK_SIZE /* (which grows down from the top). */
+ sub x4, x4, #CPUINFO_sizeof /* Make room for CPU save record */
+ mov sp, x4
+
+ /* Jump to C world */
+ br x2
ENDPROC(launch)
/* Fail-stop */
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-06-10 19:32 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-10 19:31 [Xen-devel] [PATCH 00/17] xen/arm64: Rework head.S to make it more compliant with the Arm Arm Julien Grall
2019-06-10 19:31 ` [Xen-devel] [PATCH 01/17] xen/arm64: head Mark the end of subroutines with ENDPROC Julien Grall
2019-06-25 23:23 ` Stefano Stabellini
2019-06-10 19:32 ` [Xen-devel] [PATCH 02/17] xen/arm64: head: Don't clobber x30/lr in the macro PRINT Julien Grall
2019-06-25 23:35 ` Stefano Stabellini
2019-06-25 23:59 ` Stefano Stabellini
2019-06-26 9:07 ` Julien Grall
2019-06-26 15:27 ` Stefano Stabellini
2019-06-26 15:28 ` Julien Grall
2019-06-26 18:32 ` Stefano Stabellini
2019-06-26 19:24 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 03/17] xen/arm64: head: Rework UART initialization on boot CPU Julien Grall
2019-06-25 23:49 ` Stefano Stabellini
2019-06-10 19:32 ` [Xen-devel] [PATCH 04/17] xen/arm64: head: Don't "reserve" x24 for the CPUID Julien Grall
2019-06-26 0:01 ` Stefano Stabellini
2019-06-26 9:09 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 05/17] xen/arm64: head: Introduce print_reg Julien Grall
2019-06-26 0:09 ` Stefano Stabellini
2019-06-26 9:10 ` Julien Grall
2019-07-15 18:46 ` Volodymyr Babchuk
2019-07-16 9:55 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 06/17] xen/arm64: head: Introduce distinct paths for the boot CPU and secondary CPUs Julien Grall
2019-06-26 1:00 ` Stefano Stabellini
2019-06-26 9:14 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 07/17] xen/arm64: head: Rework and document check_cpu_mode() Julien Grall
2019-06-26 1:00 ` Stefano Stabellini
2019-06-10 19:32 ` [Xen-devel] [PATCH 08/17] xen/arm64: head: Rework and document zero_bss() Julien Grall
2019-06-26 1:01 ` Stefano Stabellini
2019-06-26 9:16 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 09/17] xen/arm64: head: Improve coding style and document cpu_init() Julien Grall
2019-06-26 1:01 ` Stefano Stabellini
2019-06-26 10:34 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 10/17] xen/arm64: head: Improve coding style and document create_pages_tables() Julien Grall
2019-06-26 1:03 ` Stefano Stabellini
2019-06-26 11:20 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 11/17] xen/arm64: head: Document enable_mmu() Julien Grall
2019-06-26 1:03 ` Stefano Stabellini
2019-06-26 11:23 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 12/17] xen/arm64: head: Move assembly switch to the runtime PT in secondary CPUs path Julien Grall
2019-06-26 1:03 ` Stefano Stabellini
2019-06-10 19:32 ` [Xen-devel] [PATCH 13/17] xen/arm64: head: Don't setup the fixmap on secondary CPUs Julien Grall
2019-06-26 18:51 ` Stefano Stabellini
2019-06-26 19:26 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 14/17] xen/arm64: head: Remove ID map as soon as it is not used Julien Grall
2019-06-26 20:25 ` Stefano Stabellini
2019-06-26 20:39 ` Julien Grall
2019-06-26 20:44 ` Andrew Cooper
2019-06-28 0:36 ` Stefano Stabellini
2019-06-27 18:55 ` Stefano Stabellini
2019-06-27 19:30 ` Julien Grall
2019-07-10 19:39 ` Julien Grall
2019-07-30 17:33 ` Stefano Stabellini
2019-07-30 19:52 ` Julien Grall
2019-07-31 20:40 ` Stefano Stabellini
2019-07-31 21:07 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 15/17] xen/arm64: head: Rework and document setup_fixmap() Julien Grall
2019-06-26 19:01 ` Stefano Stabellini
2019-06-26 19:30 ` Julien Grall
2019-06-27 9:29 ` Julien Grall
2019-06-27 15:38 ` Stefano Stabellini
2019-06-26 19:02 ` Stefano Stabellini
2019-06-27 9:19 ` Julien Grall
2019-06-10 19:32 ` Julien Grall [this message]
2019-06-26 19:12 ` [Xen-devel] [PATCH 16/17] xen/arm64: head: Rework and document launch() Stefano Stabellini
2019-06-26 20:09 ` Julien Grall
2019-06-10 19:32 ` [Xen-devel] [PATCH 17/17] xen/arm64: Zero BSS after the MMU and D-cache is turned on Julien Grall
2019-06-26 19:29 ` Stefano Stabellini
2019-06-26 20:07 ` Julien Grall
2019-06-26 21:08 ` Stefano Stabellini
2019-06-27 11:04 ` Julien Grall
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=20190610193215.23704-17-julien.grall@arm.com \
--to=julien.grall@arm.com \
--cc=Oleksandr_Tyshchenko@epam.com \
--cc=andre.przywara@arm.com \
--cc=andrii_anisov@epam.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.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).