platform.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*
  2. * include/asm-arm/arch-ixp4xx/platform.h
  3. *
  4. * Constants and functions that are useful to IXP4xx platform-specific code
  5. * and device drivers.
  6. *
  7. * Copyright (C) 2004 MontaVista Software, Inc.
  8. */
  9. #ifndef __ASM_ARCH_HARDWARE_H__
  10. #error "Do not include this directly, instead #include <asm/hardware.h>"
  11. #endif
  12. #ifndef __ASSEMBLY__
  13. #include <asm/types.h>
  14. #ifndef __ARMEB__
  15. #define REG_OFFSET 0
  16. #else
  17. #define REG_OFFSET 3
  18. #endif
  19. /*
  20. * Expansion bus memory regions
  21. */
  22. #define IXP4XX_EXP_BUS_BASE_PHYS (0x50000000)
  23. #define IXP4XX_EXP_BUS_CSX_REGION_SIZE (0x01000000)
  24. #define IXP4XX_EXP_BUS_CS0_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x00000000)
  25. #define IXP4XX_EXP_BUS_CS1_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x01000000)
  26. #define IXP4XX_EXP_BUS_CS2_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x02000000)
  27. #define IXP4XX_EXP_BUS_CS3_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x03000000)
  28. #define IXP4XX_EXP_BUS_CS4_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x04000000)
  29. #define IXP4XX_EXP_BUS_CS5_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x05000000)
  30. #define IXP4XX_EXP_BUS_CS6_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x06000000)
  31. #define IXP4XX_EXP_BUS_CS7_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x07000000)
  32. #define IXP4XX_FLASH_WRITABLE (0x2)
  33. #define IXP4XX_FLASH_DEFAULT (0xbcd23c40)
  34. #define IXP4XX_FLASH_WRITE (0xbcd23c42)
  35. /*
  36. * Clock Speed Definitions.
  37. */
  38. #define IXP4XX_PERIPHERAL_BUS_CLOCK (66) /* 66Mhzi APB BUS */
  39. #define IXP4XX_UART_XTAL 14745600
  40. /*
  41. * The IXP4xx chips do not have an I2C unit, so GPIO lines are just
  42. * used to
  43. * Used as platform_data to provide GPIO pin information to the ixp42x
  44. * I2C driver.
  45. */
  46. struct ixp4xx_i2c_pins {
  47. unsigned long sda_pin;
  48. unsigned long scl_pin;
  49. };
  50. struct sys_timer;
  51. /*
  52. * Functions used by platform-level setup code
  53. */
  54. extern void ixp4xx_map_io(void);
  55. extern void ixp4xx_init_irq(void);
  56. extern void ixp4xx_sys_init(void);
  57. extern struct sys_timer ixp4xx_timer;
  58. extern void ixp4xx_pci_preinit(void);
  59. struct pci_sys_data;
  60. extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
  61. extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
  62. /*
  63. * GPIO-functions
  64. */
  65. /*
  66. * The following converted to the real HW bits the gpio_line_config
  67. */
  68. /* GPIO pin types */
  69. #define IXP4XX_GPIO_OUT 0x1
  70. #define IXP4XX_GPIO_IN 0x2
  71. #define IXP4XX_GPIO_INTSTYLE_MASK 0x7C /* Bits [6:2] define interrupt style */
  72. /*
  73. * GPIO interrupt types.
  74. */
  75. #define IXP4XX_GPIO_ACTIVE_HIGH 0x4 /* Default */
  76. #define IXP4XX_GPIO_ACTIVE_LOW 0x8
  77. #define IXP4XX_GPIO_RISING_EDGE 0x10
  78. #define IXP4XX_GPIO_FALLING_EDGE 0x20
  79. #define IXP4XX_GPIO_TRANSITIONAL 0x40
  80. /* GPIO signal types */
  81. #define IXP4XX_GPIO_LOW 0
  82. #define IXP4XX_GPIO_HIGH 1
  83. /* GPIO Clocks */
  84. #define IXP4XX_GPIO_CLK_0 14
  85. #define IXP4XX_GPIO_CLK_1 15
  86. extern void gpio_line_config(u8 line, u32 style);
  87. static inline void gpio_line_get(u8 line, int *value)
  88. {
  89. *value = (*IXP4XX_GPIO_GPINR >> line) & 0x1;
  90. }
  91. static inline void gpio_line_set(u8 line, int value)
  92. {
  93. if (value == IXP4XX_GPIO_HIGH)
  94. *IXP4XX_GPIO_GPOUTR |= (1 << line);
  95. else if (value == IXP4XX_GPIO_LOW)
  96. *IXP4XX_GPIO_GPOUTR &= ~(1 << line);
  97. }
  98. static inline void gpio_line_isr_clear(u8 line)
  99. {
  100. *IXP4XX_GPIO_GPISR = (1 << line);
  101. }
  102. #endif // __ASSEMBLY__