diff mbox series

[for-4.19] xen/arm64: head: only use the macro load_paddr() in the MMU code

Message ID 20231017125219.76626-1-julien@xen.org (mailing list archive)
State New, archived
Headers show
Series [for-4.19] xen/arm64: head: only use the macro load_paddr() in the MMU code | expand

Commit Message

Julien Grall Oct. 17, 2023, 12:52 p.m. UTC
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(-)

Comments

Michal Orzel Oct. 17, 2023, 2:07 p.m. UTC | #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
Julien Grall Oct. 17, 2023, 2:39 p.m. UTC | #2
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,
diff mbox series

Patch

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.
  */