1 /*
2  *  arch/arm/mach-mxs/include/mach/uncompress.h
3  *
4  *  Copyright (C) 1999 ARM Limited
5  *  Copyright (C) Shane Nay (shane@minirl.com)
6  *  Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  */
18 #ifndef __MACH_MXS_UNCOMPRESS_H__
19 #define __MACH_MXS_UNCOMPRESS_H__
20 
21 #include <asm/mach-types.h>
22 
23 static unsigned long mxs_duart_base;
24 
25 #define MXS_DUART(x)	(*(volatile unsigned long *)(mxs_duart_base + (x)))
26 
27 #define MXS_DUART_DR		0x00
28 #define MXS_DUART_FR		0x18
29 #define MXS_DUART_FR_TXFE	(1 << 7)
30 #define MXS_DUART_CR		0x30
31 #define MXS_DUART_CR_UARTEN	(1 << 0)
32 
33 /*
34  * The following code assumes the serial port has already been
35  * initialized by the bootloader. If it's not, the output is
36  * simply discarded.
37  */
38 
putc(int ch)39 static void putc(int ch)
40 {
41 	if (!mxs_duart_base)
42 		return;
43 	if (!(MXS_DUART(MXS_DUART_CR) & MXS_DUART_CR_UARTEN))
44 		return;
45 
46 	while (!(MXS_DUART(MXS_DUART_FR) & MXS_DUART_FR_TXFE))
47 		barrier();
48 
49 	MXS_DUART(MXS_DUART_DR) = ch;
50 }
51 
flush(void)52 static inline void flush(void)
53 {
54 }
55 
56 #define MX23_DUART_BASE_ADDR	0x80070000
57 #define MX28_DUART_BASE_ADDR	0x80074000
58 
__arch_decomp_setup(unsigned long arch_id)59 static inline void __arch_decomp_setup(unsigned long arch_id)
60 {
61 	switch (arch_id) {
62 	case MACH_TYPE_MX23EVK:
63 		mxs_duart_base = MX23_DUART_BASE_ADDR;
64 		break;
65 	case MACH_TYPE_MX28EVK:
66 	case MACH_TYPE_TX28:
67 		mxs_duart_base = MX28_DUART_BASE_ADDR;
68 		break;
69 	default:
70 		break;
71 	}
72 }
73 
74 #define arch_decomp_setup()	__arch_decomp_setup(arch_id)
75 #define arch_decomp_wdog()
76 
77 #endif /* __MACH_MXS_UNCOMPRESS_H__ */
78