2005-04-16 15:20:36 -07:00
/*
* include / asm - arm / arch - ixp4xx / platform . h
*
* Constants and functions that are useful to IXP4xx platform - specific code
* and device drivers .
*
* Copyright ( C ) 2004 MontaVista Software , Inc .
*/
# ifndef __ASM_ARCH_HARDWARE_H__
# error "Do not include this directly, instead #include <asm / hardware.h>"
# endif
# ifndef __ASSEMBLY__
# include <asm/types.h>
# ifndef __ARMEB__
# define REG_OFFSET 0
# else
# define REG_OFFSET 3
# endif
/*
* Expansion bus memory regions
*/
# define IXP4XX_EXP_BUS_BASE_PHYS (0x50000000)
# define IXP4XX_EXP_BUS_CSX_REGION_SIZE (0x01000000)
# define IXP4XX_EXP_BUS_CS0_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x00000000)
# define IXP4XX_EXP_BUS_CS1_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x01000000)
# define IXP4XX_EXP_BUS_CS2_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x02000000)
# define IXP4XX_EXP_BUS_CS3_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x03000000)
# define IXP4XX_EXP_BUS_CS4_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x04000000)
# define IXP4XX_EXP_BUS_CS5_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x05000000)
# define IXP4XX_EXP_BUS_CS6_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x06000000)
# define IXP4XX_EXP_BUS_CS7_BASE_PHYS (IXP4XX_EXP_BUS_BASE_PHYS + 0x07000000)
# define IXP4XX_FLASH_WRITABLE (0x2)
# define IXP4XX_FLASH_DEFAULT (0xbcd23c40)
# define IXP4XX_FLASH_WRITE (0xbcd23c42)
/*
* Clock Speed Definitions .
*/
# define IXP4XX_PERIPHERAL_BUS_CLOCK (66) /* 66Mhzi APB BUS */
# define IXP4XX_UART_XTAL 14745600
/*
* The IXP4xx chips do not have an I2C unit , so GPIO lines are just
* used to
* Used as platform_data to provide GPIO pin information to the ixp42x
* I2C driver .
*/
struct ixp4xx_i2c_pins {
unsigned long sda_pin ;
unsigned long scl_pin ;
} ;
struct sys_timer ;
/*
* Functions used by platform - level setup code
*/
extern void ixp4xx_map_io ( void ) ;
extern void ixp4xx_init_irq ( void ) ;
extern void ixp4xx_sys_init ( void ) ;
extern struct sys_timer ixp4xx_timer ;
extern void ixp4xx_pci_preinit ( void ) ;
struct pci_sys_data ;
extern int ixp4xx_setup ( int nr , struct pci_sys_data * sys ) ;
extern struct pci_bus * ixp4xx_scan_bus ( int nr , struct pci_sys_data * sys ) ;
/*
* GPIO - functions
*/
/*
* The following converted to the real HW bits the gpio_line_config
*/
/* GPIO pin types */
# define IXP4XX_GPIO_OUT 0x1
# define IXP4XX_GPIO_IN 0x2
/* GPIO signal types */
# define IXP4XX_GPIO_LOW 0
# define IXP4XX_GPIO_HIGH 1
/* GPIO Clocks */
# define IXP4XX_GPIO_CLK_0 14
# define IXP4XX_GPIO_CLK_1 15
2005-08-29 22:46:30 +01:00
static inline void gpio_line_config ( u8 line , u32 direction )
{
if ( direction = = IXP4XX_GPIO_OUT )
* IXP4XX_GPIO_GPOER | = ( 1 < < line ) ;
else
* IXP4XX_GPIO_GPOER & = ~ ( 1 < < line ) ;
}
2005-04-16 15:20:36 -07:00
static inline void gpio_line_get ( u8 line , int * value )
{
* value = ( * IXP4XX_GPIO_GPINR > > line ) & 0x1 ;
}
static inline void gpio_line_set ( u8 line , int value )
{
if ( value = = IXP4XX_GPIO_HIGH )
* IXP4XX_GPIO_GPOUTR | = ( 1 < < line ) ;
else if ( value = = IXP4XX_GPIO_LOW )
* IXP4XX_GPIO_GPOUTR & = ~ ( 1 < < line ) ;
}
static inline void gpio_line_isr_clear ( u8 line )
{
* IXP4XX_GPIO_GPISR = ( 1 < < line ) ;
}
# endif // __ASSEMBLY__