xen/arch/arm/arm64/head.S | 4 ++-- xen/arch/arm/arm64/mmu/head.S | 6 ++++++ xen/arch/arm/include/asm/arm64/macros.h | 6 ------ 3 files changed, 8 insertions(+), 8 deletions(-)
The macro load_paddr() requires to know the offset between the
physical location of Xen and the virtual location.
When using the MPU, x20 will always be 0. Rather than wasting
a register for a compile-time constant value, it would be best if
we can avoid using load_paddr() altogher in the common head.S code.
The current use of load_paddr() are equivalent to adr_l() because
the MMU is off.
All the use of load_paddr() in arm64/head.S are now replaced with
adr_l(). With that, load_paddr() can now be moved in arm64/mmu/head.S.
For now, x20 is still unconditionally set. But this could change
in the future if needed.
Signed-off-by: Julien Grall <julien@xen.org>
---
xen/arch/arm/arm64/head.S | 4 ++--
xen/arch/arm/arm64/mmu/head.S | 6 ++++++
xen/arch/arm/include/asm/arm64/macros.h | 6 ------
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index 4ad85dcf58d2..8dbd3300d89f 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -259,7 +259,7 @@ real_start_efi:
/* Using the DTB in the .dtb section? */
.ifnes CONFIG_DTB_FILE,""
- load_paddr x21, _sdtb
+ adr_l x21, _sdtb
.endif
/* Initialize the UART if earlyprintk has been enabled. */
@@ -301,7 +301,7 @@ GLOBAL(init_secondary)
bic x24, x0, x13 /* Mask out flags to get CPU ID */
/* Wait here until __cpu_up is ready to handle the CPU */
- load_paddr x0, smp_up_cpu
+ adr_l x0, smp_up_cpu
dsb sy
2: ldr x1, [x0]
cmp x1, x24
diff --git a/xen/arch/arm/arm64/mmu/head.S b/xen/arch/arm/arm64/mmu/head.S
index 88075ef08334..412b28e649a4 100644
--- a/xen/arch/arm/arm64/mmu/head.S
+++ b/xen/arch/arm/arm64/mmu/head.S
@@ -19,6 +19,12 @@
#define XEN_FIRST_SLOT first_table_offset(XEN_VIRT_START)
#define XEN_SECOND_SLOT second_table_offset(XEN_VIRT_START)
+/* Load the physical address of a symbol into xb */
+.macro load_paddr xb, sym
+ ldr \xb, =\sym
+ add \xb, \xb, x20
+.endm
+
/*
* Flush local TLBs
*
diff --git a/xen/arch/arm/include/asm/arm64/macros.h b/xen/arch/arm/include/asm/arm64/macros.h
index 99c401fcafa9..fb9a0602494d 100644
--- a/xen/arch/arm/include/asm/arm64/macros.h
+++ b/xen/arch/arm/include/asm/arm64/macros.h
@@ -62,12 +62,6 @@
add \dst, \dst, :lo12:\sym
.endm
-/* Load the physical address of a symbol into xb */
-.macro load_paddr xb, sym
- ldr \xb, =\sym
- add \xb, \xb, x20
-.endm
-
/*
* Register aliases.
*/
--
2.40.1
Hi Julien, On 17/10/2023 14:52, Julien Grall wrote: > > > The macro load_paddr() requires to know the offset between the > physical location of Xen and the virtual location. > > When using the MPU, x20 will always be 0. Rather than wasting > a register for a compile-time constant value, it would be best if > we can avoid using load_paddr() altogher in the common head.S code. s/altogher/altogether/ > > The current use of load_paddr() are equivalent to adr_l() because > the MMU is off. > > All the use of load_paddr() in arm64/head.S are now replaced with > adr_l(). With that, load_paddr() can now be moved in arm64/mmu/head.S. > > For now, x20 is still unconditionally set. But this could change > in the future if needed. > > Signed-off-by: Julien Grall <julien@xen.org> Reviewed-by: Michal Orzel <michal.orzel@amd.com> Side note: Looking at all the uses of load_paddr(), none of them takes place after enabling MMU which would indicate that we actually don't need this macro at all. Do you agree? ~Michal
Hi, On 17/10/2023 15:07, Michal Orzel wrote: > On 17/10/2023 14:52, Julien Grall wrote: >> >> >> The macro load_paddr() requires to know the offset between the >> physical location of Xen and the virtual location. >> >> When using the MPU, x20 will always be 0. Rather than wasting >> a register for a compile-time constant value, it would be best if >> we can avoid using load_paddr() altogher in the common head.S code. > s/altogher/altogether/ I will fix it. > >> >> The current use of load_paddr() are equivalent to adr_l() because >> the MMU is off. >> >> All the use of load_paddr() in arm64/head.S are now replaced with >> adr_l(). With that, load_paddr() can now be moved in arm64/mmu/head.S. >> >> For now, x20 is still unconditionally set. But this could change >> in the future if needed. >> >> Signed-off-by: Julien Grall <julien@xen.org> > Reviewed-by: Michal Orzel <michal.orzel@amd.com> > > Side note: > Looking at all the uses of load_paddr(), none of them takes place after enabling MMU > which would indicate that we actually don't need this macro at all. Do you agree? I agree they are none today called after enabling the MMU. But, create_table_entry() used to be called after and I can't rule out this will not happen again. So I don't think we should replace the use in create_table_entry() with adr_l. We could consider to open-code code though. Cheers, -- Julien Grall
© 2016 - 2024 Red Hat, Inc.