KGDB: This adds basic KGDB support for both arch/ppc and arch/powerpc.
Subsystems (4)
PATCH 8/21 KGDB: This adds basic KGDB support for both arch/ppc and arch/powerpc.
powerpc-lite.patch
From: Jason Wessel <[email protected]>
CC: [email protected]
Subject: [PATCH] This adds basic KGDB support for both arch/ppc and arch/powerpc.
Both the ppc and powerpc arch are covered by this patch to add the core unified kgdb support. The patch also cleans up the rs232 handlers for many boards to unify kgdb support as well.
--- arch/powerpc/Kconfig.debug | 50 - arch/powerpc/kernel/Makefile | 6 arch/powerpc/kernel/kgdb.c | 394 ++++++++++++ arch/powerpc/kernel/kgdb_setjmp32.S | 41 + arch/powerpc/kernel/kgdb_setjmp64.S | 77 ++ arch/powerpc/kernel/legacy_serial.c | 6 arch/powerpc/kernel/setup_32.c | 16 arch/powerpc/mm/fault.c | 8 arch/powerpc/platforms/powermac/setup.c | 6 arch/ppc/Kconfig.debug | 36 - arch/ppc/kernel/Makefile | 2 arch/ppc/kernel/kgdb.c | 354 +++++++++++ arch/ppc/kernel/kgdb_setjmp32.S | 41 + arch/ppc/kernel/ppc-stub.c | 866 --------------------------- arch/ppc/kernel/setup.c | 16 arch/ppc/mm/fault.c | 8 arch/ppc/platforms/4xx/bamboo.c | 23 arch/ppc/platforms/4xx/bubinga.c | 25 arch/ppc/platforms/4xx/ebony.c | 27 arch/ppc/platforms/4xx/luan.c | 13 arch/ppc/platforms/4xx/ocotea.c | 26 arch/ppc/platforms/4xx/taishan.c | 7 arch/ppc/platforms/4xx/xilinx_ml300.c | 5 arch/ppc/platforms/4xx/xilinx_ml403.c | 3 arch/ppc/platforms/4xx/yucca.c | 3 arch/ppc/platforms/83xx/mpc834x_sys.c | 5 arch/ppc/platforms/85xx/mpc8540_ads.c | 7 arch/ppc/platforms/85xx/mpc8560_ads.c | 1 arch/ppc/platforms/85xx/mpc85xx_cds_common.c | 7 arch/ppc/platforms/85xx/sbc8560.c | 38 - arch/ppc/platforms/85xx/tqm85xx.c | 7 arch/ppc/platforms/chestnut.c | 7 arch/ppc/platforms/ev64260.c | 12 arch/ppc/platforms/hdpu.c | 19 arch/ppc/platforms/lopec.c | 3 arch/ppc/platforms/pplus.c | 5 arch/ppc/platforms/radstone_ppc7d.c | 12 arch/ppc/platforms/sandpoint.c | 5 arch/ppc/platforms/spruce.c | 24 arch/ppc/syslib/Makefile | 1 arch/ppc/syslib/gen550.h | 1 arch/ppc/syslib/gen550_kgdb.c | 83 -- arch/ppc/syslib/ibm44x_common.c | 3 arch/ppc/syslib/mv64x60.c | 62 + arch/ppc/syslib/mv64x60_dbg.c | 52 - arch/ppc/syslib/ppc4xx_setup.c | 1 arch/ppc/syslib/ppc83xx_setup.c | 24 arch/ppc/syslib/ppc85xx_setup.c | 26 drivers/serial/Makefile | 1 drivers/serial/cpm_uart/Makefile | 1 drivers/serial/cpm_uart/cpm_uart.h | 39 + drivers/serial/cpm_uart/cpm_uart_core.c | 89 ++ drivers/serial/cpm_uart/cpm_uart_cpm1.c | 28 drivers/serial/cpm_uart/cpm_uart_cpm2.c | 4 drivers/serial/cpm_uart/cpm_uart_kgdb.c | 186 +++++ drivers/serial/mpsc_kgdb.c | 347 ++++++++++ include/asm-powerpc/kgdb.h | 93 +- include/asm-ppc/kgdb.h | 59 - include/asm-ppc/machdep.h | 2 include/asm-ppc/mv64x60.h | 2 include/asm-ppc/mv64x60_defs.h | 3 lib/Kconfig.kgdb | 51 + 62 files changed, 1957 insertions(+), 1412 deletions(-)
arch/powerpc/Kconfig.debug +6 -44
@@ -41,52 +41,9 @@ config HCALL_STATS This option will add a small amount of overhead to all hypervisor calls. -config DEBUGGER - bool "Enable debugger hooks" - depends on DEBUG_KERNEL - help - Include in-kernel hooks for kernel debuggers. Unless you are - intending to debug the kernel, say N here. - -config KGDB - bool "Include kgdb kernel debugger" - depends on DEBUGGER && (BROKEN || PPC_GEN550 || 4xx) - select DEBUG_INFO - help - Include in-kernel hooks for kgdb, the Linux kernel source level - debugger. See <http://kgdb.sourceforge.net/> for more information. - Unless you are intending to debug the kernel, say N here. - -choice - prompt "Serial Port" - depends on KGDB - default KGDB_TTYS1 - -config KGDB_TTYS0 - bool "ttyS0" - -config KGDB_TTYS1 - bool "ttyS1" - -config KGDB_TTYS2 - bool "ttyS2" - -config KGDB_TTYS3 - bool "ttyS3" - -endchoice - -config KGDB_CONSOLE - bool "Enable serial console thru kgdb port" - depends on KGDB && 8xx || CPM2 - help - If you enable this, all serial console messages will be sent - over the gdb stub. - If unsure, say N. - config XMON bool "Include xmon kernel debugger" - depends on DEBUGGER + depends on DEBUG_KERNEL help Include in-kernel hooks for the xmon kernel monitor/debugger. Unless you are intending to debug the kernel, say N here.
@@ -116,6 +73,11 @@ config XMON_DISASSEMBLY to say Y here, unless you're building for a memory-constrained system. +config DEBUGGER + bool + depends on KGDB || XMON + default y + config IRQSTACKS bool "Use separate kernel stacks when processing interrupts" depends on PPC64
arch/powerpc/kernel/Makefile +6 -0
@@ -66,6 +66,12 @@ obj-$(CONFIG_SMP) += smp.o obj-$(CONFIG_KPROBES) += kprobes.o obj-$(CONFIG_PPC_UDBG_16550) += legacy_serial.o udbg_16550.o +ifeq ($(CONFIG_PPC32),y) +obj-$(CONFIG_KGDB) += kgdb.o kgdb_setjmp32.o +else +obj-$(CONFIG_KGDB) += kgdb.o kgdb_setjmp64.o +endif + pci64-$(CONFIG_PPC64) += pci_dn.o isa-bridge.o obj-$(CONFIG_PCI) += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \ pci-common.o
arch/powerpc/kernel/kgdb.c new file +394 -0
394 lines not on this page · raw message
arch/powerpc/kernel/legacy_serial.c +6 -0
@@ -11,6 +11,9 @@#include <asm/udbg.h> #include <asm/pci-bridge.h> #include <asm/ppc-pci.h> +#ifdef CONFIG_KGDB_8250 +#include <linux/kgdb.h> +#endif #undef DEBUG
@@ -488,6 +491,9 @@ static int __init serial_dev_init(void)fixup_port_pio (i, np, port);if ((port->iotype ==UPIO_MEM ) || (port->iotype ==UPIO_TSI ))fixup_port_mmio (i, np, port); +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_platform_port (i, port); +#endif }DBG ("Registering platform serial ports\n" );
arch/powerpc/kernel/setup_32.c +0 -16
@@ -45,10 +45,6 @@ #define DBG(fmt...) -#if definedCONFIG_KGDB -#include <asm/kgdb.h> -#endif -extern void bootx_init (unsigned long r4,unsigned long phys);#if defined(CONFIG_BLK_DEV_IDE ) || defined(CONFIG_BLK_DEV_IDE_MODULE )
@@ -248,18 +244,6 @@ void __init setup_arch(char **cmdline_p)xmon_setup (); -#if defined(CONFIG_KGDB ) -if (ppc_md.kgdb_map_scc) - ppc_md.kgdb_map_scc (); -set_debug_traps (); -if (strstr (cmd_line,"gdb" )) { -if (ppc_md.progress) - ppc_md.progress ("setup_arch: kgdb breakpoint" ,0x4000 ); -printk ("kgdb breakpoint activated\n" ); -breakpoint (); - } -#endif -/* * Set cache line size based on type of cpu as a default. * Systems with OF can look in the properties on the cpu node(s)
arch/powerpc/mm/fault.c +8 -0
@@ -29,6 +29,7 @@#include <linux/module.h> #include <linux/kprobes.h> #include <linux/kdebug.h> +#include <linux/kgdb.h> #include <asm/page.h> #include <asm/pgtable.h>
@@ -413,6 +414,13 @@ void bad_page_fault(struct pt_regs *regsreturn ; } +#ifdef CONFIG_KGDB +if (atomic_read (&debugger_active) && kgdb_may_fault) +/* Restore our previous state. */ +kgdb_fault_longjmp (kgdb_fault_jmp_regs); +/* Not reached. */ +#endif +/* kernel has accessed a bad area */ switch (regs->trap) {
arch/powerpc/platforms/powermac/setup.c +0 -6
@@ -98,8 +98,6 @@ extern struct machdep_calls pmac_md;int sccdbg;#endif -extern void zs_kgdb_hook (int tty_num); -sys_ctrler_t sys_ctrler =SYS_CTRLER_UNKNOWN ;EXPORT_SYMBOL (sys_ctrler);
@@ -330,10 +328,6 @@ static void __init pmac_setup_arch(void)l2cr_init ();#endif /* CONFIG_PPC32 */ -#ifdef CONFIG_KGDB -zs_kgdb_hook (0 ); -#endif -find_via_cuda ();find_via_pmu ();smu_init ();
arch/ppc/Kconfig.debug +0 -36
@@ -2,42 +2,6 @@ menu "Kernel hacking" source "lib/Kconfig.debug" -config KGDB - bool "Include kgdb kernel debugger" - depends on DEBUG_KERNEL && (BROKEN || PPC_GEN550 || 4xx) - select DEBUG_INFO - help - Include in-kernel hooks for kgdb, the Linux kernel source level - debugger. See <http://kgdb.sourceforge.net/> for more information. - Unless you are intending to debug the kernel, say N here. - -choice - prompt "Serial Port" - depends on KGDB - default KGDB_TTYS1 - -config KGDB_TTYS0 - bool "ttyS0" - -config KGDB_TTYS1 - bool "ttyS1" - -config KGDB_TTYS2 - bool "ttyS2" - -config KGDB_TTYS3 - bool "ttyS3" - -endchoice - -config KGDB_CONSOLE - bool "Enable serial console thru kgdb port" - depends on KGDB && 8xx || CPM2 - help - If you enable this, all serial console messages will be sent - over the gdb stub. - If unsure, say N. - config XMON bool "Include xmon kernel debugger" depends on DEBUG_KERNEL
arch/ppc/kernel/kgdb.c new file +354 -0
354 lines not on this page · raw message
arch/ppc/kernel/ppc-stub.c deleted +0 -866
866 lines not on this page · raw message
arch/ppc/kernel/setup.c +0 -16
@@ -47,10 +47,6 @@#include <asm/ppc_sys.h> #endif -#if definedCONFIG_KGDB -#include <asm/kgdb.h> -#endif -extern void platform_init (unsigned long r3,unsigned long r4,unsigned long r5,unsigned long r6,unsigned long r7);extern void reloc_got2 (unsigned long offset);
@@ -508,18 +504,6 @@ void __init setup_arch(char **cmdline_p)#endif /* CONFIG_XMON */ if ( ppc_md.progress ) ppc_md.progress ("setup_arch: enter" ,0x3eab ); -#if defined(CONFIG_KGDB ) -if (ppc_md.kgdb_map_scc) - ppc_md.kgdb_map_scc (); -set_debug_traps (); -if (strstr (cmd_line,"gdb" )) { -if (ppc_md.progress) - ppc_md.progress ("setup_arch: kgdb breakpoint" ,0x4000 ); -printk ("kgdb breakpoint activated\n" ); -breakpoint (); - } -#endif -/* * Set cache line size based on type of cpu as a default. * Systems with OF can look in the properties on the cpu node(s)
arch/ppc/mm/fault.c +8 -0
@@ -25,6 +25,7 @@#include <linux/interrupt.h> #include <linux/highmem.h> #include <linux/module.h> +#include <linux/kgdb.h> #include <asm/page.h> #include <asm/pgtable.h>
@@ -328,6 +329,13 @@ bad_page_fault(struct pt_regs *regs, unsreturn ; } +#ifdef CONFIG_KGDB +if (atomic_read (&debugger_active) && kgdb_may_fault) +/* Restore our previous state. */ +kgdb_fault_longjmp (kgdb_fault_jmp_regs); +/* Not reached. */ +#endif +/* kernel has accessed a bad area */ #if defined(CONFIG_XMON ) || defined(CONFIG_KGDB )if (debugger_kernel_faults)
arch/ppc/platforms/4xx/bubinga.c +15 -10
@@ -4,7 +4,7 @@* Author: SAW (IBM), derived from walnut.c. * Maintained by MontaVista Software <[email protected]> * -* 2003 (c) MontaVista Softare Inc. This file is licensed under the +* 2003-2004 (c) MontaVista Softare Inc. This file is licensed under the * terms of the GNU General Public License version 2. This program is * licensed "as is" without any warranty of any kind, whether express * or implied.
@@ -19,6 +19,7 @@#include <linux/pci.h> #include <linux/rtc.h> #include <linux/tty.h> +#include <linux/kgdb.h> #include <linux/serial.h> #include <linux/serial_core.h> #include <linux/serial_8250.h>
@@ -31,7 +32,6 @@#include <asm/time.h> #include <asm/io.h> #include <asm/todc.h> -#include <asm/kgdb.h> #include <asm/ocp.h> #include <asm/ibm_ocp_pci.h>
@@ -101,17 +101,26 @@ bubinga_early_serial_map(void) port.flags =UPF_BOOT_AUTOCONF |UPF_SKIP_TEST ; port.line =0 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=0 )printk ("Early serial init of port 0 failed\n" ); - } +#endif + +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &port); +#endif port.membase = (void *)ACTING_UART1_IO_BASE ; port.irq =ACTING_UART1_INT ; port.line =1 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=0 )printk ("Early serial init of port 1 failed\n" ); - } +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (1 , &port); +#endif }void __init
@@ -258,8 +267,4 @@ platform_init(unsigned long r3, unsigned ppc_md.nvram_read_val = todc_direct_read_val; ppc_md.nvram_write_val = todc_direct_write_val;#endif -#ifdef CONFIG_KGDB - ppc_md.early_serial_map = bubinga_early_serial_map; -#endif } -
arch/ppc/platforms/4xx/ebony.c +17 -10
@@ -29,6 +29,7 @@#include <linux/initrd.h> #include <linux/seq_file.h> #include <linux/root_dev.h> +#include <linux/kgdb.h> #include <linux/tty.h> #include <linux/serial.h> #include <linux/serial_core.h>
@@ -227,14 +228,20 @@ ebony_early_serial_map(void) port.flags =UPF_BOOT_AUTOCONF |UPF_SKIP_TEST ; port.line =0 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=0 )printk ("Early serial init of port 0 failed\n" ); - } +#endif -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#ifdef CONFIG_SERIAL_TEXT_DEBUG /* Configure debug serial access */ gen550_init (0 , &port); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &port); +#endif +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )/* Purge TLB entry added in head_44x.S for early serial access */ _tlbie (UART0_IO_BASE );#endif
@@ -244,14 +251,18 @@ ebony_early_serial_map(void) port.uartclk = clocks.uart1; port.line =1 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=1 )printk ("Early serial init of port 1 failed\n" ); - } +#endif -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#ifdef CONFIG_SERIAL_TEXT_DEBUG /* Configure debug serial access */ gen550_init (1 , &port);#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (1 , &port); +#endif } static void __init
@@ -328,8 +339,4 @@ void __init platform_init(unsigned long ppc_md.nvram_read_val = todc_direct_read_val; ppc_md.nvram_write_val = todc_direct_write_val; -#ifdef CONFIG_KGDB - ppc_md.early_serial_map = ebony_early_serial_map; -#endif } -
arch/ppc/platforms/4xx/ocotea.c +17 -9
@@ -28,6 +28,7 @@#include <linux/seq_file.h> #include <linux/root_dev.h> #include <linux/tty.h> +#include <linux/kgdb.h> #include <linux/serial.h> #include <linux/serial_core.h> #include <linux/serial_8250.h>
@@ -250,14 +251,20 @@ ocotea_early_serial_map(void) port.flags =UPF_BOOT_AUTOCONF |UPF_SKIP_TEST ; port.line =0 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=0 )printk ("Early serial init of port 0 failed\n" ); - } +#endif -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#ifdef CONFIG_SERIAL_TEXT_DEBUG /* Configure debug serial access */ gen550_init (0 , &port); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &port); +#endif +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )/* Purge TLB entry added in head_44x.S for early serial access */ _tlbie (UART0_IO_BASE );#endif
@@ -267,14 +274,18 @@ ocotea_early_serial_map(void) port.uartclk = clocks.uart1; port.line =1 ; -if (early_serial_setup (&port) !=0 ) { +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&port) !=1 )printk ("Early serial init of port 1 failed\n" ); - } +#endif -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#ifdef CONFIG_SERIAL_TEXT_DEBUG /* Configure debug serial access */ gen550_init (1 , &port);#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (1 , &port); +#endif } static void __init
@@ -344,8 +355,5 @@ void __init platform_init(unsigned long ppc_md.nvram_read_val = todc_direct_read_val; ppc_md.nvram_write_val = todc_direct_write_val; -#ifdef CONFIG_KGDB - ppc_md.early_serial_map = ocotea_early_serial_map; -#endif ppc_md.init = ocotea_init; }
arch/ppc/platforms/4xx/xilinx_ml300.c +2 -3
@@ -16,6 +16,8 @@#include <linux/serial_core.h> #include <linux/serial_8250.h> #include <linux/serialP.h> +#include <linux/kgdb.h> +#include <asm/io.h> #include <asm/machdep.h>
@@ -41,9 +43,6 @@* ppc4xx_map_io arch/ppc/syslib/ppc4xx_setup.c * start_kernel init/main.c * setup_arch arch/ppc/kernel/setup.c -* #if defined(CONFIG_KGDB) -* *ppc_md.kgdb_map_scc() == gen550_kgdb_map_scc -* #endif * *ppc_md.setup_arch == ml300_setup_arch this file * ppc4xx_setup_arch arch/ppc/syslib/ppc4xx_setup.c * ppc4xx_find_bridges arch/ppc/syslib/ppc405_pci.c
arch/ppc/platforms/85xx/sbc8560.c +20 -18
@@ -30,6 +30,7 @@#include <linux/initrd.h> #include <linux/module.h> #include <linux/fsl_devices.h> +#include <linux/kgdb.h> #include <asm/system.h> #include <asm/pgtable.h>
@@ -44,14 +45,13 @@#include <asm/mpc85xx.h> #include <asm/irq.h> #include <asm/immap_85xx.h> -#include <asm/kgdb.h> #include <asm/ppc_sys.h> #include <mm/mmu_decl.h> #include <syslib/ppc85xx_common.h> #include <syslib/ppc85xx_setup.h> +#include <syslib/gen550.h> -#ifdef CONFIG_SERIAL_8250 static void __init sbc8560_early_serial_map (void ) {
@@ -67,12 +67,16 @@ sbc8560_early_serial_map(void) uart_req.membase =ioremap (uart_req.mapbase, MPC85xx_UART0_SIZE); uart_req.type =PORT_16650 ; -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) -gen550_init (0 , &uart_req); +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&uart_req) !=0 ) +printk (KERN_ERR "Early serial init of port 0 failed\n" ); +#endif +#ifdef CONFIG_SERIAL_TEXT_DEBUG +gen550_init (0 , &uart_req); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &uart_req);#endif - -if (early_serial_setup (&uart_req) !=0 ) -printk ("Early serial init of port 0 failed\n" );/* Assume early_serial_setup() doesn't modify uart_req */ uart_req.line =1 ;
@@ -80,14 +84,17 @@ sbc8560_early_serial_map(void) uart_req.membase =ioremap (uart_req.mapbase, MPC85xx_UART1_SIZE); uart_req.irq = MPC85xx_IRQ_EXT10; -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) -gen550_init (1 , &uart_req); +#ifdef CONFIG_SERIAL_8250 +if (early_serial_setup (&uart_req) !=0 ) +printk (KERN_ERR "Early serial init of port 0 failed\n" );#endif - -if (early_serial_setup (&uart_req) !=0 ) - printk("Early serial init of port 1 failed\n"); -} +#ifdef CONFIG_SERIAL_TEXT_DEBUG +gen550_init (0 , &uart_req); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &uart_req);#endif +}/* ************************************************************************ *
@@ -116,9 +123,7 @@ sbc8560_setup_arch(void)/* setup PCI host bridges */ mpc85xx_setup_hose ();#endif -#ifdef CONFIG_SERIAL_8250 sbc8560_early_serial_map (); -#endif #ifdef CONFIG_SERIAL_TEXT_DEBUG /* Invalidate the entry we stole earlier the serial ports * should be properly mapped */
@@ -225,9 +230,6 @@ platform_init(unsigned long r3, unsigned#if defined(CONFIG_SERIAL_8250 ) && defined(CONFIG_SERIAL_TEXT_DEBUG ) ppc_md.progress = gen550_progress;#endif /* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */ -#if defined(CONFIG_SERIAL_8250 ) && defined(CONFIG_KGDB ) - ppc_md.early_serial_map = sbc8560_early_serial_map; -#endif /* CONFIG_SERIAL_8250 && CONFIG_KGDB */ if (ppc_md.progress) ppc_md.progress ("sbc8560_init(): exit" ,0 );
arch/ppc/platforms/chestnut.c +2 -5
@@ -35,9 +35,9 @@#include <asm/io.h> #include <asm/hw_irq.h> #include <asm/machdep.h> -#include <asm/kgdb.h> #include <asm/bootinfo.h> #include <asm/mv64x60.h> +#include <syslib/gen550.h> #include <platforms/chestnut.h> static void __iomem *sram_base;/* Virtual addr of Internal SRAM */
@@ -493,7 +493,7 @@ chestnut_power_off(void)static void __init chestnut_map_io (void ) { -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )io_block_mapping (CHESTNUT_UART_BASE ,CHESTNUT_UART_BASE ,0x100000 , _PAGE_IO);#endif
@@ -567,9 +567,6 @@ platform_init(unsigned long r3, unsigned#if defined(CONFIG_SERIAL_TEXT_DEBUG ) ppc_md.progress = gen550_progress;#endif -#if defined(CONFIG_KGDB ) - ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; -#endif if (ppc_md.progress) ppc_md.progress ("chestnut_init(): exit" ,0 );
arch/ppc/platforms/pplus.c +1 -4
@@ -35,9 +35,9 @@#include <asm/hawk.h> #include <asm/todc.h> #include <asm/bootinfo.h> -#include <asm/kgdb.h> #include <asm/reg.h> +#include <syslib/gen550.h> #include "pplus.h" #undef DUMP_DBATS
@@ -893,9 +893,6 @@ platform_init(unsigned long r3, unsigned#ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress;#endif /* CONFIG_SERIAL_TEXT_DEBUG */ -#ifdef CONFIG_KGDB - ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; -#endif #ifdef CONFIG_SMP smp_ops = &pplus_smp_ops;#endif /* CONFIG_SMP */
arch/ppc/platforms/sandpoint.c +1 -4
@@ -95,9 +95,9 @@#include <asm/bootinfo.h> #include <asm/mpc10x.h> #include <asm/pci-bridge.h> -#include <asm/kgdb.h> #include <asm/ppc_sys.h> +#include <syslib/gen550.h> #include "sandpoint.h" /* Set non-zero if an X2 Sandpoint detected. */
@@ -730,9 +730,6 @@ platform_init(unsigned long r3, unsigned ppc_md.nvram_read_val = todc_mc146818_read_val; ppc_md.nvram_write_val = todc_mc146818_write_val; -#ifdef CONFIG_KGDB - ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; -#endif #ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress;#endif
arch/ppc/platforms/spruce.c +14 -10
@@ -26,6 +26,7 @@#include <linux/root_dev.h> #include <linux/serial.h> #include <linux/tty.h> +#include <linux/kgdb.h> #include <linux/serial_core.h> #include <linux/serial_8250.h>
@@ -38,9 +39,9 @@#include <asm/time.h> #include <asm/todc.h> #include <asm/bootinfo.h> -#include <asm/kgdb.h> #include <syslib/cpc700.h> +#include <syslib/gen550.h> #include "spruce.h"
@@ -179,26 +180,32 @@ spruce_early_serial_map(void) serial_req.membase = (u_char *)UART0_IO_BASE ; serial_req.regshift =0 ; -#if defined(CONFIG_KGDB ) || defined(CONFIG_SERIAL_TEXT_DEBUG ) -gen550_init (0 , &serial_req); -#endif #ifdef CONFIG_SERIAL_8250 if (early_serial_setup (&serial_req) !=0 )printk ("Early serial init of port 0 failed\n" );#endif +#ifdef CONFIG_SERIAL_TEXT_DEBUG +gen550_init (0 , &serial_req); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &port); +#endif /* Assume early_serial_setup() doesn't modify serial_req */ serial_req.line =1 ; serial_req.irq =UART1_INT ; serial_req.membase = (u_char *)UART1_IO_BASE ; -#if defined(CONFIG_KGDB ) || defined(CONFIG_SERIAL_TEXT_DEBUG ) -gen550_init (1 , &serial_req); -#endif #ifdef CONFIG_SERIAL_8250 if (early_serial_setup (&serial_req) !=0 )printk ("Early serial init of port 1 failed\n" );#endif +#ifdef CONFIG_SERIAL_TEXT_DEBUG +gen550_init (1 , &serial_req); +#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (1 , &serial_req); +#endif }TODC_ALLOC ();
@@ -317,7 +324,4 @@ platform_init(unsigned long r3, unsigned#ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress;#endif /* CONFIG_SERIAL_TEXT_DEBUG */ -#ifdef CONFIG_KGDB - ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; -#endif }
arch/ppc/syslib/Makefile +0 -1
@@ -78,7 +78,6 @@ obj-$(CONFIG_PCI_8260) += m82xx_pci.o p obj-$(CONFIG_8260_PCI9) += m8260_pci_erratum9.o obj-$(CONFIG_CPM2) += cpm2_common.o cpm2_pic.o ifeq ($(CONFIG_PPC_GEN550),y) -obj-$(CONFIG_KGDB) += gen550_kgdb.o gen550_dbg.o obj-$(CONFIG_SERIAL_TEXT_DEBUG) += gen550_dbg.o endif ifeq ($(CONFIG_SERIAL_MPSC_CONSOLE),y)
arch/ppc/syslib/gen550.h +0 -1
@@ -11,4 +11,3 @@extern void gen550_progress (char *,unsigned short );extern void gen550_init (int ,struct uart_port *); -extern void gen550_kgdb_map_scc (void );
arch/ppc/syslib/ibm44x_common.c +0 -3
@@ -192,9 +192,6 @@ void __init ibm44x_platform_init(unsigne#ifdef CONFIG_SERIAL_TEXT_DEBUG ppc_md.progress = gen550_progress;#endif /* CONFIG_SERIAL_TEXT_DEBUG */ -#ifdef CONFIG_KGDB - ppc_md.kgdb_map_scc = gen550_kgdb_map_scc; -#endif /* * The Abatron BDI JTAG debugger does not tolerate others
arch/ppc/syslib/mv64x60.c +57 -5
93 lines not on this page · raw message
arch/ppc/syslib/mv64x60_dbg.c +1 -51
61 lines not on this page · raw message
arch/ppc/syslib/ppc85xx_setup.c +19 -7
@@ -19,16 +19,17 @@#include <linux/tty.h> /* for linux/serial_core.h */ #include <linux/serial_core.h> #include <linux/serial_8250.h> +#include <linux/kgdb.h> #include <asm/time.h> #include <asm/mpc85xx.h> #include <asm/immap_85xx.h> #include <asm/mmu.h> #include <asm/ppc_sys.h> -#include <asm/kgdb.h> #include <asm/machdep.h> #include <syslib/ppc85xx_setup.h> +#include <syslib/gen550.h> extern void abort (void );
@@ -69,11 +70,11 @@ mpc85xx_calibrate_decr(void)mtspr (SPRN_TCR ,TCR_DIE ); } -#ifdef CONFIG_SERIAL_8250 +#if defined(CONFIG_SERIAL_8250 ) || defined(CONFIG_KGDB_8250 )void __init mpc85xx_early_serial_map (void ) { -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )struct uart_port serial_req;#endif struct plat_serial8250_port *pdata;
@@ -85,27 +86,40 @@ mpc85xx_early_serial_map(void) pdata[0 ].mapbase += binfo->bi_immr_base; pdata[0 ].membase =ioremap (pdata[0 ].mapbase, MPC85xx_UART0_SIZE); -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )memset (&serial_req,0 ,sizeof (serial_req)); serial_req.iotype =UPIO_MEM ; serial_req.mapbase = pdata[0 ].mapbase; serial_req.membase = pdata[0 ].membase; serial_req.regshift =0 ; + serial_req.irq = pdata[0 ].irq; + serial_req.flags = pdata[0 ].flags; + serial_req.uartclk = pdata[0 ].uartclk; +#ifdef CONFIG_SERIAL_TEXT_DEBUG gen550_init (0 , &serial_req);#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (0 , &serial_req); +#endif +#endif pdata[1 ].uartclk = binfo->bi_busfreq; pdata[1 ].mapbase += binfo->bi_immr_base; pdata[1 ].membase =ioremap (pdata[1 ].mapbase, MPC85xx_UART0_SIZE); -#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB ) +#if defined(CONFIG_SERIAL_TEXT_DEBUG ) || defined(CONFIG_KGDB_8250 )/* Assume gen550_init() doesn't modify serial_req */ serial_req.mapbase = pdata[1 ].mapbase; serial_req.membase = pdata[1 ].membase; +#ifdef CONFIG_SERIAL_TEXT_DEBUG gen550_init (1 , &serial_req);#endif +#ifdef CONFIG_KGDB_8250 +kgdb8250_add_port (1 , &serial_req); +#endif +#endif }#endif
@@ -363,5 +377,3 @@ mpc85xx_setup_hose(void) return; }#endif /* CONFIG_PCI */ - -
drivers/serial/Makefile +1 -0
@@ -51,6 +51,7 @@ obj-$(CONFIG_SERIAL_IMX) += imx.o obj-$(CONFIG_SERIAL_MPC52xx) += mpc52xx_uart.o obj-$(CONFIG_SERIAL_ICOM) += icom.o obj-$(CONFIG_SERIAL_M32R_SIO) += m32r_sio.o +obj-$(CONFIG_KGDB_MPSC) += mpsc_kgdb.o obj-$(CONFIG_SERIAL_MPSC) += mpsc.o obj-$(CONFIG_SERIAL_SB1250_DUART) += sb1250-duart.o obj-$(CONFIG_ETRAX_SERIAL) += crisv10.o
drivers/serial/cpm_uart/Makefile +1 -0
@@ -7,5 +7,6 @@ obj-$(CONFIG_SERIAL_CPM) += cpm_uart.o # Select the correct platform objects. cpm_uart-objs-$(CONFIG_CPM2) += cpm_uart_cpm2.o cpm_uart-objs-$(CONFIG_8xx) += cpm_uart_cpm1.o +cpm_uart-objs-$(CONFIG_KGDB_CPM_UART) += cpm_uart_kgdb.o cpm_uart-objs := cpm_uart_core.o $(cpm_uart-objs-y)
drivers/serial/cpm_uart/cpm_uart.h +38 -1
@@ -50,6 +50,41 @@#define SCC_WAIT_CLOSING 100 +#ifdef CONFIG_KGDB_CPM_UART + +/* Speed of the debug UART. */ +#if CONFIG_KGDB_BAUDRATE ==9600 +#define KGDB_BAUD B9600 +#elif CONFIG_KGDB_BAUDRATE ==19200 +#define KGDB_BAUD B19200 +#elif CONFIG_KGDB_BAUDRATE ==38400 +#define KGDB_BAUD B38400 +#elif CONFIG_KGDB_BAUDRATE ==57600 +#define KGDB_BAUD B57600 +#elif CONFIG_KGDB_BAUDRATE ==115200 +#define KGDB_BAUD B115200/* Start with this if not given */ +#else +#error Unsupported baud rate +#endif + +#if defined(CONFIG_KGDB_CPM_UART_SCC1 ) +#define KGDB_PINFO_INDEX UART_SCC1 +#elif defined(CONFIG_KGDB_CPM_UART_SCC2 ) +#define KGDB_PINFO_INDEX UART_SCC2 +#elif defined(CONFIG_KGDB_CPM_UART_SCC3 ) +#define KGDB_PINFO_INDEX UART_SCC3 +#elif defined(CONFIG_KGDB_CPM_UART_SCC4 ) +#define KGDB_PINFO_INDEX UART_SCC4 +#elif defined(CONFIG_KGDB_CPM_UART_SMC1 ) +#define KGDB_PINFO_INDEX UART_SMC1 +#elif defined(CONFIG_KGDB_CPM_UART_SMC2 ) +#define KGDB_PINFO_INDEX UART_SMC2 +#else +#error The port for KGDB is undefined +#endif + +#endif /* CONFIG_KGDB_CPM_UART */ +struct uart_cpm_port {struct uart_port port;u16 rx_nrfifos;
@@ -90,6 +125,9 @@ extern int cpm_uart_port_map[UART_NR];extern int cpm_uart_nr;extern struct uart_cpm_port cpm_uart_ports[UART_NR ]; +void cpm_uart_early_write (int index,const char *s,u_int count); +int cpm_uart_early_setup (int index,int early); +/* these are located in their respective files */ void cpm_line_cr_cmd (struct uart_cpm_port *port,int cmd);int cpm_uart_init_portdesc (void );
@@ -138,5 +176,4 @@ static inline void *cpm2cpu_addr(unsigne return NULL; } -#endif /* CPM_UART_H */
drivers/serial/cpm_uart/cpm_uart_core.c +65 -24
145 lines not on this page · raw message
drivers/serial/cpm_uart/cpm_uart_cpm1.c +28 -0
@@ -64,6 +64,7 @@ void cpm_line_cr_cmd(struct uart_cpm_porushort val;int line = port - cpm_uart_ports;volatile cpm8xx_t *cp = cpmp; +unsigned *bcsr_io;switch (line) {case UART_SMC1 :
@@ -106,12 +107,35 @@ void scc1_lineif(struct uart_cpm_port *p {/* XXX SCC1: insert port configuration here */ pinfo->brg =1 ; + +#if defined(CONFIG_MPC885ADS ) || defined(CONFIG_MPC86XADS ) + bcsr_io =ioremap (BCSR1 ,sizeof (unsigned long )); + +if (bcsr_io ==NULL ) { +printk (KERN_CRIT "Could not remap BCSR\n" ); +return ; + } +out_be32 (bcsr_io,in_be32 (bcsr_io) & ~BCSR1_RS232EN_1 ); +iounmap (bcsr_io); +#endif }void scc2_lineif (struct uart_cpm_port *pinfo) {/* XXX SCC2: insert port configuration here */ pinfo->brg =2 ; +unsigned *bcsr_io; + +#if defined(CONFIG_MPC885ADS ) || defined(CONFIG_MPC86XADS ) + bcsr_io =ioremap (BCSR1 ,sizeof (unsigned long )); + +if (bcsr_io ==NULL ) { +printk (KERN_CRIT "Could not remap BCSR\n" ); +return ; + } +out_be32 (bcsr_io,in_be32 (bcsr_io) & ~BCSR1_RS232EN_2 ); +iounmap (bcsr_io); +#endif }void scc3_lineif (struct uart_cpm_port *pinfo)
@@ -202,6 +226,10 @@ int cpm_uart_init_portdesc(void) {pr_debug ("CPM uart[-]:init portdesc\n" ); +/* Check if we have called this yet. This may happen if early kgdb +breakpoint is on */ +if (cpm_uart_nr) +return 0 ; cpm_uart_nr =0 ;#ifdef CONFIG_SERIAL_CPM_SMC1 cpm_uart_ports[UART_SMC1 ].smcp = &cpmp->cp_smc[0 ];
drivers/serial/cpm_uart/cpm_uart_cpm2.c +4 -0
@@ -304,6 +304,10 @@ int cpm_uart_init_portdesc(void)#endif pr_debug ("CPM uart[-]:init portdesc\n" ); +/* Check if we have called this yet. This may happen if early kgdb +breakpoint is on */ +if (cpm_uart_nr) +return 0 ; cpm_uart_nr =0 ;#ifdef CONFIG_SERIAL_CPM_SMC1 cpm_uart_ports[UART_SMC1 ].smcp = (smc_t *)cpm2_map (im_smc[0 ]);
drivers/serial/cpm_uart/cpm_uart_kgdb.c new file +186 -0
186 lines not on this page · raw message
drivers/serial/mpsc_kgdb.c new file +347 -0
17 lines not on this page · raw message
include/asm-powerpc/kgdb.h +50 -43
93 lines not on this page · raw message
include/asm-ppc/kgdb.h +10 -49
59 lines not on this page · raw message
include/asm-ppc/machdep.h +0 -2
Lines of this file are not shown. View the raw message.
include/asm-ppc/mv64x60.h +2 -0
Lines of this file are not shown. View the raw message.
include/asm-ppc/mv64x60_defs.h +2 -1
Lines of this file are not shown. View the raw message.
lib/Kconfig.kgdb +49 -2
51 lines not on this page · raw message
arch/ppc/kernel/Makefile +1 -1
Lines of this file are not shown. View the raw message.
arch/powerpc/kernel/kgdb_setjmp32.S new file +41 -0
41 lines not on this page · raw message
arch/powerpc/kernel/kgdb_setjmp64.S new file +77 -0
77 lines not on this page · raw message
arch/ppc/kernel/kgdb_setjmp32.S new file +41 -0
41 lines not on this page · raw message
arch/ppc/platforms/83xx/mpc834x_sys.c +3 -2
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/85xx/mpc8540_ads.c +2 -5
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/85xx/mpc8560_ads.c +0 -1
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/85xx/mpc85xx_cds_common.c +2 -5
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/85xx/tqm85xx.c +2 -5
Lines of this file are not shown. View the raw message.
arch/ppc/syslib/gen550_kgdb.c deleted +0 -83
83 lines not on this page · raw message
arch/ppc/syslib/ppc83xx_setup.c +19 -5
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/lopec.c +2 -1
Lines of this file are not shown. View the raw message.
arch/ppc/syslib/ppc4xx_setup.c +0 -1
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/4xx/bamboo.c +17 -6
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/4xx/luan.c +10 -3
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/4xx/taishan.c +2 -5
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/4xx/xilinx_ml403.c +0 -3
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/4xx/yucca.c +0 -3
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/ev64260.c +2 -10
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/hdpu.c +0 -19
Lines of this file are not shown. View the raw message.
arch/ppc/platforms/radstone_ppc7d.c +5 -7
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.