Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8402a158 authored by Manuel Lauss's avatar Manuel Lauss Committed by Ralf Baechle
Browse files

MIPS: Alchemy: prom_putchar is board dependent



This patch replaces the general alchemy prom_putchar() implementation
in favor of board-specific versions:  The UART where the output of
prom_putchar is directed to really depends on the board, the current
implementation hardcodes this on a per-SoC basis which is just wrong.

So a generic uart tx function is provided in the alchemy headers,
and the boards can provide their own prom_putchar with custom
destination uart, and all in-kernel alchemy boards support
early printk.

Signed-off-by: default avatarManuel Lauss <manuel.lauss@gmail.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 963accbc
Loading
Loading
Loading
Loading
+14 −0
Original line number Original line Diff line number Diff line
@@ -20,12 +20,14 @@ config MIPS_MTX1
	select HW_HAS_PCI
	select HW_HAS_PCI
	select SOC_AU1500
	select SOC_AU1500
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_BOSPORUS
config MIPS_BOSPORUS
	bool "Alchemy Bosporus board"
	bool "Alchemy Bosporus board"
	select SOC_AU1500
	select SOC_AU1500
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_DB1000
config MIPS_DB1000
	bool "Alchemy DB1000 board"
	bool "Alchemy DB1000 board"
@@ -33,12 +35,14 @@ config MIPS_DB1000
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select HW_HAS_PCI
	select HW_HAS_PCI
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_DB1100
config MIPS_DB1100
	bool "Alchemy DB1100 board"
	bool "Alchemy DB1100 board"
	select SOC_AU1100
	select SOC_AU1100
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_DB1200
config MIPS_DB1200
	bool "Alchemy DB1200 board"
	bool "Alchemy DB1200 board"
@@ -46,6 +50,7 @@ config MIPS_DB1200
	select DMA_COHERENT
	select DMA_COHERENT
	select MIPS_DISABLE_OBSOLETE_IDE
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_DB1500
config MIPS_DB1500
	bool "Alchemy DB1500 board"
	bool "Alchemy DB1500 board"
@@ -55,6 +60,7 @@ config MIPS_DB1500
	select MIPS_DISABLE_OBSOLETE_IDE
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_BIG_ENDIAN
	select SYS_SUPPORTS_BIG_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_DB1550
config MIPS_DB1550
	bool "Alchemy DB1550 board"
	bool "Alchemy DB1550 board"
@@ -63,12 +69,14 @@ config MIPS_DB1550
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select MIPS_DISABLE_OBSOLETE_IDE
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_MIRAGE
config MIPS_MIRAGE
	bool "Alchemy Mirage board"
	bool "Alchemy Mirage board"
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select SOC_AU1500
	select SOC_AU1500
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_PB1000
config MIPS_PB1000
	bool "Alchemy PB1000 board"
	bool "Alchemy PB1000 board"
@@ -77,6 +85,7 @@ config MIPS_PB1000
	select HW_HAS_PCI
	select HW_HAS_PCI
	select SWAP_IO_SPACE
	select SWAP_IO_SPACE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_PB1100
config MIPS_PB1100
	bool "Alchemy PB1100 board"
	bool "Alchemy PB1100 board"
@@ -85,6 +94,7 @@ config MIPS_PB1100
	select HW_HAS_PCI
	select HW_HAS_PCI
	select SWAP_IO_SPACE
	select SWAP_IO_SPACE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_PB1200
config MIPS_PB1200
	bool "Alchemy PB1200 board"
	bool "Alchemy PB1200 board"
@@ -92,6 +102,7 @@ config MIPS_PB1200
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select MIPS_DISABLE_OBSOLETE_IDE
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_PB1500
config MIPS_PB1500
	bool "Alchemy PB1500 board"
	bool "Alchemy PB1500 board"
