blob: 2346109c0284ae5a229599d8a716f5b01ed22db2 [file] [log] [blame]
Andrew Geissler9347dd42023-03-03 12:38:41 -06001From f0ece5e8cac761a76a86df7204bae7c6ef09215f Mon Sep 17 00:00:00 2001
Brad Bishopbec4ebc2022-08-03 09:55:16 -04002From: Jaxson Han <jaxson.han@arm.com>
3Date: Wed, 29 Dec 2021 10:50:21 +0800
4Subject: [PATCH] platform: Add print_hex func
5
6Refine the print functions, and add a new print_hex func to print hex
7numbers.
8
9Issue-Id: SCM-3814
10Upstream-Status: Inappropriate [other]
11 Implementation pending further discussion
12Signed-off-by: Jaxson Han <jaxson.han@arm.com>
13Change-Id: Ic960345d9ef0b41d81d30c4a4dbd9c31139907c4
14---
15 common/platform.c | 33 +++++++++++++++++++++++++--------
16 1 file changed, 25 insertions(+), 8 deletions(-)
17
18diff --git a/common/platform.c b/common/platform.c
19index d11f568..8269392 100644
20--- a/common/platform.c
21+++ b/common/platform.c
22@@ -30,20 +30,37 @@
23 #define V2M_SYS(reg) ((void *)SYSREGS_BASE + V2M_SYS_##reg)
24 #endif
25
26-static void print_string(const char *str)
27+static void print_char(const char c)
28 {
29 uint32_t flags;
30+ do {
31+ flags = raw_readl(PL011(UARTFR));
32+ } while (flags & PL011_UARTFR_FIFO_FULL);
33
34+ raw_writel(c, PL011(UARTDR));
35+
36+ do {
37+ flags = raw_readl(PL011(UARTFR));
38+ } while (flags & PL011_UARTFR_BUSY);
39+}
40+
41+void print_string(const char *str)
42+{
43 while (*str) {
44- do
45- flags = raw_readl(PL011(UARTFR));
46- while (flags & PL011_UARTFR_FIFO_FULL);
47+ print_char(*str++);
48+ }
49+}
50
51- raw_writel(*str++, PL011(UARTDR));
52+#define HEX_CHARS_PER_INT (2 * sizeof(int))
53+
54+void print_hex(unsigned int val)
55+{
56
57- do
58- flags = raw_readl(PL011(UARTFR));
59- while (flags & PL011_UARTFR_BUSY);
60+ const char hex_chars[16] = "0123456789abcdef";
61+ int i;
62+ for (i = HEX_CHARS_PER_INT - 1; i >= 0; i--) {
63+ int v = (val >> (4 * i)) & 0xf;
64+ print_char(hex_chars[v]);
65 }
66 }
67