[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:
Родитель
e631ae3b16
Коммит
c374e00e17
|
@ -221,6 +221,15 @@ config PPC_EARLY_DEBUG_44x
|
|||
Select this to enable early debugging for IBM 44x chips via the
|
||||
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
|
||||
|
||||
config PPC_EARLY_DEBUG_44x_PHYSLOW
|
||||
|
@ -233,4 +242,16 @@ config PPC_EARLY_DEBUG_44x_PHYSHIGH
|
|||
depends PPC_EARLY_DEBUG_44x
|
||||
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
|
||||
|
|
|
@ -149,6 +149,9 @@ __after_mmu_off:
|
|||
#if defined(CONFIG_BOOTX_TEXT)
|
||||
bl setup_disp_bat
|
||||
#endif
|
||||
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
|
||||
bl setup_cpm_bat
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Call setup_cpu for CPU 0 and initialize 6xx Idle
|
||||
|
@ -1245,6 +1248,19 @@ setup_disp_bat:
|
|||
blr
|
||||
#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
|
||||
/* Jump into the system reset for the rom.
|
||||
* 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)
|
||||
/* PPC44x debug */
|
||||
udbg_init_44x_as1();
|
||||
#elif defined(CONFIG_PPC_EARLY_DEBUG_CPM)
|
||||
udbg_init_cpm();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ config FADS
|
|||
|
||||
config CPM1
|
||||
bool
|
||||
select CPM
|
||||
|
||||
choice
|
||||
prompt "8xx Machine Type"
|
||||
|
|
|
@ -273,6 +273,7 @@ config QUICC_ENGINE
|
|||
config CPM2
|
||||
bool
|
||||
default n
|
||||
select CPM
|
||||
help
|
||||
The CPM2 (Communications Processor Module) is a coprocessor on
|
||||
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
|
||||
much the same way.
|
||||
|
||||
config CPM
|
||||
bool
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -31,6 +31,7 @@ endif
|
|||
|
||||
# Temporary hack until we have migrated to asm-powerpc
|
||||
ifeq ($(ARCH),powerpc)
|
||||
obj-$(CONFIG_CPM) += cpm_common.o
|
||||
obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o
|
||||
obj-$(CONFIG_8xx) += mpc8xx_pic.o commproc.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_btext(void);
|
||||
extern void __init udbg_init_44x_as1(void);
|
||||
extern void __init udbg_init_cpm(void);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_POWERPC_UDBG_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче