Hi Wei,
On 11/08/2021 11:23, Wei Chen wrote:
Current putn function that is using for early print
only can print low 32-bit of AArch64 register. This
will lose some important messages while debugging
with early console. For example:
(XEN) Bringing up CPU5
- CPU 0000000100000100 booting -
Will be truncated to
(XEN) Bringing up CPU5
- CPU 00000100 booting -
In this patch, we increased the print loops and shift
bits to make putn print 64-bit number.
Signed-off-by: Wei Chen <wei.c...@arm.com>
Acked-by: Julien Grall <jgr...@amazon.com>
---
xen/arch/arm/arm64/head.S | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index aa1f88c764..b32639d7d6 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -862,17 +862,18 @@ puts:
ret
ENDPROC(puts)
-/* Print a 32-bit number in hex. Specific to the PL011 UART.
+/* Print a 64-bit number in hex. Specific to the PL011 UART.
As you modify the line, can you take the opportunity to write:
/*
* Print a 64-bit...
And also drop the second sentence as it the code has not been PL011
specific for quite a while now.
* x0: Number to print.
* x23: Early UART base address
* Clobbers x0-x3 */
+#define PRINT_MASK 0xf000000000000000
putn:
adr x1, hex
- mov x3, #8
+ mov x3, #16
1:
early_uart_ready x23, 2
- and x2, x0, #0xf0000000 /* Mask off the top nybble */
- lsr x2, x2, #28
+ and x2, x0, #PRINT_MASK /* Mask off the top nybble */
+ lsr x2, x2, #60
ldrb w2, [x1, x2] /* Convert to a char */
early_uart_transmit x23, w2
lsl x0, x0, #4 /* Roll it through one nybble at a time
*/
Cheers,
--
Julien Grall