2005-07-10 22:58:12 +04:00
/*
* linux / arch / arm / mach - omap1 / io . c
*
* OMAP1 I / O mapping code
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# include <linux/module.h>
# include <linux/kernel.h>
# include <linux/init.h>
2008-09-06 15:10:45 +04:00
# include <linux/io.h>
2005-07-10 22:58:12 +04:00
2006-02-09 01:06:45 +03:00
# include <asm/tlb.h>
2005-07-10 22:58:12 +04:00
# include <asm/mach/map.h>
2012-02-24 22:34:34 +04:00
2012-09-19 21:46:56 +04:00
# include <mach/mux.h>
2012-10-03 00:39:28 +04:00
# include <mach/tc.h>
2012-11-30 20:41:50 +04:00
# include <linux/omap-dma.h>
2005-07-10 22:58:12 +04:00
2012-02-24 22:34:34 +04:00
# include "iomap.h"
# include "common.h"
2009-12-09 02:29:38 +03:00
# include "clock.h"
2005-07-10 22:58:12 +04:00
/*
* The machine specific code may provide the extra mapping besides the
* default mapping provided here .
*/
static struct map_desc omap_io_desc [ ] __initdata = {
2005-10-28 18:19:00 +04:00
{
2009-08-28 21:50:37 +04:00
. virtual = OMAP1_IO_VIRT ,
. pfn = __phys_to_pfn ( OMAP1_IO_PHYS ) ,
. length = OMAP1_IO_SIZE ,
2005-10-28 18:19:00 +04:00
. type = MT_DEVICE
}
2005-07-10 22:58:12 +04:00
} ;
2009-09-22 08:58:08 +04:00
# if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
2009-09-22 13:02:58 +04:00
static struct map_desc omap7xx_io_desc [ ] __initdata = {
2005-10-28 18:19:00 +04:00
{
2009-09-22 10:34:13 +04:00
. virtual = OMAP7XX_DSP_BASE ,
. pfn = __phys_to_pfn ( OMAP7XX_DSP_START ) ,
. length = OMAP7XX_DSP_SIZE ,
2005-10-28 18:19:00 +04:00
. type = MT_DEVICE
} , {
2009-09-22 10:34:13 +04:00
. virtual = OMAP7XX_DSPREG_BASE ,
. pfn = __phys_to_pfn ( OMAP7XX_DSPREG_START ) ,
. length = OMAP7XX_DSPREG_SIZE ,
2005-10-28 18:19:00 +04:00
. type = MT_DEVICE
}
2005-07-10 22:58:12 +04:00
} ;
# endif
2005-11-10 17:26:48 +03:00
# ifdef CONFIG_ARCH_OMAP15XX
2005-07-10 22:58:12 +04:00
static struct map_desc omap1510_io_desc [ ] __initdata = {
2005-10-28 18:19:00 +04:00
{
. virtual = OMAP1510_DSP_BASE ,
. pfn = __phys_to_pfn ( OMAP1510_DSP_START ) ,
. length = OMAP1510_DSP_SIZE ,
. type = MT_DEVICE
} , {
. virtual = OMAP1510_DSPREG_BASE ,
. pfn = __phys_to_pfn ( OMAP1510_DSPREG_START ) ,
. length = OMAP1510_DSPREG_SIZE ,
. type = MT_DEVICE
}
2005-07-10 22:58:12 +04:00
} ;
# endif
# if defined(CONFIG_ARCH_OMAP16XX)
2005-09-09 02:07:38 +04:00
static struct map_desc omap16xx_io_desc [ ] __initdata = {
2005-10-28 18:19:00 +04:00
{
. virtual = OMAP16XX_DSP_BASE ,
. pfn = __phys_to_pfn ( OMAP16XX_DSP_START ) ,
. length = OMAP16XX_DSP_SIZE ,
. type = MT_DEVICE
} , {
. virtual = OMAP16XX_DSPREG_BASE ,
. pfn = __phys_to_pfn ( OMAP16XX_DSPREG_START ) ,
. length = OMAP16XX_DSPREG_SIZE ,
. type = MT_DEVICE
}
2005-07-10 22:58:12 +04:00
} ;
# endif
2006-02-09 01:06:45 +03:00
/*
2011-10-06 02:14:02 +04:00
* Maps common IO regions for omap1
2006-02-09 01:06:45 +03:00
*/
2011-10-06 02:14:02 +04:00
static void __init omap1_map_common_io ( void )
2005-07-10 22:58:12 +04:00
{
iotable_init ( omap_io_desc , ARRAY_SIZE ( omap_io_desc ) ) ;
2011-10-06 02:14:02 +04:00
}
2005-07-10 22:58:12 +04:00
2009-09-22 08:58:08 +04:00
# if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
2011-10-06 02:14:02 +04:00
void __init omap7xx_map_io ( void )
{
omap1_map_common_io ( ) ;
iotable_init ( omap7xx_io_desc , ARRAY_SIZE ( omap7xx_io_desc ) ) ;
}
2005-07-10 22:58:12 +04:00
# endif
2011-10-06 02:14:02 +04:00
2005-11-10 17:26:48 +03:00
# ifdef CONFIG_ARCH_OMAP15XX
2011-10-06 02:14:02 +04:00
void __init omap15xx_map_io ( void )
{
omap1_map_common_io ( ) ;
iotable_init ( omap1510_io_desc , ARRAY_SIZE ( omap1510_io_desc ) ) ;
}
2005-07-10 22:58:12 +04:00
# endif
2011-10-06 02:14:02 +04:00
# if defined(CONFIG_ARCH_OMAP16XX)
void __init omap16xx_map_io ( void )
{
omap1_map_common_io ( ) ;
iotable_init ( omap16xx_io_desc , ARRAY_SIZE ( omap16xx_io_desc ) ) ;
2006-02-09 01:06:45 +03:00
}
2011-10-06 02:14:02 +04:00
# endif
2005-09-09 02:07:38 +04:00
2006-02-09 01:06:45 +03:00
/*
2011-10-06 02:14:02 +04:00
* Common low - level hardware init for omap1 .
2006-02-09 01:06:45 +03:00
*/
2012-03-06 04:11:04 +04:00
void __init omap1_init_early ( void )
2006-02-09 01:06:45 +03:00
{
2011-10-06 02:14:02 +04:00
omap_check_revision ( ) ;
2005-07-10 22:58:12 +04:00
/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
* on a Posted Write in the TIPB Bridge " .
*/
omap_writew ( 0x0 , MPU_PUBLIC_TIPB_CNTL ) ;
omap_writew ( 0x0 , MPU_PRIVATE_TIPB_CNTL ) ;
/* Must init clocks early to assure that timer interrupt works
*/
2005-11-10 17:26:48 +03:00
omap1_clk_init ( ) ;
2006-02-09 01:06:45 +03:00
omap1_mux_init ( ) ;
2005-07-10 22:58:12 +04:00
}
2005-09-09 02:07:38 +04:00
2012-04-26 09:49:29 +04:00
void __init omap1_init_late ( void )
{
omap_serial_wakeup_init ( ) ;
}
2010-12-10 20:46:24 +03:00
/*
* NOTE : Please use ioremap + __raw_read / write where possible instead of these
*/
u8 omap_readb ( u32 pa )
{
return __raw_readb ( OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_readb ) ;
u16 omap_readw ( u32 pa )
{
return __raw_readw ( OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_readw ) ;
u32 omap_readl ( u32 pa )
{
return __raw_readl ( OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_readl ) ;
void omap_writeb ( u8 v , u32 pa )
{
__raw_writeb ( v , OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_writeb ) ;
void omap_writew ( u16 v , u32 pa )
{
__raw_writew ( v , OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_writew ) ;
void omap_writel ( u32 v , u32 pa )
{
__raw_writel ( v , OMAP1_IO_ADDRESS ( pa ) ) ;
}
EXPORT_SYMBOL ( omap_writel ) ;