-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: mxs: Add low-level debug UART support
- DEBUG_LL support, which is incompatible with multi-soc MXS image because of different DUART base address on MX23 and MX28 - uncompress message support Signed-off-by: Shawn Guo <shawn.guo@freescale.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
- Loading branch information
Shawn Guo
authored and
Uwe Kleine-König
committed
Dec 20, 2010
1 parent
289569f
commit 41fa75b
Showing
2 changed files
with
114 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* arch/arm/mach-mxs/include/mach/debug-macro.S | ||
* | ||
* Debugging macro include header | ||
* | ||
* Copyright (C) 1994-1999 Russell King | ||
* 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 <mach/mx23.h> | ||
#include <mach/mx28.h> | ||
|
||
#ifdef CONFIG_SOC_IMX23 | ||
#ifdef UART_PADDR | ||
#error "CONFIG_DEBUG_LL is incompatible with multiple archs" | ||
#endif | ||
#define UART_PADDR MX23_DUART_BASE_ADDR | ||
#endif | ||
|
||
#ifdef CONFIG_SOC_IMX28 | ||
#ifdef UART_PADDR | ||
#error "CONFIG_DEBUG_LL is incompatible with multiple archs" | ||
#endif | ||
#define UART_PADDR MX28_DUART_BASE_ADDR | ||
#endif | ||
|
||
#define UART_VADDR MXS_IO_ADDRESS(UART_PADDR) | ||
|
||
.macro addruart, rp, rv | ||
ldr \rp, =UART_PADDR @ physical | ||
ldr \rv, =UART_VADDR @ virtual | ||
.endm | ||
|
||
#include <asm/hardware/debug-pl01x.S> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* arch/arm/mach-mxs/include/mach/uncompress.h | ||
* | ||
* Copyright (C) 1999 ARM Limited | ||
* Copyright (C) Shane Nay (shane@minirl.com) | ||
* Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation; either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
*/ | ||
#ifndef __MACH_MXS_UNCOMPRESS_H__ | ||
#define __MACH_MXS_UNCOMPRESS_H__ | ||
|
||
#include <asm/mach-types.h> | ||
|
||
static unsigned long mxs_duart_base; | ||
|
||
#define MXS_DUART(x) (*(volatile unsigned long *)(mxs_duart_base + (x))) | ||
|
||
#define MXS_DUART_DR 0x00 | ||
#define MXS_DUART_FR 0x18 | ||
#define MXS_DUART_FR_TXFE (1 << 7) | ||
#define MXS_DUART_CR 0x30 | ||
#define MXS_DUART_CR_UARTEN (1 << 0) | ||
|
||
/* | ||
* The following code assumes the serial port has already been | ||
* initialized by the bootloader. If it's not, the output is | ||
* simply discarded. | ||
*/ | ||
|
||
static void putc(int ch) | ||
{ | ||
if (!mxs_duart_base) | ||
return; | ||
if (!(MXS_DUART(MXS_DUART_CR) & MXS_DUART_CR_UARTEN)) | ||
return; | ||
|
||
while (!(MXS_DUART(MXS_DUART_FR) & MXS_DUART_FR_TXFE)) | ||
barrier(); | ||
|
||
MXS_DUART(MXS_DUART_DR) = ch; | ||
} | ||
|
||
static inline void flush(void) | ||
{ | ||
} | ||
|
||
#define MX23_DUART_BASE_ADDR 0x80070000 | ||
#define MX28_DUART_BASE_ADDR 0x80074000 | ||
|
||
static inline void __arch_decomp_setup(unsigned long arch_id) | ||
{ | ||
switch (arch_id) { | ||
case MACH_TYPE_MX23EVK: | ||
mxs_duart_base = MX23_DUART_BASE_ADDR; | ||
break; | ||
case MACH_TYPE_MX28EVK: | ||
mxs_duart_base = MX28_DUART_BASE_ADDR; | ||
break; | ||
default: | ||
break; | ||
} | ||
} | ||
|
||
#define arch_decomp_setup() __arch_decomp_setup(arch_id) | ||
#define arch_decomp_wdog() | ||
|
||
#endif /* __MACH_MXS_UNCOMPRESS_H__ */ |