1621633323
Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version 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 you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option [no]_[pad]_[ctrl] any later version 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 you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 176 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Jilayne Lovejoy <opensource@jilayne.com> Reviewed-by: Steve Winslow <swinslow@gmail.com> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190519154040.652910950@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
55 lines
1.2 KiB
C
55 lines
1.2 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* 8250/16550-type serial ports prom_putchar()
|
|
*
|
|
* Copyright (C) 2010 Yoichi Yuasa <yuasa@linux-mips.org>
|
|
*/
|
|
#include <linux/io.h>
|
|
#include <linux/serial_core.h>
|
|
#include <linux/serial_reg.h>
|
|
#include <asm/setup.h>
|
|
|
|
static void __iomem *serial8250_base;
|
|
static unsigned int serial8250_reg_shift;
|
|
static unsigned int serial8250_tx_timeout;
|
|
|
|
void setup_8250_early_printk_port(unsigned long base, unsigned int reg_shift,
|
|
unsigned int timeout)
|
|
{
|
|
serial8250_base = (void __iomem *)base;
|
|
serial8250_reg_shift = reg_shift;
|
|
serial8250_tx_timeout = timeout;
|
|
}
|
|
|
|
static inline u8 serial_in(int offset)
|
|
{
|
|
return readb(serial8250_base + (offset << serial8250_reg_shift));
|
|
}
|
|
|
|
static inline void serial_out(int offset, char value)
|
|
{
|
|
writeb(value, serial8250_base + (offset << serial8250_reg_shift));
|
|
}
|
|
|
|
void prom_putchar(char c)
|
|
{
|
|
unsigned int timeout;
|
|
int status, bits;
|
|
|
|
if (!serial8250_base)
|
|
return;
|
|
|
|
timeout = serial8250_tx_timeout;
|
|
bits = UART_LSR_TEMT | UART_LSR_THRE;
|
|
|
|
do {
|
|
status = serial_in(UART_LSR);
|
|
|
|
if (--timeout == 0)
|
|
break;
|
|
} while ((status & bits) != bits);
|
|
|
|
if (timeout)
|
|
serial_out(UART_TX, c);
|
|
}
|