1 /* 2 * arch/arm/plat-mxc/include/mach/uncompress.h 3 * 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. 16 */ 17 #ifndef __ASM_ARCH_MXC_UNCOMPRESS_H__ 18 #define __ASM_ARCH_MXC_UNCOMPRESS_H__ 19 20 #define __MXC_BOOT_UNCOMPRESS 21 22 #include <asm/mach-types.h> 23 24 static unsigned long uart_base; 25 26 #define UART(x) (*(volatile unsigned long *)(uart_base + (x))) 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 putc(int ch)43static void putc(int ch) 44 { 45 if (!uart_base) 46 return; 47 if (!(UART(UCR1) & UCR1_UARTEN)) 48 return; 49 50 while (!(UART(USR2) & USR2_TXFE)) 51 barrier(); 52 53 UART(TXR) = ch; 54 } 55 flush(void)56static inline void flush(void) 57 { 58 } 59 60 #define MX1_UART1_BASE_ADDR 0x00206000 61 #define MX25_UART1_BASE_ADDR 0x43f90000 62 #define MX2X_UART1_BASE_ADDR 0x1000a000 63 #define MX3X_UART1_BASE_ADDR 0x43F90000 64 #define MX3X_UART2_BASE_ADDR 0x43F94000 65 #define MX3X_UART5_BASE_ADDR 0x43FB4000 66 #define MX51_UART1_BASE_ADDR 0x73fbc000 67 #define MX50_UART1_BASE_ADDR 0x53fbc000 68 #define MX53_UART1_BASE_ADDR 0x53fbc000 69 __arch_decomp_setup(unsigned long arch_id)70static __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; 77 case MACH_TYPE_MX25_3DS: 78 uart_base = MX25_UART1_BASE_ADDR; 79 break; 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: 85 case MACH_TYPE_PCA100: 86 case MACH_TYPE_MXT_TD60: 87 case MACH_TYPE_IMX27IPCAM: 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: 99 case MACH_TYPE_LILLY1131: 100 case MACH_TYPE_VPR200: 101 uart_base = MX3X_UART1_BASE_ADDR; 102 break; 103 case MACH_TYPE_MAGX_ZN5: 104 uart_base = MX3X_UART2_BASE_ADDR; 105 break; 106 case MACH_TYPE_BUG: 107 uart_base = MX3X_UART5_BASE_ADDR; 108 break; 109 case MACH_TYPE_MX51_BABBAGE: 110 case MACH_TYPE_EUKREA_CPUIMX51SD: 111 case MACH_TYPE_MX51_3DS: 112 uart_base = MX51_UART1_BASE_ADDR; 113 break; 114 case MACH_TYPE_MX50_RDP: 115 uart_base = MX50_UART1_BASE_ADDR; 116 break; 117 case MACH_TYPE_MX53_EVK: 118 case MACH_TYPE_MX53_LOCO: 119 case MACH_TYPE_MX53_SMD: 120 uart_base = MX53_UART1_BASE_ADDR; 121 break; 122 default: 123 break; 124 } 125 } 126 127 #define arch_decomp_setup() __arch_decomp_setup(arch_id) 128 #define arch_decomp_wdog() 129 130 #endif /* __ASM_ARCH_MXC_UNCOMPRESS_H__ */ 131