Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / arm / mach-mxs / include / mach / uncompress.h
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
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
52 static inline void flush(void)
53 {
54 }
55
56 #define MX23_DUART_BASE_ADDR    0x80070000
57 #define MX28_DUART_BASE_ADDR    0x80074000
58
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                 mxs_duart_base = MX28_DUART_BASE_ADDR;
67                 break;
68         default:
69                 break;
70         }
71 }
72
73 #define arch_decomp_setup()     __arch_decomp_setup(arch_id)
74 #define arch_decomp_wdog()
75
76 #endif /* __MACH_MXS_UNCOMPRESS_H__ */