1/*
2 * LZMA compressed kernel loader for Atheros AR7XXX/AR9XXX based boards
3 *
4 * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published
8 * by the Free Software Foundation.
9 */
10
11#include <stddef.h>
12#include "config.h"
13#include "ar71xx_regs.h"
14
15#define READREG(r)	*(volatile unsigned int *)(r)
16#define WRITEREG(r,v)	*(volatile unsigned int *)(r) = v
17
18#define KSEG1ADDR(_x)	(((_x) & 0x1fffffff) | 0xa0000000)
19
20#define UART_BASE	0xb8020000
21
22#define UART_TX		0
23#define UART_LSR	5
24
25#define UART_LSR_THRE   0x20
26
27#define UART_READ(r)		READREG(UART_BASE + 4 * (r))
28#define UART_WRITE(r,v)		WRITEREG(UART_BASE + 4 * (r), (v))
29
30void board_putc(int ch)
31{
32	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
33	UART_WRITE(UART_TX, ch);
34	while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0);
35}
36
37#ifdef CONFIG_BOARD_TL_WR1043ND_V1
38static void tlwr1043nd_init(void)
39{
40	unsigned int reg = KSEG1ADDR(AR71XX_RESET_BASE);
41	unsigned int t;
42
43	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE);
44	t |= AR71XX_RESET_GE0_PHY;
45	WRITEREG(reg + AR913X_RESET_REG_RESET_MODULE, t);
46	/* flush write */
47	t = READREG(reg + AR913X_RESET_REG_RESET_MODULE);
48}
49#else
50static inline void tlwr1043nd_init(void) {}
51#endif
52
53void board_init(void)
54{
55	tlwr1043nd_init();
56}
57