linux/arch/arm/mach-pxa/generic.c
<<
>>
Prefs
   1/*
   2 *  linux/arch/arm/mach-pxa/generic.c
   3 *
   4 *  Author:     Nicolas Pitre
   5 *  Created:    Jun 15, 2001
   6 *  Copyright:  MontaVista Software Inc.
   7 *
   8 * Code common to all PXA machines.
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 *
  14 * Since this file should be linked before any other machine specific file,
  15 * the __initcall() here will be executed first.  This serves as default
  16 * initialization stuff for PXA machines which can be overridden later if
  17 * need be.
  18 */
  19#include <linux/gpio.h>
  20#include <linux/module.h>
  21#include <linux/kernel.h>
  22#include <linux/init.h>
  23
  24#include <mach/hardware.h>
  25#include <asm/mach/map.h>
  26#include <asm/mach-types.h>
  27
  28#include <mach/irqs.h>
  29#include <mach/reset.h>
  30#include <mach/smemc.h>
  31#include <mach/pxa3xx-regs.h>
  32
  33#include "generic.h"
  34#include <clocksource/pxa.h>
  35
  36void clear_reset_status(unsigned int mask)
  37{
  38        if (cpu_is_pxa2xx())
  39                pxa2xx_clear_reset_status(mask);
  40        else {
  41                /* RESET_STATUS_* has a 1:1 mapping with ARSR */
  42                ARSR = mask;
  43        }
  44}
  45
  46/*
  47 * For non device-tree builds, keep legacy timer init
  48 */
  49void __init pxa_timer_init(void)
  50{
  51        if (cpu_is_pxa25x())
  52                pxa25x_clocks_init();
  53        if (cpu_is_pxa27x())
  54                pxa27x_clocks_init();
  55        if (cpu_is_pxa3xx())
  56                pxa3xx_clocks_init();
  57        pxa_timer_nodt_init(IRQ_OST0, io_p2v(0x40a00000));
  58}
  59
  60/*
  61 * Get the clock frequency as reflected by CCCR and the turbo flag.
  62 * We assume these values have been applied via a fcs.
  63 * If info is not 0 we also display the current settings.
  64 */
  65unsigned int get_clk_frequency_khz(int info)
  66{
  67        if (cpu_is_pxa25x())
  68                return pxa25x_get_clk_frequency_khz(info);
  69        else if (cpu_is_pxa27x())
  70                return pxa27x_get_clk_frequency_khz(info);
  71        return 0;
  72}
  73EXPORT_SYMBOL(get_clk_frequency_khz);
  74
  75/*
  76 * Intel PXA2xx internal register mapping.
  77 *
  78 * Note: virtual 0xfffe0000-0xffffffff is reserved for the vector table
  79 *       and cache flush area.
  80 */
  81static struct map_desc common_io_desc[] __initdata = {
  82        {       /* Devs */
  83                .virtual        = (unsigned long)PERIPH_VIRT,
  84                .pfn            = __phys_to_pfn(PERIPH_PHYS),
  85                .length         = PERIPH_SIZE,
  86                .type           = MT_DEVICE
  87        }
  88};
  89
  90void __init pxa_map_io(void)
  91{
  92        debug_ll_io_init();
  93        iotable_init(ARRAY_AND_SIZE(common_io_desc));
  94}
  95