Merge branch 'misc' into for-linus
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 25 Oct 2011 07:19:59 +0000 (08:19 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 25 Oct 2011 07:19:59 +0000 (08:19 +0100)
Conflicts:
arch/arm/mach-integrator/integrator_ap.c

146 files changed:
arch/arm/Kconfig
arch/arm/boot/Makefile
arch/arm/boot/compressed/Makefile
arch/arm/common/pl330.c
arch/arm/configs/integrator_defconfig
arch/arm/include/asm/Kbuild
arch/arm/include/asm/auxvec.h [deleted file]
arch/arm/include/asm/bitsperlong.h [deleted file]
arch/arm/include/asm/bug.h
arch/arm/include/asm/cachetype.h
arch/arm/include/asm/cputime.h [deleted file]
arch/arm/include/asm/device.h
arch/arm/include/asm/emergency-restart.h [deleted file]
arch/arm/include/asm/errno.h [deleted file]
arch/arm/include/asm/io.h
arch/arm/include/asm/ioctl.h [deleted file]
arch/arm/include/asm/irq_regs.h [deleted file]
arch/arm/include/asm/kdebug.h [deleted file]
arch/arm/include/asm/local.h [deleted file]
arch/arm/include/asm/local64.h [deleted file]
arch/arm/include/asm/mach/arch.h
arch/arm/include/asm/percpu.h [deleted file]
arch/arm/include/asm/poll.h [deleted file]
arch/arm/include/asm/resource.h [deleted file]
arch/arm/include/asm/sections.h [deleted file]
arch/arm/include/asm/siginfo.h [deleted file]
arch/arm/include/asm/sizes.h [deleted file]
arch/arm/include/asm/system.h
arch/arm/kernel/armksyms.c
arch/arm/kernel/debug.S
arch/arm/kernel/entry-armv.S
arch/arm/kernel/machine_kexec.c
arch/arm/kernel/process.c
arch/arm/kernel/setup.c
arch/arm/kernel/smp.c
arch/arm/kernel/traps.c
arch/arm/kernel/vmlinux.lds.S
arch/arm/lib/backtrace.S
arch/arm/lib/div64.S
arch/arm/mach-at91/Makefile.boot
arch/arm/mach-bcmring/Makefile.boot
arch/arm/mach-bcmring/arch.c
arch/arm/mach-clps711x/Makefile.boot
arch/arm/mach-clps711x/clep7312.c
arch/arm/mach-clps711x/edb7211-arch.c
arch/arm/mach-clps711x/fortunet.c
arch/arm/mach-clps711x/p720t.c
arch/arm/mach-cns3xxx/Makefile.boot
arch/arm/mach-davinci/Makefile.boot
arch/arm/mach-dove/Makefile.boot
arch/arm/mach-ebsa110/Makefile.boot
arch/arm/mach-ep93xx/Makefile.boot
arch/arm/mach-exynos4/Makefile.boot
arch/arm/mach-footbridge/Kconfig
arch/arm/mach-footbridge/Makefile.boot
arch/arm/mach-footbridge/cats-hw.c
arch/arm/mach-footbridge/netwinder-hw.c
arch/arm/mach-gemini/Makefile.boot
arch/arm/mach-h720x/Makefile.boot
arch/arm/mach-imx/Makefile.boot
arch/arm/mach-integrator/Makefile.boot
arch/arm/mach-integrator/core.c
arch/arm/mach-integrator/include/mach/platform.h
arch/arm/mach-integrator/integrator_ap.c
arch/arm/mach-iop13xx/Makefile.boot
arch/arm/mach-iop32x/Makefile.boot
arch/arm/mach-iop33x/Makefile.boot
arch/arm/mach-ixp2000/Makefile.boot
arch/arm/mach-ixp23xx/Makefile.boot
arch/arm/mach-ixp4xx/Makefile.boot
arch/arm/mach-ixp4xx/common-pci.c
arch/arm/mach-kirkwood/Makefile.boot
arch/arm/mach-ks8695/Makefile.boot
arch/arm/mach-lpc32xx/Makefile.boot
arch/arm/mach-mmp/Makefile.boot
arch/arm/mach-mmp/aspenite.c
arch/arm/mach-mmp/ttc_dkb.c
arch/arm/mach-msm/Makefile.boot
arch/arm/mach-msm/board-halibut.c
arch/arm/mach-msm/board-mahimahi.c
arch/arm/mach-msm/board-sapphire.c
arch/arm/mach-msm/board-trout.c
arch/arm/mach-mv78xx0/Makefile.boot
arch/arm/mach-mx5/Makefile.boot
arch/arm/mach-mxs/Makefile.boot
arch/arm/mach-netx/Makefile.boot
arch/arm/mach-nomadik/Makefile.boot
arch/arm/mach-nuc93x/Makefile.boot
arch/arm/mach-omap1/Makefile.boot
arch/arm/mach-omap2/Makefile.boot
arch/arm/mach-orion5x/Makefile.boot
arch/arm/mach-orion5x/common.c
arch/arm/mach-orion5x/common.h
arch/arm/mach-pnx4008/Makefile.boot
arch/arm/mach-prima2/Makefile.boot
arch/arm/mach-pxa/Makefile.boot
arch/arm/mach-pxa/cm-x300.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/eseries.c
arch/arm/mach-pxa/eseries.h
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/saar.c
arch/arm/mach-pxa/spitz.c
arch/arm/mach-pxa/tosa.c
arch/arm/mach-realview/Makefile.boot
arch/arm/mach-realview/core.c
arch/arm/mach-realview/core.h
arch/arm/mach-realview/include/mach/board-pb1176.h
arch/arm/mach-realview/realview_pb1176.c
arch/arm/mach-realview/realview_pbx.c
arch/arm/mach-rpc/Makefile.boot
arch/arm/mach-s3c2410/Makefile.boot
arch/arm/mach-s3c2412/mach-smdk2413.c
arch/arm/mach-s3c2412/mach-vstms.c
arch/arm/mach-s3c64xx/Makefile.boot
arch/arm/mach-s5p64x0/Makefile.boot
arch/arm/mach-s5pc100/Makefile.boot
arch/arm/mach-s5pv210/Makefile.boot
arch/arm/mach-sa1100/Makefile
arch/arm/mach-sa1100/Makefile.boot
arch/arm/mach-sa1100/assabet.c
arch/arm/mach-sa1100/include/mach/simpad.h
arch/arm/mach-sa1100/leds-simpad.c [deleted file]
arch/arm/mach-sa1100/leds.c
arch/arm/mach-sa1100/leds.h
arch/arm/mach-sa1100/simpad.c
arch/arm/mach-shark/Makefile.boot
arch/arm/mach-shmobile/Makefile.boot
arch/arm/mach-spear3xx/Makefile.boot
arch/arm/mach-spear6xx/Makefile.boot
arch/arm/mach-tcc8k/Makefile.boot
arch/arm/mach-tegra/Makefile.boot
arch/arm/mach-tegra/board-harmony.c
arch/arm/mach-tegra/board-paz00.c
arch/arm/mach-tegra/board-trimslice.c
arch/arm/mach-u300/Makefile.boot
arch/arm/mach-ux500/Makefile.boot
arch/arm/mach-versatile/Makefile.boot
arch/arm/mach-vexpress/Makefile.boot
arch/arm/mach-vexpress/hotplug.c
arch/arm/mach-vt8500/Makefile.boot
arch/arm/mach-w90x900/Makefile.boot
arch/arm/mach-zynq/Makefile.boot
arch/arm/mm/ioremap.c
arch/arm/tools/mach-types
drivers/pcmcia/sa1100_simpad.c

index 380e4f0..92e6954 100644 (file)
@@ -212,6 +212,10 @@ config ARM_PATCH_PHYS_VIRT
          you need to shrink the kernel to the minimal size.
 
 
+config GENERIC_BUG
+       def_bool y
+       depends on BUG
+
 source "init/Kconfig"
 
 source "kernel/Kconfig.freezer"
index a1edfd5..176062a 100644 (file)
@@ -78,7 +78,16 @@ endif
 
 $(obj)/uImage: STARTADDR=$(LOADADDR)
 
+check_for_multiple_loadaddr = \
+if [ $(words $(LOADADDR)) -gt 1 ]; then \
+       echo 'multiple load addresses: $(LOADADDR)'; \
+       echo 'This is incompatible with uImages'; \
+       echo 'Specify LOADADDR on the commandline to build an uImage'; \
+       false; \
+fi
+
 $(obj)/uImage: $(obj)/zImage FORCE
+       @$(check_for_multiple_loadaddr)
        $(call if_changed,uimage)
        @echo '  Image $@ is ready'
 
index 0c74a6f..a6b30b3 100644 (file)
@@ -139,8 +139,16 @@ bad_syms=$$($(CROSS_COMPILE)nm $@ | sed -n 's/^.\{8\} [bc] \(.*\)/\1/p') && \
   ( echo "following symbols must have non local/private scope:" >&2; \
     echo "$$bad_syms" >&2; rm -f $@; false )
 
+check_for_multiple_zreladdr = \
+if [ $(words $(ZRELADDR)) -gt 1 -a "$(CONFIG_AUTO_ZRELADDR)" = "" ]; then \
+       echo 'multiple zreladdrs: $(ZRELADDR)'; \
+       echo 'This needs CONFIG_AUTO_ZRELADDR to be set'; \
+       false; \
+fi
+
 $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
                $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
+       @$(check_for_multiple_zreladdr)
        $(call if_changed,ld)
        @$(check_for_bad_syms)
 
index 97912fa..7129cfb 100644 (file)
@@ -1546,7 +1546,7 @@ int pl330_chan_ctrl(void *ch_id, enum pl330_chan_op op)
 
                /* Start the next */
        case PL330_OP_START:
-               if (!_start(thrd))
+               if (!_thrd_active(thrd) && !_start(thrd))
                        ret = -EIO;
                break;
 
index 7196ade..1103f62 100644 (file)
@@ -1,5 +1,6 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_SYSVIPC=y
+CONFIG_TINY_RCU=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
 CONFIG_LOG_BUF_SHIFT=14
@@ -8,20 +9,29 @@ CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_ARCH_INTEGRATOR=y
 CONFIG_ARCH_INTEGRATOR_AP=y
+CONFIG_ARCH_INTEGRATOR_CP=y
 CONFIG_CPU_ARM720T=y
 CONFIG_CPU_ARM920T=y
+CONFIG_CPU_ARM922T=y
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_ARM1020=y
+CONFIG_CPU_ARM1022=y
+CONFIG_CPU_ARM1026=y
 CONFIG_PCI=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
 CONFIG_LEDS=y
 CONFIG_LEDS_CPU=y
 CONFIG_ZBOOT_ROM_TEXT=0x0
 CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp mem=32M"
+CONFIG_CMDLINE="console=ttyAM0,38400n8 root=/dev/nfs ip=bootp"
 CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
 CONFIG_FPE_NWFPE=y
-CONFIG_PM=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_UNIX=y
@@ -32,7 +42,6 @@ CONFIG_IP_PNP_DHCP=y
 CONFIG_IP_PNP_BOOTP=y
 # CONFIG_IPV6 is not set
 CONFIG_MTD=y
-CONFIG_MTD_PARTITIONS=y
 CONFIG_MTD_CMDLINE_PARTS=y
 CONFIG_MTD_AFS_PARTS=y
 CONFIG_MTD_CHAR=y
@@ -40,6 +49,7 @@ CONFIG_MTD_BLOCK=y
 CONFIG_MTD_CFI=y
 CONFIG_MTD_CFI_ADV_OPTIONS=y
 CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_PHYSMAP=y
 CONFIG_BLK_DEV_LOOP=y
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_SIZE=8192
@@ -56,6 +66,8 @@ CONFIG_FB_MODE_HELPERS=y
 CONFIG_FB_MATROX=y
 CONFIG_FB_MATROX_MILLENIUM=y
 CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL030=y
 CONFIG_EXT2_FS=y
 CONFIG_TMPFS=y
 CONFIG_JFFS2_FS=y
@@ -68,4 +80,3 @@ CONFIG_NFSD_V3=y
 CONFIG_PARTITION_ADVANCED=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
-CONFIG_DEBUG_ERRORS=y
index 6550db3..960abce 100644 (file)
@@ -1,3 +1,20 @@
 include include/asm-generic/Kbuild.asm
 
 header-y += hwcap.h
+
+generic-y += auxvec.h
+generic-y += bitsperlong.h
+generic-y += cputime.h
+generic-y += emergency-restart.h
+generic-y += errno.h
+generic-y += ioctl.h
+generic-y += irq_regs.h
+generic-y += kdebug.h
+generic-y += local.h
+generic-y += local64.h
+generic-y += percpu.h
+generic-y += poll.h
+generic-y += resource.h
+generic-y += sections.h
+generic-y += siginfo.h
+generic-y += sizes.h
diff --git a/arch/arm/include/asm/auxvec.h b/arch/arm/include/asm/auxvec.h
deleted file mode 100644 (file)
index c0536f6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef __ASMARM_AUXVEC_H
-#define __ASMARM_AUXVEC_H
-
-#endif
diff --git a/arch/arm/include/asm/bitsperlong.h b/arch/arm/include/asm/bitsperlong.h
deleted file mode 100644 (file)
index 6dc0bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/bitsperlong.h>
index 4d88425..9abe7a0 100644 (file)
@@ -3,21 +3,58 @@
 
 
 #ifdef CONFIG_BUG
-#ifdef CONFIG_DEBUG_BUGVERBOSE
-extern void __bug(const char *file, int line) __attribute__((noreturn));
-
-/* give file/line information */
-#define BUG()          __bug(__FILE__, __LINE__)
 
+/*
+ * Use a suitable undefined instruction to use for ARM/Thumb2 bug handling.
+ * We need to be careful not to conflict with those used by other modules and
+ * the register_undef_hook() system.
+ */
+#ifdef CONFIG_THUMB2_KERNEL
+#define BUG_INSTR_VALUE 0xde02
+#define BUG_INSTR_TYPE ".hword "
 #else
+#define BUG_INSTR_VALUE 0xe7f001f2
+#define BUG_INSTR_TYPE ".word "
+#endif
 
-/* this just causes an oops */
-#define BUG()          do { *(int *)0 = 0; } while (1)
 
-#endif
+#define BUG() _BUG(__FILE__, __LINE__, BUG_INSTR_VALUE)
+#define _BUG(file, line, value) __BUG(file, line, value)
+
+#ifdef CONFIG_DEBUG_BUGVERBOSE
+
+/*
+ * The extra indirection is to ensure that the __FILE__ string comes through
+ * OK. Many version of gcc do not support the asm %c parameter which would be
+ * preferable to this unpleasantness. We use mergeable string sections to
+ * avoid multiple copies of the string appearing in the kernel image.
+ */
+
+#define __BUG(__file, __line, __value)                         \
+do {                                                           \
+       BUILD_BUG_ON(sizeof(struct bug_entry) != 12);           \
+       asm volatile("1:\t" BUG_INSTR_TYPE #__value "\n"        \
+               ".pushsection .rodata.str, \"aMS\", %progbits, 1\n" \
+               "2:\t.asciz " #__file "\n"                      \
+               ".popsection\n"                                 \
+               ".pushsection __bug_table,\"a\"\n"              \
+               "3:\t.word 1b, 2b\n"                            \
+               "\t.hword " #__line ", 0\n"                     \
+               ".popsection");                                 \
+       unreachable();                                          \
+} while (0)
+
+#else  /* not CONFIG_DEBUG_BUGVERBOSE */
+
+#define __BUG(__file, __line, __value)                         \
+do {                                                           \
+       asm volatile(BUG_INSTR_TYPE #__value);                  \
+       unreachable();                                          \
+} while (0)
+#endif  /* CONFIG_DEBUG_BUGVERBOSE */
 
 #define HAVE_ARCH_BUG
-#endif
+#endif  /* CONFIG_BUG */
 
 #include <asm-generic/bug.h>
 
index c023db0..7ea7814 100644 (file)
@@ -7,6 +7,7 @@
 #define CACHEID_VIPT                   (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING)
 #define CACHEID_ASID_TAGGED            (1 << 3)
 #define CACHEID_VIPT_I_ALIASING                (1 << 4)
+#define CACHEID_PIPT                   (1 << 5)
 
 extern unsigned int cacheid;
 
@@ -16,6 +17,7 @@ extern unsigned int cacheid;
 #define cache_is_vipt_aliasing()       cacheid_is(CACHEID_VIPT_ALIASING)
 #define icache_is_vivt_asid_tagged()   cacheid_is(CACHEID_ASID_TAGGED)
 #define icache_is_vipt_aliasing()      cacheid_is(CACHEID_VIPT_I_ALIASING)
+#define icache_is_pipt()               cacheid_is(CACHEID_PIPT)
 
 /*
  * __LINUX_ARM_ARCH__ is the minimum supported CPU architecture
@@ -26,7 +28,8 @@ extern unsigned int cacheid;
 #if __LINUX_ARM_ARCH__ >= 7
 #define __CACHEID_ARCH_MIN     (CACHEID_VIPT_NONALIASING |\
                                 CACHEID_ASID_TAGGED |\
-                                CACHEID_VIPT_I_ALIASING)
+                                CACHEID_VIPT_I_ALIASING |\
+                                CACHEID_PIPT)
 #elif __LINUX_ARM_ARCH__ >= 6
 #define        __CACHEID_ARCH_MIN      (~CACHEID_VIVT)
 #else
diff --git a/arch/arm/include/asm/cputime.h b/arch/arm/include/asm/cputime.h
deleted file mode 100644 (file)
index 3a8002a..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __ARM_CPUTIME_H
-#define __ARM_CPUTIME_H
-
-#include <asm-generic/cputime.h>
-
-#endif /* __ARM_CPUTIME_H */
index 9f390ce..6615f03 100644 (file)
@@ -10,6 +10,9 @@ struct dev_archdata {
 #ifdef CONFIG_DMABOUNCE
        struct dmabounce_device_info *dmabounce;
 #endif
+#ifdef CONFIG_IOMMU_API
+       void *iommu; /* private IOMMU data */
+#endif
 };
 
 struct pdev_archdata {
diff --git a/arch/arm/include/asm/emergency-restart.h b/arch/arm/include/asm/emergency-restart.h
deleted file mode 100644 (file)
index 108d8c4..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ASM_EMERGENCY_RESTART_H
-#define _ASM_EMERGENCY_RESTART_H
-
-#include <asm-generic/emergency-restart.h>
-
-#endif /* _ASM_EMERGENCY_RESTART_H */
diff --git a/arch/arm/include/asm/errno.h b/arch/arm/include/asm/errno.h
deleted file mode 100644 (file)
index 6e60f06..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ARM_ERRNO_H
-#define _ARM_ERRNO_H
-
-#include <asm-generic/errno.h>
-
-#endif
index dc2d510..769f65d 100644 (file)
@@ -80,6 +80,7 @@ extern void __iomem *__arm_ioremap_caller(unsigned long, size_t, unsigned int,
 
 extern void __iomem *__arm_ioremap_pfn(unsigned long, unsigned long, size_t, unsigned int);
 extern void __iomem *__arm_ioremap(unsigned long, size_t, unsigned int);
+extern void __iomem *__arm_ioremap_exec(unsigned long, size_t, bool cached);
 extern void __iounmap(volatile void __iomem *addr);
 
 /*
@@ -210,11 +211,11 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
  * IO port primitives for more information.
  */
 #ifdef __mem_pci
-#define readb_relaxed(c) ({ u8  __v = __raw_readb(__mem_pci(c)); __v; })
-#define readw_relaxed(c) ({ u16 __v = le16_to_cpu((__force __le16) \
-                                       __raw_readw(__mem_pci(c))); __v; })
-#define readl_relaxed(c) ({ u32 __v = le32_to_cpu((__force __le32) \
-                                       __raw_readl(__mem_pci(c))); __v; })
+#define readb_relaxed(c) ({ u8  __r = __raw_readb(__mem_pci(c)); __r; })
+#define readw_relaxed(c) ({ u16 __r = le16_to_cpu((__force __le16) \
+                                       __raw_readw(__mem_pci(c))); __r; })
+#define readl_relaxed(c) ({ u32 __r = le32_to_cpu((__force __le32) \
+                                       __raw_readl(__mem_pci(c))); __r; })
 
 #define writeb_relaxed(v,c)    ((void)__raw_writeb(v,__mem_pci(c)))
 #define writew_relaxed(v,c)    ((void)__raw_writew((__force u16) \
