diff options
Diffstat (limited to 'arch/arm/mach-ep93xx/include/mach/uncompress.h')
-rw-r--r-- | arch/arm/mach-ep93xx/include/mach/uncompress.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/arch/arm/mach-ep93xx/include/mach/uncompress.h b/arch/arm/mach-ep93xx/include/mach/uncompress.h new file mode 100644 index 000000000000..1fd2f17de325 --- /dev/null +++ b/arch/arm/mach-ep93xx/include/mach/uncompress.h | |||
@@ -0,0 +1,85 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-ep93xx/include/mach/uncompress.h | ||
3 | * | ||
4 | * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or (at | ||
9 | * your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <mach/ep93xx-regs.h> | ||
13 | |||
14 | static unsigned char __raw_readb(unsigned int ptr) | ||
15 | { | ||
16 | return *((volatile unsigned char *)ptr); | ||
17 | } | ||
18 | |||
19 | static unsigned int __raw_readl(unsigned int ptr) | ||
20 | { | ||
21 | return *((volatile unsigned int *)ptr); | ||
22 | } | ||
23 | |||
24 | static void __raw_writeb(unsigned char value, unsigned int ptr) | ||
25 | { | ||
26 | *((volatile unsigned char *)ptr) = value; | ||
27 | } | ||
28 | |||
29 | static void __raw_writel(unsigned int value, unsigned int ptr) | ||
30 | { | ||
31 | *((volatile unsigned int *)ptr) = value; | ||
32 | } | ||
33 | |||
34 | |||
35 | #define PHYS_UART1_DATA 0x808c0000 | ||
36 | #define PHYS_UART1_FLAG 0x808c0018 | ||
37 | #define UART1_FLAG_TXFF 0x20 | ||
38 | |||
39 | static inline void putc(int c) | ||
40 | { | ||
41 | int i; | ||
42 | |||
43 | for (i = 0; i < 1000; i++) { | ||
44 | /* Transmit fifo not full? */ | ||
45 | if (!(__raw_readb(PHYS_UART1_FLAG) & UART1_FLAG_TXFF)) | ||
46 | break; | ||
47 | } | ||
48 | |||
49 | __raw_writeb(c, PHYS_UART1_DATA); | ||
50 | } | ||
51 | |||
52 | static inline void flush(void) | ||
53 | { | ||
54 | } | ||
55 | |||
56 | |||
57 | /* | ||
58 | * Some bootloaders don't turn off DMA from the ethernet MAC before | ||
59 | * jumping to linux, which means that we might end up with bits of RX | ||
60 | * status and packet data scribbled over the uncompressed kernel image. | ||
61 | * Work around this by resetting the ethernet MAC before we uncompress. | ||
62 | */ | ||
63 | #define PHYS_ETH_SELF_CTL 0x80010020 | ||
64 | #define ETH_SELF_CTL_RESET 0x00000001 | ||
65 | |||
66 | static void ethernet_reset(void) | ||
67 | { | ||
68 | unsigned int v; | ||
69 | |||
70 | /* Reset the ethernet MAC. */ | ||
71 | v = __raw_readl(PHYS_ETH_SELF_CTL); | ||
72 | __raw_writel(v | ETH_SELF_CTL_RESET, PHYS_ETH_SELF_CTL); | ||
73 | |||
74 | /* Wait for reset to finish. */ | ||
75 | while (__raw_readl(PHYS_ETH_SELF_CTL) & ETH_SELF_CTL_RESET) | ||
76 | ; | ||
77 | } | ||
78 | |||
79 | |||
80 | static void arch_decomp_setup(void) | ||
81 | { | ||
82 | ethernet_reset(); | ||
83 | } | ||
84 | |||
85 | #define arch_decomp_wdog() | ||