2005-11-10 17:26:51 +03:00
/*
* linux / arch / arm / mach - omap2 / io . c
*
* OMAP2 I / O mapping code
*
* Copyright ( C ) 2005 Nokia Corporation
* Author : Juha Yrj <EFBFBD> l <EFBFBD> < juha . yrjola @ nokia . com >
2006-12-07 04:14:05 +03:00
* Updated map desc to add 2430 support : < x0khasim @ ti . com >
2005-11-10 17:26:51 +03:00
*
* 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>
2006-04-02 20:46:27 +04:00
# include <asm/tlb.h>
2005-11-10 17:26:51 +03:00
# include <asm/io.h>
2006-04-02 20:46:27 +04:00
# include <asm/mach/map.h>
2008-08-05 19:14:15 +04:00
# include <mach/mux.h>
# include <mach/omapfb.h>
2005-11-10 17:26:51 +03:00
extern void omap_sram_init ( void ) ;
extern int omap2_clk_init ( void ) ;
extern void omap2_check_revision ( void ) ;
2006-12-07 04:13:46 +03:00
extern void omap2_init_memory ( void ) ;
2006-06-27 03:16:16 +04:00
extern void gpmc_init ( void ) ;
2007-03-06 14:16:36 +03:00
extern void omapfb_reserve_sdram ( void ) ;
2005-11-10 17:26:51 +03:00
/*
* The machine specific code may provide the extra mapping besides the
* default mapping provided here .
*/
static struct map_desc omap2_io_desc [ ] __initdata = {
{
. virtual = L3_24XX_VIRT ,
. pfn = __phys_to_pfn ( L3_24XX_PHYS ) ,
. length = L3_24XX_SIZE ,
. type = MT_DEVICE
} ,
2008-02-21 02:30:06 +03:00
{
. virtual = L4_24XX_VIRT ,
. pfn = __phys_to_pfn ( L4_24XX_PHYS ) ,
. length = L4_24XX_SIZE ,
. type = MT_DEVICE
} ,
2006-12-07 04:14:05 +03:00
# ifdef CONFIG_ARCH_OMAP2430
{
. virtual = L4_WK_243X_VIRT ,
. pfn = __phys_to_pfn ( L4_WK_243X_PHYS ) ,
. length = L4_WK_243X_SIZE ,
. type = MT_DEVICE
} ,
{
. virtual = OMAP243X_GPMC_VIRT ,
. pfn = __phys_to_pfn ( OMAP243X_GPMC_PHYS ) ,
. length = OMAP243X_GPMC_SIZE ,
. type = MT_DEVICE
} ,
# endif
2005-11-10 17:26:51 +03:00
{
2006-12-08 00:58:10 +03:00
. virtual = DSP_MEM_24XX_VIRT ,
. pfn = __phys_to_pfn ( DSP_MEM_24XX_PHYS ) ,
. length = DSP_MEM_24XX_SIZE ,
. type = MT_DEVICE
} ,
{
. virtual = DSP_IPI_24XX_VIRT ,
. pfn = __phys_to_pfn ( DSP_IPI_24XX_PHYS ) ,
. length = DSP_IPI_24XX_SIZE ,
. type = MT_DEVICE
} ,
{
. virtual = DSP_MMU_24XX_VIRT ,
. pfn = __phys_to_pfn ( DSP_MMU_24XX_PHYS ) ,
. length = DSP_MMU_24XX_SIZE ,
2005-11-10 17:26:51 +03:00
. type = MT_DEVICE
}
} ;
2006-04-02 20:46:27 +04:00
void __init omap2_map_common_io ( void )
2005-11-10 17:26:51 +03:00
{
iotable_init ( omap2_io_desc , ARRAY_SIZE ( omap2_io_desc ) ) ;
2006-04-02 20:46:27 +04:00
/* Normally devicemaps_init() would flush caches and tlb after
* mdesc - > map_io ( ) , but we must also do it here because of the CPU
* revision check below .
*/
local_flush_tlb_all ( ) ;
flush_cache_all ( ) ;
2005-11-10 17:26:51 +03:00
omap2_check_revision ( ) ;
omap_sram_init ( ) ;
2007-03-06 14:16:36 +03:00
omapfb_reserve_sdram ( ) ;
2006-04-02 20:46:27 +04:00
}
void __init omap2_init_common_hw ( void )
{
2005-11-10 17:26:51 +03:00
omap2_mux_init ( ) ;
omap2_clk_init ( ) ;
2006-12-07 04:14:05 +03:00
/*
* Need to Fix this for 2430
*/
# ifndef CONFIG_ARCH_OMAP2430
2006-12-07 04:13:46 +03:00
omap2_init_memory ( ) ;
2006-12-07 04:14:05 +03:00
# endif
2006-06-27 03:16:16 +04:00
gpmc_init ( ) ;
2005-11-10 17:26:51 +03:00
}