90 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			90 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
|   | /* | ||
|  |  * linux/arch/unicore32/kernel/debug-macro.S | ||
|  |  * | ||
|  |  * Code specific to PKUnity SoC and UniCore ISA | ||
|  |  * | ||
|  |  * Copyright (C) 2001-2010 GUAN Xue-tao | ||
|  |  * | ||
|  |  * This program is free software; you can redistribute it and/or modify
 | ||
|  |  * it under the terms of the GNU General Public License version 2 as | ||
|  |  * published by the Free Software Foundation. | ||
|  |  * | ||
|  |  * Debugging macro include header | ||
|  |  */ | ||
|  | #include <generated/asm-offsets.h> | ||
|  | #include <mach/hardware.h> | ||
|  | 
 | ||
|  | 		.macro	put_word_ocd, rd, rx=r16 | ||
|  | 1001:		movc		\rx, p1.c0, #0 | ||
|  | 		cand.a	\rx, #2 | ||
|  | 		bne	1001b | ||
|  | 		movc		p1.c1, \rd, #1 | ||
|  | 		.endm | ||
|  | 
 | ||
|  | #ifdef CONFIG_DEBUG_OCD | ||
|  | 		/* debug using UniCore On-Chip-Debugger */ | ||
|  | 		.macro	addruart, rx | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	senduart, rd, rx | ||
|  | 		put_word_ocd	\rd, \rx | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	busyuart, rd, rx | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	waituart, rd, rx | ||
|  | 		.endm | ||
|  | #else | ||
|  | #define UART_CLK_DEFAULT        3686400 * 20 | ||
|  | 	/* Uartclk = MCLK/ 2, The MCLK on my board is 3686400 * 40  */ | ||
|  | #define BAUD_RATE_DEFAULT	115200 | ||
|  | 	/* The baud rate of the serial port */ | ||
|  | 
 | ||
|  | #define UART_DIVISOR_DEFAULT	(UART_CLK_DEFAULT \ | ||
|  | 				/ (16 * BAUD_RATE_DEFAULT) - 1) | ||
|  | 
 | ||
|  | 		.macro	addruart,rx | ||
|  | 		mrc	p0, #0, \rx, c1, c0 | ||
|  | 		tst	\rx, #1			@ MMU enabled?
 | ||
|  | 		moveq	\rx, #0xee000000	@ physical base address
 | ||
|  | 		movne	\rx, #0x6e000000	@ virtual address
 | ||
|  | 
 | ||
|  | 		@ We probe for the active serial port here
 | ||
|  | 		@ However, now we assume UART0 is active:	epip4d
 | ||
|  | 		@ We assume r1 and r2 can be clobbered.
 | ||
|  | 
 | ||
|  | 		movl 	r2, #UART_DIVISOR_DEFAULT | ||
|  | 		mov 	r1, #0x80 | ||
|  | 		str	r1, [\rx, #UART_LCR_OFFSET] | ||
|  | 		and	r1, r2, #0xff00 | ||
|  | 		mov	r1, r1, lsr #8 | ||
|  | 		str	r1, [\rx, #UART_DLH_OFFSET] | ||
|  | 		and	r1, r2, #0xff | ||
|  | 		str	r1, [\rx, #UART_DLL_OFFSET] | ||
|  | 		mov 	r1, #0x7 | ||
|  | 		str	r1, [\rx, #UART_FCR_OFFSET] | ||
|  | 		mov 	r1, #0x3 | ||
|  | 		str	r1, [\rx, #UART_LCR_OFFSET] | ||
|  | 		mov 	r1, #0x0 | ||
|  | 		str	r1, [\rx, #UART_IER_OFFSET] | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	senduart,rd,rx | ||
|  | 		str	\rd, [\rx, #UART_THR_OFFSET] | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	waituart,rd,rx | ||
|  | 1001:		ldr	\rd, [\rx, #UART_LSR_OFFSET] | ||
|  | 		tst	\rd, #UART_LSR_THRE | ||
|  | 		beq	1001b | ||
|  | 		.endm | ||
|  | 
 | ||
|  | 		.macro	busyuart,rd,rx | ||
|  | 1001:		ldr	\rd, [\rx, #UART_LSR_OFFSET] | ||
|  | 		tst	\rd, #UART_LSR_TEMT | ||
|  | 		bne	1001b | ||
|  | 		.endm | ||
|  | #endif | ||
|  | 
 |