From: Antony Pavlov <antonynpavlov@gmail.com>
To: barebox@lists.infradead.org
Subject: [PATCH 3/5] MIPS: mach-ath79: debug_ll.h: add assembler routines
Date: Mon, 4 May 2015 15:29:23 +0300 [thread overview]
Message-ID: <1430742565-18714-4-git-send-email-antonynpavlov@gmail.com> (raw)
In-Reply-To: <1430742565-18714-1-git-send-email-antonynpavlov@gmail.com>
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
---
arch/mips/mach-ath79/include/mach/debug_ll.h | 136 ++++++++++++++++++++++++++-
1 file changed, 131 insertions(+), 5 deletions(-)
diff --git a/arch/mips/mach-ath79/include/mach/debug_ll.h b/arch/mips/mach-ath79/include/mach/debug_ll.h
index de4c00d..c697318 100644
--- a/arch/mips/mach-ath79/include/mach/debug_ll.h
+++ b/arch/mips/mach-ath79/include/mach/debug_ll.h
@@ -18,17 +18,26 @@
#ifndef __AR933X_DEBUG_LL__
#define __AR933X_DEBUG_LL__
-#include <io.h>
-#include <linux/bitops.h>
#include <asm/addrspace.h>
-#include <mach/ar71xx_regs.h>
+/* Alas! <mach/ar71xx_regs.h> isn't assembly-tolerant */
+#define AR71XX_APB_BASE 0x18000000
+#define AR933X_UART_BASE (AR71XX_APB_BASE + 0x00020000)
+
+#define DEBUG_LL_UART_ADDR KSEG1ADDR(AR933X_UART_BASE)
#define AR933X_UART_DATA_REG 0x00
#define AR933X_UART_DATA_TX_RX_MASK 0xff
-#define AR933X_UART_DATA_TX_CSR BIT(9)
+#define AR933X_UART_DATA_TX_CSR 0x200
+#define AR933X_UART_DATA_RX_CSR 0x100
-#define DEBUG_LL_UART_ADDR KSEG1ADDR(AR933X_UART_BASE)
+#ifndef __ASSEMBLY__
+
+#include <io.h>
+
+/*
+ * C macros
+ */
static inline void ar933x_debug_ll_writel(u32 b, int offset)
{
@@ -52,5 +61,122 @@ static inline void PUTC_LL(int ch)
data = (ch & AR933X_UART_DATA_TX_RX_MASK) | AR933X_UART_DATA_TX_CSR;
ar933x_debug_ll_writel(data, AR933X_UART_DATA_REG);
}
+#else /* __ASSEMBLY__ */
+/*
+ * Macros for use in assembly language code
+ */
+
+/*
+ * output a character in a0
+ */
+.macro debug_ll_outc_a0
+#ifdef CONFIG_DEBUG_LL
+ .set push
+ .set reorder
+
+ la t0, DEBUG_LL_UART_ADDR
+201:
+ lw t1, AR933X_UART_DATA_REG(t0) /* get line status */
+ andi t1, t1, AR933X_UART_DATA_TX_CSR /* check for transmitter empty */
+ beqz t1, 201b /* try again */
+ andi a0, a0, AR933X_UART_DATA_TX_RX_MASK
+ ori a0, a0, AR933X_UART_DATA_TX_CSR
+ sw a0, 0(t0) /* write the character */
+ .set pop
+#endif /* CONFIG_DEBUG_LL */
+.endm
+
+/*
+ * output a character
+ */
+.macro debug_ll_outc chr
+#ifdef CONFIG_DEBUG_LL
+ li a0, \chr
+ debug_ll_outc_a0
+#endif /* CONFIG_DEBUG_LL */
+.endm
+
+/*
+ * output a 32-bit value in hex
+ */
+.macro debug_ll_outhexw
+#ifdef CONFIG_DEBUG_LL
+ .set push
+ .set reorder
+
+ move t6, a0
+ li t5, 32
+
+202:
+ addi t5, t5, -4
+ srlv a0, t6, t5
+
+ /* output one hex digit */
+ andi a0, a0, 15
+ blt a0, 10, 203f
+
+ addi a0, a0, ('a' - '9' - 1)
+
+203:
+ addi a0, a0, '0'
+
+ debug_ll_outc_a0
+
+ bgtz t5, 202b
+
+ .set pop
+#endif /* CONFIG_DEBUG_LL */
+.endm
+
+/*
+ * check character in input buffer
+ * return value:
+ * v0 = 0 no character in input buffer
+ * v0 != 0 character in input buffer
+ */
+/* FIXME: use tstc */
+.macro debug_ll_tstc
+#ifdef CONFIG_DEBUG_LL
+ .set push
+ .set reorder
+
+ la t0, DEBUG_LL_UART_ADDR
+
+ /* get line status and check for data present */
+ lw v0, AR933X_UART_DATA_REG(t0)
+ andi v0, v0, AR933X_UART_DATA_RX_CSR
+
+ .set pop
+#endif /* CONFIG_DEBUG_LL */
+.endm
+
+/*
+ * get character to v0
+ */
+.macro debug_ll_getc
+#ifdef CONFIG_DEBUG_LL
+ .set push
+ .set reorder
+
+ la t0, DEBUG_LL_UART_ADDR
+204:
+ lw v0, AR933X_UART_DATA_REG(t0)
+ andi v0, v0, AR933X_UART_DATA_RX_CSR
+
+ /* try again */
+ beqz v0, 204b
+
+ /* read a character */
+ lw v0, AR933X_UART_DATA_REG(t0)
+ andi v0, v0, AR933X_UART_DATA_TX_RX_MASK
+
+ /* remove the character from the FIFO */
+ li t1, AR933X_UART_DATA_RX_CSR
+ sw t1, AR933X_UART_DATA_REG(t0)
+
+ .set pop
+#endif /* CONFIG_DEBUG_LL */
+.endm
+#endif /* __ASSEMBLY__ */
#endif /* __AR933X_DEBUG_LL__ */
--
2.1.4
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2015-05-04 12:28 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-04 12:29 [PATCH 0/5] MIPS: tplink-mr3020: initial PBL support Antony Pavlov
2015-05-04 12:29 ` [PATCH 1/5] MIPS: tplink-mr3020: enable PBL and compression Antony Pavlov
2015-05-04 12:29 ` [PATCH 2/5] MIPS: debug_ll_ns16550.h: drop _ns16550 suffix Antony Pavlov
2015-05-04 12:29 ` Antony Pavlov [this message]
2015-05-04 12:29 ` [PATCH 4/5] MIPS: tplink-mr3020: enable nmon Antony Pavlov
2015-05-04 12:29 ` [PATCH 5/5] Documentation: mips: fix tplink-mr3020 instruction Antony Pavlov
2015-05-05 11:41 ` [PATCH 0/5] MIPS: tplink-mr3020: initial PBL support Sascha Hauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1430742565-18714-4-git-send-email-antonynpavlov@gmail.com \
--to=antonynpavlov@gmail.com \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox