mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
MIPS: Malta: use generic 8250 early console
This patch switches Malta from using the MIPS implementation of early printk with Malta's prom_putchar to using the generic 8250_early implementation. This offers a couple of advantages: - We duplicate less generic code. - The UART can be initialised rather than being reliant upon inheriting a valid setup from the bootloader. The Malta console_config function is extended to initialise the early console if no earlycon= kernel parameter is provided, inheriting the modetty0 bootloader environment if present and falling back to a default 38400n8r setup if not. This matches the behaviour used for the regular console= parameter. Signed-off-by: Paul Burton <paul.burton@imgtec.com> Reviewed-by: Markos Chandras <markos.chandras@imgtec.com> Reviewed-by: James Hogan <james.hogan@imgtec.com> Signed-off-by: John Crispin <blogic@openwrt.org> Patchwork: http://patchwork.linux-mips.org/patch/6183/
This commit is contained in:
parent
ae0d7cbc99
commit
23a91de41c
4 changed files with 33 additions and 75 deletions
|
@ -320,7 +320,6 @@ config MIPS_MALTA
|
||||||
select SYS_HAS_CPU_MIPS64_R2
|
select SYS_HAS_CPU_MIPS64_R2
|
||||||
select SYS_HAS_CPU_NEVADA
|
select SYS_HAS_CPU_NEVADA
|
||||||
select SYS_HAS_CPU_RM7000
|
select SYS_HAS_CPU_RM7000
|
||||||
select SYS_HAS_EARLY_PRINTK
|
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
|
|
@ -9,7 +9,5 @@ obj-y := malta-amon.o malta-display.o malta-init.o \
|
||||||
malta-int.o malta-memory.o malta-platform.o \
|
malta-int.o malta-memory.o malta-platform.o \
|
||||||
malta-reset.o malta-setup.o malta-time.o
|
malta-reset.o malta-setup.o malta-time.o
|
||||||
|
|
||||||
obj-$(CONFIG_EARLY_PRINTK) += malta-console.o
|
|
||||||
|
|
||||||
# FIXME FIXME FIXME
|
# FIXME FIXME FIXME
|
||||||
obj-$(CONFIG_MIPS_MT_SMTC) += malta-smtc.o
|
obj-$(CONFIG_MIPS_MT_SMTC) += malta-smtc.o
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
/*
|
|
||||||
* Carsten Langgaard, carstenl@mips.com
|
|
||||||
* Copyright (C) 1999,2000 MIPS Technologies, Inc. All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software; you can distribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License (Version 2) as
|
|
||||||
* published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope 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.,
|
|
||||||
* 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
|
||||||
*
|
|
||||||
* Putting things on the screen/serial line using YAMONs facilities.
|
|
||||||
*/
|
|
||||||
#include <linux/console.h>
|
|
||||||
#include <linux/init.h>
|
|
||||||
#include <linux/serial_reg.h>
|
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
|
|
||||||
#define PORT(offset) (0x3f8 + (offset))
|
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned int serial_in(int offset)
|
|
||||||
{
|
|
||||||
return inb(PORT(offset));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void serial_out(int offset, int value)
|
|
||||||
{
|
|
||||||
outb(value, PORT(offset));
|
|
||||||
}
|
|
||||||
|
|
||||||
int prom_putchar(char c)
|
|
||||||
{
|
|
||||||
while ((serial_in(UART_LSR) & UART_LSR_THRE) == 0)
|
|
||||||
;
|
|
||||||
|
|
||||||
serial_out(UART_TX, c);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/serial_8250.h>
|
||||||
|
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/smp-ops.h>
|
#include <asm/smp-ops.h>
|
||||||
|
@ -44,32 +45,39 @@ static void __init console_config(void)
|
||||||
char parity = '\0', bits = '\0', flow = '\0';
|
char parity = '\0', bits = '\0', flow = '\0';
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
if ((strstr(fw_getcmdline(), "console=")) == NULL) {
|
s = fw_getenv("modetty0");
|
||||||
s = fw_getenv("modetty0");
|
if (s) {
|
||||||
if (s) {
|
while (*s >= '0' && *s <= '9')
|
||||||
while (*s >= '0' && *s <= '9')
|
baud = baud*10 + *s++ - '0';
|
||||||
baud = baud*10 + *s++ - '0';
|
if (*s == ',')
|
||||||
if (*s == ',')
|
s++;
|
||||||
s++;
|
if (*s)
|
||||||
if (*s)
|
parity = *s++;
|
||||||
parity = *s++;
|
if (*s == ',')
|
||||||
if (*s == ',')
|
s++;
|
||||||
s++;
|
if (*s)
|
||||||
if (*s)
|
bits = *s++;
|
||||||
bits = *s++;
|
if (*s == ',')
|
||||||
if (*s == ',')
|
s++;
|
||||||
s++;
|
if (*s == 'h')
|
||||||
if (*s == 'h')
|
|
||||||
flow = 'r';
|
|
||||||
}
|
|
||||||
if (baud == 0)
|
|
||||||
baud = 38400;
|
|
||||||
if (parity != 'n' && parity != 'o' && parity != 'e')
|
|
||||||
parity = 'n';
|
|
||||||
if (bits != '7' && bits != '8')
|
|
||||||
bits = '8';
|
|
||||||
if (flow == '\0')
|
|
||||||
flow = 'r';
|
flow = 'r';
|
||||||
|
}
|
||||||
|
if (baud == 0)
|
||||||
|
baud = 38400;
|
||||||
|
if (parity != 'n' && parity != 'o' && parity != 'e')
|
||||||
|
parity = 'n';
|
||||||
|
if (bits != '7' && bits != '8')
|
||||||
|
bits = '8';
|
||||||
|
if (flow == '\0')
|
||||||
|
flow = 'r';
|
||||||
|
|
||||||
|
if ((strstr(fw_getcmdline(), "earlycon=")) == NULL) {
|
||||||
|
sprintf(console_string, "uart8250,io,0x3f8,%d%c%c", baud,
|
||||||
|
parity, bits);
|
||||||
|
setup_early_serial8250_console(console_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((strstr(fw_getcmdline(), "console=")) == NULL) {
|
||||||
sprintf(console_string, " console=ttyS0,%d%c%c%c", baud,
|
sprintf(console_string, " console=ttyS0,%d%c%c%c", baud,
|
||||||
parity, bits, flow);
|
parity, bits, flow);
|
||||||
strcat(fw_getcmdline(), console_string);
|
strcat(fw_getcmdline(), console_string);
|
||||||
|
|
Loading…
Add table
Reference in a new issue