@@ -99,6 +110,7 @@ config MIPS_PB1500
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select HW_HAS_PCI
	select HW_HAS_PCI
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_PB1550
config MIPS_PB1550
	bool "Alchemy PB1550 board"
	bool "Alchemy PB1550 board"
@@ -107,12 +119,14 @@ config MIPS_PB1550
	select HW_HAS_PCI
	select HW_HAS_PCI
	select MIPS_DISABLE_OBSOLETE_IDE
	select MIPS_DISABLE_OBSOLETE_IDE
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


config MIPS_XXS1500
config MIPS_XXS1500
	bool "MyCable XXS1500 board"
	bool "MyCable XXS1500 board"
	select DMA_NONCOHERENT
	select DMA_NONCOHERENT
	select SOC_AU1500
	select SOC_AU1500
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_SUPPORTS_LITTLE_ENDIAN
	select SYS_HAS_EARLY_PRINTK


endchoice
endchoice


+1 −1
Original line number Original line Diff line number Diff line
@@ -5,7 +5,7 @@
# Makefile for the Alchemy Au1xx0 CPUs, generic files.
# Makefile for the Alchemy Au1xx0 CPUs, generic files.
#
#


obj-y += prom.o irq.o puts.o time.o reset.o \
obj-y += prom.o irq.o time.o reset.o \
	clocks.o platform.o power.o setup.o \
	clocks.o platform.o power.o setup.o \
	sleeper.o dma.o dbdma.o
	sleeper.o dma.o dbdma.o


arch/mips/alchemy/common/puts.c

deleted100644 → 0
+0 −68
Original line number Original line Diff line number Diff line
/*
 *
 * BRIEF MODULE DESCRIPTION
 *	Low level UART routines to directly access Alchemy UART.
 *
 * Copyright 2001, 2008 MontaVista Software Inc.
 * Author: MontaVista Software, Inc. <source@mvista.com>
 *
 *  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  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
 *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
 *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
 *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  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.,
 *  675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <asm/mach-au1x00/au1000.h>

#define SERIAL_BASE   UART_BASE
#define SER_CMD       0x7
#define SER_DATA      0x1
#define TX_BUSY       0x20

#define TIMEOUT       0xffffff
#define SLOW_DOWN

static volatile unsigned long * const com1 = (unsigned long *)SERIAL_BASE;

#ifdef SLOW_DOWN
static inline void slow_down(void)
{
	int k;

	for (k = 0; k < 10000; k++);
}
#else
#define slow_down()
#endif

void
prom_putchar(const unsigned char c)
{
	unsigned char ch;
	int i = 0;

	do {
		ch = com1[SER_CMD];
		slow_down();
		i++;
		if (i > TIMEOUT)
			break;
	} while (0 == (ch & TX_BUSY));

	com1[SER_DATA] = c;
}
+5 −0
Original line number Original line Diff line number Diff line
@@ -60,3 +60,8 @@ void __init prom_init(void)
		strict_strtoul(memsize_str, 0, &memsize);
		strict_strtoul(memsize_str, 0, &memsize);
	add_memory_region(0, memsize, BOOT_MEM_RAM);
	add_memory_region(0, memsize, BOOT_MEM_RAM);
}
}

void prom_putchar(unsigned char c)
{
    alchemy_uart_putchar(UART0_PHYS_ADDR, c);
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@
#include <linux/init.h>
#include <linux/init.h>


#include <asm/bootinfo.h>
#include <asm/bootinfo.h>
#include <asm/mach-au1x00/au1000.h>


#include <prom.h>
#include <prom.h>


@@ -58,3 +59,8 @@ void __init prom_init(void)
		strict_strtoul(memsize_str, 0, &memsize);
		strict_strtoul(memsize_str, 0, &memsize);
	add_memory_region(0, memsize, BOOT_MEM_RAM);
	add_memory_region(0, memsize, BOOT_MEM_RAM);
}
}

void prom_putchar(unsigned char c)
{
	alchemy_uart_putchar(UART0_PHYS_ADDR, c);
}
Loading