linux/arch/arm/mach-mx3/mx31ads.c
<<
>>
Prefs
   1/*
   2 *  Copyright (C) 2000 Deep Blue Solutions Ltd
   3 *  Copyright (C) 2002 Shane Nay (shane@minirl.com)
   4 *  Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19 */
  20
  21#include <linux/types.h>
  22#include <linux/init.h>
  23#include <linux/clk.h>
  24#include <linux/serial_8250.h>
  25
  26#include <asm/hardware.h>
  27#include <asm/mach-types.h>
  28#include <asm/mach/arch.h>
  29#include <asm/memory.h>
  30#include <asm/mach/map.h>
  31#include <asm/arch/common.h>
  32
  33/*!
  34 * @file mx31ads.c
  35 *
  36 * @brief This file contains the board-specific initialization routines.
  37 *
  38 * @ingroup System
  39 */
  40
  41#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
  42/*!
  43 * The serial port definition structure.
  44 */
  45static struct plat_serial8250_port serial_platform_data[] = {
  46        {
  47                .membase  = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTA),
  48                .mapbase  = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTA),
  49                .irq      = EXPIO_INT_XUART_INTA,
  50                .uartclk  = 14745600,
  51                .regshift = 0,
  52                .iotype   = UPIO_MEM,
  53                .flags    = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ,
  54        }, {
  55                .membase  = (void *)(PBC_BASE_ADDRESS + PBC_SC16C652_UARTB),
  56                .mapbase  = (unsigned long)(CS4_BASE_ADDR + PBC_SC16C652_UARTB),
  57                .irq      = EXPIO_INT_XUART_INTB,
  58                .uartclk  = 14745600,
  59                .regshift = 0,
  60                .iotype   = UPIO_MEM,
  61                .flags    = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_AUTO_IRQ,
  62        },
  63        {},
  64};
  65
  66static struct platform_device serial_device = {
  67        .name   = "serial8250",
  68        .id     = 0,
  69        .dev    = {
  70                .platform_data = serial_platform_data,
  71        },
  72};
  73
  74static int __init mxc_init_extuart(void)
  75{
  76        return platform_device_register(&serial_device);
  77}
  78#else
  79static inline int mxc_init_extuart(void)
  80{
  81        return 0;
  82}
  83#endif
  84
  85/*!
  86 * This structure defines static mappings for the i.MX31ADS board.
  87 */
  88static struct map_desc mx31ads_io_desc[] __initdata = {
  89        {
  90                .virtual        = AIPS1_BASE_ADDR_VIRT,
  91                .pfn            = __phys_to_pfn(AIPS1_BASE_ADDR),
  92                .length         = AIPS1_SIZE,
  93                .type           = MT_NONSHARED_DEVICE
  94        }, {
  95                .virtual        = SPBA0_BASE_ADDR_VIRT,
  96                .pfn            = __phys_to_pfn(SPBA0_BASE_ADDR),
  97                .length         = SPBA0_SIZE,
  98                .type           = MT_NONSHARED_DEVICE
  99        }, {
 100                .virtual        = AIPS2_BASE_ADDR_VIRT,
 101                .pfn            = __phys_to_pfn(AIPS2_BASE_ADDR),
 102                .length         = AIPS2_SIZE,
 103                .type           = MT_NONSHARED_DEVICE
 104        }, {
 105                .virtual        = CS4_BASE_ADDR_VIRT,
 106                .pfn            = __phys_to_pfn(CS4_BASE_ADDR),
 107                .length         = CS4_SIZE / 2,
 108                .type           = MT_DEVICE
 109        },
 110};
 111
 112/*!
 113 * Set up static virtual mappings.
 114 */
 115void __init mx31ads_map_io(void)
 116{
 117        mxc_map_io();
 118        iotable_init(mx31ads_io_desc, ARRAY_SIZE(mx31ads_io_desc));
 119}
 120
 121/*!
 122 * Board specific initialization.
 123 */
 124static void __init mxc_board_init(void)
 125{
 126        mxc_init_extuart();
 127}
 128
 129/*
 130 * The following uses standard kernel macros defined in arch.h in order to
 131 * initialize __mach_desc_MX31ADS data structure.
 132 */
 133MACHINE_START(MX31ADS, "Freescale MX31ADS")
 134        /* Maintainer: Freescale Semiconductor, Inc. */
 135        .phys_io        = AIPS1_BASE_ADDR,
 136        .io_pg_offst    = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc,
 137        .boot_params    = PHYS_OFFSET + 0x100,
 138        .map_io         = mx31ads_map_io,
 139        .init_irq       = mxc_init_irq,
 140        .init_machine   = mxc_board_init,
 141        .timer          = &mxc_timer,
 142MACHINE_END
 143
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.