Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 1 | /* |
| 2 | * arch/arm/plat-mxc/include/mach/uncompress.h |
| 3 | * |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 4 | * Copyright (C) 1999 ARM Limited |
| 5 | * Copyright (C) Shane Nay (shane@minirl.com) |
| 6 | * |
| 7 | * This program is free software; you can redistribute it and/or modify |
| 8 | * it under the terms of the GNU General Public License as published by |
| 9 | * the Free Software Foundation; either version 2 of the License, or |
| 10 | * (at your option) any later version. |
| 11 | * |
| 12 | * This program is distributed in the hope that it will be useful, |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | * GNU General Public License for more details. |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 16 | */ |
| 17 | #ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__ |
| 18 | #define __ASM_ARCH_MXC_UNCOMPRESS_H__ |
| 19 | |
| 20 | #define __MXC_BOOT_UNCOMPRESS |
| 21 | |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 22 | #include <asm/mach-types.h> |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 23 | |
Nicolas Pitre | 8ea0de4 | 2011-04-28 17:00:17 -0400 | [diff] [blame] | 24 | unsigned long uart_base; |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 25 | |
| 26 | #define UART(x) (*(volatile unsigned long *)(uart_base + (x))) |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 27 | |
| 28 | #define USR2 0x98 |
| 29 | #define USR2_TXFE (1<<14) |
| 30 | #define TXR 0x40 |
| 31 | #define UCR1 0x80 |
| 32 | #define UCR1_UARTEN 1 |
| 33 | |
| 34 | /* |
| 35 | * The following code assumes the serial port has already been |
| 36 | * initialized by the bootloader. We search for the first enabled |
| 37 | * port in the most probable order. If you didn't setup a port in |
| 38 | * your bootloader then nothing will appear (which might be desired). |
| 39 | * |
| 40 | * This does not append a newline |
| 41 | */ |
| 42 | |
| 43 | static void putc(int ch) |
| 44 | { |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 45 | if (!uart_base) |
| 46 | return; |
| 47 | if (!(UART(UCR1) & UCR1_UARTEN)) |
| 48 | return; |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 49 | |
| 50 | while (!(UART(USR2) & USR2_TXFE)) |
| 51 | barrier(); |
| 52 | |
| 53 | UART(TXR) = ch; |
| 54 | } |
| 55 | |
Tony Lindgren | b53e9b5 | 2010-01-14 20:36:55 +0100 | [diff] [blame] | 56 | static inline void flush(void) |
| 57 | { |
| 58 | } |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 59 | |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 60 | #define MX1_UART1_BASE_ADDR 0x00206000 |
Sascha Hauer | 8c25c36 | 2009-06-04 11:32:12 +0200 | [diff] [blame] | 61 | #define MX25_UART1_BASE_ADDR 0x43f90000 |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 62 | #define MX2X_UART1_BASE_ADDR 0x1000a000 |
| 63 | #define MX3X_UART1_BASE_ADDR 0x43F90000 |
Dmitriy Taychenachev | fd6ac7b | 2009-07-31 20:29:22 +0900 | [diff] [blame] | 64 | #define MX3X_UART2_BASE_ADDR 0x43F94000 |
Denis 'GNUtoo' Carikli | ea7ee4c | 2011-02-18 22:22:23 +0100 | [diff] [blame] | 65 | #define MX3X_UART5_BASE_ADDR 0x43FB4000 |
Sascha Hauer | 48fae65 | 2010-03-18 16:55:45 +0100 | [diff] [blame] | 66 | #define MX51_UART1_BASE_ADDR 0x73fbc000 |
Richard Zhao | d3d4b60 | 2010-12-30 19:25:06 +0800 | [diff] [blame] | 67 | #define MX50_UART1_BASE_ADDR 0x53fbc000 |
Yong Shen | a58154d1 | 2011-01-04 14:22:56 +0800 | [diff] [blame] | 68 | #define MX53_UART1_BASE_ADDR 0x53fbc000 |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 69 | |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 70 | static __inline__ void __arch_decomp_setup(unsigned long arch_id) |
| 71 | { |
| 72 | switch (arch_id) { |
| 73 | case MACH_TYPE_MX1ADS: |
| 74 | case MACH_TYPE_SCB9328: |
| 75 | uart_base = MX1_UART1_BASE_ADDR; |
| 76 | break; |
Sascha Hauer | 635baf6 | 2009-06-04 11:32:46 +0200 | [diff] [blame] | 77 | case MACH_TYPE_MX25_3DS: |
| 78 | uart_base = MX25_UART1_BASE_ADDR; |
| 79 | break; |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 80 | case MACH_TYPE_IMX27LITE: |
| 81 | case MACH_TYPE_MX27_3DS: |
| 82 | case MACH_TYPE_MX27ADS: |
| 83 | case MACH_TYPE_PCM038: |
| 84 | case MACH_TYPE_MX21ADS: |
Sascha Hauer | 34499a7 | 2009-11-12 11:29:43 +0100 | [diff] [blame] | 85 | case MACH_TYPE_PCA100: |
Alan Carvalho de Assis | 143a179 | 2009-11-25 15:24:50 -0200 | [diff] [blame] | 86 | case MACH_TYPE_MXT_TD60: |
Fabio Estevam | 9c2c358 | 2011-01-24 16:55:02 -0200 | [diff] [blame] | 87 | case MACH_TYPE_IMX27IPCAM: |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 88 | uart_base = MX2X_UART1_BASE_ADDR; |
| 89 | break; |
| 90 | case MACH_TYPE_MX31LITE: |
| 91 | case MACH_TYPE_ARMADILLO5X0: |
| 92 | case MACH_TYPE_MX31MOBOARD: |
| 93 | case MACH_TYPE_QONG: |
| 94 | case MACH_TYPE_MX31_3DS: |
| 95 | case MACH_TYPE_PCM037: |
| 96 | case MACH_TYPE_MX31ADS: |
| 97 | case MACH_TYPE_MX35_3DS: |
| 98 | case MACH_TYPE_PCM043: |
Daniel Mack | 115b40c | 2009-10-26 11:55:59 +0100 | [diff] [blame] | 99 | case MACH_TYPE_LILLY1131: |
Fabio Estevam | c6e7695 | 2011-01-21 16:03:57 -0200 | [diff] [blame] | 100 | case MACH_TYPE_VPR200: |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 101 | uart_base = MX3X_UART1_BASE_ADDR; |
| 102 | break; |
Dmitriy Taychenachev | fd6ac7b | 2009-07-31 20:29:22 +0900 | [diff] [blame] | 103 | case MACH_TYPE_MAGX_ZN5: |
| 104 | uart_base = MX3X_UART2_BASE_ADDR; |
| 105 | break; |
Denis 'GNUtoo' Carikli | ea7ee4c | 2011-02-18 22:22:23 +0100 | [diff] [blame] | 106 | case MACH_TYPE_BUG: |
| 107 | uart_base = MX3X_UART5_BASE_ADDR; |
| 108 | break; |
Sascha Hauer | 48fae65 | 2010-03-18 16:55:45 +0100 | [diff] [blame] | 109 | case MACH_TYPE_MX51_BABBAGE: |
Eric BĂ©nard | 70b1726 | 2010-10-12 16:12:36 +0200 | [diff] [blame] | 110 | case MACH_TYPE_EUKREA_CPUIMX51SD: |
Fabio Estevam | c6e7695 | 2011-01-21 16:03:57 -0200 | [diff] [blame] | 111 | case MACH_TYPE_MX51_3DS: |
Sascha Hauer | 48fae65 | 2010-03-18 16:55:45 +0100 | [diff] [blame] | 112 | uart_base = MX51_UART1_BASE_ADDR; |
| 113 | break; |
Richard Zhao | d3d4b60 | 2010-12-30 19:25:06 +0800 | [diff] [blame] | 114 | case MACH_TYPE_MX50_RDP: |
| 115 | uart_base = MX50_UART1_BASE_ADDR; |
| 116 | break; |
Yong Shen | a58154d1 | 2011-01-04 14:22:56 +0800 | [diff] [blame] | 117 | case MACH_TYPE_MX53_EVK: |
Richard Zhao | c4e942b | 2011-02-18 12:36:15 +0800 | [diff] [blame] | 118 | case MACH_TYPE_MX53_LOCO: |
Frank Li | 646e610 | 2011-02-21 14:28:10 +0800 | [diff] [blame] | 119 | case MACH_TYPE_MX53_SMD: |
Andre Silva | bd89782 | 2011-06-10 13:08:14 -0300 | [diff] [blame] | 120 | case MACH_TYPE_MX53_ARD: |
Yong Shen | a58154d1 | 2011-01-04 14:22:56 +0800 | [diff] [blame] | 121 | uart_base = MX53_UART1_BASE_ADDR; |
| 122 | break; |
Sascha Hauer | d30c74a | 2009-06-04 13:29:57 +0200 | [diff] [blame] | 123 | default: |
| 124 | break; |
| 125 | } |
| 126 | } |
| 127 | |
| 128 | #define arch_decomp_setup() __arch_decomp_setup(arch_id) |
Russell King | a09e64f | 2008-08-05 16:14:15 +0100 | [diff] [blame] | 129 | #define arch_decomp_wdog() |
| 130 | |
| 131 | #endif /* __ASM_ARCH_MXC_UNCOMPRESS_H__ */ |