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
 |