add preliminary coldfire v4e support
authorImre Kaloz <kaloz@openwrt.org>
Sun, 21 Jun 2009 18:34:07 +0000 (18:34 +0000)
committerImre Kaloz <kaloz@openwrt.org>
Sun, 21 Jun 2009 18:34:07 +0000 (18:34 +0000)
SVN-Revision: 16538

14 files changed:
include/site/m68k-linux [new file with mode: 0644]
include/site/m68k-openwrt-linux-gnu [new file with mode: 0644]
include/site/m68k-openwrt-linux-uclibc [new file with mode: 0644]
include/target.mk
package/base-files/Makefile
target/Config.in
target/linux/coldfire/Makefile [new file with mode: 0644]
target/linux/coldfire/config-default [new file with mode: 0644]
target/linux/coldfire/image/Makefile [new file with mode: 0644]
target/linux/coldfire/patches/001-cf.patch [new file with mode: 0644]
toolchain/gcc/Config.in
toolchain/gcc/Config.version
toolchain/uClibc/config-0.9.30+nptl/m68k [new file with mode: 0644]
toolchain/uClibc/config-0.9.30.1/m68k [new file with mode: 0644]

diff --git a/include/site/m68k-linux b/include/site/m68k-linux
new file mode 100644 (file)
index 0000000..1005902
--- /dev/null
@@ -0,0 +1,26 @@
+ac_cv_c_littleendian=${ac_cv_c_littleendian=no}
+ac_cv_c_bigendian=${ac_cv_c_bigendian=yes}
+
+ac_cv_sizeof___int64=0
+ac_cv_sizeof_char=1
+ac_cv_sizeof_int=4
+ac_cv_sizeof_int16_t=2
+ac_cv_sizeof_int32_t=4
+ac_cv_sizeof_int64_t=8
+ac_cv_sizeof_long_int=4
+ac_cv_sizeof_long_long=8
+ac_cv_sizeof_long=4
+ac_cv_sizeof_off_t=4
+ac_cv_sizeof_short_int=2
+ac_cv_sizeof_short=2
+ac_cv_sizeof_size_t=4
+ac_cv_sizeof_u_int16_t=2
+ac_cv_sizeof_u_int32_t=4
+ac_cv_sizeof_u_int64_t=8
+ac_cv_sizeof_uint16_t=2
+ac_cv_sizeof_uint32_t=4
+ac_cv_sizeof_uint64_t=8
+ac_cv_sizeof_unsigned_int=4
+ac_cv_sizeof_unsigned_long=4
+ac_cv_sizeof_unsigned_short=2
+ac_cv_sizeof_void_p=4
diff --git a/include/site/m68k-openwrt-linux-gnu b/include/site/m68k-openwrt-linux-gnu
new file mode 100644 (file)
index 0000000..69c51d5
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+. $TOPDIR/include/site/m68k-linux
+. $TOPDIR/include/site/linux-gnu
+
diff --git a/include/site/m68k-openwrt-linux-uclibc b/include/site/m68k-openwrt-linux-uclibc
new file mode 100644 (file)
index 0000000..69c51d5
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+. $TOPDIR/include/site/m68k-linux
+. $TOPDIR/include/site/linux-gnu
+
index 8769c30..7facaee 100644 (file)
@@ -162,6 +162,7 @@ ifeq ($(DUMP),1)
   endif
   DEFAULT_CFLAGS_i386=-O2 -pipe -march=i486 -funit-at-a-time
   DEFAULT_CFLAGS_x86_64=-O2 -pipe -march=athlon64 -funit-at-a-time
+  DEFAULT_CFLAGS_m68k=-Os -pipe -mcfv4e -funit-at-a-time
   DEFAULT_CFLAGS_mips=-Os -pipe -mips32 -mtune=mips32 -funit-at-a-time
   DEFAULT_CFLAGS_mipsel=$(DEFAULT_CFLAGS_mips)
   DEFAULT_CFLAGS_mips64=-Os -pipe -mips64 -mtune=mips64 -mabi=64 -funit-at-a-time
index f9ad4e7..69f1e77 100644 (file)
@@ -74,7 +74,7 @@ endef
 define Package/libgcc
 $(call Package/gcc/Default)
   TITLE:=GCC support library
-  DEPENDS+=@!TARGET_avr32
+  DEPENDS+=@!(TARGET_avr32||TARGET_coldfire)
 endef
 
 define Package/libssp
index 37c9e20..8bfeb83 100644 (file)
@@ -61,6 +61,10 @@ config i386
 config i686
        bool 
 
+config m68k
+       select BIG_ENDIAN
+       bool
+
 config mips
        select BIG_ENDIAN
        bool
