diff options
Diffstat (limited to 'arch/arm/include/debug')
| -rw-r--r-- | arch/arm/include/debug/efm32.S | 45 | ||||
| -rw-r--r-- | arch/arm/include/debug/imx-uart.h | 21 | ||||
| -rw-r--r-- | arch/arm/include/debug/msm.S | 41 | ||||
| -rw-r--r-- | arch/arm/include/debug/pl01x.S | 2 | ||||
| -rw-r--r-- | arch/arm/include/debug/s3c24xx.S | 46 | ||||
| -rw-r--r-- | arch/arm/include/debug/samsung.S | 2 | ||||
| -rw-r--r-- | arch/arm/include/debug/tegra.S | 52 | ||||
| -rw-r--r-- | arch/arm/include/debug/vf.S | 37 | ||||
| -rw-r--r-- | arch/arm/include/debug/zynq.S | 13 | 
9 files changed, 179 insertions, 80 deletions
diff --git a/arch/arm/include/debug/efm32.S b/arch/arm/include/debug/efm32.S new file mode 100644 index 00000000000..2265a199280 --- /dev/null +++ b/arch/arm/include/debug/efm32.S @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2013 Pengutronix + * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> + * + * 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. + */ + +#define UARTn_CMD		0x000c +#define UARTn_CMD_TXEN			0x0004 + +#define	UARTn_STATUS		0x0010 +#define	UARTn_STATUS_TXC		0x0020 +#define	UARTn_STATUS_TXBL		0x0040 + +#define	UARTn_TXDATA		0x0034 + +		.macro	addruart, rx, tmp +		ldr	\rx, =(CONFIG_DEBUG_UART_PHYS) + +		/* +		 * enable TX. The driver might disable it to save energy. We +		 * don't care about disabling at the end as during debug power +		 * consumption isn't that important. +		 */ +		ldr	\tmp, =(UARTn_CMD_TXEN) +		str	\tmp, [\rx, #UARTn_CMD] +		.endm + +		.macro	senduart,rd,rx +		strb	\rd, [\rx, #UARTn_TXDATA] +		.endm + +		.macro	waituart,rd,rx +1001:		ldr	\rd, [\rx, #UARTn_STATUS] +		tst	\rd, #UARTn_STATUS_TXBL +		beq	1001b +		.endm + +		.macro	busyuart,rd,rx +1001:		ldr	\rd, [\rx, UARTn_STATUS] +		tst	\rd, #UARTn_STATUS_TXC +		bne	1001b +		.endm diff --git a/arch/arm/include/debug/imx-uart.h b/arch/arm/include/debug/imx-uart.h index 29da84e183f..032a316eb80 100644 --- a/arch/arm/include/debug/imx-uart.h +++ b/arch/arm/include/debug/imx-uart.h @@ -43,6 +43,14 @@  #define IMX35_UART_BASE_ADDR(n)	IMX35_UART##n##_BASE_ADDR  #define IMX35_UART_BASE(n)	IMX35_UART_BASE_ADDR(n) +#define IMX50_UART1_BASE_ADDR	0x53fbc000 +#define IMX50_UART2_BASE_ADDR	0x53fc0000 +#define IMX50_UART3_BASE_ADDR	0x5000c000 +#define IMX50_UART4_BASE_ADDR	0x53ff0000 +#define IMX50_UART5_BASE_ADDR	0x63f90000 +#define IMX50_UART_BASE_ADDR(n)	IMX50_UART##n##_BASE_ADDR +#define IMX50_UART_BASE(n)	IMX50_UART_BASE_ADDR(n) +  #define IMX51_UART1_BASE_ADDR	0x73fbc000  #define IMX51_UART2_BASE_ADDR	0x73fc0000  #define IMX51_UART3_BASE_ADDR	0x7000c000 @@ -73,6 +81,15 @@  #define IMX6SL_UART_BASE_ADDR(n) IMX6SL_UART##n##_BASE_ADDR  #define IMX6SL_UART_BASE(n)	IMX6SL_UART_BASE_ADDR(n) +#define IMX6SX_UART1_BASE_ADDR	0x02020000 +#define IMX6SX_UART2_BASE_ADDR	0x021e8000 +#define IMX6SX_UART3_BASE_ADDR	0x021ec000 +#define IMX6SX_UART4_BASE_ADDR	0x021f0000 +#define IMX6SX_UART5_BASE_ADDR	0x021f4000 +#define IMX6SX_UART6_BASE_ADDR	0x022a0000 +#define IMX6SX_UART_BASE_ADDR(n) IMX6SX_UART##n##_BASE_ADDR +#define IMX6SX_UART_BASE(n)	IMX6SX_UART_BASE_ADDR(n) +  #define IMX_DEBUG_UART_BASE(soc) soc##_UART_BASE(CONFIG_DEBUG_IMX_UART_PORT)  #ifdef CONFIG_DEBUG_IMX1_UART @@ -85,6 +102,8 @@  #define UART_PADDR	IMX_DEBUG_UART_BASE(IMX31)  #elif defined(CONFIG_DEBUG_IMX35_UART)  #define UART_PADDR	IMX_DEBUG_UART_BASE(IMX35) +#elif defined(CONFIG_DEBUG_IMX50_UART) +#define UART_PADDR	IMX_DEBUG_UART_BASE(IMX50)  #elif defined(CONFIG_DEBUG_IMX51_UART)  #define UART_PADDR	IMX_DEBUG_UART_BASE(IMX51)  #elif defined(CONFIG_DEBUG_IMX53_UART) @@ -93,6 +112,8 @@  #define UART_PADDR	IMX_DEBUG_UART_BASE(IMX6Q)  #elif defined(CONFIG_DEBUG_IMX6SL_UART)  #define UART_PADDR	IMX_DEBUG_UART_BASE(IMX6SL) +#elif defined(CONFIG_DEBUG_IMX6SX_UART) +#define UART_PADDR	IMX_DEBUG_UART_BASE(IMX6SX)  #endif  #endif /* __DEBUG_IMX_UART_H */ diff --git a/arch/arm/include/debug/msm.S b/arch/arm/include/debug/msm.S index 9166e1bc470..9ef57612811 100644 --- a/arch/arm/include/debug/msm.S +++ b/arch/arm/include/debug/msm.S @@ -15,46 +15,15 @@   *   */ -#if defined(CONFIG_ARCH_MSM7X00A) || defined(CONFIG_ARCH_QSD8X50) -#define MSM_UART1_PHYS        0xA9A00000 -#define MSM_UART2_PHYS        0xA9B00000 -#define MSM_UART3_PHYS        0xA9C00000 -#elif defined(CONFIG_ARCH_MSM7X30) -#define MSM_UART1_PHYS        0xACA00000 -#define MSM_UART2_PHYS        0xACB00000 -#define MSM_UART3_PHYS        0xACC00000 -#endif - -#if defined(CONFIG_DEBUG_MSM_UART1) -#define MSM_DEBUG_UART_BASE	0xE1000000 -#define MSM_DEBUG_UART_PHYS	MSM_UART1_PHYS -#elif defined(CONFIG_DEBUG_MSM_UART2) -#define MSM_DEBUG_UART_BASE	0xE1000000 -#define MSM_DEBUG_UART_PHYS	MSM_UART2_PHYS -#elif defined(CONFIG_DEBUG_MSM_UART3) -#define MSM_DEBUG_UART_BASE	0xE1000000 -#define MSM_DEBUG_UART_PHYS	MSM_UART3_PHYS -#endif - -#ifdef CONFIG_DEBUG_MSM8660_UART -#define MSM_DEBUG_UART_BASE	0xF0040000 -#define MSM_DEBUG_UART_PHYS	0x19C40000 -#endif - -#ifdef CONFIG_DEBUG_MSM8960_UART -#define MSM_DEBUG_UART_BASE	0xF0040000 -#define MSM_DEBUG_UART_PHYS	0x16440000 -#endif -  	.macro	addruart, rp, rv, tmp -#ifdef MSM_DEBUG_UART_PHYS -	ldr	\rp, =MSM_DEBUG_UART_PHYS -	ldr	\rv, =MSM_DEBUG_UART_BASE +#ifdef CONFIG_DEBUG_UART_PHYS +	ldr	\rp, =CONFIG_DEBUG_UART_PHYS +	ldr	\rv, =CONFIG_DEBUG_UART_VIRT  #endif  	.endm  	.macro	senduart, rd, rx -#ifdef CONFIG_MSM_HAS_DEBUG_UART_HS +#ifdef CONFIG_DEBUG_QCOM_UARTDM  	@ Write the 1 character to UARTDM_TF  	str	\rd, [\rx, #0x70]  #else @@ -63,7 +32,7 @@  	.endm  	.macro	waituart, rd, rx -#ifdef CONFIG_MSM_HAS_DEBUG_UART_HS +#ifdef CONFIG_DEBUG_QCOM_UARTDM  	@ check for TX_EMT in UARTDM_SR  	ldr	\rd, [\rx, #0x08]  	tst	\rd, #0x08 diff --git a/arch/arm/include/debug/pl01x.S b/arch/arm/include/debug/pl01x.S index 37c6895b87e..92ef808a233 100644 --- a/arch/arm/include/debug/pl01x.S +++ b/arch/arm/include/debug/pl01x.S @@ -25,12 +25,14 @@  		.macro	waituart,rd,rx  1001:		ldr	\rd, [\rx, #UART01x_FR] + ARM_BE8(	rev	\rd, \rd )  		tst	\rd, #UART01x_FR_TXFF  		bne	1001b  		.endm  		.macro	busyuart,rd,rx  1001:		ldr	\rd, [\rx, #UART01x_FR] + ARM_BE8(	rev	\rd, \rd )  		tst	\rd, #UART01x_FR_BUSY  		bne	1001b  		.endm diff --git a/arch/arm/include/debug/s3c24xx.S b/arch/arm/include/debug/s3c24xx.S new file mode 100644 index 00000000000..b1f54dc4888 --- /dev/null +++ b/arch/arm/include/debug/s3c24xx.S @@ -0,0 +1,46 @@ +/* arch/arm/mach-s3c2410/include/mach/debug-macro.S + * + * Debugging macro include header + * + *  Copyright (C) 1994-1999 Russell King + *  Copyright (C) 2005 Simtec Electronics + * + *  Moved from linux/arch/arm/kernel/debug.S by Ben Dooks + * + * 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. +*/ + +#include <linux/serial_s3c.h> + +#define S3C2410_UART1_OFF (0x4000) + +	.macro addruart, rp, rv, tmp +		ldr	\rp, = CONFIG_DEBUG_UART_PHYS +		ldr	\rv, = CONFIG_DEBUG_UART_VIRT +	.endm + +	.macro  fifo_full_s3c2410 rd, rx +		ldr	\rd, [\rx, # S3C2410_UFSTAT] +		tst	\rd, #S3C2410_UFSTAT_TXFULL +	.endm + +	.macro fifo_level_s3c2410 rd, rx +		ldr	\rd, [\rx, # S3C2410_UFSTAT] +		and	\rd, \rd, #S3C2410_UFSTAT_TXMASK +	.endm + +/* Select the correct implementation depending on the configuration. The + * S3C2440 will get selected by default, as these are the most widely + * used variants of these +*/ + +#if defined(CONFIG_DEBUG_S3C2410_UART) +#define fifo_full  fifo_full_s3c2410 +#define fifo_level fifo_level_s3c2410 +#endif + +/* include the reset of the code which will do the work */ + +#include <debug/samsung.S> diff --git a/arch/arm/include/debug/samsung.S b/arch/arm/include/debug/samsung.S index f3a9cff6d5d..8d8d922e5e4 100644 --- a/arch/arm/include/debug/samsung.S +++ b/arch/arm/include/debug/samsung.S @@ -9,7 +9,7 @@   * published by the Free Software Foundation.  */ -#include <plat/regs-serial.h> +#include <linux/serial_s3c.h>  /* The S5PV210/S5PC110 implementations are as belows. */ diff --git a/arch/arm/include/debug/tegra.S b/arch/arm/include/debug/tegra.S index be6a720dd18..3bc80599c02 100644 --- a/arch/arm/include/debug/tegra.S +++ b/arch/arm/include/debug/tegra.S @@ -46,15 +46,14 @@  #define TEGRA_APB_MISC_GP_HIDREV	(TEGRA_APB_MISC_BASE + 0x804)  /* - * Must be 1MB-aligned since a 1MB mapping is used early on. + * Must be section-aligned since a section mapping is used early on.   * Must not overlap with regions in mach-tegra/io.c:tegra_io_desc[].   */ -#define UART_VIRTUAL_BASE		0xfe100000 +#define UART_VIRTUAL_BASE		0xfe800000  #define checkuart(rp, rv, lhu, bit, uart) \  		/* Load address of CLK_RST register */ \ -		movw	rp, #TEGRA_CLK_RST_DEVICES_##lhu & 0xffff ; \ -		movt	rp, #TEGRA_CLK_RST_DEVICES_##lhu >> 16 ; \ +		ldr	rp, =TEGRA_CLK_RST_DEVICES_##lhu ; \  		/* Load value from CLK_RST register */ \  		ldr	rp, [rp, #0] ; \  		/* Test UART's reset bit */ \ @@ -62,8 +61,7 @@  		/* If set, can't use UART; jump to save no UART */ \  		bne	90f ; \  		/* Load address of CLK_OUT_ENB register */ \ -		movw	rp, #TEGRA_CLK_OUT_ENB_##lhu & 0xffff ; \ -		movt	rp, #TEGRA_CLK_OUT_ENB_##lhu >> 16 ; \ +		ldr	rp, =TEGRA_CLK_OUT_ENB_##lhu ; \  		/* Load value from CLK_OUT_ENB register */ \  		ldr	rp, [rp, #0] ; \  		/* Test UART's clock enable bit */ \ @@ -71,8 +69,7 @@  		/* If clear, can't use UART; jump to save no UART */ \  		beq	90f ; \  		/* Passed all tests, load address of UART registers */ \ -		movw	rp, #TEGRA_UART##uart##_BASE & 0xffff ; \ -		movt	rp, #TEGRA_UART##uart##_BASE >> 16 ; \ +		ldr	rp, =TEGRA_UART##uart##_BASE ; \  		/* Jump to save UART address */ \  		b 91f @@ -90,15 +87,16 @@  #ifdef CONFIG_TEGRA_DEBUG_UART_AUTO_ODMDATA  		/* Check ODMDATA */ -10:		movw	\rp, #TEGRA_PMC_SCRATCH20 & 0xffff -		movt	\rp, #TEGRA_PMC_SCRATCH20 >> 16 +10:		ldr	\rp, =TEGRA_PMC_SCRATCH20  		ldr	\rp, [\rp, #0]		@ Load PMC_SCRATCH20 -		ubfx	\rv, \rp, #18, #2	@ 19:18 are console type +		lsr	\rv, \rp, #18		@ 19:18 are console type +		and	\rv, \rv, #3  		cmp	\rv, #2			@ 2 and 3 mean DCC, UART  		beq	11f			@ some boards swap the meaning  		cmp	\rv, #3			@ so accept either  		bne	90f -11:		ubfx	\rv, \rp, #15, #3	@ 17:15 are UART ID +11:		lsr	\rv, \rp, #15		@ 17:15 are UART ID +		and	\rv, #7	  		cmp	\rv, #0			@ UART 0?  		beq	20f  		cmp	\rv, #1			@ UART 1? @@ -156,28 +154,6 @@  92:		and	\rv, \rp, #0xffffff	@ offset within 1MB section  		add	\rv, \rv, #UART_VIRTUAL_BASE  		str	\rv, [\tmp, #8]		@ Store in tegra_uart_virt -		movw	\rv, #TEGRA_APB_MISC_GP_HIDREV & 0xffff -		movt	\rv, #TEGRA_APB_MISC_GP_HIDREV >> 16 -		ldr	\rv, [\rv, #0]		@ Load HIDREV -		ubfx	\rv, \rv, #8, #8	@ 15:8 are SoC version -		cmp	\rv, #0x20		@ Tegra20? -		moveq	\rv, #0x75		@ Tegra20 divisor -		movne	\rv, #0xdd		@ Tegra30 divisor -		str	\rv, [\tmp, #12]	@ Save divisor to scratch -		/* uart[UART_LCR] = UART_LCR_WLEN8 | UART_LCR_DLAB; */ -		mov	\rv, #UART_LCR_WLEN8 | UART_LCR_DLAB -		str	\rv, [\rp, #UART_LCR << UART_SHIFT] -		/* uart[UART_DLL] = div & 0xff; */ -		ldr	\rv, [\tmp, #12] -		and	\rv, \rv, #0xff -		str	\rv, [\rp, #UART_DLL << UART_SHIFT] -		/* uart[UART_DLM] = div >> 8; */ -		ldr	\rv, [\tmp, #12] -		lsr	\rv, \rv, #8 -		str	\rv, [\rp, #UART_DLM << UART_SHIFT] -		/* uart[UART_LCR] = UART_LCR_WLEN8; */ -		mov	\rv, #UART_LCR_WLEN8 -		str	\rv, [\rp, #UART_LCR << UART_SHIFT]  		b	100f  		.align @@ -205,8 +181,8 @@  		cmp	\rx, #0  		beq	1002f  1001:		ldrb	\rd, [\rx, #UART_LSR << UART_SHIFT] -		and	\rd, \rd, #UART_LSR_TEMT | UART_LSR_THRE -		teq	\rd, #UART_LSR_TEMT | UART_LSR_THRE +		and	\rd, \rd, #UART_LSR_THRE +		teq	\rd, #UART_LSR_THRE  		bne	1001b  1002:  		.endm @@ -225,7 +201,7 @@  /*   * Storage for the state maintained by the macros above.   * - * In the kernel proper, this data is located in arch/arm/mach-tegra/common.c. + * In the kernel proper, this data is located in arch/arm/mach-tegra/tegra.c.   * That's because this header is included from multiple files, and we only   * want a single copy of the data. In particular, the UART probing code above   * assumes it's running using physical addresses. This is true when this file @@ -247,6 +223,4 @@ tegra_uart_config:  	.word 0  	/* Debug UART virtual address */  	.word 0 -	/* Scratch space for debug macro */ -	.word 0  #endif diff --git a/arch/arm/include/debug/vf.S b/arch/arm/include/debug/vf.S new file mode 100644 index 00000000000..b88933849a1 --- /dev/null +++ b/arch/arm/include/debug/vf.S @@ -0,0 +1,37 @@ +/* + * Copyright 2013 Freescale Semiconductor, Inc. + * + * 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. + * + */ + +#define VF_UART0_BASE_ADDR	0x40027000 +#define VF_UART1_BASE_ADDR	0x40028000 +#define VF_UART2_BASE_ADDR	0x40029000 +#define VF_UART3_BASE_ADDR	0x4002a000 +#define VF_UART_BASE_ADDR(n)	VF_UART##n##_BASE_ADDR +#define VF_UART_BASE(n)		VF_UART_BASE_ADDR(n) +#define VF_UART_PHYSICAL_BASE	VF_UART_BASE(CONFIG_DEBUG_VF_UART_PORT) + +#define VF_UART_VIRTUAL_BASE	0xfe000000 + +	.macro	addruart, rp, rv, tmp +	ldr	\rp, =VF_UART_PHYSICAL_BASE 	@ physical +	and	\rv, \rp, #0xffffff		@ offset within 16MB section +	add	\rv, \rv, #VF_UART_VIRTUAL_BASE +	.endm + +	.macro	senduart, rd, rx +	strb	\rd, [\rx, #0x7]	@ Data Register +	.endm + +	.macro	busyuart, rd, rx +1001:	ldrb	\rd, [\rx, #0x4]	@ Status Register 1 +	tst	\rd, #1 << 6		@ TC +	beq	1001b			@ wait until transmit done +	.endm + +	.macro	waituart,rd,rx +	.endm diff --git a/arch/arm/include/debug/zynq.S b/arch/arm/include/debug/zynq.S index f9aa9740a73..bd13dedbdef 100644 --- a/arch/arm/include/debug/zynq.S +++ b/arch/arm/include/debug/zynq.S @@ -20,18 +20,18 @@  #define UART_SR_TXEMPTY		0x00000008	/* TX FIFO empty */  #define UART0_PHYS		0xE0000000 +#define UART0_VIRT		0xF0000000  #define UART1_PHYS		0xE0001000 -#define UART_SIZE		SZ_4K -#define UART_VIRT		0xF0001000 +#define UART1_VIRT		0xF0001000  #if IS_ENABLED(CONFIG_DEBUG_ZYNQ_UART1)  # define LL_UART_PADDR		UART1_PHYS +# define LL_UART_VADDR		UART1_VIRT  #else  # define LL_UART_PADDR		UART0_PHYS +# define LL_UART_VADDR		UART0_VIRT  #endif -#define LL_UART_VADDR		UART_VIRT -  		.macro	addruart, rp, rv, tmp  		ldr	\rp, =LL_UART_PADDR	@ physical  		ldr	\rv, =LL_UART_VADDR	@ virtual @@ -42,10 +42,15 @@  		.endm  		.macro	waituart,rd,rx +1001:		ldr	\rd, [\rx, #UART_SR_OFFSET] +ARM_BE8(	rev	\rd, \rd ) +		tst	\rd, #UART_SR_TXEMPTY +		beq	1001b  		.endm  		.macro	busyuart,rd,rx  1002:		ldr	\rd, [\rx, #UART_SR_OFFSET]	@ get status register +ARM_BE8(	rev	\rd, \rd )  		tst	\rd, #UART_SR_TXFULL		@  		bne	1002b			@ wait if FIFO is full  		.endm  | 
