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