 368dd5acd1
			
		
	
	
	368dd5acd1
	
	
	
		
			
			Implement the Panasonic MN10300 AM34 CPU subarch and implement SMP support for MN10300. Also implement support for the MN2WS0060 processor and the ASB2364 evaluation board which are AM34 based. Signed-off-by: Akira Takeuchi <takeuchi.akr@jp.panasonic.com> Signed-off-by: Kiyoshi Owada <owada.kiyoshi@jp.panasonic.com> Signed-off-by: David Howells <dhowells@redhat.com>
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| ###############################################################################
 | |
| #
 | |
| # 16550 serial Rx interrupt handler for gdbstub I/O
 | |
| #
 | |
| # Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 | |
| # Written by David Howells (dhowells@redhat.com)
 | |
| #
 | |
| # This program is free software; you can redistribute it and/or
 | |
| # modify it under the terms of the GNU General Public Licence
 | |
| # as published by the Free Software Foundation; either version
 | |
| # 2 of the Licence, or (at your option) any later version.
 | |
| #
 | |
| ###############################################################################
 | |
| #include <linux/sys.h>
 | |
| #include <linux/linkage.h>
 | |
| #include <asm/smp.h>
 | |
| #include <asm/cpu-regs.h>
 | |
| #include <asm/thread_info.h>
 | |
| #include <asm/frame.inc>
 | |
| #include <asm/intctl-regs.h>
 | |
| #include <asm/irqflags.h>
 | |
| #include <unit/serial.h>
 | |
| 
 | |
| 	.text
 | |
| 
 | |
| ###############################################################################
 | |
| #
 | |
| # GDB stub serial receive interrupt entry point
 | |
| # - intended to run at interrupt priority 0
 | |
| #
 | |
| ###############################################################################
 | |
| 	.globl	gdbstub_io_rx_handler
 | |
| 	.type	gdbstub_io_rx_handler,@function
 | |
| gdbstub_io_rx_handler:
 | |
| 	movm	[d2,d3,a2,a3],(sp)
 | |
| 
 | |
| #if 1
 | |
| 	movbu	(GDBPORT_SERIAL_IIR),d2
 | |
| #endif
 | |
| 
 | |
| 	mov	(gdbstub_rx_inp),a3
 | |
| gdbstub_io_rx_more:
 | |
| 	mov	a3,a2
 | |
| 	add	2,a3
 | |
| 	and	0x00000fff,a3
 | |
| 	mov	(gdbstub_rx_outp),d3
 | |
| 	cmp	a3,d3
 | |
| 	beq	gdbstub_io_rx_overflow
 | |
| 
 | |
| 	movbu	(GDBPORT_SERIAL_LSR),d3
 | |
| 	btst	UART_LSR_DR,d3
 | |
| 	beq	gdbstub_io_rx_done
 | |
| 	movbu	(GDBPORT_SERIAL_RX),d2
 | |
| 	movbu	d3,(gdbstub_rx_buffer+1,a2)
 | |
| 	movbu	d2,(gdbstub_rx_buffer,a2)
 | |
| 	mov	a3,(gdbstub_rx_inp)
 | |
| 	bra	gdbstub_io_rx_more
 | |
| 
 | |
| gdbstub_io_rx_done:
 | |
| 	mov	GxICR_DETECT,d2
 | |
| 	movbu	d2,(XIRQxICR(GDBPORT_SERIAL_IRQ))	# ACK the interrupt
 | |
| 	movhu	(XIRQxICR(GDBPORT_SERIAL_IRQ)),d2	# flush
 | |
| 	movm	(sp),[d2,d3,a2,a3]
 | |
| 	bset	0x01,(gdbstub_busy)
 | |
| 	beq	gdbstub_io_rx_enter
 | |
| 	rti
 | |
| 
 | |
| gdbstub_io_rx_overflow:
 | |
| 	bset	0x01,(gdbstub_rx_overflow)
 | |
| 	bra	gdbstub_io_rx_done
 | |
| 
 | |
| gdbstub_io_rx_enter:
 | |
| 	LOCAL_CHANGE_INTR_MASK_LEVEL(NUM2EPSW_IM(CONFIG_GDBSTUB_IRQ_LEVEL+1))
 | |
| 	add	-4,sp
 | |
| 	SAVE_ALL
 | |
| 
 | |
| 	mov	0xffffffff,d0
 | |
| 	mov	d0,(REG_ORIG_D0,fp)
 | |
| 	mov	0x280,d1
 | |
| 
 | |
| 	mov	fp,d0
 | |
| 	call	gdbstub_rx_irq[],0	# gdbstub_rx_irq(regs,excep)
 | |
| 
 | |
| 	LOCAL_CLI
 | |
| 	bclr	0x01,(gdbstub_busy)
 | |
| 
 | |
| 	.globl gdbstub_return
 | |
| gdbstub_return:
 | |
| 	RESTORE_ALL
 | |
| 
 | |
| 	.size	gdbstub_io_rx_handler,.-gdbstub_io_rx_handler
 |