[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
|
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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче