2019-06-04 11:11:33 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2005-04-17 02:20:36 +04:00
/*
* linux / arch / arm / mach - pxa / generic . c
*
* Author : Nicolas Pitre
* Created : Jun 15 , 2001
* Copyright : MontaVista Software Inc .
*
* Code common to all PXA machines .
*
* Since this file should be linked before any other machine specific file ,
* the __initcall ( ) here will be executed first . This serves as default
* initialization stuff for PXA machines which can be overridden later if
* need be .
*/
2011-07-26 13:53:52 +04:00
# include <linux/gpio.h>
2005-04-17 02:20:36 +04:00
# include <linux/module.h>
# include <linux/kernel.h>
# include <linux/init.h>
2008-08-05 19:14:15 +04:00
# include <mach/hardware.h>
2005-04-17 02:20:36 +04:00
# include <asm/mach/map.h>
2008-12-18 06:10:32 +03:00
# include <asm/mach-types.h>
2005-04-17 02:20:36 +04:00
2014-07-14 20:52:04 +04:00
# include <mach/irqs.h>
2008-08-07 14:05:25 +04:00
# include <mach/reset.h>
2010-11-03 18:29:35 +03:00
# include <mach/smemc.h>
2010-11-24 06:54:19 +03:00
# include <mach/pxa3xx-regs.h>
2005-04-17 02:20:36 +04:00
# include "generic.h"
2014-07-14 20:52:04 +04:00
# include <clocksource/pxa.h>
2005-04-17 02:20:36 +04:00
2008-07-29 10:26:00 +04:00
void clear_reset_status ( unsigned int mask )
{
if ( cpu_is_pxa2xx ( ) )
pxa2xx_clear_reset_status ( mask ) ;
2010-11-24 06:54:19 +03:00
else {
/* RESET_STATUS_* has a 1:1 mapping with ARSR */
ARSR = mask ;
}
2008-07-29 10:26:00 +04:00
}
2014-07-14 20:52:04 +04:00
/*
* For non device - tree builds , keep legacy timer init
*/
2014-07-26 22:49:39 +04:00
void __init pxa_timer_init ( void )
2014-07-14 20:52:04 +04:00
{
2014-12-27 16:55:25 +03:00
if ( cpu_is_pxa25x ( ) )
pxa25x_clocks_init ( ) ;
if ( cpu_is_pxa27x ( ) )
pxa27x_clocks_init ( ) ;
2015-02-08 00:54:03 +03:00
if ( cpu_is_pxa3xx ( ) )
pxa3xx_clocks_init ( ) ;
2016-09-19 22:12:13 +03:00
pxa_timer_nodt_init ( IRQ_OST0 , io_p2v ( 0x40a00000 ) ) ;
2014-07-14 20:52:04 +04:00
}
2007-08-20 13:07:44 +04:00
/*
* Get the clock frequency as reflected by CCCR and the turbo flag .
* We assume these values have been applied via a fcs .
* If info is not 0 we also display the current settings .
*/
unsigned int get_clk_frequency_khz ( int info )
{
2008-09-11 06:27:30 +04:00
if ( cpu_is_pxa25x ( ) )
2007-08-20 13:07:44 +04:00
return pxa25x_get_clk_frequency_khz ( info ) ;
2007-09-12 06:13:17 +04:00
else if ( cpu_is_pxa27x ( ) )
2007-08-20 13:07:44 +04:00
return pxa27x_get_clk_frequency_khz ( info ) ;
2010-09-20 04:09:10 +04:00
return 0 ;
2007-08-20 13:07:44 +04:00
}
EXPORT_SYMBOL ( get_clk_frequency_khz ) ;
2005-04-17 02:20:36 +04:00
/*
* Intel PXA2xx internal register mapping .
*
2010-10-11 04:20:19 +04:00
* Note : virtual 0xfffe0000 - 0xffffffff is reserved for the vector table
* and cache flush area .
2005-04-17 02:20:36 +04:00
*/
2010-10-11 04:20:19 +04:00
static struct map_desc common_io_desc [ ] __initdata = {
2005-10-28 18:19:01 +04:00
{ /* Devs */
2014-07-11 15:00:36 +04:00
. virtual = ( unsigned long ) PERIPH_VIRT ,
. pfn = __phys_to_pfn ( PERIPH_PHYS ) ,
. length = PERIPH_SIZE ,
2005-10-28 18:19:01 +04:00
. type = MT_DEVICE
}
2005-04-17 02:20:36 +04:00
} ;
void __init pxa_map_io ( void )
{
2014-06-05 23:10:57 +04:00
debug_ll_io_init ( ) ;
2010-10-11 04:20:19 +04:00
iotable_init ( ARRAY_AND_SIZE ( common_io_desc ) ) ;
2005-04-17 02:20:36 +04:00
}