[POWERPC] Add early debug console for CPM serial ports.

This code assumes that the ports have been previously set up, with
buffers in DPRAM.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
Scott Wood 2007-07-16 11:43:43 -05:00 коммит произвёл Kumar Gala
Родитель e631ae3b16
Коммит c374e00e17
8 изменённых файлов: 92 добавлений и 0 удалений

Просмотреть файл

@ -221,6 +221,15 @@ config PPC_EARLY_DEBUG_44x
Select this to enable early debugging for IBM 44x chips via the Select this to enable early debugging for IBM 44x chips via the
inbuilt serial port. inbuilt serial port.
config PPC_EARLY_DEBUG_CPM
bool "Early serial debugging for Freescale CPM-based serial ports"
depends on SERIAL_CPM
select PIN_TLB if PPC_8xx
help
Select this to enable early debugging for Freescale chips
using a CPM-based serial port. This assumes that the bootwrapper
has run, and set up the CPM in a particular way.
endchoice endchoice
config PPC_EARLY_DEBUG_44x_PHYSLOW config PPC_EARLY_DEBUG_44x_PHYSLOW
@ -233,4 +242,16 @@ config PPC_EARLY_DEBUG_44x_PHYSHIGH
depends PPC_EARLY_DEBUG_44x depends PPC_EARLY_DEBUG_44x
default "0x1" default "0x1"
config PPC_EARLY_DEBUG_CPM_ADDR
hex "CPM UART early debug transmit descriptor address"
depends on PPC_EARLY_DEBUG_CPM
default "0xfa202808" if PPC_EP88XC
default "0xf0000808" if CPM2
default "0xff002808" if CPM1
help
This specifies the address of the transmit descriptor
used for early debug output. Because it is needed before
platform probing is done, all platforms selected must
share the same address.
endmenu endmenu

Просмотреть файл

@ -149,6 +149,9 @@ __after_mmu_off:
#if defined(CONFIG_BOOTX_TEXT) #if defined(CONFIG_BOOTX_TEXT)
bl setup_disp_bat bl setup_disp_bat
#endif #endif
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
bl setup_cpm_bat
#endif
/* /*
* Call setup_cpu for CPU 0 and initialize 6xx Idle * Call setup_cpu for CPU 0 and initialize 6xx Idle
@ -1245,6 +1248,19 @@ setup_disp_bat:
blr blr
#endif /* CONFIG_BOOTX_TEXT */ #endif /* CONFIG_BOOTX_TEXT */
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
setup_cpm_bat:
lis r8, 0xf000
ori r8, r8, 0x002a
mtspr SPRN_DBAT1L, r8
lis r11, 0xf000
ori r11, r11, (BL_1M << 2) | 2
mtspr SPRN_DBAT1U, r11
blr
#endif
#ifdef CONFIG_8260 #ifdef CONFIG_8260
/* Jump into the system reset for the rom. /* Jump into the system reset for the rom.
* We first disable the MMU, and then jump to the ROM reset address. * We first disable the MMU, and then jump to the ROM reset address.

Просмотреть файл

@ -54,6 +54,8 @@ void __init udbg_early_init(void)
#elif defined(CONFIG_PPC_EARLY_DEBUG_44x) #elif defined(CONFIG_PPC_EARLY_DEBUG_44x)
/* PPC44x debug */ /* PPC44x debug */
udbg_init_44x_as1(); udbg_init_44x_as1();
#elif defined(CONFIG_PPC_EARLY_DEBUG_CPM)
udbg_init_cpm();
#endif #endif
} }

Просмотреть файл

@ -3,6 +3,7 @@ config FADS
config CPM1 config CPM1
bool bool
select CPM
choice choice
prompt "8xx Machine Type" prompt "8xx Machine Type"

Просмотреть файл

@ -273,6 +273,7 @@ config QUICC_ENGINE
config CPM2 config CPM2
bool bool
default n default n
select CPM
help help
The CPM2 (Communications Processor Module) is a coprocessor on The CPM2 (Communications Processor Module) is a coprocessor on
embedded CPUs made by Freescale. Selecting this option means that embedded CPUs made by Freescale. Selecting this option means that
@ -309,4 +310,7 @@ config FSL_ULI1575
Freescale reference boards. The boards all use the ULI in pretty Freescale reference boards. The boards all use the ULI in pretty
much the same way. much the same way.
config CPM
bool
endmenu endmenu

Просмотреть файл

@ -31,6 +31,7 @@ endif
# Temporary hack until we have migrated to asm-powerpc # Temporary hack until we have migrated to asm-powerpc
ifeq ($(ARCH),powerpc) ifeq ($(ARCH),powerpc)
obj-$(CONFIG_CPM) += cpm_common.o
obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o
obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.o
obj-$(CONFIG_UCODE_PATCH) += micropatch.o obj-$(CONFIG_UCODE_PATCH) += micropatch.o

Просмотреть файл

@ -0,0 +1,46 @@
/*
* Common CPM code
*
* Author: Scott Wood <scottwood@freescale.com>
*
* Copyright 2007 Freescale Semiconductor, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*/
#include <linux/init.h>
#include <asm/udbg.h>
#include <asm/io.h>
#include <asm/system.h>
#include <mm/mmu_decl.h>
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
static u32 __iomem *cpm_udbg_txdesc =
(u32 __iomem __force *)CONFIG_PPC_EARLY_DEBUG_CPM_ADDR;
static void udbg_putc_cpm(char c)
{
u8 __iomem *txbuf = (u8 __iomem __force *)in_be32(&cpm_udbg_txdesc[1]);
if (c == '\n')
udbg_putc('\r');
while (in_be32(&cpm_udbg_txdesc[0]) & 0x80000000)
;
out_8(txbuf, c);
out_be32(&cpm_udbg_txdesc[0], 0xa0000001);
}
void __init udbg_init_cpm(void)
{
if (cpm_udbg_txdesc) {
#ifdef CONFIG_CPM2
setbat(1, 0xf0000000, 0xf0000000, 1024*1024, _PAGE_IO);
#endif
udbg_putc = udbg_putc_cpm;
}
}
#endif

Просмотреть файл

@ -48,6 +48,7 @@ extern void __init udbg_init_rtas_console(void);
extern void __init udbg_init_debug_beat(void); extern void __init udbg_init_debug_beat(void);
extern void __init udbg_init_btext(void); extern void __init udbg_init_btext(void);
extern void __init udbg_init_44x_as1(void); extern void __init udbg_init_44x_as1(void);
extern void __init udbg_init_cpm(void);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_UDBG_H */ #endif /* _ASM_POWERPC_UDBG_H */