home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm / arch-ep93xx / uncompress.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  86 lines

  1. /*
  2.  * linux/include/asm-arm/arch-ep93xx/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 <asm/arch/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()
  86.