1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * |
4 | * Copyright (C) 2010 John Crispin <john@phrozen.org> |
5 | */ |
6 | |
7 | #include <linux/cpu.h> |
8 | #include <lantiq_soc.h> |
9 | #include <asm/setup.h> |
10 | |
11 | #define ASC_BUF 1024 |
12 | #define LTQ_ASC_FSTAT ((u32 *)(LTQ_EARLY_ASC + 0x0048)) |
13 | #ifdef __BIG_ENDIAN |
14 | #define LTQ_ASC_TBUF ((u32 *)(LTQ_EARLY_ASC + 0x0020 + 3)) |
15 | #else |
16 | #define LTQ_ASC_TBUF ((u32 *)(LTQ_EARLY_ASC + 0x0020)) |
17 | #endif |
18 | #define TXMASK 0x3F00 |
19 | #define TXOFFSET 8 |
20 | |
21 | void prom_putchar(char c) |
22 | { |
23 | unsigned long flags; |
24 | |
25 | local_irq_save(flags); |
26 | do { } while ((ltq_r32(LTQ_ASC_FSTAT) & TXMASK) >> TXOFFSET); |
27 | if (c == '\n') |
28 | ltq_w8('\r', LTQ_ASC_TBUF); |
29 | ltq_w8(c, LTQ_ASC_TBUF); |
30 | local_irq_restore(flags); |
31 | } |
32 | |