platform.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. /*
  24. * The expansion bus on the IXP4xx can be configured for either 16 or
  25. * 32MB windows and the CS offset for each region changes based on the
  26. * current configuration. This means that we cannot simply hardcode
  27. * each offset. ixp4xx_sys_init() looks at the expansion bus configuration
  28. * as setup by the bootloader to determine our window size.
  29. */
  30. extern unsigned long ixp4xx_exp_bus_size;
  31. #define IXP4XX_EXP_BUS_BASE(region)\
  32. (IXP4XX_EXP_BUS_BASE_PHYS + ((region) * ixp4xx_exp_bus_size))
  33. #define IXP4XX_FLASH_WRITABLE (0x2)
  34. #define IXP4XX_FLASH_DEFAULT (0xbcd23c40)
  35. #define IXP4XX_FLASH_WRITE (0xbcd23c42)
  36. /*
  37. * Clock Speed Definitions.
  38. */
  39. #define IXP4XX_PERIPHERAL_BUS_CLOCK (66) /* 66Mhzi APB BUS */
  40. #define IXP4XX_UART_XTAL 14745600
  41. /*
  42. * The IXP4xx chips do not have an I2C unit, so GPIO lines are just
  43. * used to
  44. * Used as platform_data to provide GPIO pin information to the ixp42x
  45. * I2C driver.
  46. */
  47. struct ixp4xx_i2c_pins {
  48. unsigned long sda_pin;
  49. unsigned long scl_pin;
  50. };
  51. struct sys_timer;
  52. /*
  53. * Functions used by platform-level setup code
  54. */
  55. extern void ixp4xx_map_io(void);
  56. extern void ixp4xx_init_irq(void);
  57. extern void ixp4xx_sys_init(void);
  58. extern struct sys_timer ixp4xx_timer;
  59. extern void ixp4xx_pci_preinit(void);
  60. struct pci_sys_data;
  61. extern int ixp4xx_setup(int nr, struct pci_sys_data *sys);
  62. extern struct pci_bus *ixp4xx_scan_bus(int nr, struct pci_sys_data *sys);
  63. /*
  64. * GPIO-functions
  65. */
  66. /*
  67. * The following converted to the real HW bits the gpio_line_config
  68. */
  69. /* GPIO pin types */
  70. #define IXP4XX_GPIO_OUT 0x1
  71. #define IXP4XX_GPIO_IN 0x2
  72. /* GPIO signal types */
  73. #define IXP4XX_GPIO_LOW 0
  74. #define IXP4XX_GPIO_HIGH 1
  75. /* GPIO Clocks */
  76. #define IXP4XX_GPIO_CLK_0 14
  77. #define IXP4XX_GPIO_CLK_1 15
  78. static inline void gpio_line_config(u8 line, u32 direction)
  79. {
  80. if (direction == IXP4XX_GPIO_IN)
  81. *IXP4XX_GPIO_GPOER |= (1 << line);
  82. else
  83. *IXP4XX_GPIO_GPOER &= ~(1 << line);
  84. }
  85. static inline void gpio_line_get(u8 line, int *value)
  86. {
  87. *value = (*IXP4XX_GPIO_GPINR >> line) & 0x1;
  88. }
  89. static inline void gpio_line_set(u8 line, int value)
  90. {
  91. if (value == IXP4XX_GPIO_HIGH)
  92. *IXP4XX_GPIO_GPOUTR |= (1 << line);
  93. else if (value == IXP4XX_GPIO_LOW)
  94. *IXP4XX_GPIO_GPOUTR &= ~(1 << line);
  95. }
  96. #endif // __ASSEMBLY__