diff --git a/target/linux/coldfire/Makefile b/target/linux/coldfire/Makefile
new file mode 100644 (file)
index 0000000..0d29634
--- /dev/null
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+ARCH:=m68k
+BOARD:=coldfire
+BOARDNAME:=Freescale Coldfire v4e
+FEATURES:=squashfs broken
+
+LINUX_VERSION:=2.6.25.20
+LINUX_KARCH:=m68k
+
+include $(INCLUDE_DIR)/target.mk
+
+define Target/Description
+       Build firmware images for ColdFire v4e boards
+endef
+
+$(eval $(call BuildTarget))
diff --git a/target/linux/coldfire/config-default b/target/linux/coldfire/config-default
new file mode 100644 (file)
index 0000000..07014f3
--- /dev/null
@@ -0,0 +1,109 @@
+# CONFIG_8139TOO is not set
+# CONFIG_ADVANCED is not set
+# CONFIG_AMIGA is not set
+# CONFIG_APOLLO is not set
+CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_SUPPORTS_AOUT=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_ATARI is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BITREVERSE=y
+# CONFIG_BOOTPARAM is not set
+CONFIG_BOUNCE=y
+CONFIG_CFV4E=y
+CONFIG_CLASSIC_RCU=y
+CONFIG_COLDFIRE=y
+# CONFIG_COLDFIRE_EDMA is not set
+# CONFIG_COLDFIRE_WATCHDOG is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DISCONTIGMEM=y
+CONFIG_DISCONTIGMEM_MANUAL=y
+CONFIG_FEC_548x=y
+CONFIG_FEC_548x_AUTO_NEGOTIATION=y
+CONFIG_FEC_548x_ENABLE_FEC2=y
+# CONFIG_FLATMEM_MANUAL is not set
+# CONFIG_GENERIC_CLOCKEVENTS is not set
+CONFIG_GENERIC_IOMAP=y
+# CONFIG_GENERIC_TIME is not set
+# CONFIG_GEN_RTC is not set
+CONFIG_HAS_DMA=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAVE_IDE=y
+# CONFIG_HAVE_KPROBES is not set
+# CONFIG_HAVE_KRETPROBES is not set
+# CONFIG_HAVE_OPROFILE is not set
+# CONFIG_HP300 is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_I2C is not set
+# CONFIG_IDE is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_LEDS_ALIX is not set
+# CONFIG_M5445X is not set
+# CONFIG_M5475AFE is not set
+# CONFIG_M5475BFE is not set
+# CONFIG_M5475CFE is not set
+# CONFIG_M5475DFE is not set
+# CONFIG_M5475EFE is not set
+# CONFIG_M5475FFE is not set
+# CONFIG_M547X is not set
+CONFIG_M547X_8X=y
+# CONFIG_M5485AFE is not set
+# CONFIG_M5485BFE is not set
+CONFIG_M5485CFE=y
+# CONFIG_M5485DFE is not set
+# CONFIG_M5485EFE is not set
+# CONFIG_M5485FFE is not set
+CONFIG_M548X=y
+# CONFIG_M68020 is not set
+# CONFIG_M68030 is not set
+# CONFIG_M68040 is not set
+# CONFIG_M68060 is not set
+CONFIG_M68K=y
+# CONFIG_M68KFPU_EMU is not set
+# CONFIG_MAC is not set
+CONFIG_MCD_DMA=y
+CONFIG_MCFCLK=200000000
+CONFIG_MCF_USER_HALT=y
+# CONFIG_MEMSTICK is not set
+CONFIG_MMU_CFV4E=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+CONFIG_NEED_MULTIPLE_NODES=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NET_VENDOR_3COM is not set
+CONFIG_NODES_SHIFT=3
+CONFIG_NOR_FLASH_BASE=0xE0000000
+# CONFIG_NO_DMA is not set
+# CONFIG_NO_IOPORT is not set
+CONFIG_PCI_LEGACY=y
+CONFIG_PCI=y
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_PROC_HARDWARE is not set
+# CONFIG_Q40 is not set
+# CONFIG_R6040 is not set
+CONFIG_RESOURCES_64BIT=y
+# CONFIG_SCSI_DMA is not set
+CONFIG_SDRAM_BASE=0x00000000
+CONFIG_SDRAM_SIZE=0x04000000
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+CONFIG_SERIAL_8250_EXTENDED=y
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_RSA is not set
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_COLDFIRE is not set
+# CONFIG_SERIAL_MCF is not set
+CONFIG_SLABINFO=y
+# CONFIG_SUN3 is not set
+# CONFIG_SUN3X is not set
+CONFIG_TIME_LOW_RES=y
+CONFIG_UID16=y
+# CONFIG_VGASTATE is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_VME is not set
diff --git a/target/linux/coldfire/image/Makefile b/target/linux/coldfire/image/Makefile
new file mode 100644 (file)
index 0000000..5eb5c2f
--- /dev/null
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2009 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/image.mk
+
+JFFS2_BLOCKSIZE=128k
+
+define Image/Prepare
+endef
+
+define Image/BuildKernel
+endef
+
+define Image/Build
+       $(call Image/Build/$(1),$(1))
+endef
+
+define Image/Build/jffs2-128k
+endef
+
+define Image/Build/squashfs
+       $(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
+endef
+
+$(eval $(call BuildImage))
diff --git a/target/linux/coldfire/patches/001-cf.patch b/target/linux/coldfire/patches/001-cf.patch
new file mode 100644 (file)
index 0000000..66417e7
--- /dev/null
@@ -0,0 +1,51053 @@
+--- /dev/null
++++ b/arch/m68k/coldfire/cache.c
+@@ -0,0 +1,43 @@
++/*
++ *  linux/arch/m68k/coldfire/cache.c
++ *
++ *  Matt Waddel Matt.Waddel@freescale.com
++ *  Kurt Mahan kmahan@freescale.com
++ *  Copyright Freescale Semiconductor, Inc. 2007
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ */
++
++#include <linux/interrupt.h>
++#include <asm/cfcache.h>
++#include <asm/coldfire.h>
++#include <asm/system.h>
++
++/* Cache Control Reg shadow reg */
++unsigned long shadow_cacr;
++
++/**
++ * cacr_set - Set the Cache Control Register
++ * @x Value to set
++ */
++void cacr_set(unsigned long x)
++{
++      shadow_cacr = x;
++
++      __asm__ __volatile__ ("movec %0, %%cacr"
++                            : /* no outputs */
++                            : "r" (shadow_cacr));
++}
++
++/**
++ * cacr_get - Get the current value of the Cache Control Register
++ *
++ * @return CACR value
++ */
++unsigned long cacr_get(void)
++{
++      return shadow_cacr;
++}
+--- /dev/null
++++ b/arch/m68k/coldfire/config.c
+@@ -0,0 +1,483 @@
++/*
++ *  linux/arch/m68k/coldfire/config.c
++ *
++ *  Kurt Mahan kmahan@freescale.com
++ *  Matt Waddel Matt.Waddel@freescale.com
++ *  Copyright Freescale Semiconductor, Inc. 2007, 2008
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/string.h>
++#include <linux/kernel.h>
++#include <linux/console.h>
++#include <linux/bootmem.h>
++#include <linux/mm.h>
++#include <asm/bootinfo.h>
++#include <asm/machdep.h>
++#include <asm/coldfire.h>
++#include <asm/cfcache.h>
++#include <asm/cacheflush.h>
++#include <asm/io.h>
++#include <asm/cfmmu.h>
++#include <asm/setup.h>
++#include <asm/irq.h>
++#include <asm/traps.h>
++#include <asm/movs.h>
++#include <asm/movs.h>
++#include <asm/page.h>
++#include <asm/pgalloc.h>
++
++#include <asm/mcfsim.h>
++
++#if defined(CONFIG_M5445X)
++#define UBOOT_EXTRA_CLOCKS
++#elif defined(CONFIG_M547X_8X)
++#define UBOOT_PCI
++#endif
++#include <asm/bootinfo.h>
++
++#ifdef CONFIG_M5445X
++#include <asm/mcf5445x_intc.h>
++#include <asm/mcf5445x_sdramc.h>
++#include <asm/mcf5445x_fbcs.h>
++#include <asm/mcf5445x_dtim.h>
++#include <asm/mcf5445x_xbs.h>
++#endif
++
++#ifdef CONFIG_M547X_8X
++#include <asm/m5485gpt.h>
++#endif
++
++extern int get_irq_list(struct seq_file *p, void *v);
++extern char _text, _end;
++extern char _etext, _edata, __init_begin, __init_end;
++extern struct console mcfrs_console;
++extern char m68k_command_line[CL_SIZE];
++extern unsigned long availmem;
++
++static int irq_enable[NR_IRQS];
++unsigned long num_pages;
++
++/* ethernet mac addresses from uboot */
++unsigned char uboot_enet0[6];
++unsigned char uboot_enet1[6];
++
++void coldfire_sort_memrec(void)
++{
++      int i, j;
++
++      /* Sort the m68k_memory records by address */
++      for (i = 0; i < m68k_num_memory; ++i) {
++              for (j = i + 1; j < m68k_num_memory; ++j) {
++                      if (m68k_memory[i].addr > m68k_memory[j].addr) {
++                              struct mem_info tmp;
++                              tmp = m68k_memory[i];
++                              m68k_memory[i] = m68k_memory[j];
++                              m68k_memory[j] = tmp;
++                      }
++              }
++      }
++      /* Trim off discontiguous bits */
++      for (i = 1; i < m68k_num_memory; ++i) {
++              if ((m68k_memory[i-1].addr + m68k_memory[i-1].size) !=
++                      m68k_memory[i].addr) {
++                      printk(KERN_DEBUG "m68k_parse_bootinfo: addr gap between \
++                              0x%lx & 0x%lx\n",
++                              m68k_memory[i-1].addr+m68k_memory[i-1].size,
++                              m68k_memory[i].addr);
++                      m68k_num_memory = i;
++                      break;
++              }
++      }
++}
++
++/*
++ * UBoot Handler
++ */
++int __init uboot_commandline(char *bootargs)
++{
++      int len = 0, cmd_line_len;
++      static struct uboot_record uboot_info;
++      u32 offset = PAGE_OFFSET_RAW - PHYS_OFFSET;
++
++      extern unsigned long uboot_info_stk;
++
++      /* validate address */
++      if ((uboot_info_stk < PAGE_OFFSET_RAW) ||
++          (uboot_info_stk >= (PAGE_OFFSET_RAW + CONFIG_SDRAM_SIZE)))
++              return 0;
++
++      /* Add offset to get post-remapped kernel memory location */
++      uboot_info.bdi = (struct bd_info *)((*(u32 *)(uboot_info_stk)) + offset);
++      uboot_info.initrd_start = (*(u32 *)(uboot_info_stk+4)) + offset;
++      uboot_info.initrd_end = (*(u32 *)(uboot_info_stk+8)) + offset;
++      uboot_info.cmd_line_start = (*(u32 *)(uboot_info_stk+12)) + offset;
++      uboot_info.cmd_line_stop = (*(u32 *)(uboot_info_stk+16)) + offset;
++
++      /* copy over mac addresses */
++      memcpy(uboot_enet0, uboot_info.bdi->bi_enet0addr, 6);
++      memcpy(uboot_enet1, uboot_info.bdi->bi_enet1addr, 6);
++
++      /* copy command line */
++      cmd_line_len = uboot_info.cmd_line_stop - uboot_info.cmd_line_start;
++      if ((cmd_line_len > 0) && (cmd_line_len < CL_SIZE-1))
++              len = (int)strncpy(bootargs, (char *)uboot_info.cmd_line_start,\
++                                 cmd_line_len);
++
++      return len;
++}
++
++/*
++ * This routine does things not done in the bootloader.
++ */
++#if defined(CONFIG_M54451)
++#define DEFAULT_COMMAND_LINE "debug root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/redstripe/rootfs/ ip=172.27.155.51:172.27.155.1"
++#elif defined(CONFIG_M54455)
++#define MTD_DEFAULT_COMMAND_LINE "root=/dev/mtdblock1 rw rootfstype=jffs2 ip=none mtdparts=physmap-flash.0:5M(kernel)ro,-(jffs2)"
++#define DEFAULT_COMMAND_LINE "debug root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/redstripe/rootfs/ ip=172.27.155.55:172.27.155.1"
++#elif defined(CONFIG_M547X_8X)
++#define DEFAULT_COMMAND_LINE "debug root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/rigo/rootfs/ ip=172.27.155.75:172.27.155.1"
++#endif
++asmlinkage void __init cf_early_init(void)
++{
++      struct bi_record *record = (struct bi_record *) &_end;
++
++      extern char _end;
++
++#if defined(CONFIG_M5445X)
++      SET_VBR((void *)MCF_RAMBAR1);
++#elif defined(CONFIG_M547X_8X)
++      SET_VBR((void *)MCF_RAMBAR0);
++#endif
++
++      /* Mask all interrupts */
++#if defined(CONFIG_M5445X)
++      MCF_INTC0_IMRL = 0xFFFFFFFF;
++      MCF_INTC0_IMRH = 0xFFFFFFFF;
++      MCF_INTC1_IMRL = 0xFFFFFFFF;
++      MCF_INTC1_IMRH = 0xFFFFFFFF;
++#elif defined(CONFIG_M547X_8X)
++      MCF_IMRL = 0xFFFFFFFF;
++      MCF_IMRH = 0xFFFFFFFF;
++#endif
++
++#if defined(CONFIG_M5445X)
++#if defined(CONFIG_NOR_FLASH_BASE)
++      MCF_FBCS_CSAR(1) = CONFIG_NOR_FLASH_BASE;
++#else
++      MCF_FBCS_CSAR(1) = 0x00000000;
++#endif
++
++#if CONFIG_SDRAM_SIZE > (256*1024*1024)
++      /* Init optional SDRAM chip select */
++      MCF_SDRAMC_SDCS(1) = (256*1024*1024) | 0x1B;
++#endif
++#endif /* CONFIG_M5445X */
++
++#if defined(CONFIG_M5445X)
++      /* Setup SDRAM crossbar(XBS) priorities */
++      MCF_XBS_PRS2 = (MCF_XBS_PRS_M0(MCF_XBS_PRI_2) |
++                      MCF_XBS_PRS_M1(MCF_XBS_PRI_3) |
++                      MCF_XBS_PRS_M2(MCF_XBS_PRI_4) |
++                      MCF_XBS_PRS_M3(MCF_XBS_PRI_5) |
++                      MCF_XBS_PRS_M5(MCF_XBS_PRI_6) |
++                      MCF_XBS_PRS_M6(MCF_XBS_PRI_1) |
++                      MCF_XBS_PRS_M7(MCF_XBS_PRI_7));
++#endif
++
++      m68k_machtype = MACH_CFMMU;
++      m68k_fputype = FPU_CFV4E;
++      m68k_mmutype = MMU_CFV4E;
++      m68k_cputype = CPU_CFV4E;
++
++      m68k_num_memory = 0;
++      m68k_memory[m68k_num_memory].addr = CONFIG_SDRAM_BASE;
++      m68k_memory[m68k_num_memory++].size = CONFIG_SDRAM_SIZE;
++
++      if (!uboot_commandline(m68k_command_line)) {
++#if defined(CONFIG_BOOTPARAM)
++              strncpy(m68k_command_line, CONFIG_BOOTPARAM_STRING, CL_SIZE-1);
++#else
++              strcpy(m68k_command_line, DEFAULT_COMMAND_LINE);
++#endif
++      }
++
++#if defined(CONFIG_BLK_DEV_INITRD)
++      /* add initrd image */
++      record = (struct bi_record *) ((void *)record + record->size);
++      record->tag = BI_RAMDISK;
++      record->size =  sizeof(record->tag) + sizeof(record->size)
++              + sizeof(record->data[0]) + sizeof(record->data[1]);
++#endif
++
++      /* Mark end of tags. */
++      record = (struct bi_record *) ((void *) record + record->size);
++      record->tag = 0;
++      record->data[0] = 0;
++      record->data[1] = 0;
++      record->size = sizeof(record->tag) + sizeof(record->size)
++              + sizeof(record->data[0]) + sizeof(record->data[1]);
++
++      /* Invalidate caches via CACR */
++      flush_bcache();
++      cacr_set(CACHE_DISABLE_MODE);
++
++      /* Turn on caches via CACR, enable EUSP */
++      cacr_set(CACHE_INITIAL_MODE);
++
++}
++
++#if defined(CONFIG_M5445X)
++void settimericr(unsigned int timer, unsigned int level)
++{
++      volatile unsigned char *icrp;
++      unsigned int icr;
++      unsigned char irq;
++
++      if (timer <= 2) {
++              switch (timer) {
++              case 2:  irq = 33; icr = MCFSIM_ICR_TIMER2; break;
++              default: irq = 32; icr = MCFSIM_ICR_TIMER1; break;
++              }
++
++              icrp = (volatile unsigned char *) (icr);
++              *icrp = level;
++              coldfire_enable_irq0(irq);
++      }
++}
++#endif
++
++/* Assembler routines */
++asmlinkage void buserr(void);
++asmlinkage void trap(void);
++asmlinkage void system_call(void);
++asmlinkage void inthandler(void);
++
++void __init coldfire_trap_init(void)
++{
++      int i = 0;
++      e_vector *vectors;
++
++#if defined(CONFIG_M5445X)
++      vectors = (e_vector *)MCF_RAMBAR1;
++#elif defined(CONFIG_M547X_8X)
++      vectors = (e_vector *)MCF_RAMBAR0;
++#endif
++      /*
++       * There is a common trap handler and common interrupt
++       * handler that handle almost every vector. We treat
++       * the system call and bus error special, they get their
++       * own first level handlers.
++       */
++      for (i = 3; (i <= 23); i++)
++              vectors[i] = trap;
++      for (i = 33; (i <= 63); i++)
++              vectors[i] = trap;
++      for (i = 24; (i <= 31); i++)
++              vectors[i] = inthandler;
++      for (i = 64; (i < 255); i++)
++              vectors[i] = inthandler;
++
++      vectors[255] = 0;
++      vectors[2] = buserr;
++      vectors[32] = system_call;
++}
++
++#if defined(CONFIG_M5445X)
++
++void coldfire_tick(void)
++{
++      /* Reset the ColdFire timer */
++      __raw_writeb(MCF_DTIM_DTER_CAP | MCF_DTIM_DTER_REF, MCF_DTIM0_DTER);
++}
++
++void __init coldfire_sched_init(irq_handler_t handler)
++{
++      unsigned int    mcf_timerlevel = 5;
++      unsigned int    mcf_timervector = 64+32;
++
++      __raw_writew(MCF_DTIM_DTMR_RST_RST, MCF_DTIM0_DTMR);
++      __raw_writel(((MCF_BUSCLK / 16) / HZ), MCF_DTIM0_DTRR);
++      __raw_writew(MCF_DTIM_DTMR_ORRI | MCF_DTIM_DTMR_CLK_DIV16 |
++                   MCF_DTIM_DTMR_FRR  | MCF_DTIM_DTMR_RST_EN, \
++                   MCF_DTIM0_DTMR);
++
++      request_irq(mcf_timervector, handler, IRQF_DISABLED, \
++                  "timer", (void *)MCF_DTIM0_DTMR);
++
++      settimericr(1, mcf_timerlevel);
++}
++
++int timerirqpending(int timer)
++{
++      unsigned int imr = 0;
++
++      switch (timer) {
++      case 1:  imr = 0x1; break;
++      case 2:  imr = 0x2; break;
++      default: break;
++      }
++
++      return (getiprh() & imr);
++}
++
++unsigned long coldfire_gettimeoffset(void)
++{
++      volatile unsigned long trr, tcn, offset;
++
++      tcn = __raw_readw(MCF_DTIM0_DTCN);
++      trr = __raw_readl(MCF_DTIM0_DTRR);
++      offset = (tcn * (1000000 / HZ)) / trr;
++
++      /* Check if we just wrapped the counters and maybe missed a tick */
++      if ((offset < (1000000 / HZ / 2)) && timerirqpending(1))
++              offset += 1000000 / HZ;
++      return offset;
++}
++
++#elif defined(CONFIG_M547X_8X)
++
++void coldfire_tick(void)
++{
++      /* Reset the ColdFire timer */
++      MCF_SSR(0) = MCF_SSR_ST;
++}
++
++void __init coldfire_sched_init(irq_handler_t handler)
++{
++      int irq = ISC_SLTn(0);
++
++      MCF_SCR(0) = 0;
++      MCF_ICR(irq) = ILP_SLT0;
++      request_irq(64 + irq, handler, IRQF_DISABLED, "ColdFire Timer 0", NULL);
++      MCF_SLTCNT(0) = MCF_BUSCLK / HZ;
++      MCF_SCR(0) |=  MCF_SCR_TEN | MCF_SCR_IEN | MCF_SCR_RUN;
++}
++
++unsigned long coldfire_gettimeoffset(void)
++{
++      volatile unsigned long trr, tcn, offset;
++      trr = MCF_SLTCNT(0);
++      tcn = MCF_SCNT(0);
++
++      offset = (trr - tcn) * ((1000000 >> 3) / HZ) / (trr >> 3);
++      if (MCF_SSR(0) & MCF_SSR_ST)
++              offset += 1000000 / HZ;
++
++      return offset;
++}
++
++#endif
++
++void coldfire_reboot(void)
++{
++#if defined(CONFIG_M5445X)
++      /* disable interrupts and do a software reset */
++      asm("movew #0x2700, %%sr\n\t"
++          "moveb #0x80, %%d0\n\t"
++          "moveb %%d0, 0xfc0a0000\n\t"
++          : : : "%d0");
++#elif defined(CONFIG_M547X_8X)
++      /* disable interrupts and enable the watchdog */
++      printk(KERN_INFO "Rebooting\n");
++      asm("movew #0x2700, %sr\n");
++      MCF_GPT_GMS0 = MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE | MCF_GPT_GMS_TMS(4);
++#endif
++}
++
++static void coldfire_get_model(char *model)
++{
++      sprintf(model, "Version 4 ColdFire");
++}
++
++static void __init
++coldfire_bootmem_alloc(unsigned long memory_start, unsigned long memory_end)
++{
++      unsigned long base_pfn;
++
++      /* compute total pages in system */
++      num_pages = PAGE_ALIGN(memory_end - PAGE_OFFSET) >> PAGE_SHIFT;
++
++      /* align start/end to page boundries */
++      memory_start = PAGE_ALIGN(memory_start);
++      memory_end = memory_end & PAGE_MASK;
++
++      /* page numbers */
++      base_pfn = __pa(PAGE_OFFSET) >> PAGE_SHIFT;
++      min_low_pfn = __pa(memory_start) >> PAGE_SHIFT;
++      max_low_pfn = __pa(memory_end) >> PAGE_SHIFT;
++
++      high_memory = (void *)memory_end;
++      availmem = memory_start;
++
++      /* setup bootmem data */
++      m68k_setup_node(0);
++      availmem += init_bootmem_node(NODE_DATA(0), min_low_pfn,
++              base_pfn, max_low_pfn);
++      availmem = PAGE_ALIGN(availmem);
++      free_bootmem(__pa(availmem), memory_end - (availmem));
++}
++
++void __init config_coldfire(void)
++{
++      unsigned long endmem, startmem;
++      int i;
++
++      /*
++       * Calculate endmem from m68k_memory, assume all are contiguous
++       */
++      startmem = ((((int) &_end) + (PAGE_SIZE - 1)) & PAGE_MASK);
++      endmem = PAGE_OFFSET;
++      for (i = 0; i < m68k_num_memory; ++i)
++              endmem += m68k_memory[i].size;
++
++      printk(KERN_INFO "starting up linux startmem 0x%lx, endmem 0x%lx, \
++              size %luMB\n", startmem,  endmem, (endmem - startmem) >> 20);
++
++      memset(irq_enable, 0, sizeof(irq_enable));
++
++      /*
++       * Setup coldfire mach-specific handlers
++       */
++      mach_max_dma_address    = 0xffffffff;
++      mach_sched_init         = coldfire_sched_init;
++      mach_tick               = coldfire_tick;
++      mach_gettimeoffset      = coldfire_gettimeoffset;
++      mach_reset              = coldfire_reboot;
++/*    mach_hwclk              = coldfire_hwclk; to be done */
++      mach_get_model          = coldfire_get_model;
++
++      coldfire_bootmem_alloc(startmem, endmem-1);
++
++      /*
++       * initrd setup
++       */
++/* #ifdef CONFIG_BLK_DEV_INITRD
++      if (m68k_ramdisk.size)  {
++              reserve_bootmem (__pa(m68k_ramdisk.addr), m68k_ramdisk.size);
++              initrd_start = (unsigned long) m68k_ramdisk.addr;
++              initrd_end = initrd_start + m68k_ramdisk.size;
++              printk (KERN_DEBUG "initrd: %08lx - %08lx\n", initrd_start,
++                      initrd_end);
++      }
++#endif */
++
++#if defined(CONFIG_DUMMY_CONSOLE) || defined(CONFIG_FRAMEBUFFER_CONSOLE)
++      conswitchp = &dummy_con;
++#endif
++
++#if defined(CONFIG_SERIAL_COLDFIRE)
++      /*
++       * This causes trouble when it is re-registered later.
++       * Currently this is fixed by conditionally commenting
++       * out the register_console in mcf_serial.c
++       */
++      register_console(&mcfrs_console);
++#endif
++}
+--- /dev/null
++++ b/arch/m68k/coldfire/entry.S
+@@ -0,0 +1,711 @@
++/*
++ *  arch/m68k/coldfire/entry.S
++ *
++ *  Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
++ *  Copyright (C) 1998  D. Jeff Dionne <jeff@lineo.ca>,
++ *                      Kenneth Albanowski <kjahds@kjahds.com>,
++ *  Copyright (C) 2000  Lineo Inc. (www.lineo.com)
++ *  Copyright (C) 2004-2006  Macq Electronique SA. (www.macqel.com)
++ *  Matt Waddel Matt.Waddel@freescale.com
++ *  Kurt Mahan kmahan@freescale.com
++ *  Copyright Freescale Semiconductor, Inc. 2007
++ *
++ *  Modify irq status in buserr -- (c) Copyright 2008, SYSTEM electronic Gmbh
++ *
++ * Based on:
++ *
++ *  arch/m68knommu/platform/5307/entry.S &
++ *  arch/m68k/kernel/entry.S
++ *
++ *  Copyright (C) 1991, 1992  Linus Torvalds
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file README.legal in the main directory of this archive
++ * for more details.
++ *
++ * Linux/m68k support by Hamish Macdonald
++ *
++ * ColdFire support by Greg Ungerer (gerg@snapgear.com)
++ * 5307 fixes by David W. Miller
++ * linux 2.4 support David McCullough <davidm@snapgear.com>
++ * Bug, speed and maintainability fixes by Philippe De Muyter <phdm@macqel.be>
++ * Ported to mmu Coldfire by Matt Waddel
++ */
++
++#include <linux/sys.h>
++#include <linux/linkage.h>
++#include <asm/cf_entry.h>
++#include <asm/errno.h>
++#include <asm/setup.h>
++#include <asm/segment.h>
++#include <asm/traps.h>
++#include <asm/unistd.h>
++
++/*
++ * TASK_INFO:
++ *
++ *  - TINFO_PREEMPT (struct thread_info / preempt_count)
++ *      Used to keep track of preemptability
++ *  - TINFO_FLAGS (struct thread_info / flags - include/asm-m68k/thread_info.h)
++ *      Various bit flags that are checked for scheduling/tracing
++ *    Bits 0-7  are checked every exception exit
++ *         8-15 are checked every syscall exit
++ *
++ *      TIF_SIGPENDING                6
++ *      TIF_NEED_RESCHED      7
++ *      TIF_DELAYED_TRACE     14
++ *      TIF_SYSCALL_TRACE     15
++ *      TIF_MEMDIE            16 (never checked here)
++ */
++
++.bss
++
++sw_ksp:
++.long 0
++
++sw_usp:
++.long 0
++
++.text
++
++.globl system_call
++.globl buserr
++.globl trap
++.globl resume
++.globl ret_from_exception
++.globl ret_from_signal
++.globl sys_call_table
++.globl ret_from_interrupt
++.globl inthandler
++
++ENTRY(buserr)
++#ifdef CONFIG_COLDFIRE_FOO
++      movew   #0x2700,%sr             /* lock interrupts */
++#endif
++      SAVE_ALL_INT
++#ifdef        CONFIG_COLDFIRE_FOO
++      movew   PT_SR(%sp),%d3          /* get original %sr */
++      oril    #0x2000,%d3             /* set supervisor mode in it */
++      movew   %d3,%sr                 /* recover irq state */
++#endif
++      GET_CURRENT(%d0)
++      movel   %sp,%sp@-               /* stack frame pointer argument */
++      jsr     buserr_c
++      addql   #4,%sp
++      jra     .Lret_from_exception
++
++ENTRY(trap)
++      SAVE_ALL_INT
++      GET_CURRENT(%d0)
++      movel   %sp,%sp@-               /* stack frame pointer argument */
++      jsr     trap_c
++      addql   #4,%sp
++      jra     .Lret_from_exception
++
++      /* After a fork we jump here directly from resume,
++         %d1 contains the previous task schedule_tail */
++ENTRY(ret_from_fork)
++      movel   %d1,%sp@-
++      jsr     schedule_tail
++      addql   #4,%sp
++      jra     .Lret_from_exception
++
++do_trace_entry:
++      movel   #-ENOSYS,%d1            /* needed for strace */
++      movel   %d1,%sp@(PT_D0)
++      subql   #4,%sp
++      SAVE_SWITCH_STACK
++      jbsr    syscall_trace
++      RESTORE_SWITCH_STACK
++      addql   #4,%sp
++      movel   %sp@(PT_ORIG_D0),%d0
++      cmpl    #NR_syscalls,%d0
++      jcs     syscall
++badsys:
++      movel   #-ENOSYS,%d1
++      movel   %d1,%sp@(PT_D0)
++      jra     ret_from_exception
++
++do_trace_exit:
++      subql   #4,%sp
++      SAVE_SWITCH_STACK
++      jbsr    syscall_trace
++      RESTORE_SWITCH_STACK
++      addql   #4,%sp
++      jra     .Lret_from_exception
++
++ENTRY(ret_from_signal)
++      RESTORE_SWITCH_STACK
++      addql   #4,%sp
++      jra     .Lret_from_exception
++
++ENTRY(system_call)
++      SAVE_ALL_SYS
++
++      GET_CURRENT(%d1)
++      /* save top of frame */
++      movel   %sp,%curptr@(TASK_THREAD+THREAD_ESP0)
++
++      /* syscall trace */
++      tstb    %curptr@(TASK_INFO+TINFO_FLAGS+2)
++      jmi     do_trace_entry          /* SYSCALL_TRACE is set */
++      cmpl    #NR_syscalls,%d0
++      jcc     badsys
++syscall:
++      movel   #sys_call_table,%a0
++      asll    #2,%d0
++      addl    %d0,%a0
++      movel   %a0@,%a0
++      jsr     %a0@
++      movel   %d0,%sp@(PT_D0)         /* save the return value */
++ret_from_syscall:
++      movew   %curptr@(TASK_INFO+TINFO_FLAGS+2),%d0
++      jne     syscall_exit_work       /* flags set so process */
++1:    RESTORE_ALL
++
++syscall_exit_work:
++      btst    #5,%sp@(PT_SR)          /* check if returning to kernel */
++      bnes    1b                      /* if so, skip resched, signals */
++
++      btstl   #15,%d0                 /* check if SYSCALL_TRACE */
++      jne     do_trace_exit
++      btstl   #14,%d0                 /* check if DELAYED_TRACE */
++      jne     do_delayed_trace
++      btstl   #6,%d0                  /* check if SIGPENDING */
++      jne     do_signal_return
++      pea     resume_userspace
++      jra     schedule
++
++ENTRY(ret_from_exception)
++.Lret_from_exception:
++      btst    #5,%sp@(PT_SR)          /* check if returning to kernel */
++      bnes    1f                      /* if so, skip resched, signals */
++      movel   %d0,%sp@-               /* Only allow interrupts when we are  */
++      move    %sr,%d0                 /* last one on the kernel stack,      */
++      andl    #ALLOWINT,%d0           /* otherwise stack overflow can occur */
++      move    %d0,%sr                 /* during heavy interrupt load.       */
++      movel   %sp@+,%d0
++
++resume_userspace:
++      moveb   %curptr@(TASK_INFO+TINFO_FLAGS+3),%d0
++      jne     exit_work       /* SIGPENDING and/or NEED_RESCHED set */
++1:    RESTORE_ALL
++
++exit_work:
++      /* save top of frame */
++      movel   %sp,%curptr@(TASK_THREAD+THREAD_ESP0)
++      btstl   #6,%d0                  /* check for SIGPENDING in flags */
++      jne     do_signal_return
++      pea     resume_userspace
++      jra     schedule
++
++do_signal_return:
++      subql   #4,%sp                  /* dummy return address */
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      clrl    %sp@-
++      bsrl    do_signal
++      addql   #8,%sp
++      RESTORE_SWITCH_STACK
++      addql   #4,%sp
++      jbra    resume_userspace
++
++do_delayed_trace:
++      bclr    #7,%sp@(PT_SR)          /* clear trace bit in SR */
++      pea     1                       /* send SIGTRAP */
++      movel   %curptr,%sp@-
++      pea     LSIGTRAP
++      jbsr    send_sig
++      addql   #8,%sp
++      addql   #4,%sp
++      jbra    resume_userspace
++
++/*
++ * This is the interrupt handler (for all hardware interrupt
++ * sources). It figures out the vector number and calls the appropriate
++ * interrupt service routine directly.
++ */
++ENTRY(inthandler)
++      SAVE_ALL_INT
++      GET_CURRENT(%d0)
++      addql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++      /* put exception # in d0 */
++      movel   %sp@(PT_VECTOR),%d0
++      swap    %d0                     /* extract bits 25:18 */
++      lsrl    #2,%d0
++      andl    #0x0ff,%d0
++
++      movel   %sp,%sp@-
++      movel   %d0,%sp@-               /* put vector # on stack */
++auto_irqhandler_fixup = . + 2
++      jbsr    process_int             /* process the IRQ */
++      addql   #8,%sp                  /* pop parameters off stack */
++
++ENTRY(ret_from_interrupt)
++ret_from_interrupt:
++
++      subql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++      jeq     ret_from_last_interrupt
++2:    RESTORE_ALL
++
++      ALIGN
++ret_from_last_interrupt:
++      moveb   %sp@(PT_SR),%d0
++      andl    #(~ALLOWINT>>8)&0xff,%d0
++      jne     2b
++
++      /* check if we need to do software interrupts */
++      tstl    irq_stat+CPUSTAT_SOFTIRQ_PENDING
++      jeq     .Lret_from_exception
++      pea     ret_from_exception
++      jra     do_softirq
++
++ENTRY(user_inthandler)
++      SAVE_ALL_INT
++      GET_CURRENT(%d0)
++      addql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++      /* put exception # in d0 */
++      movel   %sp@(PT_VECTOR),%d0
++user_irqvec_fixup = . + 2
++      swap    %d0                     /* extract bits 25:18 */
++      lsrl    #2,%d0
++      andl    #0x0ff,%d0
++
++      movel   %sp,%sp@-
++      movel   %d0,%sp@-               /* put vector # on stack */
++user_irqhandler_fixup = . + 2
++      jbsr    process_int             /* process the IRQ */
++      addql   #8,%sp                  /* pop parameters off stack */
++
++      subql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++      jeq     ret_from_last_interrupt
++        RESTORE_ALL
++
++/* Handler for uninitialized and spurious interrupts */
++
++ENTRY(bad_inthandler)
++      SAVE_ALL_INT
++      GET_CURRENT(%d0)
++      addql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++
++      movel   %sp,%sp@-
++      jsr     handle_badint
++      addql   #4,%sp
++
++      subql   #1,%curptr@(TASK_INFO+TINFO_PREEMPT)
++      jeq     ret_from_last_interrupt
++      RESTORE_ALL
++
++ENTRY(sys_fork)
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      jbsr    m68k_fork
++      addql   #4,%sp
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_clone)
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      jbsr    m68k_clone
++      addql   #4,%sp
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_vfork)
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      jbsr    m68k_vfork
++      addql   #4,%sp
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_sigsuspend)
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      jbsr    do_sigsuspend
++      addql   #4,%sp
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_rt_sigsuspend)
++      SAVE_SWITCH_STACK
++      pea     %sp@(SWITCH_STACK_SIZE)
++      jbsr    do_rt_sigsuspend
++      addql   #4,%sp
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_sigreturn)
++      SAVE_SWITCH_STACK
++      jbsr    do_sigreturn
++      RESTORE_SWITCH_STACK
++      rts
++
++ENTRY(sys_rt_sigreturn)
++      SAVE_SWITCH_STACK
++      jbsr    do_rt_sigreturn
++      RESTORE_SWITCH_STACK
++      rts
++
++resume:
++      /*
++       * Beware - when entering resume, prev (the current task) is
++       * in a0, next (the new task) is in a1,so don't change these
++       * registers until their contents are no longer needed.
++       */
++
++      /* save sr */
++      movew   %sr,%d0
++      movew   %d0,%a0@(TASK_THREAD+THREAD_SR)
++
++      /* save usp */
++      /* Save USP via %a1 (which is saved/restored from %d0) */
++      movel   %a1,%d0
++      movel   %usp,%a1
++      movel   %a1,%a0@(TASK_THREAD+THREAD_USP)
++      movel   %d0,%a1
++
++      /* save non-scratch registers on stack */
++      SAVE_SWITCH_STACK
++
++      /* save current kernel stack pointer */
++      movel   %sp,%a0@(TASK_THREAD+THREAD_KSP)
++
++      /* Return previous task in %d1 */
++      movel   %curptr,%d1
++
++      /* switch to new task (a1 contains new task) */
++      movel   %a1,%curptr
++
++      /* restore the kernel stack pointer */
++      movel   %a1@(TASK_THREAD+THREAD_KSP),%sp
++
++      /* restore non-scratch registers */
++      RESTORE_SWITCH_STACK
++
++      /* restore user stack pointer */
++      movel   %a1@(TASK_THREAD+THREAD_USP),%a0
++      movel   %a0,%usp
++
++      /* restore status register */
++      movew   %a1@(TASK_THREAD+THREAD_SR),%d0
++      movew   %d0,%sr
++
++      rts
++
++.data
++ALIGN
++sys_call_table:
++      .long sys_ni_syscall    /* 0  -  old "setup()" system call*/
++      .long sys_exit
++      .long sys_fork
++      .long sys_read
++      .long sys_write
++      .long sys_open          /* 5 */
++      .long sys_close
++      .long sys_waitpid
++      .long sys_creat
++      .long sys_link
++      .long sys_unlink        /* 10 */
++      .long sys_execve
++      .long sys_chdir
++      .long sys_time
++      .long sys_mknod
++      .long sys_chmod         /* 15 */
++      .long sys_chown16
++      .long sys_ni_syscall                    /* old break syscall holder */
++      .long sys_stat
++      .long sys_lseek
++      .long sys_getpid        /* 20 */
++      .long sys_mount
++      .long sys_oldumount
++      .long sys_setuid16
++      .long sys_getuid16
++      .long sys_stime         /* 25 */
++      .long sys_ptrace
++      .long sys_alarm
++      .long sys_fstat
++      .long sys_pause
++      .long sys_utime         /* 30 */
++      .long sys_ni_syscall                    /* old stty syscall holder */
++      .long sys_ni_syscall                    /* old gtty syscall holder */
++      .long sys_access
++      .long sys_nice
++      .long sys_ni_syscall    /* 35 */        /* old ftime syscall holder */
++      .long sys_sync
++      .long sys_kill
++      .long sys_rename
++      .long sys_mkdir
++      .long sys_rmdir         /* 40 */
++      .long sys_dup
++      .long sys_pipe
++      .long sys_times
++      .long sys_ni_syscall                    /* old prof syscall holder */
++      .long sys_brk           /* 45 */
++      .long sys_setgid16
++      .long sys_getgid16
++      .long sys_signal
++      .long sys_geteuid16
++      .long sys_getegid16     /* 50 */
++      .long sys_acct
++      .long sys_umount                        /* recycled never used phys() */
++      .long sys_ni_syscall                    /* old lock syscall holder */
++      .long sys_ioctl
++      .long sys_fcntl         /* 55 */
++      .long sys_ni_syscall                    /* old mpx syscall holder */
++      .long sys_setpgid
++      .long sys_ni_syscall                    /* old ulimit syscall holder */
++      .long sys_ni_syscall
++      .long sys_umask         /* 60 */
++      .long sys_chroot
++      .long sys_ustat
++      .long sys_dup2
++      .long sys_getppid
++      .long sys_getpgrp       /* 65 */
++      .long sys_setsid
++      .long sys_sigaction
++      .long sys_sgetmask
++      .long sys_ssetmask
++      .long sys_setreuid16    /* 70 */
++      .long sys_setregid16
++      .long sys_sigsuspend
++      .long sys_sigpending
++      .long sys_sethostname
++      .long sys_setrlimit     /* 75 */
++      .long sys_old_getrlimit
++      .long sys_getrusage
++      .long sys_gettimeofday
++      .long sys_settimeofday
++      .long sys_getgroups16   /* 80 */
++      .long sys_setgroups16
++      .long old_select
++      .long sys_symlink
++      .long sys_lstat
++      .long sys_readlink      /* 85 */
++      .long sys_uselib
++      .long sys_swapon
++      .long sys_reboot
++      .long old_readdir
++      .long old_mmap          /* 90 */
++      .long sys_munmap
++      .long sys_truncate
++      .long sys_ftruncate
++      .long sys_fchmod
++      .long sys_fchown16      /* 95 */
++      .long sys_getpriority
++      .long sys_setpriority
++      .long sys_ni_syscall                    /* old profil syscall holder */
++      .long sys_statfs
++      .long sys_fstatfs       /* 100 */
++      .long sys_ni_syscall                    /* ioperm for i386 */
++      .long sys_socketcall
++      .long sys_syslog
++      .long sys_setitimer
++      .long sys_getitimer     /* 105 */
++      .long sys_newstat
++      .long sys_newlstat
++      .long sys_newfstat
++      .long sys_ni_syscall
++      .long sys_ni_syscall    /* 110 */       /* iopl for i386 */
++      .long sys_vhangup
++      .long sys_ni_syscall                    /* obsolete idle() syscall */
++      .long sys_ni_syscall                    /* vm86old for i386 */
++      .long sys_wait4
++      .long sys_swapoff       /* 115 */
++      .long sys_sysinfo
++      .long sys_ipc
++      .long sys_fsync
++      .long sys_sigreturn
++      .long sys_clone         /* 120 */
++      .long sys_setdomainname
++      .long sys_newuname
++      .long sys_cacheflush                    /* modify_ldt for i386 */
++      .long sys_adjtimex
++      .long sys_mprotect      /* 125 */
++      .long sys_sigprocmask
++      .long sys_ni_syscall                    /* old "create_module" */
++      .long sys_init_module
++      .long sys_delete_module
++      .long sys_ni_syscall    /* 130 - old "get_kernel_syms" */
++      .long sys_quotactl
++      .long sys_getpgid
++      .long sys_fchdir
++      .long sys_bdflush
++      .long sys_sysfs         /* 135 */
++      .long sys_personality
++      .long sys_ni_syscall                    /* for afs_syscall */
++      .long sys_setfsuid16
++      .long sys_setfsgid16
++      .long sys_llseek        /* 140 */
++      .long sys_getdents
++      .long sys_select
++      .long sys_flock
++      .long sys_msync
++      .long sys_readv         /* 145 */
++      .long sys_writev
++      .long sys_getsid
++      .long sys_fdatasync
++      .long sys_sysctl
++      .long sys_mlock         /* 150 */
++      .long sys_munlock
++      .long sys_mlockall
++      .long sys_munlockall
++      .long sys_sched_setparam
++      .long sys_sched_getparam        /* 155 */
++      .long sys_sched_setscheduler
++      .long sys_sched_getscheduler
++      .long sys_sched_yield
++      .long sys_sched_get_priority_max
++      .long sys_sched_get_priority_min  /* 160 */
++      .long sys_sched_rr_get_interval
++      .long sys_nanosleep
++      .long sys_mremap
++      .long sys_setresuid16
++      .long sys_getresuid16   /* 165 */
++      .long sys_getpagesize
++      .long sys_ni_syscall                    /* old sys_query_module */
++      .long sys_poll
++      .long sys_nfsservctl
++      .long sys_setresgid16   /* 170 */
++      .long sys_getresgid16
++      .long sys_prctl
++      .long sys_rt_sigreturn
++      .long sys_rt_sigaction
++      .long sys_rt_sigprocmask        /* 175 */
++      .long sys_rt_sigpending
++      .long sys_rt_sigtimedwait
++      .long sys_rt_sigqueueinfo
++      .long sys_rt_sigsuspend
++      .long sys_pread64       /* 180 */
++      .long sys_pwrite64
++      .long sys_lchown16;
++      .long sys_getcwd
++      .long sys_capget
++      .long sys_capset        /* 185 */
++      .long sys_sigaltstack
++      .long sys_sendfile
++      .long sys_ni_syscall                    /* streams1 */
++      .long sys_ni_syscall                    /* streams2 */
++      .long sys_vfork         /* 190 */
++      .long sys_getrlimit
++      .long sys_mmap2
++      .long sys_truncate64
++      .long sys_ftruncate64
++      .long sys_stat64        /* 195 */
++      .long sys_lstat64
++      .long sys_fstat64
++      .long sys_chown
++      .long sys_getuid
++      .long sys_getgid        /* 200 */
++      .long sys_geteuid
++      .long sys_getegid
++      .long sys_setreuid
++      .long sys_setregid
++      .long sys_getgroups     /* 205 */
++      .long sys_setgroups
++      .long sys_fchown
++      .long sys_setresuid
++      .long sys_getresuid
++      .long sys_setresgid     /* 210 */
++      .long sys_getresgid
++      .long sys_lchown
++      .long sys_setuid
++      .long sys_setgid
++      .long sys_setfsuid      /* 215 */
++      .long sys_setfsgid
++      .long sys_pivot_root
++      .long sys_ni_syscall
++      .long sys_ni_syscall
++      .long sys_getdents64    /* 220 */
++      .long sys_gettid
++      .long sys_tkill
++      .long sys_setxattr
++      .long sys_lsetxattr
++      .long sys_fsetxattr     /* 225 */
++      .long sys_getxattr
++      .long sys_lgetxattr
++      .long sys_fgetxattr
++      .long sys_listxattr
++      .long sys_llistxattr    /* 230 */
++      .long sys_flistxattr
++      .long sys_removexattr
++      .long sys_lremovexattr
++      .long sys_fremovexattr
++      .long sys_futex         /* 235 */
++      .long sys_sendfile64
++      .long sys_mincore
++      .long sys_madvise
++      .long sys_fcntl64
++      .long sys_readahead     /* 240 */
++      .long sys_io_setup
++      .long sys_io_destroy
++      .long sys_io_getevents
++      .long sys_io_submit
++      .long sys_io_cancel     /* 245 */
++      .long sys_fadvise64
++      .long sys_exit_group
++      .long sys_lookup_dcookie
++      .long sys_epoll_create
++      .long sys_epoll_ctl     /* 250 */
++      .long sys_epoll_wait
++      .long sys_remap_file_pages
++      .long sys_set_tid_address
++      .long sys_timer_create
++      .long sys_timer_settime /* 255 */
++      .long sys_timer_gettime
++      .long sys_timer_getoverrun
++      .long sys_timer_delete
++      .long sys_clock_settime
++      .long sys_clock_gettime /* 260 */
++      .long sys_clock_getres
++      .long sys_clock_nanosleep
++      .long sys_statfs64
++      .long sys_fstatfs64
++      .long sys_tgkill        /* 265 */
++      .long sys_utimes
++      .long sys_fadvise64_64
++      .long sys_mbind 
++      .long sys_get_mempolicy
++      .long sys_set_mempolicy /* 270 */
++      .long sys_mq_open
++      .long sys_mq_unlink
++      .long sys_mq_timedsend
++      .long sys_mq_timedreceive
++      .long sys_mq_notify     /* 275 */
++      .long sys_mq_getsetattr
++      .long sys_waitid
++      .long sys_ni_syscall                    /* for sys_vserver */
++      .long sys_add_key
++      .long sys_request_key   /* 280 */
++      .long sys_keyctl
++      .long sys_ioprio_set
++      .long sys_ioprio_get
++      .long sys_inotify_init
++      .long sys_inotify_add_watch     /* 285 */
++      .long sys_inotify_rm_watch
++      .long sys_migrate_pages
++      .long sys_openat
++      .long sys_mkdirat
++      .long sys_mknodat               /* 290 */
++      .long sys_fchownat
++      .long sys_futimesat
++      .long sys_fstatat64
++      .long sys_unlinkat
++      .long sys_renameat              /* 295 */
++      .long sys_linkat
++      .long sys_symlinkat
++      .long sys_readlinkat
++      .long sys_fchmodat
++      .long sys_faccessat             /* 300 */
++      .long sys_ni_syscall                    /* Reserved for pselect6 */
++      .long sys_ni_syscall                    /* Reserved for ppoll */
++      .long sys_unshare
++      .long sys_set_robust_list
++      .long sys_get_robust_list       /* 305 */
++      .long sys_splice
++      .long sys_sync_file_range
++      .long sys_tee
++      .long sys_vmsplice
++      .long sys_move_pages            /* 310 */
++
+--- /dev/null
++++ b/arch/m68k/coldfire/head.S
+@@ -0,0 +1,661 @@
++/*
++ *  head.S is the MMU enabled ColdFire specific initial boot code
++ *
++ *  Ported to ColdFire by
++ *    Matt Waddel Matt.Waddel@freescale.com
++ *    Kurt Mahan kmahan@freescale.com
++ *  Copyright Freescale Semiconductor, Inc. 2007, 2008
++ *  Phys kernel mapping Copyright Daniel Krueger, SYSTEC electornic GmbH 2008
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  Parts of this code came from arch/m68k/kernel/head.S
++ */
++#include <linux/linkage.h>
++#include <linux/init.h>
++#include <asm/bootinfo.h>
++#include <asm/setup.h>
++#include <asm/entry.h>
++#include <asm/pgtable.h>
++#include <asm/page.h>
++#include <asm/coldfire.h>
++#include <asm/mcfuart.h>
++#include <asm/cfcache.h>
++
++#define DEBUG
++
++.globl kernel_pg_dir
++.globl availmem
++.globl set_context
++.globl set_fpga
++
++#ifdef DEBUG
++/* When debugging use readable names for labels */
++#ifdef __STDC__
++#define L(name) .head.S.##name
++#else
++#define L(name) .head.S./**/name
++#endif
++#else
++#ifdef __STDC__
++#define L(name) .L##name
++#else
++#define L(name) .L/**/name
++#endif
++#endif
++
++/* The __INITDATA stuff is a no-op when ftrace or kgdb are turned on */
++#ifndef __INITDATA
++#define __INITDATA    .data
++#define __FINIT               .previous
++#endif
++
++#if CONFIG_SDRAM_BASE != PAGE_OFFSET
++/*
++ * Kernel mapped to virtual ram address.
++ *
++ * M5445x:
++ *    Data[0]: 0xF0000000 -> 0xFFFFFFFF       System regs
++ *    Data[1]: 0xA0000000 -> 0xAFFFFFFF       PCI
++ *    Code[0]: Not Mapped
++ *    Code[1]: Not Mapped
++ *
++ * M547x/M548x
++ *    Data[0]: 0xF0000000 -> 0xFFFFFFFF       System regs
++ *    Data[1]: Not Mapped
++ *    Code[0]: Not Mapped
++ *    Code[1]: Not Mapped
++ */
++#if defined(CONFIG_M5445X)
++#define ACR0_DEFAULT  #0xF00FA048   /* System regs */
++#define ACR1_DEFAULT  #0xA00FA048   /* PCI */
++#define ACR2_DEFAULT  #0x00000000   /* Not Mapped */
++#define ACR3_DEFAULT  #0x00000000   /* Not Mapped */
++#elif defined(CONFIG_M547X_8X)
++#define ACR0_DEFAULT  #0xF00FA048   /* System Regs */
++#define ACR1_DEFAULT  #0x00000000   /* Not Mapped */
++#define ACR2_DEFAULT  #0x00000000   /* Not Mapped */
++#define ACR3_DEFAULT  #0x00000000   /* Not Mapped */
++#endif
++
++#else /* CONFIG_SDRAM_BASE = PAGE_OFFSET */
++/*
++ * Kernel mapped to physical ram address.
++ *
++ * M5445x:
++ *    Data[0]: 0xF0000000 -> 0xFFFFFFFF       System regs
++ *    Data[1]: 0x40000000 -> 0x4FFFFFFF       SDRAM - uncached
++ *    Code[0]: Not Mapped
++ *    Code[1]: 0x40000000 -> 0x4FFFFFFF       SDRAM - cached
++ *
++ * M547x/M548x
++ *    Data[0]: 0xF0000000 -> 0xFFFFFFFF       System regs
++ *    Data[1]: 0x00000000 -> 0x0FFFFFFF       SDRAM - uncached
++ *    Code[0]: Not Mapped
++ *    Code[1]: 0x00000000 -> 0x0FFFFFFF       SDRAM - cached
++ */
++#if defined(CONFIG_M5445X)
++#define ACR0_DEFAULT  #0xF00FA048   /* System Regs */
++#define ACR1_DEFAULT  #0x400FA048   /* SDRAM uncached */
++#define ACR2_DEFAULT  #0x00000000   /* Not mapped */
++#define ACR3_DEFAULT  #0x400FA008   /* SDRAM cached */
++#elif defined(CONFIG_M547X_8X)
++#define ACR0_DEFAULT  #0xF00FA048   /* System Regs */
++#define ACR1_DEFAULT  #0x000FA048   /* SDRAM uncached */
++#define ACR2_DEFAULT  #0x00000000   /* Not mapped */
++#define ACR3_DEFAULT  #0x000FA008   /* SDRAM cached */
++#endif
++#endif
++
++/* Several macros to make the writing of subroutines easier:
++ * - func_start marks the beginning of the routine which setups the frame
++ *   register and saves the registers, it also defines another macro
++ *   to automatically restore the registers again.
++ * - func_return marks the end of the routine and simply calls the prepared
++ *   macro to restore registers and jump back to the caller.
++ * - func_define generates another macro to automatically put arguments
++ *   onto the stack call the subroutine and cleanup the stack again.
++ */
++
++.macro        load_symbol_address     symbol,register
++      movel   #\symbol,\register
++.endm
++      
++.macro        func_start      name,saveregs,savesize,stack=0
++L(\name):
++      linkw   %a6,#-\stack
++      subal   #(\savesize),%sp
++      moveml  \saveregs,%sp@
++.set  stackstart,-\stack
++
++.macro        func_return_\name
++      moveml  %sp@,\saveregs
++      addal   #(\savesize),%sp
++      unlk    %a6
++      rts
++.endm
++.endm
++
++.macro        func_return     name
++      func_return_\name
++.endm
++
++.macro        func_call       name
++      jbsr    L(\name)
++.endm
++
++.macro        move_stack      nr,arg1,arg2,arg3,arg4
++.if   \nr
++      move_stack      "(\nr-1)",\arg2,\arg3,\arg4
++      movel   \arg1,%sp@-
++.endif
++.endm
++
++.macro        func_define     name,nr=0
++.macro        \name   arg1,arg2,arg3,arg4
++      move_stack      \nr,\arg1,\arg2,\arg3,\arg4
++      func_call       \name
++.if   \nr
++      lea     %sp@(\nr*4),%sp
++.endif
++.endm
++.endm
++
++func_define   serial_putc,1
++
++.macro        putc    ch
++      pea     \ch
++      func_call       serial_putc
++      addql   #4,%sp
++.endm
++
++.macro        dputc   ch
++#ifdef DEBUG
++      putc    \ch
++#endif
++.endm
++
++func_define   putn,1
++
++.macro        dputn   nr
++#ifdef DEBUG
++      putn    \nr
++#endif
++.endm
++
++#if CONFIG_SDRAM_BASE != PAGE_OFFSET
++/*
++      mmu_map  -  creates a new TLB entry
++
++      virt_addr      Must be on proper boundary
++      phys_addr      Must be on proper boundary
++      itlb           MMUOR_ITLB if instruction TLB or 0
++      asid           address space ID
++      shared_global  MMUTR_SG if shared between different ASIDs or 0
++      size_code      MMUDR_SZ1M  1 MB
++                     MMUDR_SZ4K  4 KB
++                     MMUDR_SZ8K  8 KB
++                     MMUDR_SZ16M 16 MB
++      cache_mode     MMUDR_INC   instruction non-cacheable
++                       MMUDR_IC    instruction cacheable
++                       MMUDR_DWT   data writethrough
++                     MMUDR_DCB   data copyback
++                     MMUDR_DNCP  data non-cacheable, precise
++                     MMUDR_DNCIP data non-cacheable, imprecise
++      super_prot     MMUDR_SP if user mode generates exception or 0
++      readable       MMUDR_R if permits read access (data TLB) or 0
++      writable       MMUDR_W if permits write access (data TLB) or 0
++      executable     MMUDR_X if permits execute access (instruction TLB) or 0
++      locked         MMUDR_LK prevents TLB entry from being replaced or 0
++      temp_data_reg  a data register to use for temporary values
++*/
++.macro mmu_map        virt_addr,phys_addr,itlb,asid,shared_global,size_code,cache_mode,super_prot,readable,writable,executable,locked,temp_data_reg
++      /* Set up search of TLB. */
++      movel   #(\virt_addr+1), \temp_data_reg
++      movel   \temp_data_reg, MMUAR
++      /* Search.  */
++      movel   #(MMUOR_STLB + MMUOR_ADR +\itlb), \temp_data_reg
++      movew   \temp_data_reg, (MMUOR)
++      /* Set up tag value.  */
++      movel   #(\virt_addr + \asid + \shared_global + MMUTR_V), \temp_data_reg
++      movel   \temp_data_reg, MMUTR
++      /* Set up data value.  */
++      movel   #(\phys_addr + \size_code + \cache_mode + \super_prot + \readable + \writable + \executable + \locked), \temp_data_reg
++      movel   \temp_data_reg, MMUDR
++      /* Save it.  */
++      movel   #(MMUOR_ACC + MMUOR_UAA + \itlb), \temp_data_reg
++      movew   \temp_data_reg, (MMUOR)
++.endm /* mmu_map */
++
++.macro mmu_unmap      virt_addr,itlb,temp_data_reg
++      /* Set up search of TLB. */
++      movel   #(\virt_addr+1), \temp_data_reg
++      movel   \temp_data_reg, MMUAR
++      /* Search.  */
++      movel   #(MMUOR_STLB + MMUOR_ADR +\itlb), \temp_data_reg
++      movew   \temp_data_reg, (MMUOR)
++      /* Test for hit.  */
++      movel   MMUSR,\temp_data_reg
++      btst    #MMUSR_HITN,\temp_data_reg
++      beq     1f
++      /* Read the TLB.  */
++      movel   #(MMUOR_RW + MMUOR_ACC +\itlb), \temp_data_reg
++      movew   \temp_data_reg, (MMUOR)
++      movel   MMUSR,\temp_data_reg
++      /* Set up tag value.  */
++      movel   #0, \temp_data_reg
++      movel   \temp_data_reg, MMUTR
++      /* Set up data value.  */
++      movel   #0, \temp_data_reg
++      movel   \temp_data_reg, MMUDR
++      /* Save it.  */
++      movel   #(MMUOR_ACC + MMUOR_UAA + \itlb), \temp_data_reg
++      movew   \temp_data_reg, (MMUOR)
++1:    
++.endm /* mmu_unmap */
++#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */
++
++/* .text */
++.section ".text.head","ax"
++ENTRY(_stext)
++/* Version numbers of the bootinfo interface -- if we later pass info
++ * from boot ROM we might want to put something real here.
++ *
++ * The area from _stext to _start will later be used as kernel pointer table
++ */
++      bras    1f      /* Jump over bootinfo version numbers */
++
++      .long   BOOTINFOV_MAGIC
++      .long   0
++#if CONFIG_SDRAM_BASE != PAGE_OFFSET
++1:    jmp     __start-(0xc0000000-CONFIG_SDRAM_BASE)
++#else
++1:    jmp     __start
++#endif
++
++.equ  kernel_pg_dir,_stext
++.equ  .,_stext+0x1000
++
++ENTRY(_start)
++      jra     __start
++__INIT
++ENTRY(__start)
++/* Save the location of u-boot info - cmd line, bd_info, etc. */
++      movel   %a7,%a4         /* Don't use %a4 before cf_early_init */
++      addl    #0x00000004,%a4 /* offset past top */
++      addl    #(PAGE_OFFSET-CONFIG_SDRAM_BASE),%a4    /* high mem offset */
++
++/* Setup initial stack pointer */
++      movel   #CONFIG_SDRAM_BASE+0x1000,%sp
++
++/* Setup usp */
++      subl    %a0,%a0
++      movel   %a0,%usp
++
++#if defined(CONFIG_M5445X)
++      movel   #0x80000000, %d0
++      movec   %d0, %rambar1
++#elif defined(CONFIG_M547X_8X)
++      movel   #MCF_MBAR, %d0
++      movec   %d0, %mbar
++      move.l  #(MCF_RAMBAR0 + 0x21), %d0
++      movec   %d0, %rambar0
++      move.l  #(MCF_RAMBAR1 + 0x21), %d0
++      movec   %d0, %rambar1
++#endif
++
++      movew   #0x2700,%sr
++
++/* reset cache */
++      movel   #(CF_CACR_ICINVA + CF_CACR_DCINVA),%d0
++      movecl  %d0,%cacr
++
++      movel   #(MMU_BASE+1),%d0
++      movecl  %d0,%mmubar
++      movel   #MMUOR_CA,%a0                   /* Clear tlb entries */
++      movew   %a0,(MMUOR)
++      movel   #(MMUOR_CA + MMUOR_ITLB),%a0    /* Use ITLB for searches */
++      movew   %a0,(MMUOR)
++      movel   #0,%a0                          /* Clear Addr Space User ID */
++      movecl  %a0,%asid 
++
++/* setup ACRs */
++      movel   ACR0_DEFAULT, %d0               /* ACR0 (DATA) setup */
++      movec   %d0, %acr0
++      nop
++      movel   ACR1_DEFAULT, %d0               /* ACR1 (DATA) setup */
++      movec   %d0, %acr1
++      nop
++      movel   ACR2_DEFAULT, %d0               /* ACR2 (CODE) setup */
++      movec   %d0, %acr2
++      nop
++      movel   ACR3_DEFAULT, %d0               /* ACR3 (CODE) setup */
++      movec   %d0, %acr3
++      nop
++
++      /* If you change the memory size to another value make a matching 
++         change in paging_init(cf-mmu.c) to zones_size[]. */
++
++#if CONFIG_SDRAM_BASE != PAGE_OFFSET
++#if defined(CONFIG_M5445X)
++      /* Map 256MB as code */
++      mmu_map (PAGE_OFFSET+0*0x1000000),  (PHYS_OFFSET+0*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+1*0x1000000),  (PHYS_OFFSET+1*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+2*0x1000000),  (PHYS_OFFSET+2*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+3*0x1000000),  (PHYS_OFFSET+3*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+4*0x1000000),  (PHYS_OFFSET+4*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+5*0x1000000),  (PHYS_OFFSET+5*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+6*0x1000000),  (PHYS_OFFSET+6*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+7*0x1000000),  (PHYS_OFFSET+7*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+8*0x1000000),  (PHYS_OFFSET+8*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+9*0x1000000),  (PHYS_OFFSET+9*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+10*0x1000000), (PHYS_OFFSET+10*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+11*0x1000000), (PHYS_OFFSET+11*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+12*0x1000000), (PHYS_OFFSET+12*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+13*0x1000000), (PHYS_OFFSET+13*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+14*0x1000000), (PHYS_OFFSET+14*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+15*0x1000000), (PHYS_OFFSET+15*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_IC,  MMUDR_SP, \
++              0, 0, MMUDR_X, MMUDR_LK, %d0
++
++      /* Map 256MB as data also */
++      mmu_map (PAGE_OFFSET+0*0x1000000),  (PHYS_OFFSET+0*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+1*0x1000000),  (PHYS_OFFSET+1*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+2*0x1000000),  (PHYS_OFFSET+2*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+3*0x1000000),  (PHYS_OFFSET+3*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+4*0x1000000),  (PHYS_OFFSET+4*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+5*0x1000000),  (PHYS_OFFSET+5*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+6*0x1000000),  (PHYS_OFFSET+6*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+7*0x1000000),  (PHYS_OFFSET+7*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+8*0x1000000),  (PHYS_OFFSET+8*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+9*0x1000000),  (PHYS_OFFSET+9*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+10*0x1000000), (PHYS_OFFSET+10*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+11*0x1000000), (PHYS_OFFSET+11*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+12*0x1000000), (PHYS_OFFSET+12*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+13*0x1000000), (PHYS_OFFSET+13*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+14*0x1000000), (PHYS_OFFSET+14*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+15*0x1000000), (PHYS_OFFSET+15*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++
++      /* Map ATA registers -- sacrifice a data TLB due to the hw design */
++      mmu_map (0x90000000), (0x90000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, MMUDR_LK, %d0
++
++#elif defined(CONFIG_M547X_8X)
++
++      /* Map first 8 MB as code */
++      mmu_map (PAGE_OFFSET+0*1024*1024),  (0*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+1*1024*1024),  (1*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+2*1024*1024),  (2*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+3*1024*1024),  (3*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+4*1024*1024),  (4*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+5*1024*1024),  (5*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+6*1024*1024),  (6*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+7*1024*1024),  (7*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, MMUDR_X, \
++              MMUDR_LK, %d0
++
++      /* Map first 8 MB as data */
++      mmu_map (PAGE_OFFSET+0*1024*1024),  (0*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+1*1024*1024),  (1*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+2*1024*1024),  (2*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+3*1024*1024),  (3*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+4*1024*1024),  (4*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+5*1024*1024),  (5*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+6*1024*1024),  (6*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++      mmu_map (PAGE_OFFSET+7*1024*1024),  (7*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, MMUDR_LK, %d0
++#endif
++      /*
++       * Do unity mapping to enable the MMU.  Map first chunk of memory
++       * in place as code/data.  The TLBs will be deleted after the MMU is
++       * enabled and we are executing in high memory.
++       */
++
++#if defined(CONFIG_M5445X)
++      /* Map first 16 MB as code */
++      mmu_map (PHYS_OFFSET+0*0x1000000), (PHYS_OFFSET+0*0x1000000), \
++              MMUOR_ITLB, 0, MMUTR_SG, MMUDR_SZ16M, MMUDR_INC,  MMUDR_SP, 0, \
++              0, MMUDR_X, 0, %d0
++      /* Map first 16 MB as data too  */
++      mmu_map (PHYS_OFFSET+0*0x1000000), (PHYS_OFFSET+0*0x1000000), 0, 0, \
++              MMUTR_SG, MMUDR_SZ16M, MMUDR_DNCP, MMUDR_SP, MMUDR_R, MMUDR_W, \
++              0, 0, %d0
++#elif defined(CONFIG_M547X_8X)
++      /* Map first 4 MB as code */
++      mmu_map (0*1024*1024), (0*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, \
++              MMUDR_X, 0, %d0
++      mmu_map (1*1024*1024), (1*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, \
++              MMUDR_X, 0, %d0
++      mmu_map (2*1024*1024), (2*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, \
++              MMUDR_X, 0, %d0
++      mmu_map (3*1024*1024), (3*1024*1024), MMUOR_ITLB, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_IC,  MMUDR_SP, 0, 0, \
++              MMUDR_X, 0, %d0
++
++      /* Map first 4 MB as data too */
++      mmu_map (0*1024*1024), (0*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DCB, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, 0, %d0
++      mmu_map (1*1024*1024), (1*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DCB, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, 0, %d0
++      mmu_map (2*1024*1024), (2*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DCB, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, 0, %d0
++      mmu_map (3*1024*1024), (3*1024*1024), 0, 0, \
++              MMUTR_SG, MMUDR_SZ1M, MMUDR_DCB, MMUDR_SP, MMUDR_R, \
++              MMUDR_W, 0, 0, %d0
++#endif
++#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */
++
++      /* Turn on MMU */
++      movel   #(MMUCR_EN),%a0
++      movel   %a0,MMUCR
++      nop     /* This synchs the pipeline after a write to MMUCR */
++
++      movel   #__running_high,%a0  /* Get around PC-relative addressing. */
++      jmp     %a0@
++
++ENTRY(__running_high)
++      load_symbol_address _stext,%sp
++      movel   L(memory_start),%a0
++      movel   %a0,availmem
++      load_symbol_address L(phys_kernel_start),%a0
++      load_symbol_address _stext,%a1
++      subl    #_stext,%a1
++      addl    #PAGE_OFFSET,%a1
++      movel   %a1,%a0@
++
++/* zero bss */
++      lea     _sbss,%a0
++      lea     _ebss,%a1
++      clrl    %d0
++_loop_bss:
++      movel   %d0,(%a0)+
++      cmpl    %a0,%a1
++      bne     _loop_bss
++
++      /* Unmap unity mappings */
++#if CONFIG_SDRAM_BASE != PAGE_OFFSET
++#if defined(CONFIG_M5445X)
++      mmu_unmap (PHYS_OFFSET+0*0x1000000), MMUOR_ITLB, %d0
++      mmu_unmap (PHYS_OFFSET+0*0x1000000), 0, %d0
++#elif defined(CONFIG_M547X_8X)
++      mmu_unmap (PHYS_OFFSET+0*0x1000000), MMUOR_ITLB, %d0
++      mmu_unmap (PHYS_OFFSET+1*0x1000000), MMUOR_ITLB, %d0
++      mmu_unmap (PHYS_OFFSET+2*0x1000000), MMUOR_ITLB, %d0
++      mmu_unmap (PHYS_OFFSET+3*0x1000000), MMUOR_ITLB, %d0
++      mmu_unmap (PHYS_OFFSET+0*0x1000000), 0, %d0
++      mmu_unmap (PHYS_OFFSET+1*0x1000000), 0, %d0
++      mmu_unmap (PHYS_OFFSET+2*0x1000000), 0, %d0
++      mmu_unmap (PHYS_OFFSET+3*0x1000000), 0, %d0
++#endif
++#endif /* CONFIG_SDRAM_BASE != PAGE_OFFSET */
++
++/* Setup initial stack pointer */
++      lea     init_task,%a2 
++      lea     init_thread_union+THREAD_SIZE,%sp
++      subl    %a6,%a6         /* clear a6 for gdb */
++
++#ifdef CONFIG_MCF_USER_HALT
++/* Setup debug control reg to allow halts from user space */
++      lea     wdbg_uhe,%a0
++      wdebug  (%a0)
++#endif
++
++      movel   %a4,uboot_info_stk /* save uboot info to variable */
++      jsr     cf_early_init
++      jmp     start_kernel
++
++.section ".text.head","ax"
++set_context:
++func_start    set_context,%d0,(1*4)
++      movel   12(%sp),%d0
++      movec   %d0,%asid
++func_return   set_context
++
++#ifdef CONFIG_M5445X
++/*
++ * set_fpga(addr,val) on the M5445X
++ *
++ * Map in 0x00000000 -> 0x0fffffff and then do the write.
++ */
++set_fpga:
++#if 0
++      movew   %sr,%d1
++      movew   #0x2700,%sr
++      movel   ACR0_FPGA, %d0
++      movec   %d0, %acr0
++      nop
++      moveal  4(%sp),%a0
++      movel   8(%sp),%a0@
++      movel   ACR0_DEFAULT, %d0
++      movec   %d0, %acr0
++      nop
++      movew   %d1,%sr
++#endif
++      rts
++#endif
++
++      .data
++      .align  4
++
++availmem:
++      .long   0
++L(phys_kernel_start):
++      .long   PAGE_OFFSET
++L(kernel_end):
++      .long   0
++L(memory_start):
++      .long   PAGE_OFFSET_RAW
++
++#ifdef CONFIG_MCF_USER_HALT
++/*
++ * Enable User Halt Enable in the debug control register.
++ */
++wdbg_uhe:
++      .word   0x2c80  /* DR0 */
++      .word   0x00b0  /* 31:16 */
++      .word   0x0400  /* 15:0 -- enable UHE */
++      .word   0x0000  /* unused */
++#endif
++
++
+--- /dev/null
++++ b/arch/m68k/coldfire/ints.c
+@@ -0,0 +1,463 @@
++/*
++ * linux/arch/m68k/coldfire/ints.c -- General interrupt handling code
++ *
++ * Copyright (C) 1999-2002  Greg Ungerer (gerg@snapgear.com)
++ * Copyright (C) 1998  D. Jeff Dionne <jeff@lineo.ca>,
++ *                     Kenneth Albanowski <kjahds@kjahds.com>,
++ * Copyright (C) 2000  Lineo Inc. (www.lineo.com)
++ *
++ * Copyright Freescale Semiconductor, Inc. 2007, 2008
++ *    Kurt Mahan kmahan@freescale.com
++ *    Matt Waddel Matt.Waddel@freescale.com
++ *
++ * Based on:
++ * linux/arch/m68k/kernel/ints.c &
++ * linux/arch/m68knommu/5307/ints.c
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/kernel_stat.h>
++#include <linux/errno.h>
++#include <linux/seq_file.h>
++#include <linux/interrupt.h>
++
++#include <asm/system.h>
++#include <asm/irq.h>
++#include <asm/traps.h>
++#include <asm/page.h>
++#include <asm/machdep.h>
++#include <asm/irq_regs.h>
++
++#include <asm/mcfsim.h>
++
++/*
++ * IRQ Handler lists.
++ */
++static struct irq_node *irq_list[SYS_IRQS];
++static struct irq_controller *irq_controller[SYS_IRQS];
++static int irq_depth[SYS_IRQS];
++
++/*
++ * IRQ Controller
++ */
++#if defined(CONFIG_M5445X)
++void m5445x_irq_enable(unsigned int irq);
++void m5445x_irq_disable(unsigned int irq);
++static struct irq_controller m5445x_irq_controller = {
++      .name           = "M5445X",
++      .lock           = SPIN_LOCK_UNLOCKED,
++      .enable         = m5445x_irq_enable,
++      .disable        = m5445x_irq_disable,
++};
++#elif defined(CONFIG_M547X_8X)
++void m547x_8x_irq_enable(unsigned int irq);
++void m547x_8x_irq_disable(unsigned int irq);
++static struct irq_controller m547x_8x_irq_controller = {
++      .name           = "M547X_8X",
++      .lock           = SPIN_LOCK_UNLOCKED,
++      .enable         = m547x_8x_irq_enable,
++      .disable        = m547x_8x_irq_disable,
++};
++#else
++# error No IRQ controller defined
++#endif
++
++#define       POOL_SIZE       SYS_IRQS
++static struct irq_node  pool[POOL_SIZE];
++static struct irq_node *get_irq_node(void);
++
++/* The number of spurious interrupts */
++unsigned int num_spurious;
++asmlinkage void handle_badint(struct pt_regs *regs);
++
++/*
++ * void init_IRQ(void)
++ *
++ * This function should be called during kernel startup to initialize
++ * the IRQ handling routines.
++ */
++void __init init_IRQ(void)
++{
++      int i;
++
++#if defined(CONFIG_M5445X)
++      for (i = 0; i < SYS_IRQS; i++)
++              irq_controller[i] = &m5445x_irq_controller;
++#elif defined(CONFIG_M547X_8X)
++      for (i = 0; i < SYS_IRQS; i++)
++              irq_controller[i] = &m547x_8x_irq_controller;
++#endif
++}
++
++/*
++ * process_int(unsigned long vec, struct pt_regs *fp)
++ *
++ * Process an interrupt.  Called from entry.S.
++ */
++asmlinkage void process_int(unsigned long vec, struct pt_regs *fp)
++{
++      struct pt_regs *old_regs;
++      struct irq_node *node;
++      old_regs = set_irq_regs(fp);
++      kstat_cpu(0).irqs[vec]++;
++
++      node = irq_list[vec];
++      if (!node)
++              handle_badint(fp);
++      else {
++              do {
++                      node->handler(vec, node->dev_id);
++                      node = node->next;
++              } while (node);
++      }
++
++      set_irq_regs(old_regs);
++}
++
++/*
++ * show_interrupts( struct seq_file *p, void *v)
++ *
++ * Called to show all the current interrupt information.
++ */
++int show_interrupts(struct seq_file *p, void *v)
++{
++      struct irq_controller *contr;
++      struct irq_node *node;
++      int i = *(loff_t *) v;
++
++      if ((i < NR_IRQS) && (irq_list[i])) {
++              contr = irq_controller[i];
++              node = irq_list[i];
++              seq_printf(p, "%-8s %3u: %10u %s", contr->name, i,
++                      kstat_cpu(0).irqs[i], node->devname);
++              while ((node = node->next))
++                      seq_printf(p, ", %s", node->devname);
++
++              seq_printf(p, "\n");
++      }
++
++      return 0;
++}
++
++/*
++ * get_irq_node(void)
++ *
++ * Get an irq node from the pool.
++ */
++struct irq_node *get_irq_node(void)
++{
++      struct irq_node *p = pool;
++      int i;
++
++      for (i = 0; i < POOL_SIZE; i++, p++) {
++              if (!p->handler) {
++                      memset(p, 0, sizeof(struct irq_node));
++                      return p;
++              }
++      }
++      printk(KERN_INFO "%s(%s:%d): No more irq nodes, I suggest you \
++              increase POOL_SIZE", __FUNCTION__, __FILE__, __LINE__);
++      return NULL;
++}
++
++void init_irq_proc(void)
++{
++      /* Insert /proc/irq driver here */
++}
++
++int setup_irq(unsigned int irq, struct irq_node *node)
++{
++      struct irq_controller *contr;
++      struct irq_node **prev;
++      unsigned long flags;
++
++      if (irq >= NR_IRQS || !irq_controller[irq]) {
++              printk("%s: Incorrect IRQ %d from %s\n",
++                     __FUNCTION__, irq, node->devname);
++              return -ENXIO;
++      }
++
++      contr = irq_controller[irq];
++      spin_lock_irqsave(&contr->lock, flags);
++
++      prev = irq_list + irq;
++      if (*prev) {
++              /* Can't share interrupts unless both agree to */
++              if (!((*prev)->flags & node->flags & IRQF_SHARED)) {
++                      spin_unlock_irqrestore(&contr->lock, flags);
++                      printk(KERN_INFO "%s: -BUSY-Incorrect IRQ %d \n",
++                              __FUNCTION__, irq);
++                      return -EBUSY;
++              }
++              while (*prev)
++                      prev = &(*prev)->next;
++      }
++
++      if (!irq_list[irq]) {
++              if (contr->startup)
++                      contr->startup(irq);
++              else
++                      contr->enable(irq);
++      }
++      node->next = NULL;
++      *prev = node;
++
++      spin_unlock_irqrestore(&contr->lock, flags);
++
++      return 0;
++}
++
++int request_irq(unsigned int irq,
++              irq_handler_t handler,
++              unsigned long flags, const char *devname, void *dev_id)
++{
++      struct irq_node *node = get_irq_node();
++      int res;
++
++      if (!node) {
++              printk(KERN_INFO "%s:get_irq_node error %x\n",
++                      __FUNCTION__,(unsigned int) node);
++              return -ENOMEM;
++      }
++      node->handler = handler;
++      node->flags   = flags;
++      node->dev_id  = dev_id;
++      node->devname = devname;
++
++      res = setup_irq(irq, node);
++      if (res)
++              node->handler = NULL;
++
++      return res;
++}
++EXPORT_SYMBOL(request_irq);
++
++void free_irq(unsigned int irq, void *dev_id)
++{
++      struct irq_controller *contr;
++      struct irq_node **p, *node;
++      unsigned long flags;
++
++      if (irq >= NR_IRQS || !irq_controller[irq]) {
++              printk(KERN_DEBUG "%s: Incorrect IRQ %d\n", __FUNCTION__, irq);
++              return;
++      }
++
++      contr = irq_controller[irq];
++      spin_lock_irqsave(&contr->lock, flags);
++
++      p = irq_list + irq;
++      while ((node = *p)) {
++              if (node->dev_id == dev_id)
++                      break;
++              p = &node->next;
++      }
++
++      if (node) {
++              *p = node->next;
++              node->handler = NULL;
++      } else
++              printk(KERN_DEBUG "%s: Removing probably wrong IRQ %d\n",
++                     __FUNCTION__, irq);
++
++      if (!irq_list[irq]) {
++              if (contr->shutdown)
++                      contr->shutdown(irq);
++              else
++                      contr->disable(irq);
++      }
++
++      spin_unlock_irqrestore(&contr->lock, flags);
++}
++EXPORT_SYMBOL(free_irq);
++
++void enable_irq(unsigned int irq)
++{
++      struct irq_controller *contr;
++      unsigned long flags;
++
++      if (irq >= NR_IRQS || !irq_controller[irq]) {
++              printk(KERN_DEBUG "%s: Incorrect IRQ %d\n", __FUNCTION__, irq);
++              return;
++      }
++
++      contr = irq_controller[irq];
++      spin_lock_irqsave(&contr->lock, flags);
++      if (irq_depth[irq]) {
++              if (!--irq_depth[irq]) {
++                      if (contr->enable)
++                              contr->enable(irq);
++              }
++      } else
++              WARN_ON(1);
++      spin_unlock_irqrestore(&contr->lock, flags);
++}
++EXPORT_SYMBOL(enable_irq);
++
++void disable_irq(unsigned int irq)
++{
++      struct irq_controller *contr;
++      unsigned long flags;
++
++      if (irq >= NR_IRQS || !irq_controller[irq]) {
++              printk(KERN_DEBUG "%s: Incorrect IRQ %d\n", __FUNCTION__, irq);
++              return;
++      }
++
++      contr = irq_controller[irq];
++      spin_lock_irqsave(&contr->lock, flags);
++      if (!irq_depth[irq]++) {
++              if (contr->disable)
++                      contr->disable(irq);
++      }
++      spin_unlock_irqrestore(&contr->lock, flags);
++}
++EXPORT_SYMBOL(disable_irq);
++
++void disable_irq_nosync(unsigned int irq) __attribute__((alias("disable_irq")));
++EXPORT_SYMBOL(disable_irq_nosync);
++
++
++unsigned long probe_irq_on(void)
++{
++      return 0;
++}
++EXPORT_SYMBOL(probe_irq_on);
++
++int probe_irq_off(unsigned long irqs)
++{
++      return 0;
++}
++EXPORT_SYMBOL(probe_irq_off);
++
++asmlinkage void handle_badint(struct pt_regs *regs)
++{
++      kstat_cpu(0).irqs[0]++;
++      num_spurious++;
++      printk(KERN_DEBUG "unexpected interrupt from %u\n", regs->vector);
++}
++EXPORT_SYMBOL(handle_badint);
++
++#ifdef CONFIG_M5445X
++/*
++ * M5445X Implementation
++ */
++void m5445x_irq_enable(unsigned int irq)
++{
++      /* enable the interrupt hardware */
++      if (irq < 64)
++              return;
++
++      /* adjust past non-hardware ints */
++      irq -= 64;
++
++      /* check for eport */
++      if ((irq > 0) && (irq < 8)) {
++              /* enable eport */
++              MCF_EPORT_EPPAR &= ~(3 << (irq*2));     /* level */
++              MCF_EPORT_EPDDR &= ~(1 << irq);         /* input */
++              MCF_EPORT_EPIER |= 1 << irq;            /* irq enabled */
++      }
++
++      if (irq < 64) {
++              /* controller 0 */
++              MCF_INTC0_ICR(irq) = 0x02;
++              MCF_INTC0_CIMR = irq;
++      } else {
++              /* controller 1 */
++              irq -= 64;
++              MCF_INTC1_ICR(irq) = 0x02;
++              MCF_INTC1_CIMR = irq;
++      }
++}
++
++void m5445x_irq_disable(unsigned int irq)
++{
++      /* disable the interrupt hardware */
++      if (irq < 64)
++              return;
++
++      /* adjust past non-hardware ints */
++      irq -= 64;
++
++      /* check for eport */
++      if ((irq > 0) && (irq < 8)) {
++              /* disable eport */
++              MCF_EPORT_EPIER &= ~(1 << irq);
++      }
++
++      if (irq < 64) {
++              /* controller 0 */
++              MCF_INTC0_ICR(irq) = 0x00;
++              MCF_INTC0_SIMR = irq;
++      } else {
++              /* controller 1 */
++              irq -= 64;
++              MCF_INTC1_ICR(irq) = 0x00;
++              MCF_INTC1_SIMR = irq;
++      }
++}
++#elif defined(CONFIG_M547X_8X)
++/*
++ * M547X_8X Implementation
++ */
++void m547x_8x_irq_enable(unsigned int irq)
++{
++      /* enable the interrupt hardware */
++      if (irq < 64)
++              return;
++
++      /* adjust past non-hardware ints */
++      irq -= 64;
++
++/* JKM -- re-add EPORT later */
++#if 0
++      /* check for eport */
++      if ((irq > 0) && (irq < 8)) {
++              /* enable eport */
++              MCF_EPORT_EPPAR &= ~(3 << (irq*2));     /* level */
++              MCF_EPORT_EPDDR &= ~(1 << irq);         /* input */
++              MCF_EPORT_EPIER |= 1 << irq;            /* irq enabled */
++      }
++#endif
++
++      if (irq < 32) {
++              /* *grumble* don't set low bit of IMRL */
++              MCF_IMRL &= (~(1 << irq) & 0xfffffffe);
++      }
++      else {
++              MCF_IMRH &= ~(1 << (irq - 32));
++      }
++}
++
++void m547x_8x_irq_disable(unsigned int irq)
++{
++      /* disable the interrupt hardware */
++      if (irq < 64)
++              return;
++
++      /* adjust past non-hardware ints */
++      irq -= 64;
++
++/* JKM -- re-add EPORT later */
++#if 0
++      /* check for eport */
++      if ((irq > 0) && (irq < 8)) {
++              /* disable eport */
++              MCF_EPORT_EPIER &= ~(1 << irq);
++      }
++#endif
++
++      if (irq < 32)
++              MCF_IMRL |= (1 << irq);
++      else
++              MCF_IMRH |= (1 << (irq - 32));
++}
++#endif
+--- /dev/null
++++ b/arch/m68k/coldfire/iomap.c
+@@ -0,0 +1,56 @@
++/*
++ * arch/m68k/coldfire/iomap.c
++ *
++ * Generic coldfire iomap interface
++ *
++ * Based on the sh64 iomap.c by Paul Mundt.
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file "COPYING" in the main directory of this archive
++ * for more details.
++ */
++#include <linux/pci.h>
++#include <asm/io.h>
++
++#if 0
++void __iomem *__attribute__ ((weak))
++ioport_map(unsigned long port, unsigned int len)
++{
++      return (void __iomem *)port;
++}
++EXPORT_SYMBOL(pci_iomap);
++
++void ioport_unmap(void __iomem *addr)
++{
++      /* Nothing .. */
++}
++EXPORT_SYMBOL(pci_iounmap);
++
++void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
++{
++      unsigned long start = pci_resource_start(dev, bar);
++      unsigned long len = pci_resource_len(dev, bar);
++      unsigned long flags = pci_resource_flags(dev, bar);
++printk(KERN_INFO "PCI_IOMAP: BAR=%d  START=0x%lx  LEN=0x%lx  FLAGS=0x%lx\n",
++       bar, start, len, flags);
++
++      if (!len)
++              return NULL;
++      if (max && len > max)
++              len = max;
++      if (flags & IORESOURCE_IO)
++              return ioport_map(start, len);
++      if (flags & IORESOURCE_MEM)
++              return (void __iomem *)start;
++
++      /* What? */
++      return NULL;
++}
++EXPORT_SYMBOL(ioport_map);
++
++void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
++{
++      /* Nothing .. */
++}
++EXPORT_SYMBOL(ioport_unmap);
++#endif
+--- /dev/null
++++ b/arch/m68k/coldfire/m547x_8x-devices.c
+@@ -0,0 +1,163 @@
++/*
++ * arch/m68k/coldfire/m547x_8x-devices.c
++ *
++ * Coldfire M547x/M548x Platform Device Configuration
++ *
++ * Copyright (c) 2008 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fsl_devices.h>
++#include <linux/spi/spi.h>
++
++#include <asm/coldfire.h>
++#include <asm/mcfsim.h>
++#include <asm/mcfqspi.h>
++
++
++#ifdef CONFIG_SPI
++/*
++ *
++ * DSPI
++ *
++ */
++
++/* number of supported SPI selects */
++#define SPI_NUM_CHIPSELECTS   8
++
++void coldfire_spi_cs_control(u8 cs, u8 command)
++{
++      /* nothing special required */
++}
++
++#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
++static struct coldfire_spi_chip spidev_chip_info = {
++      .bits_per_word = 8,
++};
++#endif
++
++static struct spi_board_info spi_board_info[] = {
++#if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
++      {
++              .modalias = "spidev",
++              .max_speed_hz = 16000000,       /* max clk (SCK) speed in HZ */
++              .bus_num = 1,
++              .chip_select = 0,               /* CS0 */
++              .controller_data = &spidev_chip_info,
++      }
++#endif
++};
++
++static int spi_irq_list[] = {
++      /* IRQ,              ICR Offset,        ICR Val,Mask */
++      64 + ISC_DSPI_OVRFW, ISC_DSPI_OVRFW,    0x18,   0,
++      64 + ISC_DSPI_RFOF,  ISC_DSPI_RFOF,     0x18,   0,
++      64 + ISC_DSPI_RFDF,  ISC_DSPI_RFDF,     0x18,   0,
++      64 + ISC_DSPI_TFUF,  ISC_DSPI_TFUF,     0x18,   0,
++      64 + ISC_DSPI_TCF,   ISC_DSPI_TCF,      0x18,   0,
++      64 + ISC_DSPI_TFFF,  ISC_DSPI_TFFF,     0x18,   0,
++      64 + ISC_DSPI_EOQF,  ISC_DSPI_EOQF,     0x18,   0,
++      0,0,0,0,
++};
++
++static struct coldfire_spi_master coldfire_master_info = {
++      .bus_num = 1,
++      .num_chipselect = SPI_NUM_CHIPSELECTS,
++      .irq_list = spi_irq_list,
++      .irq_source = 0,        /* not used */
++      .irq_vector = 0,        /* not used */
++      .irq_mask = 0,          /* not used */
++      .irq_lp = 0,            /* not used */
++      .par_val = 0,           /* not used */
++      .cs_control = coldfire_spi_cs_control,
++};
++
++static struct resource coldfire_spi_resources[] = {
++      [0] = {
++              .name = "spi-par",
++              .start = MCF_MBAR + 0x00000a50, /* PAR_DSPI */
++              .end = MCF_MBAR + 0x00000a50,   /* PAR_DSPI */
++              .flags = IORESOURCE_MEM
++      },
++
++      [1] = {
++              .name = "spi-module",
++              .start = MCF_MBAR + 0x00008a00, /* DSPI MCR Base */
++              .end = MCF_MBAR + 0x00008ab8,   /* DSPI mem map end */
++              .flags = IORESOURCE_MEM
++      },
++
++      [2] = {
++              .name = "spi-int-level",
++              .start = MCF_MBAR + 0x740,               /* ICR start */
++              .end = MCF_MBAR + 0x740 + ISC_DSPI_EOQF, /* ICR end */
++              .flags = IORESOURCE_MEM
++      },
++
++      [3] = {
++              .name = "spi-int-mask",
++              .start = MCF_MBAR + 0x70c,      /* IMRL */
++              .end = MCF_MBAR + 0x70c,        /* IMRL */
++              .flags = IORESOURCE_MEM
++      }
++};
++
++static struct platform_device coldfire_spi = {
++      .name = "spi_coldfire",
++      .id = -1,
++      .resource = coldfire_spi_resources,
++      .num_resources = ARRAY_SIZE(coldfire_spi_resources),
++      .dev = {
++              .platform_data = &coldfire_master_info,
++      }
++};
++
++/**
++ * m547x_8x_spi_init - Initialize SPI
++ */
++static int __init m547x_8x_spi_init(void)
++{
++      int retval;
++
++      /* initialize the DSPI PAR */
++      MCF_GPIO_PAR_DSPI = (MCF_GPIO_PAR_DSPI_PAR_CS5 |
++                           MCF_GPIO_PAR_DSPI_PAR_CS3_DSPICS |
++                           MCF_GPIO_PAR_DSPI_PAR_CS2_DSPICS |
++                           MCF_GPIO_PAR_DSPI_PAR_CS0_DSPICS |
++                           MCF_GPIO_PAR_DSPI_PAR_SCK_SCK |
++                           MCF_GPIO_PAR_DSPI_PAR_SIN_SIN |
++                           MCF_GPIO_PAR_DSPI_PAR_SOUT_SOUT);
++
++      /* register device */
++      retval = platform_device_register(&coldfire_spi);
++      if (retval < 0) {
++              goto out;
++      }
++
++      /* register board info */
++      if (ARRAY_SIZE(spi_board_info))
++              retval = spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
++
++out:
++      return retval;
++}
++#endif
++
++
++/**
++ * m547x_8x_init_devices - Initialize M547X_8X devices
++ *
++ * Returns 0 on success.
++ */
++static int __init m547x_8x_init_devices(void)
++{
++#ifdef CONFIG_SPI
++      m547x_8x_spi_init();
++#endif
++
++      return 0;
++}
++arch_initcall(m547x_8x_init_devices);
+--- /dev/null
++++ b/arch/m68k/coldfire/m547x_8x-dma.c
+@@ -0,0 +1,516 @@
++/*
++ * arch/m68k/coldfire/m547x_8x-dma.c
++ *
++ * Coldfire M547x/M548x DMA
++ *
++ * Copyright (c) 2008 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ *
++ * This code is based on patches from the Freescale M547x_8x BSP
++ * release mcf547x_8x-20070107-ltib.iso
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/dma.h>
++#include <asm/coldfire.h>
++#include <asm/m5485sram.h>
++#include <asm/mcfsim.h>
++
++/*
++ * This global keeps track of which initiators have been
++ * used of the available assignments.  Initiators 0-15 are
++ * hardwired.  Initiators 16-31 are multiplexed and controlled
++ * via the Initiatior Mux Control Registe (IMCR).  The
++ * assigned requestor is stored with the associated initiator
++ * number.
++ */
++static int used_reqs[32] = {
++      DMA_ALWAYS, DMA_DSPI_RX, DMA_DSPI_TX, DMA_DREQ0,
++      DMA_PSC0_RX, DMA_PSC0_TX, DMA_USBEP0, DMA_USBEP1,
++      DMA_USBEP2, DMA_USBEP3, DMA_PCI_TX, DMA_PCI_RX,
++      DMA_PSC1_RX, DMA_PSC1_TX, DMA_I2C_RX, DMA_I2C_TX,
++      0, 0, 0, 0,
++      0, 0, 0, 0,
++      0, 0, 0, 0,
++      0, 0, 0, 0
++};
++
++/*
++ * This global keeps track of which channels have been assigned
++ * to tasks.  This methology assumes that no single initiator
++ * will be tied to more than one task/channel
++ */
++static char used_channel[16] = {
++      -1, -1, -1, -1, -1, -1, -1, -1,
++      -1, -1, -1, -1, -1, -1, -1, -1
++};
++
++unsigned int connected_channel[16] = {
++      0, 0, 0, 0, 0, 0, 0, 0,
++      0, 0, 0, 0, 0, 0, 0, 0
++};
++
++/**
++ * dma_set_initiator - enable initiator
++ * @initiator: initiator identifier
++ *
++ * Returns 0 of successful, non-zero otherwise
++ *
++ * Attempt to enable the provided Initiator in the Initiator
++ * Mux Control Register.
++ */
++int dma_set_initiator(int initiator)
++{
++      switch (initiator) {
++      case DMA_ALWAYS:
++      case DMA_DSPI_RX:
++      case DMA_DSPI_TX:
++      case DMA_DREQ0:
++      case DMA_PSC0_RX:
++      case DMA_PSC0_TX:
++      case DMA_USBEP0:
++      case DMA_USBEP1:
++      case DMA_USBEP2:
++      case DMA_USBEP3:
++      case DMA_PCI_TX:
++      case DMA_PCI_RX:
++      case DMA_PSC1_RX:
++      case DMA_PSC1_TX:
++      case DMA_I2C_RX:
++      case DMA_I2C_TX:
++              /*
++               * These initiators are always active
++               */
++              break;
++
++      case DMA_FEC0_RX:
++              MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC16(3))
++                  | MCF_DMA_IMCR_SRC16_FEC0RX;
++              used_reqs[16] = DMA_FEC0_RX;
++              break;
++
++      case DMA_FEC0_TX:
++              MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC17(3))
++                  | MCF_DMA_IMCR_SRC17_FEC0TX;
++              used_reqs[17] = DMA_FEC0_TX;
++              break;
++
++      case DMA_FEC1_RX:
++              MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC20(3))
++                  | MCF_DMA_IMCR_SRC20_FEC1RX;
++              used_reqs[20] = DMA_FEC1_RX;
++              break;
++
++      case DMA_FEC1_TX:
++              if (used_reqs[21] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
++                          | MCF_DMA_IMCR_SRC21_FEC1TX;
++                      used_reqs[21] = DMA_FEC1_TX;
++              } else if (used_reqs[25] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
++                          | MCF_DMA_IMCR_SRC25_FEC1TX;
++                      used_reqs[25] = DMA_FEC1_TX;
++              } else if (used_reqs[31] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
++                          | MCF_DMA_IMCR_SRC31_FEC1TX;
++                      used_reqs[31] = DMA_FEC1_TX;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_DREQ1:
++              if (used_reqs[29] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
++                          | MCF_DMA_IMCR_SRC29_DREQ1;
++                      used_reqs[29] = DMA_DREQ1;
++              } else if (used_reqs[21] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC21(3))
++                          | MCF_DMA_IMCR_SRC21_DREQ1;
++                      used_reqs[21] = DMA_DREQ1;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM0:
++              if (used_reqs[24] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC24(3))
++                          | MCF_DMA_IMCR_SRC24_CTM0;
++                      used_reqs[24] = DMA_CTM0;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM1:
++              if (used_reqs[25] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC25(3))
++                          | MCF_DMA_IMCR_SRC25_CTM1;
++                      used_reqs[25] = DMA_CTM1;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM2:
++              if (used_reqs[26] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
++                          | MCF_DMA_IMCR_SRC26_CTM2;
++                      used_reqs[26] = DMA_CTM2;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM3:
++              if (used_reqs[27] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
++                          | MCF_DMA_IMCR_SRC27_CTM3;
++                      used_reqs[27] = DMA_CTM3;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM4:
++              if (used_reqs[28] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
++                          | MCF_DMA_IMCR_SRC28_CTM4;
++                      used_reqs[28] = DMA_CTM4;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM5:
++              if (used_reqs[29] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
++                          | MCF_DMA_IMCR_SRC29_CTM5;
++                      used_reqs[29] = DMA_CTM5;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM6:
++              if (used_reqs[30] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
++                          | MCF_DMA_IMCR_SRC30_CTM6;
++                      used_reqs[30] = DMA_CTM6;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_CTM7:
++              if (used_reqs[31] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
++                          | MCF_DMA_IMCR_SRC31_CTM7;
++                      used_reqs[31] = DMA_CTM7;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_USBEP4:
++              if (used_reqs[26] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC26(3))
++                          | MCF_DMA_IMCR_SRC26_USBEP4;
++                      used_reqs[26] = DMA_USBEP4;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_USBEP5:
++              if (used_reqs[27] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC27(3))
++                          | MCF_DMA_IMCR_SRC27_USBEP5;
++                      used_reqs[27] = DMA_USBEP5;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_USBEP6:
++              if (used_reqs[28] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
++                          | MCF_DMA_IMCR_SRC28_USBEP6;
++                      used_reqs[28] = DMA_USBEP6;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_PSC2_RX:
++              if (used_reqs[28] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC28(3))
++                          | MCF_DMA_IMCR_SRC28_PSC2RX;
++                      used_reqs[28] = DMA_PSC2_RX;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_PSC2_TX:
++              if (used_reqs[29] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC29(3))
++                          | MCF_DMA_IMCR_SRC29_PSC2TX;
++                      used_reqs[29] = DMA_PSC2_TX;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_PSC3_RX:
++              if (used_reqs[30] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC30(3))
++                          | MCF_DMA_IMCR_SRC30_PSC3RX;
++                      used_reqs[30] = DMA_PSC3_RX;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      case DMA_PSC3_TX:
++              if (used_reqs[31] == 0) {
++                      MCF_DMA_IMCR = (MCF_DMA_IMCR & ~MCF_DMA_IMCR_SRC31(3))
++                          | MCF_DMA_IMCR_SRC31_PSC3TX;
++                      used_reqs[31] = DMA_PSC3_TX;
++              } else          /* No empty slots */
++                      return 1;
++              break;
++
++      default:
++              return 1;
++      }
++      return 0;
++}
++
++/**
++ * dma_get_initiator - get the initiator for the given requestor
++ * @requestor: initiator identifier
++ *
++ * Returns initiator number (0-31) if assigned or just 0
++ */
++unsigned int dma_get_initiator(int requestor)
++{
++      u32 i;
++
++      for (i = 0; i < sizeof(used_reqs); ++i) {
++              if (used_reqs[i] == requestor)
++                      return i;
++      }
++      return 0;
++}
++
++/**
++ * dma_remove_initiator - remove the given initiator from active list
++ * @requestor: requestor to remove
++ */
++void dma_remove_initiator(int requestor)
++{
++      u32 i;
++
++      for (i = 0; i < sizeof(used_reqs); ++i) {
++              if (used_reqs[i] == requestor) {
++                      used_reqs[i] = -1;
++                      break;
++              }
++      }
++}
++
++/**
++ * dma_set_channel_fec: find available channel for fec and mark
++ * @requestor: initiator/requestor identifier
++ *
++ * Returns first avaialble channel (0-5) or -1 if all occupied
++ */
++int dma_set_channel_fec(int requestor)
++{
++      u32 i, t;
++
++#ifdef CONFIG_FEC_548x_ENABLE_FEC2
++      t = 4;
++#else
++      t = 2;
++#endif
++
++      for (i = 0; i < t ; ++i) {
++              if (used_channel[i] == -1) {
++                      used_channel[i] = requestor;
++                      return i;
++              }
++      }
++      /* All channels taken */
++      return -1;
++}
++
++/**
++ * dma_set_channel - find an available channel and mark as used
++ * @requestor: initiator/requestor identifier
++ *
++ * Returns first available channel (6-15) or -1 if all occupied
++ */
++int dma_set_channel(int requestor)
++{
++      u32 i;
++#ifdef CONFIG_NET_FEC2
++      i = 4;
++#else
++      i = 2;
++#endif
++
++      for (; i < 16; ++i)
++              if (used_channel[i] == -1) {
++                      used_channel[i] = requestor;
++                      return i;
++              }
++
++      /* All channels taken */
++      return -1;
++}
++
++/**
++ * dma_get_channel - get the channel being initiated by the requestor
++ * @requestor: initiator/requestor identifier
++ *
++ * Returns Initiator for requestor or -1 if not found
++ */
++int dma_get_channel(int requestor)
++{
++      u32 i;
++
++      for (i = 0; i < sizeof(used_channel); ++i) {
++              if (used_channel[i] == requestor)
++                      return i;
++      }
++      return -1;
++}
++
++/**
++ * dma_connect - connect a channel with reference on data
++ * @channel: channel number
++ * @address: reference address of data
++ *
++ * Returns 0 if success or -1 if invalid channel
++ */
++int dma_connect(int channel, int address)
++{
++      if ((channel < 16) && (channel >= 0)) {
++              connected_channel[channel] = address;
++              return 0;
++      }
++      return -1;
++}
++
++/**
++ * dma_disconnect - disconnect a channel
++ * @channel: channel number
++ *
++ * Returns 0 if success or -1 if invalid channel
++ */
++int dma_disconnect(int channel)
++{
++      if ((channel < 16) && (channel >= 0)) {
++              connected_channel[channel] = 0;
++              return 0;
++      }
++      return -1;
++}
++
++/**
++ * dma_remove_channel - remove channel from the active list
++ * @requestor: initiator/requestor identifier
++ */
++void dma_remove_channel(int requestor)
++{
++      u32 i;
++
++      for (i = 0; i < sizeof(used_channel); ++i) {
++              if (used_channel[i] == requestor) {
++                      used_channel[i] = -1;
++                      break;
++              }
++      }
++}
++
++/**
++ * dma_interrupt_handler - dma interrupt handler
++ * @irq: interrupt number
++ * @dev_id: data
++ *
++ * Returns IRQ_HANDLED
++ */
++irqreturn_t dma_interrupt_handler(int irq, void *dev_id)
++{
++      u32 i, interrupts;
++
++      /*
++       * Determine which interrupt(s) triggered by AND'ing the
++       * pending interrupts with those that aren't masked.
++       */
++      interrupts = MCF_DMA_DIPR;
++      MCF_DMA_DIPR = interrupts;
++
++      for (i = 0; i < 16; ++i, interrupts >>= 1) {
++              if (interrupts & 0x1)
++                      if (connected_channel[i] != 0)
++                              ((void (*)(void)) (connected_channel[i])) ();
++      }
++
++      return IRQ_HANDLED;
++}
++
++/**
++ * dma_remove_channel_by_number - clear dma channel
++ * @channel: channel number to clear
++ */
++void dma_remove_channel_by_number(int channel)
++{
++      if ((channel < sizeof(used_channel)) && (channel >= 0))
++              used_channel[channel] = -1;
++}
++
++/**
++ * dma_init - initialize the dma subsystem
++ *
++ * Returns 0 if success non-zero if failure
++ *
++ * Handles the DMA initialization during device setup.
++ */
++int __devinit dma_init()
++{
++      int result;
++      char *dma_version_str;
++
++      MCD_getVersion(&dma_version_str);
++      printk(KERN_INFO "m547x_8x DMA: Initialize %s\n", dma_version_str);
++
++      /* attempt to setup dma interrupt handler */
++      if (request_irq(64 + ISC_DMA, dma_interrupt_handler, IRQF_DISABLED,
++                      "MCD-DMA", NULL)) {
++              printk(KERN_ERR "MCD-DMA: Cannot allocate the DMA IRQ(48)\n");
++              return 1;
++      }
++
++      MCF_DMA_DIMR = 0;
++      MCF_DMA_DIPR = 0xFFFFFFFF;
++
++      MCF_ICR(ISC_DMA) = ILP_DMA;
++
++      result = MCD_initDma((dmaRegs *) (MCF_MBAR + 0x8000),
++                      (void *) SYS_SRAM_DMA_START, MCD_RELOC_TASKS);
++      if (result != MCD_OK) {
++              printk(KERN_ERR "MCD-DMA: Cannot perform DMA initialization\n");
++              free_irq(64 + ISC_DMA, NULL);
++              return 1;
++      }
++
++      return 0;
++}
++device_initcall(dma_init);
+--- /dev/null
++++ b/arch/m68k/coldfire/Makefile
+@@ -0,0 +1,20 @@
++#
++# Makefile for Linux arch/m68k/coldfire source directory
++#
++
++obj-y:= entry.o config.o cache.o signal.o muldi3.o traps.o ints.o
++ifdef CONFIG_M5445X
++ifneq ($(strip $(CONFIG_USB) $(CONFIG_USB_GADGET_MCF5445X)),)
++      obj-y   += usb.o usb/
++endif
++endif
++
++ifdef CONFIG_M547X_8X
++obj-$(CONFIG_PCI)       += mcf548x-pci.o
++else
++obj-$(CONFIG_PCI)     += pci.o mcf5445x-pci.o iomap.o
++endif
++obj-$(CONFIG_M5445X)  += mcf5445x-devices.o
++obj-$(CONFIG_M547X_8X)        += m547x_8x-devices.o
++obj-$(CONFIG_M547X_8X)        += mcf548x-devices.o
++obj-$(CONFIG_MCD_DMA) += m547x_8x-dma.o
+--- /dev/null
++++ b/arch/m68k/coldfire/mcf5445x-devices.c
+@@ -0,0 +1,136 @@
++/*
++ * arch/m68k/coldfire/mcf5445x-devices.c
++ *
++ * Coldfire M5445x Platform Device Configuration
++ *
++ * Based on the Freescale MXC devices.c
++ *
++ * Copyright (c) 2007 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fsl_devices.h>
++
++#include <asm/coldfire.h>
++#include <asm/mcfsim.h>
++
++/* ATA Interrupt */
++#define IRQ_ATA               (64 + 64 + 54)
++
++/* ATA Base */
++#define       BASE_IO_ATA     0x90000000
++
++#define ATA_IER               MCF_REG08(BASE_IO_ATA+0x2c)     /* int enable reg */
++#define ATA_ICR               MCF_REG08(BASE_IO_ATA+0x30)     /* int clear reg */
++
++/*
++ * On-chip PATA
++ */
++#if defined(CONFIG_PATA_FSL) || defined(CONFIG_PATA_FSL_MODULE)
++static int ata_init(struct platform_device *pdev)
++{
++      /* clear ints */
++      ATA_IER = 0x00;
++      ATA_ICR = 0xff;
++
++      /* setup shared pins */
++      MCF_GPIO_PAR_FEC = (MCF_GPIO_PAR_FEC & MCF_GPIO_PAR_FEC_FEC1_MASK) |
++                         MCF_GPIO_PAR_FEC_FEC1_ATA;
++
++      MCF_GPIO_PAR_FECI2C = (MCF_GPIO_PAR_FECI2C &
++                            (MCF_GPIO_PAR_FECI2C_MDC1_MASK &
++                            MCF_GPIO_PAR_FECI2C_MDIO1_MASK)) |
++                            MCF_GPIO_PAR_FECI2C_MDC1_ATA_DIOR |
++                            MCF_GPIO_PAR_FECI2C_MDIO1_ATA_DIOW;
++
++      MCF_GPIO_PAR_ATA = MCF_GPIO_PAR_ATA_BUFEN |
++                         MCF_GPIO_PAR_ATA_CS1 |
++                         MCF_GPIO_PAR_ATA_CS0 |
++                         MCF_GPIO_PAR_ATA_DA2 |
++                         MCF_GPIO_PAR_ATA_DA1 |
++                         MCF_GPIO_PAR_ATA_DA0 |
++                         MCF_GPIO_PAR_ATA_RESET_RESET |
++                         MCF_GPIO_PAR_ATA_DMARQ_DMARQ |
++                         MCF_GPIO_PAR_ATA_IORDY_IORDY;
++
++      MCF_GPIO_PAR_PCI = (MCF_GPIO_PAR_PCI &
++                           (MCF_GPIO_PAR_PCI_GNT3_MASK &
++                            MCF_GPIO_PAR_PCI_REQ3_MASK)) |
++                         MCF_GPIO_PAR_PCI_GNT3_ATA_DMACK |
++                         MCF_GPIO_PAR_PCI_REQ3_ATA_INTRQ;
++
++      return 0;
++}
++
++static void ata_exit(void)
++{
++      printk(KERN_INFO "** ata_exit\n");
++}
++
++static int ata_get_clk_rate(void)
++{
++      return MCF_BUSCLK;
++}
++
++/* JKM -- move these to a header file */
++#define MCF_IDE_DMA_WATERMARK 32      /* DMA watermark level in bytes */
++#define MCF_IDE_DMA_BD_NR     (512/3/4) /* number of BDs per channel */
++
++static struct fsl_ata_platform_data ata_data = {
++      .init             = ata_init,
++      .exit             = ata_exit,
++      .get_clk_rate     = ata_get_clk_rate,
++#ifdef CONFIG_PATA_FSL_USE_DMA
++        .udma_mask        = 0x0F, /* the board handles up to UDMA3 */
++        .fifo_alarm       = MCF_IDE_DMA_WATERMARK / 2,
++        .max_sg           = MCF_IDE_DMA_BD_NR,
++#endif
++};
++
++static struct resource pata_fsl_resources[] = {
++      [0] = {         /* I/O */
++              .start          = BASE_IO_ATA,
++              .end            = BASE_IO_ATA + 0x000000d8,
++              .flags          = IORESOURCE_MEM,
++      },
++      [2] = {         /* IRQ */
++              .start          = IRQ_ATA,
++              .end            = IRQ_ATA,
++              .flags          = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device pata_fsl_device = {
++      .name                   = "pata_fsl",
++      .id                     = -1,
++      .num_resources          = ARRAY_SIZE(pata_fsl_resources),
++      .resource               = pata_fsl_resources,
++      .dev                    = {
++              .platform_data  = &ata_data,
++              .coherent_dma_mask = ~0,        /* $$$ REVISIT */
++      },
++};
++
++static inline void mcf5445x_init_pata(void)
++{
++      (void)platform_device_register(&pata_fsl_device);
++}
++#else
++static inline void mcf5445x_init_pata(void)
++{
++}
++#endif
++
++static int __init mcf5445x_init_devices(void)
++{
++      printk(KERN_INFO "MCF5445x INIT_DEVICES\n");
++#if 0
++      mcf5445x_init_pata();
++#endif
++
++      return 0;
++}
++arch_initcall(mcf5445x_init_devices);
+--- /dev/null
++++ b/arch/m68k/coldfire/mcf5445x-pci.c
+@@ -0,0 +1,431 @@
++/*
++ * arch/m68k/coldfire/mcf5445x-pci.c
++ *
++ * Coldfire M5445x specific PCI implementation.
++ *
++ * Copyright (c) 2007 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ */
++
++#include <linux/delay.h>
++#include <linux/interrupt.h>
++#include <linux/pci.h>
++
++#include <asm/mcfsim.h>
++#include <asm/pci.h>
++#include <asm/irq.h>
++
++/*
++ * Layout MCF5445x to PCI memory mappings:
++ *
++ *    WIN         MCF5445x                    PCI            TYPE
++ *    ---         --------                    ---            ----
++ *    [0] 0xA0000000 -> 0xA7FFFFFF  0xA0000000 -> 0xA7FFFFFF  MEM
++ *    [1] 0xA8000000 -> 0xABFFFFFF  0xA8000000 -> 0xABFFFFFF  MEM
++ *    [2] 0xAC000000 -> 0xAFFFFFFF  0xAC000000 -> 0xAFFFFFFF  IO
++ */
++
++#define MCF5445X_PCI_MEM_BASE         0xA0000000
++#define MCF5445X_PCI_MEM_SIZE         0x0C000000
++
++#define MCF5445X_PCI_CONFIG_BASE      0xAC000000
++#define MCF5445X_PCI_CONFIG_SIZE      0x04000000
++
++#define MCF5445X_PCI_IO_BASE          0xAC000000
++#define MCF5445X_PCI_IO_SIZE          0x04000000
++
++/* PCI Bus memory resource block */
++struct resource pci_iomem_resource = {
++      .name = "PCI memory space",
++      .start = MCF5445X_PCI_MEM_BASE,
++      .flags = IORESOURCE_MEM,
++      .end = MCF5445X_PCI_MEM_BASE + MCF5445X_PCI_MEM_SIZE - 1
++};
++
++/* PCI Bus ioport resource block */
++struct resource pci_ioport_resource = {
++      .name = "PCI I/O space",
++      .start = MCF5445X_PCI_IO_BASE,
++      .flags = IORESOURCE_IO,
++      .end = MCF5445X_PCI_IO_BASE + MCF5445X_PCI_IO_SIZE - 1
++};
++
++/*
++ * The M54455EVB multiplexes all the PCI interrupts via
++ * the FPGA and routes them to a single interrupt.  The
++ * PCI spec requires all PCI interrupt routines be smart
++ * enough to sort out their own interrupts.
++ * The interrupt source from the FPGA is configured
++ * to EPORT 3.
++ */
++#define MCF5445X_PCI_IRQ              0x43
++
++#define PCI_SLOTS                     4
++
++/*
++ * FPGA Info
++ */
++#define FPGA_PCI_IRQ_ENABLE           (u32 *)0x09000000
++#define FPGA_PCI_IRQ_STATUS           (u32 *)0x09000004
++#define FPGA_PCI_IRQ_ROUTE            (u32 *)0x0900000c
++#define FPGA_SEVEN_LED                        (u32 *)0x09000014
++
++extern void set_fpga(u32 *addr, u32 val);
++
++#ifdef DEBUG
++void mcf5445x_pci_dumpregs(void);
++#endif
++
++/*
++ * mcf5445x_conf_device(struct pci_dev *dev)
++ *
++ * Machine dependent Configure the given device.
++ *
++ * Parameters:
++ *
++ * dev                - the pci device.
++ */
++void
++mcf5445x_conf_device(struct pci_dev *dev)
++{
++      set_fpga(FPGA_PCI_IRQ_ENABLE, 0x0f);
++}
++
++/*
++ * int mcf5445x_pci_config_read(unsigned int seg, unsigned int bus,
++ *                            unsigned int devfn, int reg,
++ *                            u32 *value)
++ *
++ * Read from PCI configuration space.
++ *
++ */
++int mcf5445x_pci_config_read(unsigned int seg, unsigned int bus,
++                           unsigned int devfn, int reg, int len, u32 *value)
++{
++      u32 addr = MCF_PCI_PCICAR_BUSNUM(bus) |
++                 MCF_PCI_PCICAR_DEVNUM(PCI_SLOT(devfn)) |
++                 MCF_PCI_PCICAR_FUNCNUM(PCI_FUNC(devfn)) |
++                 MCF_PCI_PCICAR_DWORD(reg) |
++                 MCF_PCI_PCICAR_E;
++
++      if ((bus > 255) || (devfn > 255) || (reg > 255)) {
++              *value = -1;
++              return -EINVAL;
++      }
++
++      /* setup for config mode */
++      MCF_PCI_PCICAR = addr;
++      __asm__ __volatile__("nop");
++
++      switch (len) {
++      case 1:
++              *value = *(volatile u8 *)(MCF5445X_PCI_CONFIG_BASE+(reg&3));
++              break;
++      case 2:
++              *value = le16_to_cpu(*(volatile u16 *)
++                              (MCF5445X_PCI_CONFIG_BASE + (reg&2)));
++              break;
++      case 4:
++              *value = le32_to_cpu(*(volatile u32 *)
++                              (MCF5445X_PCI_CONFIG_BASE));
++              break;
++      }
++
++      /* clear config mode */
++      MCF_PCI_PCICAR = ~MCF_PCI_PCICAR_E;
++      __asm__ __volatile__("nop");
++
++      return 0;
++}
++
++/*
++ * int mcf5445x_pci_config_write(unsigned int seg, unsigned int bus,
++ *                             unsigned int devfn, int reg,
++ *                             u32 *value)
++ *
++ * Write to PCI configuration space
++ */
++int mcf5445x_pci_config_write(unsigned int seg, unsigned int bus,
++                  unsigned int devfn, int reg, int len, u32 value)
++{
++      u32 addr = MCF_PCI_PCICAR_BUSNUM(bus) |
++                 MCF_PCI_PCICAR_DEVNUM(PCI_SLOT(devfn)) |
++                 MCF_PCI_PCICAR_FUNCNUM(PCI_FUNC(devfn)) |
++                 MCF_PCI_PCICAR_DWORD(reg) |
++                 MCF_PCI_PCICAR_E;
++
++      if ((bus > 255) || (devfn > 255) || (reg > 255))
++              return -EINVAL;
++
++      /* setup for config mode */
++      MCF_PCI_PCICAR = addr;
++      __asm__ __volatile__("nop");
++
++      switch (len) {
++      case 1:
++              *(volatile u8 *)(MCF5445X_PCI_CONFIG_BASE+(reg&3)) = (u8)value;
++              break;
++      case 2:
++              *(volatile u16 *)(MCF5445X_PCI_CONFIG_BASE+(reg&2)) =
++                              cpu_to_le16((u16)value);
++              break;
++      case 4:
++              *(volatile u32 *)(MCF5445X_PCI_CONFIG_BASE) =
++                              cpu_to_le32(value);
++              break;
++      }
++
++      /* clear config mode */
++      MCF_PCI_PCICAR = ~MCF_PCI_PCICAR_E;
++      __asm__ __volatile__("nop");
++
++      return 0;
++}
++
++/* hardware operations */
++static struct pci_raw_ops mcf5445x_pci_ops = {
++      .read =         mcf5445x_pci_config_read,
++      .write =        mcf5445x_pci_config_write,
++};
++
++/*
++ * irqreturn_t mcf5445x_pci_interrupt( int irq, void *dev)
++ *
++ * PCI controller interrupt handler.
++ */
++static irqreturn_t
++mcf5445x_pci_interrupt(int irq, void *dev)
++{
++      u32 status = MCF_PCI_PCIGSCR;
++#ifdef DEBUG
++      printk(KERN_INFO "PCI: Controller irq status=0x%08x\n", status);
++#endif
++      /* clear */
++      MCF_PCI_PCIGSCR = status;
++
++      return IRQ_HANDLED;
++}
++
++/*
++ * irqreturn_t mcf5445x_pci_arb_interrupt( int irq, void *dev)
++ *
++ * PCI Arbiter interrupt handler.
++ */
++static irqreturn_t
++mcf5445x_pci_arb_interrupt(int irq, void *dev)
++{
++      u32 status = MCF_PCIARB_PASR;
++#ifdef DEBUG
++      printk(KERN_INFO "PCI: Arbiter irq status=0x%08x\n", status);
++#endif
++      /* clear */
++      MCF_PCIARB_PASR = status;
++      return IRQ_HANDLED;
++}
++
++/*
++ * struct pci_bus_info *init_mcf5445x_pci(void)
++ *
++ * Machine specific initialisation:
++ *
++ * - Allocate and initialise a 'pci_bus_info' structure
++ * - Initialize hardware
++ *
++ * Result: pointer to 'pci_bus_info' structure.
++ */
++int __init
++init_mcf5445x_pci(void)
++{
++      return 0;
++#if 0
++      /*
++       * Initialize the PCI core
++       */
++
++      /* arbitration controller */
++      MCF_PCIARB_PACR = MCF_PCIARB_PACR_INTMPRI |
++                        MCF_PCIARB_PACR_EXTMPRI(0x0f) |
++                        MCF_PCIARB_PACR_INTMINTEN |
++                        MCF_PCIARB_PACR_EXTMINTEN(0x0f);
++
++      /* pci pin assignment regs */
++      MCF_GPIO_PAR_PCI = MCF_GPIO_PAR_PCI_GNT0 |
++                         MCF_GPIO_PAR_PCI_GNT1 |
++                         MCF_GPIO_PAR_PCI_GNT2 |
++                         MCF_GPIO_PAR_PCI_GNT3_GNT3 |
++                         MCF_GPIO_PAR_PCI_REQ0 |
++                         MCF_GPIO_PAR_PCI_REQ1 |
++                         MCF_GPIO_PAR_PCI_REQ2 |
++                         MCF_GPIO_PAR_PCI_REQ3_REQ3;
++
++      /* target control reg */
++      MCF_PCI_PCITCR = MCF_PCI_PCITCR_P |
++                       MCF_PCI_PCITCR_WCT(8);
++
++      /* PCI MEM address */
++      MCF_PCI_PCIIW0BTAR = 0xA007A000;
++
++      /* PCI MEM address */
++      MCF_PCI_PCIIW1BTAR = 0xA803A800;
++
++      /* PCI IO address */
++      MCF_PCI_PCIIW2BTAR = 0xAC03AC00;
++
++      /* window control */
++      MCF_PCI_PCIIWCR = MCF_PCI_PCIIWCR_WINCTRL0_ENABLE |
++                        MCF_PCI_PCIIWCR_WINCTRL0_MEMREAD |
++                        MCF_PCI_PCIIWCR_WINCTRL1_ENABLE |
++                        MCF_PCI_PCIIWCR_WINCTRL1_MEMREAD |
++                        MCF_PCI_PCIIWCR_WINCTRL2_ENABLE |
++                        MCF_PCI_PCIIWCR_WINCTRL2_IO;
++
++      /* initiator control reg */
++      MCF_PCI_PCIICR = 0x00ff;
++
++      /* type 0 - command */
++      MCF_PCI_PCISCR = MCF_PCI_PCISCR_MW |    /* mem write/inval */
++                       MCF_PCI_PCISCR_B |     /* bus master enable */
++                       MCF_PCI_PCISCR_M;      /* mem access enable */
++
++      /* type 0 - config reg */
++      MCF_PCI_PCICR1 = MCF_PCI_PCICR1_CACHELINESIZE(8) |
++                       MCF_PCI_PCICR1_LATTIMER(0xff);
++
++      /* type 0 - config 2 reg */
++      MCF_PCI_PCICR2 = 0;
++
++      /* target control reg */
++      MCF_PCI_PCITCR2 = MCF_PCI_PCITCR2_B0E |
++                        MCF_PCI_PCITCR2_B4E;
++
++      /* translate addresses from PCI[0] to CF[SDRAM] */
++      MCF_PCI_PCITBATR0 = MCF_RAMBAR1 | MCF_PCI_PCITBATR0_EN;
++      MCF_PCI_PCITBATR4 = MCF_RAMBAR1 | MCF_PCI_PCITBATR4_EN;
++
++      /* setup controller interrupt handlers */
++      if (request_irq(55+128, mcf5445x_pci_interrupt, IRQF_SHARED,
++                      "PCI Controller", NULL))
++              printk(KERN_ERR "PCI: Unable to register controller irq\n");
++
++      if (request_irq (56+128, mcf5445x_pci_arb_interrupt, IRQF_SHARED, "PCI Arbiter", NULL))
++              printk(KERN_ERR "PCI: Unable to register arbiter irq\n");
++
++      /* global control - clear reset bit */
++      MCF_PCI_PCIGSCR = MCF_PCI_PCIGSCR_SEE |
++                        MCF_PCI_PCIGSCR_PEE;
++
++      /* let everything settle */
++      udelay(1000);
++
++      /* allocate bus ioport resource */
++      if (request_resource(&ioport_resource, &pci_ioport_resource) < 0)
++              printk(KERN_ERR "PCI: Unable to alloc ioport resource\n");
++
++      /* allocate bus iomem resource */
++      if (request_resource(&iomem_resource, &pci_iomem_resource) < 0)
++              printk(KERN_ERR "PCI: Unable to alloc iomem resource\n");
++
++      /* setup FPGA to route PCI to IRQ3(67), SW7 to IRQ7, SW6 to IRQ4 */
++      set_fpga(FPGA_PCI_IRQ_ENABLE, 0x00000000);
++      set_fpga(FPGA_PCI_IRQ_ROUTE, 0x00000039);
++      set_fpga(FPGA_SEVEN_LED, 0x000000FF);
++
++      raw_pci_ops = &mcf5445x_pci_ops;
++
++      return 0;
++#endif
++}
++
++/*
++ * DEBUGGING
++ */
++
++#ifdef DEBUG
++struct regdump {
++      u32 addr;
++      char regname[16];
++};
++
++struct regdump type0regs[] = {
++      { 0xfc0a8000, "PCIIDR" },
++      { 0xfc0a8004, "PCISCR" },
++      { 0xfc0a8008, "PCICCRIR" },
++      { 0xfc0a800c, "PCICR1" },
++      { 0xfc0a8010, "PCIBAR0" },
++      { 0xfc0a8014, "PCIBAR1" },
++      { 0xfc0a8018, "PCIBAR2" },
++      { 0xfc0a801c, "PCIBAR3" },
++      { 0xfc0a8020, "PCIBAR4" },
++      { 0xfc0a8024, "PCIBAR5" },
++      { 0xfc0a8028, "PCICCPR" },
++      { 0xfc0a802c, "PCISID" },
++      { 0xfc0a8030, "PCIERBAR" },
++      { 0xfc0a8034, "PCICPR" },
++      { 0xfc0a803c, "PCICR2" },
++      { 0, "" }
++};
++
++struct regdump genregs[] = {
++      { 0xfc0a8060, "PCIGSCR" },
++      { 0xfc0a8064, "PCITBATR0" },
++      { 0xfc0a8068, "PCITBATR1" },
++      { 0xfc0a806c, "PCITCR1" },
++      { 0xfc0a8070, "PCIIW0BTAR" },
++      { 0xfc0a8074, "PCIIW1BTAR" },
++      { 0xfc0a8078, "PCIIW2BTAR" },
++      { 0xfc0a8080, "PCIIWCR" },
++      { 0xfc0a8084, "PCIICR" },
++      { 0xfc0a8088, "PCIISR" },
++      { 0xfc0a808c, "PCITCR2" },
++      { 0xfc0a8090, "PCITBATR0" },
++      { 0xfc0a8094, "PCITBATR1" },
++      { 0xfc0a8098, "PCITBATR2" },
++      { 0xfc0a809c, "PCITBATR3" },
++      { 0xfc0a80a0, "PCITBATR4" },
++      { 0xfc0a80a4, "PCITBATR5" },
++      { 0xfc0a80a8, "PCIINTR" },
++      { 0xfc0a80f8, "PCICAR" },
++      { 0, "" }
++};
++
++struct regdump arbregs[] = {
++      { 0xfc0ac000, "PACR" },
++      { 0xfc0ac004, "PASR" }, /* documentation error */
++      { 0, "" }
++};
++
++/*
++ * void mcf5445x_pci_dumpregs()
++ *
++ * Dump out all the PCI registers
++ */
++void
++mcf5445x_pci_dumpregs(void)
++{
++      struct regdump *reg;
++
++      printk(KERN_INFO "*** MCF5445x PCI TARGET 0 REGISTERS ***\n");
++
++      reg = type0regs;
++      while (reg->addr) {
++              printk(KERN_INFO "0x%08x  0x%08x  %s\n", reg->addr,
++                      *((u32 *)reg->addr), reg->regname);
++              reg++;
++      }
++
++      printk(KERN_INFO "\n*** MCF5445x PCI GENERAL REGISTERS ***\n");
++      reg = genregs;
++      while (reg->addr) {
++              printk(KERN_INFO "0x%08x  0x%08x  %s\n", reg->addr,
++                      *((u32 *)reg->addr), reg->regname);
++              reg++;
++      }
++      printk(KERN_INFO "\n*** MCF5445x PCI ARBITER REGISTERS ***\n");
++      reg = arbregs;
++      while (reg->addr) {
++              printk(KERN_INFO "0x%08x  0x%08x  %s\n", reg->addr,
++                      *((u32 *)reg->addr), reg->regname);
++              reg++;
++      }
++}
++#endif /* DEBUG */
+--- /dev/null
++++ b/arch/m68k/coldfire/mcf548x-devices.c
+@@ -0,0 +1,94 @@
++/*
++ * arch/m68k/coldfire/mcf5445x-devices.c
++ *
++ * Coldfire M5445x Platform Device Configuration
++ *
++ * Based on the Freescale MXC devices.c
++ *
++ * Copyright (c) 2007 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ */
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/mtd/physmap.h>
++#include <linux/platform_device.h>
++#include <linux/fsl_devices.h>
++
++#include <asm/coldfire.h>
++#include <asm/mcfsim.h>
++
++static struct resource coldfire_i2c_resources[] = {
++      [0] = {         /* I/O */
++              .start          = MCF_MBAR + 0x008F00,
++              .end            = MCF_MBAR + 0x008F20,
++              .flags          = IORESOURCE_MEM,
++      },
++      [2] = {         /* IRQ */
++              .start          = 40,
++              .end            = 40,
++              .flags          = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device coldfire_i2c_device = {
++      .name                   = "MCF548X-i2c",
++      .id                     = -1,
++      .num_resources          = ARRAY_SIZE(coldfire_i2c_resources),
++      .resource               = coldfire_i2c_resources,
++};
++
++static struct resource coldfire_sec_resources[] = {
++      [0] = {         /* I/O */
++              .start          = MCF_MBAR + 0x00020000,
++              .end            = MCF_MBAR + 0x00033000,
++              .flags          = IORESOURCE_MEM,
++      },
++      [2] = {         /* IRQ */
++              .start          = ISC_SEC,
++              .end            = ISC_SEC,
++              .flags          = IORESOURCE_IRQ,
++      },
++};
++
++static struct platform_device coldfire_sec_device = {
++      .name                   = "fsl-sec1",
++      .id                     = -1,
++      .num_resources          = ARRAY_SIZE(coldfire_sec_resources),
++      .resource               = coldfire_sec_resources,
++};
++
++#if defined(CONFIG_MTD_PHYSMAP)
++static struct physmap_flash_data mcf5485_flash_data = {
++      .width          = 2,
++};
++
++static struct resource mcf5485_flash_resource = {
++      .start          = 0xf8000000,
++      .end            = 0xf80fffff,
++      .flags          = IORESOURCE_MEM,
++};
++
++static struct platform_device mcf5485_flash_device = {
++      .name           = "physmap-flash",
++      .id             = 0,
++      .dev            = {
++              .platform_data  = &mcf5485_flash_data,
++      },
++      .num_resources  = 1,
++      .resource       = &mcf5485_flash_resource,
++};
++#endif
++
++static int __init mcf5485_init_devices(void)
++{
++      printk(KERN_INFO "MCF5485x INIT_DEVICES\n");
++
++      platform_device_register(&coldfire_i2c_device);
++      platform_device_register(&coldfire_sec_device);
++/*#if defined(CONFIG_MTD_PHYSMAP)
++      platform_device_register(&mcf5485_flash_device);
++#endif*/
++      return 0;
++}
++arch_initcall(mcf5485_init_devices);
+--- /dev/null
++++ b/arch/m68k/coldfire/mcf548x-pci.c
+@@ -0,0 +1,959 @@
++/*
++ *    ColdFire 547x/548x PCI Host Controller functions
++ *
++ * Copyright (c) 2005-2008 Freescale Semiconductor, Inc.
++ *
++ * This code is based on the 2.6.10 version of pci.c
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/string.h>
++#include <linux/pci.h>
++#include <linux/ioport.h>
++#include <linux/slab.h>
++#include <linux/version.h>
++#include <linux/interrupt.h>
++
++#include <linux/dma-mapping.h>
++#include <asm/coldfire.h>
++#include <asm/io.h>
++#include <asm/m5485sim.h>
++#include <asm/m5485pci.h>
++#include <asm/irq.h>
++#include <asm/pci.h>
++#include <asm/virtconvert.h>
++
++
++#undef DEBUG
++//#define DEBUG
++
++#ifdef DEBUG
++//#define DBG(x...) printk(KERN_DEBUG x)
++#define DBG(x...) printk(x)
++#else
++#define DBG(x...)
++#endif
++
++#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,75))
++# define irqreturn_t void
++# define IRQ_HANDLED
++# define IRQ_NONE
++#endif
++
++/*
++ *  Bridge configration dafaults
++ */
++#define PCI_RETRIES   0
++#define PCI_CACHE_LINE        8
++#define PCI_MINGNT    1
++#define PCI_MAXLAT    42
++
++
++/*
++ *  Initiator windows setting
++ */
++#define HOST_MEM_BASE         0xD0000000      /* ColdFire Memory window base  */
++#define PCI_MEM_BASE          0xD0000000      /* PCI Memory window base       */
++#define PCI_MEM_SIZE          0x08000000      /* Memory window size (128M)    */
++#define HOST_IO_BASE          0xD8000000      /* ColdFire I/O window base     */
++#define PCI_IO_BASE_ADDR      0x00000000      /* PCI I/O window base          */
++#define PCI_IO_SIZE           0x00010000      /* I/O window size (64K)        */
++#define HOST_CFG_BASE         0xD8000000      /* ColdFire config window base  */
++#define HOST_DMA_BASE          CONFIG_SDRAM_BASE      /* ColdFire PCI-DMA window base */
++#define PCI_HDR_BASE          (MCF_MBAR+0xB00)/* ColdFire config registers    */
++
++#define PCI_MEM_MASK          (PCI_MEM_SIZE-1)
++#define PCI_IO_MASK           (PCI_IO_SIZE-1)
++
++/* Macro to set initiator window */
++#define WxBAR(host_address, pci_address, size)        \
++      (((host_address)  & 0xff000000)      |  \
++      ((((size)-1) & 0xff000000) >> 8)     |  \
++      ((pci_address) & 0xff000000) >> 16)
++
++/*
++ *  BIOS internal data
++ */
++static u8 revision;           /* controller revision */
++
++/*
++ *    Board specific setting
++ */
++const unsigned int irq_lines[] = { 5, 7 };
++
++#define N_SLOTS       (sizeof(board_info) / sizeof(board_info[0]))
++#define N_IRQS                (sizeof(irq_lines)  / sizeof(irq_lines[0]))
++#define BRIDGE_SLOT   0
++
++const struct slotinfo {
++      unsigned char idsel;    /* device number     */
++      unsigned char irq;      /* external IRQ      */
++      unsigned char req;      /* REQ line number   */
++      unsigned char gnt;      /* GNT line number   */
++} board_info[] = {
++      {0,  0, 0, 0},          /* Bridge      */
++      {17, 5, 1, 1},          /* Slot #1     */
++      {18, 5, 2, 2},          /* Slot #2     */       
++      {20, 7, 3, 3},          /* Slot #3     */
++      {21, 7, 4, 4},          /* Slot #4     */
++};
++
++/************************************************************************/
++
++/*
++ * static int mk_conf_addr()
++ *
++ * Return type0 or type1 configuration address
++ * by the means of device address and PCI dword location
++ * 0 - for not existing slots
++ */
++static int mk_conf_addr(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where)
++{
++      int slot, func, address, idsel, dev_fn;
++
++      if (bus->number) {
++              address = MCF_PCICAR_E | (bus->number << 16) |
++                  (devfn << 8) | (where & 0xfc);
++      } else {
++              slot = PCI_SLOT(devfn);
++              if (slot > N_SLOTS || slot == BRIDGE_SLOT)
++                      return 0;
++              else {
++                      func = PCI_FUNC(devfn);
++                      idsel = board_info[slot].idsel;
++
++                      dev_fn = PCI_DEVFN(idsel, func);
++                      address = MCF_PCICAR_E | (bus->number << 16) |
++                          (dev_fn << 8) | (where & 0xfc);
++              }
++      }
++
++      return (address);
++}
++
++/*
++ * static int read_config_byte()
++ *
++ * Read a byte from configuration space of specified device
++ */
++static int read_config_byte(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u8 *value)
++{
++      int slot;
++      int address;
++      int result;
++
++      *value = 0xff;
++      result = PCIBIOS_SUCCESSFUL;
++
++      slot = PCI_SLOT(devfn);
++      if (slot == BRIDGE_SLOT) {
++              if (where <= 0x40)
++                      *value = *(volatile u8 *) (PCI_HDR_BASE + (where ^ 3));
++              else
++                      *value = 0;
++      } else {
++              address = mk_conf_addr(bus, devfn, where);
++              if (!address)
++                      result = PCIBIOS_DEVICE_NOT_FOUND;
++              else {
++                      MCF_PCICAR = address;
++                      *value = *(volatile u8 *) (HOST_CFG_BASE + (where & 3));
++              }
++      }
++      __asm__ __volatile__("nop");
++      __asm__ __volatile__("nop");
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: read_config_byte bus=%d, devfn=%d, addr=0x%02X, val=0x%02X, ret=%02X\n",
++          bus->number, devfn, where, *value, result);
++
++      return (result);
++}
++
++/*
++ * static int read_config_word()
++ *
++ * Read a word from configuration space of specified device
++ */
++static int read_config_word(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u16 *value)
++{
++      int slot;
++      int address;
++      int result;
++
++      *value = 0xffff;
++      result = PCIBIOS_SUCCESSFUL;
++
++      if (where & 0x1)
++              result = PCIBIOS_BAD_REGISTER_NUMBER;
++      else {
++              slot = PCI_SLOT(devfn);
++              if (slot == BRIDGE_SLOT) {
++                      if (where <= 0x3f)
++                              *value =
++                                  *(volatile u16 *) (PCI_HDR_BASE +
++                                                     (where ^ 2));
++                      else
++                              *value = 0;
++              } else {
++                      address = mk_conf_addr(bus, devfn, where);
++                      if (!address)
++                              result = PCIBIOS_DEVICE_NOT_FOUND;
++                      else {
++                              MCF_PCICAR = address;
++                              *value = le16_to_cpu(*(volatile u16 *)
++                                                   (HOST_CFG_BASE +
++                                                    (where & 2)));
++                      }
++              }
++      }
++        __asm__ __volatile__("nop");
++        __asm__ __volatile__("nop");
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: read_config_word bus=%d, devfn=%d, addr=0x%02X, val=0x%04X ret=%02X\n",
++          bus->number, devfn, where, *value, result);
++
++      return (result);
++}
++
++/*
++ * static int read_config_dword()
++ *
++ * Read a long word from configuration space of specified device
++ */
++static int read_config_dword(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u32 *value)
++{
++      int slot;
++      int address;
++      int result;
++
++      *value = 0xffffffff;
++      result = PCIBIOS_SUCCESSFUL;
++
++      if (where & 0x3)
++              result = PCIBIOS_BAD_REGISTER_NUMBER;
++      else {
++              slot = PCI_SLOT(devfn);
++              if (slot == BRIDGE_SLOT) {
++                      if (where <= 0x3d)
++                              *value =
++                                  *(volatile u32 *) (PCI_HDR_BASE + where);
++                      else
++                              *value = 0;
++                      __asm__ __volatile__("nop");
++                      __asm__ __volatile__("nop");
++              } else {
++                      address = mk_conf_addr(bus, devfn, where);
++                      if (!address)
++                              result = PCIBIOS_DEVICE_NOT_FOUND;
++                      else {
++                              MCF_PCICAR = address;
++                              *value = le32_to_cpu(*(volatile u32 *)
++                                                   (HOST_CFG_BASE));
++                              __asm__ __volatile__("nop");
++                              __asm__ __volatile__("nop");
++                              if (bus->number != 0 && revision < 1) {
++                                      volatile u32 temp;
++
++                                      MCF_PCICAR |= 0xff0000;
++                                      temp = *(volatile u32 *) (HOST_CFG_BASE);
++                              }
++                      }
++              }
++      }
++
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: read_config_dword bus=%d, devfn=%d, addr=0x%02X, value=0x%08X ret=%02X\n",
++           bus->number, devfn, where, *value, result);
++
++      return (result);
++}
++
++/*
++ * static int write_config_byte()
++ *
++ * Write a byte to configuration space of specified device
++ */
++static int write_config_byte(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u8 value)
++{
++      int slot;
++      int address;
++      int result;
++
++      result = PCIBIOS_SUCCESSFUL;
++
++      slot = PCI_SLOT(devfn);
++      if (slot == BRIDGE_SLOT) {
++              if (where <= 0x40)
++                      *(volatile u8 *) (PCI_HDR_BASE + (where ^ 3)) = value;
++      } else {
++              address = mk_conf_addr(bus, devfn, where);
++              if (!address)
++                      result = PCIBIOS_DEVICE_NOT_FOUND;
++              else {
++                      MCF_PCICAR = address;
++                      *(volatile u8 *) (HOST_CFG_BASE + (where & 3)) = value;
++              }
++      }
++        __asm__ __volatile__("nop");
++        __asm__ __volatile__("nop");
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: write_config_byte bus=%d, devfn=%d, addr=0x%02X, value=0x%02X ret=%02X\n",
++           bus->number, devfn, where, value, result);
++
++      return (result);
++}
++
++/*
++ * static int write_config_word()
++ *
++ * Write a word to configuration space of specified device
++ */
++static int write_config_word(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u16 value)
++{
++      int slot;
++      int address;
++      int result;
++
++      result = PCIBIOS_SUCCESSFUL;
++
++      if (where & 0x1)
++              result = PCIBIOS_BAD_REGISTER_NUMBER;
++      else {
++              slot = PCI_SLOT(devfn);
++              if (slot == BRIDGE_SLOT) {
++                      if (where <= 0x3f)
++                              *(volatile u16 *) (PCI_HDR_BASE + (where ^ 2)) =
++                                  value;
++              } else {
++                      address = mk_conf_addr(bus, devfn, where);
++                      if (!address)
++                              result = PCIBIOS_DEVICE_NOT_FOUND;
++                      else {
++                              MCF_PCICAR = address;
++                              *(volatile u16 *) (HOST_CFG_BASE + (where & 2)) =
++                                  cpu_to_le16(value);
++                      }
++              }
++      }
++      __asm__ __volatile__("nop");
++        __asm__ __volatile__("nop");
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: write_config_word bus=%d, devfn=%d, addr=0x%02X, value=0x%04X ret=%02X\n",
++           bus->number, devfn, where, value, result);
++
++      return (result);
++}
++
++/*
++ * static int write_config_dword()
++ *
++ * Write a long word to configuration space of specified device
++ */
++static int write_config_dword(/*struct pci_dev *dev*/struct pci_bus *bus, unsigned int devfn, int where, u32 value)
++{
++      int slot;
++      int address;
++      int result;
++
++      result = PCIBIOS_SUCCESSFUL;
++
++      if (where & 0x3)
++              result = PCIBIOS_BAD_REGISTER_NUMBER;
++      else {
++              slot = PCI_SLOT(devfn);
++              if (slot == BRIDGE_SLOT) {
++                      if (where <= 0x3d)
++                              *(volatile u32 *) (PCI_HDR_BASE + where) =
++                                  value;
++              } else {
++                      address = mk_conf_addr(bus, devfn, where);
++                      if (!address)
++                              result = PCIBIOS_DEVICE_NOT_FOUND;
++                      else {
++                              MCF_PCICAR = address;
++                              *(volatile u32 *) (HOST_CFG_BASE) =
++                                  cpu_to_le32(value);
++                      }
++              }
++      }
++      __asm__ __volatile__("nop");
++        __asm__ __volatile__("nop");
++      MCF_PCICAR &= ~MCF_PCICAR_E;
++
++      DBG("PCI: write_config_dword dev=%d, fn=%d, addr=0x%02X, value=0x%08X ret=%02X\n",
++          PCI_SLOT(devfn), PCI_FUNC(devfn), where,  value, result);
++
++      return (result);
++}
++
++static int config_read(struct pci_bus *bus, unsigned int devfn,
++                     int where, int size, u32 * val)
++{
++      switch (size) {
++      case 1:
++              return read_config_byte(bus, devfn, where, (u8 *) val);
++      case 2:
++              return read_config_word(bus, devfn, where, (u16 *) val);
++      default:
++              return read_config_dword(bus, devfn, where, val);
++      }
++}
++
++static int config_write(struct pci_bus *bus, unsigned int devfn,
++                      int where, int size, u32 val)
++{
++      switch (size) {
++      case 1:
++              return write_config_byte(bus, devfn, where, (u8) val);
++      case 2:
++              return write_config_word(bus, devfn, where, (u16) val);
++      default:
++              return write_config_dword(bus, devfn, where, val);
++      }
++}
++
++/*
++ *  configuration routines entry points
++ */
++static struct pci_ops bus_ops = {
++      read:           config_read,
++      write:          config_write
++};
++
++/************************************************************************/
++
++/*
++ * u8 pci_inb()
++ *
++ * Read a byte at specified address from I/O space
++ */
++unsigned char pci_inb(long addr)
++{
++      char value;
++
++      value = *(volatile unsigned char *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      DBG("PCI: inb addr=0x%08X, value=0x%02X\n", addr, value);
++
++      return (unsigned char) value;
++}
++
++
++/*
++ * u16 pci_inw()
++ *
++ * Read a word at specified address from I/O space
++ */
++unsigned short pci_inw(long addr)
++{
++      short value;
++      volatile unsigned short *ptr;
++
++      ptr = (volatile unsigned short *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      value = le16_to_cpu(*ptr);
++
++      DBG("PCI: inw addr=0x%08X, value=0x%04X\n",  addr, value);
++      return (unsigned short) value;
++}
++
++/*
++ * u16 pci_raw_inw()
++ *
++ * Read a raw word at specified address from I/O space
++ */
++unsigned short pci_raw_inw(long addr)
++{
++      short value;
++      volatile unsigned short *ptr;
++
++      ptr = (volatile unsigned short *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      value = *ptr;
++
++      DBG("PCI: raw_inw addr=0x%08X, value=0x%04X\n",  addr, value);
++      return (unsigned short) value;
++}
++
++/*
++ * u32 pci_inl()
++ *
++ * Read a dword at specified address from I/O space
++ */
++unsigned long pci_inl(long addr)
++{
++      long value;
++      volatile unsigned long *ptr;
++
++      ptr = (volatile unsigned long *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      value = le32_to_cpu(*ptr);
++
++      DBG("PCI: inl addr=0x%08X, value=0x%08X\n",  addr, value);
++      return (unsigned long) value;
++}
++
++/*
++ * u32 pci_raw_inl()
++ *
++ * Read a raw dword at specified address from I/O space
++ */
++unsigned long pci_raw_inl(long addr)
++{
++      long value;
++      volatile unsigned long *ptr;
++
++      ptr = (volatile unsigned long *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      value = *ptr;
++
++      DBG("PCI: raw_inl addr=0x%08X, value=0x%08X\n",  addr, value);
++      return (unsigned long) value;
++}
++
++/*
++ * void pci_outb()
++ *
++ * Write a byte value at specified address to I/O space
++ */
++void pci_outb( unsigned char value,  long addr)
++{
++
++      *(volatile unsigned char *) (HOST_IO_BASE | (addr & PCI_IO_MASK)) = value;
++      DBG("PCI: outb addr=0x%08X, value=0x%02X\n",  addr, value);
++}
++
++
++/*
++ * void pci_outw()
++ *
++ * Write a word value at specified address to I/O space
++ */
++void pci_outw(volatile unsigned short value, volatile  long addr)
++{
++      volatile unsigned short *ptr;
++
++      ptr = (volatile unsigned short *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      *ptr = cpu_to_le16(value);
++      DBG("PCI: outw addr=0x%08X, value=0x%04X\n",  addr, value);
++}
++
++/*
++ * void pci_raw_outw()
++ *
++ * Write a raw word value at specified address to I/O space
++ */
++void pci_raw_outw(volatile unsigned short value, volatile  long addr)
++{
++      volatile unsigned short *ptr;
++
++      ptr = (volatile unsigned short *) (HOST_IO_BASE | (addr & PCI_IO_MASK));
++      *ptr = value;
++      DBG("PCI: raw_outw addr=0x%08X, value=0x%04X\n",  addr, value);
++}
++
++/*
++ * void pci_outl()
++ *
++ * Write a long word value at specified address to I/O space
++ */
++void pci_outl(volatile unsigned long value, volatile long addr)
++{
++      volatile unsigned long *ptr;
++
++      ptr = (volatile unsigned long *)(HOST_IO_BASE | (addr & PCI_IO_MASK));
++      *ptr = cpu_to_le32(value);
++      DBG("PCI: outl addr=0x%08X, value=0x%08X\n", addr, value);
++}
++
++/*
++ * void pci_raw_outl()
++ *
++ * Write a raw long word value at specified address to I/O space
++ */
++void pci_raw_outl(volatile unsigned long value, volatile long addr)
++{
++      volatile unsigned long *ptr;
++
++      ptr = (volatile unsigned long *)(HOST_IO_BASE | (addr & PCI_IO_MASK));
++      *ptr = value;
++      DBG("PCI: raw_outl addr=0x%08X, value=0x%08X\n", addr, value);
++}
++
++/*
++ * void pci_insb()
++ *
++ * Read several byte values from specified I/O port
++ */
++void pci_insb(volatile unsigned char *addr, unsigned char *buf, int len)
++{
++      for (; len--; buf++)
++              *buf = pci_inb((unsigned long)addr);
++      DBG("PCI: pci_insb addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++
++/*
++ * void pci_insw()
++ *
++ * Read several word values from specified I/O port
++ */
++void pci_insw(volatile unsigned short *addr, unsigned short *buf, int len)
++{
++      for (; len--; buf++)
++              *buf = pci_inw((unsigned long)addr);
++      DBG("PCI: pci_insw addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++/*
++ * void pci_insl()
++ *
++ * Read several dword values from specified I/O port
++ */
++void pci_insl(volatile unsigned long *addr, unsigned long *buf, int len)
++{
++      for (; len--; buf++)
++              *buf = pci_inl((unsigned long)addr);
++      DBG("PCI: pci_insl addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++/*
++ * void pci_outsb()
++ *
++ * Write several byte values to specified I/O port
++ */
++void pci_outsb(volatile unsigned char *addr, const unsigned char *buf, int len)
++{
++      for (; len--; buf++)
++              pci_outb((unsigned long)addr, *buf);
++      DBG("PCI: pci_outsb addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++/*
++ * void pci_outsw()
++ *
++ * Write several word values to specified I/O port
++ */
++void pci_outsw(volatile unsigned short *addr, const unsigned short *buf, int len)
++{
++      for (; len--; buf++)
++              pci_outw((unsigned long)addr, *buf);
++      DBG("PCI: pci_outsw addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++/*
++ * void pci_outsl()
++ *
++ * Write several dword values to specified I/O port
++ */
++void pci_outsl(volatile unsigned long *addr, const unsigned long *buf, int len)
++{
++      for (; len--; buf++)
++              pci_outl((unsigned long)addr, *buf);
++      DBG("PCI: pci_outsl addr=0x%08X, buf=%p, len=%d\n", addr, buf, len);
++}
++
++/*
++ * void pci_xlb_handler()
++ *
++ * PCI XLB interrupt handler
++ */
++irqreturn_t xlb_interrupt(int irq, void *dev)
++{
++      volatile int xlb_error = MCF_PCIISR;
++
++      /* Acknowlege interrupt */
++      MCF_PCIISR = xlb_error;
++
++      /* Dump interrupt reason */
++      if (xlb_error & MCF_PCIISR_RE)
++              DBG("PCI: Retry Error Received\n");
++              
++      if (xlb_error & MCF_PCIISR_IA)
++              DBG("PCI: Initiator Abort Received\n");
++              
++      if (xlb_error & MCF_PCIISR_TA)
++              DBG("PCI: Target Abort Received\n");
++
++      return IRQ_HANDLED;
++}
++
++
++/*
++ * void pci_arbiter_handler()
++ *
++ * PCI arbiter interrupt handler
++ */
++irqreturn_t arb_interrupt(int irq, void *dev)
++{
++      volatile unsigned long arb_error = MCF_PCIARB_PASR;
++
++      /* Acknowlege interrupt */
++      printk("%s\n",__FUNCTION__);
++      MCF_PCIARB_PASR = arb_error;
++
++      if (arb_error & MCF_PCIARB_PASR_ITLMBK) {
++              DBG("PCI: coldfire master time-out\n");                         
++                              
++              /* Set infinite  number of retries */                   
++              MCF_PCIICR &= ~0xFF;                            
++      }
++              
++      if (arb_error & MCF_PCIARB_PASR_EXTMBK(0x1F)) {
++              arb_error >>= 17;
++              DBG("PCI: external master time-out (mask = 0x%X)\n", arb_error);
++              
++              /* raise arbitration priority level */          
++              MCF_PCIARB_PACR = MCF_PCIARB_PACR_EXTMPRI(arb_error);
++      }
++
++      return IRQ_HANDLED;
++}
++
++
++/*
++ * void pci_eint_handler()
++ *
++ * Eport interrupt handler
++ */
++irqreturn_t eint_handler(int irq, void *dev)
++{
++      /* Just acknowlege interrupt and exit */
++      MCF_EPFR = 0x1 << (irq - 64);
++      return IRQ_HANDLED;
++}
++
++
++/*
++ * void __init coldfire_fixup(int pci_modify)
++ *
++ * Assign IRQ numbers as used by Linux to the interrupt pins
++ * of the PCI cards.
++ */
++static void __init coldfire_fixup(int pci_modify)
++{
++      struct pci_dev *dev;
++      unsigned char slot, pin;
++
++      DBG("%s\n",__FUNCTION__);
++#ifdef NL_ORIGINAL
++      pci_for_each_dev(dev) {
++#else
++      dev = NULL;
++      while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
++#endif
++              if (dev->class >> 16 != PCI_BASE_CLASS_BRIDGE) {
++                      slot = PCI_SLOT(dev->devfn);
++                      dev->irq = 64 + board_info[slot].irq;
++
++                      /* Check if device needs interrupt */
++#ifdef NL_ORIGINAL
++                      pcibios_read_config_byte(
++                                  dev->bus->number, dev->devfn,
++                                  PCI_INTERRUPT_PIN, &pin);
++
++                      if ( pin ) {
++                              pcibios_write_config_byte(
++                                      dev->bus->number, dev->devfn,
++                                      PCI_INTERRUPT_LINE, dev->irq);
++                      }
++#else
++                      pci_read_config_byte(dev,
++                                  PCI_INTERRUPT_PIN, &pin);
++
++                      if ( pin ) {
++                              pci_write_config_byte(dev,
++                                      PCI_INTERRUPT_LINE, dev->irq);
++                      }
++#endif
++              }
++      }
++}
++
++static void __init configure_device(struct pci_dev *dev)
++{
++      /* TODO: This should depend from disable_pci_burst setting */
++      DBG("%s\n",__FUNCTION__);
++#ifdef NL_ORIGINAL
++      pcibios_write_config_byte(bus, devfn, PCI_CACHE_LINE_SIZE, PCI_CACHE_LINE);
++#else
++      pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, PCI_CACHE_LINE);
++#endif
++}
++
++struct pci_bus_info *__init init_coldfire_pci(void)
++{
++      static struct pci_bus_info bus;
++      int i;
++      int pci_mem_va;
++      static char irq_name[N_IRQS][15];
++
++      /* Get controller revision */
++      revision = MCF_PCICCRIR;
++      printk("ColdFire PCI Host Bridge (Rev. %d) detected:"
++              "MEMBase %x,MEMLen %x,IOBase %x,IOLen %x\n",
++              revision, HOST_MEM_BASE, PCI_MEM_SIZE - 1, 0, PCI_IO_SIZE - 1);
++
++      /* Setup bus info structure. */
++      memset(&bus, 0, sizeof (struct pci_bus_info));
++
++      /* Request intiator memory resource */
++      bus.mem_space.start = PCI_MEM_BASE;//HOST_MEM_BASE;
++      bus.mem_space.end = bus.mem_space.start + PCI_MEM_SIZE - 1;
++      bus.mem_space.name = "PCI Bus #0";
++      if (request_resource(&iomem_resource, &bus.mem_space) != 0)
++      {
++              printk("Failed to request bridge iomem resource\n");
++              return NULL;
++      }
++
++      /* Request intiator memory resource */
++      bus.io_space.start = 0;
++      bus.io_space.end = bus.io_space.start + PCI_IO_SIZE - 1;
++      bus.io_space.name =  "PCI Bus #0";
++      if (request_resource(&ioport_resource, &bus.io_space) != 0)
++      {
++              printk("Failed to request bridge ioport resource\n");
++              return NULL;
++      }
++
++      /* Must Reset!!! If bootloader has PCI enabled, it will cause
++       * problem in linux when it tries to configure/find resources
++       * for the pci devices.  Both registers need to be reset.
++       */
++      MCF_PCIGSCR = 0x1;
++      MCF_PCITCR = 0x00000000;
++
++      /* Set up the arbiter */
++      MCF_PCIARB_PACR = 0 /*MCF_PCIARB_PACR_PKMD*/
++                      | MCF_PCIARB_PACR_INTMPRI 
++                      | MCF_PCIARB_PACR_INTMINTEN 
++                      | MCF_PCIARB_PACR_EXTMPRI(0x1F) 
++                      | MCF_PCIARB_PACR_EXTMINTEN(0x1F);
++
++      /* GNT and REQ */
++      MCF_PAR_PCIBG = 0x3FF;
++      MCF_PAR_PCIBR = 0x3FF;
++
++      /* Enable bus mastering, memory access and MWI */
++      MCF_PCISCR = MCF_PCISCR_B | MCF_PCISCR_M | MCF_PCISCR_MW;
++
++      /* Setup burst parameters */
++      MCF_PCICR1 = MCF_PCICR1_LATTIMER(32) |
++                   MCF_PCICR1_CACHELINESIZE(PCI_CACHE_LINE);
++
++      MCF_PCICR2 = 0;
++      /*MCF_PCICR2_MINGNT(PCI_MINGNT) |
++              MCF_PCICR2_MAXLAT(PCI_MAXLAT);
++      */
++      /* Turn on error signaling */
++      MCF_PCIICR = MCF_PCIICR_TAE | MCF_PCIICR_IAE | PCI_RETRIES;
++      MCF_PCIGSCR |= MCF_PCIGSCR_SEE;
++      /*
++       * Configure Initiator Windows
++       * Window 0: 128M PCI Memory @ HOST_MEM_BASE, 1:1 mapping
++       * Window 1: 64K  I/O Memory @ HOST_IO_BASE,  1:0 mapping
++       */
++      MCF_PCIIW0BTAR = WxBAR(HOST_MEM_BASE, PCI_MEM_BASE, PCI_MEM_SIZE);
++      MCF_PCIIW1BTAR = WxBAR(HOST_IO_BASE,  PCI_IO_BASE_ADDR,  PCI_IO_SIZE);
++
++      MCF_PCIIWCR = MCF_PCIIWCR_WINCTRL1_IO |
++                    MCF_PCIIWCR_WINCTRL0_MEMRDLINE;
++
++      /* Target PCI DMA Windows */
++      MCF_PCIBAR1   = PCI_DMA_BASE;
++      MCF_PCITBATR1 = HOST_DMA_BASE | MCF_PCITBATR1_EN;
++        MCF_PCIBAR0   = MCF_RAMBAR0;;
++        MCF_PCITBATR0 = MCF_RAMBAR0 | MCF_PCITBATR0_EN;
++        DBG("PCI TCR %x,MCF_PCIBAR1 %x,MCF_PCITBATR1 %x."
++              "MCF_PCIBAR0 %x,MCF_PCITBATR9 %x\n", MCF_PCITCR, MCF_PCIBAR1,
++              MCF_PCITBATR1, MCF_PCIBAR0, MCF_PCITBATR0);
++      /* Enable internal PCI controller interrupts */
++      MCF_ICR(ISC_PCI_XLB) = ILP_PCI_XLB;
++      /*request_irq(64+ISC_PCI_XLB, xlb_interrupt, 
++                      SA_INTERRUPT, "PCI XL Bus", (void*)-1);
++      enable_irq (64+ISC_PCI_XLB);
++      */
++        if(request_irq(64+ISC_PCI_XLB, xlb_interrupt, 
++                         IRQF_DISABLED, "PCI XL Bus", (void*)-1)){
++              printk("Cannot allocate ISC_PCI_XLB  IRQ\n");
++                return (struct pci_bus_info *)-EBUSY;
++      }
++
++      MCF_ICR(ISC_PCI_ARB) = ILP_PCI_ARB;
++      /*request_irq(64+ISC_PCI_ARB, arb_interrupt, 
++                      SA_INTERRUPT, "PCI Arbiter", (void*)-1);
++      enable_irq (64+ISC_PCI_ARB);
++      */
++        if(request_irq(64+ISC_PCI_ARB, arb_interrupt,
++                        IRQF_DISABLED, "PCI Arbiter", (void*)-1)){
++                printk("Cannot allocate ISC_PCI_ARB  IRQ\n");
++                return (struct pci_bus_info *)-EBUSY;
++        }
++
++      /* Set slots interrupt setting */
++      for (i = 0; i < N_IRQS; i++) 
++      {       
++              /* Set trailing edge for PCI interrupts */
++              MCF_EPPAR &= ~MCF_EPPAR_EPPA(irq_lines[i], 0x3);
++              if (irq_lines[i] == 5)
++                      MCF_EPPAR |= MCF_EPPAR_EPPA(irq_lines[i],  MCF_EPPAR_EPPAx_FALLING);
++              else
++                        MCF_EPPAR |= MCF_EPPAR_EPPA(irq_lines[i],  0/*MCF_EPPAR_EPPAx_FALLING*/);
++              /* Turn on irq line in eport */
++              MCF_EPIER |= MCF_EPIER_EPIE(irq_lines[i]);
++
++              /* Enable irq in gpio */
++              if (irq_lines[i] == 5)
++                  MCF_PAR_FECI2CIRQ |= 1;
++                  
++              if (irq_lines[i] == 6)
++                  MCF_PAR_FECI2CIRQ |= 2;   
++
++              /* Register external interrupt handlers */
++              sprintf(irq_name[i], "PCI IRQ%d", irq_lines[i]);
++              /*request_irq(64 + irq_lines[i], eint_handler, 
++                          SA_SHIRQ, irq_name[i], (void*)-1);
++              enable_irq(64 + irq_lines[i]);*/
++              if(request_irq(64 + irq_lines[i], eint_handler, 
++                              IRQF_SHARED, irq_name[i], (void*)-1)){
++                      printk("Cannot allocate irq_lines[%d] IRQ\n", irq_lines[i]);
++                      return (struct pci_bus_info *)-EBUSY;
++              }
++      }
++
++      /* Clear PCI Reset and wait for devices to reset */
++      MCF_PCIGSCR &= ~MCF_PCIGSCR_PR;
++      schedule_timeout((5 * HZ) / 10);
++      /* Remap initiator windows (should be 1:1 to the physical memory) */
++      pci_mem_va = (int) ioremap_nocache(HOST_MEM_BASE, PCI_MEM_SIZE + PCI_IO_SIZE);
++#if 1
++      printk("%s: MEMBase_phy %x, Virt %x, len %x\n",__FUNCTION__,
++              HOST_MEM_BASE,pci_mem_va,PCI_MEM_SIZE + PCI_IO_SIZE);
++#endif
++      BUG_ON(pci_mem_va != HOST_MEM_BASE);
++
++      /* Setup bios32 and pci bus driver callbacks */
++      bus.m68k_pci_ops = &bus_ops;
++      bus.fixup = coldfire_fixup;
++      bus.conf_device = configure_device;
++
++      return &bus;
++}
++
+--- /dev/null
++++ b/arch/m68k/coldfire/muldi3.S
+@@ -0,0 +1,64 @@
++/*
++ * Coldfire muldi3 assembly verion
++ */
++ 
++#include <linux/linkage.h>
++.globl __muldi3
++
++ENTRY(__muldi3)
++      linkw   %fp,#0
++      lea     %sp@(-32),%sp
++      moveml  %d2-%d7/%a2-%a3,%sp@
++      moveal  %fp@(8), %a2
++      moveal  %fp@(12), %a3
++      moveal  %fp@(16), %a0
++      moveal  %fp@(20),%a1
++      movel   %a3,%d2
++      andil   #65535,%d2
++      movel   %a3,%d3
++      clrw    %d3
++      swap    %d3
++      movel   %a1,%d0
++      andil   #65535,%d0
++      movel   %a1,%d1
++      clrw    %d1
++      swap    %d1
++      movel   %d2,%d7
++      mulsl   %d0,%d7
++      movel   %d2,%d4
++      mulsl   %d1,%d4
++      movel   %d3,%d2
++      mulsl   %d0,%d2
++      mulsl   %d1,%d3
++      movel   %d7,%d0
++      clrw    %d0
++      swap    %d0
++      addl    %d0,%d4
++      addl    %d2,%d4
++      cmpl    %d4,%d2
++      blss    1f
++      addil   #65536,%d3
++1:
++      movel   %d4,%d0
++      clrw    %d0
++      swap    %d0
++      movel   %d3,%d5
++      addl    %d0,%d5
++      movew   %d4,%d6
++      swap    %d6
++      movew   %d7,%d6
++      movel   %d5,%d0
++      movel   %d6,%d1
++      movel   %a3,%d2
++      movel   %a0,%d3
++      mulsl   %d3,%d2
++      movel   %a2,%d3
++      movel   %a1,%d4
++      mulsl   %d4,%d3
++      addl    %d3,%d2
++      movel   %d2,%d0
++      addl    %d5,%d0
++      moveml  %sp@, %d2-%d7/%a2-%a3
++      lea     %sp@(32),%sp
++      unlk    %fp
++      rts
+--- /dev/null
++++ b/arch/m68k/coldfire/pci.c
+@@ -0,0 +1,245 @@
++/*
++ * linux/arch/m68k/coldfire/pci.c
++ *
++ * PCI initialization for Coldfire architectures.
++ *
++ * Currently Supported:
++ *    M5445x
++ *
++ * Copyright (c) 2007 Freescale Semiconductor, Inc.
++ *    Kurt Mahan <kmahan@freescale.com>
++ */
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/pci.h>
++
++#include <asm/mcfsim.h>
++#include <asm/pci.h>
++
++/* pci ops for reading/writing config */
++struct pci_raw_ops *raw_pci_ops;
++
++/* pci debug flag */
++static int debug_pci;
++
++#ifdef CONFIG_M54455
++extern int init_mcf5445x_pci(void);
++extern void mcf5445x_conf_device(struct pci_dev *dev);
++extern void mcf5445x_pci_dumpregs(void);
++
++extern struct resource pci_ioport_resource;
++extern struct resource pci_iomem_resource;
++#endif
++
++static int
++pci_read(struct pci_bus *bus, unsigned int devfn, int where,
++       int size, u32 *value)
++{
++      return raw_pci_ops->read(0, bus->number, devfn, where, size, value);
++}
++
++static int
++pci_write(struct pci_bus *bus, unsigned int devfn, int where,
++        int size, u32 value)
++{
++      return raw_pci_ops->write(0, bus->number, devfn, where, size, value);
++}
++
++struct pci_ops pci_root_ops = {
++      .read = pci_read,
++      .write = pci_write,
++};
++
++/*
++ * pcibios_setup(char *)
++ *
++ * Initialize the pcibios based on cmd line params.
++ */
++char *
++pcibios_setup(char *str)
++{
++      if (!strcmp(str, "debug")) {
++              debug_pci = 1;
++              return NULL;
++      }
++      return str;
++}
++
++/*
++ * We need to avoid collisions with `mirrored' VGA ports
++ * and other strange ISA hardware, so we always want the
++ * addresses to be allocated in the 0x000-0x0ff region
++ * modulo 0x400.
++ *
++ * Why? Because some silly external IO cards only decode
++ * the low 10 bits of the IO address. The 0x00-0xff region
++ * is reserved for motherboard devices that decode all 16
++ * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
++ * but we want to try to avoid allocating at 0x2900-0x2bff
++ * which might have be mirrored at 0x0100-0x03ff..
++ */
++void
++pcibios_align_resource(void *data, struct resource *res, resource_size_t size,
++                     resource_size_t align)
++{
++      struct pci_dev *dev = data;
++
++      if (res->flags & IORESOURCE_IO) {
++              resource_size_t start = res->start;
++
++              if (size > 0x100)
++                      printk(KERN_ERR "PCI: I/O Region %s/%d too large"
++                             " (%ld bytes)\n", pci_name(dev),
++                             dev->resource - res, (long int)size);
++
++              if (start & 0x300) {
++                      start = (start + 0x3ff) & ~0x3ff;
++                      res->start = start;
++              }
++      }
++}
++
++/*
++ * Swizzle the device pin each time we cross a bridge
++ * and return the slot number.
++ */
++static u8 __devinit
++pcibios_swizzle(struct pci_dev *dev, u8 *pin)
++{
++      return 0;
++}
++
++/*
++ * Map a slot/pin to an IRQ.
++ */
++static int
++pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++      return 0x43;
++}
++
++/*
++ * pcibios_update_irq(struct pci_dev *dev, int irq)
++ *
++ * Update a PCI interrupt.
++ */
++void
++pcibios_update_irq(struct pci_dev *dev, int irq)
++{
++      pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
++}
++
++/*
++ * pcibios_enable_device(struct pci_dev *dev, int mask)
++ *
++ * Enable a device on the PCI bus.
++ */
++int
++pcibios_enable_device(struct pci_dev *dev, int mask)
++{
++      u16 cmd, old_cmd;
++      int idx;
++      struct resource *r;
++
++      pci_read_config_word(dev, PCI_COMMAND, &cmd);
++      old_cmd = cmd;
++      for (idx = 0; idx < 6; idx++) {
++              r = &dev->resource[idx];
++              if (!r->start && r->end) {
++                      printk(KERN_ERR "PCI: Device %s not available because "
++                             "of resource collisions\n", pci_name(dev));
++                      return -EINVAL;
++              }
++              if (r->flags & IORESOURCE_IO)
++                      cmd |= PCI_COMMAND_IO;
++              if (r->flags & IORESOURCE_MEM)
++                      cmd |= PCI_COMMAND_MEMORY;
++      }
++      if (cmd != old_cmd) {
++              printk("PCI: Enabling device %s (%04x -> %04x)\n",
++                     pci_name(dev), old_cmd, cmd);
++              pci_write_config_word(dev, PCI_COMMAND, cmd);
++#ifdef CONFIG_M54455
++              mcf5445x_conf_device(dev);
++#endif
++      }
++
++      return 0;
++}
++
++/*
++ * pcibios_fixup_bus(struct pci_bus *bus)
++ */
++void
++pcibios_fixup_bus(struct pci_bus *bus)
++{
++      struct pci_dev *dev = bus->self;
++
++      if (!dev) {
++              /* Root bus. */
++#ifdef CONFIG_M54455
++              bus->resource[0] = &pci_ioport_resource;
++              bus->resource[1] = &pci_iomem_resource;
++#endif
++      }
++}
++
++/*
++ * pcibios_init(void)
++ *
++ * Allocate/initialize low level pci bus/devices.
++ */
++static int __init
++pcibios_init(void)
++{
++      struct pci_bus *bus;
++
++      if (!raw_pci_ops) {
++              printk(KERN_WARNING "PCIBIOS: FATAL: NO PCI Hardware found\n");
++              return 0;
++      }
++
++      /* allocate and scan the (only) bus */
++      bus = pci_scan_bus_parented(NULL, 0, &pci_root_ops, NULL);
++
++      /* setup everything */
++      if (bus) {
++              /* compute the bridge window sizes */
++              pci_bus_size_bridges(bus);
++
++              /* (re)assign device resources */
++              pci_bus_assign_resources(bus);
++
++              /* add the bus to the system */
++              pci_bus_add_devices(bus);
++
++              /* fixup irqs */
++              pci_fixup_irqs(pcibios_swizzle, pcibios_map_irq);
++      }
++
++      return 0;
++}
++
++/*
++ * pci_init(void)
++ *
++ * Initialize the PCI Hardware.
++ */
++static int __init
++pci_init(void)
++{
++#if defined(CONFIG_M54455)
++      init_mcf5445x_pci();
++#endif
++      if (!raw_pci_ops)
++              printk(KERN_ERR "PCI: FATAL: NO PCI Detected\n");
++
++      return 0;
++}
++
++/* low level hardware (first) */
++arch_initcall(pci_init);
++
++/* basic bios init (second) */
++subsys_initcall(pcibios_init);
+--- /dev/null
++++ b/arch/m68k/coldfire/signal.c
+@@ -0,0 +1,871 @@
++/*
++ *  linux/arch/m68k/kernel/signal.c
++ *
++ *  Copyright (C) 1991, 1992  Linus Torvalds
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++/*
++ * Derived from m68k/kernel/signal.c and the original authors are credited
++ * there.
++ *
++ * Coldfire support by:
++ * Matt Waddel Matt.Waddel@freescale.com
++ * Copyright Freescale Semiconductor, Inc 2007
++ */
++
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/kernel.h>
++#include <linux/signal.h>
++#include <linux/syscalls.h>
++#include <linux/errno.h>
++#include <linux/wait.h>
++#include <linux/ptrace.h>
++#include <linux/unistd.h>
++#include <linux/stddef.h>
++#include <linux/highuid.h>
++#include <linux/personality.h>
++#include <linux/tty.h>
++#include <linux/binfmts.h>
++
++#include <asm/setup.h>
++#include <asm/cf_uaccess.h>
++#include <asm/cf_pgtable.h>
++#include <asm/traps.h>
++#include <asm/ucontext.h>
++#include <asm/cacheflush.h>
++
++#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
++
++asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs);
++
++const int frame_extra_sizes[16] = {
++  [1] = -1,
++  [2] = sizeof(((struct frame *)0)->un.fmt2),
++  [3] = sizeof(((struct frame *)0)->un.fmt3),
++  [4] = 0,
++  [5] = -1,
++  [6] = -1,
++  [7] = sizeof(((struct frame *)0)->un.fmt7),
++  [8] = -1,
++  [9] = sizeof(((struct frame *)0)->un.fmt9),
++  [10]        = sizeof(((struct frame *)0)->un.fmta),
++  [11]        = sizeof(((struct frame *)0)->un.fmtb),
++  [12]        = -1,
++  [13]        = -1,
++  [14]        = -1,
++  [15]        = -1,
++};
++
++/*
++ * Atomically swap in the new signal mask, and wait for a signal.
++ */
++asmlinkage int do_sigsuspend(struct pt_regs *regs)
++{
++      old_sigset_t mask = regs->d3;
++      sigset_t saveset;
++
++      mask &= _BLOCKABLE;
++      spin_lock_irq(&current->sighand->siglock);
++      saveset = current->blocked;
++      siginitset(&current->blocked, mask);
++      recalc_sigpending();
++      spin_unlock_irq(&current->sighand->siglock);
++
++      regs->d0 = -EINTR;
++      while (1) {
++              current->state = TASK_INTERRUPTIBLE;
++              schedule();
++              if (do_signal(&saveset, regs))
++                      return -EINTR;
++      }
++}
++
++asmlinkage int
++do_rt_sigsuspend(struct pt_regs *regs)
++{
++      sigset_t __user *unewset = (sigset_t __user *)regs->d1;
++      size_t sigsetsize = (size_t)regs->d2;
++      sigset_t saveset, newset;
++
++      /* XXX: Don't preclude handling different sized sigset_t's.  */
++      if (sigsetsize != sizeof(sigset_t))
++              return -EINVAL;
++
++      if (copy_from_user(&newset, unewset, sizeof(newset)))
++              return -EFAULT;
++      sigdelsetmask(&newset, ~_BLOCKABLE);
++
++      spin_lock_irq(&current->sighand->siglock);
++      saveset = current->blocked;
++      current->blocked = newset;
++      recalc_sigpending();
++      spin_unlock_irq(&current->sighand->siglock);
++
++      regs->d0 = -EINTR;
++      while (1) {
++              current->state = TASK_INTERRUPTIBLE;
++              schedule();
++              if (do_signal(&saveset, regs))
++                      return -EINTR;
++      }
++}
++
++asmlinkage int
++sys_sigaction(int sig, const struct old_sigaction __user *act,
++            struct old_sigaction __user *oact)
++{
++      struct k_sigaction new_ka, old_ka;
++      int ret;
++
++      if (act) {
++              old_sigset_t mask;
++              if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
++                  __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
++                  __get_user(new_ka.sa.sa_restorer, &act->sa_restorer))
++                      return -EFAULT;
++              __get_user(new_ka.sa.sa_flags, &act->sa_flags);
++              __get_user(mask, &act->sa_mask);
++              siginitset(&new_ka.sa.sa_mask, mask);
++      }
++
++      ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
++
++      if (!ret && oact) {
++              if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
++                  __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
++                  __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer))
++                      return -EFAULT;
++              __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
++              __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
++      }
++
++      return ret;
++}
++
++asmlinkage int
++sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss)
++{
++      return do_sigaltstack(uss, uoss, rdusp());
++}
++
++
++/*
++ * Do a signal return; undo the signal stack.
++ *
++ * Keep the return code on the stack quadword aligned!
++ * That makes the cache flush below easier.
++ */
++
++struct sigframe
++{
++      char __user *pretcode;
++      int sig;
++      int code;
++      struct sigcontext __user *psc;
++      char retcode[16];
++      unsigned long extramask[_NSIG_WORDS-1];
++      struct sigcontext sc;
++};
++
++struct rt_sigframe
++{
++      char __user *pretcode;
++      int sig;
++      struct siginfo __user *pinfo;
++      void __user *puc;
++      char retcode[16];
++      struct siginfo info;
++      struct ucontext uc;
++};
++
++#define FPCONTEXT_SIZE        216
++#define uc_fpstate    uc_filler[0]
++#define uc_formatvec  uc_filler[FPCONTEXT_SIZE/4]
++#define uc_extra      uc_filler[FPCONTEXT_SIZE/4+1]
++
++#ifdef CONFIG_FPU
++static unsigned char fpu_version; /* version num of fpu, set by setup_frame */
++
++static inline int restore_fpu_state(struct sigcontext *sc)
++{
++      int err = 1;
++
++      if (FPU_IS_EMU) {
++          /* restore registers */
++          memcpy(current->thread.fpcntl, sc->sc_fpcntl, 12);
++          memcpy(current->thread.fp, sc->sc_fpregs, 24);
++          return 0;
++      }
++
++      if (CPU_IS_060 ? sc->sc_fpstate[2] : sc->sc_fpstate[0]) {
++          /* Verify the frame format.  */
++          if (!CPU_IS_060 && (sc->sc_fpstate[0] != fpu_version))
++              goto out;
++          if (CPU_IS_020_OR_030) {
++              if (m68k_fputype & FPU_68881 &&
++                  !(sc->sc_fpstate[1] == 0x18 || sc->sc_fpstate[1] == 0xb4))
++                  goto out;
++              if (m68k_fputype & FPU_68882 &&
++                  !(sc->sc_fpstate[1] == 0x38 || sc->sc_fpstate[1] == 0xd4))
++                  goto out;
++          } else if (CPU_IS_040) {
++              if (!(sc->sc_fpstate[1] == 0x00 ||
++                    sc->sc_fpstate[1] == 0x28 ||
++                    sc->sc_fpstate[1] == 0x60))
++                  goto out;
++          } else if (CPU_IS_060) {
++              if (!(sc->sc_fpstate[3] == 0x00 ||
++                    sc->sc_fpstate[3] == 0x60 ||
++                    sc->sc_fpstate[3] == 0xe0))
++                  goto out;
++          } else
++              goto out;
++
++      }
++      err = 0;
++
++out:
++      return err;
++}
++
++static inline int rt_restore_fpu_state(struct ucontext __user *uc)
++{
++      unsigned char fpstate[FPCONTEXT_SIZE];
++      int context_size = CPU_IS_060 ? 8 : 0;
++      fpregset_t fpregs;
++      int err = 1;
++
++      if (FPU_IS_EMU) {
++              /* restore fpu control register */
++              if (__copy_from_user(current->thread.fpcntl,
++                              uc->uc_mcontext.fpregs.f_fpcntl, 12))
++                      goto out;
++              /* restore all other fpu register */
++              if (__copy_from_user(current->thread.fp,
++                              uc->uc_mcontext.fpregs.f_fpregs, 96))
++                      goto out;
++              return 0;
++      }
++
++      if (__get_user(*(long *)fpstate, (long __user *)&uc->uc_fpstate))
++              goto out;
++      if (CPU_IS_060 ? fpstate[2] : fpstate[0]) {
++              if (!CPU_IS_060)
++                      context_size = fpstate[1];
++              /* Verify the frame format.  */
++              if (!CPU_IS_060 && (fpstate[0] != fpu_version))
++                      goto out;
++              if (CPU_IS_020_OR_030) {
++                      if (m68k_fputype & FPU_68881 &&
++                          !(context_size == 0x18 || context_size == 0xb4))
++                              goto out;
++                      if (m68k_fputype & FPU_68882 &&
++                          !(context_size == 0x38 || context_size == 0xd4))
++                              goto out;
++              } else if (CPU_IS_040) {
++                      if (!(context_size == 0x00 ||
++                            context_size == 0x28 ||
++                            context_size == 0x60))
++                              goto out;
++              } else if (CPU_IS_060) {
++                      if (!(fpstate[3] == 0x00 ||
++                            fpstate[3] == 0x60 ||
++                            fpstate[3] == 0xe0))
++                              goto out;
++              } else
++                      goto out;
++              if (__copy_from_user(&fpregs, &uc->uc_mcontext.fpregs,
++                                   sizeof(fpregs)))
++                      goto out;
++      }
++      if (context_size &&
++          __copy_from_user(fpstate + 4, (long __user *)&uc->uc_fpstate + 1,
++                           context_size))
++              goto out;
++      err = 0;
++
++out:
++      return err;
++}
++#endif
++
++static inline int
++restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc,
++      void __user *fp, int *pd0)
++{
++      int fsize, formatvec;
++      struct sigcontext context;
++      int err = 0;
++
++      /* get previous context */
++      if (copy_from_user(&context, usc, sizeof(context)))
++              goto badframe;
++
++      /* restore passed registers */
++      regs->d1 = context.sc_d1;
++      regs->a0 = context.sc_a0;
++      regs->a1 = context.sc_a1;
++      regs->sr = (regs->sr & 0xff00) | (context.sc_sr & 0xff);
++      regs->pc = context.sc_pc;
++      regs->orig_d0 = -1;             /* disable syscall checks */
++      wrusp(context.sc_usp);
++      formatvec = context.sc_formatvec;
++      regs->format = formatvec >> 12;
++      regs->vector = formatvec & 0xfff;
++
++#ifdef CONFIG_FPU
++      err = restore_fpu_state(&context);
++#endif
++
++      fsize = frame_extra_sizes[regs->format];
++      if (fsize < 0) {
++              /*
++               * user process trying to return with weird frame format
++               */
++#ifdef DEBUG
++              printk(KERN_DEBUG "user process returning with weird \
++                      frame format\n");
++#endif
++              goto badframe;
++      }
++
++      /* OK.  Make room on the supervisor stack for the extra junk,
++       * if necessary.
++       */
++
++      {
++              struct switch_stack *sw = (struct switch_stack *)regs - 1;
++              regs->d0 = context.sc_d0;
++#define frame_offset (sizeof(struct pt_regs)+sizeof(struct switch_stack))
++              __asm__ __volatile__
++                      ("   movel %0,%/sp\n\t"
++                       "   bra ret_from_signal\n"
++                       "4:\n"
++                       ".section __ex_table,\"a\"\n"
++                       "   .align 4\n"
++                       "   .long 2b,4b\n"
++                       ".previous"
++                       : /* no outputs, it doesn't ever return */
++                       : "a" (sw), "d" (fsize), "d" (frame_offset/4-1),
++                         "n" (frame_offset), "a" (fp)
++                       : "a0");
++#undef frame_offset
++              /*
++               * If we ever get here an exception occurred while
++               * building the above stack-frame.
++               */
++              goto badframe;
++      }
++
++      *pd0 = context.sc_d0;
++      return err;
++
++badframe:
++      return 1;
++}
++
++static inline int
++rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw,
++                  struct ucontext __user *uc, int *pd0)
++{
++      int fsize, temp;
++      greg_t __user *gregs = uc->uc_mcontext.gregs;
++      unsigned long usp;
++      int err;
++
++      err = __get_user(temp, &uc->uc_mcontext.version);
++      if (temp != MCONTEXT_VERSION)
++              goto badframe;
++      /* restore passed registers */
++      err |= __get_user(regs->d0, &gregs[0]);
++      err |= __get_user(regs->d1, &gregs[1]);
++      err |= __get_user(regs->d2, &gregs[2]);
++      err |= __get_user(regs->d3, &gregs[3]);
++      err |= __get_user(regs->d4, &gregs[4]);
++      err |= __get_user(regs->d5, &gregs[5]);
++      err |= __get_user(sw->d6, &gregs[6]);
++      err |= __get_user(sw->d7, &gregs[7]);
++      err |= __get_user(regs->a0, &gregs[8]);
++      err |= __get_user(regs->a1, &gregs[9]);
++      err |= __get_user(regs->a2, &gregs[10]);
++      err |= __get_user(sw->a3, &gregs[11]);
++      err |= __get_user(sw->a4, &gregs[12]);
++      err |= __get_user(sw->a5, &gregs[13]);
++      err |= __get_user(sw->a6, &gregs[14]);
++      err |= __get_user(usp, &gregs[15]);
++      wrusp(usp);
++      err |= __get_user(regs->pc, &gregs[16]);
++      err |= __get_user(temp, &gregs[17]);
++      regs->sr = (regs->sr & 0xff00) | (temp & 0xff);
++      regs->orig_d0 = -1;             /* disable syscall checks */
++      err |= __get_user(temp, &uc->uc_formatvec);
++      regs->format = temp >> 12;
++      regs->vector = temp & 0xfff;
++
++#ifdef CONFIG_FPU
++      err |= rt_restore_fpu_state(uc);
++#endif
++
++      if (do_sigaltstack(&uc->uc_stack, NULL, usp) == -EFAULT)
++              goto badframe;
++
++      fsize = frame_extra_sizes[regs->format];
++      if (fsize < 0) {
++              /*
++               * user process trying to return with weird frame format
++               */
++#ifdef DEBUG
++              printk(KERN_DEBUG "user process returning with weird \
++                      frame format\n");
++#endif
++              goto badframe;
++      }
++
++      /* OK.  Make room on the supervisor stack for the extra junk,
++       * if necessary.
++       */
++
++      {
++#define frame_offset (sizeof(struct pt_regs)+sizeof(struct switch_stack))
++              __asm__ __volatile__
++                      ("   movel %0,%/sp\n\t"
++                       "   bra ret_from_signal\n"
++                       "4:\n"
++                       ".section __ex_table,\"a\"\n"
++                       "   .align 4\n"
++                       "   .long 2b,4b\n"
++                       ".previous"
++                       : /* no outputs, it doesn't ever return */
++                       : "a" (sw), "d" (fsize), "d" (frame_offset/4-1),
++                         "n" (frame_offset), "a" (&uc->uc_extra)
++                       : "a0");
++#undef frame_offset
++              /*
++               * If we ever get here an exception occurred while
++               * building the above stack-frame.
++               */
++              goto badframe;
++      }
++
++      *pd0 = regs->d0;
++      return err;
++
++badframe:
++      return 1;
++}
++
++asmlinkage int do_sigreturn(unsigned long __unused)
++{
++      struct switch_stack *sw = (struct switch_stack *) &__unused;
++      struct pt_regs *regs = (struct pt_regs *) (sw + 1);
++      unsigned long usp = rdusp();
++      struct sigframe __user *frame = (struct sigframe __user *)(usp - 4);
++      sigset_t set;
++      int d0;
++
++      if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
++              goto badframe;
++      if (__get_user(set.sig[0], &frame->sc.sc_mask) ||
++          (_NSIG_WORDS > 1 &&
++           __copy_from_user(&set.sig[1], &frame->extramask,
++                            sizeof(frame->extramask))))
++              goto badframe;
++
++      sigdelsetmask(&set, ~_BLOCKABLE);
++      spin_lock_irq(&current->sighand->siglock);
++      current->blocked = set;
++      recalc_sigpending();
++      spin_unlock_irq(&current->sighand->siglock);
++
++      if (restore_sigcontext(regs, &frame->sc, frame + 1, &d0))
++              goto badframe;
++      return d0;
++
++badframe:
++      force_sig(SIGSEGV, current);
++      return 0;
++}
++
++asmlinkage int do_rt_sigreturn(unsigned long __unused)
++{
++      struct switch_stack *sw = (struct switch_stack *) &__unused;
++      struct pt_regs *regs = (struct pt_regs *) (sw + 1);
++      unsigned long usp = rdusp();
++      struct rt_sigframe __user *frame =
++              (struct rt_sigframe __user *)(usp - 4);
++      sigset_t set;
++      int d0;
++
++      if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
++              goto badframe;
++      if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
++              goto badframe;
++
++      sigdelsetmask(&set, ~_BLOCKABLE);
++      spin_lock_irq(&current->sighand->siglock);
++      current->blocked = set;
++      recalc_sigpending();
++      spin_unlock_irq(&current->sighand->siglock);
++
++      if (rt_restore_ucontext(regs, sw, &frame->uc, &d0))
++              goto badframe;
++      return d0;
++
++badframe:
++      force_sig(SIGSEGV, current);
++      return 0;
++}
++
++#ifdef CONFIG_FPU
++/*
++ * Set up a signal frame.
++ */
++
++static inline void save_fpu_state(struct sigcontext *sc, struct pt_regs *regs)
++{
++      if (FPU_IS_EMU) {
++              /* save registers */
++              memcpy(sc->sc_fpcntl, current->thread.fpcntl, 12);
++              memcpy(sc->sc_fpregs, current->thread.fp, 24);
++              return;
++      }
++}
++
++static inline int rt_save_fpu_state(struct ucontext __user *uc,
++      struct pt_regs *regs)
++{
++      int err = 0;
++
++      if (FPU_IS_EMU) {
++              /* save fpu control register */
++              err |= copy_to_user(uc->uc_mcontext.fpregs.f_fpcntl,
++                              current->thread.fpcntl, 12);
++              /* save all other fpu register */
++              err |= copy_to_user(uc->uc_mcontext.fpregs.f_fpregs,
++                              current->thread.fp, 96);
++              return err;
++      }
++
++      return err;
++}
++#endif
++
++static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs,
++                           unsigned long mask)
++{
++      sc->sc_mask = mask;
++      sc->sc_usp = rdusp();
++      sc->sc_d0 = regs->d0;
++      sc->sc_d1 = regs->d1;
++      sc->sc_a0 = regs->a0;
++      sc->sc_a1 = regs->a1;
++      sc->sc_sr = regs->sr;
++      sc->sc_pc = regs->pc;
++      sc->sc_formatvec = regs->format << 12 | regs->vector;
++#ifdef CONFIG_FPU
++      save_fpu_state(sc, regs);
++#endif
++}
++
++static inline int rt_setup_ucontext(struct ucontext __user *uc,
++      struct pt_regs *regs)
++{
++      struct switch_stack *sw = (struct switch_stack *)regs - 1;
++      greg_t __user *gregs = uc->uc_mcontext.gregs;
++      int err = 0;
++
++      err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version);
++      err |= __put_user(regs->d0, &gregs[0]);
++      err |= __put_user(regs->d1, &gregs[1]);
++      err |= __put_user(regs->d2, &gregs[2]);
++      err |= __put_user(regs->d3, &gregs[3]);
++      err |= __put_user(regs->d4, &gregs[4]);
++      err |= __put_user(regs->d5, &gregs[5]);
++      err |= __put_user(sw->d6, &gregs[6]);
++      err |= __put_user(sw->d7, &gregs[7]);
++      err |= __put_user(regs->a0, &gregs[8]);
++      err |= __put_user(regs->a1, &gregs[9]);
++      err |= __put_user(regs->a2, &gregs[10]);
++      err |= __put_user(sw->a3, &gregs[11]);
++      err |= __put_user(sw->a4, &gregs[12]);
++      err |= __put_user(sw->a5, &gregs[13]);
++      err |= __put_user(sw->a6, &gregs[14]);
++      err |= __put_user(rdusp(), &gregs[15]);
++      err |= __put_user(regs->pc, &gregs[16]);
++      err |= __put_user(regs->sr, &gregs[17]);
++      err |= __put_user((regs->format << 12) | regs->vector,
++                        &uc->uc_formatvec);
++#ifdef CONFIG_FPU
++      err |= rt_save_fpu_state(uc, regs);
++#endif
++      return err;
++}
++
++static inline void push_cache(unsigned long vaddr)
++{
++#if 0 
++// JKM -- need to add into the old cpushl cache stuff
++      cf_cache_push(__pa(vaddr), 8);
++#endif
++}
++
++static inline void __user *
++get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
++{
++      unsigned long usp;
++
++      /* Default to using normal stack.  */
++      usp = rdusp();
++
++      /* This is the X/Open sanctioned signal stack switching.  */
++      if (ka->sa.sa_flags & SA_ONSTACK) {
++              if (!sas_ss_flags(usp))
++                      usp = current->sas_ss_sp + current->sas_ss_size;
++      }
++      return (void __user *)((usp - frame_size) & -8UL);
++}
++
++static void setup_frame(int sig, struct k_sigaction *ka,
++                       sigset_t *set, struct pt_regs *regs)
++{
++      struct sigframe __user *frame;
++      int fsize = frame_extra_sizes[regs->format];
++      struct sigcontext context;
++      int err = 0;
++
++      if (fsize < 0) {
++#ifdef DEBUG
++              printk(KERN_DEBUG "setup_frame: Unknown frame format %#x\n",
++                      regs->format);
++#endif
++              goto give_sigsegv;
++      }
++
++      frame = get_sigframe(ka, regs, sizeof(*frame));
++
++      err |= __put_user((current_thread_info()->exec_domain
++                      && current_thread_info()->exec_domain->signal_invmap
++                      && sig < 32
++                      ? current_thread_info()->exec_domain->signal_invmap[sig]
++                      : sig),
++                      &frame->sig);
++
++      err |= __put_user(regs->vector, &frame->code);
++      err |= __put_user(&frame->sc, &frame->psc);
++
++      if (_NSIG_WORDS > 1)
++              err |= copy_to_user(frame->extramask, &set->sig[1],
++                                  sizeof(frame->extramask));
++
++      setup_sigcontext(&context, regs, set->sig[0]);
++      err |= copy_to_user(&frame->sc, &context, sizeof(context));
++
++      /* Set up to return from userspace.  */
++      err |= __put_user(frame->retcode, &frame->pretcode);
++      /* moveq #,d0; trap #0 */
++      err |= __put_user(0x70004e40 + (__NR_sigreturn << 16),
++                        (long __user *)(frame->retcode));
++
++      if (err)
++              goto give_sigsegv;
++
++      push_cache((unsigned long) &frame->retcode);
++
++      /* Set up registers for signal handler */
++      wrusp((unsigned long) frame);
++      regs->pc = (unsigned long) ka->sa.sa_handler;
++
++adjust_stack:
++      /* Prepare to skip over the extra stuff in the exception frame.  */
++      if (regs->stkadj) {
++              struct pt_regs *tregs =
++                      (struct pt_regs *)((ulong)regs + regs->stkadj);
++#ifdef DEBUG
++              printk(KERN_DEBUG "Performing stackadjust=%04x\n",
++                      regs->stkadj);
++#endif
++              /* This must be copied with decreasing addresses to
++                 handle overlaps.  */
++              tregs->vector = 0;
++              tregs->format = 0;
++              tregs->pc = regs->pc;
++              tregs->sr = regs->sr;
++      }
++      return;
++
++give_sigsegv:
++      force_sigsegv(sig, current);
++      goto adjust_stack;
++}
++
++static void setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
++      sigset_t *set, struct pt_regs *regs)
++{
++      struct rt_sigframe __user *frame;
++      int fsize = frame_extra_sizes[regs->format];
++      int err = 0;
++
++      if (fsize < 0) {
++#ifdef DEBUG
++              printk(KERN_DEBUG "setup_frame: Unknown frame format %#x\n",
++                      regs->format);
++#endif
++              goto give_sigsegv;
++      }
++
++      frame = get_sigframe(ka, regs, sizeof(*frame));
++
++      if (fsize) {
++              err |= copy_to_user(&frame->uc.uc_extra, regs + 1, fsize);
++              regs->stkadj = fsize;
++      }
++
++      err |= __put_user((current_thread_info()->exec_domain
++                      && current_thread_info()->exec_domain->signal_invmap
++                      && sig < 32
++                      ? current_thread_info()->exec_domain->signal_invmap[sig]
++                      : sig),
++                      &frame->sig);
++      err |= __put_user(&frame->info, &frame->pinfo);
++      err |= __put_user(&frame->uc, &frame->puc);
++      err |= copy_siginfo_to_user(&frame->info, info);
++
++      /* Create the ucontext.  */
++      err |= __put_user(0, &frame->uc.uc_flags);
++      err |= __put_user(NULL, &frame->uc.uc_link);
++      err |= __put_user((void __user *)current->sas_ss_sp,
++                        &frame->uc.uc_stack.ss_sp);
++      err |= __put_user(sas_ss_flags(rdusp()),
++                        &frame->uc.uc_stack.ss_flags);
++      err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
++      err |= rt_setup_ucontext(&frame->uc, regs);
++      err |= copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
++
++      /* Set up to return from userspace.  */
++      err |= __put_user(frame->retcode, &frame->pretcode);
++
++      /* moveq #,d0; andi.l #,D0; trap #0 */
++      err |= __put_user(0x70AD0280, (long *)(frame->retcode + 0));
++      err |= __put_user(0x000000ff, (long *)(frame->retcode + 4));
++      err |= __put_user(0x4e400000, (long *)(frame->retcode + 8));
++
++      if (err)
++              goto give_sigsegv;
++
++      push_cache((unsigned long) &frame->retcode);
++
++      /* Set up registers for signal handler */
++      wrusp((unsigned long) frame);
++      regs->pc = (unsigned long) ka->sa.sa_handler;
++
++adjust_stack:
++      /* Prepare to skip over the extra stuff in the exception frame.  */
++      if (regs->stkadj) {
++              struct pt_regs *tregs =
++                      (struct pt_regs *)((ulong)regs + regs->stkadj);
++#ifdef DEBUG
++              printk(KERN_DEBUG "Performing stackadjust=%04x\n",
++                      regs->stkadj);
++#endif
++              /* This must be copied with decreasing addresses to
++                 handle overlaps.  */
++              tregs->vector = 0;
++              tregs->format = 0;
++              tregs->pc = regs->pc;
++              tregs->sr = regs->sr;
++      }
++      return;
++
++give_sigsegv:
++      force_sigsegv(sig, current);
++      goto adjust_stack;
++}
++
++static inline void
++handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler)
++{
++      switch (regs->d0) {
++      case -ERESTARTNOHAND:
++              if (!has_handler)
++                      goto do_restart;
++              regs->d0 = -EINTR;
++              break;
++
++      case -ERESTARTSYS:
++              if (has_handler && !(ka->sa.sa_flags & SA_RESTART)) {
++                      regs->d0 = -EINTR;
++                      break;
++              }
++      /* fallthrough */
++      case -ERESTARTNOINTR:
++do_restart:
++              regs->d0 = regs->orig_d0;
++              regs->pc -= 2;
++              break;
++      }
++}
++
++/*
++ * OK, we're invoking a handler
++ */
++static void
++handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
++            sigset_t *oldset, struct pt_regs *regs)
++{
++      /* are we from a system call? */
++      if (regs->orig_d0 >= 0)
++              /* If so, check system call restarting.. */
++              handle_restart(regs, ka, 1);
++
++      /* set up the stack frame */
++      if (ka->sa.sa_flags & SA_SIGINFO)
++              setup_rt_frame(sig, ka, info, oldset, regs);
++      else
++              setup_frame(sig, ka, oldset, regs);
++
++      if (ka->sa.sa_flags & SA_ONESHOT)
++              ka->sa.sa_handler = SIG_DFL;
++
++      spin_lock_irq(&current->sighand->siglock);
++      sigorsets(&current->blocked, &current->blocked, &ka->sa.sa_mask);
++      if (!(ka->sa.sa_flags & SA_NODEFER))
++              sigaddset(&current->blocked, sig);
++      recalc_sigpending();
++      spin_unlock_irq(&current->sighand->siglock);
++}
++
++/*
++ * Note that 'init' is a special process: it doesn't get signals it doesn't
++ * want to handle. Thus you cannot kill init even with a SIGKILL even by
++ * mistake.
++ */
++asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs)
++{
++      siginfo_t info;
++      struct k_sigaction ka;
++      int signr;
++
++      current->thread.esp0 = (unsigned long) regs;
++
++      if (!oldset)
++              oldset = &current->blocked;
++
++      signr = get_signal_to_deliver(&info, &ka, regs, NULL);
++      if (signr > 0) {
++              /* Whee!  Actually deliver the signal.  */
++              handle_signal(signr, &ka, &info, oldset, regs);
++              return 1;
++      }
++
++      /* Did we come from a system call? */
++      if (regs->orig_d0 >= 0)
++              /* Restart the system call - no handlers present */
++              handle_restart(regs, NULL, 0);
++
++      return 0;
++}
+--- /dev/null
++++ b/arch/m68k/coldfire/traps.c
+@@ -0,0 +1,455 @@
++/*
++ *  linux/arch/m68knommu/kernel/traps.c
++ *
++ *  Copyright (C) 1993, 1994 by Hamish Macdonald
++ *
++ *  68040 fixes by Michael Rausch
++ *  68040 fixes by Martin Apel
++ *  68060 fixes by Roman Hodek
++ *  68060 fixes by Jesper Skov
++ *  Coldfire fixes by Kurt Mahan
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++/*
++ * Sets up all exception vectors
++ */
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/a.out.h>
++#include <linux/user.h>
++#include <linux/string.h>
++#include <linux/linkage.h>
++#include <linux/init.h>
++#include <linux/ptrace.h>
++#include <linux/kallsyms.h>
++
++#include <asm/setup.h>
++#include <asm/fpu.h>
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/traps.h>
++#include <asm/pgtable.h>
++#include <asm/machdep.h>
++#include <asm/siginfo.h>
++
++static char const * const vec_names[] = {
++      "RESET SP", "RESET PC", "BUS ERROR", "ADDRESS ERROR",
++      "ILLEGAL INSTRUCTION", "ZERO DIVIDE", "CHK", "TRAPcc",
++      "PRIVILEGE VIOLATION", "TRACE", "LINE 1010", "LINE 1111",
++      "UNASSIGNED RESERVED 12", "COPROCESSOR PROTOCOL VIOLATION",
++      "FORMAT ERROR", "UNINITIALIZED INTERRUPT",
++      "UNASSIGNED RESERVED 16", "UNASSIGNED RESERVED 17",
++      "UNASSIGNED RESERVED 18", "UNASSIGNED RESERVED 19",
++      "UNASSIGNED RESERVED 20", "UNASSIGNED RESERVED 21",
++      "UNASSIGNED RESERVED 22", "UNASSIGNED RESERVED 23",
++      "SPURIOUS INTERRUPT", "LEVEL 1 INT", "LEVEL 2 INT", "LEVEL 3 INT",
++      "LEVEL 4 INT", "LEVEL 5 INT", "LEVEL 6 INT", "LEVEL 7 INT",
++      "SYSCALL", "TRAP #1", "TRAP #2", "TRAP #3",
++      "TRAP #4", "TRAP #5", "TRAP #6", "TRAP #7",
++      "TRAP #8", "TRAP #9", "TRAP #10", "TRAP #11",
++      "TRAP #12", "TRAP #13", "TRAP #14", "TRAP #15",
++      "FPCP BSUN", "FPCP INEXACT", "FPCP DIV BY 0", "FPCP UNDERFLOW",
++      "FPCP OPERAND ERROR", "FPCP OVERFLOW", "FPCP SNAN",
++      "FPCP UNSUPPORTED OPERATION",
++      "MMU CONFIGURATION ERROR"
++};
++
++asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
++                           unsigned long error_code);
++asmlinkage void trap_c(struct frame *fp);
++extern void __init coldfire_trap_init(void);
++
++void __init trap_init(void)
++{
++      coldfire_trap_init();
++}
++
++/* The following table converts the FS encoding of a ColdFire
++   exception stack frame into the error_code value needed by
++   do_fault. */
++
++static const unsigned char fs_err_code[] = {
++      0,  /* 0000 */
++      0,  /* 0001 */
++      0,  /* 0010 */
++      0,  /* 0011 */
++      1,  /* 0100 */
++      0,  /* 0101 */
++      0,  /* 0110 */
++      0,  /* 0111 */
++      2,  /* 1000 */
++      3,  /* 1001 */
++      2,  /* 1010 */
++      0,  /* 1011 */
++      1,  /* 1100 */
++      1,  /* 1101 */
++      0,  /* 1110 */
++      0   /* 1111 */
++};
++
++#ifdef DEBUG
++static const char *fs_err_msg[16] = {
++      "Normal",
++      "Reserved",
++      "Interrupt during debug service routine",
++      "Reserved",
++      "X Protection",
++      "TLB X miss (opword)",
++      "TLB X miss (ext. word)",
++      "IFP in emulator mode",
++      "W Protection",
++      "Write error",
++      "TLB W miss",
++      "Reserved",
++      "R Protection",
++      "R/RMW Protection",
++      "TLB R miss",
++      "OEP in emulator mode",
++};
++#endif
++
++static inline void access_errorCF(struct frame *fp)
++{
++      unsigned long int mmusr, complainingAddress;
++      unsigned int err_code, fs;
++      int need_page_fault;
++
++      mmusr = fp->ptregs.mmusr;
++      complainingAddress = fp->ptregs.mmuar;
++#ifdef DEBUG
++      printk(KERN_DEBUG "pc %#lx, mmusr %#lx, complainingAddress %#lx\n", \
++              fp->ptregs.pc, mmusr, complainingAddress);
++#endif
++
++      /*
++       * error_code:
++       *      bit 0 == 0 means no page found, 1 means protection fault
++       *      bit 1 == 0 means read, 1 means write
++       */
++
++      fs = (fp->ptregs.fs2 << 2) | fp->ptregs.fs1;
++      switch (fs) {
++      case  5:  /* 0101 TLB opword X miss */
++              need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 0, 0);
++              complainingAddress = fp->ptregs.pc;
++              break;
++      case  6:  /* 0110 TLB extension word X miss */
++              need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 0, 1);
++              complainingAddress = fp->ptregs.pc + sizeof(long);
++              break;
++      case 10:  /* 1010 TLB W miss */
++              need_page_fault = cf_tlb_miss(&fp->ptregs, 1, 1, 0);
++              break;
++      case 14: /* 1110 TLB R miss */
++              need_page_fault = cf_tlb_miss(&fp->ptregs, 0, 1, 0);
++              break;
++      default:
++              /* 0000 Normal  */
++              /* 0001 Reserved */
++              /* 0010 Interrupt during debug service routine */
++              /* 0011 Reserved */
++              /* 0100 X Protection */
++              /* 0111 IFP in emulator mode */
++              /* 1000 W Protection*/
++              /* 1001 Write error*/
++              /* 1011 Reserved*/
++              /* 1100 R Protection*/
++              /* 1101 R Protection*/
++              /* 1111 OEP in emulator mode*/
++              need_page_fault = 1;
++              break;
++      }
++
++      if (need_page_fault) {
++              err_code = fs_err_code[fs];
++              if ((fs == 13) && (mmusr & MMUSR_WF)) /* rd-mod-wr access */
++                      err_code |= 2; /* bit1 - write, bit0 - protection */
++              do_page_fault(&fp->ptregs, complainingAddress, err_code);
++      }
++}
++
++void die_if_kernel(char *str, struct pt_regs *fp, int nr)
++{
++      if (!(fp->sr & PS_S))
++              return;
++
++      console_verbose();
++      printk(KERN_EMERG "%s: %08x\n", str, nr);
++      printk(KERN_EMERG "PC: [<%08lx>]", fp->pc);
++      print_symbol(" %s", fp->pc);
++      printk(KERN_EMERG "\nSR: %04x  SP: %p  a2: %08lx\n",
++             fp->sr, fp, fp->a2);
++      printk(KERN_EMERG "d0: %08lx    d1: %08lx    d2: %08lx    d3: %08lx\n",
++             fp->d0, fp->d1, fp->d2, fp->d3);
++      printk(KERN_EMERG "d4: %08lx    d5: %08lx    a0: %08lx    a1: %08lx\n",
++             fp->d4, fp->d5, fp->a0, fp->a1);
++
++      printk(KERN_EMERG "Process %s (pid: %d, stackpage=%08lx)\n",
++              current->comm, current->pid, PAGE_SIZE+(unsigned long)current);
++      show_stack(NULL, (unsigned long *)fp);
++      do_exit(SIGSEGV);
++}
++
++asmlinkage void buserr_c(struct frame *fp)
++{
++      unsigned int fs;
++
++      /* Only set esp0 if coming from user mode */
++      if (user_mode(&fp->ptregs))
++              current->thread.esp0 = (unsigned long) fp;
++
++      fs = (fp->ptregs.fs2 << 2) | fp->ptregs.fs1;
++#if defined(DEBUG)
++      printk(KERN_DEBUG "*** Bus Error *** (%x)%s\n", fs,
++              fs_err_msg[fs & 0xf]);
++#endif
++      switch (fs) {
++      case 0x5:
++      case 0x6:
++      case 0x7:
++      case 0x9:
++      case 0xa:
++      case 0xd:
++      case 0xe:
++      case 0xf:
++              access_errorCF(fp);
++              break;
++      default:
++              die_if_kernel("bad frame format", &fp->ptregs, 0);
++#if defined(DEBUG)
++              printk(KERN_DEBUG "Unknown SIGSEGV - 4\n");
++#endif
++              force_sig(SIGSEGV, current);
++      }
++}
++
++
++int kstack_depth_to_print = 48;
++
++void show_stack(struct task_struct *task, unsigned long *stack)
++{
++      unsigned long *endstack, addr, symaddr;
++      extern char _start, _etext;
++      int i;
++
++      if (!stack) {
++              if (task)
++                      stack = (unsigned long *)task->thread.ksp;
++              else
++                      stack = (unsigned long *)&stack;
++      }
++
++      addr = (unsigned long) stack;
++      endstack = (unsigned long *) PAGE_ALIGN(addr);
++
++      printk(KERN_EMERG "Stack from %08lx:", (unsigned long)stack);
++      for (i = 0; i < kstack_depth_to_print; i++) {
++              if (stack + 1 > endstack)
++                      break;
++              if (i % 8 == 0)
++                      printk("\n" KERN_EMERG "       ");
++              symaddr = *stack;
++              printk(KERN_EMERG " %08lx", *stack++);
++              if ((symaddr >= 0xc0000000) && (symaddr < 0xc1000000))
++                      print_symbol("(%s)", symaddr);
++      }
++      printk("\n");
++
++      printk(KERN_EMERG "Call Trace:");
++      i = 0;
++      while (stack + 1 <= endstack) {
++              addr = *stack++;
++              /*
++               * If the address is either in the text segment of the
++               * kernel, or in the region which contains vmalloc'ed
++               * memory, it *may* be the address of a calling
++               * routine; if so, print it so that someone tracing
++               * down the cause of the crash will be able to figure
++               * out the call path that was taken.
++               */
++              if (((addr >= (unsigned long) &_start) &&
++                   (addr <= (unsigned long) &_etext))) {
++                      if (i % 4 == 0)
++                              printk("\n" KERN_EMERG "       ");
++                      printk(KERN_EMERG " [<%08lx>]", addr);
++                      i++;
++              }
++      }
++      printk("\n");
++}
++
++void bad_super_trap(struct frame *fp)
++{
++      console_verbose();
++      if (fp->ptregs.vector < sizeof(vec_names)/sizeof(vec_names[0]))
++              printk(KERN_WARNING "*** %s ***   FORMAT=%X\n",
++                      vec_names[fp->ptregs.vector],
++                      fp->ptregs.format);
++      else
++              printk(KERN_WARNING "*** Exception %d ***   FORMAT=%X\n",
++                      fp->ptregs.vector,
++                      fp->ptregs.format);
++      printk(KERN_WARNING "Current process id is %d\n", current->pid);
++      die_if_kernel("BAD KERNEL TRAP", &fp->ptregs, 0);
++}
++
++asmlinkage void trap_c(struct frame *fp)
++{
++      int sig;
++      siginfo_t info;
++
++      if (fp->ptregs.sr & PS_S) {
++              if (fp->ptregs.vector == VEC_TRACE) {
++                      /* traced a trapping instruction */
++                      current->ptrace |= PT_DTRACE;
++              } else
++                      bad_super_trap(fp);
++              return;
++      }
++
++      /* send the appropriate signal to the user program */
++      switch (fp->ptregs.vector) {
++      case VEC_ADDRERR:
++              info.si_code = BUS_ADRALN;
++              sig = SIGBUS;
++              break;
++      case VEC_ILLEGAL:
++      case VEC_LINE10:
++      case VEC_LINE11:
++              info.si_code = ILL_ILLOPC;
++              sig = SIGILL;
++              break;
++      case VEC_PRIV:
++              info.si_code = ILL_PRVOPC;
++              sig = SIGILL;
++              break;
++      case VEC_COPROC:
++              info.si_code = ILL_COPROC;
++              sig = SIGILL;
++              break;
++      case VEC_TRAP1: /* gdbserver breakpoint */
++              fp->ptregs.pc -= 2;
++              info.si_code = TRAP_TRACE;
++              sig = SIGTRAP;
++              break;
++      case VEC_TRAP2:
++      case VEC_TRAP3:
++      case VEC_TRAP4:
++      case VEC_TRAP5:
++      case VEC_TRAP6:
++      case VEC_TRAP7:
++      case VEC_TRAP8:
++      case VEC_TRAP9:
++      case VEC_TRAP10:
++      case VEC_TRAP11:
++      case VEC_TRAP12:
++      case VEC_TRAP13:
++      case VEC_TRAP14:
++              info.si_code = ILL_ILLTRP;
++              sig = SIGILL;
++              break;
++      case VEC_FPBRUC:
++      case VEC_FPOE:
++      case VEC_FPNAN:
++              info.si_code = FPE_FLTINV;
++              sig = SIGFPE;
++              break;
++      case VEC_FPIR:
++              info.si_code = FPE_FLTRES;
++              sig = SIGFPE;
++              break;
++      case VEC_FPDIVZ:
++              info.si_code = FPE_FLTDIV;
++              sig = SIGFPE;
++              break;
++      case VEC_FPUNDER:
++              info.si_code = FPE_FLTUND;
++              sig = SIGFPE;
++              break;
++      case VEC_FPOVER:
++              info.si_code = FPE_FLTOVF;
++              sig = SIGFPE;
++              break;
++      case VEC_ZERODIV:
++              info.si_code = FPE_INTDIV;
++              sig = SIGFPE;
++              break;
++      case VEC_CHK:
++      case VEC_TRAP:
++              info.si_code = FPE_INTOVF;
++              sig = SIGFPE;
++              break;
++      case VEC_TRACE:         /* ptrace single step */
++              info.si_code = TRAP_TRACE;
++              sig = SIGTRAP;
++              break;
++      case VEC_TRAP15:                /* breakpoint */
++              info.si_code = TRAP_BRKPT;
++              sig = SIGTRAP;
++              break;
++      default:
++              info.si_code = ILL_ILLOPC;
++              sig = SIGILL;
++              break;
++      }
++      info.si_signo = sig;
++      info.si_errno = 0;
++      switch (fp->ptregs.format) {
++      default:
++              info.si_addr = (void *) fp->ptregs.pc;
++              break;
++      case 2:
++              info.si_addr = (void *) fp->un.fmt2.iaddr;
++              break;
++      case 7:
++              info.si_addr = (void *) fp->un.fmt7.effaddr;
++              break;
++      case 9:
++              info.si_addr = (void *) fp->un.fmt9.iaddr;
++              break;
++      case 10:
++              info.si_addr = (void *) fp->un.fmta.daddr;
++              break;
++      case 11:
++              info.si_addr = (void *) fp->un.fmtb.daddr;
++              break;
++      }
++      force_sig_info(sig, &info, current);
++}
++
++asmlinkage void set_esp0(unsigned long ssp)
++{
++      current->thread.esp0 = ssp;
++}
++
++/*
++ * The architecture-independent backtrace generator
++ */
++void dump_stack(void)
++{
++      unsigned long stack;
++
++      show_stack(current, &stack);
++}
++EXPORT_SYMBOL(dump_stack);
++
++#ifdef CONFIG_M68KFPU_EMU
++asmlinkage void fpemu_signal(int signal, int code, void *addr)
++{
++      siginfo_t info;
++
++      info.si_signo = signal;
++      info.si_errno = 0;
++      info.si_code = code;
++      info.si_addr = addr;
++      force_sig_info(signal, &info, current);
++}
++#endif
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/Makefile
+@@ -0,0 +1,28 @@
++#
++# Makefile for the linux kernel.
++#
++
++# Object file lists.
++
++ifneq ($(CONFIG_USB_EHCI_HCD),)
++      obj-y   += otg_host.o
++endif
++
++ifneq ($(CONFIG_USB_GADGET_MCF5445X),)
++      obj-y   += otg_device.o
++endif
++
++ifneq ($(strip $(CONFIG_USB_GADGET_MCF5445X) $(CONFIG_USB_EHCI_HCD)),)
++      obj-y   += otg_cmn.o
++endif
++
++ifneq ($(CONFIG_USB_OTG),)
++      obj-y   += otg_otg.o
++endif
++
++
++# USB Transceiver driver:
++ifneq ($(strip $(CONFIG_USB) $(CONFIG_USB_GADGET_MCF5445X)),)
++      obj-y   += xcvr.o
++endif
++
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/otg_cmn.c
+@@ -0,0 +1,106 @@
++/*
++ * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/err.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/fsl_devices.h>
++#include <linux/usb/fsl_xcvr.h>
++
++#include <asm/system.h>
++#include <asm/coldfire.h>
++
++extern void fsl_usb_enable_clk(void);
++extern void fsl_usb_disable_clk(void);
++extern int fsl_usb_mem_init(struct platform_device *pdev);
++
++extern struct fsl_xcvr_ops *xc_ops[];
++
++static int otg_used;
++
++int usbotg_init(struct platform_device *pdev)
++{
++      struct fsl_usb2_platform_data *pdata;
++      struct fsl_xcvr_ops *xops = xc_ops[USB_CTRLR_OTG];
++      int rc;
++
++      pdata = (struct fsl_usb2_platform_data *)pdev->dev.platform_data;
++
++      pr_debug("%s: pdev=0x%p  pdata=0x%p\n", __FUNCTION__, pdev, pdata);
++
++      if (!xops) {
++              printk(KERN_ERR "OTG transceiver ops missing\n");
++              return -EINVAL;
++      }
++      pdata->xcvr_ops = xops;
++      pdata->xcvr_type = xops->xcvr_type;
++
++      if (!otg_used) {
++              /* request_mem_region and ioremap registers */
++              rc = fsl_usb_mem_init(pdev);
++              if (rc)
++                      return rc;
++
++              fsl_usb_enable_clk();
++
++              if (xops->init)
++                      xops->init(pdev);
++      }
++
++      otg_used++;
++      pr_debug("%s: success\n", __FUNCTION__);
++      return 0;
++}
++
++void usbotg_uninit(struct platform_device *pdev)
++{
++      struct fsl_usb2_platform_data *pdata;
++      pdata = (struct fsl_usb2_platform_data *)pdev->dev.platform_data;
++
++      pr_debug("%s\n", __FUNCTION__);
++
++      otg_used--;
++      if (!otg_used) {
++              if (pdata->xcvr_ops && pdata->xcvr_ops->uninit)
++                      pdata->xcvr_ops->uninit(pdev);
++
++              iounmap(pdata->regs);
++              release_mem_region(pdata->r_start, pdata->r_len);
++
++              pdata->regs = NULL;
++              pdata->r_start = pdata->r_len = 0;
++
++              fsl_usb_disable_clk();
++      }
++}
++
++struct fsl_usb2_platform_data mxc_otg_config = {
++      .name            = "OTG",
++      .platform_init   = usbotg_init,
++      .platform_uninit = usbotg_uninit,
++      .es              = 1,
++      .big_endian_mmio = 1,
++      .big_endian_desc = 1,
++      .le_setup_buf    = 1,
++      .does_otg        = 1,
++      .power_budget    = 500,         /* 500 mA max power */
++      .max_ep_nr       = 4,           /* DDD read from a register ? */
++      .phy_mode        = FSL_USB2_PHY_ULPI, /* DDD redundant with xcvr_type */
++};
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/otg_device.c
+@@ -0,0 +1,89 @@
++/*
++ * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++#include <linux/err.h>
++#include <linux/platform_device.h>
++#include <linux/usb/otg.h>
++#include <linux/delay.h>
++#include <linux/fsl_devices.h>
++#include <linux/usb/fsl_xcvr.h>
++
++#include <asm/system.h>
++#include <asm/coldfire.h>
++
++#define USB_OTGREGS_BASE MCF_REG32(0xFC0B0000)
++#define INT_USB               (64 + 64 + 47)  /* INTC1:47 16.2.9.1 */
++#define INT_UOCSR     (64 + 64 + 53)  /* INTC1:53 16.2.9.1 */
++
++extern int usbotg_init(struct platform_device *pdev);
++extern void usbotg_uninit(struct fsl_usb2_platform_data *pdata);
++extern struct fsl_usb2_platform_data mxc_otg_config;
++
++struct platform_device otg_udc_device;
++
++/*!
++ * OTG Gadget device
++ */
++
++static void usb_release(struct device *dev)
++{
++      /* normally not freed */
++}
++
++static u64 udc_dmamask = ~(u32) 0;
++static struct resource otg_udc_resources[] = {
++      [0] = {
++              .start = (u32) (&USB_OTGREGS_BASE),
++              .end   = (u32) (&USB_OTGREGS_BASE + 0x1ff),
++              .flags = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start = INT_USB,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++
++struct platform_device otg_udc_device = {
++      .name = "fsl-usb2-udc",
++      .id   = -1,
++      .dev  = {
++              .release           = usb_release,
++              .dma_mask          = &udc_dmamask,
++              .coherent_dma_mask = 0xffffffff,
++              .platform_data     = &mxc_otg_config,
++              },
++      .resource = otg_udc_resources,
++      .num_resources = ARRAY_SIZE(otg_udc_resources),
++};
++
++static int __init udc_init(void)
++{
++      int rc __attribute((unused));
++
++      rc = platform_device_register(&otg_udc_device);
++      if (rc)
++              printk(KERN_ERR "usb: can't register OTG Gadget, rc=%d\n", rc);
++      else
++              printk(KERN_INFO "usb: OTG Gadget registered\n");
++      return rc;
++}
++
++subsys_initcall(udc_init);
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/otg_host.c
+@@ -0,0 +1,68 @@
++/*
++ * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/irq.h>
++#include <linux/err.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/fsl_devices.h>
++#include <linux/usb/fsl_xcvr.h>
++
++#include <asm/system.h>
++#include <asm/mcfsim.h>
++
++#define USB_OTGREGS_BASE MCF_REG32(0xFC0B0000)
++#define INT_USB               (64 + 64 + 47)  /* INTC1:47 16.2.9.1 */
++#define INT_UOCSR     (64 + 64 + 53)  /* INTC1:53 16.2.9.1 */
++
++struct platform_device *otg_host_device;
++
++extern struct platform_device *host_pdev_register(struct resource *res,
++                                                int n_res,
++                                                struct fsl_usb2_platform_data
++                                                *config);
++
++extern int usbotg_init(struct platform_device *pdev);
++extern void usbotg_uninit(struct fsl_usb2_platform_data *pdata);
++extern struct fsl_usb2_platform_data mxc_otg_config;
++
++/*!
++ * OTG host config
++ */
++static struct resource otg_host_resources[] = {
++      [0] = {
++              .start = (u32) (&USB_OTGREGS_BASE),
++              .end   = (u32) (&USB_OTGREGS_BASE + 0x1ff),
++              .flags = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start = INT_USB,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++static int __init otg_host_init(void)
++{
++      otg_host_device = host_pdev_register(otg_host_resources,
++                                           ARRAY_SIZE(otg_host_resources),
++                                           &mxc_otg_config);
++      return 0;
++}
++
++subsys_initcall(otg_host_init);
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/otg_otg.c
+@@ -0,0 +1,96 @@
++/*
++ * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++/*
++ * platform_device registration for ULPI OTG device
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/err.h>
++#include <linux/platform_device.h>
++#include <linux/fsl_devices.h>
++
++#include <asm/mcfsim.h>
++
++#define USB_OTGREGS_BASE MCF_REG32(0xFC0B0000)
++#define INT_USB               (64 + 64 + 47)  /* INTC1:47 16.2.9.1 */
++#define INT_UOCSR     (64 + 64 + 53)  /* INTC1:53 16.2.9.1 */
++
++extern int usbotg_init(struct platform_device *pdev);
++extern void usbotg_uninit(struct fsl_usb2_platform_data *pdata);
++extern struct fsl_usb2_platform_data mxc_otg_config;
++
++static void otg_otg_release(struct device *dev)
++{
++      /* normally not freed */
++}
++
++/* *INDENT-OFF* */
++static struct resource otg_otg_resources[] = {
++      [0] = {
++              .start = (u32) (&USB_OTGREGS_BASE),
++              .end   = (u32) (&USB_OTGREGS_BASE + 0x1ff),
++              .flags = IORESOURCE_MEM,
++      },
++      [1] = {
++              .start = INT_USB,
++              .flags = IORESOURCE_IRQ,
++      },
++};
++
++/*!
++ * OTG device
++ */
++static u64 otg_otg_dmamask = ~(u32) 0;
++static struct platform_device otg_otg_device = {
++      .name = "fsl-usb2-otg",
++      .id   = -1,
++      .dev  = {
++              .release           = otg_otg_release,
++              .dma_mask          = &otg_otg_dmamask,
++              .coherent_dma_mask = 0xffffffff,
++              .platform_data     = &mxc_otg_config,
++      },
++      .resource = otg_otg_resources,
++      .num_resources = ARRAY_SIZE(otg_otg_resources),
++};
++/* *INDENT-ON* */
++
++static int __init mx31_otg_otg_init(void)
++{
++      int rc = 0;
++
++      pr_debug("register OTG otg res=0x%p, size=%d\n",
++               otg_otg_device.resource, otg_otg_device.num_resources);
++
++      rc = platform_device_register(&otg_otg_device);
++      if (rc) {
++              pr_debug("can't register ULPI OTG dvc, %d\n", rc);
++      } else {
++              printk(KERN_INFO "usb: OTG ULPI transceiver registered\n");
++              pr_debug("otg_otg_device=0x%p  resources=0x%p.\n",
++                       &otg_otg_device, otg_otg_device.resource);
++      }
++
++      return rc;
++}
++
++subsys_initcall(mx31_otg_otg_init);
++
++MODULE_AUTHOR("Freescale Semiconductor, Inc.");
++MODULE_DESCRIPTION("ULPI OTG device registration");
++MODULE_LICENSE("GPL");
+--- /dev/null
++++ b/arch/m68k/coldfire/usb/xcvr.c
+@@ -0,0 +1,156 @@
++/*
++ * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/err.h>
++#include <linux/platform_device.h>
++#include <linux/delay.h>
++#include <linux/fsl_devices.h>
++#include <linux/usb/fsl_xcvr.h>
++#include <linux/usb/fsl_usb2.h>
++
++#include <asm/mcfsim.h>
++
++extern void fsl_usb_xcvr_register(struct fsl_xcvr_ops *xcvr_ops);
++extern void fsl_usb_xcvr_unregister(enum fsl_usb_ctrlr ctrlr);
++
++#define MCF_SCM_BCR           MCF_REG32(0xFC040024)
++#define MCF_SCM_BCR_GBR               (1 << 9)        /* global bursts for read */
++#define MCF_SCM_BCR_GBW               (1 << 8)        /* global bursts for write */
++#define MCF_SCM_BCR_SBE_ALL   (0xff << 0)     /* slave burst enable */
++
++
++#ifdef ULPI_DEBUG
++void print_ulpi_regs(void)
++{
++      pr_debug("MCF_SCM_BCR=0x%08lx  MCF_CCM_MISCCR=0x%08x  "
++               "MCF_GPIO_PAR_DMA=0x%08x  MCF_GPIO_PAR_USB=08%08x  "
++               "MCF_GPIO_PAR_FEC=08%08x\n",
++               MCF_SCM_BCR, MCF_CCM_MISCCR, MCF_GPIO_PAR_DMA,
++               MCF_GPIO_PAR_USB, MCF_GPIO_PAR_FEC);
++}
++EXPORT_SYMBOL(print_ulpi_regs);
++#endif
++
++
++static void xcvr_init(struct platform_device *pdev)
++{
++      struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data;
++      struct fsl_xcvr_ops *this = pdata->xcvr_ops;
++      struct fsl_usb_host_regs *regs = pdata->regs;
++
++      pr_debug("%s: ctrlr=%d  pdata=0x%p  regs=0x%p\n", __FUNCTION__,
++               this->ctrlr, pdata, pdata->regs);
++
++      /* enable USB read, write and slave bursts */
++      MCF_SCM_BCR = MCF_SCM_BCR_GBR | MCF_SCM_BCR_GBW | MCF_SCM_BCR_SBE_ALL;
++
++      /* Use external clock source if PLL isn't a multiple of 60MHz */
++      MCF_CCM_MISCCR &= ~MCF_CCM_MISCCR_USBSRC;
++
++      /* Initialize the USB Clock: use USB input clock */
++      MCF_GPIO_PAR_DMA = (MCF_GPIO_PAR_DMA & MCF_GPIO_PAR_DMA_DREQ1_MASK) |
++                         MCF_GPIO_PAR_DMA_DREQ1_USB_CLKIN;
++
++      switch (this->xcvr_type) {
++      case PORTSCX_PTS_ULPI:
++              /* Enable the required ULPI signals */
++              MCF_GPIO_PAR_DMA = (MCF_GPIO_PAR_DMA &
++                                  MCF_GPIO_PAR_DMA_DACK1_MASK) |
++                                  MCF_GPIO_PAR_DMA_DACK1_ULPI_DIR;
++
++              MCF_GPIO_PAR_USB = MCF_GPIO_PAR_USB_VBUSEN_ULPI_NXT |
++                                 MCF_GPIO_PAR_USB_VBUSOC_ULPI_STP;
++
++              MCF_GPIO_PAR_FEC = (MCF_GPIO_PAR_FEC &
++                                  MCF_GPIO_PAR_FEC_FEC0_MASK) |
++                                  MCF_GPIO_PAR_FEC_FEC0_RMII_ULPI;
++              break;
++      case PORTSCX_PTS_ONCHIP:
++              /* Enable VBUS_EN and VBUS_OC signals */
++              MCF_GPIO_PAR_USB = MCF_GPIO_PAR_USB_VBUSEN_VBUSEN |
++                                 MCF_GPIO_PAR_USB_VBUSOC_VBUSOC;
++
++              /* Setup USB_VBUS_OC signal to be active-low */
++              MCF_CCM_MISCCR |= MCF_CCM_MISCCR_USBOC;
++
++              break;
++      }
++
++      pr_debug("&regs->portsc1=0x%p  old portsc1=0x%x \n", &regs->portsc1,
++               regs->portsc1);
++
++      regs->portsc1 &= ~PORTSCX_PTS_MASK;
++      regs->portsc1 |= this->xcvr_type;
++
++      /*
++       * need to reset the controller here so that the ID pin
++       * is correctly detected.
++       */
++      regs->usbcmd |= USB_CMD_CTRL_RESET;
++
++      /*
++       * allow controller to reset, and leave time for
++       * the ULPI transceiver to reset too.
++       */
++      mdelay(10);
++
++      pr_debug("DDD %s: done.  portsc1=0x%x\n", __FUNCTION__, regs->portsc1);
++}
++
++static void xcvr_uninit(struct platform_device *pdev)
++{
++      pr_debug("%s: pdev=0x%p\n", __FUNCTION__, pdev);
++}
++
++
++struct fsl_xcvr_ops xcvr_ops_otg = {
++      .ctrlr          = USB_CTRLR_OTG,
++      .init           = xcvr_init,
++      .uninit         = xcvr_uninit,
++
++#ifdef CONFIG_USB_M5445X_ULPI
++      .xcvr_type      = PORTSCX_PTS_ULPI,
++#elif defined CONFIG_USB_M5445X_FSLS
++      .xcvr_type      = PORTSCX_PTS_ONCHIP,
++#else
++#error "Invalid USB transceiver selection."
++#endif
++};
++
++static int __init usb_xcvr_init(void)
++{
++      pr_debug("%s\n", __FUNCTION__);
++
++      fsl_usb_xcvr_register(&xcvr_ops_otg);
++
++      pr_debug("%s done\n", __FUNCTION__);
++      return 0;
++}
++
++static void __exit usb_xcvr_exit(void)
++{
++      fsl_usb_xcvr_unregister(USB_CTRLR_OTG);
++}
++
++module_init(usb_xcvr_init);
++module_exit(usb_xcvr_exit);
++
++MODULE_AUTHOR("Freescale Semiconductor, Inc.");
++MODULE_DESCRIPTION("External ULPI xcvr driver");
++MODULE_LICENSE("GPL");
++
+--- /dev/null
++++ b/arch/m68k/coldfire/usb.c
+@@ -0,0 +1,182 @@
++/*
++ *
++ * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
++ *
++ *    otg_{get,set}_transceiver() are from arm/plat-omap/usb.c.
++ *    which is Copyright (C) 2004 Texas Instruments, Inc.
++ */
++
++/*
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/io.h>
++#include <linux/err.h>
++#include <linux/platform_device.h>
++#include <linux/usb/otg.h>
++#include <linux/delay.h>
++#include <linux/fsl_devices.h>
++#include <linux/usb/fsl_xcvr.h>
++
++
++/* The dmamask must be set for EHCI to work */
++static u64 ehci_dmamask = ~(u32) 0;
++
++struct fsl_xcvr_ops *xc_ops[3] = { NULL };
++
++void fsl_usb_enable_clk(void)
++{
++}
++EXPORT_SYMBOL(fsl_usb_enable_clk);
++
++void fsl_usb_disable_clk(void)
++{
++}
++EXPORT_SYMBOL(fsl_usb_disable_clk);
++
++void fsl_usb_xcvr_register(struct fsl_xcvr_ops *xcvr_ops)
++{
++      pr_debug("%s ctrlr=%d\n", __FUNCTION__, xcvr_ops->ctrlr);
++      xc_ops[xcvr_ops->ctrlr] = xcvr_ops;
++
++}
++EXPORT_SYMBOL(fsl_usb_xcvr_register);
++
++void fsl_usb_xcvr_unregister(enum fsl_usb_ctrlr ctrlr)
++{
++      pr_debug("%s ctrlr=%d\n", __FUNCTION__, ctrlr);
++      xc_ops[ctrlr] = NULL;
++}
++EXPORT_SYMBOL(fsl_usb_xcvr_unregister);
++
++/*!
++ * Register an instance of a USB host platform device.
++ *
++ * @param     res:    resource pointer
++ * @param       n_res:        number of resources
++ * @param       config: config pointer
++ *
++ * @return      newly-registered platform_device
++ *
++ * DDD fix this comment:
++ * The USB controller supports 3 host interfaces, and the
++ * kernel can be configured to support some number of them.
++ * Each supported host interface is registered as an instance
++ * of the "fsl-ehci" device.  Call this function multiple times
++ * to register each host interface.
++ */
++static int instance_id;
++struct platform_device *host_pdev_register(struct resource *res, int n_res,
++                                        struct fsl_usb2_platform_data *config)
++{
++      struct platform_device *pdev;
++
++      pr_debug("register host res=0x%p, size=%d\n", res, n_res);
++
++      pdev = platform_device_register_simple("fsl-ehci",
++                                             instance_id, res, n_res);
++      if (IS_ERR(pdev)) {
++              printk(KERN_ERR "usb: can't register %s Host, %ld\n",
++                     config->name, PTR_ERR(pdev));
++              return NULL;
++      }
++
++      pdev->dev.coherent_dma_mask = 0xffffffff;
++      pdev->dev.dma_mask = &ehci_dmamask;
++
++      /*
++       * platform_device_add_data() makes a copy of
++       * the platform_data passed in.  That makes it
++       * impossible to share the same config struct for
++       * all OTG devices (host,gadget,otg).  So, just
++       * set the platform_data pointer ourselves.
++       */
++      pdev->dev.platform_data = config;
++
++      printk(KERN_INFO "usb: %s Host registered\n", config->name);
++      pr_debug("pdev=0x%p  dev=0x%p  resources=0x%p  pdata=0x%p\n",
++               pdev, &pdev->dev, pdev->resource, pdev->dev.platform_data);
++
++      instance_id++;
++
++      return pdev;
++}
++
++
++int fsl_usb_mem_init(struct platform_device *pdev)
++{
++      struct resource *res;
++      struct fsl_usb2_platform_data *pdata;
++
++      pdata = (struct fsl_usb2_platform_data *)pdev->dev.platform_data;
++
++      pr_debug("%s: pdev=0x%p  pdata=0x%p\n", __FUNCTION__, pdev, pdata);
++
++      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++      if (!res) {
++              dev_err(&pdev->dev, "no MEM resource.\n");
++              return -ENODEV;
++      }
++
++      pdata->r_start = res->start;
++      pdata->r_len = res->end - res->start + 1;
++      pr_debug("%s: MEM resource start=0x%x  len=0x%x\n", pdata->name,
++               res->start, pdata->r_len);
++
++      if (!request_mem_region(pdata->r_start, pdata->r_len, "OTG")) {
++              dev_err(&pdev->dev, "request_mem_region failed\n");
++              return -EBUSY;
++      }
++      pdata->regs = ioremap(pdata->r_start, pdata->r_len);
++      pr_debug("ioremapped to 0x%p\n", pdata->regs);
++
++      if (pdata->regs == NULL) {
++              dev_err(&pdev->dev, "ioremap failed\n");
++              release_mem_region(pdata->r_start, pdata->r_len);
++              return -EFAULT;
++      }
++
++      pr_debug("%s: success\n", __FUNCTION__);
++      return 0;
++}
++
++
++#if defined(CONFIG_USB_OTG)
++static struct otg_transceiver *xceiv;
++
++/**
++ * otg_get_transceiver - find the (single) OTG transceiver driver
++ *
++ * Returns the transceiver driver, after getting a refcount to it; or
++ * null if there is no such transceiver.  The caller is responsible for
++ * releasing that count.
++ */
++struct otg_transceiver *otg_get_transceiver(void)
++{
++      pr_debug("%s xceiv=0x%p\n", __FUNCTION__, xceiv);
++      if (xceiv)
++              get_device(xceiv->dev);
++      return xceiv;
++}
++EXPORT_SYMBOL(otg_get_transceiver);
++
++int otg_set_transceiver(struct otg_transceiver *x)
++{
++      pr_debug("%s xceiv=0x%p  x=0x%p\n", __FUNCTION__, xceiv, x);
++      if (xceiv && x)
++              return -EBUSY;
++      xceiv = x;
++      return 0;
++}
++EXPORT_SYMBOL(otg_set_transceiver);
++#endif
+--- /dev/null
++++ b/arch/m68k/coldfire/vmlinux-cf.lds
+@@ -0,0 +1,130 @@
++/* ld script to make m68k Coldfire Linux kernel
++ *
++ * Derived from arch/m68k/kernel/vmlinux-std.lds
++ *
++ * Updated 11/26/2007 for new CodeSourcery toolset
++ *     by Kurt Mahan <kmahan@freescale.com>
++ */
++
++#define       LOAD_OFFSET     0x00000000
++
++#include <asm-generic/vmlinux.lds.h>
++#include <asm/page_offset.h>
++
++#define       START_OFFSET    0x00020000
++#define       IMAGE_START     PAGE_OFFSET_RAW + START_OFFSET
++
++OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
++OUTPUT_ARCH(m68k)
++ENTRY(_stext)
++jiffies = jiffies_64 + 4;
++
++SECTIONS
++{
++  . = IMAGE_START;
++  .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
++      _text = .;                      /* Text and read-only data */
++      *(.text.head)
++  } :text = 0x4e75
++
++  .text : AT(ADDR(.text) - LOAD_OFFSET) {
++      TEXT_TEXT
++      SCHED_TEXT
++      LOCK_TEXT
++      *(.fixup)
++      *(.gnu.warning)
++  } :text = 0x4e75
++  _etext = .;                 /* End of text section */
++
++  . = ALIGN(16);
++  __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
++      __start___ex_table = .;
++      *(__ex_table)
++      __stop___ex_table = .;
++  }
++
++  RODATA
++
++  . = ALIGN(8192);
++  .data : AT(ADDR(.data) - LOAD_OFFSET) {     /* Data */
++      DATA_DATA
++      CONSTRUCTORS
++  } :data
++
++
++  . = ALIGN(16);
++  .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET ) {
++      *(.data.cacheline_aligned)
++  } :data
++
++  _edata = .;                 /* End of data section */
++
++  NOTES                               /* support ld --build-id */
++
++  . = ALIGN(8192);            /* Initrd */
++  .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
++      __init_begin = .;
++      _sinittext = .;
++      *(.init.text)
++      _einittext = .;
++  }
++
++  .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
++      *(.init.data)
++  }
++
++  . = ALIGN(16);
++  .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
++      __setup_start = .;
++      *(.init.setup)
++      __setup_end = .;
++  }
++
++  .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
++      __initcall_start = .;
++      INITCALLS
++      __initcall_end = .;
++  }
++
++  .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
++      __con_initcall_start = .;
++      *(.con_initcall.init)
++      __con_initcall_end = .;
++  }
++
++  SECURITY_INIT
++
++#ifdef CONFIG_BLK_DEV_INITRD
++  . = ALIGN(8192);
++  .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
++      __initramfs_start = .;
++      *(.init.ramfs)
++      __initramfs_end = .;
++  }
++#endif
++
++  . = ALIGN(8192);
++  __init_end = .;
++
++  .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
++      *(.data.init_task)      /* The initial task and kernel stack */
++  }
++
++  _sbss = .;
++  .bss : AT(ADDR(.bss) - LOAD_OFFSET) {               /* BSS */
++      *(.bss)
++  }
++  _ebss = .;
++
++  _end = . ;
++
++  /* Sections to be discarded */
++  /DISCARD/ : {
++      *(.exit.text)
++      *(.exit.data)
++      *(.exitcall.exit)
++  }
++
++  /* Stabs debugging sections.  */
++  STABS_DEBUG
++}
+--- /dev/null
++++ b/arch/m68k/configs/55_defconfig
+@@ -0,0 +1,830 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.25
++# Thu Jun 26 16:17:41 2008
++#
++CONFIG_M68K=y
++CONFIG_MMU=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_TIME_LOW_RES=y
++CONFIG_GENERIC_IOMAP=y
++# CONFIG_NO_IOPORT is not set
++# CONFIG_NO_DMA is not set
++CONFIG_ARCH_SUPPORTS_AOUT=y
++CONFIG_HZ=100
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=17
++# CONFIG_CGROUPS is not set
++CONFIG_GROUP_SCHED=y
++CONFIG_FAIR_GROUP_SCHED=y
++# CONFIG_RT_GROUP_SCHED is not set
++CONFIG_USER_SCHED=y
++# CONFIG_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_COMPAT_BRK=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++# CONFIG_HAVE_OPROFILE is not set
++# CONFIG_HAVE_KPROBES is not set
++# CONFIG_HAVE_KRETPROBES is not set
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++CONFIG_CLASSIC_RCU=y
++
++#
++# Platform dependent setup
++#
++# CONFIG_SUN3 is not set
++CONFIG_COLDFIRE=y
++CONFIG_CFV4E=y
++# CONFIG_AMIGA is not set
++# CONFIG_ATARI is not set
++# CONFIG_PCI is not set
++# CONFIG_MAC is not set
++# CONFIG_APOLLO is not set
++# CONFIG_VME is not set
++# CONFIG_HP300 is not set
++# CONFIG_SUN3X is not set
++# CONFIG_Q40 is not set
++
++#
++# Processor type
++#
++# CONFIG_M68020 is not set
++# CONFIG_M68030 is not set
++# CONFIG_M68040 is not set
++# CONFIG_M68060 is not set
++CONFIG_M5445X=y
++# CONFIG_M54451 is not set
++CONFIG_M54455=y
++# CONFIG_M54451EVB is not set
++CONFIG_M54455EVB=y
++# CONFIG_M547X_8X is not set
++CONFIG_MCFCLK=266666666
++# CONFIG_MCF_USER_HALT is not set
++CONFIG_MMU_CFV4E=y
++CONFIG_SDRAM_BASE=0x40000000
++CONFIG_SDRAM_SIZE=0x10000000
++CONFIG_NOR_FLASH_BASE=0x00000000
++# CONFIG_M68KFPU_EMU is not set
++CONFIG_ADVANCED=y
++# CONFIG_RMW_INSNS is not set
++CONFIG_SINGLE_MEMORY_CHUNK=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_NEED_MULTIPLE_NODES=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++
++#
++# General setup
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PROC_HARDWARE=y
++CONFIG_ZONE_DMA=y
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_XFRM_STATISTICS is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_MULTIPLE_TABLES is not set
++# CONFIG_IP_ROUTE_MULTIPATH is not set
++# CONFIG_IP_ROUTE_VERBOSE is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++CONFIG_INET_AH=y
++CONFIG_INET_ESP=y
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++# CONFIG_STANDALONE is not set
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++# CONFIG_MTD is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=64000
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_COLDFIRE_SEC is not set
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_B44 is not set
++CONFIG_FEC=y
++# CONFIG_FEC2 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_COLDFIRE=y
++# CONFIG_SERIAL_MCF is not set
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=y
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++# CONFIG_I2C_MCF548x is not set
++CONFIG_I2C_MCF=y
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_COLDFIRE_EDMA is not set
++# CONFIG_SPI_MASTER is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_WATCHDOG is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=m
++# CONFIG_FB is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++# CONFIG_HID_SUPPORT is not set
++# CONFIG_USB_SUPPORT is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_RTC_CLASS is not set
++
++#
++# Userspace I/O
++#
++# CONFIG_UIO is not set
++
++#
++# Character devices
++#
++# CONFIG_SERIAL_CONSOLE is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=y
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++# CONFIG_PROC_KCORE is not set
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++# CONFIG_ENABLE_MUST_CHECK is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++CONFIG_DEBUG_SLAB=y
++# CONFIG_DEBUG_SLAB_LEAK is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_FRAME_POINTER is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
++CONFIG_BOOTPARAM=y
++CONFIG_BOOTPARAM_STRING="root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/redstripe ip=172.27.155.55:172.27.155.1:172.27.255.254:255.255.0.0::eth0:off mtdparts=phys_mapped_flash:16m(User)"
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_AEAD=y
++CONFIG_CRYPTO_BLKCIPHER=y
++# CONFIG_CRYPTO_SEQIV is not set
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=y
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=m
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_AUTHENC=y
++# CONFIG_CRYPTO_LZO is not set
++CONFIG_CRYPTO_HW=y
++# CONFIG_CRYPTO_DEV_MCFCAU is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++CONFIG_CRC16=y
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+--- /dev/null
++++ b/arch/m68k/configs/m54455evb_defconfig
+@@ -0,0 +1,1037 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.23
++# Thu Dec  6 12:14:18 2007
++#
++CONFIG_M68K=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_TIME_LOW_RES=y
++CONFIG_GENERIC_IOMAP=y
++CONFIG_NO_IOPORT=y
++# CONFIG_NO_DMA is not set
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=17
++CONFIG_SYSFS_DEPRECATED=y
++# CONFIG_RELAY is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++
++#
++# Platform dependent setup
++#
++# CONFIG_SUN3 is not set
++CONFIG_COLDFIRE=y
++CONFIG_CFV4E=y
++# CONFIG_AMIGA is not set
++# CONFIG_ATARI is not set
++# CONFIG_MAC is not set
++# CONFIG_APOLLO is not set
++# CONFIG_VME is not set
++# CONFIG_HP300 is not set
++# CONFIG_SUN3X is not set
++# CONFIG_Q40 is not set
++
++#
++# Processor type
++#
++# CONFIG_M68020 is not set
++# CONFIG_M68030 is not set
++# CONFIG_M68040 is not set
++# CONFIG_M68060 is not set
++CONFIG_M54455=y
++CONFIG_MCFCLK=266666666
++# CONFIG_MCF_USER_HALT is not set
++CONFIG_MMU_CFV4E=y
++CONFIG_SDRAM_BASE=0x40000000
++CONFIG_SDRAM_SIZE=0x0FFFFFFF
++CONFIG_NOR_FLASH_BASE=0x00000000
++# CONFIG_M68KFPU_EMU is not set
++CONFIG_ADVANCED=y
++# CONFIG_RMW_INSNS is not set
++CONFIG_SINGLE_MEMORY_CHUNK=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_NEED_MULTIPLE_NODES=y
++# CONFIG_SPARSEMEM_STATIC is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++
++#
++# General setup
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PROC_HARDWARE=y
++CONFIG_ZONE_DMA=y
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_MULTIPLE_TABLES is not set
++# CONFIG_IP_ROUTE_MULTIPATH is not set
++# CONFIG_IP_ROUTE_VERBOSE is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++CONFIG_INET_AH=y
++CONFIG_INET_ESP=y
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++# CONFIG_STANDALONE is not set
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++CONFIG_MTD_DEBUG=y
++CONFIG_MTD_DEBUG_VERBOSE=0
++CONFIG_MTD_CONCAT=y
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=y
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_GEN_PROBE=y
++CONFIG_MTD_CFI_ADV_OPTIONS=y
++CONFIG_MTD_CFI_NOSWAP=y
++# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
++CONFIG_MTD_CFI_GEOMETRY=y
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++# CONFIG_MTD_CFI_I2 is not set
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_OTP is not set
++CONFIG_MTD_CFI_INTELEXT=y
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++CONFIG_MTD_CFI_UTIL=y
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=y
++CONFIG_MTD_PHYSMAP_START=0x00000000
++CONFIG_MTD_PHYSMAP_LEN=0x1000000
++CONFIG_MTD_PHYSMAP_BANKWIDTH=1
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++# CONFIG_MTD_NAND is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=64000
++CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++CONFIG_SCSI_LOWLEVEL=y
++# CONFIG_ISCSI_TCP is not set
++# CONFIG_SCSI_DEBUG is not set
++CONFIG_ATA=m
++# CONFIG_ATA_NONSTANDARD is not set
++CONFIG_PATA_FSL=m
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_FEC=y
++# CONFIG_FEC2 is not set
++CONFIG_NETDEV_1000=y
++CONFIG_NETDEV_10000=y
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++
++#
++# USB Network Adapters
++#
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_KAWETH is not set
++CONFIG_USB_PEGASUS=m
++CONFIG_USB_RTL8150=m
++CONFIG_USB_USBNET_MII=m
++CONFIG_USB_USBNET=m
++CONFIG_USB_NET_AX8817X=m
++CONFIG_USB_NET_CDCETHER=m
++# CONFIG_USB_NET_DM9601 is not set
++# CONFIG_USB_NET_GL620A is not set
++# CONFIG_USB_NET_NET1080 is not set
++# CONFIG_USB_NET_PLUSB is not set
++# CONFIG_USB_NET_MCS7830 is not set
++# CONFIG_USB_NET_RNDIS_HOST is not set
++# CONFIG_USB_NET_CDC_SUBSET is not set
++# CONFIG_USB_NET_ZAURUS is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_SHAPER is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_TSDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_COLDFIRE=y
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_WATCHDOG is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++# CONFIG_SPI_DEBUG is not set
++CONFIG_COLDFIRE_EDMA=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++# CONFIG_SPI_BITBANG is not set
++CONFIG_SPI_COLDFIRE=y
++CONFIG_SPI_COLDFIRE_DSPI_EDMA=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++CONFIG_SPI_COLDFIRE_SSI_AUDIO=y
++# CONFIG_SSIAUDIO_USE_EDMA is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=m
++# CONFIG_FB is not set
++
++#
++# Console display driver support
++#
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++CONFIG_HID_DEBUG=y
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_USB_HIDINPUT_POWERBOOK is not set
++# CONFIG_HID_FF is not set
++# CONFIG_USB_HIDDEV is not set
++CONFIG_USB_SUPPORT=y
++CONFIG_USB_ARCH_HAS_HCD=y
++# CONFIG_USB_ARCH_HAS_OHCI is not set
++CONFIG_USB_ARCH_HAS_EHCI=y
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++
++#
++# Miscellaneous USB options
++#
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_DEVICE_CLASS is not set
++# CONFIG_USB_DYNAMIC_MINORS is not set
++# CONFIG_USB_OTG is not set
++
++#
++# USB Host Controller Drivers
++#
++CONFIG_USB_EHCI_HCD=m
++CONFIG_USB_EHCI_SPLIT_ISO=y
++CONFIG_USB_EHCI_ROOT_HUB_TT=y
++# CONFIG_USB_EHCI_TT_NEWSCHED is not set
++CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
++CONFIG_USB_EHCI_BIG_ENDIAN_DESC=y
++# CONFIG_USB_ISP116X_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++# CONFIG_USB_R8A66597_HCD is not set
++CONFIG_USB_M5445X_ULPI=y
++# CONFIG_USB_M5445X_FSLS is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
++#
++
++#
++# may also be needed; see USB_STORAGE Help for more information
++#
++CONFIG_USB_STORAGE=y
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_STORAGE_ONETOUCH is not set
++# CONFIG_USB_STORAGE_KARMA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_MON is not set
++
++#
++# USB port drivers
++#
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++
++#
++# USB Miscellaneous drivers
++#
++# CONFIG_USB_EMI62 is not set
++# CONFIG_USB_EMI26 is not set
++# CONFIG_USB_ADUTUX is not set
++# CONFIG_USB_AUERSWALD is not set
++# CONFIG_USB_RIO500 is not set
++# CONFIG_USB_LEGOTOWER is not set
++# CONFIG_USB_LCD is not set
++# CONFIG_USB_BERRY_CHARGE is not set
++# CONFIG_USB_LED is not set
++# CONFIG_USB_CYPRESS_CY7C63 is not set
++# CONFIG_USB_CYTHERM is not set
++# CONFIG_USB_PHIDGET is not set
++# CONFIG_USB_IDMOUSE is not set
++# CONFIG_USB_FTDI_ELAN is not set
++# CONFIG_USB_APPLEDISPLAY is not set
++# CONFIG_USB_SISUSBVGA is not set
++# CONFIG_USB_LD is not set
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++# CONFIG_USB_TEST is not set
++
++#
++# USB DSL modem support
++#
++
++#
++# USB Gadget Support
++#
++CONFIG_USB_GADGET=m
++# CONFIG_USB_GADGET_DEBUG is not set
++# CONFIG_USB_GADGET_DEBUG_FILES is not set
++CONFIG_USB_GADGET_SELECTED=y
++# CONFIG_USB_GADGET_AMD5536UDC is not set
++# CONFIG_USB_GADGET_FSL_USB2 is not set
++# CONFIG_USB_GADGET_NET2280 is not set
++# CONFIG_USB_GADGET_PXA2XX is not set
++# CONFIG_USB_GADGET_M66592 is not set
++CONFIG_USB_GADGET_MCF5445X=y
++CONFIG_USB_MCF5445X=m
++# CONFIG_USB_GADGET_GOKU is not set
++# CONFIG_USB_GADGET_LH7A40X is not set
++# CONFIG_USB_GADGET_OMAP is not set
++# CONFIG_USB_GADGET_S3C2410 is not set
++# CONFIG_USB_GADGET_AT91 is not set
++# CONFIG_USB_GADGET_DUMMY_HCD is not set
++CONFIG_USB_GADGET_DUALSPEED=y
++# CONFIG_USB_ZERO is not set
++CONFIG_USB_ETH=m
++CONFIG_USB_ETH_RNDIS=y
++CONFIG_USB_GADGETFS=m
++CONFIG_USB_FILE_STORAGE=m
++# CONFIG_USB_FILE_STORAGE_TEST is not set
++# CONFIG_USB_G_SERIAL is not set
++# CONFIG_USB_MIDI_GADGET is not set
++# CONFIG_MMC is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_RTC_CLASS is not set
++
++#
++# DMA Engine support
++#
++# CONFIG_DMA_ENGINE is not set
++
++#
++# DMA Clients
++#
++
++#
++# DMA Devices
++#
++
++#
++# Userspace I/O
++#
++# CONFIG_UIO is not set
++
++#
++# Character devices
++#
++# CONFIG_SERIAL_CONSOLE is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_ROMFS_FS is not set
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++CONFIG_DNOTIFY=y
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=y
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++# CONFIG_PROC_KCORE is not set
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++CONFIG_RAMFS=y
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_SUMMARY is not set
++# CONFIG_JFFS2_FS_XATTR is not set
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++
++#
++# Network File Systems
++#
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++
++#
++# Native Language Support
++#
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Distributed Lock Manager
++#
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++# CONFIG_ENABLE_MUST_CHECK is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++CONFIG_DEBUG_SLAB=y
++# CONFIG_DEBUG_SLAB_LEAK is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_FRAME_POINTER is not set
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++CONFIG_BOOTPARAM=y
++CONFIG_BOOTPARAM_STRING="root=/dev/nfs rw nfsroot=172.27.155.1:/tftpboot/redstripe ip=172.27.155.55:172.27.155.1:172.27.255.254:255.255.0.0::eth0:off mtdparts=phys_mapped_flash:16m(User)"
++
++#
++# CodeTEST Setup
++#
++# CONFIG_CODETEST is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_ECB=y
++CONFIG_CRYPTO_CBC=y
++CONFIG_CRYPTO_PCBC=m
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_HW=y
++CONFIG_CRYPTO_DEV_MCFCAU=y
++CONFIG_CRYPTO_DEV_MCFCAU_DES=y
++CONFIG_CRYPTO_DEV_MCFCAU_AES=y
++CONFIG_CRYPTO_DEV_MCFCAU_MD5=y
++CONFIG_CRYPTO_DEV_MCFCAU_SHA1=y
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++CONFIG_CRC16=y
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_DMA=y
+--- /dev/null
++++ b/arch/m68k/configs/m5475evb_defconfig
+@@ -0,0 +1,954 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.25
++# Wed Jul  9 16:09:19 2008
++#
++CONFIG_M68K=y
++CONFIG_MMU=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_TIME_LOW_RES=y
++CONFIG_GENERIC_IOMAP=y
++# CONFIG_NO_IOPORT is not set
++# CONFIG_NO_DMA is not set
++CONFIG_ARCH_SUPPORTS_AOUT=y
++CONFIG_HZ=100
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=17
++# CONFIG_CGROUPS is not set
++CONFIG_GROUP_SCHED=y
++CONFIG_FAIR_GROUP_SCHED=y
++# CONFIG_RT_GROUP_SCHED is not set
++CONFIG_USER_SCHED=y
++# CONFIG_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_COMPAT_BRK=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++# CONFIG_HAVE_OPROFILE is not set
++# CONFIG_HAVE_KPROBES is not set
++# CONFIG_HAVE_KRETPROBES is not set
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++CONFIG_CLASSIC_RCU=y
++
++#
++# Platform dependent setup
++#
++# CONFIG_SUN3 is not set
++CONFIG_COLDFIRE=y
++CONFIG_CFV4E=y
++CONFIG_MCD_DMA=y
++# CONFIG_AMIGA is not set
++# CONFIG_ATARI is not set
++CONFIG_PCI=y
++# CONFIG_MAC is not set
++# CONFIG_APOLLO is not set
++# CONFIG_VME is not set
++# CONFIG_HP300 is not set
++# CONFIG_SUN3X is not set
++# CONFIG_Q40 is not set
++
++#
++# Processor type
++#
++# CONFIG_M68020 is not set
++# CONFIG_M68030 is not set
++# CONFIG_M68040 is not set
++# CONFIG_M68060 is not set
++# CONFIG_M5445X is not set
++CONFIG_M547X_8X=y
++CONFIG_M547X=y
++# CONFIG_M548X is not set
++# CONFIG_M5475AFE is not set
++# CONFIG_M5475BFE is not set
++CONFIG_M5475CFE=y
++# CONFIG_M5475DFE is not set
++# CONFIG_M5475EFE is not set
++# CONFIG_M5475FFE is not set
++# CONFIG_M5485AFE is not set
++# CONFIG_M5485BFE is not set
++# CONFIG_M5485CFE is not set
++# CONFIG_M5485DFE is not set
++# CONFIG_M5485EFE is not set
++# CONFIG_M5485FFE is not set
++CONFIG_MCFCLK=266000000
++# CONFIG_MCF_USER_HALT is not set
++CONFIG_MMU_CFV4E=y
++CONFIG_SDRAM_BASE=0x00000000
++CONFIG_SDRAM_SIZE=0x04000000
++CONFIG_NOR_FLASH_BASE=0xE0000000
++# CONFIG_M68KFPU_EMU is not set
++CONFIG_ADVANCED=y
++# CONFIG_RMW_INSNS is not set
++CONFIG_SINGLE_MEMORY_CHUNK=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_NEED_MULTIPLE_NODES=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++
++#
++# General setup
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PROC_HARDWARE=y
++CONFIG_ZONE_DMA=y
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++CONFIG_PCI_LEGACY=y
++# CONFIG_PCI_DEBUG is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_XFRM_STATISTICS is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_MULTIPLE_TABLES is not set
++# CONFIG_IP_ROUTE_MULTIPATH is not set
++# CONFIG_IP_ROUTE_VERBOSE is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++CONFIG_INET_AH=y
++CONFIG_INET_ESP=y
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++CONFIG_CAN=y
++CONFIG_CAN_RAW=y
++# CONFIG_CAN_BCM is not set
++
++#
++# CAN Device Drivers
++#
++# CONFIG_CAN_VCAN is not set
++CONFIG_CAN_FLEXCAN=y
++CONFIG_CAN_MCF547X_8X=y
++# CONFIG_CAN_DEBUG_DEVICES is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++# CONFIG_STANDALONE is not set
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++
++#
++# User Modules And Translation Layers
++#
++# CONFIG_MTD_CHAR is not set
++CONFIG_MTD_BLKDEVS=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++CONFIG_MTD_RAM=y
++CONFIG_MTD_ROM=y
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_INTEL_VR_NOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_DATAFLASH is not set
++# CONFIG_MTD_M25P80 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++# CONFIG_MTD_NAND is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++# CONFIG_BLK_DEV_SX8 is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=64000
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_COLDFIRE_SEC=y
++CONFIG_SEC_DEVICE=y
++# CONFIG_PHANTOM is not set
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_SGI_IOC4 is not set
++# CONFIG_TIFM_CORE is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++# CONFIG_SCSI_LOWLEVEL is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++# CONFIG_FIREWIRE is not set
++# CONFIG_IEEE1394 is not set
++# CONFIG_I2O is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_ARCNET is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_FEC_548x=y
++CONFIG_FEC_548x_AUTO_NEGOTIATION=y
++# CONFIG_FEC_548x_ENABLE_FEC2 is not set
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_CASSINI is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_NET_TULIP is not set
++# CONFIG_HP100 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_B44 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++# CONFIG_TR is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NET_FC is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_PCIPS2 is not set
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++# CONFIG_NOZOMI is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_COLDFIRE=y
++CONFIG_SERIAL_COLDFIRE_IRDA=y
++# CONFIG_SERIAL_MCF is not set
++# CONFIG_SERIAL_JSM is not set
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++CONFIG_SPI_DEBUG=y
++# CONFIG_COLDFIRE_EDMA is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++# CONFIG_SPI_BITBANG is not set
++CONFIG_SPI_COLDFIRE=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_SPI_COLDFIRE_SSI_AUDIO is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++# CONFIG_SOFT_WATCHDOG is not set
++CONFIG_COLDFIRE_WATCHDOG=m
++
++#
++# PCI-based Watchdog Cards
++#
++# CONFIG_PCIPCWATCHDOG is not set
++# CONFIG_WDTPCI is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++
++#
++# Graphics support
++#
++# CONFIG_DRM is not set
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=m
++# CONFIG_FB is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++CONFIG_HID_DEBUG=y
++# CONFIG_HIDRAW is not set
++# CONFIG_USB_SUPPORT is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_INFINIBAND is not set
++# CONFIG_RTC_CLASS is not set
++
++#
++# Userspace I/O
++#
++# CONFIG_UIO is not set
++
++#
++# Character devices
++#
++# CONFIG_SERIAL_CONSOLE is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=y
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++# CONFIG_PROC_KCORE is not set
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++CONFIG_ROMFS_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++# CONFIG_ENABLE_MUST_CHECK is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++CONFIG_DEBUG_SLAB=y
++# CONFIG_DEBUG_SLAB_LEAK is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_FRAME_POINTER is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
++CONFIG_BOOTPARAM=y
++CONFIG_BOOTPARAM_STRING="root=/dev/nfs rw nfsroot=172.27.163.2:/tftpboot/ltib ip=172.27.163.3:172.27.163.2:172.27.255.254:255.255.0.0::eth0:off mtdparts=phys_mapped_flash:16m(User)"
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_AEAD=y
++CONFIG_CRYPTO_BLKCIPHER=y
++# CONFIG_CRYPTO_SEQIV is not set
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_ECB is not set
++CONFIG_CRYPTO_CBC=y
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_AUTHENC=y
++# CONFIG_CRYPTO_LZO is not set
++# CONFIG_CRYPTO_HW is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++CONFIG_CRC16=y
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+--- /dev/null
++++ b/arch/m68k/configs/m5485evb_defconfig
+@@ -0,0 +1,859 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.25
++# Thu Jul 10 16:12:53 2008
++#
++CONFIG_M68K=y
++CONFIG_MMU=y
++# CONFIG_GENERIC_TIME is not set
++# CONFIG_GENERIC_CLOCKEVENTS is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_ARCH_HAS_ILOG2_U32 is not set
++# CONFIG_ARCH_HAS_ILOG2_U64 is not set
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_TIME_LOW_RES=y
++CONFIG_GENERIC_IOMAP=y
++# CONFIG_NO_IOPORT is not set
++# CONFIG_NO_DMA is not set
++CONFIG_ARCH_SUPPORTS_AOUT=y
++CONFIG_HZ=100
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++# CONFIG_POSIX_MQUEUE is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=17
++# CONFIG_CGROUPS is not set
++CONFIG_GROUP_SCHED=y
++CONFIG_FAIR_GROUP_SCHED=y
++# CONFIG_RT_GROUP_SCHED is not set
++CONFIG_USER_SCHED=y
++# CONFIG_CGROUP_SCHED is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++# CONFIG_USER_NS is not set
++# CONFIG_PID_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
++CONFIG_SYSCTL=y
++# CONFIG_EMBEDDED is not set
++CONFIG_UID16=y
++CONFIG_SYSCTL_SYSCALL=y
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++CONFIG_COMPAT_BRK=y
++CONFIG_BASE_FULL=y
++CONFIG_FUTEX=y
++CONFIG_ANON_INODES=y
++CONFIG_EPOLL=y
++CONFIG_SIGNALFD=y
++CONFIG_TIMERFD=y
++CONFIG_EVENTFD=y
++CONFIG_SHMEM=y
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++# CONFIG_PROFILING is not set
++# CONFIG_MARKERS is not set
++# CONFIG_HAVE_OPROFILE is not set
++# CONFIG_HAVE_KPROBES is not set
++# CONFIG_HAVE_KRETPROBES is not set
++CONFIG_PROC_PAGE_MONITOR=y
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++# CONFIG_KMOD is not set
++CONFIG_BLOCK=y
++CONFIG_LBD=y
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_LSF is not set
++# CONFIG_BLK_DEV_BSG is not set
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++CONFIG_CLASSIC_RCU=y
++
++#
++# Platform dependent setup
++#
++# CONFIG_SUN3 is not set
++CONFIG_COLDFIRE=y
++CONFIG_CFV4E=y
++CONFIG_MCD_DMA=y
++# CONFIG_AMIGA is not set
++# CONFIG_ATARI is not set
++# CONFIG_MAC is not set
++# CONFIG_APOLLO is not set
++# CONFIG_VME is not set
++# CONFIG_HP300 is not set
++# CONFIG_SUN3X is not set
++# CONFIG_Q40 is not set
++
++#
++# Processor type
++#
++# CONFIG_M68020 is not set
++# CONFIG_M68030 is not set
++# CONFIG_M68040 is not set
++# CONFIG_M68060 is not set
++# CONFIG_M5445X is not set
++CONFIG_M547X_8X=y
++# CONFIG_M547X is not set
++CONFIG_M548X=y
++# CONFIG_M5475AFE is not set
++# CONFIG_M5475BFE is not set
++# CONFIG_M5475CFE is not set
++# CONFIG_M5475DFE is not set
++# CONFIG_M5475EFE is not set
++# CONFIG_M5475FFE is not set
++# CONFIG_M5485AFE is not set
++# CONFIG_M5485BFE is not set
++CONFIG_M5485CFE=y
++# CONFIG_M5485DFE is not set
++# CONFIG_M5485EFE is not set
++# CONFIG_M5485FFE is not set
++CONFIG_MCFCLK=200000000
++# CONFIG_MCF_USER_HALT is not set
++CONFIG_MMU_CFV4E=y
++CONFIG_SDRAM_BASE=0x00000000
++CONFIG_SDRAM_SIZE=0x04000000
++CONFIG_NOR_FLASH_BASE=0xE0000000
++# CONFIG_M68KFPU_EMU is not set
++CONFIG_ADVANCED=y
++# CONFIG_RMW_INSNS is not set
++CONFIG_SINGLE_MEMORY_CHUNK=y
++# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=y
++CONFIG_NEED_MULTIPLE_NODES=y
++# CONFIG_SPARSEMEM_STATIC is not set
++# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
++CONFIG_SPLIT_PTLOCK_CPUS=4
++# CONFIG_RESOURCES_64BIT is not set
++CONFIG_ZONE_DMA_FLAG=1
++CONFIG_BOUNCE=y
++CONFIG_VIRT_TO_BUS=y
++
++#
++# General setup
++#
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_AOUT is not set
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PROC_HARDWARE=y
++CONFIG_ZONE_DMA=y
++# CONFIG_ARCH_SUPPORTS_MSI is not set
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_XFRM_STATISTICS is not set
++CONFIG_NET_KEY=y
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++# CONFIG_IP_MULTIPLE_TABLES is not set
++# CONFIG_IP_ROUTE_MULTIPATH is not set
++# CONFIG_IP_ROUTE_VERBOSE is not set
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++# CONFIG_IP_PNP_BOOTP is not set
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++CONFIG_INET_AH=y
++CONFIG_INET_ESP=y
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_XFRM_TUNNEL is not set
++# CONFIG_INET_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++# CONFIG_INET_XFRM_MODE_BEET is not set
++# CONFIG_INET_LRO is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_CUBIC=y
++CONFIG_DEFAULT_TCP_CONG="cubic"
++# CONFIG_TCP_MD5SIG is not set
++# CONFIG_IPV6 is not set
++# CONFIG_INET6_XFRM_TUNNEL is not set
++# CONFIG_INET6_TUNNEL is not set
++# CONFIG_NETWORK_SECMARK is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP is not set
++# CONFIG_TIPC is not set
++# CONFIG_ATM is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_DECNET is not set
++# CONFIG_LLC2 is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_SCHED is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++
++#
++# Wireless
++#
++# CONFIG_CFG80211 is not set
++# CONFIG_WIRELESS_EXT is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_IEEE80211 is not set
++# CONFIG_RFKILL is not set
++# CONFIG_NET_9P is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++# CONFIG_STANDALONE is not set
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++# CONFIG_DEBUG_DEVRES is not set
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++# CONFIG_MTD is not set
++# CONFIG_PARPORT is not set
++CONFIG_BLK_DEV=y
++# CONFIG_BLK_DEV_COW_COMMON is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_CRYPTOLOOP is not set
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=64000
++# CONFIG_BLK_DEV_XIP is not set
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_MISC_DEVICES=y
++CONFIG_COLDFIRE_SEC=y
++CONFIG_SEC_DEVICE=y
++# CONFIG_EEPROM_93CX6 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++CONFIG_HAVE_IDE=y
++# CONFIG_IDE is not set
++
++#
++# SCSI device support
++#
++# CONFIG_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++# CONFIG_SCSI_NETLINK is not set
++CONFIG_SCSI_PROC_FS=y
++
++#
++# SCSI support type (disk, tape, CD-ROM)
++#
++CONFIG_BLK_DEV_SD=y
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++# CONFIG_SCSI_SPI_ATTRS is not set
++# CONFIG_SCSI_FC_ATTRS is not set
++# CONFIG_SCSI_ISCSI_ATTRS is not set
++# CONFIG_SCSI_SAS_LIBSAS is not set
++# CONFIG_SCSI_SRP_ATTRS is not set
++# CONFIG_SCSI_LOWLEVEL is not set
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++CONFIG_NETDEVICES=y
++# CONFIG_NETDEVICES_MULTIQUEUE is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_VETH is not set
++# CONFIG_PHYLIB is not set
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++CONFIG_FEC_548x=y
++CONFIG_FEC_548x_AUTO_NEGOTIATION=y
++# CONFIG_FEC_548x_ENABLE_FEC2 is not set
++# CONFIG_ENC28J60 is not set
++# CONFIG_IBM_NEW_EMAC_ZMII is not set
++# CONFIG_IBM_NEW_EMAC_RGMII is not set
++# CONFIG_IBM_NEW_EMAC_TAH is not set
++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
++# CONFIG_B44 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 is not set
++# CONFIG_WAN is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV is not set
++
++#
++# Userland interfaces
++#
++CONFIG_INPUT_MOUSEDEV=y
++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
++# CONFIG_INPUT_JOYDEV is not set
++CONFIG_INPUT_EVDEV=y
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++# CONFIG_KEYBOARD_ATKBD is not set
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_SERPORT=y
++# CONFIG_SERIO_RAW is not set
++# CONFIG_GAMEPORT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_8250 is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_COLDFIRE=y
++# CONFIG_SERIAL_COLDFIRE_IRDA is not set
++# CONFIG_SERIAL_MCF is not set
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_IPMI_HANDLER is not set
++# CONFIG_HW_RANDOM is not set
++# CONFIG_GEN_RTC is not set
++# CONFIG_R3964 is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_I2C=y
++CONFIG_I2C_BOARDINFO=y
++# CONFIG_I2C_CHARDEV is not set
++
++#
++# I2C Algorithms
++#
++# CONFIG_I2C_ALGOBIT is not set
++# CONFIG_I2C_ALGOPCF is not set
++# CONFIG_I2C_ALGOPCA is not set
++
++#
++# I2C Hardware Bus support
++#
++CONFIG_I2C_MCF548x=y
++# CONFIG_I2C_MCF is not set
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_SIMTEC is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_EEPROM is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCF8591 is not set
++# CONFIG_TPS65010 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++
++#
++# SPI support
++#
++CONFIG_SPI=y
++CONFIG_SPI_DEBUG=y
++# CONFIG_COLDFIRE_EDMA is not set
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++# CONFIG_SPI_BITBANG is not set
++CONFIG_SPI_COLDFIRE=y
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_AT25 is not set
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 is not set
++# CONFIG_SPI_COLDFIRE_SSI_AUDIO is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_WATCHDOG is not set
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB_POSSIBLE=y
++# CONFIG_SSB is not set
++
++#
++# Multifunction device drivers
++#
++# CONFIG_MFD_SM501 is not set
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++# CONFIG_DVB_CORE is not set
++CONFIG_DAB=y
++
++#
++# Graphics support
++#
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=m
++# CONFIG_FB is not set
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Display device support
++#
++# CONFIG_DISPLAY_SUPPORT is not set
++
++#
++# Console display driver support
++#
++CONFIG_DUMMY_CONSOLE=y
++
++#
++# Sound
++#
++# CONFIG_SOUND is not set
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++CONFIG_HID_DEBUG=y
++# CONFIG_HIDRAW is not set
++# CONFIG_USB_SUPPORT is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_RTC_CLASS is not set
++
++#
++# Userspace I/O
++#
++# CONFIG_UIO is not set
++
++#
++# Character devices
++#
++# CONFIG_SERIAL_CONSOLE is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++# CONFIG_EXT3_FS_POSIX_ACL is not set
++# CONFIG_EXT3_FS_SECURITY is not set
++# CONFIG_EXT4DEV_FS is not set
++CONFIG_JBD=y
++CONFIG_FS_MBCACHE=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_JFS_FS is not set
++# CONFIG_FS_POSIX_ACL is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_GFS2_FS is not set
++# CONFIG_OCFS2_FS is not set
++CONFIG_DNOTIFY=y
++# CONFIG_INOTIFY is not set
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++# CONFIG_FUSE_FS is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=y
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++# CONFIG_PROC_KCORE is not set
++CONFIG_PROC_SYSCTL=y
++CONFIG_SYSFS=y
++CONFIG_TMPFS=y
++# CONFIG_TMPFS_POSIX_ACL is not set
++# CONFIG_HUGETLB_PAGE is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# Miscellaneous filesystems
++#
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_HFSPLUS_FS is not set
++# CONFIG_BEFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EFS_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_VXFS_FS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++CONFIG_ROMFS_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=y
++# CONFIG_NFS_V3 is not set
++# CONFIG_NFS_V4 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_SUNRPC_BIND34 is not set
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++# CONFIG_SMB_FS is not set
++# CONFIG_CIFS is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++# CONFIG_ENABLE_MUST_CHECK is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++# CONFIG_DEBUG_FS is not set
++# CONFIG_HEADERS_CHECK is not set
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DETECT_SOFTLOCKUP=y
++CONFIG_SCHED_DEBUG=y
++# CONFIG_SCHEDSTATS is not set
++# CONFIG_TIMER_STATS is not set
++CONFIG_DEBUG_SLAB=y
++# CONFIG_DEBUG_SLAB_LEAK is not set
++# CONFIG_DEBUG_RT_MUTEXES is not set
++# CONFIG_RT_MUTEX_TESTER is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_MUTEXES is not set
++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
++# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
++# CONFIG_DEBUG_KOBJECT is not set
++CONFIG_DEBUG_BUGVERBOSE=y
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_VM is not set
++# CONFIG_DEBUG_LIST is not set
++# CONFIG_DEBUG_SG is not set
++# CONFIG_FRAME_POINTER is not set
++# CONFIG_BOOT_PRINTK_DELAY is not set
++# CONFIG_RCU_TORTURE_TEST is not set
++# CONFIG_BACKTRACE_SELF_TEST is not set
++# CONFIG_FAULT_INJECTION is not set
++# CONFIG_SAMPLES is not set
++CONFIG_BOOTPARAM=y
++CONFIG_BOOTPARAM_STRING="root=/dev/nfs rw nfsroot=172.27.163.2:/tftpboot/ltib ip=172.27.163.3:172.27.163.2:172.27.255.254:255.255.0.0::eth0:off mtdparts=phys_mapped_flash:16m(User)"
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++CONFIG_CRYPTO=y
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_AEAD=y
++CONFIG_CRYPTO_BLKCIPHER=y
++# CONFIG_CRYPTO_SEQIV is not set
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_SHA1=y
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_WP512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_GF128MUL is not set
++# CONFIG_CRYPTO_ECB is not set
++CONFIG_CRYPTO_CBC=y
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_XTS is not set
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_GCM is not set
++# CONFIG_CRYPTO_CCM is not set
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_DES=y
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_AES is not set
++# CONFIG_CRYPTO_CAST5 is not set
++# CONFIG_CRYPTO_CAST6 is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_ARC4 is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++# CONFIG_CRYPTO_ANUBIS is not set
++# CONFIG_CRYPTO_SEED is not set
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_DEFLATE is not set
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_TEST=m
++CONFIG_CRYPTO_AUTHENC=y
++# CONFIG_CRYPTO_LZO is not set
++# CONFIG_CRYPTO_HW is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_CRC_CCITT=y
++CONFIG_CRC16=y
++# CONFIG_CRC_ITU_T is not set
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=y
++CONFIG_PLIST=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
+--- a/arch/m68k/Kconfig
++++ b/arch/m68k/Kconfig
+@@ -11,6 +11,14 @@ config MMU
+       bool
+       default y
++config GENERIC_TIME
++        bool
++        default n
++
++config GENERIC_CLOCKEVENTS
++        bool
++        default n
++
+ config RWSEM_GENERIC_SPINLOCK
+       bool
+       default y
+@@ -48,7 +56,7 @@ config ARCH_MAY_HAVE_PC_FDC
+       default y
+ config NO_IOPORT
+-      def_bool y
++      def_bool !(M5445X || M547X_8X)
+ config NO_DMA
+       def_bool SUN3
+@@ -119,6 +127,29 @@ config SUN3
+         If you don't want to compile a kernel exclusively for a Sun 3, say N.
++config COLDFIRE
++      bool "ColdFire V4e support"
++      default y
++      select CFV4E
++      help
++        Say Y if you want to build a kernel to run on one of the ColdFire
++        V4e boards.
++
++config CFV4E
++      bool
++      depends on COLDFIRE
++      select MMU_CFV4E if MMU
++      default y
++
++config MCD_DMA
++      bool "ColdFire MCD DMA support"
++      depends on M547X_8X
++      default y
++      help
++        This enables support for the ColdFire 547x/548x family
++        multichannel DMA support.  Many drivers need it.
++        If you want it, say Y
++
+ config AMIGA
+       bool "Amiga support"
+       depends on !MMU_SUN3
+@@ -144,9 +175,9 @@ config HADES
+         to use this kernel on a Hades, say Y here; otherwise say N.
+ config PCI
+-      bool
+-      depends on HADES
+-      default y
++      bool "PCI bus support"
++      depends on HADES || M54455 || M547X_8X
++      default n
+       help
+         Find out whether you have a PCI motherboard. PCI is the name of a
+         bus system, i.e. the way the CPU talks to the other stuff inside
+@@ -294,14 +325,142 @@ config M68060
+         If you anticipate running this kernel on a computer with a MC68060
+         processor, say Y. Otherwise, say N.
++config M5445X
++      bool "MCF5445x support"
++      depends on COLDFIRE
++      help
++          This option will add support for the MCF5445 processor with mmu.
++
++config M54451
++      bool
++      depends on M5445X
++      default n
++
++config M54455
++      bool
++      depends on M5445X
++      default n
++
++choice
++      prompt "Model"
++      depends on M5445X
++      default M54451EVB
++      config M54451EVB
++              bool "M54451EVB"
++              select M54451
++      config M54455EVB
++              bool "M54455EVB"
++              select M54455
++endchoice
++
++
++config M547X_8X
++      bool "MCF547x/MCF548x support"
++      depends on COLDFIRE
++      help
++          This option will add support for the MCF547x/MCF548x processor with mmu.
++
++config M547X
++      bool
++      depends on M547X_8X
++      default n
++
++config M548X
++      bool
++      depends on M547X_8X
++      default n
++
++choice
++      prompt "Model"
++      depends on M547X_8X
++      default M5485CFE
++      config M5475AFE
++              bool "MCF5475AFE"
++              select M547X
++      config M5475BFE
++              bool "MCF5475BFE"
++              select M547X
++      config M5475CFE
++              bool "MCF5475CFE"
++              select M547X
++      config M5475DFE
++              bool "MCF5475DFE"
++              select M547X
++      config M5475EFE
++              bool "MCF5475EFE"
++              select M547X
++      config M5475FFE
++              bool "MCF5475FFE"
++              select M547X
++
++      config M5485AFE
++              bool "MCF5485AFE"
++              select M548X
++      config M5485BFE
++              bool "MCF5485BFE"
++              select M548X
++      config M5485CFE
++              bool "MCF5485CFE"
++              select M548X
++      config M5485DFE
++              bool "MCF5485DFE"
++              select M548X
++      config M5485EFE
++              bool "MCF5485EFE"
++              select M548X
++      config M5485FFE
++              bool "MCF5485FFE"
++              select M548X
++
++endchoice
++
++config MCFCLK
++      int
++      default 266666666 if M54455EVB
++      default 240000000 if M54451EVB