linux/arch/arm/mach-sa1100/cerf.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-sa1100/cerf.c
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 *
   8 * Apr-2003 : Removed some old PDA crud [FB]
   9 * Oct-2003 : Added uart2 resource [FB]
  10 * Jan-2004 : Removed io map for flash [FB]
  11 */
  12
  13#include <linux/init.h>
  14#include <linux/kernel.h>
  15#include <linux/tty.h>
  16#include <linux/platform_device.h>
  17#include <linux/irq.h>
  18#include <linux/mtd/mtd.h>
  19#include <linux/mtd/partitions.h>
  20
  21#include <asm/irq.h>
  22#include <mach/hardware.h>
  23#include <asm/setup.h>
  24
  25#include <asm/mach-types.h>
  26#include <asm/mach/arch.h>
  27#include <asm/mach/flash.h>
  28#include <asm/mach/map.h>
  29#include <asm/mach/serial_sa1100.h>
  30
  31#include <mach/cerf.h>
  32#include <mach/mcp.h>
  33#include "generic.h"
  34
  35static struct resource cerfuart2_resources[] = {
  36        [0] = {
  37                .start  = 0x80030000,
  38                .end    = 0x8003ffff,
  39                .flags  = IORESOURCE_MEM,
  40        },
  41};
  42
  43static struct platform_device cerfuart2_device = {
  44        .name           = "sa11x0-uart",
  45        .id             = 2,
  46        .num_resources  = ARRAY_SIZE(cerfuart2_resources),
  47        .resource       = cerfuart2_resources,
  48};
  49
  50static struct platform_device *cerf_devices[] __initdata = {
  51        &cerfuart2_device,
  52};
  53
  54#ifdef CONFIG_SA1100_CERF_FLASH_32MB
  55#  define CERF_FLASH_SIZE       0x02000000
  56#elif defined CONFIG_SA1100_CERF_FLASH_16MB
  57#  define CERF_FLASH_SIZE       0x01000000
  58#elif defined CONFIG_SA1100_CERF_FLASH_8MB
  59#  define CERF_FLASH_SIZE       0x00800000
  60#else
  61#  error "Undefined flash size for CERF"
  62#endif
  63
  64static struct mtd_partition cerf_partitions[] = {
  65        {
  66                .name           = "Bootloader",
  67                .size           = 0x00020000,
  68                .offset         = 0x00000000,
  69        }, {
  70                .name           = "Params",
  71                .size           = 0x00040000,
  72                .offset         = 0x00020000,
  73        }, {
  74                .name           = "Kernel",
  75                .size           = 0x00100000,
  76                .offset         = 0x00060000,
  77        }, {
  78                .name           = "Filesystem",
  79                .size           = CERF_FLASH_SIZE-0x00160000,
  80                .offset         = 0x00160000,
  81        }
  82};
  83
  84static struct flash_platform_data cerf_flash_data = {
  85        .map_name       = "cfi_probe",
  86        .parts          = cerf_partitions,
  87        .nr_parts       = ARRAY_SIZE(cerf_partitions),
  88};
  89
  90static struct resource cerf_flash_resource = {
  91        .start          = SA1100_CS0_PHYS,
  92        .end            = SA1100_CS0_PHYS + SZ_32M - 1,
  93        .flags          = IORESOURCE_MEM,
  94};
  95
  96static void __init cerf_init_irq(void)
  97{
  98        sa1100_init_irq();
  99        set_irq_type(CERF_ETH_IRQ, IRQ_TYPE_EDGE_RISING);
 100}
 101
 102static struct map_desc cerf_io_desc[] __initdata = {
 103        {       /* Crystal Ethernet Chip */
 104                .virtual        =  0xf0000000,
 105                .pfn            = __phys_to_pfn(0x08000000),
 106                .length         = 0x00100000,
 107                .type           = MT_DEVICE
 108        }
 109};
 110
 111static void __init cerf_map_io(void)
 112{
 113        sa1100_map_io();
 114        iotable_init(cerf_io_desc, ARRAY_SIZE(cerf_io_desc));
 115
 116        sa1100_register_uart(0, 3);
 117        sa1100_register_uart(1, 2); /* disable this and the uart2 device for sa1100_fir */
 118        sa1100_register_uart(2, 1);
 119
 120        /* set some GPDR bits here while it's safe */
 121        GPDR |= CERF_GPIO_CF_RESET;
 122}
 123
 124static struct mcp_plat_data cerf_mcp_data = {
 125        .mccr0          = MCCR0_ADM,
 126        .sclk_rate      = 11981000,
 127};
 128
 129static void __init cerf_init(void)
 130{
 131        platform_add_devices(cerf_devices, ARRAY_SIZE(cerf_devices));
 132        sa11x0_set_flash_data(&cerf_flash_data, &cerf_flash_resource, 1);
 133        sa11x0_set_mcp_data(&cerf_mcp_data);
 134}
 135
 136MACHINE_START(CERF, "Intrinsyc CerfBoard/CerfCube")
 137        /* Maintainer: support@intrinsyc.com */
 138        .phys_io        = 0x80000000,
 139        .io_pg_offst    = ((0xf8000000) >> 18) & 0xfffc,
 140        .map_io         = cerf_map_io,
 141        .init_irq       = cerf_init_irq,
 142        .timer          = &sa1100_timer,
 143        .init_machine   = cerf_init,
 144MACHINE_END
 145