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