1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- --- /dev/null
- +++ b/arch/mips/ath25/early_printk.c
- @@ -0,0 +1,44 @@
- +/*
- + * This file is subject to the terms and conditions of the GNU General Public
- + * License. See the file "COPYING" in the main directory of this archive
- + * for more details.
- + *
- + * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org>
- + */
- +
- +#include <linux/mm.h>
- +#include <linux/io.h>
- +#include <linux/serial_reg.h>
- +
- +#include "devices.h"
- +#include "ar2315_regs.h"
- +#include "ar5312_regs.h"
- +
- +static inline void prom_uart_wr(void __iomem *base, unsigned reg,
- + unsigned char ch)
- +{
- + __raw_writel(ch, base + 4 * reg);
- +}
- +
- +static inline unsigned char prom_uart_rr(void __iomem *base, unsigned reg)
- +{
- + return __raw_readl(base + 4 * reg);
- +}
- +
- +void prom_putchar(unsigned char ch)
- +{
- + static void __iomem *base;
- +
- + if (unlikely(base == NULL)) {
- + if (is_ar2315())
- + base = (void __iomem *)(KSEG1ADDR(AR2315_UART0_BASE));
- + else
- + base = (void __iomem *)(KSEG1ADDR(AR5312_UART0_BASE));
- + }
- +
- + while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0)
- + ;
- + prom_uart_wr(base, UART_TX, ch);
- + while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0)
- + ;
- +}
- --- a/arch/mips/ath25/Makefile
- +++ b/arch/mips/ath25/Makefile
- @@ -9,5 +9,8 @@
- #
-
- obj-y += board.o prom.o devices.o
- +
- +obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
- +
- obj-$(CONFIG_SOC_AR5312) += ar5312.o
- obj-$(CONFIG_SOC_AR2315) += ar2315.o
- --- a/arch/mips/Kconfig
- +++ b/arch/mips/Kconfig
- @@ -106,6 +106,7 @@ config ATH25
- select SYS_HAS_CPU_MIPS32_R1
- select SYS_SUPPORTS_BIG_ENDIAN
- select SYS_SUPPORTS_32BIT_KERNEL
- + select SYS_HAS_EARLY_PRINTK
- help
- Support for Atheros AR231x and Atheros AR531x based boards
-
|