summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-rockchip
diff options
context:
space:
mode:
authorhuang lin <hl@rock-chips.com>2015-11-17 14:20:25 +0800
committerSimon Glass <sjg@chromium.org>2015-12-01 08:07:22 -0700
commit07d8d35a612b30e37256179fc6fd40158bcb528e (patch)
treefb247c1bfd8287336b504ee7616038ca7c19994e /arch/arm/mach-rockchip
parent2863724831a37b7ef84ba7490c4d41e678191b03 (diff)
downloadblackbird-obmc-uboot-07d8d35a612b30e37256179fc6fd40158bcb528e.tar.gz
blackbird-obmc-uboot-07d8d35a612b30e37256179fc6fd40158bcb528e.zip
rockchip: add early uart driver
add early uart driver so we can print debug message in SPL stage Signed-off-by: Lin Huang <hl@rock-chips.com> Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/arm/mach-rockchip')
-rw-r--r--arch/arm/mach-rockchip/Makefile1
-rw-r--r--arch/arm/mach-rockchip/rk_early_print.c63
2 files changed, 64 insertions, 0 deletions
diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
index 902235b867..a29675ddf1 100644
--- a/arch/arm/mach-rockchip/Makefile
+++ b/arch/arm/mach-rockchip/Makefile
@@ -10,5 +10,6 @@ else
obj-y += board.o
endif
obj-y += rk_timer.o
+obj-y += rk_early_print.o
obj-$(CONFIG_$(SPL_)ROCKCHIP_COMMON) += common.o
obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
diff --git a/arch/arm/mach-rockchip/rk_early_print.c b/arch/arm/mach-rockchip/rk_early_print.c
new file mode 100644
index 0000000000..a1c14b0210
--- /dev/null
+++ b/arch/arm/mach-rockchip/rk_early_print.c
@@ -0,0 +1,63 @@
+/*
+ * (C) Copyright 2015 Rockchip Electronics Co., Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <asm/io.h>
+#include <asm/arch/uart.h>
+#include <common.h>
+
+static struct rk_uart *uart_ptr;
+
+static void uart_wrtie_byte(char byte)
+{
+ writel(byte, &uart_ptr->rbr);
+ while (!(readl(&uart_ptr->lsr) & 0x40))
+ ;
+}
+
+void print(char *s)
+{
+ while (*s) {
+ if (*s == '\n')
+ uart_wrtie_byte('\r');
+ uart_wrtie_byte(*s);
+ s++;
+ }
+}
+
+void print_hex(unsigned int n)
+{
+ int i;
+ int temp;
+
+ uart_wrtie_byte('0');
+ uart_wrtie_byte('x');
+
+ for (i = 8; i > 0; i--) {
+ temp = (n >> (i - 1) * 4) & 0x0f;
+ if (temp < 10)
+ uart_wrtie_byte((char)(temp + '0'));
+ else
+ uart_wrtie_byte((char)(temp - 10 + 'a'));
+ }
+ uart_wrtie_byte('\n');
+ uart_wrtie_byte('\r');
+}
+
+/*
+ * TODO: since rk3036 only 4K sram to use in SPL, for saving space,
+ * we implement uart driver this way, we should convert this to use
+ * ns16550 driver in future, which support DEBUG_UART in the standard way
+ */
+void rk_uart_init(void *base)
+{
+ uart_ptr = (struct rk_uart *)base;
+ writel(0x83, &uart_ptr->lcr);
+ writel(0x0d, &uart_ptr->rbr);
+ writel(0x03, &uart_ptr->lcr);
+
+ /* fifo enable, sfe is shadow register of FCR[0] */
+ writel(0x01, &uart_ptr->sfe);
+}
OpenPOWER on IntegriCloud