[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen/arm: debug-pl011: Use 32-bit accessors for broader compatibility


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Michal Orzel <michal.orzel@xxxxxxx>
  • Date: Thu, 1 Jun 2023 10:50:01 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=RhhMDOjNPYL3+25tr9e14rvxZNeuEj3VcU9WF55+zWM=; b=c01EXnI4zewHLEaskLoWb2WWujbK5eQ9U1Ap6pIewUlYdIRQHv8Am6Xf0PxVra6K7JQfGuMY0CtUBBzyc0NGOp6H9KCIJtpHgMWZIISgAjGMBTbPHwdmfIPdYaoYJoIv/5ITDY1GLvCJhyGZtO5iJZvbArcBwri9eY8+uNhWwUJeFbcL4BtCuOp75Zq2MPleqGpBrtoaZLlz+fvA65dIxJ7TehLoVhEC5V98VzcnvBBMLNiZ3Pn25QvNaQzkTJM244EfREIMwcZuxXO3sWOy4Hfadg9YytENZ1JfoCgxxY3YC1lio0nFjGkVlEcgMEbhnfFORsiouiJFkz6Me7kJJg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=W1442Zn3ZvZ2m9U42BOmxBV8GGdblfDLYgzX/SxjJTaxp1V3w/oLY60AEcLgPGnJBPeTfNJBJ7iTdUQnr2nWdPy4up5EpV10kEscYWmUYusPPD4xloySmSdUgKOI3v/wyKA6qzBOwc3BBULrTkHszhDpyG3sdqJjpv+eMNtPVD/XzuBn9YBR+zDn1AUT8tctxXsa+j1aJWCvRG7SD9f6d76PeiLC71JjYtgboaa/TF35su2LZqiwLcdoMP2rljBdseNm1n94QYSCcAqx9u7TYsT1XLUDQTHby0SNHSoc09IcesaJObiQBxf7/Eg+9BYeM11bQV8JXVFn4bc/eTalBw==
  • Cc: Michal Orzel <michal.orzel@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Thu, 01 Jun 2023 08:50:43 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

There are implementations of the PL011 that can only handle 32-bit
accesses (i.e. no 16-bit or 8-bit), usually advertised by 'reg-io-width'
dt property set to 4. On such UARTs, the current early printk code for
arm64 does not work. To fix this issue, make all the accesses to be 32-bit
by using ldr, str without a size field. This makes it possible to use
early printk on such platforms, while all the other implementations should
generally cope with 32-bit accesses. In case they do not, they would
already fail as we explicitly use writel/readl in the runtime driver to
maintain broader compatibility and to be SBSAv2 compliant. Therefore, this
change makes the runtime/early handling consistent (also it matches the
arm32 debug-pl011 code).

Signed-off-by: Michal Orzel <michal.orzel@xxxxxxx>
---
 xen/arch/arm/arm64/debug-pl011.inc | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/xen/arch/arm/arm64/debug-pl011.inc 
b/xen/arch/arm/arm64/debug-pl011.inc
index 6d60e78c8ba3..80eb8fdc1ec7 100644
--- a/xen/arch/arm/arm64/debug-pl011.inc
+++ b/xen/arch/arm/arm64/debug-pl011.inc
@@ -25,9 +25,9 @@
  */
 .macro early_uart_init xb, c
         mov   x\c, #(7372800 / CONFIG_EARLY_UART_PL011_BAUD_RATE % 16)
-        strh  w\c, [\xb, #FBRD]      /* -> UARTFBRD (Baud divisor fraction) */
+        str   w\c, [\xb, #FBRD]      /* -> UARTFBRD (Baud divisor fraction) */
         mov   x\c, #(7372800 / CONFIG_EARLY_UART_PL011_BAUD_RATE / 16)
-        strh  w\c, [\xb, #IBRD]      /* -> UARTIBRD (Baud divisor integer) */
+        str   w\c, [\xb, #IBRD]      /* -> UARTIBRD (Baud divisor integer) */
         mov   x\c, #WLEN_8           /* 8n1 */
         str   w\c, [\xb, #LCR_H]     /* -> UARTLCR_H (Line control) */
         ldr   x\c, =(RXE | TXE | UARTEN)
@@ -41,7 +41,7 @@
  */
 .macro early_uart_ready xb, c
 1:
-        ldrh  w\c, [\xb, #FR]        /* <- UARTFR (Flag register) */
+        ldr   w\c, [\xb, #FR]        /* <- UARTFR (Flag register) */
         tst   w\c, #BUSY             /* Check BUSY bit */
         b.ne  1b                     /* Wait for the UART to be ready */
 .endm
@@ -52,7 +52,7 @@
  * wt: register which contains the character to transmit
  */
 .macro early_uart_transmit xb, wt
-        strb  \wt, [\xb, #DR]        /* -> UARTDR (Data Register) */
+        str   \wt, [\xb, #DR]        /* -> UARTDR (Data Register) */
 .endm
 
 /*
-- 
2.25.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.