summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-05-06 21:36:13 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-05-06 21:36:13 +0200
commit10fb7853084356ef3c6b40ddf21dfb05dbd15691 (patch)
tree0d2337ae72f82f0c8c4babe5bae500b6569db21b /arch
parent4a854c9f4926d96a08ae4b982014ae860a628414 (diff)
parentf76ef11a4ae9c4ac782ffb06ccbb42ea3807e674 (diff)
downloadbarebox-10fb7853084356ef3c6b40ddf21dfb05dbd15691.tar.gz
barebox-10fb7853084356ef3c6b40ddf21dfb05dbd15691.tar.xz
Merge branch 'for-next/mips'
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/boards/img-ci20/include/board/board_pbl_start.h2
-rw-r--r--arch/mips/boards/loongson-ls1b/include/board/board_pbl_start.h2
-rw-r--r--arch/mips/boards/netgear-wg102/include/board/board_pbl_start.h6
-rw-r--r--arch/mips/boards/ritmix-rzx50/include/board/board_pbl_start.h2
-rw-r--r--arch/mips/boards/tplink-mr3020/include/board/board_pbl_start.h35
-rw-r--r--arch/mips/include/asm/debug_ll_ns16550.h20
-rw-r--r--arch/mips/include/asm/pbl_nmon.h21
-rw-r--r--arch/mips/mach-ath79/Kconfig3
-rw-r--r--arch/mips/mach-ath79/include/mach/debug_ll.h136
9 files changed, 195 insertions, 32 deletions
diff --git a/arch/mips/boards/img-ci20/include/board/board_pbl_start.h b/arch/mips/boards/img-ci20/include/board/board_pbl_start.h
index 26232f58c5..42d23c82a9 100644
--- a/arch/mips/boards/img-ci20/include/board/board_pbl_start.h
+++ b/arch/mips/boards/img-ci20/include/board/board_pbl_start.h
@@ -32,7 +32,7 @@
debug_ll_ns16550_init
- debug_ll_ns16550_outc '.'
+ debug_ll_outc '.'
debug_ll_ns16550_outnl
mips_nmon
diff --git a/arch/mips/boards/loongson-ls1b/include/board/board_pbl_start.h b/arch/mips/boards/loongson-ls1b/include/board/board_pbl_start.h
index 1a92794bbe..a3c585ecba 100644
--- a/arch/mips/boards/loongson-ls1b/include/board/board_pbl_start.h
+++ b/arch/mips/boards/loongson-ls1b/include/board/board_pbl_start.h
@@ -30,7 +30,7 @@
debug_ll_ns16550_init
- debug_ll_ns16550_outc '.'
+ debug_ll_outc '.'
debug_ll_ns16550_outnl
mips_nmon
diff --git a/arch/mips/boards/netgear-wg102/include/board/board_pbl_start.h b/arch/mips/boards/netgear-wg102/include/board/board_pbl_start.h
index d74d2c27af..9fb220519f 100644
--- a/arch/mips/boards/netgear-wg102/include/board/board_pbl_start.h
+++ b/arch/mips/boards/netgear-wg102/include/board/board_pbl_start.h
@@ -35,7 +35,7 @@
pbl_ar2312_rst_uart0
debug_ll_ns16550_init
- debug_ll_ns16550_outc 'a'
+ debug_ll_outc 'a'
debug_ll_ns16550_outnl
/* check if SDRAM is already configured,
@@ -60,7 +60,7 @@
pbl_probe_mem t0, t1, KSEG1
beq t0, t1, sdram_configured
nop
- debug_ll_ns16550_outc '#'
+ debug_ll_outc '#'
debug_ll_ns16550_outnl
1:
@@ -68,7 +68,7 @@
nop
sdram_configured:
- debug_ll_ns16550_outc 'b'
+ debug_ll_outc 'b'
debug_ll_ns16550_outnl
copy_to_link_location pbl_start
diff --git a/arch/mips/boards/ritmix-rzx50/include/board/board_pbl_start.h b/arch/mips/boards/ritmix-rzx50/include/board/board_pbl_start.h
index fb914d99f2..7c2fa0bedc 100644
--- a/arch/mips/boards/ritmix-rzx50/include/board/board_pbl_start.h
+++ b/arch/mips/boards/ritmix-rzx50/include/board/board_pbl_start.h
@@ -32,7 +32,7 @@
debug_ll_ns16550_init
- debug_ll_ns16550_outc '.'
+ debug_ll_outc '.'
debug_ll_ns16550_outnl
mips_nmon
diff --git a/arch/mips/boards/tplink-mr3020/include/board/board_pbl_start.h b/arch/mips/boards/tplink-mr3020/include/board/board_pbl_start.h
new file mode 100644
index 0000000000..944a510383
--- /dev/null
+++ b/arch/mips/boards/tplink-mr3020/include/board/board_pbl_start.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2013, 2015 Antony Pavlov <antonynpavlov@gmail.com>
+ * Copyright (C) 2013 Oleksij Rempel <linux@rempel-privat.de>
+ *
+ * This file is part of barebox.
+ * See file CREDITS for list of people who contributed to this project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <asm/pbl_macros.h>
+#include <asm/pbl_nmon.h>
+
+ .macro board_pbl_start
+ .set push
+ .set noreorder
+
+ mips_barebox_10h
+
+ mips_disable_interrupts
+
+ mips_nmon
+
+ copy_to_link_location pbl_start
+
+ .set pop
+ .endm
diff --git a/arch/mips/include/asm/debug_ll_ns16550.h b/arch/mips/include/asm/debug_ll_ns16550.h
index 032f0a2869..a3e1c52f63 100644
--- a/arch/mips/include/asm/debug_ll_ns16550.h
+++ b/arch/mips/include/asm/debug_ll_ns16550.h
@@ -90,7 +90,7 @@ static __inline__ void PUTC_LL(char ch)
/*
* output a character in a0
*/
-.macro debug_ll_ns16550_outc_a0
+.macro debug_ll_outc_a0
#ifdef CONFIG_DEBUG_LL
.set push
.set reorder
@@ -110,10 +110,10 @@ static __inline__ void PUTC_LL(char ch)
/*
* output a character
*/
-.macro debug_ll_ns16550_outc chr
+.macro debug_ll_outc chr
#ifdef CONFIG_DEBUG_LL
li a0, \chr
- debug_ll_ns16550_outc_a0
+ debug_ll_outc_a0
#endif /* CONFIG_DEBUG_LL */
.endm
@@ -122,15 +122,15 @@ static __inline__ void PUTC_LL(char ch)
*/
.macro debug_ll_ns16550_outnl
#ifdef CONFIG_DEBUG_LL
- debug_ll_ns16550_outc '\r'
- debug_ll_ns16550_outc '\n'
+ debug_ll_outc '\r'
+ debug_ll_outc '\n'
#endif /* CONFIG_DEBUG_LL */
.endm
/*
* output a 32-bit value in hex
*/
-.macro debug_ll_ns16550_outhexw
+.macro debug_ll_outhexw
#ifdef CONFIG_DEBUG_LL
.set push
.set reorder
@@ -151,7 +151,7 @@ static __inline__ void PUTC_LL(char ch)
203:
addi a0, a0, '0'
- debug_ll_ns16550_outc_a0
+ debug_ll_outc_a0
bgtz t5, 202b
@@ -165,7 +165,7 @@ static __inline__ void PUTC_LL(char ch)
* v0 = 0 no character in input buffer
* v0 != 0 character in input buffer
*/
-.macro debug_ll_ns16550_check_char
+.macro debug_ll_tstc
#ifdef CONFIG_DEBUG_LL
.set push
.set reorder
@@ -183,13 +183,13 @@ static __inline__ void PUTC_LL(char ch)
/*
* get character to v0
*/
-.macro debug_ll_ns16550_getc
+.macro debug_ll_getc
#ifdef CONFIG_DEBUG_LL
.set push
.set reorder
204:
- debug_ll_ns16550_check_char
+ debug_ll_tstc
/* try again */
beqz v0, 204b
diff --git a/arch/mips/include/asm/pbl_nmon.h b/arch/mips/include/asm/pbl_nmon.h
index e7baa4c5a9..90e2da8ef9 100644
--- a/arch/mips/include/asm/pbl_nmon.h
+++ b/arch/mips/include/asm/pbl_nmon.h
@@ -17,8 +17,7 @@
*
*/
-#include <board/debug_ll.h>
-#include <asm/debug_ll_ns16550.h>
+#include <mach/debug_ll.h>
#define CODE_ESC 0x1b
@@ -74,7 +73,7 @@ nmon_wait_user:
nmon_outs msg_bsp
- debug_ll_ns16550_check_char
+ debug_ll_tstc
bnez v0, 3f
@@ -91,7 +90,7 @@ msg_nmon_press_any_key:
.align 4
3:
/* get received char from ns16550's buffer */
- debug_ll_ns16550_getc
+ debug_ll_getc
#endif /* CONFIG_NMON_USER_START */
nmon_main_help:
@@ -102,9 +101,9 @@ nmon_main_help:
nmon_main:
nmon_outs msg_prompt
- debug_ll_ns16550_getc
+ debug_ll_getc
- /* prepare a0 for debug_ll_ns16550_outc_a0 */
+ /* prepare a0 for debug_ll_outc_a0 */
move a0, v0
li v1, 'q'
@@ -137,7 +136,7 @@ nmon_cmd_d:
nmon_outs msg_nl
lw a0, (v0)
- debug_ll_ns16550_outhexw
+ debug_ll_outhexw
b nmon_main
@@ -170,7 +169,7 @@ nmon_cmd_g:
b nmon_main
_nmon_outc_a0:
- debug_ll_ns16550_outc_a0
+ debug_ll_outc_a0
jr ra
_nmon_outs:
@@ -178,7 +177,7 @@ _nmon_outs:
addi a1, a1, 1
beqz a0, _nmon_jr_ra_exit
- debug_ll_ns16550_outc_a0
+ debug_ll_outc_a0
b _nmon_outs
@@ -188,7 +187,7 @@ _nmon_gethexw:
li t2, 0
_get_hex_digit:
- debug_ll_ns16550_getc
+ debug_ll_getc
li v1, CODE_ESC
beq v0, v1, nmon_main
@@ -221,7 +220,7 @@ _get_hex_digit:
sub a3, v0, a3
0: move a0, v0
- debug_ll_ns16550_outc_a0
+ debug_ll_outc_a0
sll t2, t2, 4
or t2, t2, a3
diff --git a/arch/mips/mach-ath79/Kconfig b/arch/mips/mach-ath79/Kconfig
index 96fffd3fa2..f730b37ac5 100644
--- a/arch/mips/mach-ath79/Kconfig
+++ b/arch/mips/mach-ath79/Kconfig
@@ -9,6 +9,9 @@ choice
config BOARD_TPLINK_MR3020
bool "TP-LINK MR3020"
+ select HAVE_PBL_IMAGE
+ select HAVE_IMAGE_COMPRESSION
+ select HAS_NMON
endchoice
diff --git a/arch/mips/mach-ath79/include/mach/debug_ll.h b/arch/mips/mach-ath79/include/mach/debug_ll.h
index de4c00dfd1..c697318488 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__ */