diff --git a/arch/arm/include/asm/ioctl.h b/arch/arm/include/asm/ioctl.h
deleted file mode 100644 (file)
index b279fe0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/ioctl.h>
diff --git a/arch/arm/include/asm/irq_regs.h b/arch/arm/include/asm/irq_regs.h
deleted file mode 100644 (file)
index 3dd9c0b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/irq_regs.h>
diff --git a/arch/arm/include/asm/kdebug.h b/arch/arm/include/asm/kdebug.h
deleted file mode 100644 (file)
index 6ece1b0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/kdebug.h>
diff --git a/arch/arm/include/asm/local.h b/arch/arm/include/asm/local.h
deleted file mode 100644 (file)
index c11c530..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/local.h>
diff --git a/arch/arm/include/asm/local64.h b/arch/arm/include/asm/local64.h
deleted file mode 100644 (file)
index 36c93b5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/local64.h>
index 217aa19..c569998 100644 (file)
@@ -34,8 +34,7 @@ struct machine_desc {
        unsigned int            reserve_lp1 :1; /* never has lp1        */
        unsigned int            reserve_lp2 :1; /* never has lp2        */
        unsigned int            soft_reboot :1; /* soft reboot          */
-       void                    (*fixup)(struct machine_desc *,
-                                        struct tag *, char **,
+       void                    (*fixup)(struct tag *, char **,
                                         struct meminfo *);
        void                    (*reserve)(void);/* reserve mem blocks  */
        void                    (*map_io)(void);/* IO mapping function  */
diff --git a/arch/arm/include/asm/percpu.h b/arch/arm/include/asm/percpu.h
deleted file mode 100644 (file)
index b4e32d8..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __ARM_PERCPU
-#define __ARM_PERCPU
-
-#include <asm-generic/percpu.h>
-
-#endif
diff --git a/arch/arm/include/asm/poll.h b/arch/arm/include/asm/poll.h
deleted file mode 100644 (file)
index c98509d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/poll.h>
diff --git a/arch/arm/include/asm/resource.h b/arch/arm/include/asm/resource.h
deleted file mode 100644 (file)
index 734b581..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ARM_RESOURCE_H
-#define _ARM_RESOURCE_H
-
-#include <asm-generic/resource.h>
-
-#endif
diff --git a/arch/arm/include/asm/sections.h b/arch/arm/include/asm/sections.h
deleted file mode 100644 (file)
index 2b8c516..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#include <asm-generic/sections.h>
diff --git a/arch/arm/include/asm/siginfo.h b/arch/arm/include/asm/siginfo.h
deleted file mode 100644 (file)
index 5e21852..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ASMARM_SIGINFO_H
-#define _ASMARM_SIGINFO_H
-
-#include <asm-generic/siginfo.h>
-
-#endif
diff --git a/arch/arm/include/asm/sizes.h b/arch/arm/include/asm/sizes.h
deleted file mode 100644 (file)
index 154b89b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-/*  Size definitions
- *  Copyright (C) ARM Limited 1998. All rights reserved.
- */
-#include <asm-generic/sizes.h>
-
-#define SZ_48M (SZ_32M + SZ_16M)
index ed6b049..984014b 100644 (file)
@@ -57,6 +57,7 @@
 
 #ifndef __ASSEMBLY__
 
+#include <linux/compiler.h>
 #include <linux/linkage.h>
 #include <linux/irqflags.h>
 
@@ -90,14 +91,13 @@ void hook_ifault_code(int nr, int (*fn)(unsigned long, unsigned int,
 #define xchg(ptr,x) \
        ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
 
-extern asmlinkage void __backtrace(void);
 extern asmlinkage void c_backtrace(unsigned long fp, int pmode);
 
 struct mm_struct;
 extern void show_pte(struct mm_struct *mm, unsigned long addr);
 extern void __show_regs(struct pt_regs *);
 
-extern int cpu_architecture(void);
+extern int __pure cpu_architecture(void);
 extern void cpu_init(void);
 
 void arm_machine_restart(char mode, const char *cmd);
index aeef960..8e3c6f1 100644 (file)
@@ -49,9 +49,6 @@ extern void __aeabi_ulcmp(void);
 
 extern void fpundefinstr(void);
 
-
-EXPORT_SYMBOL(__backtrace);
-
        /* platform dependent support */
 EXPORT_SYMBOL(__udelay);
 EXPORT_SYMBOL(__const_udelay);
index bcd66e0..0f852d0 100644 (file)
@@ -151,6 +151,8 @@ printhex:   adr     r2, hexbuf
                b       printascii
 ENDPROC(printhex2)
 
+hexbuf:                .space 16
+
                .ltorg
 
 ENTRY(printascii)
@@ -175,5 +177,3 @@ ENTRY(printch)
                mov     r0, #0
                b       1b
 ENDPROC(printch)
-
-hexbuf:                .space 16
index a87cbf8..9ad50c4 100644 (file)
@@ -24,6 +24,7 @@
 #include <asm/unwind.h>
 #include <asm/unistd.h>
 #include <asm/tls.h>
+#include <asm/system.h>
 
 #include "entry-header.S"
 #include <asm/entry-macro-multi.S>
@@ -262,8 +263,7 @@ __und_svc:
        ldr     r0, [r4, #-4]
 #else
        ldrh    r0, [r4, #-2]                   @ Thumb instruction at LR - 2
-       and     r9, r0, #0xf800
-       cmp     r9, #0xe800                     @ 32-bit instruction if xx >= 0
+       cmp     r0, #0xe800                     @ 32-bit instruction if xx >= 0
        ldrhhs  r9, [r4]                        @ bottom 16 bits
        orrhs   r0, r9, r0, lsl #16
 #endif
@@ -440,18 +440,46 @@ __und_usr:
 #endif
        beq     call_fpe
        @ Thumb instruction
-#if __LINUX_ARM_ARCH__ >= 7
+#if CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7
+/*
+ * Thumb-2 instruction handling.  Note that because pre-v6 and >= v6 platforms
+ * can never be supported in a single kernel, this code is not applicable at
+ * all when __LINUX_ARM_ARCH__ < 6.  This allows simplifying assumptions to be
+ * made about .arch directives.
+ */
+#if __LINUX_ARM_ARCH__ < 7
+/* If the target CPU may not be Thumb-2-capable, a run-time check is needed: */
+#define NEED_CPU_ARCHITECTURE
+       ldr     r5, .LCcpu_architecture
+       ldr     r5, [r5]
+       cmp     r5, #CPU_ARCH_ARMv7
+       blo     __und_usr_unknown
+/*
+ * The following code won't get run unless the running CPU really is v7, so
+ * coding round the lack of ldrht on older arches is pointless.  Temporarily
+ * override the assembler target arch with the minimum required instead:
+ */
+       .arch   armv6t2
+#endif
 2:
  ARM(  ldrht   r5, [r4], #2    )
  THUMB(        ldrht   r5, [r4]        )
  THUMB(        add     r4, r4, #2      )
-       and     r0, r5, #0xf800                 @ mask bits 111x x... .... ....
-       cmp     r0, #0xe800                     @ 32bit instruction if xx != 0
+       cmp     r5, #0xe800                     @ 32bit instruction if xx != 0
        blo     __und_usr_unknown
 3:     ldrht   r0, [r4]
        add     r2, r2, #2                      @ r2 is PC + 2, make it PC + 4
        orr     r0, r0, r5, lsl #16
+
+#if __LINUX_ARM_ARCH__ < 7
+/* If the target arch was overridden, change it back: */
+#ifdef CONFIG_CPU_32v6K
+       .arch   armv6k
 #else
+       .arch   armv6
+#endif
+#endif /* __LINUX_ARM_ARCH__ < 7 */
+#else /* !(CONFIG_ARM_THUMB && __LINUX_ARM_ARCH__ >= 6 && CONFIG_CPU_V7) */
        b       __und_usr_unknown
 #endif
  UNWIND(.fnend         )
@@ -578,6 +606,12 @@ call_fpe:
        movw_pc lr                              @ CP#14 (Debug)
        movw_pc lr                              @ CP#15 (Control)
 
+#ifdef NEED_CPU_ARCHITECTURE
+       .align  2
+.LCcpu_architecture:
+       .word   __cpu_architecture
+#endif
+
 #ifdef CONFIG_NEON
        .align  6
 
index e59bbd4..c1b4463 100644 (file)
@@ -32,6 +32,24 @@ static atomic_t waiting_for_crash_ipi;
 
 int machine_kexec_prepare(struct kimage *image)
 {
+       unsigned long page_list;
+       void *reboot_code_buffer;
+       page_list = image->head & PAGE_MASK;
+
+       reboot_code_buffer = page_address(image->control_code_page);
+
+       /* Prepare parameters for reboot_code_buffer*/
+       kexec_start_address = image->start;
+       kexec_indirection_page = page_list;
+       kexec_mach_type = machine_arch_type;
+       kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+
+       /* copy our kernel relocation code to the control code page */
+       memcpy(reboot_code_buffer,
+              relocate_new_kernel, relocate_new_kernel_size);
+
+       flush_icache_range((unsigned long) reboot_code_buffer,
+                          (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
        return 0;
 }
 
@@ -82,31 +100,14 @@ void (*kexec_reinit)(void);
 
 void machine_kexec(struct kimage *image)
 {
-       unsigned long page_list;
        unsigned long reboot_code_buffer_phys;
        void *reboot_code_buffer;
 
-
-       page_list = image->head & PAGE_MASK;
-
        /* we need both effective and real address here */
        reboot_code_buffer_phys =
            page_to_pfn(image->control_code_page) << PAGE_SHIFT;
        reboot_code_buffer = page_address(image->control_code_page);
 
-       /* Prepare parameters for reboot_code_buffer*/
-       kexec_start_address = image->start;
-       kexec_indirection_page = page_list;
-       kexec_mach_type = machine_arch_type;
-       kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
-
-       /* copy our kernel relocation code to the control code page */
-       memcpy(reboot_code_buffer,
-              relocate_new_kernel, relocate_new_kernel_size);
-
-
-       flush_icache_range((unsigned long) reboot_code_buffer,
-                          (unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
        printk(KERN_INFO "Bye!\n");
 
        if (kexec_reinit)
index 1a347f4..fd08140 100644 (file)
@@ -319,7 +319,7 @@ void show_regs(struct pt_regs * regs)
        printk("\n");
        printk("Pid: %d, comm: %20s\n", task_pid_nr(current), current->comm);
        __show_regs(regs);
-       __backtrace();
+       dump_stack();
 }
 
 ATOMIC_NOTIFIER_HEAD(thread_notify_head);
index e514c76..3fe93f7 100644 (file)
@@ -29,6 +29,8 @@
 #include <linux/fs.h>
 #include <linux/proc_fs.h>
 #include <linux/memblock.h>
+#include <linux/bug.h>
+#include <linux/compiler.h>
 
 #include <asm/unified.h>
 #include <asm/cpu.h>
@@ -42,6 +44,7 @@
 #include <asm/cacheflush.h>
 #include <asm/cachetype.h>
 #include <asm/tlbflush.h>
+#include <asm/system.h>
 
 #include <asm/prom.h>
 #include <asm/mach/arch.h>
@@ -115,6 +118,13 @@ struct outer_cache_fns outer_cache __read_mostly;
 EXPORT_SYMBOL(outer_cache);
 #endif
 
+/*
+ * Cached cpu_architecture() result for use by assembler code.
+ * C code should use the cpu_architecture() function instead of accessing this
+ * variable directly.
+ */
+int __cpu_architecture __read_mostly = CPU_ARCH_UNKNOWN;
+
 struct stack {
        u32 irq[3];
        u32 abt[3];
@@ -210,7 +220,7 @@ static const char *proc_arch[] = {
        "?(17)",
 };
 
-int cpu_architecture(void)
+static int __get_cpu_architecture(void)
 {
        int cpu_arch;
 
@@ -243,11 +253,22 @@ int cpu_architecture(void)
        return cpu_arch;
 }
 
+int __pure cpu_architecture(void)
+{
+       BUG_ON(__cpu_architecture == CPU_ARCH_UNKNOWN);
+
+       return __cpu_architecture;
+}
+
 static int cpu_has_aliasing_icache(unsigned int arch)
 {
        int aliasing_icache;
        unsigned int id_reg, num_sets, line_size;
 
+       /* PIPT caches never alias. */
+       if (icache_is_pipt())
+               return 0;
+
        /* arch specifies the register format */
        switch (arch) {
        case CPU_ARCH_ARMv7:
@@ -282,8 +303,14 @@ static void __init cacheid_init(void)
                        /* ARMv7 register format */
                        arch = CPU_ARCH_ARMv7;
                        cacheid = CACHEID_VIPT_NONALIASING;
-                       if ((cachetype & (3 << 14)) == 1 << 14)
+                       switch (cachetype & (3 << 14)) {
+                       case (1 << 14):
                                cacheid |= CACHEID_ASID_TAGGED;
+                               break;
+                       case (3 << 14):
+                               cacheid |= CACHEID_PIPT;
+                               break;
+                       }
                } else {
                        arch = CPU_ARCH_ARMv6;
                        if (cachetype & (1 << 23))
@@ -300,10 +327,11 @@ static void __init cacheid_init(void)
        printk("CPU: %s data cache, %s instruction cache\n",
                cache_is_vivt() ? "VIVT" :
                cache_is_vipt_aliasing() ? "VIPT aliasing" :
-               cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown",
+               cache_is_vipt_nonaliasing() ? "PIPT / VIPT nonaliasing" : "unknown",
                cache_is_vivt() ? "VIVT" :
                icache_is_vivt_asid_tagged() ? "VIVT ASID tagged" :
                icache_is_vipt_aliasing() ? "VIPT aliasing" :
+               icache_is_pipt() ? "PIPT" :
                cache_is_vipt_nonaliasing() ? "VIPT nonaliasing" : "unknown");
 }
 
@@ -414,6 +442,7 @@ static void __init setup_processor(void)
        }
 
        cpu_name = list->cpu_name;
+       __cpu_architecture = __get_cpu_architecture();
 
 #ifdef MULTI_CPU
        processor = *list->proc;
@@ -861,7 +890,7 @@ static struct machine_desc * __init setup_machine_tags(unsigned int nr)
        }
 
        if (mdesc->fixup)
-               mdesc->fixup(mdesc, tags, &from, &meminfo);
+               mdesc->fixup(tags, &from, &meminfo);
 
        if (tags->hdr.tag == ATAG_CORE) {
                if (meminfo.nr_banks != 0)
index 35417d0..854ce33 100644 (file)
@@ -319,17 +319,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
         */
        platform_secondary_init(cpu);
 
-       /*
-        * Enable local interrupts.
-        */
        notify_cpu_starting(cpu);
-       local_irq_enable();
-       local_fiq_enable();
-
-       /*
-        * Setup the percpu timer for this CPU.
-        */
-       percpu_timer_setup();
 
        calibrate_delay();
 
@@ -341,10 +331,23 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
         * before we continue.
         */
        set_cpu_online(cpu, true);
+
+       /*
+        * Setup the percpu timer for this CPU.
+        */
+       percpu_timer_setup();
+
        while (!cpu_active(cpu))
                cpu_relax();
 
        /*
+        * cpu_active bit is set, so it's safe to enalbe interrupts
+        * now.
+        */
+       local_irq_enable();
+       local_fiq_enable();
+
+       /*
         * OK, it's off to the idle thread for us
         */
        cpu_idle();
index 2103825..7f5b99e 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/kdebug.h>
 #include <linux/module.h>
 #include <linux/kexec.h>
+#include <linux/bug.h>
 #include <linux/delay.h>
 #include <linux/init.h>
 #include <linux/sched.h>
@@ -271,6 +272,8 @@ void die(const char *str, struct pt_regs *regs, int err)
        spin_lock_irq(&die_lock);
        console_verbose();
        bust_spinlocks(1);
+       if (!user_mode(regs))
+               report_bug(regs->ARM_pc, regs);
        ret = __die(str, err, thread, regs);
 
        if (regs && kexec_should_crash(thread->task))
@@ -302,6 +305,24 @@ void arm_notify_die(const char *str, struct pt_regs *regs,
        }
 }
 
+#ifdef CONFIG_GENERIC_BUG
+
+int is_valid_bugaddr(unsigned long pc)
+{
+#ifdef CONFIG_THUMB2_KERNEL
+       unsigned short bkpt;
+#else
+       unsigned long bkpt;
+#endif
+
+       if (probe_kernel_address((unsigned *)pc, bkpt))
+               return 0;
+
+       return bkpt == BUG_INSTR_VALUE;
+}
+
+#endif
+
 static LIST_HEAD(undef_hook);
 static DEFINE_SPINLOCK(undef_lock);
 
@@ -707,16 +728,6 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
        arm_notify_die("unknown data abort code", regs, &info, instr, 0);
 }
 
-void __attribute__((noreturn)) __bug(const char *file, int line)
-{
-       printk(KERN_CRIT"kernel BUG at %s:%d!\n", file, line);
-       *(int *)0 = 0;
-
-       /* Avoid "noreturn function does return" */
-       for (;;);
-}
-EXPORT_SYMBOL(__bug);
-
 void __readwrite_bug(const char *fn)
 {
        printk("%s called, but not implemented\n", fn);
index 4e66f62..20b3041 100644 (file)
@@ -21,7 +21,8 @@
 #define ARM_CPU_KEEP(x)
 #endif
 
-#if defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)
+#if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
+       defined(CONFIG_GENERIC_BUG)
 #define ARM_EXIT_KEEP(x)       x
 #define ARM_EXIT_DISCARD(x)
 #else
index a673297..cd07b58 100644 (file)
 #define mask   r7
 #define offset r8
 
-ENTRY(__backtrace)
-               mov     r1, #0x10
-               mov     r0, fp
-
 ENTRY(c_backtrace)
 
 #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK)
                mov     pc, lr
-ENDPROC(__backtrace)
 ENDPROC(c_backtrace)
 #else
                stmfd   sp!, {r4 - r8, lr}      @ Save an extra register so we have a location...
@@ -107,7 +102,6 @@ for_each_frame:     tst     frame, mask             @ Check for address exceptions
                mov     r1, frame
                bl      printk
 no_frame:      ldmfd   sp!, {r4 - r8, pc}
-ENDPROC(__backtrace)
 ENDPROC(c_backtrace)
                
                .pushsection __ex_table,"a"
index faa7748..e55c484 100644 (file)
@@ -13,6 +13,7 @@
  */
 
 #include <linux/linkage.h>
+#include <asm/unwind.h>
 
 #ifdef __ARMEB__
 #define xh r0
@@ -44,6 +45,7 @@
  */
 
 ENTRY(__do_div64)
+UNWIND(.fnstart)
 
        @ Test for easy paths first.
        subs    ip, r4, #1
@@ -189,7 +191,12 @@ ENTRY(__do_div64)
        moveq   yh, xh
        moveq   xh, #0
        moveq   pc, lr
+UNWIND(.fnend)
 
+UNWIND(.fnstart)
+UNWIND(.pad #4)
+UNWIND(.save {lr})
+Ldiv0_64:
        @ Division by 0:
        str     lr, [sp, #-8]!
        bl      __div0
@@ -200,4 +207,5 @@ ENTRY(__do_div64)
        mov     xh, #0
        ldr     pc, [sp], #8
 
+UNWIND(.fnend)
 ENDPROC(__do_div64)
index 3462b81..9ab5a3e 100644 (file)
@@ -4,15 +4,15 @@
 #   INITRD_PHYS must be in RAM
 
 ifeq ($(CONFIG_ARCH_AT91CAP9),y)
-   zreladdr-y  := 0x70008000
+   zreladdr-y  += 0x70008000
 params_phys-y  := 0x70000100
 initrd_phys-y  := 0x70410000
 else ifeq ($(CONFIG_ARCH_AT91SAM9G45),y)
-   zreladdr-y  := 0x70008000
+   zreladdr-y  += 0x70008000
 params_phys-y  := 0x70000100
 initrd_phys-y  := 0x70410000
 else
-   zreladdr-y  := 0x20008000
+   zreladdr-y  += 0x20008000
 params_phys-y  := 0x20000100
 initrd_phys-y  := 0x20410000
 endif
index fb53b28..aef2467 100644 (file)
@@ -1,6 +1,6 @@
 # Address where decompressor will be written and eventually executed.
 #
 # default to SDRAM
-zreladdr-y      := $(CONFIG_BCM_ZRELADDR)
+zreladdr-y      += $(CONFIG_BCM_ZRELADDR)
 params_phys-y   := 0x00000800
 
index a604b9e..31a1435 100644 (file)
@@ -136,8 +136,8 @@ static void __init bcmring_init_machine(void)
 *
 *****************************************************************************/
 
-static void __init bcmring_fixup(struct machine_desc *desc,
-     struct tag *t, char **cmdline, struct meminfo *mi) {
+static void __init bcmring_fixup(struct tag *t, char **cmdline,
+       struct meminfo *mi) {
 #ifdef CONFIG_BLK_DEV_INITRD
        printk(KERN_NOTICE "bcmring_fixup\n");
        t->hdr.tag = ATAG_CORE;
index a51fcef..9398e85 100644 (file)
@@ -1,5 +1,5 @@
 # The standard locations for stuff on CLPS711x type processors
-   zreladdr-y                          := 0xc0028000
+   zreladdr-y                          += 0xc0028000
 params_phys-y                          := 0xc0000100
 # Should probably have some agreement on these...
 initrd_phys-$(CONFIG_ARCH_P720T)       := 0xc0400000
index 67b5abb..0a2e74f 100644 (file)
@@ -26,8 +26,7 @@
 #include "common.h"
 
 static void __init
-fixup_clep7312(struct machine_desc *desc, struct tag *tags,
-           char **cmdline, struct meminfo *mi)
+fixup_clep7312(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        mi->nr_banks=1;
        mi->bank[0].start = 0xc0000000;
index 98ca5b2..725a7a5 100644 (file)
@@ -37,8 +37,7 @@ static void __init edb7211_reserve(void)
 }
 
 static void __init
-fixup_edb7211(struct machine_desc *desc, struct tag *tags,
-             char **cmdline, struct meminfo *mi)
+fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        /*
         * Bank start addresses are not present in the information
index b1cb479..1947b30 100644 (file)
@@ -57,8 +57,7 @@ typedef struct tag_IMAGE_PARAMS
 #define IMAGE_PARAMS_PHYS      0xC01F0000
 
 static void __init
-fortunet_fixup(struct machine_desc *desc, struct tag *tags,
-                char **cmdline, struct meminfo *mi)
+fortunet_fixup(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        IMAGE_PARAMS *ip = phys_to_virt(IMAGE_PARAMS_PHYS);
        *cmdline = phys_to_virt(ip->command_line);
index cefbce0..3f796e0 100644 (file)
@@ -56,8 +56,7 @@ static struct map_desc p720t_io_desc[] __initdata = {
 };
 
 static void __init
-fixup_p720t(struct machine_desc *desc, struct tag *tag,
-           char **cmdline, struct meminfo *mi)
+fixup_p720t(struct tag *tag, char **cmdline, struct meminfo *mi)
 {
        /*
         * Our bootloader doesn't setup any tags (yet).
index 7770128..d079de0 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00C00000
index db97ef2..04a6c4e 100644 (file)
@@ -2,12 +2,12 @@ ifeq ($(CONFIG_ARCH_DAVINCI_DA8XX),y)
 ifeq ($(CONFIG_ARCH_DAVINCI_DMx),y)
 $(error Cannot enable DaVinci and DA8XX platforms concurrently)
 else
-   zreladdr-y  := 0xc0008000
+   zreladdr-y  += 0xc0008000
 params_phys-y  := 0xc0000100
 initrd_phys-y  := 0xc0800000
 endif
 else
-   zreladdr-y  := 0x80008000
+   zreladdr-y  += 0x80008000
 params_phys-y  := 0x80000100
 initrd_phys-y  := 0x80800000
 endif
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index 2321260..83cf07c 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000400
 initrd_phys-y  := 0x00800000
 
index 0ad33f1..d3113a7 100644 (file)
@@ -1,14 +1,14 @@
-   zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET)    := 0x00008000
+   zreladdr-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET)    += 0x00008000
 params_phys-$(CONFIG_EP93XX_SDCE3_SYNC_PHYS_OFFSET)    := 0x00000100
 
-   zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET)         := 0xc0008000
+   zreladdr-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET)         += 0xc0008000
 params_phys-$(CONFIG_EP93XX_SDCE0_PHYS_OFFSET)         := 0xc0000100
 
-   zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET)         := 0xd0008000
+   zreladdr-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET)         += 0xd0008000
 params_phys-$(CONFIG_EP93XX_SDCE1_PHYS_OFFSET)         := 0xd0000100
 
-   zreladdr-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET)         := 0xe0008000
+   zreladdr-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET)         += 0xe0008000
 params_phys-$(CONFIG_EP93XX_SDCE2_PHYS_OFFSET)         := 0xe0000100
 
-   zreladdr-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET)   := 0xf0008000
+   zreladdr-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET)   += 0xf0008000
 params_phys-$(CONFIG_EP93XX_SDCE3_ASYNC_PHYS_OFFSET)   := 0xf0000100
index d65956f..b9862e2 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x40008000
+   zreladdr-y  += 0x40008000
 params_phys-y  := 0x40000100
index c8e7afc..f643ef8 100644 (file)
@@ -4,8 +4,8 @@ menu "Footbridge Implementations"
 
 config ARCH_CATS
        bool "CATS"
-       select CLKSRC_I8253
        select CLKEVT_I8253
+       select CLKSRC_I8253
        select FOOTBRIDGE_HOST
        select ISA
        select ISA_DMA
@@ -61,8 +61,8 @@ config ARCH_EBSA285_HOST
 
 config ARCH_NETWINDER
        bool "NetWinder"
-       select CLKSRC_I8253
        select CLKEVT_I8253
+       select CLKSRC_I8253
        select FOOTBRIDGE_HOST
        select ISA
        select ISA_DMA
index c7e75ac..ff0a4b5 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 
index 5b1a8db..206ff2f 100644 (file)
@@ -76,8 +76,7 @@ __initcall(cats_hw_init);
  * hard reboots fail on early boards.
  */
 static void __init
-fixup_cats(struct machine_desc *desc, struct tag *tags,
-          char **cmdline, struct meminfo *mi)
+fixup_cats(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        screen_info.orig_video_lines  = 25;
        screen_info.orig_video_points = 16;
index 06e514f..4cbc2e6 100644 (file)
@@ -631,8 +631,7 @@ __initcall(nw_hw_init);
  * the parameter page.
  */
 static void __init
-fixup_netwinder(struct machine_desc *desc, struct tag *tags,
-               char **cmdline, struct meminfo *mi)
+fixup_netwinder(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
 #ifdef CONFIG_ISAPNP
        extern int isapnp_disable;
index 22a52c2..683f52b 100644 (file)
@@ -1,9 +1,9 @@
 ifeq ($(CONFIG_GEMINI_MEM_SWAP),y)
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 else
-   zreladdr-y  := 0x10008000
+   zreladdr-y  += 0x10008000
 params_phys-y  := 0x10000100
 initrd_phys-y  := 0x10800000
 endif
index 5298401..d875a70 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-$(CONFIG_ARCH_H720X)       := 0x40008000
+   zreladdr-$(CONFIG_ARCH_H720X)       += 0x40008000
 
index ebee18b..dbe6120 100644 (file)
@@ -1,19 +1,19 @@
-zreladdr-$(CONFIG_ARCH_MX1)    := 0x08008000
+zreladdr-$(CONFIG_ARCH_MX1)    += 0x08008000
 params_phys-$(CONFIG_ARCH_MX1) := 0x08000100
 initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000
 
-zreladdr-$(CONFIG_MACH_MX21)   := 0xC0008000
+zreladdr-$(CONFIG_MACH_MX21)   += 0xC0008000
 params_phys-$(CONFIG_MACH_MX21)        := 0xC0000100
 initrd_phys-$(CONFIG_MACH_MX21)        := 0xC0800000
 
-zreladdr-$(CONFIG_ARCH_MX25)   := 0x80008000
+zreladdr-$(CONFIG_ARCH_MX25)   += 0x80008000
 params_phys-$(CONFIG_ARCH_MX25)        := 0x80000100
 initrd_phys-$(CONFIG_ARCH_MX25)        := 0x80800000
 
-zreladdr-$(CONFIG_MACH_MX27)   := 0xA0008000
+zreladdr-$(CONFIG_MACH_MX27)   += 0xA0008000
 params_phys-$(CONFIG_MACH_MX27)        := 0xA0000100
 initrd_phys-$(CONFIG_MACH_MX27)        := 0xA0800000
 
-zreladdr-$(CONFIG_ARCH_MX3)    := 0x80008000
+zreladdr-$(CONFIG_ARCH_MX3)    += 0x80008000
 params_phys-$(CONFIG_ARCH_MX3) := 0x80000100
 initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000
index c7e75ac..ff0a4b5 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 
index 77315b9..82ebc8d 100644 (file)
@@ -126,6 +126,10 @@ static struct clk_lookup lookups[] = {
        {       /* Bus clock */
                .con_id         = "apb_pclk",
                .clk            = &dummy_apb_pclk,
+       }, {
+               /* Integrator/AP timer frequency */
+               .dev_id         = "ap_timer",
+               .clk            = &clk24mhz,
        }, {    /* UART0 */
                .dev_id         = "mb:16",
                .clk            = &uartclk,
index 5e6ea5c..ec467ba 100644 (file)
@@ -13,9 +13,6 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
-/* DO NOT EDIT!! - this file automatically generated
- *                 from .s file by awk -f s2h.awk
- */
 /**************************************************************************
  * * Copyright Â© ARM Limited 1998.  All rights reserved.
  * ***********************************************************************/
 #define INTEGRATOR_TIMER1_BASE          (INTEGRATOR_CT_BASE + 0x100)
 #define INTEGRATOR_TIMER2_BASE          (INTEGRATOR_CT_BASE + 0x200)
 
-#define TICKS_PER_uSEC                  24
-
-/*
- *  These are useconds NOT ticks.
- *
- */
-#define mSEC_1                          1000
-#define mSEC_10                         (mSEC_1 * 10)
-
 #define INTEGRATOR_CSR_BASE             0x10000000
 #define INTEGRATOR_CSR_SIZE             0x10000000
 
index 8cdc730..f211990 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/mtd/physmap.h>
+#include <linux/clk.h>
 #include <video/vga.h>
 
 #include <mach/hardware.h>
@@ -322,27 +323,16 @@ static void __init ap_init(void)
 #define TIMER1_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER1_BASE)
 #define TIMER2_VA_BASE IO_ADDRESS(INTEGRATOR_TIMER2_BASE)
 
-/*
- * How long is the timer interval?
- */
-#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10)
-#if TIMER_INTERVAL >= 0x100000
-#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC)
-#elif TIMER_INTERVAL >= 0x10000
-#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC)
-#else
-#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
-#endif
-
 static unsigned long timer_reload;
 
-static void integrator_clocksource_init(u32 khz)
+static void integrator_clocksource_init(unsigned long inrate)
 {
        void __iomem *base = (void __iomem *)TIMER2_VA_BASE;
        u32 ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
+       unsigned long rate = inrate;
 
-       if (khz >= 1500) {
-               khz /= 16;
+       if (rate >= 1500000) {
+               rate /= 16;
                ctrl |= TIMER_CTRL_DIV16;
        }
 
@@ -350,7 +340,7 @@ static void integrator_clocksource_init(u32 khz)
        writel(ctrl, base + TIMER_CTRL);
 
        clocksource_mmio_init(base + TIMER_VALUE, "timer2",
-               khz * 1000, 200, 16, clocksource_mmio_readl_down);
+                       rate, 200, 16, clocksource_mmio_readl_down);
 }
 
 static void __iomem * const clkevt_base = (void __iomem *)TIMER1_VA_BASE;
@@ -374,15 +364,29 @@ static void clkevt_set_mode(enum clock_event_mode mode, struct clock_event_devic
 {
        u32 ctrl = readl(clkevt_base + TIMER_CTRL) & ~TIMER_CTRL_ENABLE;
 
-       BUG_ON(mode == CLOCK_EVT_MODE_ONESHOT);
+       /* Disable timer */
+       writel(ctrl, clkevt_base + TIMER_CTRL);
 
-       if (mode == CLOCK_EVT_MODE_PERIODIC) {
-               writel(ctrl, clkevt_base + TIMER_CTRL);
+       switch (mode) {
+       case CLOCK_EVT_MODE_PERIODIC:
+               /* Enable the timer and start the periodic tick */
                writel(timer_reload, clkevt_base + TIMER_LOAD);
                ctrl |= TIMER_CTRL_PERIODIC | TIMER_CTRL_ENABLE;
+               writel(ctrl, clkevt_base + TIMER_CTRL);
+               break;
+       case CLOCK_EVT_MODE_ONESHOT:
+               /* Leave the timer disabled, .set_next_event will enable it */
+               ctrl &= ~TIMER_CTRL_PERIODIC;
+               writel(ctrl, clkevt_base + TIMER_CTRL);
+               break;
+       case CLOCK_EVT_MODE_UNUSED:
+       case CLOCK_EVT_MODE_SHUTDOWN:
+       case CLOCK_EVT_MODE_RESUME:
+       default:
+               /* Just leave in disabled state */
+               break;
        }
 
-       writel(ctrl, clkevt_base + TIMER_CTRL);
 }
 
 static int clkevt_set_next_event(unsigned long next, struct clock_event_device *evt)
@@ -398,12 +402,10 @@ static int clkevt_set_next_event(unsigned long next, struct clock_event_device *
 
 static struct clock_event_device integrator_clockevent = {
        .name           = "timer1",
-       .shift          = 34,
-       .features       = CLOCK_EVT_FEAT_PERIODIC,
+       .features       = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
        .set_mode       = clkevt_set_mode,
        .set_next_event = clkevt_set_next_event,
        .rating         = 300,
-       .cpumask        = cpu_all_mask,
 };
 
 static struct irqaction integrator_timer_irq = {
@@ -413,29 +415,27 @@ static struct irqaction integrator_timer_irq = {
        .dev_id         = &integrator_clockevent,
 };
 
-static void integrator_clockevent_init(u32 khz)
+static void integrator_clockevent_init(unsigned long inrate)
 {
-       struct clock_event_device *evt = &integrator_clockevent;
+       unsigned long rate = inrate;
        unsigned int ctrl = 0;
 
-       if (khz * 1000 > 0x100000 * HZ) {
-               khz /= 256;
+       /* Calculate and program a divisor */
+       if (rate > 0x100000 * HZ) {
+               rate /= 256;
                ctrl |= TIMER_CTRL_DIV256;
-       } else if (khz * 1000 > 0x10000 * HZ) {
-               khz /= 16;
+       } else if (rate > 0x10000 * HZ) {
+               rate /= 16;
                ctrl |= TIMER_CTRL_DIV16;
        }
-
-       timer_reload = khz * 1000 / HZ;
+       timer_reload = rate / HZ;
        writel(ctrl, clkevt_base + TIMER_CTRL);
 
-       evt->irq = IRQ_TIMERINT1;
-       evt->mult = div_sc(khz, NSEC_PER_MSEC, evt->shift);
-       evt->max_delta_ns = clockevent_delta2ns(0xffff, evt);
-       evt->min_delta_ns = clockevent_delta2ns(0xf, evt);
-
        setup_irq(IRQ_TIMERINT1, &integrator_timer_irq);
-       clockevents_register_device(evt);
+       clockevents_config_and_register(&integrator_clockevent,
+                                       rate,
+                                       1,
+                                       0xffffU);
 }
 
 /*
@@ -443,14 +443,20 @@ static void integrator_clockevent_init(u32 khz)
  */
 static void __init ap_init_timer(void)
 {
-       u32 khz = TICKS_PER_uSEC * 1000;
+       struct clk *clk;
+       unsigned long rate;
+
+       clk = clk_get_sys("ap_timer", NULL);
+       BUG_ON(IS_ERR(clk));
+       clk_enable(clk);
+       rate = clk_get_rate(clk);
 
        writel(0, TIMER0_VA_BASE + TIMER_CTRL);
        writel(0, TIMER1_VA_BASE + TIMER_CTRL);
        writel(0, TIMER2_VA_BASE + TIMER_CTRL);
 
-       integrator_clocksource_init(khz);
-       integrator_clockevent_init(khz);
+       integrator_clocksource_init(rate);
+       integrator_clockevent_init(rate);
 }
 
 static struct sys_timer ap_timer = {
index 0b0e19f..3a8c38c 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y   := 0x00008000
+   zreladdr-y   += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index 47000dc..0a833b1 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0xa0008000
+   zreladdr-y  += 0xa0008000
 params_phys-y  := 0xa0000100
 initrd_phys-y  := 0xa0800000
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index d84c580..9c7af91 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 
index d5561ad..44fb4a7 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
index d84c580..9c7af91 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 
index 2131832..85245e4 100644 (file)
@@ -397,7 +397,8 @@ void __init ixp4xx_pci_preinit(void)
                local_write_config(PCI_BASE_ADDRESS_0, 4, PHYS_OFFSET);
                local_write_config(PCI_BASE_ADDRESS_1, 4, PHYS_OFFSET + SZ_16M);
                local_write_config(PCI_BASE_ADDRESS_2, 4, PHYS_OFFSET + SZ_32M);
-               local_write_config(PCI_BASE_ADDRESS_3, 4, PHYS_OFFSET + SZ_48M);
+               local_write_config(PCI_BASE_ADDRESS_3, 4,
+                                       PHYS_OFFSET + SZ_32M + SZ_16M);
 
                /*
                 * Enable CSR window at 64 MiB to allow PCI masters
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index 48eb2cb..c9b0beb 100644 (file)
@@ -3,6 +3,6 @@
 #   PARAMS_PHYS must be within 4MB of ZRELADDR
 #   INITRD_PHYS must be in RAM
 
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index b796b41..2cfe0ee 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x80008000
+   zreladdr-y  += 0x80008000
 params_phys-y  := 0x80000100
 initrd_phys-y  := 0x82000000
 
index 574a4aa..5edf03e 100644 (file)
@@ -1 +1 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
index 06b5fa8..49c5d6d 100644 (file)
@@ -160,7 +160,7 @@ static struct mtd_partition aspenite_nand_partitions[] = {
        }, {
                .name           = "filesystem",
                .offset         = MTDPART_OFS_APPEND,
-               .size           = SZ_48M,
+               .size           = SZ_32M + SZ_16M,
                .mask_flags     = 0,
        }
 };
index 6bd37a2..176515a 100644 (file)
@@ -93,7 +93,7 @@ static struct mtd_partition ttc_dkb_onenand_partitions[] = {
        }, {
                .name           = "filesystem",
                .offset         = MTDPART_OFS_APPEND,
-               .size           = SZ_48M,
+               .size           = SZ_32M + SZ_16M,
                .mask_flags     = 0,
        }
 };
index 24dfbf8..9b803a5 100644 (file)
@@ -1,3 +1,3 @@
-  zreladdr-y           := 0x10008000
+  zreladdr-y           += 0x10008000
 params_phys-y          := 0x10000100
 initrd_phys-y          := 0x10800000
index 18a3c97..f81ef1f 100644 (file)
@@ -78,8 +78,8 @@ static void __init halibut_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
-static void __init halibut_fixup(struct machine_desc *desc, struct tag *tags,
-                                char **cmdline, struct meminfo *mi)
+static void __init halibut_fixup(struct tag *tags, char **cmdline,
+                                struct meminfo *mi)
 {
        mi->nr_banks=1;
        mi->bank[0].start = PHYS_OFFSET;
index 7a9a03e..1df15aa 100644 (file)
@@ -53,8 +53,8 @@ static void __init mahimahi_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
-static void __init mahimahi_fixup(struct machine_desc *desc, struct tag *tags,
-                                char **cmdline, struct meminfo *mi)
+static void __init mahimahi_fixup(struct tag *tags, char **cmdline,
+                                 struct meminfo *mi)
 {
        mi->nr_banks = 2;
        mi->bank[0].start = PHYS_OFFSET;
index 68f930f..c6e043c 100644 (file)
@@ -77,8 +77,8 @@ static struct map_desc sapphire_io_desc[] __initdata = {
        }
 };
 
-static void __init sapphire_fixup(struct machine_desc *desc, struct tag *tags,
-                                 char **cmdline, struct meminfo *mi)
+static void __init sapphire_fixup(struct tag *tags, char **cmdline,
+                                 struct meminfo *mi)
 {
        int smi_sz = parse_tag_smi((const struct tag *)tags);
 
index 8143867..7acd202 100644 (file)
@@ -48,8 +48,8 @@ static void __init trout_init_irq(void)
        msm_init_irq();
 }
 
-static void __init trout_fixup(struct machine_desc *desc, struct tag *tags,
-                               char **cmdline, struct meminfo *mi)
+static void __init trout_fixup(struct tag *tags, char **cmdline,
+                              struct meminfo *mi)
 {
        mi->nr_banks = 1;
        mi->bank[0].start = PHYS_OFFSET;
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index e928be1..ca207ca 100644 (file)
@@ -1,9 +1,9 @@
-   zreladdr-$(CONFIG_ARCH_MX50)        := 0x70008000
+   zreladdr-$(CONFIG_ARCH_MX50)        += 0x70008000
 params_phys-$(CONFIG_ARCH_MX50)        := 0x70000100
 initrd_phys-$(CONFIG_ARCH_MX50)        := 0x70800000
-   zreladdr-$(CONFIG_ARCH_MX51)        := 0x90008000
+   zreladdr-$(CONFIG_ARCH_MX51)        += 0x90008000
 params_phys-$(CONFIG_ARCH_MX51)        := 0x90000100
 initrd_phys-$(CONFIG_ARCH_MX51)        := 0x90800000
-   zreladdr-$(CONFIG_ARCH_MX53)        := 0x70008000
+   zreladdr-$(CONFIG_ARCH_MX53)        += 0x70008000
 params_phys-$(CONFIG_ARCH_MX53)        := 0x70000100
 initrd_phys-$(CONFIG_ARCH_MX53)        := 0x70800000
index eb541e0..07b11fe 100644 (file)
@@ -1 +1 @@
-zreladdr-y := 0x40008000
+zreladdr-y += 0x40008000
index b81cf6a..534a4d2 100644 (file)
@@ -1,2 +1,2 @@
-    zreladdr-y                 := 0x80008000
+    zreladdr-y                 += 0x80008000
 
index c7e75ac..ff0a4b5 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 
index a057b54..6c3d421 100644 (file)
@@ -1,3 +1,3 @@
-zreladdr-y     := 0x00008000
+zreladdr-y     += 0x00008000
 params_phys-y  := 0x00000100
 
index 292d56c..13bda8d 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y          := 0x10008000
+   zreladdr-y          += 0x10008000
 params_phys-y          := 0x10000100
 initrd_phys-y          := 0x10800000
index 565aff7..b03e562 100644 (file)
@@ -1,3 +1,3 @@
-  zreladdr-y           := 0x80008000
+  zreladdr-y           += 0x80008000
 params_phys-y          := 0x80000100
 initrd_phys-y          := 0x80800000
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index 0ab531d..22ace0b 100644 (file)
@@ -308,8 +308,8 @@ void __init orion5x_init(void)
  * Many orion-based systems have buggy bootloader implementations.
  * This is a common fixup for bogus memory tags.
  */
-void __init tag_fixup_mem32(struct machine_desc *mdesc, struct tag *t,
-                           char **from, struct meminfo *meminfo)
+void __init tag_fixup_mem32(struct tag *t, char **from,
+                           struct meminfo *meminfo)
 {
        for (; t->hdr.size; t = tag_next(t))
                if (t->hdr.tag == ATAG_MEM &&
index 3e5499d..909489f 100644 (file)
@@ -53,11 +53,9 @@ int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys);
 struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys);
 int orion5x_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
 
-struct machine_desc;
 struct meminfo;
 struct tag;
-extern void __init tag_fixup_mem32(struct machine_desc *, struct tag *,
-                                  char **, struct meminfo *);
+extern void __init tag_fixup_mem32(struct tag *, char **, struct meminfo *);
 
 
 #endif
index 44c7117..9fa19ba 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y          := 0x80008000
+   zreladdr-y          += 0x80008000
 params_phys-y          := 0x80000100
 initrd_phys-y          := 0x80800000
 
index d023db3..c77a488 100644 (file)
@@ -1,3 +1,3 @@
-zreladdr-y             := 0x00008000
+zreladdr-y             += 0x00008000
 params_phys-y          := 0x00000100
 initrd_phys-y          := 0x00800000
index 1ead671..2c1ae92 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0xa0008000
+   zreladdr-y  += 0xa0008000
 
index b6a5134..d940e8a 100644 (file)
@@ -839,8 +839,8 @@ static void __init cm_x300_init(void)
        cm_x300_init_bl();
 }
 
-static void __init cm_x300_fixup(struct machine_desc *mdesc, struct tag *tags,
-                                char **cmdline, struct meminfo *mi)
+static void __init cm_x300_fixup(struct tag *tags, char **cmdline,
+                                struct meminfo *mi)
 {
        /* Make sure that mi->bank[0].start = PHYS_ADDR */
        for (; tags->hdr.size; tags = tag_next(tags))
index 185a37c..3e9483b 100644 (file)
@@ -705,8 +705,8 @@ static void __init corgi_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
-static void __init fixup_corgi(struct machine_desc *desc,
-               struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init fixup_corgi(struct tag *tags, char **cmdline,
+                              struct meminfo *mi)
 {
        sharpsl_save_param();
        mi->nr_banks=1;
index b4599ec..e4a1f4d 100644 (file)
@@ -41,8 +41,7 @@
 #include "clock.h"
 
 /* Only e800 has 128MB RAM */
-void __init eseries_fixup(struct machine_desc *desc,
-       struct tag *tags, char **cmdline, struct meminfo *mi)
+void __init eseries_fixup(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        mi->nr_banks=1;
        mi->bank[0].start = 0xa0000000;
index 5930f5e..be92196 100644 (file)
@@ -1,5 +1,4 @@
-void __init eseries_fixup(struct machine_desc *desc,
-       struct tag *tags, char **cmdline, struct meminfo *mi);
+void __init eseries_fixup(struct tag *tags, char **cmdline, struct meminfo *mi);
 
 extern struct pxa2xx_udc_mach_info e7xx_udc_mach_info;
 extern struct pxaficp_platform_data e7xx_ficp_platform_data;
index a113ea9..948ce3e 100644 (file)
@@ -454,8 +454,8 @@ static void __init poodle_init(void)
        poodle_init_spi();
 }
 
-static void __init fixup_poodle(struct machine_desc *desc,
-               struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init fixup_poodle(struct tag *tags, char **cmdline,
+                               struct meminfo *mi)
 {
        sharpsl_save_param();
        mi->nr_banks=1;
index df4356e..72001ec 100644 (file)
@@ -540,7 +540,7 @@ static struct mtd_partition saar_onenand_partitions[] = {
        }, {
                .name           = "filesystem",
                .offset         = MTDPART_OFS_APPEND,
-               .size           = SZ_48M,
+               .size           = SZ_32M + SZ_16M,
                .mask_flags     = 0,
        }
 };
index 438c7b5..d8dec91 100644 (file)
@@ -970,8 +970,8 @@ static void __init spitz_init(void)
        spitz_i2c_init();
 }
 
-static void __init spitz_fixup(struct machine_desc *desc,
-               struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init spitz_fixup(struct tag *tags, char **cmdline,
+                              struct meminfo *mi)
 {
        sharpsl_save_param();
        mi->nr_banks = 1;
index 9f69a26..402b0c9 100644 (file)
@@ -960,8 +960,8 @@ static void __init tosa_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
-static void __init fixup_tosa(struct machine_desc *desc,
-               struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init fixup_tosa(struct tag *tags, char **cmdline,
+                             struct meminfo *mi)
 {
        sharpsl_save_param();
        mi->nr_banks=1;
index d97e003..d2c3d78 100644 (file)
@@ -1,9 +1,9 @@
 ifeq ($(CONFIG_REALVIEW_HIGH_PHYS_OFFSET),y)
-   zreladdr-y  := 0x70008000
+   zreladdr-y  += 0x70008000
 params_phys-y  := 0x70000100
 initrd_phys-y  := 0x70800000
 else
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 endif
index 5c23450..d5ed5d4 100644 (file)
@@ -517,8 +517,7 @@ void __init realview_timer_init(unsigned int timer_irq)
 /*
  * Setup the memory banks.
  */
-void realview_fixup(struct machine_desc *mdesc, struct tag *tags, char **from,
-                   struct meminfo *meminfo)
+void realview_fixup(struct tag *tags, char **from, struct meminfo *meminfo)
 {
        /*
         * Most RealView platforms have 512MB contiguous RAM at 0x70000000.
index 5c83d1e..47259c8 100644 (file)
@@ -63,8 +63,8 @@ extern int realview_flash_register(struct resource *res, u32 num);
 extern int realview_eth_register(const char *name, struct resource *res);
 extern int realview_usb_register(struct resource *res);
 extern void realview_init_early(void);
-extern void realview_fixup(struct machine_desc *mdesc, struct tag *tags,
-                          char **from, struct meminfo *meminfo);
+extern void realview_fixup(struct tag *tags, char **from,
+                          struct meminfo *meminfo);
 extern void (*realview_reset)(char);
 
 #endif
index 002ab5d..2a15fef 100644 (file)
@@ -70,6 +70,7 @@
 
 #define REALVIEW_DC1176_GIC_CPU_BASE           0x10120000 /* GIC CPU interface, on devchip */
 #define REALVIEW_DC1176_GIC_DIST_BASE          0x10121000 /* GIC distributor, on devchip */
+#define REALVIEW_DC1176_ROM_BASE               0x10200000 /* 16KiB NRAM preudo-ROM, on devchip */
 #define REALVIEW_PB1176_GIC_CPU_BASE           0x10040000 /* GIC CPU interface, on FPGA */
 #define REALVIEW_PB1176_GIC_DIST_BASE          0x10041000 /* GIC distributor, on FPGA */
 #define REALVIEW_PB1176_L220_BASE              0x10110000 /* L220 registers */
index ad5671a..865d440 100644 (file)
@@ -26,6 +26,8 @@
 #include <linux/amba/pl061.h>
 #include <linux/amba/mmci.h>
 #include <linux/amba/pl022.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/partitions.h>
 #include <linux/io.h>
 
 #include <mach/hardware.h>
@@ -204,22 +206,48 @@ static struct amba_device *amba_devs[] __initdata = {
  * RealView PB1176 platform devices
  */
 static struct resource realview_pb1176_flash_resources[] = {
-       [0] = {
+       {
                .start          = REALVIEW_PB1176_FLASH_BASE,
                .end            = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1,
                .flags          = IORESOURCE_MEM,
        },
-       [1] = {
+#ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH
+       {
                .start          = REALVIEW_PB1176_SEC_FLASH_BASE,
                .end            = REALVIEW_PB1176_SEC_FLASH_BASE + REALVIEW_PB1176_SEC_FLASH_SIZE - 1,
                .flags          = IORESOURCE_MEM,
        },
-};
-#ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH
-#define PB1176_FLASH_BLOCKS    2
-#else
-#define PB1176_FLASH_BLOCKS    1
 #endif
+};
+
+static struct physmap_flash_data pb1176_rom_pdata = {
+       .probe_type     = "map_rom",
+       .width          = 4,
+       .nr_parts       = 0,
+};
+
+static struct resource pb1176_rom_resources[] = {
+       /*
+        * This exposes the PB1176 DevChip ROM as an MTD ROM mapping.
+        * The reference manual states that this is actually a pseudo-ROM
+        * programmed in NVRAM.
+        */
+       {
+               .start          = REALVIEW_DC1176_ROM_BASE,
+               .end            = REALVIEW_DC1176_ROM_BASE + SZ_16K - 1,
+               .flags          = IORESOURCE_MEM,
+       }
+};
+
+static struct platform_device pb1176_rom_device = {
+       .name           = "physmap-flash",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(pb1176_rom_resources),
+       .resource       = pb1176_rom_resources,
+       .dev = {
+               .platform_data = &pb1176_rom_pdata,
+       },
+};
 
 static struct resource realview_pb1176_smsc911x_resources[] = {
        [0] = {
@@ -316,8 +344,7 @@ static void realview_pb1176_reset(char mode)
        __raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl);
 }
 
-static void realview_pb1176_fixup(struct machine_desc *mdesc,
-                                 struct tag *tags, char **from,
+static void realview_pb1176_fixup(struct tag *tags, char **from,
                                  struct meminfo *meminfo)
 {
        /*
@@ -338,7 +365,8 @@ static void __init realview_pb1176_init(void)
 #endif
 
        realview_flash_register(realview_pb1176_flash_resources,
-                               PB1176_FLASH_BLOCKS);
+                               ARRAY_SIZE(realview_pb1176_flash_resources));
+       platform_device_register(&pb1176_rom_device);
        realview_eth_register(NULL, realview_pb1176_smsc911x_resources);
        platform_device_register(&realview_i2c_device);
        realview_usb_register(realview_pb1176_isp1761_resources);
index 363b0ab..3e1eb2e 100644 (file)
@@ -319,8 +319,8 @@ static struct sys_timer realview_pbx_timer = {
        .init           = realview_pbx_timer_init,
 };
 
-static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags,
-                              char **from, struct meminfo *meminfo)
+static void realview_pbx_fixup(struct tag *tags, char **from,
+                              struct meminfo *meminfo)
 {
 #ifdef CONFIG_SPARSEMEM
        /*
@@ -335,7 +335,7 @@ static void realview_pbx_fixup(struct machine_desc *mdesc, struct tag *tags,
        meminfo->bank[2].size = SZ_256M;
        meminfo->nr_banks = 3;
 #else
-       realview_fixup(mdesc, tags, from, meminfo);
+       realview_fixup(tags, from, meminfo);
 #endif
 }
 
index 9c9e768..ae2df0d 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x10008000
+   zreladdr-y  += 0x10008000
 params_phys-y  := 0x10000100
 initrd_phys-y  := 0x18000000
 
index 58c1dd7..4457605 100644 (file)
@@ -1,7 +1,7 @@
 ifeq ($(CONFIG_PM_H1940),y)
-       zreladdr-y              := 0x30108000
+       zreladdr-y      += 0x30108000
        params_phys-y   := 0x30100100
 else
-       zreladdr-y              := 0x30008000
+       zreladdr-y      += 0x30008000
        params_phys-y   := 0x30000100
 endif
index 834cfb6..3391713 100644 (file)
@@ -92,8 +92,7 @@ static struct platform_device *smdk2413_devices[] __initdata = {
        &s3c_device_usbgadget,
 };
 
-static void __init smdk2413_fixup(struct machine_desc *desc,
-                                 struct tag *tags, char **cmdline,
+static void __init smdk2413_fixup(struct tag *tags, char **cmdline,
                                  struct meminfo *mi)
 {
        if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) {
index 83544eb..b6ed457 100644 (file)
@@ -129,9 +129,8 @@ static struct platform_device *vstms_devices[] __initdata = {
        &s3c_device_nand,
 };
 
-static void __init vstms_fixup(struct machine_desc *desc,
-                                 struct tag *tags, char **cmdline,
-                                 struct meminfo *mi)
+static void __init vstms_fixup(struct tag *tags, char **cmdline,
+                              struct meminfo *mi)
 {
        if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) {
                mi->nr_banks=1;
index ba41fdc..c642333 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x50008000
+   zreladdr-y  += 0x50008000
 params_phys-y  := 0x50000100
index ff90aa1..79ece40 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x20008000
+   zreladdr-y  += 0x20008000
 params_phys-y  := 0x20000100
index ff90aa1..79ece40 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x20008000
+   zreladdr-y  += 0x20008000
 params_phys-y  := 0x20000100
index ff90aa1..79ece40 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x20008000
+   zreladdr-y  += 0x20008000
 params_phys-y  := 0x20000100
index 41252d2..0063178 100644 (file)
@@ -45,7 +45,6 @@ obj-$(CONFIG_SA1100_PLEB)             += pleb.o
 obj-$(CONFIG_SA1100_SHANNON)           += shannon.o
 
 obj-$(CONFIG_SA1100_SIMPAD)            += simpad.o
-led-$(CONFIG_SA1100_SIMPAD)            += leds-simpad.o
 
 # LEDs support
 obj-$(CONFIG_LEDS) += $(led-y)
index a56ad04..5a616f6 100644 (file)
@@ -1,6 +1,7 @@
-   zreladdr-y  := 0xc0008000
 ifeq ($(CONFIG_ARCH_SA1100),y)
-   zreladdr-$(CONFIG_SA1111)           := 0xc0208000
+   zreladdr-$(CONFIG_SA1111)           += 0xc0208000
+else
+   zreladdr-y  += 0xc0008000
 endif
 params_phys-y  := 0xc0000100
 initrd_phys-y  := 0xc0800000
index 26257df..6290ce2 100644 (file)
@@ -301,8 +301,7 @@ static void __init get_assabet_scr(void)
 }
 
 static void __init
-fixup_assabet(struct machine_desc *desc, struct tag *tags,
-             char **cmdline, struct meminfo *mi)
+fixup_assabet(struct tag *tags, char **cmdline, struct meminfo *mi)
 {
        /* This must be done before any call to machine_has_neponset() */
        map_sa1100_gpio_regs();
index 9296c45..db28118 100644 (file)
 #define GPIO_SMART_CARD                GPIO_GPIO10
 #define IRQ_GPIO_SMARD_CARD    IRQ_GPIO10
 
-// CS3 Latch is write only, a shadow is necessary
+/*--- ucb1x00 GPIO ---*/
+#define SIMPAD_UCB1X00_GPIO_BASE       (GPIO_MAX + 1)
+#define SIMPAD_UCB1X00_GPIO_PROG1      (SIMPAD_UCB1X00_GPIO_BASE)
+#define SIMPAD_UCB1X00_GPIO_PROG2      (SIMPAD_UCB1X00_GPIO_BASE + 1)
+#define SIMPAD_UCB1X00_GPIO_UP         (SIMPAD_UCB1X00_GPIO_BASE + 2)
+#define SIMPAD_UCB1X00_GPIO_DOWN       (SIMPAD_UCB1X00_GPIO_BASE + 3)
+#define SIMPAD_UCB1X00_GPIO_LEFT       (SIMPAD_UCB1X00_GPIO_BASE + 4)
+#define SIMPAD_UCB1X00_GPIO_RIGHT      (SIMPAD_UCB1X00_GPIO_BASE + 5)
+#define SIMPAD_UCB1X00_GPIO_6          (SIMPAD_UCB1X00_GPIO_BASE + 6)
+#define SIMPAD_UCB1X00_GPIO_7          (SIMPAD_UCB1X00_GPIO_BASE + 7)
+#define SIMPAD_UCB1X00_GPIO_HEADSET    (SIMPAD_UCB1X00_GPIO_BASE + 8)
+#define SIMPAD_UCB1X00_GPIO_SPEAKER    (SIMPAD_UCB1X00_GPIO_BASE + 9)
+
+/*--- CS3 Latch ---*/
+#define SIMPAD_CS3_GPIO_BASE           (GPIO_MAX + 11)
+#define SIMPAD_CS3_VCC_5V_EN           (SIMPAD_CS3_GPIO_BASE)
+#define SIMPAD_CS3_VCC_3V_EN           (SIMPAD_CS3_GPIO_BASE + 1)
+#define SIMPAD_CS3_EN1                 (SIMPAD_CS3_GPIO_BASE + 2)
+#define SIMPAD_CS3_EN0                 (SIMPAD_CS3_GPIO_BASE + 3)
+#define SIMPAD_CS3_DISPLAY_ON          (SIMPAD_CS3_GPIO_BASE + 4)
+#define SIMPAD_CS3_PCMCIA_BUFF_DIS     (SIMPAD_CS3_GPIO_BASE + 5)
+#define SIMPAD_CS3_MQ_RESET            (SIMPAD_CS3_GPIO_BASE + 6)
+#define SIMPAD_CS3_PCMCIA_RESET                (SIMPAD_CS3_GPIO_BASE + 7)
+#define SIMPAD_CS3_DECT_POWER_ON       (SIMPAD_CS3_GPIO_BASE + 8)
+#define SIMPAD_CS3_IRDA_SD             (SIMPAD_CS3_GPIO_BASE + 9)
+#define SIMPAD_CS3_RS232_ON            (SIMPAD_CS3_GPIO_BASE + 10)
+#define SIMPAD_CS3_SD_MEDIAQ           (SIMPAD_CS3_GPIO_BASE + 11)
+#define SIMPAD_CS3_LED2_ON             (SIMPAD_CS3_GPIO_BASE + 12)
+#define SIMPAD_CS3_IRDA_MODE           (SIMPAD_CS3_GPIO_BASE + 13)
+#define SIMPAD_CS3_ENABLE_5V           (SIMPAD_CS3_GPIO_BASE + 14)
+#define SIMPAD_CS3_RESET_SIMCARD       (SIMPAD_CS3_GPIO_BASE + 15)
+
+#define SIMPAD_CS3_PCMCIA_BVD1         (SIMPAD_CS3_GPIO_BASE + 16)
+#define SIMPAD_CS3_PCMCIA_BVD2         (SIMPAD_CS3_GPIO_BASE + 17)
+#define SIMPAD_CS3_PCMCIA_VS1          (SIMPAD_CS3_GPIO_BASE + 18)
+#define SIMPAD_CS3_PCMCIA_VS2          (SIMPAD_CS3_GPIO_BASE + 19)
+#define SIMPAD_CS3_LOCK_IND            (SIMPAD_CS3_GPIO_BASE + 20)
+#define SIMPAD_CS3_CHARGING_STATE      (SIMPAD_CS3_GPIO_BASE + 21)
+#define SIMPAD_CS3_PCMCIA_SHORT                (SIMPAD_CS3_GPIO_BASE + 22)
+#define SIMPAD_CS3_GPIO_23             (SIMPAD_CS3_GPIO_BASE + 23)
 
-#define CS3BUSTYPE unsigned volatile long
 #define CS3_BASE        0xf1000000
 
-#define VCC_5V_EN       0x0001 // For 5V PCMCIA
-#define VCC_3V_EN       0x0002 // FOR 3.3V PCMCIA
-#define EN1             0x0004 // This is only for EPROM's
-#define EN0             0x0008 // Both should be enable for 3.3V or 5V
-#define DISPLAY_ON      0x0010
-#define PCMCIA_BUFF_DIS 0x0020
-#define MQ_RESET        0x0040
-#define PCMCIA_RESET    0x0080
-#define DECT_POWER_ON   0x0100
-#define IRDA_SD         0x0200 // Shutdown for powersave
-#define RS232_ON        0x0400
-#define SD_MEDIAQ       0x0800 // Shutdown for powersave
-#define LED2_ON         0x1000
-#define IRDA_MODE       0x2000 // Fast/Slow IrDA mode
-#define ENABLE_5V       0x4000 // Enable 5V circuit
-#define RESET_SIMCARD   0x8000
-
-#define RS232_ENABLE    0x0440
-#define PCMCIAMASK      0x402f
-
-
+long simpad_get_cs3_ro(void);
+long simpad_get_cs3_shadow(void);
+void simpad_set_cs3_bit(int value);
+void simpad_clear_cs3_bit(int value);
+
+#define VCC_5V_EN      0x0001 /* For 5V PCMCIA */
+#define VCC_3V_EN      0x0002 /* FOR 3.3V PCMCIA */
+#define EN1            0x0004 /* This is only for EPROM's */
+#define EN0            0x0008 /* Both should be enable for 3.3V or 5V */
+#define DISPLAY_ON     0x0010
+#define PCMCIA_BUFF_DIS        0x0020
+#define MQ_RESET       0x0040
+#define PCMCIA_RESET   0x0080
+#define DECT_POWER_ON  0x0100
+#define IRDA_SD                0x0200 /* Shutdown for powersave */
+#define RS232_ON       0x0400
+#define SD_MEDIAQ      0x0800 /* Shutdown for powersave */
+#define LED2_ON                0x1000
+#define IRDA_MODE      0x2000 /* Fast/Slow IrDA mode */
+#define ENABLE_5V      0x4000 /* Enable 5V circuit */
+#define RESET_SIMCARD  0x8000
+
+#define PCMCIA_BVD1    0x01
+#define PCMCIA_BVD2    0x02
+#define PCMCIA_VS1     0x04
+#define PCMCIA_VS2     0x08
+#define LOCK_IND       0x10
+#define CHARGING_STATE 0x20
+#define PCMCIA_SHORT   0x40
+
+/*--- Battery ---*/
 struct simpad_battery {
        unsigned char ac_status;        /* line connected yes/no */
        unsigned char status;           /* battery loading yes/no */
diff --git a/arch/arm/mach-sa1100/leds-simpad.c b/arch/arm/mach-sa1100/leds-simpad.c
deleted file mode 100644 (file)
index d50f4ee..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * linux/arch/arm/mach-sa1100/leds-simpad.c
- *
- * Author: Juergen Messerer <juergen.messerer@siemens.ch>
- */
-#include <linux/init.h>
-
-#include <mach/hardware.h>
-#include <asm/leds.h>
-#include <asm/system.h>
-#include <mach/simpad.h>
-
-#include "leds.h"
-
-
-#define LED_STATE_ENABLED      1
-#define LED_STATE_CLAIMED      2
-
-static unsigned int led_state;
-static unsigned int hw_led_state;
-
-#define        LED_GREEN       (1)
-#define        LED_MASK        (1)
-
-extern void set_cs3_bit(int value);
-extern void clear_cs3_bit(int value);     
-
-void simpad_leds_event(led_event_t evt)
-{
-       switch (evt)
-       {
-       case led_start:
-               hw_led_state = LED_GREEN;
-               led_state = LED_STATE_ENABLED;
-               break;
-
-       case led_stop:
-               led_state &= ~LED_STATE_ENABLED;
-               break;
-
-       case led_claim:
-               led_state |= LED_STATE_CLAIMED;
-               hw_led_state = LED_GREEN;
-               break;
-
-       case led_release:
-               led_state &= ~LED_STATE_CLAIMED;
-               hw_led_state = LED_GREEN;
-               break;
-
-#ifdef CONFIG_LEDS_TIMER
-       case led_timer:
-               if (!(led_state & LED_STATE_CLAIMED))
-                       hw_led_state ^= LED_GREEN;
-               break;
-#endif
-
-#ifdef CONFIG_LEDS_CPU
-       case led_idle_start:
-               break;
-
-       case led_idle_end:
-               break;
-#endif
-
-       case led_halted:
-               break;
-
-       case led_green_on:
-               if (led_state & LED_STATE_CLAIMED)
-                       hw_led_state |= LED_GREEN;
-               break;
-
-       case led_green_off:
-               if (led_state & LED_STATE_CLAIMED)
-                       hw_led_state &= ~LED_GREEN;
-               break;
-
-       case led_amber_on:
-               break;
-
-       case led_amber_off:
-               break;
-
-       case led_red_on:
-               break;
-
-       case led_red_off:
-               break;
-
-       default:
-               break;
-       }
-
-       if  (led_state & LED_STATE_ENABLED)
-               set_cs3_bit(LED2_ON);
-       else 
-               clear_cs3_bit(LED2_ON);
-}
-
index bbfe197..5fe71a0 100644 (file)
@@ -42,8 +42,6 @@ sa1100_leds_init(void)
                leds_event = adsbitsy_leds_event;
        if (machine_is_pt_system3())
                leds_event = system3_leds_event;
-       if (machine_is_simpad())
-               leds_event = simpad_leds_event; /* what about machine registry? including led, apm... -zecke */
 
        leds_event(led_start);
        return 0;
index 68cc9f7..776b602 100644 (file)
@@ -11,4 +11,3 @@ extern void pfs168_leds_event(led_event_t evt);
 extern void graphicsmaster_leds_event(led_event_t evt);
 extern void adsbitsy_leds_event(led_event_t evt);
 extern void system3_leds_event(led_event_t evt);
-extern void simpad_leds_event(led_event_t evt);
index cfb7607..34659f3 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
 #include <linux/io.h>
+#include <linux/gpio.h>
 
 #include <asm/irq.h>
 #include <mach/hardware.h>
 
 #include <linux/serial_core.h>
 #include <linux/ioport.h>
+#include <linux/input.h>
+#include <linux/gpio_keys.h>
+#include <linux/leds.h>
+#include <linux/i2c-gpio.h>
 
 #include "generic.h"
 
-long cs3_shadow;
+/*
+ * CS3 support
+ */
 
-long get_cs3_shadow(void)
+static long cs3_shadow;
+static spinlock_t cs3_lock;
+static struct gpio_chip cs3_gpio;
+
+long simpad_get_cs3_ro(void)
+{
+       return readl(CS3_BASE);
+}
+EXPORT_SYMBOL(simpad_get_cs3_ro);
+
+long simpad_get_cs3_shadow(void)
 {
        return cs3_shadow;
 }
+EXPORT_SYMBOL(simpad_get_cs3_shadow);
 
-void set_cs3(long value)
+static void __simpad_write_cs3(void)
 {
-       *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow = value;
+       writel(cs3_shadow, CS3_BASE);
 }
 
-void set_cs3_bit(int value)
+void simpad_set_cs3_bit(int value)
 {
+       unsigned long flags;
+
+       spin_lock_irqsave(&cs3_lock, flags);
        cs3_shadow |= value;
-       *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
+       __simpad_write_cs3();
+       spin_unlock_irqrestore(&cs3_lock, flags);
 }
+EXPORT_SYMBOL(simpad_set_cs3_bit);
 
-void clear_cs3_bit(int value)
+void simpad_clear_cs3_bit(int value)
 {
+       unsigned long flags;
+
+       spin_lock_irqsave(&cs3_lock, flags);
        cs3_shadow &= ~value;
-       *(CS3BUSTYPE *)(CS3_BASE) = cs3_shadow;
+       __simpad_write_cs3();
+       spin_unlock_irqrestore(&cs3_lock, flags);
 }
+EXPORT_SYMBOL(simpad_clear_cs3_bit);
+
+static void cs3_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
+{
+       if (offset > 15)
+               return;
+       if (value)
+               simpad_set_cs3_bit(1 << offset);
+       else
+               simpad_clear_cs3_bit(1 << offset);
+};
+
+static int cs3_gpio_get(struct gpio_chip *chip, unsigned offset)
+{
+       if (offset > 15)
+               return simpad_get_cs3_ro() & (1 << (offset - 16));
+       return simpad_get_cs3_shadow() & (1 << offset);
+};
 
-EXPORT_SYMBOL(set_cs3_bit);
-EXPORT_SYMBOL(clear_cs3_bit);
+static int cs3_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
+{
+       if (offset > 15)
+               return 0;
+       return -EINVAL;
+};
+
+static int cs3_gpio_direction_output(struct gpio_chip *chip, unsigned offset,
+       int value)
+{
+       if (offset > 15)
+               return -EINVAL;
+       cs3_gpio_set(chip, offset, value);
+       return 0;
+};
 
 static struct map_desc simpad_io_desc[] __initdata = {
        {       /* MQ200 */
@@ -64,9 +122,9 @@ static struct map_desc simpad_io_desc[] __initdata = {
                .pfn            = __phys_to_pfn(0x4b800000),
                .length         = 0x00800000,
                .type           = MT_DEVICE
-       }, {    /* Paules CS3, write only */
-               .virtual        =  0xf1000000,
-               .pfn            = __phys_to_pfn(0x18000000),
+       }, {    /* Simpad CS3 */
+               .virtual        = CS3_BASE,
+               .pfn            = __phys_to_pfn(SA1100_CS3_PHYS),
                .length         = 0x00100000,
                .type           = MT_DEVICE
        },
@@ -78,12 +136,12 @@ static void simpad_uart_pm(struct uart_port *port, u_int state, u_int oldstate)
        if (port->mapbase == (u_int)&Ser1UTCR0) {
                if (state)
                {
-                       clear_cs3_bit(RS232_ON);
-                       clear_cs3_bit(DECT_POWER_ON);
+                       simpad_clear_cs3_bit(RS232_ON);
+                       simpad_clear_cs3_bit(DECT_POWER_ON);
                }else
                {
-                       set_cs3_bit(RS232_ON);
-                       set_cs3_bit(DECT_POWER_ON);
+                       simpad_set_cs3_bit(RS232_ON);
+                       simpad_set_cs3_bit(DECT_POWER_ON);
                }
        }
 }
@@ -132,6 +190,7 @@ static struct resource simpad_flash_resources [] = {
 static struct mcp_plat_data simpad_mcp_data = {
        .mccr0          = MCCR0_ADM,
        .sclk_rate      = 11981000,
+       .gpio_base      = SIMPAD_UCB1X00_GPIO_BASE,
 };
 
 
@@ -142,9 +201,10 @@ static void __init simpad_map_io(void)
 
        iotable_init(simpad_io_desc, ARRAY_SIZE(simpad_io_desc));
 
-       set_cs3_bit (EN1 | EN0 | LED2_ON | DISPLAY_ON | RS232_ON |
-                     ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON);
-
+       /* Initialize CS3 */
+       cs3_shadow = (EN1 | EN0 | LED2_ON | DISPLAY_ON |
+               RS232_ON | ENABLE_5V | RESET_SIMCARD | DECT_POWER_ON);
+       __simpad_write_cs3(); /* Spinlocks not yet initialized */
 
         sa1100_register_uart_fns(&simpad_port_fns);
        sa1100_register_uart(0, 3);  /* serial interface */
@@ -170,13 +230,14 @@ static void __init simpad_map_io(void)
 
 static void simpad_power_off(void)
 {
-       local_irq_disable(); // was cli
-       set_cs3(0x800);        /* only SD_MEDIAQ */
+       local_irq_disable();
+       cs3_shadow = SD_MEDIAQ;
+       __simpad_write_cs3(); /* Bypass spinlock here */
 
        /* disable internal oscillator, float CS lines */
        PCFR = (PCFR_OPDE | PCFR_FP | PCFR_FS);
-       /* enable wake-up on GPIO0 (Assabet...) */
-       PWER = GFER = GRER = 1;
+       /* enable wake-up on GPIO0 */
+       PWER = GFER = GRER = PWER_GPIO0;
        /*
         * set scratchpad to zero, just in case it is used as a
         * restart address by the bootloader.
@@ -192,6 +253,91 @@ static void simpad_power_off(void)
 
 }
 
+/*
+ * gpio_keys
+*/
+
+static struct gpio_keys_button simpad_button_table[] = {
+       { KEY_POWER, IRQ_GPIO_POWER_BUTTON, 1, "power button" },
+};
+
+static struct gpio_keys_platform_data simpad_keys_data = {
+       .buttons = simpad_button_table,
+       .nbuttons = ARRAY_SIZE(simpad_button_table),
+};
+
+static struct platform_device simpad_keys = {
+       .name = "gpio-keys",
+       .dev = {
+               .platform_data = &simpad_keys_data,
+       },
+};
+
+static struct gpio_keys_button simpad_polled_button_table[] = {
+       { KEY_PROG1, SIMPAD_UCB1X00_GPIO_PROG1, 1, "prog1 button" },
+       { KEY_PROG2, SIMPAD_UCB1X00_GPIO_PROG2, 1, "prog2 button" },
+       { KEY_UP,    SIMPAD_UCB1X00_GPIO_UP,    1, "up button" },
+       { KEY_DOWN,  SIMPAD_UCB1X00_GPIO_DOWN,  1, "down button" },
+       { KEY_LEFT,  SIMPAD_UCB1X00_GPIO_LEFT,  1, "left button" },
+       { KEY_RIGHT, SIMPAD_UCB1X00_GPIO_RIGHT, 1, "right button" },
+};
+
+static struct gpio_keys_platform_data simpad_polled_keys_data = {
+       .buttons = simpad_polled_button_table,
+       .nbuttons = ARRAY_SIZE(simpad_polled_button_table),
+       .poll_interval = 50,
+};
+
+static struct platform_device simpad_polled_keys = {
+       .name = "gpio-keys-polled",
+       .dev = {
+               .platform_data = &simpad_polled_keys_data,
+       },
+};
+
+/*
+ * GPIO LEDs
+ */
+
+static struct gpio_led simpad_leds[] = {
+       {
+               .name = "simpad:power",
+               .gpio = SIMPAD_CS3_LED2_ON,
+               .active_low = 0,
+               .default_trigger = "default-on",
+       },
+};
+
+static struct gpio_led_platform_data simpad_led_data = {
+       .num_leds = ARRAY_SIZE(simpad_leds),
+       .leds = simpad_leds,
+};
+
+static struct platform_device simpad_gpio_leds = {
+       .name = "leds-gpio",
+       .id = 0,
+       .dev = {
+               .platform_data = &simpad_led_data,
+       },
+};
+
+/*
+ * i2c
+ */
+static struct i2c_gpio_platform_data simpad_i2c_data = {
+       .sda_pin = GPIO_GPIO21,
+       .scl_pin = GPIO_GPIO25,
+       .udelay = 10,
+       .timeout = HZ,
+};
+
+static struct platform_device simpad_i2c = {
+       .name = "i2c-gpio",
+       .id = 0,
+       .dev = {
+               .platform_data = &simpad_i2c_data,
+       },
+};
 
 /*
  * MediaQ Video Device
@@ -202,7 +348,11 @@ static struct platform_device simpad_mq200fb = {
 };
 
 static struct platform_device *devices[] __initdata = {
-       &simpad_mq200fb
+       &simpad_keys,
+       &simpad_polled_keys,
+       &simpad_mq200fb,
+       &simpad_gpio_leds,
+       &simpad_i2c,
 };
 
 
@@ -211,6 +361,19 @@ static int __init simpad_init(void)
 {
        int ret;
 
+       spin_lock_init(&cs3_lock);
+
+       cs3_gpio.label = "simpad_cs3";
+       cs3_gpio.base = SIMPAD_CS3_GPIO_BASE;
+       cs3_gpio.ngpio = 24;
+       cs3_gpio.set = cs3_gpio_set;
+       cs3_gpio.get = cs3_gpio_get;
+       cs3_gpio.direction_input = cs3_gpio_direction_input;
+       cs3_gpio.direction_output = cs3_gpio_direction_output;
+       ret = gpiochip_add(&cs3_gpio);
+       if (ret)
+               printk(KERN_WARNING "simpad: Unable to register cs3 GPIO device");
+
        pm_power_off = simpad_power_off;
 
        sa11x0_register_mtd(&simpad_flash_data, simpad_flash_resources,
index 4320f8b..e40e24e 100644 (file)
@@ -1,2 +1,2 @@
-   zreladdr-y  := 0x08008000
+   zreladdr-y  += 0x08008000
 
index 1c08ee9..498efd9 100644 (file)
@@ -1,7 +1,7 @@
 __ZRELADDR     := $(shell /bin/bash -c 'printf "0x%08x" \
                     $$[$(CONFIG_MEMORY_START) + 0x8000]')
 
-   zreladdr-y   := $(__ZRELADDR)
+   zreladdr-y   += $(__ZRELADDR)
 
 # Unsupported legacy stuff
 #
index 7a1f3c0..4674a4c 100644 (file)
@@ -1,3 +1,3 @@
-zreladdr-y     := 0x00008000
+zreladdr-y     += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index 7a1f3c0..4674a4c 100644 (file)
@@ -1,3 +1,3 @@
-zreladdr-y     := 0x00008000
+zreladdr-y     += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index f135c9d..5e02d41 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y          := 0x20008000
+   zreladdr-y          += 0x20008000
 params_phys-y          := 0x20000100
 initrd_phys-y          := 0x20800000
index 428ad12..5e870d2 100644 (file)
@@ -1,4 +1,4 @@
-zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC)   := 0x00008000
+zreladdr-$(CONFIG_ARCH_TEGRA_2x_SOC)   += 0x00008000
 params_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)        := 0x00000100
 initrd_phys-$(CONFIG_ARCH_TEGRA_2x_SOC)        := 0x00800000
 
index 846cd7d..c78ce41 100644 (file)
@@ -123,8 +123,8 @@ static struct platform_device *harmony_devices[] __initdata = {
        &harmony_audio_device,
 };
 
-static void __init tegra_harmony_fixup(struct machine_desc *desc,
-       struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init tegra_harmony_fixup(struct tag *tags, char **cmdline,
+       struct meminfo *mi)
 {
        mi->nr_banks = 2;
        mi->bank[0].start = PHYS_OFFSET;
index ea2f79c..5e6bc77 100644 (file)
@@ -84,8 +84,8 @@ static void paz00_usb_init(void)
        platform_device_register(&tegra_ehci3_device);
 }
 
-static void __init tegra_paz00_fixup(struct machine_desc *desc,
-       struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init tegra_paz00_fixup(struct tag *tags, char **cmdline,
+       struct meminfo *mi)
 {
        mi->nr_banks = 1;
        mi->bank[0].start = PHYS_OFFSET;
index 89a6d2a..652c340 100644 (file)
@@ -126,8 +126,8 @@ static void trimslice_usb_init(void)
        platform_device_register(&tegra_ehci1_device);
 }
 
-static void __init tegra_trimslice_fixup(struct machine_desc *desc,
-       struct tag *tags, char **cmdline, struct meminfo *mi)
+static void __init tegra_trimslice_fixup(struct tag *tags, char **cmdline,
+       struct meminfo *mi)
 {
        mi->nr_banks = 2;
        mi->bank[0].start = PHYS_OFFSET;
index 6fbfc6e..69357af 100644 (file)
@@ -4,10 +4,10 @@
 #   INITRD_PHYS must be in RAM
 
 ifdef CONFIG_MACH_U300_SINGLE_RAM
-     zreladdr-y        := 0x28E08000
+     zreladdr-y        += 0x28E08000
   params_phys-y        := 0x28E00100
 else
-     zreladdr-y        := 0x48008000
+     zreladdr-y        += 0x48008000
   params_phys-y        := 0x48000100
 endif
 
index c7e75ac..ff0a4b5 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 
index c7e75ac..ff0a4b5 100644 (file)
@@ -1,4 +1,4 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
 
index 07c2d9c..8630b3d 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x60008000
+   zreladdr-y  += 0x60008000
 params_phys-y  := 0x60000100
 initrd_phys-y  := 0x60800000
index ea4cbfb..3668cf9 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/smp.h>
 
 #include <asm/cacheflush.h>
+#include <asm/system.h>
 
 extern volatile int pen_release;
 
@@ -62,13 +63,7 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
         * code will have already disabled interrupts
         */
        for (;;) {
-               /*
-                * here's the WFI
-                */
-               asm(".word      0xe320f003\n"
-                   :
-                   :
-                   : "memory", "cc");
+               wfi();
 
                if (pen_release == cpu) {
                        /*
index a8acc4e..b79c41c 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x01000000
index a057b54..6c3d421 100644 (file)
@@ -1,3 +1,3 @@
-zreladdr-y     := 0x00008000
+zreladdr-y     += 0x00008000
 params_phys-y  := 0x00000100
 
index 67039c3..760a0ef 100644 (file)
@@ -1,3 +1,3 @@
-   zreladdr-y  := 0x00008000
+   zreladdr-y  += 0x00008000
 params_phys-y  := 0x00000100
 initrd_phys-y  := 0x00800000
index ab50627..bdb248c 100644 (file)
@@ -289,6 +289,27 @@ __arm_ioremap(unsigned long phys_addr, size_t size, unsigned int mtype)
 }
 EXPORT_SYMBOL(__arm_ioremap);
 
+/*
+ * Remap an arbitrary physical address space into the kernel virtual
+ * address space as memory. Needed when the kernel wants to execute
+ * code in external memory. This is needed for reprogramming source
+ * clocks that would affect normal memory for example. Please see
+ * CONFIG_GENERIC_ALLOCATOR for allocating external memory.
+ */
+void __iomem *
+__arm_ioremap_exec(unsigned long phys_addr, size_t size, bool cached)
+{
+       unsigned int mtype;
+
+       if (cached)
+               mtype = MT_MEMORY;
+       else
+               mtype = MT_MEMORY_NONCACHED;
+
+       return __arm_ioremap_caller(phys_addr, size, mtype,
+                       __builtin_return_address(0));
+}
+
 void __iounmap(volatile void __iomem *io_addr)
 {
        void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr);
index 62cc8f9..5bdeef9 100644 (file)
 #
 #   http://www.arm.linux.org.uk/developer/machines/?action=new
 #
-# XXX: This is a cut-down version of the file; it contains only machines that
-# XXX: are in mainline or have been submitted to the machine database within
-# XXX: the last 12 months.  If your entry is missing please email rmk at
-# XXX: <linux@arm.linux.org.uk>
+# This is a cut-down version of the file; it contains only machines that
+# are merged into mainline or have been edited in the machine database
+# within the last 12 months.  References to machine_is_NAME() do not count!
 #
 # Last update: Sat May 7 08:48:24 2011
 #
@@ -65,6 +64,7 @@ h7201                 ARCH_H7201              H7201                   161
 h7202                  ARCH_H7202              H7202                   162
 iq80321                        ARCH_IQ80321            IQ80321                 169
 ks8695                 ARCH_KS8695             KS8695                  180
+karo                   ARCH_KARO               KARO                    190
 smdk2410               ARCH_SMDK2410           SMDK2410                193
 ceiva                  ARCH_CEIVA              CEIVA                   200
 voiceblue              MACH_VOICEBLUE          VOICEBLUE               218
@@ -188,6 +188,7 @@ omap_2430sdp                MACH_OMAP_2430SDP       OMAP_2430SDP            900
 davinci_evm            MACH_DAVINCI_EVM        DAVINCI_EVM             901
 palmz72                        MACH_PALMZ72            PALMZ72                 904
 nxdb500                        MACH_NXDB500            NXDB500                 905
+apf9328                        MACH_APF9328            APF9328                 906
 palmt5                 MACH_PALMT5             PALMT5                  917
 palmtc                 MACH_PALMTC             PALMTC                  918
 omap_apollon           MACH_OMAP_APOLLON       OMAP_APOLLON            919
@@ -271,10 +272,12 @@ pcm038                    MACH_PCM038             PCM038                  1551
 ts_x09                 MACH_TS209              TS209                   1565
 at91cap9adk            MACH_AT91CAP9ADK        AT91CAP9ADK             1566
 mx31moboard            MACH_MX31MOBOARD        MX31MOBOARD             1574
+vision_ep9307          MACH_VISION_EP9307      VISION_EP9307           1578
 terastation_pro2       MACH_TERASTATION_PRO2   TERASTATION_PRO2        1584
 linkstation_pro                MACH_LINKSTATION_PRO    LINKSTATION_PRO         1585
 e350                   MACH_E350               E350                    1596
 ts409                  MACH_TS409              TS409                   1601
+rsi_ews                        MACH_RSI_EWS            RSI_EWS                 1609
 cm_x300                        MACH_CM_X300            CM_X300                 1616
 at91sam9g20ek          MACH_AT91SAM9G20EK      AT91SAM9G20EK           1624
 smdk6410               MACH_SMDK6410           SMDK6410                1626
@@ -331,6 +334,7 @@ smdkc100            MACH_SMDKC100           SMDKC100                1826
 tavorevb               MACH_TAVOREVB           TAVOREVB                1827
 saar                   MACH_SAAR               SAAR                    1828
 at91sam9m10g45ek       MACH_AT91SAM9M10G45EK   AT91SAM9M10G45EK        1830
+usb_a9g20              MACH_USB_A9G20          USB_A9G20               1841
 mxlads                 MACH_MXLADS             MXLADS                  1851
 linkstation_mini       MACH_LINKSTATION_MINI   LINKSTATION_MINI        1858
 afeb9260               MACH_AFEB9260           AFEB9260                1859
@@ -369,6 +373,7 @@ pcm043                      MACH_PCM043             PCM043                  2072
 sheevaplug             MACH_SHEEVAPLUG         SHEEVAPLUG              2097
 avengers_lite          MACH_AVENGERS_LITE      AVENGERS_LITE           2104
 mx51_babbage           MACH_MX51_BABBAGE       MX51_BABBAGE            2125
+tx37                   MACH_TX37               TX37                    2127
 rd78x00_masa           MACH_RD78X00_MASA       RD78X00_MASA            2135
 dm355_leopard          MACH_DM355_LEOPARD      DM355_LEOPARD           2138
 ts219                  MACH_TS219              TS219                   2139
@@ -379,6 +384,7 @@ omap_4430sdp                MACH_OMAP_4430SDP       OMAP_4430SDP            2160
 magx_zn5               MACH_MAGX_ZN5           MAGX_ZN5                2162
 btmavb101              MACH_BTMAVB101          BTMAVB101               2172
 btmawb101              MACH_BTMAWB101          BTMAWB101               2173
+tx25                   MACH_TX25               TX25                    2177
 omap3_torpedo          MACH_OMAP3_TORPEDO      OMAP3_TORPEDO           2178
 anw6410                        MACH_ANW6410            ANW6410                 2183
 imx27_visstrim_m10     MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10      2187
@@ -423,6 +429,7 @@ raumfeld_rc         MACH_RAUMFELD_RC        RAUMFELD_RC             2413
 raumfeld_connector     MACH_RAUMFELD_CONNECTOR RAUMFELD_CONNECTOR      2414
 raumfeld_speaker       MACH_RAUMFELD_SPEAKER   RAUMFELD_SPEAKER        2415
 tnetv107x              MACH_TNETV107X          TNETV107X               2418
+mx51_m2id              MACH_MX51_M2ID          MX51_M2ID               2428
 smdkv210               MACH_SMDKV210           SMDKV210                2456
 omap_zoom3             MACH_OMAP_ZOOM3         OMAP_ZOOM3              2464
 omap_3630sdp           MACH_OMAP_3630SDP       OMAP_3630SDP            2465
@@ -433,14 +440,17 @@ omapl138_hawkboard        MACH_OMAPL138_HAWKBOARD OMAPL138_HAWKBOARD      2495
 ts41x                  MACH_TS41X              TS41X                   2502
 phy3250                        MACH_PHY3250            PHY3250                 2511
 mini6410               MACH_MINI6410           MINI6410                2520
+tx51                   MACH_TX51               TX51                    2529
 mx28evk                        MACH_MX28EVK            MX28EVK                 2531
 smartq5                        MACH_SMARTQ5            SMARTQ5                 2534
 davinci_dm6467tevm     MACH_DAVINCI_DM6467TEVM DAVINCI_DM6467TEVM      2548
 mxt_td60               MACH_MXT_TD60           MXT_TD60                2550
 riot_bei2              MACH_RIOT_BEI2          RIOT_BEI2               2576
 riot_x37               MACH_RIOT_X37           RIOT_X37                2578
+pca101                 MACH_PCA101             PCA101                  2595
 capc7117               MACH_CAPC7117           CAPC7117                2612
 icontrol               MACH_ICONTROL           ICONTROL                2624
+gplugd                 MACH_GPLUGD             GPLUGD                  2625
 qsd8x50a_st1_5         MACH_QSD8X50A_ST1_5     QSD8X50A_ST1_5          2627
 mx23evk                        MACH_MX23EVK            MX23EVK                 2629
 ap4evb                 MACH_AP4EVB             AP4EVB                  2630
@@ -1113,3 +1123,5 @@ blissc                    MACH_BLISSC             BLISSC                  3491
 thales_adc             MACH_THALES_ADC         THALES_ADC              3492
 ubisys_p9d_evp         MACH_UBISYS_P9D_EVP     UBISYS_P9D_EVP          3493
 atdgp318               MACH_ATDGP318           ATDGP318                3494
+smdk4212               MACH_SMDK4212           SMDK4212                3638
+smdk4412               MACH_SMDK4412           SMDK4412                3765
index c998f7a..0fac965 100644 (file)
 #include <mach/simpad.h>
 #include "sa1100_generic.h"
  
-extern long get_cs3_shadow(void);
-extern void set_cs3_bit(int value); 
-extern void clear_cs3_bit(int value);
-
 static struct pcmcia_irqs irqs[] = {
        { 1, IRQ_GPIO_CF_CD, "CF_CD" },
 };
@@ -26,7 +22,7 @@ static struct pcmcia_irqs irqs[] = {
 static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
 {
 
-       clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+       simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
 
        skt->socket.pci_irq = IRQ_GPIO_CF_IRQ;
 
@@ -38,8 +34,8 @@ static void simpad_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
        soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
 
        /* Disable CF bus: */
-       //set_cs3_bit(PCMCIA_BUFF_DIS);
-       clear_cs3_bit(PCMCIA_RESET);       
+       /*simpad_set_cs3_bit(PCMCIA_BUFF_DIS);*/
+       simpad_clear_cs3_bit(PCMCIA_RESET);
 }
 
 static void
@@ -47,15 +43,16 @@ simpad_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
                           struct pcmcia_state *state)
 {
        unsigned long levels = GPLR;
-       long cs3reg = get_cs3_shadow();
+       long cs3reg = simpad_get_cs3_ro();
 
        state->detect=((levels & GPIO_CF_CD)==0)?1:0;
        state->ready=(levels & GPIO_CF_IRQ)?1:0;
-       state->bvd1=1; /* Not available on Simpad. */
-       state->bvd2=1; /* Not available on Simpad. */
+       state->bvd1 = 1; /* Might be cs3reg & PCMCIA_BVD1 */
+       state->bvd2 = 1; /* Might be cs3reg & PCMCIA_BVD2 */
        state->wrprot=0; /* Not available on Simpad. */
-  
-       if((cs3reg & 0x0c) == 0x0c) {
+
+       if ((cs3reg & (PCMCIA_VS1|PCMCIA_VS2)) ==
+                       (PCMCIA_VS1|PCMCIA_VS2)) {
                state->vs_3v=0;
                state->vs_Xv=0;
        } else {
@@ -75,23 +72,23 @@ simpad_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
        /* Murphy: see table of MIC2562a-1 */
        switch (state->Vcc) {
        case 0:
-               clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+               simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
                break;
 
        case 33:  
-               clear_cs3_bit(VCC_3V_EN|EN1);
-               set_cs3_bit(VCC_5V_EN|EN0);
+               simpad_clear_cs3_bit(VCC_3V_EN|EN1);
+               simpad_set_cs3_bit(VCC_5V_EN|EN0);
                break;
 
        case 50:
-               clear_cs3_bit(VCC_5V_EN|EN1);
-               set_cs3_bit(VCC_3V_EN|EN0);
+               simpad_clear_cs3_bit(VCC_5V_EN|EN1);
+               simpad_set_cs3_bit(VCC_3V_EN|EN0);
                break;
 
        default:
                printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
                        __func__, state->Vcc);
-               clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
+               simpad_clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1);
                local_irq_restore(flags);
                return -1;
        }
@@ -110,7 +107,7 @@ static void simpad_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
 static void simpad_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
 {
        soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs));
-       set_cs3_bit(PCMCIA_RESET);
+       simpad_set_cs3_bit(PCMCIA_RESET);
 }
 
 static struct pcmcia_low_level simpad_pcmcia_ops = {